Exemplo n.º 1
0
/**
* create xml_header
*
* This function creates a xml-header for output.
* Its contents are Name of University, Stud.IP-Version, Range of Export (e.g. "root"), and temporal range.
*
* @access   public
* @return       string  xml-header
*/
function xml_header()
{
global $UNI_NAME_CLEAN, $SOFTWARE_VERSION, $ex_type, $ex_sem, $range_name, $range_id;
    $semester = $ex_sem ? Semester::find($ex_sem) : Semester::findCurrent();
    $xml_tag_string = "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
    $xml_tag_string .= "<studip version=\"" . xml_escape ($SOFTWARE_VERSION) . "\" logo=\"". xml_escape (Assets::image_path('logos/logo2b.png')) . "\"";
    if ($range_id == "root") $xml_tag_string .= " range=\"" . _("Alle Einrichtungen") . "\"";
    elseif ($range_name != "") $xml_tag_string .= " range=\"" . xml_escape ($range_name) . "\"";
    if ($UNI_NAME_CLEAN != "") $xml_tag_string .= " uni=\"" . xml_escape ($UNI_NAME_CLEAN) . "\"";
    if ($semester)
        $xml_tag_string .= " zeitraum=\"" . xml_escape ($semester->name) . "\" semester_id=\"" . xml_escape ($semester->getId()) . "\"";
    $xml_tag_string .= ">\n";
    return $xml_tag_string;
}
Exemplo n.º 2
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);
 }
Exemplo n.º 3
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;
     }
 }
Exemplo n.º 5
0
 /**
  * Fetches courses at the given institutes.
  * @param Array  $instituteIds IDs of institutes to check
  * @param String $coursesetId Get also courses assigned to the given courseset
  * @param Array  $selectedCourses Courses that have already been selected manually
  * @param String $semester_id Get only courses belonging to the given semester
  * @param mixed  $filter Fetch only courses fulfilling a search string or of a certain lecturer?
  *
  * @return Array Found courses.
  */
 public function getInstCourses($instituteIds, $coursesetId = '', $selectedCourses = array(), $semester_id = null, $filter = false)
 {
     // Get semester dates for course sorting.
     $currentSemester = $semester_id ? Semester::find($semester_id) : Semester::findCurrent();
     $db = DBManager::get();
     $courses = array();
     if ($filter === true) {
         $query = "SELECT su.`Seminar_id` FROM `seminar_user` su\n                INNER JOIN `seminare` s USING(`Seminar_id`)\n                WHERE s.status NOT IN(?) AND s.`start_time` <= ? AND (? <= (s.`start_time` + s.`duration_time`) OR s.`duration_time` = -1)\n                AND su.`user_id`=?";
         $parameters = array(studygroup_sem_types(), $currentSemester->beginn, $currentSemester->beginn, $GLOBALS['user']->id);
         if (get_config('DEPUTIES_ENABLE')) {
             $query .= " UNION SELECT s.`Seminar_id` FROM `seminare` s\n                    INNER JOIN `deputies` d ON (s.`Seminar_id`=d.`range_id`)\n                    WHERE s.`start_time` <= ? AND (? <= (s.`start_time` + s.`duration_time`) OR s.`duration_time` = -1)\n                    AND d.`user_id`=?";
             $parameters = array_merge($parameters, array($currentSemester->beginn, $currentSemester->beginn, $GLOBALS['user']->id));
         }
         $courses = $db->fetchFirst($query, $parameters);
     } elseif (strlen($filter) > 1) {
         $courses = $db->fetchFirst("SELECT DISTINCT s.seminar_id FROM seminare s\n                INNER JOIN seminar_user su ON s.seminar_id=su.seminar_id AND su.status='dozent'\n                INNER JOIN auth_user_md5 aum USING(user_id)\n                WHERE s.status NOT IN(:studygroup_types) AND s.start_time <= :sembegin AND (:sembegin <= (s.start_time + s.duration_time) OR s.duration_time = -1)\n                AND s.Institut_id IN(:institutes)\n                AND (s.name LIKE :filter OR s.Veranstaltungsnummer LIKE :filter OR Nachname LIKE :filter)", array('studygroup_types' => studygroup_sem_types() ? studygroup_sem_types() : array(''), 'sembegin' => $currentSemester->beginn, 'institutes' => $instituteIds, 'filter' => '%' . $filter . '%'));
     }
     //filter courses from other sets out
     if (count($courses)) {
         $found = DBManager::get()->fetchFirst("SELECT DISTINCT seminar_id FROM seminar_courseset\n                    LEFT JOIN courseset_rule USING(set_id)\n                    WHERE type NOT IN ('LockedAdmission','PasswordAdmission')\n                    AND seminar_id IN(?)", array($courses));
         $courses = array_diff($courses, $found);
     }
     if ($coursesetId) {
         $courses = array_merge($courses, $db->fetchFirst("SELECT seminar_id FROM seminar_courseset sc\n                     WHERE set_id = ?", array($coursesetId)));
     }
     if ($selectedCourses) {
         $courses = array_merge($courses, $selectedCourses);
     }
     $data = array();
     $callable = function ($course) use(&$data, $coursesetId) {
         $data[$course->id] = array('seminar_id' => $course->Seminar_id, 'VeranstaltungsNummer' => $course->VeranstaltungsNummer, 'Name' => $course->Name . ($course->duration_time == -1 ? ' ' . _('(unbegrenzt)') : ''), 'admission_turnout' => $course->admission_turnout, 'visible' => $course->visible);
         $data[$course->id]['admission_type'] = DBManager::get()->fetchColumn("SELECT type FROM seminar_courseset\n            INNER JOIN courseset_rule USING (set_id)\n            WHERE type IN ('LockedAdmission','PasswordAdmission')\n            AND seminar_id = ? " . ($coursesetId ? "AND set_id <> ?" : ""), $coursesetId ? array($course->id, $coursesetId) : array($course->id));
     };
     Course::findEachMany($callable, array_unique($courses), "ORDER BY start_time DESC, VeranstaltungsNummer ASC, Name ASC");
     return $data;
 }
