Example #1
0
 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);
 }
Example #2
0
 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);
 }
Example #3
0
 /**
  * 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;
 }
Example #5
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;
}
 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;
 }
Example #8
0
 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;
 }
Example #9
0
 /**
  * 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);
 }
Example #10
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));
 }
Example #11
0
 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();
     }
 }
Example #12
0
 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;
     }
 }
Example #14
0
$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 .= ">&nbsp;" . htmlready($sem_class->name) . "&nbsp;&nbsp;";
Example #15
0
    $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));
 }
Example #17
0
 /**
  * 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;
 }
Example #18
0
 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");
     }
 }
Example #19
0
 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));
 }
Example #21
0
 function semester() {
     foreach (Semester::getAll() as $semester) {
         if (!$semester["past"]) {
             return false;
         }
     }
     return true;
 }
Example #22
0
 /**
  * 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;
 }
Example #23
0
		<?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');
Example #24
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): ?>
Example #25
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);
 }
Example #26
0
 /**
  * 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;
 }
Example #27
0
    <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);
}
Example #29
0
 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);
 }