Exemplo n.º 1
0
    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;
    }
Exemplo n.º 2
0
 /**
  * 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));
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
    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']);
        }
    }
Exemplo n.º 4
0
 /**
  * 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']);
     }
 }
Exemplo n.º 5
0
    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() ?> >
            &nbsp;<br>
                <table cellspacing="0" cellpadding="0" border="0" width="100%">
                    <tr>
                        <td width="120">
                            <b><?= _('Einzeltermin:') ?></b>
                        </td>
                        <td>
                            <?=_("Beginn")?>:
                            &nbsp;<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")?>">&nbsp;<?=_("Uhr")?>
                            &nbsp;&nbsp;<?=_("Ende")?>:
                            &nbsp;<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")?>">&nbsp;<?=_("Uhr")?>
                <br>
                            <?=_("Datum")?>: &nbsp;
                            <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")?>">
                            -->
                            &nbsp;&nbsp;&nbsp;&nbsp;    <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")?>:
                    &nbsp;<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")?>">&nbsp;<?=_("Uhr")?>
                &nbsp;&nbsp;<?=_("Ende")?>:
                    &nbsp;<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")?>">&nbsp;<?=_("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> &nbsp;
                <?=_("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> &nbsp;
                    </td>
                </tr>
            </table>
                <br>
            </td>
        </tr>


        <?
    }