/** * Maintenance view for the auto insert parameters * */ function index_action() { // search seminars if (Request::submitted('suchen')) { if (Request::get('sem_search')) { $this->sem_search = Request::get('sem_search'); $this->sem_select = Request::option('sem_select'); $search = new SeminarSearch(); $this->seminar_search = $search->getResults(Request::get('sem_search'), array('search_sem_sem' => Request::option('sem_select'))); if (count($this->seminar_search) == 0) { $this->flash['message'] = _("Es wurden keine Veranstaltungen gefunden."); } } else { $this->flash['error'] = _("Bitte geben Sie einen Suchparameter ein."); } } $seminare = AutoInsert::getAllSeminars(); $this->auto_sems = $seminare; $domains = array(); $domains[] = array('id' => 'keine', 'name' => _('Ohne Domain')); foreach (UserDomain::getUserDomains() as $domain) { $domains[] = array('id' => $domain->getId(), 'name' => $domain->getName()); } $this->userdomains = $domains; }
function dump_sem($sem_id, $print_view = false) { global $TERMIN_TYP, $SEM_TYPE, $SEM_CLASS, $_fullname_sql, $AUTO_INSERT_SEM; $Modules = new Modules; $Modules = $Modules->getLocalModules($sem_id); $query = "SELECT status, Name, Untertitel, art, VeranstaltungsNummer, ects, Beschreibung, teilnehmer, vorrausetzungen, lernorga, leistungsnachweis, Sonstiges, Institut_id, admission_turnout FROM seminare WHERE Seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_id)); $seminar = $statement->fetch(PDO::FETCH_ASSOC); $sem_type = $seminar['status']; $sem = Seminar::getInstance($sem_id); $dump = '<table width="100%" border="1" cellpadding="2" cellspacing="0">'; $dump .= '<tr><td colspan="2" align="left" class="table_header_bold">'; $dump .= '<h1 class="table_header_bold"> ' . htmlReady($seminar['Name'], 1, 1) . '</h1>'; $dump .= '</td></tr>' . "\n"; // Helper function that dumps into a single table row $dumpRow = function ($title, $content, $escape = false) use (&$dump) { $content = trim($content); if ($content) { if ($escape) { $content = htmlReady($content, 1, 1); } $dump .= sprintf('<tr><td width="15%%"><b>%s</b></td><td>%s</td></tr>' . "\n", htmlReady($title), $content); } }; //Grunddaten des Seminars, wie in den seminar_main $dumpRow(_('Untertitel:'), $seminar['Untertitel'], true); if ($data = $sem->getDatesExport()) { $dumpRow(_('Zeit:'), nl2br($data)); } $dumpRow(_('Semester:'), get_semester($sem_id)); $dumpRow(_('Erster Termin:'), veranstaltung_beginn($sem_id, 'export')); if ($temp = vorbesprechung($sem_id, 'export')) { $dumpRow(_('Vorbesprechung:'), htmlReady($temp)); } if ($data = $sem->getDatesTemplate('dates/seminar_export_location')) { $dumpRow(_('Ort:'), nl2br($data)); } //wer macht den Dozenten? $query = "SELECT {$_fullname_sql['full']} AS fullname FROM seminar_user LEFT JOIN auth_user_md5 USING (user_id) LEFT JOIN user_info USING (user_id) WHERE Seminar_id = ? AND status = 'dozent' ORDER BY position, Nachname"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_id)); $teachers = $statement->fetchAll(PDO::FETCH_COLUMN); if (count($teachers) > 0) { $title = get_title_for_status('dozent', count($teachers), $sem_type); $dumpRow($title, implode('<br>', array_map('htmlReady', $teachers))); } //und wer ist Tutor? $query = "SELECT {$_fullname_sql['full']} AS fullname FROM seminar_user LEFT JOIN auth_user_md5 USING (user_id) LEFT JOIN user_info USING (user_id) WHERE Seminar_id = ? AND status = 'tutor' ORDER BY position, Nachname"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_id)); $tutors = $statement->fetchAll(PDO::FETCH_COLUMN); if (count($tutors) > 0) { $title = get_title_for_status('tutor', count($tutors), $sem_type); $dumpRow($title, implode('<br>', array_map('htmlReady', $tutors))); } if ($seminar['status'] != '' && isset($SEM_TYPE[$seminar['status']])) { $content = $SEM_TYPE[$seminar['status']]['name']; $content .= ' ' . _('in der Kategorie') . ' '; $content .= '<b>' . $SEM_CLASS[$SEM_TYPE[$seminar['status']]['class']]['name'] . '</b>'; $dumpRow(_('Typ der Veranstaltung'), $content); } $dumpRow(_('Art der Veranstaltung:'), $seminar['art'], true); $dumpRow(_('VeranstaltungsNummer:'), htmlReady($seminar['VeranstaltungsNummer'])); $dumpRow(_('ECTS-Punkte:'), htmlReady($seminar['ects'])); $dumpRow(_('Beschreibung:'), $seminar['Beschreibung'], true); $dumpRow(_('Teilnehmende:'), $seminar['teilnehmende'], true); $dumpRow(_('Voraussetzungen:'), $seminar['vorrausetzungen'], true); $dumpRow(_('Lernorganisation:'), $seminar['lernorga'], true); $dumpRow(_('Leistungsnachweis:'), $seminar['leistungsnachweis'], true); //add the free adminstrable datafields $localEntries = DataFieldEntry::getDataFieldEntries($sem_id); foreach ($localEntries as $entry) { $dumpRow($entry->getName(), $entry->getDisplayValue()); } $dumpRow(_('Sonstiges:'), $seminar['Sonstiges'], true); // Fakultaeten... $query = "SELECT DISTINCT c.Name FROM seminar_inst AS a LEFT JOIN Institute AS b USING (Institut_id) LEFT JOIN Institute AS c ON (c.Institut_id = b.fakultaets_id) WHERE a.seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_id)); $faculties = $statement->fetchAll(PDO::FETCH_COLUMN); if (count($faculties) > 0) { $dumpRow(_('Fakultät(en):'), implode('<br>', array_map('htmlReady', $faculties))); } //Studienbereiche if (isset($SEM_TYPE[$seminar['status']]) && $SEM_CLASS[$SEM_TYPE[$seminar['status']]['class']]['bereiche']) { $sem_path = get_sem_tree_path($sem_id) ?: array(); $dumpRow(_('Studienbereiche') . ':', implode('<br>', array_map('htmlReady', $sem_path))); } $iid = $seminar['Institut_id']; $query = "SELECT Name FROM Institute WHERE Institut_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($iid)); $inst_name = $statement->fetchColumn(); $dumpRow(_('Heimat-Einrichtung:'), $inst_name, true); $query = "SELECT Name FROM seminar_inst LEFT JOIN Institute USING (institut_id) WHERE seminar_id = ? AND Institute.institut_id != ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_id, $iid)); $other_institutes = $statement->fetchAll(PDO::FETCH_COLUMN); if (count($other_institutes) > 0) { $title = (count($other_institutes) == 1) ? _('Beteiligte Einrichtung:') : _('Beteiligte Einrichtungen:'); $dumpRow($title, implode(', ', array_map('htmlReady', $other_institutes))); } //Teilnehmeranzahl $dumpRow(_('max. Personenanzahl:'), $seminar['admission_turnout']); //Statistikfunktionen $query = "SELECT COUNT(*) FROM seminar_user WHERE Seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_id)); $count = $statement->fetchColumn(); $dumpRow(_('Anzahl der angemeldeten Personen:'), $count); // number of postings for all forum-modules in this seminar $count = 0; $forum_modules = PluginEngine::getPlugins('ForumModule', $sem_id); foreach ($forum_modules as $plugin) { $count += $plugin->getNumberOfPostingsForSeminar($sem_id); } $dumpRow(_('Forenbeiträge:'), $count); if ($Modules['documents']) { //do not show hidden documents $unreadable_folders = array(); if ($print_view) { $check_user = $print_view === true ? $GLOBALS['user']->id : $print_view; if ($Modules['documents_folder_permissions'] || StudipDocumentTree::ExistsGroupFolders($sem_id)) { if (!$GLOBALS['perm']->have_studip_perm('tutor', $sem_id, $check_user)) { $folder_tree = TreeAbstract::GetInstance('StudipDocumentTree', array('range_id' => $sem_id,'entity_type' => 'sem')); $unreadable_folders = $folder_tree->getUnReadableFolders($check_user); } } } $query = "SELECT COUNT(*) FROM dokumente WHERE seminar_id = ?"; $parameters = array($sem_id); if (count($unreadable_folders) > 0) { $query .= " AND range_id NOT IN(?)"; $parameters[] = $unreadable_folders; } $statement = DBManager::get()->prepare($query); $statement->execute($parameters); $docs = $statement->fetchColumn(); } $dumpRow(_('Dokumente:'), $docs ?: 0); $dump.= '</table>' . "\n"; // Ablaufplan if ($Modules['schedule']) { $dump.= dumpRegularDatesSchedule($sem_id); $dump.= dumpExtraDatesSchedule($sem_id); } //SCM if ($Modules['scm']) { foreach(StudipScmEntry::findByRange_id($sem_id, 'ORDER BY position ASC') as $scm) { if (!empty($scm->content)) { $dump .= '<br>'; $dump .= '<table width="100%" border="1" cellpadding="2" cellspacing="0">'; $dump .= ' <tr><td align="left" class="table_header_bold">'; $dump .= '<h2 class="table_header_bold"> ' . htmlReady($scm->tab_name) . '</h2>'; $dump .= '</td></tr>' . "\n"; $dump .= '<tr><td align="left" width="100%"><br>'. formatReady($scm->content, 1, 1) .'<br></td></tr>' . "\n"; $dump .= '</table>' . "\n"; } } } if ($Modules['literature']) { $lit = StudipLitList::GetFormattedListsByRange($sem_id, false, false); if ($lit) { $dump .= '<br>'; $dump .= '<table width="100%" border="1" cellpadding="2" cellspacing="0">'; $dump .= '<tr><td align="left" class="table_header_bold">'; $dump .= '<h2 class="table_header_bold"> ' . _('Literaturlisten') . '</h2>'; $dump .= '</td></tr>' . "\n"; $dump .= '<tr><td align="left" width="100%"><br>'. $lit .'<br></td></tr>' . "\n"; $dump .= '</table>' . "\n"; } } // Dateien anzeigen if ($Modules['documents']) { $link_text = _('Hinweis: Diese Datei wurde nicht archiviert, da sie lediglich verlinkt wurde.'); $query = "SELECT name, filename, mkdate, filesize, Nachname AS nachname, IF(url != '', CONCAT('{$link_text}', ' / ', description), description) AS description FROM dokumente LEFT JOIN auth_user_md5 USING (user_id) WHERE seminar_id = ?"; $parameters = array($sem_id); if (count($unreadable_folders) > 0) { $query .= " AND range_id NOT IN (?)"; $parameters[] = $unreadable_folders; } $statement = DBManager::get()->prepare($query); $statement->execute($parameters); $dbresult = $statement->fetchAll(PDO::FETCH_ASSOC); if (count($dbresult) > 0) { $dump .= '<br>'; $dump .= '<table width="100%" border="1" cellpadding="2" cellspacing="0">'; $dump .= '<tr><td align="left" colspan="3" class="table_header_bold">'; $dump .= '<h2 class="table_header_bold"> ' . _('Dateien:') . '</h2>'; $dump .= '</td></tr>' . "\n"; foreach ($dbresult as $row) { $name = ($row['name'] && $row['name'] != $row['filename']) ? $row['name'] . ' (' . $row['filename'] . ')' : $row['filename']; $dump .= sprintf('<tr><td width="100%%"><b>%s</b><br>%s (%u KB)</td><td>%s</td><td>%s</td></tr>' . "\n", htmlReady($name), htmlReady($row['description']), round($row['filesize'] / 1024), htmlReady($row['nachname']), date('d.m.Y', $row['mkdate'])); } $dump .= '</table>' . "\n"; } } // Teilnehmer if ($Modules['participants'] && (Config::get()->AUTO_INSERT_SEM_PARTICIPANTS_VIEW_PERM || !in_array($sem_id, AutoInsert::getAllSeminars(true)))) { $dump .= '<br>'; // Prepare statement that obtains the number of document a specific // user has uploaded into a specific seminar $documents_params = array($sem_id, null); $query = "SELECT COUNT(*) FROM dokumente WHERE Seminar_id = ? AND user_id = ?"; if (count($unreadable_folders) > 0) { $query .= " AND range_id NOT IN (?)"; $documents_params[] = $unreadable_folders; } $documents_statement = DBManager::get()->prepare($query); // Prepare statement that obtains all participants of a specific // seminar with a specific status $ext_vis_query = get_ext_vis_query('seminar_user'); $query = "SELECT user_id, {$_fullname_sql['full']} AS fullname, {$ext_vis_query} AS user_is_visible FROM seminar_user LEFT JOIN auth_user_md5 USING (user_id) LEFT JOIN user_info USING (user_id) WHERE Seminar_id = ? AND status = ? GROUP by user_id ORDER BY Nachname, Vorname"; $user_statement = DBManager::get()->prepare($query); foreach (words('dozent tutor autor user') as $key) { // die eigentliche Teil-Tabelle $user_statement->execute(array($sem_id, $key)); $users = $user_statement->fetchAll(PDO::FETCH_ASSOC); $user_statement->closeCursor(); //haben wir in der Personengattung ueberhaupt einen Eintrag? if (count($users) > 0) { $dump .= '<table width="100%" border="1" cellpadding="2" cellspacing="0">'; $dump .= '<tr><td align="left" colspan="3" class="table_header_bold">'; $dump .= '<h2 class="table_header_bold"> ' . get_title_for_status($key, count($users), $sem_type) . '</h2>'; $dump .= '</td></tr>' . "\n"; $dump .= '<th width="30%">' . _('Name') . '</th>'; $dump .= '<th width="10%">' . _('Forenbeiträge') . '</th>'; $dump .= '<th width="10%">' . _('Dokumente') . '</th></tr>' . "\n"; foreach ($users as $user) { $documents_params[1] = $user['user_id']; $documents_statement->execute($documents_params); $count = $documents_statement->fetchColumn() ?: 0; $documents_statement->closeCursor(); // get number of postings for this user from all forum-modules $postings = 0; foreach ($forum_modules as $plugin) { $postings += $plugin->getNumberOfPostingsForUser($user['user_id'], $sem_id); } $dump .= sprintf('<tr><td>%s</td><td align="center">%u</td><td align="center">%u</td></tr>' . "\n", $user['user_is_visible'] ? htmlReady($user['fullname']) : _('(unsichtbareR NutzerIn)'), $postings, $count); } // eine Zeile zuende $dump.= '</table>' . "\n"; } } // eine Gruppe zuende } return $dump; } // end function dump_sem($sem_id)
/** * * @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; }
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; }