Exemple #1
0
/**
* create xml_header
*
* This function creates a xml-header for output.
* Its contents are Name of University, Stud.IP-Version, Range of Export (e.g. "root"), and temporal range.
*
* @access   public
* @return       string  xml-header
*/
function xml_header()
{
global $UNI_NAME_CLEAN, $SOFTWARE_VERSION, $ex_type, $ex_sem, $range_name, $range_id;
    $semester = $ex_sem ? Semester::find($ex_sem) : Semester::findCurrent();
    $xml_tag_string = "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
    $xml_tag_string .= "<studip version=\"" . xml_escape ($SOFTWARE_VERSION) . "\" logo=\"". xml_escape (Assets::image_path('logos/logo2b.png')) . "\"";
    if ($range_id == "root") $xml_tag_string .= " range=\"" . _("Alle Einrichtungen") . "\"";
    elseif ($range_name != "") $xml_tag_string .= " range=\"" . xml_escape ($range_name) . "\"";
    if ($UNI_NAME_CLEAN != "") $xml_tag_string .= " uni=\"" . xml_escape ($UNI_NAME_CLEAN) . "\"";
    if ($semester)
        $xml_tag_string .= " zeitraum=\"" . xml_escape ($semester->name) . "\" semester_id=\"" . xml_escape ($semester->getId()) . "\"";
    $xml_tag_string .= ">\n";
    return $xml_tag_string;
}
Exemple #2
0
 /**
  * Lists all courses of a user including the semesters in which
  * that course is active.
  * Optionally filtered by a URL parameter 'semester'.
  *
  * @get /user/:user_id/courses
  */
 public function getUserCourses($user_id)
 {
     if ($GLOBALS['user']->id !== $user_id) {
         $this->error(401);
     }
     // setting up semester to filter by
     $semester = null;
     $semester_id = \Request::get('semester');
     if (strlen($semester_id)) {
         $semester = \Semester::find($semester_id);
         if (!$semester) {
             $this->error(400, "Semester not found.");
         }
     }
     $memberships = $this->findMembershipsByUserId($user_id, $semester);
     $total = count($memberships);
     $memberships = $memberships->limit($this->offset, $this->limit);
     $memberships_json = $this->membershipsToJSON($memberships);
     $this->etag(md5(serialize($memberships_json)));
     return $this->paginated($memberships_json, $total, compact('user_id'), array('semester' => $semester_id));
 }
 public function deleteEvents()
 {
     $input = Input::all();
     $semester = Semester::find($input['semester']);
     switch ($input['roomType']) {
         case 'Classroom':
             $events = Classroom::where('Start', '>', $semester->start_date)->where('End', '<', $semester->end_date)->get();
             break;
         case 'Breakout':
             $events = BreakoutRoom::where('Start', '>', $semester->start_date)->where('End', '<', $semester->end_date)->get();
             break;
         case 'Computer':
             $events = ComputerClassroom::where('Start', '>', $semester->start_date)->where('End', '<', $semester->end_date)->get();
             break;
         case 'Special':
             $events = SpecialRoom::where('Start', '>', $semester->start_date)->where('End', '<', $semester->end_date)->get();
             break;
     }
     foreach ($events as $event) {
         $event->delete();
     }
 }
Exemple #4
0
 /**
  * Gets all global course sets
  *
  * @param array $filter
  * @return Array
  */
 public static function getGlobalCoursesets($filter = array())
 {
     $query = "SELECT DISTINCT c.set_id\n            FROM coursesets c\n            LEFT JOIN courseset_institute ci ON ci.`set_id`=c.`set_id`\n            LEFT JOIN courseset_rule cr ON cr.set_id=ci.set_id\n            LEFT JOIN seminar_courseset sc ON c.set_id = sc.set_id\n            LEFT JOIN seminare s ON s.seminar_id = sc.seminar_id\n            WHERE ci.institute_id IS NULL";
     $parameters = array();
     $query .= " AND (c.`private`=0 OR c.`user_id`=?)";
     $parameters[] = $GLOBALS['user']->id;
     if ($filter['course_set_name']) {
         $query .= " AND c.name LIKE ?";
         $parameters[] = $filter['course_set_name'] . '%';
     }
     if (is_array($filter['rule_types']) && count($filter['rule_types'])) {
         $query .= " AND cr.type IN (?)";
         $parameters[] = $filter['rule_types'];
     }
     if ($filter['semester_id']) {
         $query .= " AND s.start_time = ?";
         $parameters[] = Semester::find($filter['semester_id'])->beginn;
     }
     if ($filter['course_set_chdate']) {
         $query .= " AND c.chdate < ?";
         $parameters[] = $filter['chdate'];
     }
     $query .= " ORDER BY c.name";
     $stmt = DBManager::get()->prepare($query);
     $stmt->execute($parameters);
     return $stmt->fetchAll(PDO::FETCH_ASSOC);
 }