Exemplo n.º 6
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;
 }
Exemplo n.º 7
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            '', '')");
 }
Exemplo n.º 8
0
 /**
  * Seminar group administration - cluster your seminars by colors or
  * change grouping mechanism
  */
 public function groups_action($sem = null, $studygroups = false)
 {
     if ($GLOBALS['perm']->have_perm('admin')) {
         throw new AccessDeniedException();
     }
     $this->title = _('Meine Veranstaltungen') . ' - ' . _('Farbgruppierungen');
     if (Request::isXhr()) {
         $this->set_layout(null);
         $this->response->add_header('Content-Type', 'text/html;charset=Windows-1252');
         header('X-Title: ' . $this->title);
     } else {
         PageLayout::setTitle($this->title);
         PageLayout::setHelpKeyword('Basis.VeranstaltungenOrdnen');
         Navigation::activateItem('/browse/my_courses/list');
     }
     $this->current_semester = $sem ?: Semester::findCurrent()->semester_id;
     $this->semesters = SemesterData::GetSemesterArray();
     $forced_grouping = Config::get()->MY_COURSES_FORCE_GROUPING;
     if ($forced_grouping == 'not_grouped') {
         $forced_grouping = 'sem_number';
     }
     $no_grouping_allowed = $forced_grouping == 'sem_number' || !in_array($forced_grouping, getValidGroupingFields());
     $group_field = $GLOBALS['user']->cfg->MY_COURSES_GROUPING ?: $forced_grouping;
     $groups = array();
     $add_fields = '';
     $add_query = '';
     if ($group_field == 'sem_tree_id') {
         $add_fields = ', sem_tree_id';
         $add_query = "LEFT JOIN seminar_sem_tree sst ON (sst.seminar_id=seminare.Seminar_id)";
     } else {
         if ($group_field == 'dozent_id') {
             $add_fields = ', su1.user_id as dozent_id';
             $add_query = "LEFT JOIN seminar_user as su1 ON (su1.seminar_id=seminare.Seminar_id AND su1.status='dozent')";
         }
     }
     $dbv = DbView::getView('sem_tree');
     $query = "SELECT seminare.VeranstaltungsNummer AS sem_nr, seminare.Name, seminare.Seminar_id,\n                         seminare.status AS sem_status, seminar_user.gruppe, seminare.visible,\n                         {$dbv->sem_number_sql} AS sem_number,\n                         {$dbv->sem_number_end_sql} AS sem_number_end {$add_fields}\n                  FROM seminar_user\n                  JOIN semester_data sd\n                  LEFT JOIN seminare USING (Seminar_id)\n                  {$add_query}\n                  WHERE seminar_user.user_id = ?";
     if (Config::get()->MY_COURSES_ENABLE_STUDYGROUPS && !$studygroups) {
         $query .= " AND seminare.status != 99";
     }
     if ($studygroups) {
         $query .= " AND seminare.status = 99";
     }
     if (get_config('DEPUTIES_ENABLE')) {
         $query .= " UNION " . getMyDeputySeminarsQuery('gruppe', $dbv->sem_number_sql, $dbv->sem_number_end_sql, $add_fields, $add_query);
     }
     $query .= " ORDER BY sem_nr ASC";
     $statement = DBManager::get()->prepare($query);
     $statement->execute(array($GLOBALS['user']->id));
     while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
         $my_sem[$row['Seminar_id']] = array('obj_type' => 'sem', 'sem_nr' => $row['sem_nr'], 'name' => $row['Name'], 'visible' => $row['visible'], 'gruppe' => $row['gruppe'], 'sem_status' => $row['sem_status'], 'sem_number' => $row['sem_number'], 'sem_number_end' => $row['sem_number_end']);
         if ($group_field) {
             fill_groups($groups, $row[$group_field], array('seminar_id' => $row['Seminar_id'], 'sem_nr' => $row['sem_nr'], 'name' => $row['Name'], 'gruppe' => $row['gruppe']));
         }
     }
     if ($group_field == 'sem_number') {
         correct_group_sem_number($groups, $my_sem);
     } else {
         add_sem_name($my_sem);
     }
     sort_groups($group_field, $groups);
     // Ensure that a seminar is never in multiple groups
     $sem_ids = array();
     foreach ($groups as $group_id => $seminars) {
         foreach ($seminars as $index => $seminar) {
             if (in_array($seminar['seminar_id'], $sem_ids)) {
                 unset($seminars[$index]);
             } else {
                 $sem_ids[] = $seminar['seminar_id'];
             }
         }
         if (empty($seminars)) {
             unset($groups[$group_id]);
         } else {
             $groups[$group_id] = $seminars;
         }
     }
     $this->studygroups = $studygroups;
     $this->no_grouping_allowed = $no_grouping_allowed;
     $this->groups = $groups;
     $this->group_names = get_group_names($group_field, $groups);
     $this->group_field = $group_field;
     $this->my_sem = $my_sem;
 }
