113 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| use Engelsystem\Models\Room;
 | |
| use Engelsystem\ValidationResult;
 | |
| use Illuminate\Support\Collection;
 | |
| 
 | |
| /**
 | |
|  * Validate a name for a room.
 | |
|  *
 | |
|  * @param string $name    The new name
 | |
|  * @param int    $room_id The room id
 | |
|  * @return ValidationResult
 | |
|  */
 | |
| function Room_validate_name(string $name, int $room_id)
 | |
| {
 | |
|     $valid = true;
 | |
|     if (empty($name)) {
 | |
|         $valid = false;
 | |
|     }
 | |
| 
 | |
|     $roomCount = Room::query()
 | |
|         ->where('name', $name)
 | |
|         ->where('id', '!=', $room_id)
 | |
|         ->count();
 | |
|     if ($roomCount) {
 | |
|         $valid = false;
 | |
|     }
 | |
| 
 | |
|     return new ValidationResult($valid, $name);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * returns a list of rooms.
 | |
|  *
 | |
|  * @return Room[]|Collection
 | |
|  */
 | |
| function Rooms()
 | |
| {
 | |
|     return Room::orderBy('name')->get();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Returns Room id array
 | |
|  *
 | |
|  * @return int[]
 | |
|  */
 | |
| function Room_ids()
 | |
| {
 | |
|     return Room::query()
 | |
|         ->select('id')
 | |
|         ->pluck('id')
 | |
|         ->toArray();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Delete a room
 | |
|  *
 | |
|  * @param Room $room
 | |
|  */
 | |
| function Room_delete(Room $room)
 | |
| {
 | |
|     $room->delete();
 | |
|     engelsystem_log('Room deleted: ' . $room->name);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Create a new room
 | |
|  *
 | |
|  * @param string      $name    Name of the room
 | |
|  * @param string|null $map_url URL to a map tha can be displayed in an iframe
 | |
|  * @param string|null $description
 | |
|  *
 | |
|  * @return null|int
 | |
|  */
 | |
| function Room_create(string $name, string $map_url = null, string $description = null)
 | |
| {
 | |
|     $room = new Room();
 | |
|     $room->name = $name;
 | |
|     $room->description = $description;
 | |
|     $room->map_url = $map_url;
 | |
|     $room->save();
 | |
| 
 | |
|     engelsystem_log(
 | |
|         'Room created: ' . $name
 | |
|         . ', map_url: ' . $map_url
 | |
|         . ', description: ' . $description
 | |
|     );
 | |
| 
 | |
|     return $room->id;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Update a room
 | |
|  *
 | |
|  * @param int         $room_id     The rooms id
 | |
|  * @param string      $name        Name of the room
 | |
|  * @param string|null $map_url     URL to a map tha can be displayed in an iframe
 | |
|  * @param string|null $description Markdown description
 | |
|  */
 | |
| function Room_update(int $room_id, string $name, string $map_url = null, string $description = null)
 | |
| {
 | |
|     $room = Room::find($room_id);
 | |
|     $room->name = $name;
 | |
|     $room->description = $description ?: null;
 | |
|     $room->map_url = $map_url ?: null;
 | |
|     $room->save();
 | |
| 
 | |
|     engelsystem_log(
 | |
|         'Room updated: ' . $name .
 | |
|         ', map_url: ' . $map_url .
 | |
|         ', description: ' . $description
 | |
|     );
 | |
| }
 | 