/**
* Exports lecture-data.
*
* This function gets the data of the lectures at an institute and writes it into $data_object.
* It calls output_data afterwards.
*
* @access   public
* @param        string  $inst_id    Stud.IP-inst_id for export
* @param        string  $ex_sem_id  allows to choose if only a specific lecture is to be exported
*/
function export_sem($inst_id, $ex_sem_id = 'all')
{
    global $range_id, $xml_file, $o_mode, $xml_names_lecture, $xml_groupnames_lecture, $object_counter, $SEM_TYPE, $SEM_CLASS, $filter, $ex_sem, $ex_sem_class, $ex_person_details, $persons;
    $ex_only_homeinst = Request::int('ex_only_homeinst', 0);
    // Prepare user count statement
    $query = "SELECT COUNT(user_id)\n              FROM seminar_user\n              WHERE seminar_id = ? AND status = 'autor'";
    $count_statement = DBManager::get()->prepare($query);
    // Prepare inner statement
    $query = "SELECT seminar_user.position,\n                     auth_user_md5.user_id, auth_user_md5.username, auth_user_md5.Vorname, auth_user_md5.Nachname,\n                     user_info.title_front, user_info.title_rear\n              FROM seminar_user\n              LEFT JOIN user_info USING (user_id)\n              LEFT JOIN auth_user_md5 USING (user_id)\n              WHERE seminar_user.status = 'dozent' AND seminar_user.Seminar_id = ?\n              ORDER BY seminar_user.position";
    $inner_statement = DBManager::get()->prepare($query);
    // Prepare (build) and execute outmost query
    switch ($filter) {
        case "seminar":
            $order = " seminare.Name";
            break;
        case "status":
            $order = "seminare.status, seminare.Name";
            $group = "FIRSTGROUP";
            $group_tab_zelle = "status";
            $do_group = true;
            break;
        default:
            $order = "seminare.status, seminare.Name";
            $group = "FIRSTGROUP";
            $group_tab_zelle = "status";
            $do_group = true;
    }
    $parameters = array();
    if (isset($ex_sem) && ($semester = Semester::find($ex_sem))) {
        $addquery = " AND seminare.start_time <= :begin AND (:begin <= (seminare.start_time + seminare.duration_time) OR seminare.duration_time = -1) ";
        $parameters[':begin'] = $semester->beginn;
    }
    if ($ex_sem_id != 'all') {
        if ($ex_sem_id == 'root') {
            $addquery .= " AND EXISTS (SELECT * FROM seminar_sem_tree WHERE seminar_sem_tree.seminar_id = seminare.Seminar_id) ";
        } else {
            if (!is_array($ex_sem_id)) {
                $ex_sem_id = array($ex_sem_id);
            }
            $ex_sem_id = array_flip($ex_sem_id);
        }
    }
    if (!$GLOBALS['perm']->have_perm('root') && !$GLOBALS['perm']->have_studip_perm('admin', $inst_id)) {
        $addquery .= " AND visible = 1 ";
    }
    if (count($ex_sem_class) > 0) {
        $allowed_sem_types = array();
        foreach (array_keys($ex_sem_class) as $semclassid) {
            $allowed_sem_types += array_keys(SeminarCategories::get($semclassid)->getTypes());
        }
        $addquery .= " AND seminare.status IN (:status) ";
        $parameters[':status'] = $allowed_sem_types;
    } else {
        $addquery .= " AND seminare.status NOT IN (:status) ";
        $parameters[':status'] = studygroup_sem_types() ?: '';
    }
    if ($ex_only_homeinst) {
        $query = "SELECT seminare.*,Seminar_id as seminar_id, Institute.Name AS heimateinrichtung\n                  FROM seminare\n                  LEFT JOIN Institute USING (Institut_id)\n                  WHERE Institut_id = :institute_id {$addquery}\n                  ORDER BY " . $order;
        $parameters[':institute_id'] = $inst_id;
    } else {
        $query = "SELECT seminare.*,Seminar_id as seminar_id, Institute.Name AS heimateinrichtung\n                  FROM seminar_inst\n                  LEFT JOIN seminare USING (Seminar_id)\n                  LEFT JOIN Institute ON seminare.Institut_id = Institute.Institut_id\n                  WHERE seminar_inst.Institut_id = :institute_id {$addquery}\n                  ORDER BY " . $order;
        $parameters[':institute_id'] = $inst_id;
    }
    $statement = DBManager::get()->prepare($query);
    $statement->execute($parameters);
    $data = $statement->fetchAll(PDO::FETCH_ASSOC);
    $data_object .= xml_open_tag($xml_groupnames_lecture['group']);
    foreach ($data as $row) {
        if (is_array($ex_sem_id) && !isset($ex_sem_id[$row['seminar_id']])) {
            continue;
        }
        $group_string = '';
        if ($do_group && $group != $row[$group_tab_zelle]) {
            if ($group != 'FIRSTGROUP') {
                $group_string .= xml_close_tag($xml_groupnames_lecture['subgroup1']);
            }
            if ($group_tab_zelle == 'status') {
                $group_string .= xml_open_tag($xml_groupnames_lecture['subgroup1'], $SEM_TYPE[$row[$group_tab_zelle]]['name']);
            } else {
                $group_string .= xml_open_tag($xml_groupnames_lecture['subgroup1'], $row[$group_tab_zelle]);
            }
            $group = $row[$group_tab_zelle];
            if ($do_subgroup && $subgroup == $row[$subgroup_tab_zelle]) {
                $subgroup = "NEXTGROUP";
            }
        }
        if ($do_subgroup && $subgroup != $row[$subgroup_tab_zelle]) {
            if ($subgroup != 'FIRSTGROUP') {
                $group_string = xml_close_tag($xml_groupnames_lecture['subgroup2']) . $group_string;
            }
            $group_string .= xml_open_tag($xml_groupnames_lecture['subgroup2'], $row[$subgroup_tab_zelle]);
            $subgroup = $row[$subgroup_tab_zelle];
        }
        $data_object .= $group_string;
        $object_counter += 1;
        $data_object .= xml_open_tag($xml_groupnames_lecture['object'], $row['seminar_id']);
        $sem_obj = new Seminar($row['seminar_id']);
        while (list($key, $val) = each($xml_names_lecture)) {
            if ($val == '') {
                $val = $key;
            }
            if ($key == 'status') {
                $data_object .= xml_tag($val, $SEM_TYPE[$row[$key]]['name']);
            } elseif ($key == 'ort') {
                $data_object .= xml_tag($val, $sem_obj->getDatesTemplate('dates/seminar_export_location'));
            } elseif ($key == 'bereich' && $SEM_CLASS[$SEM_TYPE[$row['status']]['class']]['bereiche']) {
                $data_object .= xml_open_tag($xml_groupnames_lecture['childgroup3']);
                $pathes = get_sem_tree_path($row['seminar_id']);
                if (is_array($pathes)) {
                    foreach ($pathes as $path_name) {
                        $data_object .= xml_tag($val, $path_name);
                    }
                } else {
                    $data_object .= xml_tag($val, 'n.a.');
                }
                $data_object .= xml_close_tag($xml_groupnames_lecture['childgroup3']);
            } elseif ($key == 'admission_turnout') {
                $data_object .= xml_open_tag($val, $row['admission_type'] ? _('max.') : _('erw.'));
                $data_object .= $row[$key];
                $data_object .= xml_close_tag($val);
            } elseif ($key == 'teilnehmer_anzahl_aktuell') {
                $count_statement->execute(array($row['seminar_id']));
                $count = $count_statement->fetchColumn();
                $count_statement->closeCursor();
                $data_object .= xml_tag($val, $count);
            } elseif ($key == 'metadata_dates') {
                $data_object .= xml_open_tag($xml_groupnames_lecture['childgroup1']);
                $vorb = vorbesprechung($row['seminar_id'], 'export');
                if ($vorb != false) {
                    $data_object .= xml_tag($val[0], $vorb);
                }
                if (($first_date = SeminarDB::getFirstDate($row['seminar_id'])) && count($first_date)) {
                    $really_first_date = new SingleDate($first_date[0]);
                    $data_object .= xml_tag($val[1], $really_first_date->getDatesExport());
                }
                $data_object .= xml_tag($val[2], $sem_obj->getDatesExport());
                $data_object .= xml_close_tag($xml_groupnames_lecture["childgroup1"]);
            } elseif ($key == 'Institut_id') {
                $data_object .= xml_tag($val, $row['heimateinrichtung'], array('key' => $row[$key]));
            } elseif ($row[$key] != '') {
                $data_object .= xml_tag($val, $row[$key]);
            }
        }
        $data_object .= "<" . $xml_groupnames_lecture['childgroup2'] . ">\n";
        $inner_statement->execute(array($row['seminar_id']));
        while ($inner = $inner_statement->fetch(PDO::FETCH_ASSOC)) {
            if ($ex_person_details) {
                $persons[$inner['user_id']] = true;
            }
            $content_string = $inner['Vorname'] . ' ' . $inner['Nachname'];
            if ($inner['title_front'] != '') {
                $content_string = $inner['title_front'] . ' ' . $content_string;
            }
            if ($inner['title_rear'] != '') {
                $content_string .= ', ' . $inner['title_rear'];
            }
            $data_object .= xml_tag($xml_groupnames_lecture['childobject2'], $content_string, array('key' => $inner['username']));
        }
        $data_object .= xml_close_tag($xml_groupnames_lecture['childgroup2']);
        // freie Datenfelder ausgeben
        $data_object .= export_datafields($row['seminar_id'], $xml_groupnames_lecture['childgroup4'], $xml_groupnames_lecture['childobject4'], 'sem', $row['status']);
        $data_object .= xml_close_tag($xml_groupnames_lecture['object']);
        reset($xml_names_lecture);
        output_data($data_object, $o_mode);
        $data_object = '';
    }
    if ($do_subgroup && $subgroup != 'FIRSTGROUP') {
        $data_object .= xml_close_tag($xml_groupnames_lecture['subgroup2']);
    }
    if ($do_group && $group != 'FIRSTGROUP') {
        $data_object .= xml_close_tag($xml_groupnames_lecture['subgroup1']);
    }
    $data_object .= xml_close_tag($xml_groupnames_lecture['group']);
    output_data($data_object, $o_mode);
}
Exemple #6
0
?>
">
            <header>
                <h1>
                    <input type="checkbox" class="date-proxy"
                           data-proxyfor="#singledate-<?php 
