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; }
/** * creates a new studygroup with respect to given form data * * Triggers a StudygroupDidCreate notification using the ID of the * new studygroup as subject. * * @return void */ function create_action() { global $perm; $admin = $perm->have_perm('admin'); $errors = array(); CSRFProtection::verifyUnsafeRequest(); foreach ($GLOBALS['SEM_CLASS'] as $key => $class) { if ($class['studygroup_mode']) { $sem_class = $class; break; } } if (Request::getArray('founders')) { $founders = Request::optionArray('founders'); $this->flash['founders'] = $founders; } // search for founder if ($admin && Request::submitted('search_founder')) { $search_for_founder = Request::get('search_for_founder'); // do not allow to search with the empty string if ($search_for_founder) { // search for the user $query = "SELECT user_id, {$GLOBALS['_fullname_sql']['full_rev']} AS fullname, username, perms\n FROM auth_user_md5\n LEFT JOIN user_info USING (user_id)\n WHERE perms NOT IN ('root', 'admin')\n AND (username LIKE CONCAT('%', :needle, '%')\n OR Vorname LIKE CONCAT('%', :needle, '%')\n OR Nachname LIKE CONCAT('%', :needle, '%'))\n LIMIT 500"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':needle', $search_for_founder); $statement->execute(); $results_founders = $statement->fetchGrouped(PDO::FETCH_ASSOC); } if (is_array($results_founders)) { $this->flash['success'] = sizeof($results_founders) == 1 ? sprintf(_("Es wurde %s Person gefunden:"), sizeof($results_founders)) : sprintf(_("Es wurden %s Personen gefunden:"), sizeof($results_founders)); } else { $this->flash['info'] = _("Es wurden kein Personen gefunden."); } $this->flash['create'] = true; $this->flash['results_choose_founders'] = $results_founders; $this->flash['request'] = Request::getInstance(); // go to the form again $this->redirect('course/studygroup/new/'); } else { if ($admin && Request::submitted('add_founder')) { $founders = array(Request::option('choose_founder')); $this->flash['founders'] = $founders; $this->flash['create'] = true; $this->flash['request'] = Request::getInstance(); $this->redirect('course/studygroup/new/'); } else { if ($admin && Request::submitted('remove_founder')) { unset($founders); $this->flash['founders'] = $founders; $this->flash['create'] = true; $this->flash['request'] = Request::getInstance(); $this->redirect('course/studygroup/new/'); } else { if ($admin && Request::submitted('new_search')) { $this->flash['create'] = true; $this->flash['request'] = Request::getInstance(); $this->redirect('course/studygroup/new/'); } else { if (!Request::get('groupname')) { $errors[] = _("Bitte Gruppennamen angeben"); } else { $query = "SELECT 1 FROM seminare WHERE name = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array(Request::get('groupname'))); if ($statement->fetchColumn()) { $errors[] = _("Eine Veranstaltung/Studiengruppe mit diesem Namen existiert bereits. Bitte wählen Sie einen anderen Namen"); } } if (!Request::get('grouptermsofuse_ok')) { $errors[] = _("Sie müssen die Nutzungsbedingungen durch Setzen des Häkchens bei 'Einverstanden' akzeptieren."); } if ($admin && (!is_array($founders) || !sizeof($founders))) { $errors[] = _("Sie müssen mindestens einen Gruppengründer eintragen!"); } if (count($errors)) { $this->flash['errors'] = $errors; $this->flash['create'] = true; $this->flash['request'] = Request::getInstance(); $this->redirect('course/studygroup/new/'); } else { // Everything seems fine, let's create a studygroup $sem_types = studygroup_sem_types(); $sem = new Seminar(); $sem->name = Request::get('groupname'); // seminar-class quotes itself $sem->description = Request::get('groupdescription'); // seminar-class quotes itself $sem->status = $sem_types[0]; $sem->read_level = 1; $sem->write_level = 1; $sem->institut_id = Config::Get()->STUDYGROUP_DEFAULT_INST; $mods = new Modules(); $bitmask = 0; $sem->visible = 1; if (Request::get('groupaccess') == 'all') { $sem->admission_prelim = 0; } else { $sem->admission_prelim = 1; if (Config::get()->STUDYGROUPS_INVISIBLE_ALLOWED && Request::get('groupaccess') == 'invisible') { $sem->visible = 0; } $sem->admission_prelim_txt = _("Die ModeratorInnen der Studiengruppe können Ihren Aufnahmewunsch bestätigen oder ablehnen. Erst nach Bestätigung erhalten Sie vollen Zugriff auf die Gruppe."); } $sem->admission_binding = 0; $semdata = new SemesterData(); $this_semester = $semdata->getSemesterDataByDate(time()); $sem->semester_start_time = $this_semester['beginn']; $sem->semester_duration_time = -1; if ($admin) { // insert founder(s) foreach ($founders as $user_id) { $stmt = DBManager::get()->prepare("INSERT INTO seminar_user\n (seminar_id, user_id, status, gruppe)\n VALUES (?, ?, 'dozent', 8)"); $stmt->execute(array($sem->id, $user_id)); } $this->founders = null; $this->flash['founders'] = null; } else { $user_id = $GLOBALS['auth']->auth['uid']; // insert dozent $query = "INSERT INTO seminar_user (seminar_id, user_id, status, gruppe)\n VALUES (?, ?, 'dozent', 8)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem->id, $user_id)); } // de-/activate modules $mods = new Modules(); $admin_mods = new AdminModules(); $bitmask = 0; $available_modules = StudygroupModel::getInstalledModules(); $active_plugins = Request::getArray('groupplugin'); foreach ($available_modules as $key => $enable) { $module_name = $sem_class->getSlotModule($key); if ($module_name && ($sem_class->isModuleMandatory($module_name) || !$sem_class->isModuleAllowed($module_name))) { continue; } if (!$module_name) { $module_name = $key; } if ($active_plugins[$module_name]) { // activate modules $mods->setBit($bitmask, $mods->registered_modules[$key]["id"]); $methodActivate = "module" . ucfirst($key) . "Activate"; if (method_exists($admin_mods, $methodActivate)) { $admin_mods->{$methodActivate}($sem->id); } } } // always activate participants list $mods->setBit($bitmask, $mods->registered_modules["participants"]["id"]); $sem->modules = $bitmask; $sem->store(); // de-/activate plugins $available_plugins = StudygroupModel::getInstalledPlugins(); $plugin_manager = PluginManager::getInstance(); foreach ($available_plugins as $key => $name) { if (!$sem_class->isModuleAllowed($key)) { continue; } $plugin = $plugin_manager->getPlugin($key); $plugin_id = $plugin->getPluginId(); if ($active_plugins[$key] && $name) { $plugin_manager->setPluginActivated($plugin_id, $sem->id, true); } else { $plugin_manager->setPluginActivated($plugin_id, $sem->id, false); } } NotificationCenter::postNotification('StudygroupDidCreate', $sem->id); // the work is done. let's visit the brand new studygroup. $this->redirect(URLHelper::getURL('seminar_main.php?auswahl=' . $sem->id)); } } } } } }
public function setFilter($timestamp) { global $semester; if ($timestamp == 'all') { $_SESSION['raumzeitFilter'] = 'all'; $this->applyTimeFilter(0, 0); } else { if (!$semester) $semester = new SemesterData(); $filterSemester = $semester->getSemesterDataByDate($timestamp); $_SESSION['raumzeitFilter'] = $filterSemester['beginn']; $this->applyTimeFilter($filterSemester['beginn'], $filterSemester['ende']); } }
/** * Checks and adjusts defined filters */ private function checkFilter() { if (Request::option('cmd') == 'applyFilter') { $_SESSION['raumzeitFilter'] = Request::get('newFilter'); } if ($this->course->getEndSemester() == 0 && !$this->course->hasDatesOutOfDuration()) { $_SESSION['raumzeitFilter'] = $this->course->getStartSemester(); } // Zeitfilter anwenden if ($_SESSION['raumzeitFilter'] == '') { $_SESSION['raumzeitFilter'] = 'all'; } if ($_SESSION['raumzeitFilter'] != 'all') { if ($_SESSION['raumzeitFilter'] < $this->course->getStartSemester() || $_SESSION['raumzeitFilter'] > $this->course->getEndSemesterVorlesEnde()) { $_SESSION['raumzeitFilter'] = $this->course->getStartSemester(); } $semester = new SemesterData(); $filterSemester = $semester->getSemesterDataByDate($_SESSION['raumzeitFilter']); $this->course->applyTimeFilter($filterSemester['beginn'], $filterSemester['ende']); } }
function showTimeRange() { $colspan = $this->mode == 'browse' ? ' colspan="2" ' : ''; ?> <tr> <td <? $this->cssSw->switchClass(); echo $this->cssSw->getFullClass() ?> > <?=_("gefundene Ressourcen sollen zu folgender Zeit <u>nicht</u> belegt sein:")?> <br> </td> </tr> <tr> <td <? $this->cssSw->switchClass(); echo $this->cssSw->getFullClass() ?> > <br> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td width="120"> <b><?= _('Einzeltermin:') ?></b> </td> <td> <?=_("Beginn")?>: <input type="text" style="font-size:8pt;" name="search_begin_hour" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_begin"]) ? date("H", $this->searchArray["search_assign_begin"]) : _("ss")?>"> <input type="text" style="font-size:8pt;" name="search_begin_minute" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_begin"]) ? date("i", $this->searchArray["search_assign_begin"]) : _("mm")?>"> <?=_("Uhr")?> <?=_("Ende")?>: <input type="text" style="font-size:8pt;" name="search_end_hour" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_end"]) ? date("H", $this->searchArray["search_assign_end"]) : _("ss")?>"> <input type="text" style="font-size:8pt;" name="search_end_minute" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_end"]) ? date("i", $this->searchArray["search_assign_end"]) : _("mm")?>"> <?=_("Uhr")?> <br> <?=_("Datum")?>: <input name="searchDate" id="searchDate" size="10" value="<?=($this->searchArray["search_assign_begin"]) ? date("j.n.Y", $this->searchArray["search_assign_begin"]) : date('j.n.Y', time())?>"> <script> jQuery('#searchDate').datepicker(); </script> <!-- <input type="text" style="font-size:8pt;" name="search_day" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_begin"]) ? date("d", $this->searchArray["search_assign_begin"]) : _("tt")?>"> .<input type="text" style="font-size:8pt;" name="search_month" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_begin"]) ? date("m", $this->searchArray["search_assign_begin"]) : _("mm")?>"> .<input type="text" style="font-size:8pt;" name="search_year" size="4" maxlength="4" value="<?=($this->searchArray["search_assign_begin"]) ? date("Y", $this->searchArray["search_assign_begin"]) : _("jjjj")?>"> --> <input type="checkbox" style="font-size:8pt;" name="search_repeating" value="1" <?=($this->searchArray["search_repeating"]==1) ? "checked=checked" : ""?>> <?= _('für restliches Semester prüfen') ?> <br> </td> </tr> </table> </td> </tr> <tr> <td <? $this->cssSw->switchClass(); echo $this->cssSw->getFullClass() ?> > <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td width="120"> <b><?= _('Semestertermin:') ?></b> </td> <td> <br> <?=_("Beginn")?>: <input type="text" style="font-size:8pt;" name="search_begin_hour_2" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_begin"]) ? date("H", $this->searchArray["search_assign_begin"]) : _("ss")?>"> <input type="text" style="font-size:8pt;" name="search_begin_minute_2" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_begin"]) ? date("i", $this->searchArray["search_assign_begin"]) : _("mm")?>"> <?=_("Uhr")?> <?=_("Ende")?>: <input type="text" style="font-size:8pt;" name="search_end_hour_2" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_end"]) ? date("H", $this->searchArray["search_assign_end"]) : _("ss")?>"> <input type="text" style="font-size:8pt;" name="search_end_minute_2" size="2" maxlength="2" value="<?=($this->searchArray["search_assign_end"]) ? date("i", $this->searchArray["search_assign_end"]) : _("mm")?>"> <?=_("Uhr")?> <br> <?=_("Tag der Woche")?>: <select name = 'search_day_of_week'> <option value=-1 <?=$this->searchArray["search_day_of_week"]==-1? "selected=selected":""?>><?=_("--")?> </option> <option value='Monday' <?=$this->searchArray["search_day_of_week"]=='Monday'? "selected=selected":""?>><?=_("Montag")?> </option> <option value='Tuesday' <?=$this->searchArray["search_day_of_week"]=='Tuesday'? "selected=selected":""?>><?=_("Dienstag")?> </option> <option value='Wednesday' <?=$this->searchArray["search_day_of_week"]=='Wednesday'? "selected=selected":""?>><?=_("Mittwoch")?> </option> <option value='Thursday' <?=$this->searchArray["search_day_of_week"]=='Thursday'? "selected=selected":""?>><?=_("Donnerstag")?> </option> <option value='Friday' <?=$this->searchArray["search_day_of_week"]=='Friday'? "selected=selected":""?>><?=_("Freitag")?> </option> <option value='Saturday' <?=$this->searchArray["search_day_of_week"]=='Saturday'? "selected=selected":""?>><?=_("Samstag")?> </option> <option value='Sunday' <?=$this->searchArray["search_day_of_week"]=='Sunday'? "selected=selected":""?>><?=_("Sonntag")?> </option> </select> <?=_("Semester")?>: <select name = 'search_semester'> <? $semesterData = new SemesterData(); $all_semester = $semesterData->getAllSemesterData(); if (!$this->searchArray["search_semester"]) { $current_semester = $semesterData->getCurrentSemesterData(); $selected_semester = $semesterData->getSemesterDataByDate(strtotime("+1 Day",$current_semester["ende"])); } else { $selected_semester["semester_id"] = $this->searchArray["search_semester"]; } $this_sem = false; foreach($all_semester as $semester) { $this_sem = $selected_semester["semester_id"] == $semester["semester_id"]; echo "<option value='".$semester["semester_id"]."' ".($this_sem?" selected=selected ":"").">".$semester["name"]."</option>"; } ?> </select> </td> </tr> </table> <br> </td> </tr> <? }