/** * 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; }
/** * 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(); } }
/** * 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); }
?> "> <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): ?>
/** * 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; }
/** * 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))); } }
/** * 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'); }
/** * 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(); }
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; }
/** * 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))); } }
/** * 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; } } }