echo $semester_id;
?>
 .ids-irregular"
                           data-activates=".actionForAllIrregular">
                    <a href="<?php 
echo ContentBoxHelper::href('singledate-' . $semester_id);
?>
">
                        <?php 
echo htmlReady(Semester::find($semester_id)->name);
?>
                    </a>
                </h1>
                <nav>
                    <span>
                        <?php 
echo sprintf(ngettext('%u Termin', '%u Termine', count($termine)), count($termine));
?>
                    </span>
                    <span>
                        <?php 
echo _('Einzel-Raumanfrage');
?>
:
                    <? if (($rr_count = count($termine->filter($room_request_filter))) > 0): ?>
Exemple #7
0
 /**
  * Fetch institutes for course sets.
  *
  * @param Array $filter filter settings, e.g. a special subset of allowed
  * admission rules
  *
  * @return Array Found institutes.
  */
 static function getInstitutes($filter = array())
 {
     global $perm, $user;
     $parameters = array(1);
     $query = "SELECT COUNT(DISTINCT ci.set_id) FROM courseset_institute ci\n        LEFT JOIN coursesets c ON c.set_id = ci.set_id\n        LEFT JOIN courseset_rule cr ON c.set_id = cr.set_id\n        LEFT JOIN seminar_courseset sc ON c.set_id = sc.set_id\n        LEFT JOIN seminare s ON s.seminar_id = sc.seminar_id\n        WHERE ci.institute_id = ?";
     if ($filter['course_set_name']) {
         $query .= " AND c.name LIKE ?";
         $parameters[] = $filter['course_set_name'] . '%';
     }
     if (is_array($filter['rule_types']) && count($filter['rule_types'])) {
         $query .= " AND cr.type IN (?)";
         $parameters[] = $filter['rule_types'];
     }
     if ($filter['semester_id']) {
         $query .= " AND s.start_time = ?";
         $parameters[] = Semester::find($filter['semester_id'])->beginn;
     }
     $cs_count_statement = DBManager::get()->prepare($query);
     $query = str_replace('ci.institute_id', '1', $query);
     $cs_count_all_statement = DBManager::get()->prepare($query);
     if ($perm->have_perm('root')) {
         $cs_count_all_statement->execute($parameters);
         $num_sets = $cs_count_all_statement->fetchColumn();
         $my_inst['all'] = array('name' => _('alle'), 'num_sets' => $num_sets);
         $top_insts = Institute::findBySQL('Institut_id = fakultaets_id ORDER BY Name');
     } else {
         $top_insts = Institute::findMany(User::find($user->id)->institute_memberships->findBy('inst_perms', words('admin dozent'))->pluck('institut_id'), 'ORDER BY institut_id=fakultaets_id,name');
     }
     foreach ($top_insts as $inst) {
         $my_inst[$inst->id] = $inst->toArray('name is_fak');
         $parameters[0] = $inst->id;
         $cs_count_statement->execute($parameters);
         $my_inst[$inst->id]['num_sets'] = $cs_count_statement->fetchColumn();
         if ($inst->is_fak && ($perm->have_perm('root') || $inst->members->findBy('user_id', $user->id)->val('inst_perms') == 'admin')) {
             $alle = $inst->sub_institutes;
             if (count($alle)) {
                 $my_inst[$inst->id . '_all'] = array('name' => sprintf(_('[Alle unter %s]'), $inst->name), 'is_fak' => 'all');
                 $num_inst = 0;
                 $num_sets_alle = $my_inst[$inst->id]['num_sets'];
                 foreach ($alle as $institute) {
                     $num_inst += 1;
                     $my_inst[$institute->id] = $institute->toArray('name is_fak');
                     $parameters[0] = $institute->id;
                     $cs_count_statement->execute($parameters);
                     $my_inst[$institute->id]['num_sets'] = $cs_count_statement->fetchColumn();
                     $num_sets_alle += $my_inst[$institute->id]['num_sets'];
                 }
                 $my_inst[$inst->id . '_all']['num_inst'] = $num_inst;
                 $my_inst[$inst->id . '_all']['num_sets'] = $num_sets_alle;
             }
         }
     }
     return $my_inst;
 }
 /**
  * Adds a filter for all courses of the given semester.
  * @param string $semester_id : ID of the given semester.
  * @return $this
  * @throws Exception if semester_id does not exist
  */
 public function filterBySemester($semester_id)
 {
     $semester = Semester::find($semester_id);
     if (!$semester) {
         throw new Exception("Das ausgewählte Semester scheint nicht zu existieren.");
     }
     $this->settings['query']['where']['semester'] = "(seminare.start_time <= :semester_beginn AND ((:semester_beginn <= seminare.start_time + seminare.duration_time) OR (seminare.duration_time = -1)))";
     $this->settings['parameter']['semester_beginn'] = $semester['beginn'];
     return $this;
 }
