Пример #1
0
/**
 * 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;
}
Пример #2
0
        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