Exemplo n.º 9
0
 /**
  * Sets the start semester for the given course.
  *
  * @param String $course_id Id of the course
  */
 public function setSemester_action($course_id)
 {
     $current_semester = Semester::findCurrent();
     $start_semester = Semester::find(Request::get('startSemester'));
     if (Request::int('endSemester') != -1) {
         $end_semester = Semester::find(Request::get('endSemester'));
     } else {
         $end_semester = -1;
     }
     $course = Seminar::GetInstance($course_id);
     if ($start_semester == $end_semester) {
         $end_semester = 0;
     }
     if ($end_semester != 0 && $end_semester != -1 && $start_semester->beginn >= $end_semester->beginn) {
         PageLayout::postMessage(MessageBox::error(_('Das Startsemester liegt nach dem Endsemester!')));
     } else {
         $course->setStartSemester($start_semester->beginn);
         if ($end_semester != -1) {
             $course->setEndSemester($end_semester->beginn);
         } else {
             $course->setEndSemester($end_semester);
         }
         //$course->removeAndUpdateSingleDates();
         // If the new duration includes the current semester, we set the semester-chooser to the current semester
         if ($current_semester->beginn >= $course->getStartSemester() && $current_semester->beginn <= $course->getEndSemesterVorlesEnde()) {
             $course->setFilter($current_semester->beginn);
         } else {
             // otherwise we set it to the first semester
             $course->setFilter($course->getStartSemester());
         }
     }
     $course->store();
     SeminarCycleDate::removeOutRangedSingleDates($course->getStartSemester(), $course->getEndSemesterVorlesEnde(), $course->id);
     $cycles = SeminarCycleDate::findBySeminar_id($course->seminar_id);
     foreach ($cycles as $cycle) {
         $new_dates = $cycle->createTerminSlots($start_semester->beginn);
         foreach ($new_dates as $semester_id => $dates) {
             foreach ($dates['dates'] as $date) {
                 $date->store();
             }
         }
     }
     $messages = $course->getStackedMessages();
     foreach ($messages as $type => $msg) {
         PageLayout::postMessage(MessageBox::$type($msg['title'], $msg['details']));
     }
     if (Request::submitted('save_close')) {
         $this->relocate(str_replace('_', '/', Request::get('origin')), array('cid' => $course_id));
     } else {
         $this->redirect($this->url_for('course/timesrooms/index', array('cid' => $course_id)));
     }
 }
