Ejemplo n.º 1
0
 /**
  * common tasks for all actions
  */
 function before_filter(&$action, &$args)
 {
     global $perm;
     parent::before_filter($action, $args);
     $course_id = $args[0];
     $this->course_id = Request::option('cid', $course_id);
     Navigation::activateItem('/course/admin/admission');
     if (!get_object_type($this->course_id, array('sem')) || SeminarCategories::GetBySeminarId($this->course_id)->studygroup_mode || !$perm->have_studip_perm("tutor", $this->course_id)) {
         throw new Trails_Exception(403);
     }
     $this->course = Course::find($this->course_id);
     $this->user_id = $GLOBALS['user']->id;
     PageLayout::setHelpKeyword("Basis.VeranstaltungenVerwaltenZugangsberechtigungen");
     PageLayout::setTitle($this->course->getFullname() . " - " . _("Verwaltung von Zugangsberechtigungen"));
     $lockrules = words('admission_turnout admission_type admission_endtime admission_binding passwort read_level write_level admission_prelim admission_prelim_txt admission_starttime admission_endtime_sem admission_disable_waitlist user_domain admission_binding admission_studiengang');
     foreach ($lockrules as $rule) {
         $this->is_locked[$rule] = LockRules::Check($this->course_id, $rule) ? 'disabled readonly' : '';
     }
     if (!SeminarCategories::GetByTypeId($this->course->status)->write_access_nobody) {
         $this->is_locked['write_level'] = 'disabled readonly';
     }
     update_admission($this->course->id);
     PageLayout::addSqueezePackage('admission');
     URLHelper::addLinkParam('return_to_dialog', Request::get('return_to_dialog'));
 }
Ejemplo n.º 2
0
 /**
  * returns datafields belonging to given model
  * if a datafield entry not exists yet, a new DatafieldEntryModel is returned
  * second param filters for a given datafield id
  *
  * @param SimpleORMap $model Course,Institute,User,CourseMember or InstituteMember
  * @param string $datafield_id
  * @return array of DatafieldEntryModel
  */
 public static function findByModel(SimpleORMap $model, $datafield_id = null)
 {
     $mask = array("user" => 1, "autor" => 2, "tutor" => 4, "dozent" => 8, "admin" => 16, "root" => 32);
     if (is_a($model, "Course")) {
         $object_class = SeminarCategories::GetByTypeId($model->status)->id;
         $object_type = 'sem';
         $range_id = $model->getId();
     } elseif (is_a($model, "Institute")) {
         $object_class = $model->type;
         $object_type = 'inst';
         $range_id = $model->getId();
     } elseif (is_a($model, "User")) {
         $object_class = $mask[$model->perms];
         $object_type = 'user';
         $range_id = $model->getId();
     } elseif (is_a($model, "CourseMember")) {
         $object_class = $mask[$model->status];
         $object_type = 'usersemdata';
         $range_id = $model->user_id;
         $sec_range_id = $model->seminar_id;
     } elseif (is_a($model, "InstituteMember")) {
         $object_class = $mask[$model->inst_perms];
         $object_type = 'userinstrole';
         $range_id = $model->user_id;
         $sec_range_id = $model->institut_id;
     }
     if (!$object_type) {
         throw new InvalidArgumentException('Wrong type of model: ' . get_class($model));
     }
     if ($datafield_id !== null) {
         $one_datafield = " AND a.datafield_id = " . DBManager::get()->quote($datafield_id);
     }
     $query = "SELECT a.*, b.*,a.datafield_id,b.datafield_id as isset_content ";
     $query .= "FROM datafields a LEFT JOIN datafields_entries b ON (a.datafield_id=b.datafield_id AND range_id = ? AND sec_range_id = ?) ";
     $query .= "WHERE object_type = ? AND ((object_class & ?) OR object_class IS NULL) {$one_datafield} ORDER BY priority";
     $st = DBManager::get()->prepare($query);
     $st->execute(array((string) $range_id, (string) $sec_range_id, $object_type, (int) $object_class));
     $ret = array();
     $c = 0;
     $df_entry = new DatafieldEntryModel();
     $df = new DataField();
     while ($row = $st->fetch(PDO::FETCH_ASSOC)) {
         $ret[$c] = clone $df_entry;
         $ret[$c]->setData($row, true);
         if (!$row['isset_content']) {
             $ret[$c]->setValue('range_id', (string) $range_id);
             $ret[$c]->setValue('sec_range_id', (string) $sec_range_id);
         }
         $ret[$c]->setNew(!$row['isset_content']);
         $cloned_df = clone $df;
         $cloned_df->setData($row, true);
         $cloned_df->setNew(false);
         $ret[$c]->setValue('datafield', $cloned_df);
         ++$c;
     }
     return $ret;
 }
Ejemplo n.º 3
0
/**
 *
 * @param unknown_type $my_obj
 * @param unknown_type $user_id
 * @param unknown_type $modules
 */