Exemple #9
0
 /**
  * Sets the start semester for the given course.
  *
  * @param String $course_id Id of the course
  */
 public function setSemester_action($course_id)
 {
     $current_semester = Semester::findCurrent();
     $start_semester = Semester::find(Request::get('startSemester'));
     if (Request::int('endSemester') != -1) {
         $end_semester = Semester::find(Request::get('endSemester'));
     } else {
         $end_semester = -1;
     }
     $course = Seminar::GetInstance($course_id);
     if ($start_semester == $end_semester) {
         $end_semester = 0;
     }
     if ($end_semester != 0 && $end_semester != -1 && $start_semester->beginn >= $end_semester->beginn) {
         PageLayout::postMessage(MessageBox::error(_('Das Startsemester liegt nach dem Endsemester!')));
     } else {
         $course->setStartSemester($start_semester->beginn);
         if ($end_semester != -1) {
             $course->setEndSemester($end_semester->beginn);
         } else {
             $course->setEndSemester($end_semester);
         }
         //$course->removeAndUpdateSingleDates();
         // If the new duration includes the current semester, we set the semester-chooser to the current semester
         if ($current_semester->beginn >= $course->getStartSemester() && $current_semester->beginn <= $course->getEndSemesterVorlesEnde()) {
             $course->setFilter($current_semester->beginn);
         } else {
             // otherwise we set it to the first semester
             $course->setFilter($course->getStartSemester());
         }
     }
     $course->store();
     SeminarCycleDate::removeOutRangedSingleDates($course->getStartSemester(), $course->getEndSemesterVorlesEnde(), $course->id);
     $cycles = SeminarCycleDate::findBySeminar_id($course->seminar_id);
     foreach ($cycles as $cycle) {
         $new_dates = $cycle->createTerminSlots($start_semester->beginn);
         foreach ($new_dates as $semester_id => $dates) {
             foreach ($dates['dates'] as $date) {
                 $date->store();
             }
         }
     }
     $messages = $course->getStackedMessages();
     foreach ($messages as $type => $msg) {
         PageLayout::postMessage(MessageBox::$type($msg['title'], $msg['details']));
     }
     if (Request::submitted('save_close')) {
         $this->relocate(str_replace('_', '/', Request::get('origin')), array('cid' => $course_id));
     } else {
         $this->redirect($this->url_for('course/timesrooms/index', array('cid' => $course_id)));
     }
 }
