/** * Saves room when updating a session includes checks for collision * detection and if there is a custom room defined then creates the * custom room record. * * @param $sessionid int ID of session to save room for * @param $data stdClass Form data containing room information * either predefined room id or data for new custom room * @param boolean */ function facetoface_save_session_room($sessionid, $data) { global $CFG, $DB; // Get session and date info $session = $DB->get_record('facetoface_sessions', array('id' => $sessionid)); $todb = new stdClass; $todb->id = $sessionid; if (empty($data->customroom)) { // Pre-defined room if (!empty($data->pdroomid) && $data->pdroomid == $session->roomid) { // Same room, no need to update return true; } elseif (!empty($data->pdroomid)) { // Ensure room is available $sessiondates = $DB->get_records('facetoface_sessions_dates', array('sessionid' => $sessionid)); $timeslots = array(); foreach ($sessiondates as $d) { $timeslots = array($d->timestart, $d->timefinish); } if (!$availablerooms = facetoface_get_available_rooms($timeslots, 'id', array($sessionid))) { // No pre-defined rooms available! return false; } if (!in_array($data->pdroomid, array_keys($availablerooms))) { // Selected pre-defined room not available! return false; } } $todb->roomid = $data->pdroomid; } else { // Custom room $sql = "SELECT r.* FROM {facetoface_sessions} s INNER JOIN {facetoface_room} r ON s.roomid = r.id WHERE s.id = ? AND r.custom = 1"; if (!$room = $DB->get_record_sql($sql, array($sessionid))) { // Create $room = new stdClass(); $room->custom = 1; $room->name = $data->croomname; $room->building = $data->croombuilding; $room->address = $data->croomaddress; $room->capacity = $data->croomcapacity; $room->timecreated = time(); $room->timemodified = $room->timecreated; $roomid = $DB->insert_record('facetoface_room', $room); $todb->roomid = $roomid; } else { // Update $room->name = $data->croomname; $room->custom = 1; $room->building = $data->croombuilding; $room->address = $data->croomaddress; $room->capacity = $data->croomcapacity; $room->timemodified = time(); $DB->update_record('facetoface_room', $room); } } if (isset($todb->roomid)) { $DB->update_record('facetoface_sessions', $todb); } if (empty($data->customroom)) { // Purge potentially orphaned custom room $DB->delete_records('facetoface_room', array('custom' => 1, 'id' => $session->roomid)); } return true; }
WHERE r.custom = 0 ORDER BY r.name, r.building, r.address"; if ($rooms = $DB->get_records_sql($sql)) { $allrooms = array(); foreach ($rooms as $room) { $roomobject = new stdClass(); $roomobject->id = $room->id; $roomobject->fullname = get_string('predefinedroom', 'facetoface', $room); $allrooms[$room->id] = $roomobject; } $availablerooms = facetoface_get_available_rooms($timeslotsarray, 'id', array($sessionid)); if ($unavailablerooms = array_diff(array_keys($allrooms), array_keys($availablerooms))) { $unavailablerooms = array_combine($unavailablerooms, $unavailablerooms); // make array keys and values the same //add alreadybooked string to fullname foreach ($unavailablerooms as $key => $unavailable) { if (isset($allrooms[$key])) { $allrooms[$key]->fullname .= get_string('roomalreadybooked', 'facetoface'); } } } } else { $allrooms = array(); $unavailablerooms = array(); } // Display page