public function index() { $semester = new Semester(); $current_semester = $semester->getCurrentSemester(); $group = new Module(); $edit = $group->checkUserGroup('administrador'); $data = array('current_semester' => $current_semester, 'edit' => $edit); $this->load->template('settings/index', $data); }
public function displayDisciplineClassesToEnroll($courseId, $disciplineId) { $disciplineData = $this->getDisciplineByCode($disciplineId); $semester = new Semester(); $currentSemester = $semester->getCurrentSemester(); $offer = new Offer(); $classes = $offer->getApprovedOfferListDisciplineClasses($courseId, $currentSemester['id_semester'], $disciplineId); $data = array('courseId' => $courseId, 'disciplineClasses' => $classes, 'disciplineData' => $disciplineData); loadTemplateSafelyByGroup('estudante', 'discipline/discipline_classes_enroll', $data); }
/** * Run the database seeds. * * @return void */ public function run() { $semesters = [['name' => 'Spring\'06', 'division' => 'Spring', 'year' => 2006], ['name' => 'Summer\'06', 'division' => 'Summer', 'year' => 2006], ['name' => 'Fall\'06', 'division' => 'Fall', 'year' => 2006], ['name' => 'Spring\'07', 'division' => 'Spring', 'year' => 2007], ['name' => 'Summer\'07', 'division' => 'Summer', 'year' => 2007], ['name' => 'Fall\'07', 'division' => 'Fall', 'year' => 2007], ['name' => 'Spring\'08', 'division' => 'Spring', 'year' => 2008], ['name' => 'Summer\'08', 'division' => 'Summer', 'year' => 2008], ['name' => 'Fall\'08', 'division' => 'Fall', 'year' => 2008], ['name' => 'Spring\'09', 'division' => 'Spring', 'year' => 2009], ['name' => 'Summer\'09', 'division' => 'Summer', 'year' => 2009], ['name' => 'Fall\'09', 'division' => 'Fall', 'year' => 2009], ['name' => 'Spring\'10', 'division' => 'Spring', 'year' => 2010], ['name' => 'Summer\'10', 'division' => 'Summer', 'year' => 2010], ['name' => 'Fall\'10', 'division' => 'Fall', 'year' => 2010], ['name' => 'Spring\'11', 'division' => 'Spring', 'year' => 2011], ['name' => 'Summer\'11', 'division' => 'Summer', 'year' => 2011], ['name' => 'Fall\'11', 'division' => 'Fall', 'year' => 2011], ['name' => 'Spring\'12', 'division' => 'Spring', 'year' => 2012], ['name' => 'Summer\'12', 'division' => 'Summer', 'year' => 2012], ['name' => 'Fall\'12', 'division' => 'Fall', 'year' => 2012], ['name' => 'Spring\'13', 'division' => 'Spring', 'year' => 2013], ['name' => 'Summer\'13', 'division' => 'Summer', 'year' => 2013], ['name' => 'Fall\'13', 'division' => 'Fall', 'year' => 2013], ['name' => 'Spring\'14', 'division' => 'Spring', 'year' => 2014], ['name' => 'Summer\'14', 'division' => 'Summer', 'year' => 2014], ['name' => 'Fall\'14', 'division' => 'Fall', 'year' => 2014], ['name' => 'Spring\'15', 'division' => 'Spring', 'year' => 2015], ['name' => 'Summer\'15', 'division' => 'Summer', 'year' => 2015], ['name' => 'Fall\'15', 'division' => 'Fall', 'year' => 2015]]; foreach ($semesters as $key => $semester) { Semester::create($semester); } }
/** * @var string the default layout for the views. Defaults to '//layouts/column2', meaning * using two-column layout. See 'protected/views/layouts/column2.php'. */ public function loadSemester($semId) { if ($this->_semester === null) { $this->_semester = Semester::model()->findbyPk($semId); if ($this->_semester === null) { throw new CHttpException(404, 'The requested Semester does not exist.'); } } return $this->_semester; }
/** * 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; }
public function prepareData() { $semester = new Semester(); $semester['name'] = 'Semester'; $semester->save(); foreach (array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') as $name) { $weekday = new Weekday(); $weekday['name'] = $name; $weekday->save(); } for ($i = 0; $i < 3; $i++) { $course = new Course(); $course['name'] = 'Course ' . $i; $course['Semester'] = $semester; $course->save(); for ($w = 3; $w < 6; $w++) { $cw = new CourseWeekday(); $cw['Course'] = $course; $cw['weekday_id'] = $w; $cw->save(); } } }
public function check($data, $virtualobject, $relevantfields) { $errors = ""; if (!$data['fleximport_dozenten'] || !count($data['fleximport_dozenten'])) { $errors .= "Dozent kann nicht gemapped werden. "; } else { $exist = false; foreach ((array) $data['fleximport_dozenten'] as $dozent_id) { if (User::find($dozent_id)) { $exist = true; break; } } if (!$exist) { $errors .= "Angegebene Dozenten sind nicht im System vorhanden. "; } else { if ($GLOBALS['SEM_CLASS'][$GLOBALS['SEM_TYPE'][$virtualobject['status']]['class']]['only_inst_user']) { $statement = DBManager::get()->prepare("\n SELECT 1\n FROM user_inst\n WHERE user_id IN (:dozent_ids)\n AND Institut_id IN (:institut_ids)\n AND inst_perms IN ('autor','tutor','dozent')\n "); $statement->execute(array('dozent_ids' => (array) $data['fleximport_dozenten'], 'institut_ids' => $data['fleximport_related_institutes'] ?: array($virtualobject['institut_id']))); if (!$statement->fetch(PDO::FETCH_COLUMN, 0)) { $errors .= "Keiner der Dozenten ist in einer beteiligten Einrichtung angestellt. "; } } } } if (!$data['institut_id'] || !Institute::find($data['institut_id'])) { $errors .= "Keine gültige Heimateinrichtung. "; } if (!Semester::findByTimestamp($data['start_time'])) { $errors .= "Semester wurde nicht gefunden. "; } if ($data['status']) { if ($GLOBALS['SEM_CLASS'][$GLOBALS['SEM_TYPE'][$data['status']]['class']]['bereiche']) { $found = false; foreach ((array) $data['fleximport_studyarea'] as $sem_tree_id) { if (StudipStudyArea::find($sem_tree_id)) { $found = true; break; } } if (!$found) { $errors .= "Keine (korrekten) Studienbereiche definiert. "; } } } else { $errors .= "Kein Veranstaltungstyp definiert. "; } return $errors; }
public function frameResponse(\FrameResponseObject $frameResponseObject) { $path = $this->params; $portal = \lms_portal::get_instance(); $user = \lms_steam::get_current_user(); if (!\lms_steam::is_steam_admin($user)) { //TODO: REDIRECT!! } if ($_SERVER["REQUEST_METHOD"] == "POST") { $values = $_POST["values"]; $start_date = iso_to_unix($values["start"]); $end_date = iso_to_unix($values["end"]); // TODO PROBLEM CHECKING MISSING $courses = \steam_factory::get_object($GLOBALS["STEAM"]->get_id(), STEAM_COURSES_GROUP, CLASS_GROUP); $all_user = \steam_factory::groupname_to_object($GLOBALS["STEAM"]->get_id(), STEAM_ALL_USER); $new_semester = \steam_factory::create_group($GLOBALS["STEAM"]->get_id(), $values["name"], $courses, FALSE, $values["desc"]); $new_semester_admins = \steam_factory::create_group($GLOBALS["STEAM"]->get_id(), "admins", $new_semester, FALSE, "admin group for " . $values["desc"]); $new_semester_admins->set_attribute("OBJ_TYPE", "semester_admins"); $new_semester_admins->add_member($user); $new_semester->set_insert_access($new_semester_admins, TRUE); $new_semester->set_read_access($all_user, TRUE); $new_semester->set_attributes(array("SEMESTER_START_DATE" => $start_date, "SEMESTER_END_DATE" => $end_date)); // CACHE ZURÜCKSETZEN $cache = get_cache_function("ORGANIZATION"); $cache->drop("lms_steam::get_semesters"); header("Location: " . PATH_URL . "semester/index/" . $values["name"] . "/all"); } $content = \Semester::getInstance()->loadTemplate("semester_create.template.html"); $content->setVariable("INFO_TEXT", gettext("So, you want to start a new semester?") . " " . gettext("Please fill out the requested values on the right.") . "<br/><br/>" . str_replace("%SEMESTER", STEAM_CURRENT_SEMESTER, gettext("And don't forget to reset the current semester in the etc/koala.def.php, which is <b>%SEMESTER</b> at the moment."))); $content->setVariable("LABEL_NAME", gettext("Shortname")); $content->setVariable("INFO_NAME", gettext("IMPORTANT: Don't use any slashes, commas or dots in this name. Keep it short, like 'WS0607' or 'SS06'.")); $content->setVariable("LABEL_DESC", gettext("Name")); $content->setVariable("INFO_DESC", gettext("Examples: 'Wintersemester 06/07', or 'Sommersemester 2006'")); $content->setVariable("LABEL_START_DATE", gettext("Starting date of semester")); $content->setVariable("LABEL_END_DATE", gettext("Ending date of semester")); $content->setVariable("INFO_DATE_FORMAT", gettext("Please type in the date in the following format: YYYY-MM-DD")); $content->setVariable("LABEL_CREATE", gettext("Create Semester")); /* TODO: Portal anpassen $portal->set_page_main( array(array("link" => PATH_URL.SEMESTER_URL."/", "name" => gettext("Semester")), array("link" => "", "name" => gettext("Create new"))), $content->get(), "" ); */ $rawHtml = new \Widgets\RawHtml(); $rawHtml->setHtml($content->get()); $frameResponseObject->addWidget($rawHtml); return $frameResponseObject; }
/** * Populates and renders the widget according to the previously made * settings. */ public function render($variables = array()) { $current_id = Request::get($this->template_variables['name']); if (!$current_id && !$this->include_all) { $current_id = Semester::findCurrent()->id; } if ($this->include_all) { $element = new SelectElement(0, _('Alle Semester'), !$current_id); $this->addElement($element); } $semesters = array_reverse(Semester::getAll()); foreach ($semesters as $semester) { $element = new SelectElement($semester->id, $semester->name, $current_id && $semester->id == $current_id); $this->addElement($element); } return parent::render($variables); }
/** * 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(); } }
function AssignEventList($begin = 0, $end = 0, $resource_id='', $range_id='', $user_id='', $sort = TRUE, $filter = FALSE, $day_of_week = false){ global $RELATIVE_PATH_RESOURCES, $user; $semester = Semester::findCurrent(); if (!$begin) $begin = $semester->beginn; if (!$end ) $end = $semester->ende; $this->dow = $day_of_week; $this->begin = $begin; $this->end = $end; $this->filter = $filter; $this->resource_id = $resource_id; $this->range_id = $range_id; $this->user_id = $user_id; $this->restore(); if($sort) $this->sort(); }
public function map($format, $value) { switch ($format) { case "name": $semester = Semester::findOneByName($value); return $semester ? $semester['beginn'] : null; break; case "timestamp": if (!is_numeric($value)) { $value = strtotime($value); } $semester = Semester::findByTimestamp($value); return $semester ? $semester['beginn'] : null; break; case "current": $semester = Semester::findCurrent(); return $semester ? $semester['beginn'] : null; case "next": $semester = Semester::findCurrent(); return $semester ? $semester['beginn'] : null; } }
$export_pagecontent .= "<option"; if ($ex_type=="veranstaltung") $export_pagecontent .= " selected"; $export_pagecontent .= " value=\"veranstaltung\">" . _("Veranstaltungsdaten") . "</option>"; $export_pagecontent .= "<option"; if ($ex_type=="person") { $export_pagecontent .= " selected"; } $export_pagecontent .= " value=\"person\">" . _("MitarbeiterInnendaten") . "</option>"; $export_pagecontent .= "</select><br><br><br><br>"; $export_pagecontent .="<b>". _("Aus welchem Semester sollen die Daten exportiert werden (für Veranstaltungsexport): ") . "</b><br>"; if (!isset($ex_sem)) { $ex_sem = (Semester::findCurrent() ? Semester::findCurrent()->getId() : null); } $export_pagecontent .= SemesterData::GetSemesterSelector(array('name' => 'ex_sem'), $ex_sem, 'semester_id', true); $export_pagecontent .= "<br><br>"; $export_pagecontent .="<b>". _("Welche Arten von Veranstaltungen sollen exportiert werden? ") . "</b><br>"; if (!count($ex_sem_class)) { $ex_sem_class[1] = 1; } foreach (SeminarCategories::getAll() as $sem_class) { if(!$sem_class->studygroup_mode){ $export_pagecontent .= "<input type=\"checkbox\" name=\"ex_sem_class[$sem_class->id]\" value=\"1\""; if (isset($ex_sem_class[$sem_class->id])) $export_pagecontent .= " checked"; $export_pagecontent .= "> " . htmlready($sem_class->name) . " ";
$tmpfile = basename($sem_browse_obj->create_result_xls($excel_text)); if ($tmpfile) { header('Location: ' . getDownloadLink($tmpfile, _("Veranstaltungsübersicht.xls"), 4)); page_close(); die; } } PageLayout::setHelpKeyword("Basis.Informationsseite"); PageLayout::setTitle(($level == "s" ? $SessSemName["header_line"] . " - " : "") . $head_text); if ($level == "s" && $SessSemName[1] && $SessSemName["class"] == "inst") { Navigation::activateItem('/course/main/courses'); } $sidebar = Sidebar::get(); $sidebar->setImage('sidebar/seminar-sidebar.png'); $semester = new SelectWidget(_("Semester:"), URLHelper::getURL(), 'select_sem'); foreach (array_reverse(Semester::getAll()) as $one) { $semester->addElement(new SelectElement($one->id, $one->name, $one->id == $show_semester)); } $sidebar->addWidget($semester); $grouping = new LinksWidget(); $grouping->setTitle(_("Anzeige gruppieren:")); foreach ($sem_browse_obj->group_by_fields as $i => $field) { $grouping->addLink($field['name'], URLHelper::getLink('?', array('group_by' => $i)), $group_by == $i ? "icons/16/red/arr_1right" : ""); } $sidebar->addWidget($grouping); if (get_config('EXPORT_ENABLE') && $perm->have_perm("tutor")) { $export = new LinksWidget(); $export->setTitle(_("Daten ausgeben:")); if ($level == "s") { $export->addLink(_("Diese Daten exportieren"), URLHelper::getLink("export.php", array('range_id' => $SessSemName[1], 'o_mode' => 'choose', 'ex_type' => "veranstaltung", 'xslt_filename' => $SessSemName[0], 'ex_sem' => $show_semester)), Icon::create('download', 'info')); $export->addLink(_("Download als Excel Tabelle"), URLHelper::getLink('?send_excel=1&group_by=' . (int) $group_by), Icon::create('file-xls', 'info'));
/** * Creates a new model. * If creation is successful, the browser will be redirected to the 'review' page. */ public function actionCreate($programId = null, $semesterId = null) { $this->areaSmall = 'New Post'; Yii::log($this->module->basePath); $college = College::getUserCollege(); $this->forumBreadcrumb = array('Programs' => array('forum/index')); if ($programId) { $program = Program::model()->findByPk($programId); $this->programId = $programId; $this->forumBreadcrumb = array_merge($this->forumBreadcrumb, array($program->program_name => array('forum/programView', 'programId' => $programId))); } if ($semesterId) { $semester = Semester::model()->findByPk($semesterId); $this->semesterId = $semesterId; $this->forumBreadcrumb = array_merge($this->forumBreadcrumb, array($semester->semester_name => array('forum/viewTopics', 'programId' => $programId, 'semesterId' => $semesterId))); } $this->forumBreadcrumb = array_merge($this->forumBreadcrumb, array('New Post')); $model = new ThreadForm($college->college_id); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['PostItem'])) { $model->postItem->attributes = $_POST['PostItem']; $model->thread->attributes = $_POST['Thread']; $fileUpload = CUploadedFile::getInstance($model->thread, 'attachment'); Yii::log(CVarDumper::dumpAsString($fileUpload)); if ($fileUpload !== null) { $model->thread->attachment = $fileUpload; } if ($model->validate()) { if ($model->save()) { if ($fileUpload !== null) { $model->thread->attachment->saveAs($this->module->basePath . '/files/' . $model->thread->attachment . "_" . $model->thread->getPrimaryKey()); } //$model->thread->attachment->saveAs(Yii::app()->basePath . '/../files/' . $model->thread->attachment); $this->redirect(array('review', 'id' => $model->postItem->post_item_id)); exit; } else { Yii::app()->user->setFlash('error', 'Unable to post your thread.'); } } } $this->render('create', array('model' => $model, 'collegeId' => $college->college_id)); }
/** * returns latest semester id from assigned courses * if no courses are assigned current semester * * @return string id of semester */ public function getSemester() { $db = DBManager::get(); $timestamp = $db->fetchColumn("SELECT MAX(start_time + duration_time)\n FROM seminare WHERE duration_time <> -1\n AND seminar_id IN(?)", array($this->getCourses())); $semester = Semester::findByTimestamp($timestamp); if (!$semester) { $semester = Semester::findCurrent(); } return $semester->id; }
function showSemWeekNumber($start_time){ $semester = Semester::FindByTimestamp($start_time); if ($semester) { echo htmlready($semester['name']) . ' - '; $sem_week_number = $semester->getSemWeekNumber($start_time); if(is_int($sem_week_number)){ printf(_("%s. Vorlesungswoche"), $sem_week_number); } else { echo _("vorlesungsfreie Zeit"); } } else { echo _("kein Semester verfügbar"); } }
public static function getSemesterOptions() { return CHtml::listData(Semester::model()->findAll(), 'ID', 'Name'); }
public function actionSearchTopics($string, $progId = null, $semesterId = null) { $college = College::getUserCollege(); $this->areaLarge = $college->college_name; $this->areaSmall = Yii::t('forum', 'forum.area.search'); if (!empty($progId)) { $this->areaSmall .= " (In " . Program::model()->findByPk($progId)->program_name; if (!empty($semesterId)) { $this->areaSmall .= " / " . Semester::model()->findByPk($semesterId)->semester_name; } $this->areaSmall .= " )"; } $this->canPost = false; Yii::log($string); $threads = Thread::model()->searchTopics($string, $college->college_id, $progId, $semesterId); Yii::log(CVarDumper::dumpAsString($threads)); $topicRows = array(); foreach ($threads as $i => $thread) { $row = array('id' => $thread['thread_id'], 'topic' => $thread['title'], 'program_name' => $thread['program_name'], 'program' => $thread['program_id'], 'semester' => CHtml::link($thread['semester_name'], array('viewTopics', 'programId' => $thread['program_id'], 'semesterId' => $thread['semester_id'])), 'progCode' => $thread['program_code'], 'postDate' => $thread['date_created'], 'numReplies' => $thread['reply_count']); $topicRows[] = $row; } $gridColumns = array(array('name' => 'topic', 'header' => 'Topic', 'type' => 'raw', 'value' => 'CHtml::link($data["topic"], array("post/readTopic", "id" => $data["id"]));'), array('name' => 'program_name', 'header' => 'Program', 'type' => 'raw', 'value' => 'CHtml::link($data["program_name"], array("programView", "programId" => $data["program"]));'), array('name' => 'semester', 'header' => 'Semester', 'type' => 'raw'), array('name' => 'postDate', 'header' => 'Post Date', 'filter' => false, 'value' => 'Yii::app()->timeagoFormat->timeago(new DateTime($data["postDate"]))'), array('name' => 'numReplies', 'header' => 'Replies', 'filter' => false)); $filtersForm = new FiltersForm(); if (isset($_GET['FiltersForm'])) { $filtersForm->filters = $_GET['FiltersForm']; } $filteredData = $filtersForm->filter($topicRows); $forumGridData = new CommunityArrayDataProvider(array_values($filteredData), array('sort' => array('attributes' => array('topic', 'program', 'postDate', 'numReplies')), 'pagination' => array('pageSize' => Yii::app()->params['forum_pageSize']))); $forumGridData->setPagination(false); $this->emptyText = "No topics could be found"; $this->render('topics', array('gridColumns' => $gridColumns, 'forumGridData' => $forumGridData, 'filtersForm' => $filtersForm)); }
function semester() { foreach (Semester::getAll() as $semester) { if (!$semester["past"]) { return false; } } return true; }
/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer $id the ID of the model to be loaded * @return Semester the loaded model * @throws CHttpException */ public function loadModel($id) { $model = Semester::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
<?php echo Yii::t('forum', 'forum.post.postIn'); ?> </legend> <?php echo $form->textFieldRow($model, 'collegeName', array('disabled' => true)); ?> <?php echo $form->dropDownListRow($model->thread, 'program_id', CHtml::listData(College::getProgramsByCollege($collegeId), 'program_id', 'program_name'), array('options' => array($this->programId => array('selected' => 'selected')))); ?> <?php echo $form->dropDownListRow($model->thread, 'semester_id', CHtml::listData(Semester::model()->findAll(), 'semester_id', 'semester_name'), array('options' => array($this->semesterId => array('selected' => 'selected')))); ?> <?php echo $form->textFieldRow($model->thread, 'program_code'); ?> <legend> <?php echo Yii::t('forum', 'forum.post.details'); ?> </legend> <?php echo $form->textFieldRow($model->postItem, 'title');
?> "> <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): ?>
public function studentEnrollment($courseId, $userId) { $this->load->model('request_model'); $semester = new Semester(); $currentSemester = $semester->getCurrentSemester(); $temporaryRequest = new TemporaryRequest(); $disciplinesToRequest = $temporaryRequest->getUserTempRequest($userId, $courseId, $currentSemester['id_semester']); $thereIsDisciplinesToRequest = $disciplinesToRequest !== FALSE; $data = array('semester' => $currentSemester, 'courseId' => $courseId, 'userId' => $userId, 'disciplinesToRequest' => $disciplinesToRequest, 'thereIsDisciplinesToRequest' => $thereIsDisciplinesToRequest); $requestForSemester = $this->getUserRequestDisciplines($userId, $courseId, $currentSemester['id_semester']); if ($requestForSemester !== FALSE) { $data['requestDisciplinesClasses'] = $requestForSemester['requestDisciplinesClasses']; switch ($requestForSemester['requestStatus']) { case EnrollmentConstants::REQUEST_INCOMPLETE_STATUS: $requestStatus = "Incompleta (Aguardar aprovação do coordenador)"; break; case EnrollmentConstants::REQUEST_ALL_APPROVED_STATUS: $requestStatus = "Aprovada"; break; case EnrollmentConstants::REQUEST_ALL_REFUSED_STATUS: $requestStatus = "Recusada"; break; case EnrollmentConstants::REQUEST_PARTIALLY_APPROVED_STATUS: $requestStatus = "Parcialmente aprovada"; break; default: $requestStatus = "-"; break; } $data['requestStatus'] = $requestStatus; $request = $this->getRequest(array('id_student' => $userId, 'id_course' => $courseId, 'id_semester' => $currentSemester['id_semester'])); $requestId = $request['id_request']; $mastermind = new MasterMind(); $mastermindId = $mastermind->getMastermindByStudent($userId); $mastermindMessage = $mastermind->getMastermindMessage($mastermindId, $requestId); $data['mastermindMessage'] = $mastermindMessage; } else { $data['requestDisciplinesClasses'] = FALSE; $data['requestStatus'] = FALSE; } loadTemplateSafelyByGroup("estudante", 'request/enrollment_request', $data); }
/** * Creates an array with all seminars * * @return array */ function getDozentSeminars() { $semester = $courses = array(); $semester[] = Semester::findNext(); $semester[] = Semester::findCurrent(); $semester[] = Semester::findByTimestamp(Semester::findCurrent()->beginn - 1); if (Config::get()->IMPORTANT_SEMNUMBER) { $field = 'veranstaltungsnummer'; } else { $field = 'name'; } $allcourses = new SimpleCollection(Course::findBySQL("INNER JOIN seminar_user USING(Seminar_id) WHERE user_id=? AND seminar_user.status='dozent' AND seminare.visible=1", array($this->current_user->id))); foreach (array_filter($semester) as $one) { $courses[$one->name] = $allcourses->filter(function ($c) use($one) { return $c->start_time <= $one->beginn && ($one->beginn <= $c->start_time + $c->duration_time || $c->duration_time == -1); })->orderBy($field); if (!$courses[$one->name]->count()) { unset($courses[$one->name]); } } return $courses; }
<fieldset> <legend><?php echo _('Veranstaltungen'); ?> </legend> <? if (!$instant_course_set_view) : ?> <label class="caption"> <?php echo _('Semester:'); ?> <select name="semester" onchange="STUDIP.Admission.getCourses('<?php echo $controller->url_for('admission/courseset/instcourses', $courseset ? $courseset->getId() : ''); ?> ')"> <?php foreach (array_reverse(Semester::getAll(), true) as $id => $semester) { ?> <option value="<?php echo $id; ?> "<?php echo $id == $selectedSemester ? ' selected="selected"' : ''; ?> > <?php echo htmlReady($semester->name); ?> </option> <?php } ?>
/** * 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); }
function up() { $db = DBManager::get(); // assign conditions to admission rules $db->exec("CREATE TABLE IF NOT EXISTS `admission_condition` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `filter_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`, `filter_id`) )\n ENGINE = MyISAM"); // "chance adjustment" in seat distribution $db->exec("CREATE TABLE IF NOT EXISTS `admissionfactor` (\n `list_id` VARCHAR(32) NOT NULL ,\n `name` VARCHAR(255) NOT NULL ,\n `factor` DECIMAL(5,2) NOT NULL DEFAULT 1,\n `owner_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`list_id`) )\n ENGINE = MyISAM"); // available admission rules. $db->exec("CREATE TABLE IF NOT EXISTS `admissionrules` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `ruletype` VARCHAR(255) UNIQUE NOT NULL,\n `active` TINYINT(1) NOT NULL DEFAULT 0,\n `mkdate` INT(11) NOT NULL DEFAULT 0,\n PRIMARY KEY (`id`)\n ) ENGINE = MyISAM"); // Create entries for default admission rule types. $db->exec("INSERT IGNORE INTO `admissionrules`\n (`ruletype`, `active`, `mkdate`) VALUES\n ('ConditionalAdmission', 1, UNIX_TIMESTAMP()),\n ('LimitedAdmission', 1, UNIX_TIMESTAMP()),\n ('LockedAdmission', 1, UNIX_TIMESTAMP()),\n ('PasswordAdmission', 1, UNIX_TIMESTAMP()),\n ('TimedAdmission', 1, UNIX_TIMESTAMP()),\n ('ParticipantRestrictedAdmission', 1, UNIX_TIMESTAMP());"); // Admission rules can be available globally or only at selected institutes. $db->exec("CREATE TABLE IF NOT EXISTS `admissionrule_inst` (\n `rule_id` VARCHAR(32) NOT NULL,\n `institute_id` VARCHAR(32) NOT NULL,\n `mkdate` INT(11) NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`, `institute_id`)\n ) ENGINE = MyISAM"); // admission rules specifying conditions for access $db->exec("CREATE TABLE IF NOT EXISTS `conditionaladmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `conditions_stopped` TINYINT(1) NOT NULL DEFAULT 0 ,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // assign course sets to factor lists $db->exec("CREATE TABLE IF NOT EXISTS `courseset_factorlist` (\n `set_id` VARCHAR(32) NOT NULL ,\n `factorlist_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0 ,\n PRIMARY KEY (`set_id`, `factorlist_id`) )\n ENGINE = MyISAM"); // assign course sets to institutes $db->exec("CREATE TABLE IF NOT EXISTS `courseset_institute` (\n `set_id` VARCHAR(32) NOT NULL ,\n `institute_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NULL ,\n `chdate` INT NULL ,\n PRIMARY KEY (`set_id`, `institute_id`),\n INDEX `institute_id` (`institute_id`,`set_id`))\n ENGINE = MyISAM"); // assign admission rules to course sets $db->exec("CREATE TABLE IF NOT EXISTS `courseset_rule` (\n `set_id` VARCHAR(32) NOT NULL ,\n `rule_id` VARCHAR(32) NOT NULL ,\n `type` VARCHAR(255) NULL ,\n `mkdate` INT NULL ,\n PRIMARY KEY (`set_id`, `rule_id`),\n INDEX `type` (`type`,`set_id`))\n ENGINE = MyISAM"); // sets of courses with common admission rules $db->exec("CREATE TABLE IF NOT EXISTS `coursesets` (\n `set_id` VARCHAR(32) NOT NULL ,\n `user_id` VARCHAR(32) NOT NULL ,\n `name` VARCHAR(255) NOT NULL ,\n `infotext` TEXT NOT NULL ,\n `algorithm` VARCHAR(255) NOT NULL ,\n `algorithm_run` TINYINT(1) NOT NULL DEFAULT 0 ,\n `private` TINYINT(1) NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`set_id`) ,\n INDEX `set_user` (`user_id`, `set_id`) )\n ENGINE = MyISAM"); // admission rules with max number of courses to register for $db->exec("CREATE TABLE IF NOT EXISTS `limitedadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NOT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `maxnumber` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // admission rules that completely lock access to courses $db->exec("CREATE TABLE IF NOT EXISTS `lockedadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // admission rules that specify a password for course access $db->exec("CREATE TABLE IF NOT EXISTS `passwordadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `password` VARCHAR(255) NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // priorities for course assignment $db->exec("CREATE TABLE IF NOT EXISTS `priorities` (\n `user_id` VARCHAR(32) NOT NULL ,\n `set_id` VARCHAR(32) NOT NULL ,\n `seminar_id` VARCHAR(32) NOT NULL ,\n `priority` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`user_id`, `set_id`, `seminar_id`) ,\n INDEX `user_rule_priority` (`user_id` ASC, `priority` ASC, `set_id` ASC) )\n ENGINE = MyISAM"); // assign courses to course sets $db->exec("CREATE TABLE IF NOT EXISTS `seminar_courseset` (\n `set_id` VARCHAR(32) NOT NULL ,\n `seminar_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0 ,\n PRIMARY KEY (`set_id`, `seminar_id`),\n INDEX `seminar_id` (`seminar_id`, `set_id` ) )\n ENGINE = MyISAM"); // admission rules concerning time $db->exec("CREATE TABLE IF NOT EXISTS `timedadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NOT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) ,\n INDEX `start_time` (`start_time` ASC) ,\n INDEX `end_time` (`end_time` ASC) ,\n INDEX `start_end` (`start_time` ASC, `end_time` ASC) )\n ENGINE = MyISAM"); $db->exec("CREATE TABLE IF NOT EXISTS `participantrestrictedadmissions` (\n `rule_id` varchar(32),\n `message` text NOT NULL,\n `distribution_time` int(11) NOT NULL DEFAULT 0,\n `mkdate` int(11) NOT NULL DEFAULT 0,\n `chdate` int(11) NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`)\n ) ENGINE=MyISAM"); // assign users to lists with different factor in seat distribution $db->exec("CREATE TABLE IF NOT EXISTS `user_factorlist` (\n `list_id` VARCHAR(32) NULL ,\n `user_id` VARCHAR(32) NULL ,\n `mkdate` INT NULL ,\n PRIMARY KEY (`list_id`, `user_id`) )\n ENGINE = MyISAM"); // filters for users $db->exec("CREATE TABLE IF NOT EXISTS `userfilter` (\n `filter_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`filter_id`) )\n ENGINE = MyISAM"); // several fields form a user filter $db->exec("CREATE TABLE IF NOT EXISTS `userfilter_fields` (\n `field_id` VARCHAR(32) NOT NULL ,\n `filter_id` VARCHAR(32) NOT NULL ,\n `type` VARCHAR(255) NOT NULL ,\n `value` VARCHAR(255) NOT NULL ,\n `compare_op` VARCHAR(255) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`field_id`) )\n ENGINE = MyISAM"); // user defined max number of courses to register for $db->exec("CREATE TABLE IF NOT EXISTS `userlimits` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `user_id` VARCHAR(32) NOT NULL ,\n `maxnumber` INT NULL ,\n `mkdate` INT NULL ,\n `chdate` INT NULL ,\n PRIMARY KEY (`rule_id`, `user_id`) )\n ENGINE = MyISAM"); $cs_insert = $db->prepare("INSERT INTO coursesets (set_id,user_id,name,infotext,algorithm,private,mkdate,chdate)\n VALUES (?,?,?,?,'',?,?,?)"); $cs_i_insert = $db->prepare("INSERT INTO courseset_institute (set_id,institute_id,mkdate,chdate) VALUES (?,?,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $cs_r_insert = $db->prepare("INSERT INTO courseset_rule (set_id,rule_id,type,mkdate) VALUES (?,?,?,UNIX_TIMESTAMP())"); $s_cs_insert = $db->prepare("INSERT INTO seminar_courseset (set_id,seminar_id,mkdate) VALUES (?,?,UNIX_TIMESTAMP())"); $password_insert = $db->prepare("INSERT INTO passwordadmissions (rule_id,message,password,mkdate,chdate) VALUES (?,'Das Passwort ist falsch',?,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $locked_insert = $db->prepare("INSERT INTO lockedadmissions (rule_id,message,mkdate,chdate) VALUES (?,'Die Anmeldung ist gesperrt',UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $hasher = new PasswordHash(8, false); $user_id = $GLOBALS['user']->id; //mit pw wandeln $pw_admission = $db->fetchAll("SELECT seminar_id, name, passwort, institut_id, chdate FROM seminare WHERE admission_type = 0 AND Lesezugriff = 2"); foreach ($pw_admission as $course) { $new_pwd = $hasher->HashPassword($course['passwort']); $rule_id = md5(uniqid('passwordadmissions', 1)); $password_insert->execute(array($rule_id, $new_pwd)); $set_id = md5(uniqid('coursesets', 1)); $name = 'Anmeldung mit Passwort: ' . $course['name']; $info = 'Erzeugt durch Migration 128 ' . strftime('%X %x'); $cs_insert->execute(array($set_id, $user_id, $name, $info, 1, $course['chdate'], $course['chdate'])); $cs_r_insert->execute(array($set_id, $rule_id, 'PasswordAdmission')); $s_cs_insert->execute(array($set_id, $course['seminar_id'])); } //ein globales set für alle gesperrten $locked_set_id = md5(uniqid('coursesets', 1)); $name = 'Anmeldung gesperrt (global)'; $info = ''; $cs_insert->execute(array($locked_set_id, '', $name, $info, 1, time(), time())); $locked_rule_id = md5(uniqid('lockedadmissions', 1)); $locked_insert->execute(array($locked_rule_id)); $cs_r_insert->execute(array($locked_set_id, $locked_rule_id, 'LockedAdmission')); //locked wandeln $locked_admission = $db->fetchAll("SELECT seminar_id, name, institut_id FROM seminare WHERE admission_type = 3"); foreach ($locked_admission as $course) { $s_cs_insert->execute(array($locked_set_id, $course['seminar_id'])); } // Lade Daten des aktuellen Semesters. $semester = Semester::findCurrent(); $now = time(); $preserve_waitlists = array(); //gruppierte wandeln $grouped_admission = $db->fetchAll("SELECT seminar_id, seminare.name, start_time, duration_time, institut_id, admission_type, admission_starttime,\n admission_endtime, admission_endtime_sem, admission_group.name as a_name, admission_group, admission_group.chdate\n FROM seminare INNER JOIN admission_group ON group_id = admission_group\n WHERE admission_type IN (1, 2) ORDER BY admission_group, admission_starttime, VeranstaltungsNummer"); foreach ($grouped_admission as $course) { if ($group_id != $course['admission_group']) { $group_id = $course['admission_group']; $group_type = $course['admission_type']; $group_inst = array($course['institut_id']); $group_name = $course['a_name'] ?: ++$g; /* * Check, ob Anmeldeverfahren in der Vergangenheit schon * abgeschlossen wurde. Hier extra ausführlich, damit es * verständlich bleibt. */ // Veranstaltungen, die (auch implizit) im aktuellen oder kommenden Semestern liegen. if (($course['start_time'] + $course['duration_time'] >= $semester->beginn || $course['duration_time'] == -1) && ($course['admission_disable_waitlist'] == 0 || $course['admission_starttime'] > $now || $course['admission_endtime'] > $now || $course['admission_endtime_sem'] > $now || $course['admission_endtime_sem'] == -1)) { // Erzeuge ein Anmeldeset mit den vorhandenen Einstellungen der Veranstaltung. $cs = $this->buildCourseset($course, true); $cs->setName('Beschränkte Teilnehmeranzahl: Gruppe ' . $group_name)->setInfoText('Erzeugt durch Migration 128 ' . strftime('%X %x'))->addInstitute($course['institut_id'])->setPrivate(true)->setUserId($user_id)->store(); $set_id = $cs->getId(); // Losen oder Anmeldezeitraum vorbei => sperren. // Veranstaltungen in vergangenen Semestern werden einfach gesperrt. } else { $group_type = 3; $rule_id = md5(uniqid('lockedadmissions', 1)); $locked_insert->execute(array($rule_id)); $set_id = md5(uniqid('coursesets', 1)); $name = 'Anmeldung gesperrt: Gruppe ' . $group_name; $info = 'Erzeugt durch Migration 128 ' . strftime('%X %x'); $cs_insert->execute(array($set_id, $user_id, $name, $info, 1, $course['chdate'], $course['chdate'])); $cs_i_insert->execute(array($set_id, $course['institut_id'])); $cs_r_insert->execute(array($set_id, $rule_id, 'LockedAdmission')); } } // Veranstaltung mit Losverfahren if ($group_type == 1) { // Losliste übernehmen $db->execute("INSERT INTO priorities (user_id, set_id, seminar_id, priority, mkdate, chdate)\n SELECT user_id, ?, seminar_id, 1, mkdate, UNIX_TIMESTAMP()\n FROM admission_seminar_user WHERE status = 'claiming' AND seminar_id = ?", array($set_id, $course['seminar_id'])); // Chronologische Anmeldung } else { if ($group_type == 2) { $preserve_waitlists[] = $course['seminar_id']; } } // weitere Einrichtungen zuordnen if ($group_type != 3 && !in_array($course['institut_id'], $group_inst)) { $cs_i_insert->execute(array($set_id, $course['institut_id'])); $group_inst[] = $course['institut_id']; } $s_cs_insert->execute(array($set_id, $course['seminar_id'])); } $admission = $db->fetchAll("SELECT seminar_id, seminare.name, start_time, duration_time, institut_id, admission_type, admission_starttime, admission_endtime, admission_endtime_sem\n FROM seminare left join admission_group on(group_id=admission_group) WHERE admission_type in (1, 2) AND group_id is null"); foreach ($admission as $course) { /* * Check, ob Anmeldeverfahren in der Vergangenheit schon * abgeschlossen wurde. Hier extra ausführlich, damit es * verständlich bleibt. */ // Veranstaltungen, die (auch implizit) im aktuellen oder kommenden Semestern liegen. if (($course['start_time'] + $course['duration_time'] >= $semester->beginn || $course['duration_time'] == -1) && ($course['admission_disable_waitlist'] == 0 || $course['admission_starttime'] > $now || $course['admission_endtime'] > $now || $course['admission_endtime_sem'] > $now || $course['admission_endtime_sem'] == -1)) { // Erzeuge ein Anmeldeset mit den vorhandenen Einstellungen der Veranstaltung. $cs = $this->buildCourseset($course, false); $cs->setName('Beschränkte Teilnehmeranzahl: ' . $course['name'])->setInfoText('Erzeugt durch Migration 128 ' . strftime('%X %x'))->setPrivate(true)->setUserId($user_id)->store(); $set_id = $cs->getId(); // Veranstaltung mit Losverfahren if ($course['admission_type'] == 1) { // Losliste übernehmen $db->execute("INSERT INTO priorities (user_id, set_id, seminar_id, priority, mkdate, chdate)\n SELECT user_id, ?, seminar_id, 1, mkdate, UNIX_TIMESTAMP()\n FROM admission_seminar_user WHERE status = 'claiming' AND seminar_id = ?", array($set_id, $course['seminar_id'])); // Chronologische Anmeldung } else { $preserve_waitlists[] = $course['seminar_id']; } // Losen oder Anmeldezeitraum vorbei => sperren. // Veranstaltungen in vergangenen Semestern werden einfach gesperrt. } else { $set_id = $locked_set_id; } $s_cs_insert->execute(array($set_id, $course['seminar_id'])); } $db->exec("UPDATE seminare SET Lesezugriff=1,Schreibzugriff=1 WHERE Lesezugriff=3"); $db->exec("UPDATE seminare SET Lesezugriff=1,Schreibzugriff=1 WHERE Lesezugriff=2"); // Übernehme Veranstaltungen ohne Anmeldeverfahren, aber mit Anmeldezeitraum in der Zukunft. $now = time(); $admission = $db->fetchAll("SELECT `seminar_id`,`seminare`.`name`,`institut_id`,`admission_starttime`,`admission_endtime_sem`\n FROM `seminare` WHERE `admission_type`=0 AND (`admission_starttime`>:now OR `admission_endtime_sem`>:now)", array('now' => $now)); foreach ($admission as $course) { // Erzeuge ein Anmeldeset mit den vorhandenen Einstellungen der Veranstaltung. $cs = new CourseSet(); $rule = new TimedAdmission(); if ($course['admission_starttime'] != -1) { $rule->setStartTime($course['admission_starttime']); } if ($course['admission_endtime_sem'] != -1) { $rule->setEndTime($course['admission_endtime_sem']); } $cs->setName('Anmeldezeitraum: ' . $course['name'])->setInfoText('Erzeugt durch Migration 128 ' . strftime('%X %x'))->addCourse($course['seminar_id'])->addAdmissionRule($rule)->setPrivate(true)->setUserId($user_id)->store(); } //Warte und Anmeldelisten löschen $db->exec("DELETE FROM admission_seminar_user WHERE status = 'claiming'"); $db->execute("DELETE FROM admission_seminar_user WHERE status = 'awaiting' AND seminar_id NOT IN(?)", array($preserve_waitlists)); $db->exec("DROP TABLE admission_seminar_studiengang"); $db->exec("DROP TABLE admission_group"); $db->exec("ALTER TABLE `seminare` DROP `Passwort`"); $db->exec("ALTER TABLE `seminare` DROP `admission_endtime`"); $db->exec("ALTER TABLE `seminare` DROP `admission_type`"); $db->exec("ALTER TABLE `seminare` DROP `admission_selection_take_place`"); $db->exec("ALTER TABLE `seminare` DROP `admission_group`"); $db->exec("ALTER TABLE `seminare` DROP `admission_starttime`"); $db->exec("ALTER TABLE `seminare` DROP `admission_endtime_sem`"); $db->exec("ALTER TABLE `seminare` DROP `admission_enable_quota`"); $db->exec("ALTER TABLE `seminare` ADD `admission_waitlist_max` INT UNSIGNED NOT NULL DEFAULT '0'"); $db->exec("ALTER TABLE `seminare` ADD `admission_disable_waitlist_move` TINYINT UNSIGNED NOT NULL DEFAULT '0'"); $db->exec("ALTER TABLE `seminar_user` DROP `admission_studiengang_id`"); $db->exec("ALTER TABLE `admission_seminar_user` DROP `studiengang_id`"); try { $db->exec("ALTER TABLE `seminar_user` DROP INDEX `Seminar_id`"); $db->exec("ALTER TABLE `seminar_user` DROP INDEX `user_id`"); } catch (PDOException $e) { } $db->exec("ALTER TABLE `seminar_user` ADD INDEX (`user_id`, `Seminar_id`, `status`)"); SimpleORMap::expireTableScheme(); // Insert global configuration: who may edit course sets? $db->exec("INSERT IGNORE INTO `config`\n (`config_id`, `parent_id`, `field`, `value`, `is_default`,\n `type`, `range`, `section`, `position`, `mkdate`, `chdate`,\n `description`, `comment`, `message_template`)\n VALUES\n (MD5('ALLOW_DOZENT_COURSESET_ADMIN'), '',\n 'ALLOW_DOZENT_COURSESET_ADMIN', '0', '1', 'boolean', 'global',\n 'coursesets', '0', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),\n 'Sollen Lehrende einrichtungsweite Anmeldesets anlegen und bearbeiten dürfen?',\n '', '')"); // Insert global configuration: who may edit course sets? $db->exec("INSERT IGNORE INTO `config`\n (`config_id`, `parent_id`, `field`, `value`, `is_default`,\n `type`, `range`, `section`, `position`, `mkdate`, `chdate`,\n `description`, `comment`, `message_template`)\n VALUES\n (MD5('ENABLE_COURSESET_FCFS'), '',\n 'ENABLE_COURSESET_FCFS', '0', '1', 'boolean', 'global',\n 'coursesets', '0', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),\n 'Soll first-come-first-served (Windhundverfahren) bei der Anmeldung erlaubt sein?',\n '', '')"); }
public function getSemesters() { $semesters = Semester::select('id')->get(); $output = array(); foreach ($semesters as $id => $semester) { if (strpos($semester, "i2") == false) { $temp = strtoupper(substr($semester['id'], 0, 1)) . substr($semester['id'], 1, strlen($semester['id']) - 5) . " " . substr($semester['id'], -4, 4); $output[$semester['id']] = $temp; } else { if (strpos($semester, "ii2") == false) { $temp = strtoupper(substr($semester['id'], 0, 1)) . substr($semester['id'], 1, strlen($semester['id']) - 6) . " " . strtoupper(substr($semester['id'], -5, 1)) . " " . substr($semester['id'], -4, 4); $output[$semester['id']] = $temp; } else { $temp = strtoupper(substr($semester['id'], 0, 1)) . substr($semester['id'], 1, strlen($semester['id']) - 7) . " " . strtoupper(substr($semester['id'], -6, 2)) . " " . substr($semester['id'], -4, 4); $output[$semester['id']] = $temp; } } } return json_encode($output); }