Exemple #10
0
 /**
  * Set the selected institute or semester
  */
 public function set_selection_action()
 {
     if (Request::option('institute')) {
         $GLOBALS['user']->cfg->store('ADMIN_COURSES_TEACHERFILTER', null);
         $GLOBALS['user']->cfg->store('MY_INSTITUTES_DEFAULT', Request::option('institute'));
         PageLayout::postMessage(MessageBox::success('Die gewünschte Einrichtung wurde ausgewählt!'));
     }
     if (Request::option('sem_select')) {
         $GLOBALS['user']->cfg->store('MY_COURSES_SELECTED_CYCLE', Request::option('sem_select'));
         if (Request::option('sem_select') !== "all") {
             PageLayout::postMessage(MessageBox::success(sprintf(_('Das %s wurde ausgewählt'), Semester::find(Request::option('sem_select'))->name)));
         } else {
             PageLayout::postMessage(MessageBox::success(_('Semesterfilter abgewählt')));
         }
     }
     $this->redirect('admin/courses/index');
 }
Exemple #11
0
    /**
     * returns a representation of the seminar-dates with a specifiable template
     *
     * @param  mixed  this can be a template-object or a string pointing to a template in path_to_studip/templates
     * @param  array  optional parameters which are passed to the template
     * @return  string  the template output of the dates
     *
     * @author Till Glöggler <*****@*****.**>
     */
    public function getDatesTemplate($template, $params = array())
    {
        if (!$template instanceof Flexi_Template && is_string($template)) {
            $template = $GLOBALS['template_factory']->open($template);
        }

        if ($params['semester_id']) {
            $semester = Semester::find($params['semester_id']);
            if ($semester) {
                // apply filter
                $this->applyTimeFilter($semester->beginn, $semester->ende);
            }
        }


        $template->set_attribute('dates', $this->getUndecoratedData(isset($params['semester_id'])));
        $template->set_attribute('seminar_id', $this->getId());

        $template->set_attributes($params);
        return trim($template->render());
    }
 public function postUpdateTrainerSemester()
 {
     $sid = Input::get('sid');
     $tid = Input::get('tid');
     $semester = Semester::find($sid);
     $trainer = Trainer::find($tid);
     $trainer->semester()->associate($semester);
     $trainer->save();
 }
