function delete() { $old_assign_object = new AssignObject($this->id); $ret = parent::delete(); $old_assign_object->delete(); return $ret; }
function addResource($resource_id) { // check, if the added resources needs to be checked $resObj = ResourceObject::Factory($resource_id); if (!$resObj->getMultipleAssign()) { if (!$this->begin || !$this->end) { throw new RuntimeException(__METHOD__ . ' could not add resource without time range'); } $this->resource_ids[] = $resource_id; $parameters = array(); $query = "SELECT DISTINCT assign_id\n FROM resources_assign ra\n LEFT JOIN resources_temporary_events rte USING(assign_id,resource_id)\n WHERE rte.event_id IS NULL AND\n ra.resource_id = :resource_id AND\n (ra.begin BETWEEN :begin AND :end OR (ra.begin <= :end AND (ra.repeat_end > :begin OR ra.end > :begin)))"; $parameters[':resource_id'] = $resource_id; $parameters[':begin'] = $this->begin; $parameters[':end'] = $this->end; $statement = DBManager::get()->prepare($query); $statement->execute($parameters); $missing_temporary_assigns = $statement->fetchAll(PDO::FETCH_COLUMN); if (count($missing_temporary_assigns)) { foreach ($missing_temporary_assigns as $assign_id) { $assign = new AssignObject($assign_id); $assign->updateResourcesTemporaryEvents(); } } return true; } return false; }
function deleteForeignAssigns() { //all assigns linked to resource if ($this->range_id) { $query = "SELECT assign_id FROM resources_assign WHERE assign_user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->range_id)); while ($assign_id = $statement->fetchColumn()) { AssignObject::Factory($assign_id)->delete(); } } if ($this->object_type == 'sem') { $query = "SELECT assign_id FROM termine AS t LEFT JOIN resources_assign AS ra ON (ra.assign_user_id = t.termin_id) WHERE range_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->range_id)); while ($assign_id = $statement->fetchColumn()) { AssignObject::Factory($assign_id)->delete(); } } }
//in some case, we load the perms from the assign object, if it has an owner if (($ObjectPerms->getUserPerm() != "admin") && ($change_object_schedules != "NEW") && (!$_SESSION['new_assign_object'])) { //load the assign-object perms of a saved object $SavedStateAssignObject = AssignObject::Factory($change_object_schedules); if ($SavedStateAssignObject->getAssignUserId()){ unset($ObjectPerms); $ObjectPerms = new AssignObjectPerms($change_object_schedules); } } if (($ObjectPerms->havePerm("tutor")) && Request::submitted('change_meta_to_single_assigns')) { $assObj = AssignObject::Factory($change_object_schedules); if ($assObj->getOwnerType() != 'sem'){ $events = $assObj->getEvents(); if (is_array($events)){ $create_assign = new AssignObject(false); $create_assign->setResourceId($assObj->getResourceId()); $create_assign->setAssignUserId($assObj->getAssignUserId()); $create_assign->setUserFreeName($assObj->getUserFreeName()); $assObj->delete(); foreach($events as $one_event){ $create_assign->setBegin($one_event->begin); $create_assign->setEnd($one_event->end); $create_assign->id = $one_event->id; $create_assign->store(true); } $return_schedule = TRUE; $change_object_schedules = $events[0]->id; header (sprintf("Location:resources.php?quick_view=%s&quick_view_mode=%s&show_msg=37", ($view_mode == "oobj") ? "openobject_sem_schedule" : "view_sem_schedule", $view_mode)); } }
function showSearchList($search_array, $check_assigns = FALSE) { //create the query if ($search_array['resources_search_range']){ $search_only = $this->getResourcesSearchRange($search_array['resources_search_range']); } $parameters = array(); if ($search_array['properties']) { $query = "SELECT a.resource_id, COUNT(a.resource_id) AS resource_id_count FROM resources_objects_properties AS a LEFT JOIN resources_objects AS b USING (resource_id) LEFT JOIN resources_categories USING (category_id)"; if (!hasGlobalOccupationAccess()) { $query .= " LEFT JOIN `resources_user_resources` AS rur ON (rur.`resource_id` = b.`resource_id`)"; } $query .= " WHERE "; $conditions = array(); $i = 0; foreach ($search_array['properties'] as $key => $val) { // if ($val == 'on') { // $val = 1; // } //let's create some possible wildcards if (strpos($val, '<=') !== false) { $val = (int) substr($val, strpos($val, '<=') + 2); $linking = '<='; } elseif (strpos($val, '>=') !== false) { $val = (int) substr($val, strpos($val, '>=') + 2); $linking = '>='; } elseif (strpos($val, '<') !== false) { $val = (int) substr($val, strpos($val, '<') + 1); $linking = '<'; } elseif (strpos($val, '>') !== false) { $val = (int) substr($val, strpos($val, '>') + 1); $linking = '>'; } else { $linking = '='; } $conditions[] = "(property_id = :key{$i} AND state {$linking} :state{$i})"; $parameters[':key' . $i] = $key; $parameters[':state' . $i] = $val; $i += 1; } $query .= (count($conditions) > 0) ? implode(' OR ', $conditions) : '1'; $query .= " AND b.name LIKE CONCAT('%', :needle, '%')"; $parameters[':needle'] = $search_array['search_exp']; if ($this->supress_hierachy_levels) { $query .= " AND b.category_id != ''"; } if ($this->show_only_rooms) { $query .= " AND is_room = 1"; } if ($search_array['resources_search_range']) { $query .= " AND b.resource_id IN (:resource_ids)"; $parameters[':resource_ids'] = $resource_ids ?: ''; } if (!hasGlobalOccupationAccess()) { $query .= " AND (b.`owner_id`=:user OR rur.`user_id`=:user)"; $parameters[':user'] = $GLOBALS['user']->id; } $query .= " GROUP BY a.resource_id HAVING resource_id_count = :count"; $parameters[':count'] = $i; $query .=" ORDER BY b.name"; } else { $query = "SELECT resource_id FROM resources_objects AS ro LEFT JOIN resources_categories USING (category_id)"; if (!hasGlobalOccupationAccess()) { $query .= " LEFT JOIN `resources_user_resources` USING (`resource_id`)"; } $query .= " WHERE ro.name LIKE CONCAT('%', :needle, '%')"; $parameters[':needle'] = $search_array['search_exp']; if ($this->supress_hierachy_levels) { $query .= " AND ro.category_id != ''"; } if ($this->show_only_rooms) { $query .= " AND is_room = 1"; } if ($search_array['resources_search_range']) { $query .= " AND ro.resource_id IN (:resource_ids)"; $parameters[':resource_ids'] = $search_only ?: ''; } if (!hasGlobalOccupationAccess()) { $query .= " AND (ro.`owner_id`=:user OR `user_id`=:user)"; $parameters[':user'] = $GLOBALS['user']->id; } $query .= " ORDER BY ro.name"; } $statement = DBManager::get()->prepare($query); $statement->execute($parameters); $resource_ids = $statement->fetchAll(PDO::FETCH_COLUMN); //if we have an empty result if (count($resource_ids) == 0 && $level == 0) { return FALSE; } foreach ($resource_ids as $resource_id) { $found_resources[$resource_id] = TRUE; } $day_of_week = false; //do further checks to determine free resources inthe given time range if ($search_array["search_assign_begin"] && $check_assigns) { $multiOverlaps = new CheckMultipleOverlaps; // >> changed for advanced search for room administrators if ($search_array["search_repeating"]) { // is this slot empty for the rest of the term? $semester_data = new SemesterData(); $semester = $semester_data->getSemesterDataByDate($search_array["search_assign_begin"]); // create the dummy assign object $assObj = new AssignObject(''); $assObj->setBegin($search_array["search_assign_begin"]); $assObj->setEnd($search_array["search_assign_end"]); $assObj->setRepeatEnd($semester["vorles_ende"]); $assObj->setRepeatInterval(1); $assObj->setRepeatQuantity(-1); // calculate stud.IP-day-of-week $day_of_week = date("w", $search_array["search_assign_begin"]); $day_of_week = $day_of_week == 0 ? 7 : $day_of_week; $assObj->setRepeatDayOfWeek($day_of_week); // set time range for checks $multiOverlaps->setAutoTimeRange(Array($assObj)); // generate and get the events represented by assign object $events = $assObj->getEvents(); foreach($events as $ev) { $event[$ev->getId()] = $ev; } } else { // the code for one specific slot $assEvt = new AssignEvent('', $search_array["search_assign_begin"], $search_array["search_assign_end"], '', ''); $multiOverlaps->setTimeRange($search_array["search_assign_begin"], $search_array["search_assign_end"]); $event[$assEvt->getId()] = $assEvt; } // << changed for advanced search for room administrators //add the found resources to the check-set foreach ($found_resources as $key=>$val) { $multiOverlaps->addResource($key, $day_of_week); } $multiOverlaps->checkOverlap($event, $result); //output foreach ($found_resources as $key=>$val) { if (!$result[$key]) { $this->showListObject($key); $result_count++; } } } else { //output foreach ($found_resources as $key=>$val) { $this->showListObject($key); $result_count++; } } return $result_count; }
/** * @deprecated since 3.4 use SeminarCycleDate::removeOutRangedSingleDates($start, $end, $seminar_id) * * removes all singleDates which are NOT between $start and $end */ function removeOutRangedSingleDates($start, $end, $seminar_id) { $query = "SELECT termin_id\n FROM termine\n WHERE range_id = ? AND (`date` NOT BETWEEN ? AND ?)\n AND NOT (metadate_id IS NULL OR metadate_id = '')"; $statement = DBManager::get()->prepare($query); $statement->execute(array($seminar_id, $start, $end)); $ids = $statement->fetchAll(PDO::FETCH_COLUMN); foreach ($ids as $id) { $termin = new SingleDate($id); $termin->delete(); unset($termin); } if (count($ids) > 0) { // remove all assigns for the dates in question $query = "SELECT assign_id FROM resources_assign WHERE assign_user_id IN (?)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($ids)); while ($id = $statement->fetchColumn()) { AssignObject::Factory($assign_id)->delete(); } } // $query = "DELETE FROM termine // WHERE range_id = ? AND (`date` NOT BETWEEN ? AND ?) // AND NOT (metadate_id IS NULL OR metadate_id = '')"; // $statement = DBManager::get()->prepare($query); // $statement->execute(array($seminar_id, $start, $end)); $query = "DELETE FROM ex_termine\n WHERE range_id = ? AND (`date` NOT BETWEEN ? AND ?)\n AND NOT (metadate_id IS NULL OR metadate_id = '')"; $statement = DBManager::get()->prepare($query); $statement->execute(array($seminar_id, $start, $end)); }
function showScheduleGraphical($print_view = false) { global $RELATIVE_PATH_RESOURCES, $cssSw, $view_mode, $ActualObjectPerms; $categories["na"] = 4; $categories["sd"] = 4; $categories["y"] = 3; $categories["m"] = 3; $categories["w"] = 0; $categories["d"] = 2; //an assign for a date corresponding to a (seminar-)metadate $categories["meta"] = 1; //select view to jump from the schedule if ($view_mode == "oobj") $view = "openobject_assign"; else $view = "edit_object_assign"; $start_time = $this->start_time; $end_time = $this->end_time; if ($_SESSION['resources_data']["schedule_time_range"] == -1) { $start_hour = 0; $end_hour = 12; } elseif ($_SESSION['resources_data']["schedule_time_range"] == 1) { $start_hour = 12; $end_hour = 23; } else { $start_hour = 8; $end_hour = 22; } if ($this->resources_groups->getGroupCount($this->group_id)){ $schedule=new SemGroupScheduleDayOfWeek($start_hour, $end_hour,$this->resources_groups->getGroupContent($this->group_id), $start_time, false); $schedule->add_link = "resources.php?cancel_edit_assign=1&quick_view=$view&quick_view_mode=".$view_mode."&add_ts="; $num_rep_events = 0; $num_single_events = 0; $num = 1; foreach ($this->resources_groups->getGroupContent($this->group_id) as $resource_to_show_id => $resource_id){ //fill the schedule $assign_events=new AssignEventList ($start_time, $end_time, $resource_id, '', '', TRUE, $_SESSION['resources_data']["show_repeat_mode"]); while ($event=$assign_events->nextEvent()) { $repeat_mode = $event->getRepeatMode(TRUE); if(in_array($repeat_mode, array('w','d','m','y'))){ $assign = AssignObject::Factory($event->getAssignId()); switch($event->repeat_mode){ case 'd': $add_info = '('.sprintf(_("täglich, %s bis %s"), strftime('%x',$assign->getBegin()), strftime('%x',$assign->getRepeatEnd())).')'; break; case 'w': if($assign->getRepeatInterval() == 1) $add_info = '('._("wöchentlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("wöchentlich").')'; break; case 'm': if($assign->getRepeatInterval() == 1) $add_info = '('._("monatlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("monatlich").')'; break; case 'y': if($assign->getRepeatInterval() == 1) $add_info = '('._("jährlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("jährlich").')'; break; } } else { $add_info = ''; } if (in_array($event->getOwnerType(), array('sem','date'))){ $sem_doz_names = array(); $c = 0; if ($event->getOwnerType() == 'sem'){ $sem_obj = Seminar::GetInstance($event->getAssignUserId()); } else { $sem_obj = Seminar::GetInstance(Seminar::GetSemIdByDateId($event->getAssignUserId())); } foreach($sem_obj->getMembers('dozent') as $dozent){ $sem_doz_names[] = $dozent['Nachname']; if (++$c > 2) break; } $add_info .= '(' . join(', ', $sem_doz_names) . ')'; } $schedule->addEvent($resource_to_show_id, $event->getName(get_config('RESOURCES_SCHEDULE_EXPLAIN_USER_NAME')), $event->getBegin(), $event->getEnd(), URLHelper::getLink('?show_object='.$resource_id.'&cancel_edit_assign=1&quick_view='.$view.'&quick_view_mode='.$view_mode.'&edit_assign_object='.$event->getAssignId()), $add_info, $categories[$repeat_mode]); } } } else { return; } if(!$print_view){ ?> <table border=0 celpadding=2 cellspacing=0 width="99%" align="center"> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="10%" align="left"> <a href="<? echo URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&previous_day=1')?>"><?= Icon::create('arr_2left', 'clickable', ['title' => _("Vorherigen Tag anzeigen")])->asImg(16, ["alt" => _("Vorherigen Tag anzeigen"), "border" => 0]) ?></a> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" align="center" style="font-weight:bold"> <? echo htmlReady(strftime('%A, %x (KW %V)', $start_time)); ?> <br> <?php $this->showSemWeekNumber($start_time); ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="10%" align="center"> <a href="<? echo URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&next_day=1')?>"><?= Icon::create('arr_2right', 'clickable', ['title' => _("Nächsten Tag anzeigen")])->asImg(16, ["alt" => _("Nächsten Tag anzeigen"), "border" => 0]) ?></a> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%" align="center" valign="bottom"> <? if ((!$_SESSION['resources_data']["schedule_time_range"]) || ($_SESSION['resources_data']["schedule_time_range"] == 1)): ?> <a href="<?= URLHelper::getLink('', array('quick_view' => $this->used_view, 'quick_view_mode' => $view_mode, 'time_range' => $_SESSION['resources_data']['schedule_time_range'] ? 'FALSE' : -1)) ?>"> <?= Icon::create('arr_2up', 'clickable', ['title' => _('Frühere Belegungen anzeigen')])->asImg(['class' => 'middle']) ?> </a> <? endif; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" colspan="2"> <? echo " <font size=-1>"._("Anzahl der Belegungen in diesem Zeitraum:")." ".$assign_events->numberOfEvents()."</font><br>"; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="20%" nowrap> <? print "<select style=\"font-size:10px;\" name=\"show_repeat_mode\">"; printf ("<option style=\"font-size:10px;\" %s value=\"all\">"._("alle Belegungen")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "all") ? "selected" : ""); printf ("<option %s style=\"font-size:10px;\" value=\"single\">"._("nur Einzeltermine")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "single") ? "selected" : ""); printf ("<option %s style=\"font-size:10px;\" value=\"repeated\">"._("nur Wiederholungstermine")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "repeated") ? "selected" : ""); print "</select>"; print " ".Icon::create('accept', 'accept', ['title' => _('Ansicht umschalten')])->asInput(["type" => "image", "class" => "middle", "name" => "send_schedule_repeat_mode"]); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="96%" colspan="3"> <? $schedule->showSchedule("html"); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?>" width="4%" align="center" valign="bottom"> <? if ((!$_SESSION['resources_data']['schedule_time_range']) || ($_SESSION['resources_data']['schedule_time_range'] == -1)): ?> <a href="<?= URLHelper::getLink('', array('quick_view' => $this->used_view, 'quick_view_mode' => $view_mode, 'time_range' => $_SESSION['resources_data']['schedule_time_range'] ? 'FALSE' : 1)) ?>"> <?= Icon::create('arr_2down', 'clickable', ['title' => _('Spätere Belegungen anzeigen')])->asImg() ?> </a> <? endif; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="20%" nowrap colspan="3"> </td> </tr> </table> </form> <? } else { ?> <table border="0" cellpadding="0" cellspacing="0" width="100%" align="center"> <tr> <td align="center"> <div style="font-size:150%;font-weight:bold;"> <?=htmlReady($this->resources_groups->getGroupName($this->group_id))?> <br> <? echo htmlReady(strftime('%A, %x (KW %V)', $start_time));?> <br> <?php $this->showSemWeekNumber($start_time); ?> </div> </td> </tr> <tr> <td> <? $schedule->showSchedule("html", true); ?> </td> </tr> </table> <? } }
/** * update all assigns for this resource * * @throws Exception */ function updateAllAssigns() { if (!$this->id) { throw new Exception('Missing resource-ID!'); } $query = "SELECT assign_id FROM resources_assign WHERE resource_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->id)); while ($assign_id = $statement->fetchColumn()) { AssignObject::Factory($assign_id)->updateResourcesTemporaryEvents(); } }
/** * change the start and the end for this date. * ONLY SAVE WHEN SHRINKING DATES, otherwise unwanted assign-collisions * may happen... * * @param int $start the start-time to set for the assign * @param int $end the end-time to set for the assign */ private function shrinkAssign($start, $end) { if ($assign_id = SingleDateDB::getAssignID($this->termin_id)) { $changeAssign = AssignObject::Factory($assign_id); $changeAssign->setResourceId($this->resource_id); $changeAssign->chng_flag = true; $changeAssign->setBegin($start); $changeAssign->setEnd($end); $changeAssign->setRepeatEnd($end); $changeAssign->store(); } }
/** * returns an array of AssignObjects for one cycle for given room * assigns are not stored, used for collision checks before the cycle is stored * (for now only in admin_seminare_assi.php) * * @param string id of cycle * @param string id of room * @return array array of AssignObject */ function getVirtualMetaAssignObjects($metadate_id, $resource_id) { $ret = array(); foreach ($this->getVirtualSingleDates($metadate_id) as $semester_id => $dates_for_semester) { list($dates, $dates_to_delete) = array_values($dates_for_semester); foreach ($dates as $d) { if (!$d->isExTermin()) { $ao = new AssignObject(null); $ao->setResourceId($resource_id); $ao->setBegin($d->getStartTime()); $ao->setEnd($d->getEndTime()); $ao->setRepeatEnd($d->getEndTime()); $ao->setRepeatQuantity(0); $ao->setRepeatInterval(0); $ao->setRepeatMonthOfYear(0); $ao->setRepeatDayOfMonth(0); $ao->setRepeatWeekOfMonth(0); $ao->setRepeatDayOfWeek(0); $ret[] = $ao; } } } return $ret; }
function deleteAssignedRooms() { if (!$this->seminar_id) { return; } $query = "SELECT assign_id FROM resources_assign LEFT JOIN resources_objects USING (resource_id) LEFT JOIN resources_categories USING (category_id) WHERE resources_assign.assign_user_id = ? AND resources_categories.is_room = 1"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->seminar_id)); while ($assign_id = $statement->fetchColumn()) { AssignObject::Factory($assign_id)->delete(); } }
function showScheduleGraphical($print_view = false) { global $RELATIVE_PATH_RESOURCES, $cssSw, $view_mode, $ActualObjectPerms; $categories["na"] = 4; $categories["sd"] = 4; $categories["y"] = 3; $categories["m"] = 3; $categories["w"] = 0; $categories["d"] = 2; //an assign for a date corresponding to a (seminar-)metadate $categories["meta"] = 1; //select view to jump from the schedule if ($this->used_view == "openobject_schedule") $view = "openobject_assign"; else $view = "edit_object_assign"; $start_time = $this->start_time; $end_time = $this->end_time; if ($_SESSION['resources_data']["schedule_time_range"] == -1) { $start_hour = 0; $end_hour = 12; } elseif ($_SESSION['resources_data']["schedule_time_range"] == 1) { $start_hour = 12; $end_hour = 23; } else { $start_hour = 8; $end_hour = 22; } $room_group = RoomGroups::GetInstance(); if ($room_group->getGroupCount($this->group_id)){ $schedule=new SemGroupScheduleDayOfWeek($start_hour, $end_hour,$room_group->getGroupContent($this->group_id), $start_time, $this->dow); $schedule->add_link = "resources.php?cancel_edit_assign=1&quick_view=$view&quick_view_mode=".$view_mode."&add_ts="; $num_rep_events = 0; $num_single_events = 0; $num = 1; foreach ($room_group->getGroupContent($this->group_id) as $room_to_show_id => $room_id){ if ($_SESSION['resources_data']["show_repeat_mode"] == 'repeated' || $_SESSION['resources_data']["show_repeat_mode"] == 'all'){ $events = createNormalizedAssigns($room_id, $start_time, $end_time,get_config('RESOURCES_SCHEDULE_EXPLAIN_USER_NAME'), $this->dow); foreach($events as $id => $event){ $repeat_mode = $event['repeat_mode']; $add_info = ($event['sem_doz_names'] ? '('.$event['sem_doz_names'].') ' : ''); $add_info .= ($repeat_mode == 'w' && $event['repeat_interval'] == 1 ? '('._("wöchentlich").')' : ''); $add_info .= ($repeat_mode == 'w' && $event['repeat_interval'] > 1 ? '('.$event['repeat_interval'].'-'._("wöchentlich").')' : ''); $name = $event['name']; $schedule->addEvent($room_to_show_id, $name, $event['begin'], $event['end'], URLHelper::getLink('?show_object='.$room_id.'&cancel_edit_assign=1&quick_view='.$view.'&quick_view_mode='.$view_mode.'&edit_assign_object='.$event['assign_id']), $add_info, $categories[$repeat_mode]); ++$num_rep_events; } } // nur zukünftige Einzelbelegungen if ( ($end_time > time()) && ($_SESSION['resources_data']["show_repeat_mode"] == 'single' || $_SESSION['resources_data']["show_repeat_mode"] == 'all')){ $a_start_time = ($start_time > time() ? $start_time : time()); $a_end_time = $end_time; $assign_events = new AssignEventList ($a_start_time, $a_end_time, $room_id, '', '', TRUE, 'semschedulesingle', $this->dow); while ($event = $assign_events->nextEvent()) { //mehrtägige nur am passenden Tag anzeigen if ($event->repeat_mode == 'sd' && date('N', $event->begin) != $this->dow) continue; if(in_array($event->repeat_mode, array('w','d','m','y'))){ if(strftime('%u', $event->getBegin()) != $this->dow) continue; $assign = AssignObject::Factory($event->getAssignId()); switch($event->repeat_mode){ case 'd': $add_info = '('.sprintf(_("täglich, %s bis %s"), strftime('%x',$assign->getBegin()), strftime('%x',$assign->getRepeatEnd())).')'; break; case 'w': if($assign->getRepeatInterval() == 1) $add_info = '('._("wöchentlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("wöchentlich").')'; break; case 'm': if($assign->getRepeatInterval() == 1) $add_info = '('._("monatlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("monatlich").')'; break; case 'y': if($assign->getRepeatInterval() == 1) $add_info = '('._("jährlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("jährlich").')'; break; } } else { $add_info = ''; } $schedule->addEvent($room_to_show_id, 'EB'.$num++.':' . $event->getName(get_config('RESOURCES_SCHEDULE_EXPLAIN_USER_NAME')), $event->getBegin(), $event->getEnd(), URLHelper::getLink('?show_object='.$room_id.'&cancel_edit_assign=1&quick_view='.$view.'&quick_view_mode='.$view_mode.'&edit_assign_object='.$event->getAssignId()), $add_info, $categories[$event->repeat_mode]); ++$num_single_events; $single_assigns[] = $event; } } } } else { return; } if(!$print_view){ ?> <table border=0 celpadding=2 cellspacing=0 width="99%" align="center"> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="10%" align="left"> <a href="<?= URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&previous_day=1') ?>"> <?= Icon::create('arr_2left', 'clickable')->asImg(['class' => "middle", 'alt' => "Vorherigen Tag anzeigen", 'title' => "Vorherigen Tag anzeigen"]) ?> </a> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" align="center"> <b> <? printf(_("Wochentag: %s"), htmlReady(strftime('%A', $schedule->base_date))); echo '<br>' . htmlReady($this->semester['name']) . ' - ' . date ("d.m.Y", $start_time), " - ", date ("d.m.Y", $end_time); ?> </b> <br> </td> <td class="<? echo $cssSw->getClass() ?>" width="10%" align="center"> <a href="<?= URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&next_day=1') ?>"> <?= Icon::create('arr_2right', 'clickable')->asImg(['class' => "middle", 'alt' => _("Nächsten Tag anzeigen"), 'title' => _("Nächsten Tag anzeigen")]) ?> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%" align="center" valign="bottom"> <? if ((!$_SESSION['resources_data']["schedule_time_range"]) || ($_SESSION['resources_data']["schedule_time_range"] == 1)): ?> <a href="<?= URLHelper::getLink('', array('quick_view' => $this->used_view, 'quick_view_mode' => $view_mode, 'time_range' => $_SESSION['resources_data']['schedule_time_range'] ? 'FALSE' : -1)) ?>"> <?= Icon::create('arr_2up', 'clickable', ['title' => _('Frühere Belegungen anzeigen')])->asImg(['class' => 'middle']) ?> </a> <? endif; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" colspan="2"> <? if ($_SESSION['resources_data']["show_repeat_mode"] == 'repeated' || $_SESSION['resources_data']["show_repeat_mode"] == 'all'){ echo " <font size=-1>"._("Anzahl der regelmäßigen Belegungen in diesem Zeitraum:")." ".$num_rep_events."</font><br>"; } if ($_SESSION['resources_data']["show_repeat_mode"] == 'single' || $_SESSION['resources_data']["show_repeat_mode"] == 'all'){ echo " <font size=-1>"._("Anzahl der Einzelbelegungen in diesem Zeitraum:")." ".$num_single_events."</font><br>"; } ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="20%" nowrap> <? print "<select style=\"font-size:10px;\" name=\"show_repeat_mode\">"; printf ("<option style=\"font-size:10px;\" %s value=\"all\">"._("alle Belegungen")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "all") ? "selected" : ""); printf ("<option %s style=\"font-size:10px;\" value=\"single\">"._("nur Einzeltermine")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "single") ? "selected" : ""); printf ("<option %s style=\"font-size:10px;\" value=\"repeated\">"._("nur Wiederholungstermine")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "repeated") ? "selected" : ""); print "</select>"; print " ".Icon::create('accept', 'accept', ['title' => _('Ansicht umschalten')])->asInput(["type" => "image", "class" => "middle", "name" => "send_schedule_repeat_mode"]); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="96%" colspan="3"> <? $schedule->showSchedule("html"); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?>" width="4%" align="center" valign="bottom"> <? if ((!$_SESSION['resources_data']['schedule_time_range']) || ($_SESSION['resources_data']['schedule_time_range'] == -1)): ?> <a href="<?= URLHelper::getLink('', array('quick_view' => $this->used_view, 'quick_view_mode' => $view_mode, 'time_range' => $_SESSION['resources_data']['schedule_time_range'] ? 'FALSE' : 1)) ?>"> <?= Icon::create('arr_2down', 'clickable', ['title' => _('Frühere Belegungen anzeigen')])->asImg(['class' => 'middle']) ?> </a> <? endif; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="20%" nowrap colspan="3"> </td> </tr> <?php if (($_SESSION['resources_data']["show_repeat_mode"] == 'single' || $_SESSION['resources_data']["show_repeat_mode"] == 'all') && $num_single_events ){ ?> <tr> <td class="<? echo $cssSw->getClass() ?>" width="4%" align="center" valign="bottom"> </td> <td class="<? echo $cssSw->getClass() ?>" colspan="3"> <strong><?=_("Einzelbelegungen:")?></strong> <br> <?php $num = 1; foreach($single_assigns as $event) { echo LinkButton::create(_('Eigenschaften'), URLHelper::getURL('?show_object=' . $event->getResourceId() . '&quick_view=' . $view . '&quick_view_mode=' . $quick_view_mode . '&edit_assign_object=' . $event->getAssignId())); printf (" <font size=-1>"._("%s ist von <b>%s</b> bis <b>%s</b>, belegt von <b>%s</b>")."</font><br>",'EB'.$num++.': ' . htmlReady(getResourceObjectName($event->getResourceId())), strftime("%A, %d.%m.%Y %H:%M", $event->getBegin()), strftime("%A, %d.%m.%Y %H:%M", $event->getEnd()), $event->getName()); } ?> </tr> <?php } ?> </table> </form> <? } else { ?> <table border="0" cellpadding="0" cellspacing="0" width="100%" align="center"> <tr> <td align="center"> <div style="font-size:150%;font-weight:bold;"> <?=htmlReady($room_group->getGroupName($this->group_id) . ' - ' . $this->semester['name'])?> <br> <? printf(_("Wochentag: %s"), htmlReady(strftime('%A', $schedule->base_date))); ?> </div> <div style="font-size:100%;font-weight:bold;margin-bottom:10px;"> <?=date ("d.m.Y", $start_time). " - ". date ("d.m.Y", $end_time)?> (<?=($this->timespan == 'course_time' ? _("Vorlesungszeit") : _("vorlesungsfreie Zeit"))?>) </div> </td> </tr> <tr> <td> <? $schedule->showSchedule("html", true); ?> </td> </tr> <? if (($_SESSION['resources_data']["show_repeat_mode"] == 'single' || $_SESSION['resources_data']["show_repeat_mode"] == 'all') && $num_single_events ){ ?> <tr> <td> <strong> <?=_("Einzelbelegungen:")?> (<?=strftime("%d.%m.%Y",$a_start_time) . ' - ' . strftime("%d.%m.%Y",$a_end_time)?>) </strong> <br> <? $num = 1; foreach($single_assigns as $event) { printf ("<font size=-1>"._("%s ist von <b>%s</b> bis <b>%s</b>, belegt von <b>%s</b>")."</font><br>",'EB'.$num++.': ' . htmlReady(getResourceObjectName($event->getResourceId())), strftime("%A, %d.%m.%Y %H:%M", $event->getBegin()), strftime("%A, %d.%m.%Y %H:%M", $event->getEnd()), htmlready($event->getName())); } ?> </td> </tr> <?}?> </table> <? } }
static function deleteSingleDate($id, $ex_termin) { if (Config::get()->RESOURCES_ENABLE) { // delete resource assignment, if any $killAssign = AssignObject::Factory(self::getAssignID($id)); $killAssign->delete(); if ($request_id = self::getRequestID($id)) { $rr = new RoomRequest($request_id); $rr->delete(); } } // Prepare query that deletes all entries for a given termin id // from a given table $query = "DELETE FROM :table WHERE termin_id = :termin_id"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':termin_id', $id); // Execute statement for the termin itself (ex_termin if neccessary) $statement->bindValue(':table', $ex_termin ? 'ex_termine' : 'termine', StudipPDO::PARAM_COLUMN); $statement->execute(); // Execute statement for themen_termine $statement->bindValue(':table', 'themen_termine', StudipPDO::PARAM_COLUMN); $statement->execute(); // Execute statement for termin_related_persons $query = "DELETE FROM termin_related_persons WHERE range_id = :termin_id"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':termin_id', $id); $statement->execute(); return true; }