Esempio n. 1
0
 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;
 }
Esempio n. 3
0
 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();
         }
     }
 }
Esempio n. 4
0
    //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));
            }
        }
Esempio n. 5
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;
    }
Esempio n. 6
0
 /**
  * @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%">&nbsp;</td>
                <td class="<? echo $cssSw->getClass() ?>"  width="10%" align="left">&nbsp;
                    <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">&nbsp;
                    <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">&nbsp;
                <? 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 "&nbsp;<font size=-1>"._("Anzahl der Belegungen in diesem Zeitraum:")." ".$assign_events->numberOfEvents()."</font><br>";
                    ?>
                    &nbsp;
                </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 "&nbsp;".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%">&nbsp;
                </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">&nbsp;
                <? 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">
                &nbsp;
                </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>
            <?
        }
    }
Esempio n. 8
0
    /**
     * 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();
        }
    }
Esempio n. 9
0
 /**
  * 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();
     }
 }
Esempio n. 10
0
 /**
  * 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();
        }
    }
Esempio n. 12
0
    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%">&nbsp;</td>
                <td class="<? echo $cssSw->getClass() ?>"  width="10%" align="left">&nbsp;
                    <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">&nbsp;
                    <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">&nbsp;
                <? 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 "&nbsp;<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 "&nbsp;<font size=-1>"._("Anzahl der Einzelbelegungen in diesem Zeitraum:")." ".$num_single_events."</font><br>";
                    }
                    ?>
                    &nbsp;
                </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 "&nbsp;".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%">&nbsp;
                </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">&nbsp;
                <? 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">
                &nbsp;
                </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">&nbsp;</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 ("&nbsp; <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)?>
                &nbsp;(<?=($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:")?>
                &nbsp;(<?=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>
            <?
        }
    }
Esempio n. 13
0
 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;
 }