Exemple #13
0
function getMyRoomRequests($user_id = '', $semester_id = null, $only_not_closed = true, $single_request = null, $sem_type = null, $faculty = null, $tagged = null)
{
    global $user, $perm, $RELATIVE_PATH_RESOURCES;
    $db = DBManager::get();
    if (!$user_id) {
        $user_id = $user->id;
    }
    $parameters = array();
    if ($only_not_closed) {
        $criteria = ' closed = 0 ';
    } else {
        $criteria = ' 1 ';
    }
    if ($single_request) {
        $criteria .= " AND rr.request_id = :request_id";
        $parameters[':request_id'] = $single_request;
    } elseif ($semester_id) {
        $semester = Semester::find($semester_id);
        $sem_criteria = ' AND t.date BETWEEN ' . (int) $semester['beginn'] . ' AND ' . (int) $semester['ende'];
        if ($sem_type) {
            $criteria .= " AND EXISTS (SELECT * FROM seminare WHERE seminare.Seminar_id=rr.seminar_id AND seminare.status=" . (int) $sem_type . ") ";
        }
        if ($faculty) {
            $criteria .= " AND EXISTS (SELECT * FROM seminare INNER JOIN Institute USING(Institut_id) WHERE seminare.Seminar_id=rr.seminar_id AND fakultaets_id=" . DBManager::get()->quote($faculty) . ") ";
        }
        if ($tagged) {
            $criteria .= " AND NOT EXISTS (SELECT * FROM resources_requests_user_status WHERE resources_requests_user_status.request_id=rr.request_id AND resources_requests_user_status.user_id=" . DBManager::get()->quote($user_id) . ") ";
        }
    }
    $query0 = "SELECT request_id, closed, rr.resource_id\n               FROM resources_requests AS rr\n               WHERE %s ";
    $queries = array();
    $queries[] = "SELECT request_id\n                  FROM resources_requests AS rr\n                  INNER JOIN termine t\n                     ON (t.termin_id = rr.termin_id AND t.date > UNIX_TIMESTAMP() {$sem_criteria})\n                  WHERE rr.termin_id <> '' AND %s";
    $presence_type_clause = getPresenceTypeClause();
    $queries[] = "SELECT DISTINCT request_id\n                  FROM resources_requests AS rr\n                  INNER JOIN termine AS t\n                     ON (rr.seminar_id = t.range_id AND\n                         t.date_typ IN {$presence_type_clause} AND\n                         t.date > UNIX_TIMESTAMP() {$sem_criteria})\n                  WHERE rr.termin_id = '' AND rr.metadate_id = '' AND %s ";
    $queries[] = "SELECT DISTINCT request_id\n                  FROM resources_requests AS rr\n                  INNER JOIN termine AS t ON (t.metadate_id = rr.metadate_id AND t.date > UNIX_TIMESTAMP() {$sem_criteria})\n                  WHERE rr.metadate_id <> '' AND %s ";
    $requests = array();
    if (getGlobalPerms($user_id) == 'admin') {
        $query = sprintf($query0, $criteria);
        $statement = DBManager::get()->prepare($query);
        $statement->execute($parameters);
        while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
            $requests[$row['request_id']] = array('my_sem' => true, 'my_res' => strlen($row['resource_id']) > 0, 'closed' => $row['closed'], 'resource_id' => $row['resource_id']);
        }
        foreach ($queries as $q) {
            $query = sprintf($q, $criteria);
            $statement = DBManager::get()->prepare($query);
            $statement->execute($parameters);
            while ($request_id = $statement->fetchColumn()) {
                $requests[$request_id]['have_times'] = 1;
            }
        }
    } else {
        //load all my resources
        $resList = new ResourcesUserRoomsList($user_id, FALSE, FALSE);
        $my_res = $resList->getRooms();
        if (count($my_res) > 0) {
            foreach (array_keys($my_res) as $res_id) {
                $object_perms = ResourceObjectPerms::Factory($res_id, $user_id);
                if (!$object_perms->havePerm('tutor')) {
                    unset($my_res[$res_id]);
                }
            }
        }
        if (count($my_res) > 0) {
            $res_criteria = $criteria . " AND rr.resource_id IN (:resource_ids)";
            $params = $parameters;
            $params[':resource_ids'] = array_keys($my_res);
            $query = sprintf($query0, $res_criteria);
            $statement = DBManager::get()->prepare($query);
            $statement->execute($params);
            while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
                $requests[$row['request_id']] = array('my_res' => true, 'closed' => $row['closed'], 'resource_id' => $row['resource_id']);
            }
            foreach ($queries as $q) {
                $query = sprintf($q, $res_criteria);
                $statement = DBManager::get()->prepare($query);
                $statement->execute($params);
                while ($request_id = $statement->fetchColumn()) {
                    $requests[$request_id]['have_times'] = 1;
                }
            }
            //load all my seminars
            $my_sems = search_administrable_seminars();
            if (count($my_sems) > 0) {
                $sem_criteria = $criteria . " AND rr.seminar_id IN (:seminar_ids)";
                $params = $parameters;
                $params[':seminar_ids'] = array_keys($my_sems);
                $query = sprintf($query0, $sem_criteria);
                $statement = DBManager::get()->prepare($query);
                $statement->execute($params);
                while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
                    $request_id = $row['request_id'];
                    $requests[$request_id]['my_sem'] = true;
                    $requests[$request_id]['closed'] = $row['closed'];
                    $requests[$request_id]['resource_id'] = $row['resource_id'];
                }
                foreach ($queries as $q) {
                    $query = sprintf($q, $sem_criteria);
                    $statement = DBManager::get()->prepare($query);
                    $statement->execute($params);
                    while ($request_id = $statement->fetchColumn()) {
                        $requests[$request_id]['have_times'] = 1;
                    }
                }
            }
        }
    }
    return $requests;
}
Exemple #14
0
 /**
  * Shows a list of courses with restricted participant numbers.
  */
 function index_action()
 {
     $actions = new ActionsWidget();
     $actions->addLink(_("Export"), $this->link_for('admission/restricted_courses', array('csv' => 1)), Icon::create('file-excel+export', 'clickable'));
     Sidebar::get()->addWidget($actions);
     Sidebar::get()->setImage('sidebar/admin-sidebar.png');
     $sem_condition = "";
     foreach (words('current_institut_id sem_name_prefix') as $param) {
         $this->{$param} = $_SESSION[get_class($this)][$param];
     }
     if (Request::isPost()) {
         if (Request::submitted('choose_institut')) {
             $this->current_institut_id = Request::option('choose_institut_id');
             $this->current_semester_id = Request::option('select_semester_id');
             $this->sem_name_prefix = trim(Request::get('sem_name_prefix'));
         }
     }
     if (!$this->current_institut_id) {
         $this->current_institut_id = 'all';
     }
     if (!$this->current_semester_id) {
         $this->current_semester_id = $_SESSION['_default_sem'];
     } else {
         $_SESSION['_default_sem'] = $this->current_semester_id;
     }
     $semester = Semester::find($this->current_semester_id);
     $sem_condition .= "AND seminare.start_time <=" . (int) $semester["beginn"] . " AND (" . (int) $semester["beginn"] . " <= (seminare.start_time + seminare.duration_time) OR seminare.duration_time = -1) ";
     if ($this->sem_name_prefix) {
         $sem_condition .= sprintf('AND (seminare.Name LIKE %1$s OR seminare.VeranstaltungsNummer LIKE %1$s) ', DBManager::get()->quote($this->sem_name_prefix . '%'));
     }
     if ($GLOBALS['perm']->have_perm('dozent')) {
         $this->my_inst = $this->get_institutes($sem_condition);
     }
     $this->courses = $this->get_courses($sem_condition);
     foreach (words('current_institut_id sem_name_prefix') as $param) {
         $_SESSION[get_class($this)][$param] = $this->{$param};
     }
     if (Request::get('csv')) {
         $captions = array(_("Anmeldeset"), _("Nummer"), _("Name"), _("max. Teilnehmer"), _("Teilnehmer aktuell"), _("Anzahl Anmeldungen"), _("Anzahl vorl. Anmeldungen"), _("Anzahl Warteliste"), _("Platzverteilung"), _("Startzeitpunkt"), _("Endzeitpunkt"));
         $data = array();
         foreach ($this->courses as $course) {
             $row = array();
             $row[] = $course['cs_name'];
             $row[] = $course['course_number'];
             $row[] = $course['course_name'];
             $row[] = (int) $course['admission_turnout'];
             $row[] = $course['count_teilnehmer'] + $course['count_prelim'];
             $row[] = (int) $course['count_prelim'];
             $row[] = (int) $course['count_waiting'];
             $row[] = (int) $course['count_claiming'];
             $row[] = $course['distribution_time'] ? strftime('%x %R', $course['distribution_time']) : '';
             $row[] = $course['start_time'] ? strftime('%x %R', $course['start_time']) : '';
             $row[] = $course['end_time'] ? strftime('%x %R', $course['end_time']) : '';
             $data[] = $row;
         }
         $tmpname = md5(uniqid('tmp'));
         if (array_to_csv($data, $GLOBALS['TMP_PATH'] . '/' . $tmpname, $captions)) {
             $this->redirect(GetDownloadLink($tmpname, 'teilnahmebeschraenkteVeranstaltungen.csv', 4, 'force'));
             return;
         }
     }
     if (is_array($this->not_distributed_coursesets)) {
         PageLayout::postMessage(MessageBox::info(_("Es existieren Anmeldesets, die zum Zeitpunkt der Platzverteilung nicht gelost wurden. Stellen Sie sicher, dass der Cronjob \"Losverfahren überprüfen\" ausgeführt wird."), array_unique($this->not_distributed_coursesets)));
     }
 }
Exemple #15
0
 /**
  * update an existing semester
  *
  * @param array() $semesterdata
  * @return boolean
  */
 function updateExistingSemester($semesterdata)
 {
     $semester = Semester::find($semesterdata['semester_id']);
     if ($semester) {
         $semester->setData(remove_magic_quotes($semesterdata));
         if ($semester->store()) {
             Semester::getall(true);
             return true;
         } else {
             return false;
         }
     }
 }