function get_my_obj_values(&$my_obj, $user_id, $modules = NULL)
{
    $threshold = ($config = Config::get()->NEW_INDICATOR_THRESHOLD) ? strtotime("-{$config} days 0:00:00") : 0;
    $db2 = new DB_seminar();
    $db2->query("CREATE TEMPORARY TABLE IF NOT EXISTS myobj_" . $user_id . " ( object_id char(32) NOT NULL, PRIMARY KEY (object_id)) ENGINE = MEMORY");
    $db2->query("REPLACE INTO  myobj_" . $user_id . " (object_id) VALUES ('" . join("'),('", array_keys($my_obj)) . "')");
    //dokumente
    $unreadable_folders = array();
    if (!$GLOBALS['perm']->have_perm('admin')) {
        foreach (array_keys($my_obj) as $obj_id) {
            if ($my_obj[$obj_id]['modules']['documents_folder_permissions'] || $my_obj[$obj_id]['obj_type'] == 'sem' && StudipDocumentTree::ExistsGroupFolders($obj_id)) {
                $must_have_perm = $my_obj[$obj_id]['obj_type'] == 'sem' ? 'tutor' : 'autor';
                if ($GLOBALS['perm']->permissions[$my_obj[$obj_id]['status']] < $GLOBALS['perm']->permissions[$must_have_perm]) {
                    $folder_tree = TreeAbstract::GetInstance('StudipDocumentTree', array('range_id' => $obj_id, 'entity_type' => $my_obj[$obj_id]['obj_type']));
                    $unreadable_folders = array_merge((array) $unreadable_folders, (array) $folder_tree->getUnReadableFolders($user_id));
                }
            }
        }
    }
    $db2->query(get_obj_clause('dokumente a', 'Seminar_id', 'dokument_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND a.user_id !='{$user_id}')", 'documents', false, count($unreadable_folders) ? "AND a.range_id NOT IN('" . join("','", $unreadable_folders) . "')" : "", false, $user_id));
    while ($db2->next_record()) {
        $object_id = $db2->f('object_id');
        if ($my_obj[$object_id]["modules"]["documents"]) {
            $my_obj[$object_id]["neuedokumente"] = $db2->f("neue");
            $my_obj[$object_id]["dokumente"] = $db2->f("count");
            if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
            }
            $nav = new Navigation('files');
            if ($db2->f('neue')) {
                $nav->setURL('folder.php?cmd=all');
                $nav->setImage(Icon::create('files+new', 'attention', ["title" => sprintf(_('%s Dokumente, %s neue'), $db2->f('count'), $db2->f('neue'))]));
                $nav->setBadgeNumber($db2->f('neue'));
            } else {
                if ($db2->f('count')) {
                    $nav->setURL('folder.php?cmd=tree');
                    $nav->setImage(Icon::create('files', 'inactive', ["title" => sprintf(_('%s Dokumente'), $db2->f('count'))]));
                }
            }
            $my_obj[$object_id]['files'] = $nav;
        }
    }
    //Ankündigungen
    $db2->query(get_obj_clause('news_range a {ON_CLAUSE} LEFT JOIN news nw ON(a.news_id=nw.news_id AND UNIX_TIMESTAMP() BETWEEN date AND (date+expire))', 'range_id', 'nw.news_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND nw.user_id !='{$user_id}')", 'news', false, false, 'a.news_id', $user_id));
    while ($db2->next_record()) {
        $object_id = $db2->f('object_id');
        $my_obj[$object_id]["neuenews"] = $db2->f("neue");
        $my_obj[$object_id]["news"] = $db2->f("count");
        if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
            $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
        }
        $nav = new Navigation('news', '');
        if ($db2->f('neue')) {
            $nav->setURL('?new_news=true');
            $nav->setImage(Icon::create('news+new', 'attention', ["title" => sprintf(_('%s Ankündigungen, %s neue'), $db2->f('count'), $db2->f('neue'))]));
            $nav->setBadgeNumber($db2->f('neue'));
        } else {
            if ($db2->f('count')) {
                $nav->setImage(Icon::create('news', 'inactive', ["title" => sprintf(_('%s Ankündigungen'), $db2->f('count'))]));
            }
        }
        $my_obj[$object_id]['news'] = $nav;
    }
    // scm?
    $db2->query(get_obj_clause('scm a', 'range_id', "IF(content !='',1,0)", "(chdate > IFNULL(b.visitdate, {$threshold}) AND a.user_id !='{$user_id}')", "scm", 'tab_name', false, false, $user_id));
    while ($db2->next_record()) {
        $object_id = $db2->f('object_id');
        if ($my_obj[$object_id]["modules"]["scm"]) {
            $my_obj[$object_id]["neuscmcontent"] = $db2->f("neue");
            $my_obj[$object_id]["scmcontent"] = $db2->f("count");
            $my_obj[$object_id]["scmtabname"] = $db2->f("tab_name");
            if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
            }
            $nav = new Navigation('scm', 'dispatch.php/course/scm');
            if ($db2->f('count')) {
                if ($db2->f('neue')) {
                    $image = Icon::create('infopage+new', 'new');
                    $nav->setBadgeNumber($db2->f('neue'));
                    if ($db2->f('count') == 1) {
                        $title = $db2->f('tab_name') . _(' (geändert)');
                    } else {
                        $title = sprintf(_('%s Einträge, %s neue'), $db2->f('count'), $db2->f('neue'));
                    }
                } else {
                    $image = Icon::create('infopage', 'inactive');
                    if ($db2->f('count') == 1) {
                        $title = $db2->f('tab_name');
                    } else {
                        $title = sprintf(_('%s Einträge'), $db2->f('count'));
                    }
                }
                $nav->setImage($image, array('title' => $title));
            }
            $my_obj[$object_id]['scm'] = $nav;
        }
    }
    //Termine?
    $db2->query(get_obj_clause('ex_termine a', 'range_id', 'termin_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND autor_id !='{$user_id}')", 'schedule', false, " AND a.content <> '' ", false, $user_id));
    while ($db2->next_record()) {
        $object_id = $db2->f('object_id');
        if ($my_obj[$object_id]["modules"]["schedule"]) {
            $my_obj[$object_id]["neueausfalltermine"] = $db2->f("neue");
            $my_obj[$object_id]["ausfalltermine"] = $db2->f("count");
            if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
            }
        }
    }
    $db2->query(get_obj_clause('termine a', 'range_id', 'termin_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND autor_id !='{$user_id}')", 'schedule', false, false, false, $user_id));
    while ($db2->next_record()) {
        $object_id = $db2->f('object_id');
        if ($my_obj[$object_id]["modules"]["schedule"]) {
            $my_obj[$object_id]["neuetermine"] = $db2->f("neue");
            $my_obj[$object_id]["termine"] = $db2->f("count");
            if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
            }
            $nav = new Navigation('schedule', 'dispatch.php/course/dates');
            $neue = $my_obj[$object_id]["neuetermine"] + $my_obj[$object_id]["neueausfalltermine"];
            $count = $my_obj[$object_id]["termine"] + $my_obj[$object_id]["ausfalltermine"];
            if ($neue) {
                $nav->setImage(Icon::create('schedule+new', 'attention', ["title" => sprintf(_('%s Termine, %s neue'), $count, $neue)]));
                $nav->setBadgeNumber($neue);
            } else {
                if ($count) {
                    $nav->setImage(Icon::create('schedule', 'inactive', ["title" => sprintf(_('%s Termine'), $count)]));
                }
            }
            $my_obj[$object_id]['schedule'] = $nav;
        }
    }
    //Wiki-Eintraege?
    if (get_config('WIKI_ENABLE')) {
        $db2->query(get_obj_clause('wiki a', 'range_id', 'keyword', "(chdate > IFNULL(b.visitdate, {$threshold}) AND a.user_id !='{$user_id}')", 'wiki', "COUNT(DISTINCT keyword) as count_d", false, false, $user_id));
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            if ($my_obj[$object_id]["modules"]["wiki"]) {
                $my_obj[$object_id]["neuewikiseiten"] = $db2->f("neue");
                $my_obj[$object_id]["wikiseiten"] = $db2->f("count_d");
                if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                    $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
                }
                $nav = new Navigation('wiki');
                if ($db2->f('neue')) {
                    $nav->setURL('wiki.php?view=listnew');
                    $nav->setImage(Icon::create('wiki+new', 'attention', ["title" => sprintf(_('%s WikiSeiten, %s Änderungen'), $db2->f('count_d'), $db2->f('neue'))]));
                    $nav->setBadgeNumber($db2->f('neue'));
                } else {
                    if ($db2->f('count')) {
                        $nav->setURL('wiki.php');
                        $nav->setImage(Icon::create('wiki', 'inactive', ["title" => sprintf(_('%s WikiSeiten'), $db2->f('count_d'))]));
                    }
                }
                $my_obj[$object_id]['wiki'] = $nav;
            }
        }
    }
    //Lernmodule?
    if (get_config('ELEARNING_INTERFACE_ENABLE')) {
        $db2->query(get_obj_clause('object_contentmodules a', 'object_id', 'module_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND a.module_type != 'crs')", 'elearning_interface', false, " AND a.module_type != 'crs'", false, $user_id));
        //      $db2->query(get_obj_clause('object_contentmodules a','object_id','module_id',"(chdate > IFNULL(b.visitdate, $threshold))", 'elearning_interface'));
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            if ($my_obj[$object_id]["modules"]["elearning_interface"]) {
                $my_obj[$object_id]["neuecontentmodule"] = $db2->f("neue");
                $my_obj[$object_id]["contentmodule"] = $db2->f("count");
                if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                    $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
                }
                $nav = new Navigation('elearning', 'elearning_interface.php?view=show');
                if ($db2->f('neue')) {
                    $nav->setImage(Icon::create('learnmodule+new', 'attention', ["title" => sprintf(_('%s Lernmodule, %s neue'), $db2->f('count'), $db2->f('neue'))]));
                    $nav->setBadgeNumber($db2->f('neue'));
                } else {
                    if ($db2->f('count')) {
                        $nav->setImage(Icon::create('learnmodule', 'inactive', ["title" => sprintf(_('%s Lernmodule'), $db2->f('count'))]));
                    }
                }
                $my_obj[$object_id]['elearning'] = $nav;
            }
        }
    }
    //Umfragen
    if (get_config('VOTE_ENABLE')) {
        $db2->query(get_obj_clause('vote a', 'range_id', 'vote_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND a.author_id !='{$user_id}' AND a.state != 'stopvis')", 'vote', false, " AND a.state IN('active','stopvis')", 'vote_id', $user_id));
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            $my_obj[$object_id]["neuevotes"] = $db2->f("neue");
            $my_obj[$object_id]["votes"] = $db2->f("count");
            if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
            }
        }
        $db2->query(get_obj_clause('eval_range a {ON_CLAUSE} INNER JOIN eval d ON ( a.eval_id = d.eval_id AND d.startdate < UNIX_TIMESTAMP( ) AND (d.stopdate > UNIX_TIMESTAMP( ) OR d.startdate + d.timespan > UNIX_TIMESTAMP( ) OR (d.stopdate IS NULL AND d.timespan IS NULL)))', 'range_id', 'a.eval_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND d.author_id !='{$user_id}' )", 'eval', false, false, 'a.eval_id', $user_id));
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            $my_obj[$object_id]["neuevotes"] += $db2->f("neue");
            $my_obj[$object_id]["votes"] += $db2->f("count");
            if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
            }
        }
        foreach (array_keys($my_obj) as $object_id) {
            $nav = new Navigation('vote', '#vote');
            if ($my_obj[$object_id]['neuevotes']) {
                $nav->setImage(Icon::create('vote+new', 'attention', ["title" => sprintf(_('%s Umfrage(n), %s neue'), $my_obj[$object_id]['votes'], $my_obj[$object_id]['neuevotes'])]));
                $nav->setBadgeNumber($my_obj[$object_id]['neuevotes']);
            } else {
                if ($my_obj[$object_id]['votes']) {
                    $nav->setImage(Icon::create('vote', 'inactive', ["title" => sprintf(_('%s Umfrage(n)'), $my_obj[$object_id]['votes'])]));
                }
            }
            $my_obj[$object_id]['vote'] = $nav;
        }
    }
    //Literaturlisten
    if (get_config('LITERATURE_ENABLE')) {
        $db2->query(get_obj_clause('lit_list a', 'range_id', 'list_id', "(chdate > IFNULL(b.visitdate, {$threshold}) AND a.user_id !='{$user_id}')", 'literature', false, " AND a.visibility=1", false, $user_id));
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            if ($my_obj[$object_id]["modules"]["literature"]) {
                $my_obj[$object_id]["neuelitlist"] = $db2->f("neue");
                $my_obj[$object_id]["litlist"] = $db2->f("count");
                if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                    $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
                }
                $nav = new Navigation('literature', 'dispatch.php/course/literature');
                if ($db2->f('neue')) {
                    $nav->setImage(Icon::create('literature+new', 'attention', ["title" => sprintf(_('%s Literaturlisten, %s neue'), $db2->f('count'), $db2->f('neue'))]));
                    $nav->setBadgeNumber($db2->f('neue'));
                } else {
                    if ($db2->f('count')) {
                        $nav->setImage(Icon::create('literature', 'inactive', ["title" => sprintf(_('%s Literaturlisten'), $db2->f('count'))]));
                    }
                }
                $my_obj[$object_id]['literature'] = $nav;
            }
        }
    }
    // TeilnehmerInnen
    if ($GLOBALS['perm']->have_perm('tutor')) {
        //vorläufige Teilnahme
        $db2->query(get_obj_clause('admission_seminar_user a', 'seminar_id', 'a.user_id', "(mkdate > IFNULL(b.visitdate, {$threshold}) AND a.user_id !='{$user_id}')", 'participants', false, " AND a.status='accepted' ", false, $user_id, 'mkdate'));
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            if ($my_obj[$object_id]["modules"]["participants"]) {
                if ($GLOBALS['perm']->have_perm('admin', $user_id) || in_array($my_obj[$object_id]['status'], words('dozent tutor'))) {
                    $my_obj[$object_id]["new_accepted_participants"] = $db2->f("neue");
                    $my_obj[$object_id]["count_accepted_participants"] = $db2->f("count");
                    if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                        $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
                    }
                }
            }
        }
        $db2->query(get_obj_clause('seminar_user a', 'seminar_id', 'a.user_id', "(mkdate > IFNULL(b.visitdate, {$threshold}) AND a.user_id !='{$user_id}')", 'participants', false, false, false, $user_id, 'mkdate'));
        $all_auto_inserts = AutoInsert::getAllSeminars(true);
        $auto_insert_perm = Config::get()->AUTO_INSERT_SEM_PARTICIPANTS_VIEW_PERM;
        while ($db2->next_record()) {
            $object_id = $db2->f('object_id');
            // show the participants-icon only if the module is activated and it is not an auto-insert-sem
            if ($my_obj[$object_id]["modules"]["participants"]) {
                if (in_array($object_id, $all_auto_inserts)) {
                    if ($GLOBALS['perm']->have_perm('admin', $user_id) && !$GLOBALS['perm']->have_perm($auto_insert_perm, $user_id)) {
                        continue;
                    } else {
                        if ($GLOBALS['perm']->permissions[$auto_insert_perm] > $GLOBALS['perm']->permissions[$my_obj[$object_id]['status']]) {
                            continue;
                        }
                    }
                }
                $my_obj[$object_id]["newparticipants"] = $db2->f("neue");
                $my_obj[$object_id]["countparticipants"] = $db2->f("count");
                if ($GLOBALS['perm']->have_perm('admin', $user_id) || in_array($my_obj[$object_id]['status'], words('dozent tutor'))) {
                    if ($my_obj[$object_id]['last_modified'] < $db2->f('last_modified')) {
                        $my_obj[$object_id]['last_modified'] = $db2->f('last_modified');
                    }
                }
                if (SeminarCategories::GetByTypeId($my_obj[$object_id]['sem_status'])->studygroup_mode) {
                    $nav = new Navigation('participants', 'dispatch.php/course/studygroup/members/' . $object_id);
                } else {
                    $nav = new Navigation('participants', 'dispatch.php/course/members/index');
                }
                $neue = $my_obj[$object_id]["newparticipants"] + $my_obj[$object_id]["new_accepted_participants"];
                $count = $my_obj[$object_id]["countparticipants"] + $my_obj[$object_id]["count_accepted_participants"];
                if ($neue && ($GLOBALS['perm']->have_perm('admin', $user_id) || in_array($my_obj[$object_id]['status'], words('dozent tutor')))) {
                    $nav->setImage(Icon::create('persons+new', 'attention', ["title" => sprintf(_('%s Teilnehmende, %s neue'), $count, $neue)]));
                    $nav->setBadgeNumber($neue);
                } else {
                    if ($count) {
                        $nav->setImage(Icon::create('persons', 'inactive', ["title" => sprintf(_('%s Teilnehmende'), $count)]));
                    }
                }
                $my_obj[$object_id]['participants'] = $nav;
            }
        }
    } else {
        // show only the participants-icon, no colouring!
        foreach ($my_obj as $object_id => $data) {
            $all_auto_inserts = AutoInsert::getAllSeminars(true);
            $auto_insert_perm = Config::get()->AUTO_INSERT_SEM_PARTICIPANTS_VIEW_PERM;
            if (in_array($object_id, $all_auto_inserts)) {
                if ($GLOBALS['perm']->have_perm('admin', $user_id) && !$GLOBALS['perm']->have_perm($auto_insert_perm, $user_id)) {
                    continue;
                } else {
                    if ($GLOBALS['perm']->permissions[$auto_insert_perm] > $GLOBALS['perm']->permissions[$my_obj[$object_id]['status']]) {
                        continue;
                    }
                }
            }
            if ($my_obj[$object_id]["modules"]["participants"]) {
                if (SeminarCategories::GetByTypeId($my_obj[$object_id]['sem_status'])->studygroup_mode) {
                    $nav = new Navigation('participants', 'dispatch.php/course/studygroup/members/' . $object_id);
                } else {
                    $nav = new Navigation('participants', 'dispatch.php/course/members/index');
                }
                $nav->setImage(Icon::create('persons', 'inactive', ["title" => _('Teilnehmende')]));
                $my_obj[$object_id]['participants'] = $nav;
            }
        }
    }
    $db2->query("DROP TABLE IF EXISTS myobj_" . $user_id);
    return;
}
            ?>

            <td class="<?php 