Exemplo n.º 10
0
 public static function getPreparedCourses($sem = "all", $params = array())
 {
     $semesters = self::getSelectedSemesters($sem);
     $current_semester_nr = SemesterData::GetSemesterIndexById(@Semester::findCurrent()->id);
     $min_sem_key = min($semesters);
     $max_sem_key = max($semesters);
     $group_field = $params['group_field'];
     $courses = self::getCourses($min_sem_key, $max_sem_key, $params);
     $show_semester_name = UserConfig::get($GLOBALS['user']->id)->SHOWSEM_ENABLE;
     $sem_courses = array();
     $param_array = 'name seminar_id visible veranstaltungsnummer start_time duration_time status visible ';
     $param_array .= 'chdate admission_binding modules admission_prelim';
     if (!empty($courses)) {
         // filtering courses
         $modules = new Modules();
         $member_ships = User::findCurrent()->course_memberships->toGroupedArray('seminar_id', 'status gruppe');
         foreach ($courses as $index => $course) {
             // export object to array for simple handling
             $_course = $course->toArray($param_array);
             $_course['start_semester'] = $course->start_semester->name;
             $_course['end_semester'] = $course->end_semester->name;
             $_course['sem_class'] = $course->getSemClass();
             $_course['obj_type'] = 'sem';
             if ($group_field == 'sem_tree_id') {
                 $_course['sem_tree'] = $course->study_areas->toArray();
             }
             $user_status = @$member_ships[$course->id]['status'];
             if (!$user_status && Config::get()->DEPUTIES_ENABLE && isDeputy($GLOBALS['user']->id, $course->id)) {
                 $user_status = 'dozent';
                 $is_deputy = true;
             } else {
                 $is_deputy = false;
             }
             // get teachers only if grouping selected (for better performance)
             if ($group_field == 'dozent_id') {
                 $teachers = new SimpleCollection($course->getMembersWithStatus('dozent'));
                 $teachers->filter(function ($a) use(&$_course) {
                     return $_course['teachers'][] = $a->user->getFullName('no_title_rev');
                 });
             }
             $_course['last_visitdate'] = object_get_visit($course->id, 'sem', 'last');
             $_course['visitdate'] = object_get_visit($course->id, 'sem', '');
             $_course['user_status'] = $user_status;
             $_course['gruppe'] = !$is_deputy ? @$member_ships[$course->id]['gruppe'] : self::getDeputieGroup($course->id);
             $_course['sem_number_end'] = $course->duration_time == -1 ? $max_sem_key : SemesterData::GetSemesterIndexById($course->end_semester->id);
             $_course['sem_number'] = SemesterData::GetSemesterIndexById($course->start_semester->id);
             $_course['modules'] = $modules->getLocalModules($course->id, 'sem', $course->modules, $course->status);
             $_course['name'] = $course->name;
             $_course['temp_name'] = $course->name;
             $_course['number'] = $course->veranstaltungsnummer;
             $_course['is_deputy'] = $is_deputy;
             if ($show_semester_name && $course->duration_time != 0 && !$course->getSemClass()->offsetGet('studygroup_mode')) {
                 $_course['name'] .= ' (' . $course->getFullname('sem-duration-name') . ')';
             }
             // add the the course to the correct semester
             self::getObjectValues($_course);
             if ($course->duration_time == -1) {
                 if ($current_semester_nr >= $min_sem_key && $current_semester_nr <= $max_sem_key) {
                     $sem_courses[$current_semester_nr][$course->id] = $_course;
                 } else {
                     $sem_courses[$max_sem_key][$course->id] = $_course;
                 }
             } else {
                 for ($i = $min_sem_key; $i <= $max_sem_key; $i++) {
                     if ($i >= $_course['sem_number'] && $i <= $_course['sem_number_end']) {
                         $sem_courses[$i][$course->id] = $_course;
                     }
                 }
             }
         }
     } else {
         return null;
     }
     if (empty($sem_courses)) {
         return null;
     }
     if ($params['main_navigation']) {
         return $sem_courses;
     }
     krsort($sem_courses);
     // grouping
     if ($group_field == 'sem_number' && !$params['order_by']) {
         foreach ($sem_courses as $index => $courses) {
             uasort($courses, function ($a, $b) {
                 if (Config::get()->IMPORTANT_SEMNUMBER) {
                     return $a['gruppe'] == $b['gruppe'] ? strcmp($a['number'], $b['number']) : $a['gruppe'] - $b['gruppe'];
                 } else {
                     return $a['gruppe'] == $b['gruppe'] ? strcmp($a['temp_name'], $b['temp_name']) : $a['gruppe'] - $b['gruppe'];
                 }
             });
             $sem_courses[$index] = $courses;
         }
     }
     // Group by teacher
     if ($group_field == 'dozent_id') {
         self::groupByTeacher($sem_courses);
     }
     // Group by Sem Status
     if ($group_field == 'sem_status') {
         self::groupBySemStatus($sem_courses);
     }
     // Group by colors
     if ($group_field == 'gruppe') {
         self::groupByGruppe($sem_courses);
     }
     // Group by sem_tree
     if ($group_field == 'sem_tree_id') {
         self::groupBySemTree($sem_courses);
     }
     return !empty($sem_courses) ? $sem_courses : false;
 }
