private function internalFormatDateWithAllRooms() { $dateWithRooms = ''; if ($this->dates['termin']) { // if we have multiple rooms at the same time we display them all foreach ($this->dates['termin'] as $num => $termin_id) { $date = new SingleDate($termin_id); // if we want an int and format the date ourself if ($this->return_mode == 'int') { return $date->getStartTime(); } $isFirstDate = $num == 0; if ($isFirstDate) { $dateWithRooms = $this->internalFormatDateAndRoom($date); } else { $dateWithRooms .= ', ' . $this->formatRoom($date); } } } return $dateWithRooms; }
function bookable_rooms_action() { if (!getGlobalPerms($GLOBALS['user']->id) == 'admin') { $resList = new ResourcesUserRoomsList($GLOBALS['user']->id, false, false, false); if (!$resList->roomsExist()) { throw new AccessDeniedException(); } } $select_options = Request::optionArray('rooms'); $rooms = array_filter($select_options, function ($v) { return strlen($v) === 32; }); $events = array(); $dates = array(); $timestamps = array(); if (count(Request::getArray('new_date'))) { $new_date = array(); foreach (Request::getArray('new_date') as $one) { if ($one['name'] == 'startDate') { $dmy = explode('.', $one['value']); $new_date['day'] = (int) $dmy[0]; $new_date['month'] = (int) $dmy[1]; $new_date['year'] = (int) $dmy[2]; } $new_date[$one['name']] = (int) $one['value']; } if (check_singledate($new_date['day'], $new_date['month'], $new_date['year'], $new_date['start_stunde'], $new_date['start_minute'], $new_date['end_stunde'], $new_date['end_minute'])) { $start = mktime($new_date['start_stunde'], $new_date['start_minute'], 0, $new_date['month'], $new_date['day'], $new_date['year']); $ende = mktime($new_date['end_stunde'], $new_date['end_minute'], 0, $new_date['month'], $new_date['day'], $new_date['year']); $timestamps[] = $start; $timestamps[] = $ende; $event = new AssignEvent('new_date', $start, $ende, null, null, ''); $events[$event->getId()] = $event; } } foreach (Request::optionArray('selected_dates') as $one) { $date = new SingleDate($one); if ($date->getStartTime()) { $timestamps[] = $date->getStartTime(); $timestamps[] = $date->getEndTime(); $event = new AssignEvent($date->getTerminID(), $date->getStartTime(), $date->getEndTime(), null, null, ''); $events[$event->getId()] = $event; $dates[$date->getTerminID()] = $date; } } if (count($events)) { $result = array(); $checker = new CheckMultipleOverlaps(); $checker->setTimeRange(min($timestamps), max($timestamps)); foreach ($rooms as $room) { $checker->addResource($room); } $checker->checkOverlap($events, $result, "assign_id"); foreach ((array) $result as $room_id => $details) { foreach ($details as $termin_id => $conflicts) { if ($termin_id == 'new_date' && Request::option('singleDateID')) { $assign_id = SingleDateDB::getAssignID(Request::option('singleDateID')); } else { $assign_id = SingleDateDB::getAssignID($termin_id); } $filter = function ($a) use($assign_id) { if ($a['assign_id'] && $a['assign_id'] == $assign_id) { return false; } return true; }; if (!count(array_filter($conflicts, $filter))) { unset($result[$room_id][$termin_id]); } } } $result = array_filter($result); $this->render_json(array_keys($result)); return; } $this->render_nothing(); }
public function getGroupedDates($singledate = null, $metadate = null) { $i = 0; $first_event = FALSE; $semesterData = new SemesterData(); $all_semester = $semesterData->getAllSemesterData(); if (Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES) { // filtering foreach ($all_semester as $semester) { if ($semester['ende'] > time()) { $new_as[] = $semester; } } $all_semester = $new_as; } if (!$singledate) { foreach ($all_semester as $semester) { foreach ($this->metadate->cycles as $metadate_id => $cycle) { if ($metadate && $metadate_id != $metadate) continue; $group = $cycle->getSingleDates(); $metadate_has_termine = 0; $single = true; foreach ($group as $termin) { if (!$termin->isExTermin() && $termin->getStartTime() >= $semester['beginn'] && $termin->getStartTime() <= $semester['ende'] && (!Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES || $termin->getStartTime() >= time()) && $termin->isPresence()) { if (empty($first_event)) { $first_event = $termin->getStartTime(); } $groups[$i]["termin_ids"][$termin->getSingleDateId()] = TRUE; $metadate_has_termine = 1; if (empty($info[$i]['raum'])) { $info[$i]['raum'] = $termin->resource_id; } else if ($info[$i]['raum'] != $termin->resource_id) { $single = false; } } } if ($metadate_has_termine) { $info[$i]['name'] = $cycle->toString('long').' ('.$semester['name'].')'; $info[$i]['weekend'] = ($cycle->getDay() == 6 || $cycle->getDay() == 0); $this->applyTimeFilter($semester['beginn'], $semester['ende']); $raum = $this->getDatesTemplate('dates/seminar_predominant_html', array('cycle_id' => $metadate_id)); if ($raum) { $info[$i]['name'] .= '<br> '.$raum; $room_stat = $this->getStatOfNotBookedRooms($cycle->getMetadateId()); $info[$i]['name'] .= sprintf(_(" (%s von %s belegt)"), $room_stat['all'] - $room_stat['open'] , $room_stat['all']); $groups[$i]['complete'] = ($room_stat['all'] - $room_stat['open'] >= sizeof($groups[$i]['termin_ids'])) ? true : false; } if (!$single) unset($info[$i]['raum']); $i++; } } } if (!$metadate) { $irreg = $this->getSingleDates(); if (Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES) { $anzahl = 0; foreach ($irreg as $termin_id => $termin) { if ($termin->getStartTime() > time() - 3600) { $anzahl++; } } } else { $anzahl = sizeof($irreg); } if ($anzahl > Config::get()->RESOURCES_ALLOW_SINGLE_DATE_GROUPING) { $single = true; $first = true; foreach ($irreg as $termin_id => $termin) { if ($termin->isPresence()) { if (!Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES || $termin->getStartTime() > time() - 3600) { if (empty($first_event)) { $first_event = $termin->getStartTime(); } $groups[$i]["termin_ids"][$termin->getSingleDateId()] = TRUE; if (!$first) $info[$i]['name'] .= '<br> '; $info[$i]['name'] .= $termin->toString(); $resObj = ResourceObject::Factory($termin->resource_id); if ($link = $resObj->getFormattedLink($termin->getStartTime())) { $info[$i]['name'] .= '<br> '.$link; if (empty($info[$i]['raum'])) { $info[$i]['raum'] = $termin->resource_id; } else if ($info[$i]['raum'] != $termin->resource_id) { $single = false; } } if (date('w', $termin->getStartTime()) == 6 || date('w', $termin->getStartTime()) == 0) { $info[$i]['weekend'] = true; } $first = false; } } } if (!$single) unset($info[$i]['raum']); } else { foreach ($irreg as $termin_id => $termin) { if ($termin->isPresence()) { if (!Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES || $termin->getStartTime() > time() - 3600) { if (empty($first_event)) { $first_event = $termin->getStartTime(); } $groups[$i]["termin_ids"][$termin->getSingleDateId()] = TRUE; $info[$i]['name'] = $termin->toString(); $resObj = ResourceObject::Factory($termin->resource_id); if ($link = $resObj->getFormattedLink($termin->getStartTime())) { $info[$i]['name'] .= '<br> '.$link; $info[$i]['raum'] = $termin->resource_id; } $info[$i]['weekend'] = (date('w', $termin->getStartTime()) == 6 || date('w', $termin->getStartTime()) == 0); $i++; } } } } } } else { // we have a single date $termin = new SingleDate($singledate); $groups[0]['termin_ids'][$termin->getSingleDateID()] = TRUE; $info[0]['name'] = $termin->toString(); $info[0]['raum'] = $termin->resource_id; $info[0]['weekend'] = (date('w', $termin->getStartTime()) == 6 || date('w', $termin->getStartTime()) == 0); $first_event = $termin->getStartTime(); } return array('first_event' => $first_event, 'groups' => $groups, 'info' => $info); }