echo $cssSw->getClass();
?>
" align="center">
                <? if (SeminarCategories::getByTypeId($result['status'])) : ?>
                <?php 
echo htmlReady(SeminarCategories::GetByTypeId($result['status'])->getNameOfType($result['status']));
?>
<br>
                <?php 
echo _("Kategorie:");
?>
                <b> <?php 
echo htmlReady(SeminarCategories::GetByTypeId($result['status'])->name);
?>
</b>
                <? else : ?>
                <?php 
echo _('nicht zugeordnet');
?>
                <? endif ?>
            </td>

            <?
            echo "<td class=\"".$cssSw->getClass()."\" nowrap align=\"center\">";

            //Kommandos fuer die jeweilgen Seiten
            switch ($i_page) {
                case "adminarea_start.php":
Ejemplo n.º 5
0
 function create_result_xls($headline = '')
 {
     require_once "vendor/write_excel/OLEwriter.php";
     require_once "vendor/write_excel/BIFFwriter.php";
     require_once "vendor/write_excel/Worksheet.php";
     require_once "vendor/write_excel/Workbook.php";
     global $_fullname_sql, $SEM_TYPE, $SEM_CLASS, $TMP_PATH;
     if (!$headline) {
         $headline = _("Stud.IP Veranstaltungen") . ' - ' . $GLOBALS['UNI_NAME_CLEAN'];
     }
     if (is_array($this->sem_browse_data['search_result']) && count($this->sem_browse_data['search_result'])) {
         if (!is_object($this->sem_tree)) {
             $the_tree = TreeAbstract::GetInstance("StudipSemTree", false);
         } else {
             $the_tree = $this->sem_tree->tree;
         }
         list($group_by_data, $sem_data) = $this->get_result();
         $tmpfile = $TMP_PATH . '/' . md5(uniqid('write_excel', 1));
         // Creating a workbook
         $workbook = new Workbook($tmpfile);
         $head_format = $workbook->addformat();
         $head_format->set_size(12);
         $head_format->set_bold();
         $head_format->set_align("left");
         $head_format->set_align("vcenter");
         $head_format_merged = $workbook->addformat();
         $head_format_merged->set_size(12);
         $head_format_merged->set_bold();
         $head_format_merged->set_align("left");
         $head_format_merged->set_align("vcenter");
         $head_format_merged->set_merge();
         $head_format_merged->set_text_wrap();
         $caption_format = $workbook->addformat();
         $caption_format->set_size(10);
         $caption_format->set_align("left");
         $caption_format->set_align("vcenter");
         $caption_format->set_bold();
         //$caption_format->set_text_wrap();
         $data_format = $workbook->addformat();
         $data_format->set_size(10);
         $data_format->set_align("left");
         $data_format->set_align("vcenter");
         $caption_format_merged = $workbook->addformat();
         $caption_format_merged->set_size(10);
         $caption_format_merged->set_merge();
         $caption_format_merged->set_align("left");
         $caption_format_merged->set_align("vcenter");
         $caption_format_merged->set_bold();
         // Creating the first worksheet
         $worksheet1 = $workbook->addworksheet(_("Veranstaltungen"));
         $worksheet1->set_row(0, 20);
         $worksheet1->write_string(0, 0, $headline, $head_format);
         $worksheet1->set_row(1, 20);
         $worksheet1->write_string(1, 0, sprintf(_(" %s Veranstaltungen gefunden %s, Gruppierung: %s"), count($sem_data), $this->sem_browse_data['sset'] ? _("(Suchergebnis)") : "", $this->group_by_fields[$this->sem_browse_data['group_by']]['name']), $caption_format);
         $worksheet1->write_blank(0, 1, $head_format);
         $worksheet1->write_blank(0, 2, $head_format);
         $worksheet1->write_blank(0, 3, $head_format);
         $worksheet1->write_blank(1, 1, $head_format);
         $worksheet1->write_blank(1, 2, $head_format);
         $worksheet1->write_blank(1, 3, $head_format);
         $worksheet1->set_column(0, 0, 70);
         $worksheet1->set_column(0, 1, 25);
         $worksheet1->set_column(0, 2, 25);
         $worksheet1->set_column(0, 3, 50);
         $row = 2;
         foreach ($group_by_data as $group_field => $sem_ids) {
             switch ($this->sem_browse_data["group_by"]) {
                 case 0:
                     $headline = $this->search_obj->sem_dates[$group_field]['name'];
                     break;
                 case 1:
                     if ($the_tree->tree_data[$group_field]) {
                         $headline = $the_tree->getShortPath($group_field);
                     } else {
                         $headline = _("keine Studienbereiche eingetragen");
                     }
                     break;
                 case 3:
                     $headline = $SEM_TYPE[$group_field]["name"] . " (" . $SEM_CLASS[$SEM_TYPE[$group_field]["class"]]["name"] . ")";
                     break;
                 default:
                     $headline = $group_field;
                     break;
             }
             ++$row;
             $worksheet1->write_string($row, 0, $headline, $caption_format);
             $worksheet1->write_blank($row, 1, $caption_format);
             $worksheet1->write_blank($row, 2, $caption_format);
             $worksheet1->write_blank($row, 3, $caption_format);
             ++$row;
             if (is_array($sem_ids['Seminar_id'])) {
                 while (list($seminar_id, ) = each($sem_ids['Seminar_id'])) {
                     $sem_name = key($sem_data[$seminar_id]["Name"]);
                     $seminar_number = key($sem_data[$seminar_id]['VeranstaltungsNummer']);
                     $sem_number_start = key($sem_data[$seminar_id]["sem_number"]);
                     $sem_number_end = key($sem_data[$seminar_id]["sem_number_end"]);
                     if ($sem_number_start != $sem_number_end) {
                         $sem_name .= " (" . $this->search_obj->sem_dates[$sem_number_start]['name'] . " - ";
                         $sem_name .= ($sem_number_end == -1 ? _("unbegrenzt") : $this->search_obj->sem_dates[$sem_number_end]['name']) . ")";
                     } elseif ($this->sem_browse_data["group_by"]) {
                         $sem_name .= " (" . $this->search_obj->sem_dates[$sem_number_start]['name'] . ")";
                     }
                     //create Turnus field
                     $seminar_obj = new Seminar($seminar_id);
                     // is this sem a studygroup?
                     $studygroup_mode = SeminarCategories::GetByTypeId($seminar_obj->getStatus())->studygroup_mode;
                     if ($studygroup_mode) {
                         $sem_name = $seminar_obj->getName() . ' (' . _("Studiengruppe");
                         if ($seminar_obj->admission_prelim) {
                             $sem_name .= ', ' . _("Zutritt auf Anfrage");
                         }
                         $sem_name .= ')';
                     }
                     $worksheet1->write_string($row, 0, $sem_name, $data_format);
                     $temp_turnus_string = $seminar_obj->getFormattedTurnus(true);
                     //Shorten, if string too long (add link for details.php)
                     if (strlen($temp_turnus_string) > 245) {
                         $temp_turnus_string = substr($temp_turnus_string, 0, strpos(substr($temp_turnus_string, 245, strlen($temp_turnus_string)), ",") + 246);
                         $temp_turnus_string .= " ... (" . _("mehr") . ")";
                     }
                     $worksheet1->write_string($row, 1, $seminar_number, $data_format);
                     $worksheet1->write_string($row, 2, $temp_turnus_string, $data_format);
                     $doz_name = array();
                     $c = 0;
                     reset($sem_data[$seminar_id]['fullname']);
                     foreach ($sem_data[$seminar_id]['username'] as $anzahl1) {
                         if ($c == 0) {
                             list($d_name, $anzahl2) = each($sem_data[$seminar_id]['fullname']);
                             $c = $anzahl2 / $anzahl1;
                             $doz_name = array_merge($doz_name, array_fill(0, $c, $d_name));
                         }
                         --$c;
                     }
                     $doz_position = array_keys($sem_data[$seminar_id]['position']);
                     if (is_array($doz_name)) {
                         if (count($doz_position) != count($doz_name)) {
                             $doz_position = range(1, count($doz_name));
                         }
                         array_multisort($doz_position, $doz_name);
                         $worksheet1->write_string($row, 3, join(', ', $doz_name), $data_format);
                     }
                     ++$row;
                 }
             }
         }
         $workbook->close();
     }
     return $tmpfile;
 }
Ejemplo n.º 6
0
 /**
  * Checks if the current step needs to be executed according
  * to already given values. A good example are study areas which
  * are only needed for certain sem_classes.
  *
  * @param Array $values values specified from previous steps
  * @return bool Is the current step required for a new course?
  */
 public function isRequired($values)
 {
     $coursetype = 1;
     foreach ($values as $class) {
         if ($class['coursetype']) {
             $coursetype = $class['coursetype'];
             break;
         }
     }
     $category = SeminarCategories::GetByTypeId($coursetype);
     return $category->bereiche;
 }
Ejemplo n.º 7
0
    <tbody>
    <? foreach ($waiting_list as $wait) {

        // wir sind in einer Anmeldeliste und brauchen Prozentangaben
        if ($wait["status"] == "claiming") {
            // Grün der Farbe nimmt mit Wahrscheinlichkeit ab
            $chance_color = dechex(55 + $wait['admission_chance'] * 2);
        } // wir sind in einer Warteliste
        else {
            $chance_color = $wait["position"] < 30
                ? dechex(255 - $wait["position"] * 6)
                : 44;
        }

        $seminar_name = $wait["Name"];
        if (SeminarCategories::GetByTypeId($wait['sem_status'])->studygroup_mode) {
            $seminar_name .= ' (' . _("Studiengruppe") . ', ' . _("geschlossen") . ')';
        }
        ?>
        <tr>
            <td title="<?php 
echo _("Position oder Wahrscheinlichkeit");
?>
" style="background:#44<?php 
echo $chance_color;
?>
44">
            </td>

            <td>
                <a href="<?php 
Ejemplo n.º 8
0
 public static function checkParticipants(&$my_obj, $user_id, $object_id, $is_admission)
 {
     if ($my_obj["modules"]["participants"]) {
         if (SeminarCategories::GetByTypeId($my_obj['status'])->studygroup_mode) {
             $nav = new Navigation('participants', 'dispatch.php/course/studygroup/members/' . $object_id);
         } else {
             $nav = new Navigation('participants', 'dispatch.php/course/members/index');
         }
         if ($GLOBALS['perm']->have_perm('admin', $user_id) || in_array($my_obj['user_status'], words('dozent tutor'))) {
             $count = 0;
             $neue = 0;
             $all_auto_inserts = AutoInsert::getAllSeminars(true);
             $auto_insert_perm = Config::get()->AUTO_INSERT_SEM_PARTICIPANTS_VIEW_PERM;
             $sql = "SELECT\n                        COUNT(a.user_id) as count,\n                        COUNT(IF((mkdate > IFNULL(b.visitdate, :threshold) AND a.user_id !=:user_id), a.user_id, NULL)) AS neue,\n                        MAX(IF((mkdate > IFNULL(b.visitdate, :threshold) AND a.user_id != :user_id), mkdate, 0)) AS last_modified\n                    FROM admission_seminar_user a\n                    LEFT JOIN object_user_visits b ON (b.object_id = a.seminar_id AND b.user_id = :user_id AND b.type ='participants')\n                    WHERE a.seminar_id = :course_id";
             $statement = DBManager::get()->prepare($sql);
             $statement->bindValue(':user_id', $user_id);
             $statement->bindValue(':course_id', $object_id);
             $statement->bindValue(':threshold', ($threshold = Config::get()->NEW_INDICATOR_THRESHOLD) ? strtotime("-{$threshold} days 0:00:00") : 0);
             $statement->execute();
             $result = $statement->fetch(PDO::FETCH_ASSOC);
             if (!empty($result)) {
                 if ($GLOBALS['perm']->have_perm('admin', $user_id) || in_array($my_obj['user_status'], words('dozent tutor'))) {
                     $count = $result['count'];
                     $neue = $result['neue'];
                     if ($my_obj['last_modified'] < $result['last_modified']) {
                         $my_obj['last_modified'] = $result['last_modified'];
                     }
                 }
             }
             $sql = "SELECT\n                    COUNT(a . user_id) as count,\n                    COUNT(IF((mkdate > IFNULL(b.visitdate, :threshold) AND a.user_id !=:user_id), a.user_id, NULL)) AS neue,\n                    MAX(IF ((mkdate > IFNULL(b.visitdate, :threshold) AND a.user_id != :user_id), mkdate, 0)) AS last_modified\n                    FROM seminar_user a\n                    LEFT JOIN object_user_visits b ON(b . object_id = a . seminar_id AND b . user_id = :user_id AND b . type = 'participants')\n                    WHERE seminar_id = :course_id";
             $statement = DBManager::get()->prepare($sql);
             $statement->bindValue(':user_id', $user_id);
             $statement->bindValue(':course_id', $object_id);
             $statement->bindValue(':threshold', ($threshold = Config::get()->NEW_INDICATOR_THRESHOLD) ? strtotime("-{$threshold} days 0:00:00") : 0);
             $statement->execute();
             $result = $statement->fetch(PDO::FETCH_ASSOC);
             if (!empty($result)) {
                 // show the participants-icon only if the module is activated and it is not an auto-insert-sem
                 if (in_array($object_id, $all_auto_inserts)) {
                     if ($GLOBALS['perm']->have_perm('admin', $user_id) && !$GLOBALS['perm']->have_perm($auto_insert_perm, $user_id)) {
                         return null;
                     } else {
                         if ($GLOBALS['perm']->permissions[$auto_insert_perm] > $GLOBALS['perm']->permissions[$my_obj['user_status']]) {
                             return null;
                         }
                     }
                 }
                 $count += $result['count'];
                 $neue += $result['neue'];
                 if ($GLOBALS['perm']->have_perm('admin', $user_id) || in_array($my_obj['user_status'], words('dozent tutor'))) {
                     if ($my_obj['last_modified'] < $result['last_modified']) {
                         $my_obj['last_modified'] = $result['last_modified'];
                     }
                 }
             }
             if ($neue) {
                 $nav->setImage(Icon::create('persons+new', 'attention', ["title" => sprintf('%s %s, %s %s', $count, _('Teilnehmende'), $neue, _('neue'))]));
                 $nav->setBadgeNumber($neue);
             } else {
                 if ($count) {
                     $nav->setImage(Icon::create('persons', 'inactive', ["title" => sprintf('%s %s', $count, _('Teilnehmende'))]));
                 }
             }
         } else {
             $nav->setImage(Icon::create('persons', 'inactive', ["title" => _('Teilnehmende')]));
         }
         return $nav;
     }
     return null;
 }
Ejemplo n.º 9
0
 /**
  * Enter description here...
  *
  * @param unknown_type $range_id
  * @param unknown_type $object_type
  * @param unknown_type $object_class_hint
  * @return unknown
  */
 public static function getDataFieldEntries($range_id, $object_type = '', $object_class_hint = '')
 {
     if (!$range_id) {
         return false;
         // we necessarily need a range ID
     }
     $parameters = array();
     if (is_array($range_id)) {
         // rangeID may be an array ("classic" rangeID and second rangeID used for user roles)
         $secRangeID = $range_id[1];
         $rangeID = $range_id[0];
         // to keep compatible with following code
         if ('usersemdata' !== $object_type && 'roleinstdata' !== $object_type) {
             $object_type = 'userinstrole';
         }
         $clause1 = "AND sec_range_id= :sec_range_id";
         $parameters[':sec_range_id'] = $secRangeID;
     } else {
         $rangeID = $range_id;
     }
     if (!$object_type) {
         $object_type = get_object_type($rangeID);
     }
     if ($object_type) {
         switch ($object_type) {
             case 'sem':
                 if ($object_class_hint) {
                     $object_class = SeminarCategories::GetByTypeId($object_class_hint);
                 } else {
                     $object_class = SeminarCategories::GetBySeminarId($rangeID);
                 }
                 $clause2 = "object_class = :object_class OR object_class IS NULL";
                 $parameters[':object_class'] = (int) $object_class->id;
                 break;
             case 'inst':
             case 'fak':
                 if ($object_class_hint) {
                     $object_class = $object_class_hint;
                 } else {
                     $query = "SELECT type FROM Institute WHERE Institut_id = ?";
                     $statement = DBManager::get()->prepare($query);
                     $statement->execute(array($rangeID));
                     $object_class = $statement->fetchColumn();
                 }
                 $object_type = "inst";
                 $clause2 = "object_class = :object_class OR object_class IS NULL";
                 $parameters[':object_class'] = (int) $object_class;
                 break;
             case 'roleinstdata':
                 //hmm tja, vermutlich so
                 $clause2 = '1';
                 break;
             case 'user':
             case 'userinstrole':
             case 'usersemdata':
                 $object_class = is_object($GLOBALS['perm']) ? DataField::permMask($GLOBALS['perm']->get_perm($rangeID)) : 0;
                 $clause2 = "((object_class & :object_class) OR object_class IS NULL)";
                 $parameters[':object_class'] = (int) $object_class;
                 break;
         }
         $query = "SELECT a.*, content\n                      FROM datafields AS a\n                      LEFT JOIN datafields_entries AS b\n                        ON (a.datafield_id = b.datafield_id AND range_id = :range_id {$clause1})\n                      WHERE object_type = :object_type AND ({$clause2})\n                      ORDER BY priority";
         $parameters[':range_id'] = $rangeID;
         $parameters[':object_type'] = $object_type;
         $rs = DBManager::get()->prepare($query);
         $rs->execute($parameters);
         $entries = array();
         while ($data = $rs->fetch(PDO::FETCH_ASSOC)) {
             $datafield = DataField::buildExisting($data);
             $entries[$data['datafield_id']] = DataFieldEntry::createDataFieldEntry($datafield, $range_id, $data['content']);
         }
     }
     return $entries;
 }