Exemplo n.º 11
0
    if (!$_SESSION['_language']) {
        $_SESSION['_language'] = $DEFAULT_LANGUAGE;
    }
    // else use system default
}
// user init starts here
if ($auth->is_authenticated() && is_object($user) && $user->id != "nobody") {
    if ($_SESSION['SessionStart'] > UserConfig::get($user->id)->CURRENT_LOGIN_TIMESTAMP) {
        // just logged in
        // store old CURRENT_LOGIN in LAST_LOGIN and set CURRENT_LOGIN to start of session
        UserConfig::get($user->id)->store('LAST_LOGIN_TIMESTAMP', UserConfig::get($user->id)->CURRENT_LOGIN_TIMESTAMP);
        UserConfig::get($user->id)->store('CURRENT_LOGIN_TIMESTAMP', $_SESSION['SessionStart']);
        //find current semester and store it in $_SESSION['_default_sem']
        $current_sem = Semester::findByTimestamp(time() + get_config('SEMESTER_TIME_SWITCH') * 7 * 24 * 60 * 60);
        if (!$current_sem) {
            $current_sem = Semester::findCurrent();
        }
        $_SESSION['_default_sem'] = $current_sem->semester_id;
        //redirect user to another page if he want to, redirect is deferred to allow plugins to catch the UserDidLogin notification
        if (UserConfig::get($user->id)->PERSONAL_STARTPAGE > 0 && $i_page == "index.php" && !$perm->have_perm("root")) {
            $seminar_open_redirected = TRUE;
        }
        $user_did_login = true;
    }
}
// init of output via I18N
$_language_path = init_i18n($_SESSION['_language']);
//force reload of config to get translated data
list($save_sem_class, $save_sem_type) = array($GLOBALS['SEM_CLASS'], $GLOBALS['SEM_TYPE']);
include 'config.inc.php';
list($GLOBALS['SEM_CLASS'], $GLOBALS['SEM_TYPE']) = array($save_sem_class, $save_sem_type);
Exemplo n.º 12
0
 function get_result()
 {
     global $_fullname_sql, $SEM_TYPE, $SEM_CLASS;
     if ($this->sem_browse_data['group_by'] == 1) {
         if (!is_object($this->sem_tree)) {
             $the_tree = TreeAbstract::GetInstance("StudipSemTree", false);
         } else {
             $the_tree = $this->sem_tree->tree;
         }
         if ($this->sem_browse_data['start_item_id'] != 'root' && ($this->sem_browse_data['level'] == "vv" || $this->sem_browse_data['level'] == "sbb")) {
             $allowed_ranges = $the_tree->getKidsKids($this->sem_browse_data['start_item_id']);
             $allowed_ranges[] = $this->sem_browse_data['start_item_id'];
             $sem_tree_query = " AND sem_tree_id IN('" . join("','", $allowed_ranges) . "') ";
         }
         $add_fields = "seminar_sem_tree.sem_tree_id AS bereich,";
         $add_query = "LEFT JOIN seminar_sem_tree ON (seminare.Seminar_id = seminar_sem_tree.seminar_id {$sem_tree_query})";
     } else {
         if ($this->sem_browse_data['group_by'] == 4) {
             $add_fields = "Institute.Name AS Institut,Institute.Institut_id,";
             $add_query = "LEFT JOIN seminar_inst ON (seminare.Seminar_id = seminar_inst.Seminar_id)\n            LEFT JOIN Institute ON (Institute.Institut_id = seminar_inst.institut_id)";
         } else {
             $add_fields = "";
             $add_query = "";
         }
     }
     $dbv = DbView::getView('sem_tree');
     $query = "SELECT seminare.Seminar_id,VeranstaltungsNummer, seminare.status, IF(seminare.visible=0,CONCAT(seminare.Name, ' " . _("(versteckt)") . "'), seminare.Name) AS Name,\n                {$add_fields}" . $_fullname_sql['full'] . " AS fullname, auth_user_md5.username,\n                " . $dbv->sem_number_sql . " AS sem_number, " . $dbv->sem_number_end_sql . " AS sem_number_end, seminar_user.position AS position FROM seminare\n                LEFT JOIN seminar_user ON (seminare.Seminar_id=seminar_user.Seminar_id AND seminar_user.status='dozent')\n                LEFT JOIN auth_user_md5 USING (user_id)\n                LEFT JOIN user_info USING (user_id)\n                {$add_query}\n                WHERE seminare.Seminar_id IN('" . join("','", array_keys($this->sem_browse_data['search_result'])) . "')";
     $db = new DB_Seminar($query);
     $snap = new DbSnapshot($db);
     $group_field = $this->group_by_fields[$this->sem_browse_data['group_by']]['group_field'];
     $data_fields[0] = "Seminar_id";
     if ($this->group_by_fields[$this->sem_browse_data['group_by']]['unique_field']) {
         $data_fields[1] = $this->group_by_fields[$this->sem_browse_data['group_by']]['unique_field'];
     }
     $group_by_data = $snap->getGroupedResult($group_field, $data_fields);
     $sem_data = $snap->getGroupedResult("Seminar_id");
     if ($this->sem_browse_data['group_by'] == 0) {
         $group_by_duration = $snap->getGroupedResult("sem_number_end", array("sem_number", "Seminar_id"));
         foreach ($group_by_duration as $sem_number_end => $detail) {
             if ($sem_number_end != -1 && ($detail['sem_number'][$sem_number_end] && count($detail['sem_number']) == 1)) {
                 continue;
             } else {
                 $current_semester_index = SemesterData::GetInstance()->GetSemesterIndexById(Semester::findCurrent()->semester_id);
                 foreach ($detail['Seminar_id'] as $seminar_id => $foo) {
                     $start_sem = key($sem_data[$seminar_id]["sem_number"]);
                     if ($sem_number_end == -1) {
                         if ($this->sem_number === false) {
                             $sem_number_end = $current_semester_index && isset($this->search_obj->sem_dates[$current_semester_index + 1]) ? $current_semester_index + 1 : count($this->search_obj->sem_dates) - 1;
                         } else {
                             $sem_number_end = $this->sem_number[0];
                         }
                     }
                     for ($i = $start_sem; $i <= $sem_number_end; ++$i) {
                         if ($this->sem_number === false || is_array($this->sem_number) && in_array($i, $this->sem_number)) {
                             if ($group_by_data[$i] && !$tmp_group_by_data[$i]) {
                                 foreach ($group_by_data[$i]['Seminar_id'] as $id => $bar) {
                                     $tmp_group_by_data[$i]['Seminar_id'][$id] = true;
                                 }
                             }
                             $tmp_group_by_data[$i]['Seminar_id'][$seminar_id] = true;
                         }
                     }
                 }
             }
         }
         if (is_array($tmp_group_by_data)) {
             if ($this->sem_number !== false) {
                 unset($group_by_data);
             }
             foreach ($tmp_group_by_data as $start_sem => $detail) {
                 $group_by_data[$start_sem] = $detail;
             }
         }
     }
     //release memory
     unset($snap);
     unset($tmp_group_by_data);
     foreach ($group_by_data as $group_field => $sem_ids) {
         foreach ($sem_ids['Seminar_id'] as $seminar_id => $foo) {
             $name = strtolower(key($sem_data[$seminar_id]["Name"]));
             $name = str_replace("ä", "ae", $name);
             $name = str_replace("ö", "oe", $name);
             $name = str_replace("ü", "ue", $name);
             if (Config::get()->IMPORTANT_SEMNUMBER && key($sem_data[$seminar_id]['VeranstaltungsNummer'])) {
                 $name = key($sem_data[$seminar_id]['VeranstaltungsNummer']) . ' ' . $name;
             }
             $group_by_data[$group_field]['Seminar_id'][$seminar_id] = $name;
         }
         uasort($group_by_data[$group_field]['Seminar_id'], 'strnatcmp');
     }
     switch ($this->sem_browse_data["group_by"]) {
         case 0:
             krsort($group_by_data, SORT_NUMERIC);
             break;
         case 1:
             uksort($group_by_data, create_function('$a,$b', '$the_tree = TreeAbstract::GetInstance("StudipSemTree", false);
         $the_tree->buildIndex();
         return (int)($the_tree->tree_data[$a]["index"] - $the_tree->tree_data[$b]["index"]);
         '));
             break;
         case 3:
             uksort($group_by_data, create_function('$a,$b', 'global $SEM_CLASS,$SEM_TYPE;
         return strnatcasecmp($SEM_TYPE[$a]["name"]." (". $SEM_CLASS[$SEM_TYPE[$a]["class"]]["name"].")",
         $SEM_TYPE[$b]["name"]." (". $SEM_CLASS[$SEM_TYPE[$b]["class"]]["name"].")");'));
             break;
         default:
             uksort($group_by_data, 'strnatcasecmp');
             break;
     }
     return array($group_by_data, $sem_data);
 }
Exemplo n.º 13
0
 /**
  * Configure a new or existing course set.
  */
 public function configure_action($coursesetId = '')
 {
     if ($GLOBALS['perm']->have_perm('root')) {
         if ($coursesetId) {
             // Load course set data.
             $this->courseset = new CourseSet($coursesetId);
             $this->myInstitutes = array();
             $selectedInstitutes = $this->courseset->getInstituteIds();
             foreach ($selectedInstitutes as $id => $selected) {
                 $this->myInstitutes[$id] = new Institute($id);
             }
             $this->selectedInstitutes = $this->myInstitutes;
             $selectedCourses = $this->courseset->getCourses();
             if (!$this->instant_course_set_view) {
                 $allCourses = CoursesetModel::getInstCourses(array_keys($this->selectedInstitutes), $coursesetId, array(), $this->courseset->getSemester());
                 $this->selectedSemester = $this->courseset->getSemester();
             }
         } else {
             $this->myInstitutes = array();
             $this->selectedInstitutes = array();
             $allCourses = array();
             $selectedCourses = array();
             $this->selectedSemester = Semester::findCurrent()->semester_id;
         }
         Config::get()->AJAX_AUTOCOMPLETE_DISABLED = false;
         $this->instSearch = QuickSearch::get("institute_id", new StandardSearch("Institut_id"))->withoutButton()->render();
     } else {
         $this->myInstitutes = array();
         $myInstitutes = Institute::getMyInstitutes();
         foreach ($myInstitutes as $institute) {
             $this->myInstitutes[$institute['Institut_id']] = $institute;
         }
         if ($coursesetId) {
             // Load course set data.
             $this->courseset = new CourseSet($coursesetId);
             $selectedInstitutes = $this->courseset->getInstituteIds();
             $this->selectedInstitutes = array();
             foreach ($selectedInstitutes as $id => $selected) {
                 $this->selectedInstitutes[$id] = new Institute($id);
             }
             $selectedCourses = $this->courseset->getCourses();
             if (!$this->instant_course_set_view) {
                 $allCourses = CoursesetModel::getInstCourses(array_keys($this->selectedInstitutes), $coursesetId, array(), $this->courseset->getSemester(), $this->onlyOwnCourses);
                 $this->selectedSemester = $this->courseset->getSemester();
             }
         } else {
             $this->selectedSemester = Semester::findCurrent()->semester_id;
             $this->selectedInstitutes = $this->myInstitutes;
             $allCourses = CoursesetModel::getInstCourses(array_keys($this->myInstitutes), $coursesetId, array(), $this->selectedSemester, $this->onlyOwnCourses);
             $selectedCourses = array();
         }
     }
     // If an institute search has been conducted, we need to consider parameters from flash.
     if ($this->flash['name'] || $this->flash['institutes'] || $this->flash['courses'] || $this->flash['rules'] || $this->flash['userlists'] || $this->flash['infotext'] || $this->flash['semester']) {
         if (!$this->courseset) {
             $this->courseset = new CourseSet($coursesetId);
         }
         if ($this->flash['name']) {
             $this->courseset->setName($this->flash['name']);
         }
         if ($this->flash['institutes']) {
             $institutes = $this->flash['institutes'];
             $this->courseset->setInstitutes($institutes);
             if ($GLOBALS['perm']->have_perm('root')) {
                 $this->myInstitutes = array();
                 foreach ($institutes as $id) {
                     $this->myInstitutes[$id] = new Institute($id);
                     $this->selectedInstitutes[$id] = $this->myInstitutes[$id];
                 }
             }
             $selectedCourses = $this->courseset->getCourses();
             $allCourses = CoursesetModel::getInstCourses(array_flip($institutes), $coursesetId, $selectedCourses, $this->selectedSemester, $this->onlyOwnCourses);
         }
         if ($this->flash['courses']) {
             $courses = $this->flash['courses'];
             $this->courseset->setCourses($courses);
             $selectedCourses = $courses;
         }
         if ($this->flash['rules']) {
             $this->courseset->setAdmissionRules($this->flash['rules']);
         }
         if ($this->flash['userlists']) {
             $this->courseset->setUserlists($this->flash['userlists']);
         }
         if ($this->flash['infotext']) {
             $this->courseset->setInfoText($this->flash['infotext']);
         }
         if ($this->flash['private']) {
             $this->courseset->setPrivate($this->flash['private']);
         }
     }
     // Fetch all lists with special user chances.
     $this->myUserlists = AdmissionUserList::getUserLists($GLOBALS['user']->id);
     $fac = $this->get_template_factory();
     $tpl = $fac->open('admission/courseset/instcourses');
     $tpl->set_attribute('allCourses', $allCourses);
     $tpl->set_attribute('selectedCourses', $selectedCourses);
     $this->coursesTpl = $tpl->render();
     $tpl = $fac->open('admission/courseset/institutes');
     if ($coursesetId) {
         $tpl->set_attribute('courseset', $this->courseset);
     }
     $tpl->set_attribute('instSearch', $this->instSearch);
     $tpl->set_attribute('selectedInstitutes', $this->selectedInstitutes);
     $tpl->set_attribute('myInstitutes', $this->myInstitutes);
     $tpl->set_attribute('controller', $this);
     if ($GLOBALS['perm']->have_perm('admin') || $GLOBALS['perm']->have_perm('dozent') && get_config('ALLOW_DOZENT_COURSESET_ADMIN')) {
         $tpl->set_attribute('rights', true);
     } else {
         $tpl->set_attribute('rights', false);
     }
     $this->instTpl = $tpl->render();
 }
Exemplo n.º 14
0
 function getCurrentSemesterData()
 {
     $ret = Semester::findCurrent();
     return $ret ? $ret->toArray() : false;
 }
Exemplo n.º 15
0
if (!CheckParamXML())
{
    $infobox = array(
    array ("kategorie"  => _("Information:"),
        "eintrag" => array  (
                        array ( "icon" => Icon::create('info', 'clickable'),
                                "text"  => _("Die Parametern, mit denen diese Seite aufgerufen wurde, sind fehlerhaft.")
                             )
                        )
        )
    );
}


if ($ex_sem == 'current'){
    $ex_sem = Semester::findCurrent()->getId();
}

if ($o_mode != "direct")
{
    if (!(is_dir( $TMP_PATH."/export" )))
    {
        mkdir($TMP_PATH . "/export");
        chmod ($TMP_PATH . "/export", 0777);
    }
    $xml_file_id = md5(uniqid(rand())) . ".xml";
    $xml_file = fopen($TMP_PATH."/export/" . $xml_file_id, "w");
}

if ($o_mode == 'direct'){
    header("Content-type: text/xml; charset=utf-8");
Exemplo n.º 16
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;
 }
Exemplo n.º 17
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;";
Exemplo n.º 18
0
 /**
  * Searchs for studip areas using given search term
  *
  * @param string $term search term
  * @return array area data
  */
 function search_area($term)
 {
     global $perm;
     $result = array();
     if (strlen($term) < 3) {
         PageLayout::postMessage(MessageBox::error(_('Der Suchbegriff muss mindestens drei Zeichen lang sein.')));
         return $result;
     } elseif ($term == '__THIS_SEMESTER__') {
         $nr = 0;
         $current_semester = Semester::findCurrent();
         $query = "SELECT seminare.Name AS sem_name, seminare.Seminar_id, seminare.visible\n                      FROM seminar_user LEFT JOIN seminare  USING (Seminar_id)\n                      WHERE seminar_user.user_id = :user_id AND seminar_user.status IN('tutor', 'dozent')\n                      AND seminare.start_time <= :start\n                      AND (:start <= (seminare.start_time + seminare.duration_time)\n                      OR seminare.duration_time = -1)";
         if (get_config('DEPUTIES_ENABLE')) {
             $query .= " UNION SELECT CONCAT(seminare.Name, ' [" . _("Vertretung") . "]') AS sem_name, seminare.Seminar_id,\n                            seminare.visible\n                            FROM deputies JOIN seminare ON (deputies.range_id=seminare.Seminar_id)\n                            WHERE deputies.user_id = :user_id\n                            AND seminare.start_time <= :start\n                            AND (:start <= (seminare.start_time + seminare.duration_time)\n                            OR seminare.duration_time = -1)";
         }
         $query .= " ORDER BY sem_name ASC";
         $statement = DBManager::get()->prepare($query);
         $statement->bindValue(':user_id', $GLOBALS['auth']->auth['uid']);
         $statement->bindValue(':start', $current_semester["beginn"]);
         $statement->execute();
         $seminars = $statement->fetchAll(PDO::FETCH_ASSOC);
         foreach ($seminars as $key => $sem) {
             $tmp_result[$sem['Seminar_id']] = array('name' => $sem['sem_name'], 'type' => 'sem');
         }
         $term = '';
     } elseif ($term == '__MY_INSTITUTES__') {
         $term = '';
         if ($perm->have_perm('root')) {
             $tmp_result['studip'] = array('name' => 'Stud.IP', 'type' => 'global');
         }
         $inst_list = Institute::getMyInstitutes();
         if (count($inst_list)) {
             foreach ($inst_list as $data) {
                 $tmp_result[$data['Institut_id']] = array('name' => $data['Name'], 'type' => $data['is_fak'] ? 'fak' : 'inst');
             }
         }
     } else {
         $tmp_result = search_range($term, true);
         // add users
         if (stripos(get_fullname(), $term) !== false) {
             $tmp_result[$GLOBALS['auth']->auth['uid']] = array('name' => get_fullname(), 'type' => 'user');
         }
         if (isDeputyEditAboutActivated()) {
             $query = "SELECT DISTINCT a.user_id " . "FROM deputies d " . "JOIN auth_user_md5 a ON (d.range_id = a.user_id) " . "JOIN user_info u ON (a.user_id=u.user_id) " . "WHERE d.user_id = ? " . "AND CONCAT(u.title_front, ' ', a.Vorname, ' ', a.Nachname, ', ', u.title_rear) LIKE CONCAT('%',?,'%')";
             $statement = DBManager::get()->prepare($query);
             $statement->execute(array($GLOBALS['auth']->auth['uid'], $term));
             while ($data = $statement->fetch(PDO::FETCH_ASSOC)) {
                 $tmp_result[$data['user_id']] = array('name' => get_fullname($data['user_id']), 'type' => 'user');
             }
         }
     }
     // workaround: apply search term (ignored by search_range below admin)
     if (count($tmp_result) and !$GLOBALS['perm']->have_perm('admin') and $term) {
         foreach ($tmp_result as $id => $data) {
             if (stripos($data['name'], $term) === false) {
                 unset($tmp_result[$id]);
             }
         }
     }
     // prepare result
     if (count($tmp_result)) {
         foreach ($tmp_result as $id => $data) {
             $result[$data['type'] == 'fak' ? 'inst' : $data['type']][$id] = $data['name'];
         }
     } elseif ($term) {
         PageLayout::postMessage(MessageBox::error(_('Zu diesem Suchbegriff wurden keine Bereiche gefunden.')));
     }
     return $result;
 }