public function show_seminar_avatar($eventname, $search_item) { if ($search_item->type === "seminar") { $search_item->avatar = CourseAvatar::getAvatar($search_item->entry_id)->getURL(Avatar::MEDIUM); $seminar = new Seminar($search_item->entry_id); $date = $seminar->getDatesHTML(array('link_to_dates' => false)); $search_item->presentation = "<div>"; $key = 0; foreach ($seminar->getMembers('dozent') as $dozent) { if ($key > 0) { $search_item->presentation .= ", "; } $search_item->presentation .= '<a href="' . URLHelper::getLink("about.php", array('username' => $dozent['username'])) . '">' . htmlReady($dozent['Vorname'] . " " . $dozent['Nachname']) . '</a>'; $key++; } $search_item->presentation .= "</div>"; $search_item->presentation .= "<div>"; $search_item->presentation .= htmlReady(get_semester($search_item->entry_id) . ". "); if ($date) { $search_item->presentation .= _("Termine") . ": " . $date; } $search_item->presentation .= "</div>"; if ($GLOBALS['perm']->have_perm("admin")) { $search_item->tools[] = '<a href="' . URLHelper::getLink("dispatch.php/course/basicdata/view", array('cid' => $search_item->entry_id)) . '" title="' . _("Grunddaten bearbeiten") . '">' . Assets::img("icons/16/blue/edit.png", array('class' => "text-bottom")) . "</a>"; $search_item->tools[] = '<a href="' . URLHelper::getLink("dispatch.php/course/study_areas/show", array('cid' => $search_item->entry_id)) . '" title="' . _("Studienbereiche festlegen") . '">' . Assets::img("icons/16/blue/grouping.png", array('class' => "text-bottom")) . "</a>"; $search_item->tools[] = '<a href="' . URLHelper::getLink("raumzeit.php", array('cid' => $search_item->entry_id)) . '" title="' . _("Zeiten/Räume") . '">' . Assets::img("icons/16/blue/date.png", array('class' => "text-bottom")) . "</a>"; $search_item->tools[] = '<a href="' . URLHelper::getLink("dispatch.php/course/room_requests", array('cid' => $search_item->entry_id)) . '" title="' . _("Raumanfragen") . '">' . Assets::img("icons/16/blue/room_request.png", array('class' => "text-bottom")) . "</a>"; } } }
public function before_filter(&$action, &$args) { parent::before_filter($action, $args); checkObject(); checkObjectModule("schedule"); PageLayout::setTitle(sprintf('%s - %s', Course::findCurrent()->getFullname(), _("Themen"))); $seminar = new Seminar(Course::findCurrent()); $this->forum_activated = $seminar->getSlotModule('forum'); $this->documents_activated = $seminar->getSlotModule('documents'); }
function index_action() { $form_fields['comment'] = array('caption' => _("Kommentar"), 'type' => 'textarea', 'attributes' => array('rows' => 4, 'style' => 'width:100%')); $form_fields['snd_message'] = array('caption' => _("Benachrichtigung über ausfallende Termine an alle Teilnehmer verschicken"), 'type' => 'checkbox', 'attributes' => array('style' => 'vertical-align:middle')); $form_buttons['save_close'] = array('caption' => _('OK'), 'info' => _("Termine absagen und Dialog schließen")); $form = new StudipForm($form_fields, $form_buttons, 'cancel_dates', false); if ($form->isClicked('save_close')) { $sem = Seminar::getInstance($this->course_id); $comment = $form->getFormFieldValue('comment'); foreach ($this->dates as $date) { $sem->cancelSingleDate($date->getTerminId(), $date->getMetadateId()); $date->setComment($comment); $date->setExTermin(true); $date->store(); } if ($form->getFormFieldValue('snd_message') && count($this->dates)) { $snd_messages = raumzeit_send_cancel_message($comment, $this->dates); if ($snd_messages) { $msg = sprintf(_("Es wurden %s Benachrichtigungen gesendet."), $snd_messages); } } PageLayout::postMessage(MessageBox::success(_("Folgende Termine wurden abgesagt") . ($msg ? ' (' . $msg . '):' : ':'), array_map(function ($d) { return $d->toString(); }, $this->dates))); $this->redirect($this->url_for('course/dates')); } $this->form = $form; }
public function afterUpdate(SimpleORMap $object, $line) { $old_domains = array_map(function ($domain) { return $domain->getID(); }, $this->old_domains); $new_domains = UserDomain::getUserDomainsForUser($object->getId()); foreach ($new_domains as $domain_id) { if (!in_array($domain_id, $old_domains)) { if ($domain_id === "alumni") { if (count($new_domains) == 1) { $statement = DBManager::get()->prepare("\n SELECT seminar_user.Seminar_id \n FROM seminar_user\n LEFT JOIN seminar_userdomain ON (seminar_user.Seminar_id = seminar_userdomain.Seminar_id)\n WHERE seminar_user.user_id = :user_id\n AND seminar_user.Seminar_id NOT IN (SELECT seminar_id FROM seminar_userdomain WHERE userdomain_id = 'alumni')\n "); $statement->execute(array('user_id' => $object->getId())); foreach ($statement->fetchAll(PDO::FETCH_COLUMN, 0) as $seminar_id) { $seminar = new Seminar($seminar_id); $seminar->deleteMember($object->getId()); } } $datafield = Datafield::findOneBySQL("name = 'Ich will weiterhin als Alumni in Stud.IP geführt werden' AND object_type = 'user'"); $user_wants_to_stay = DatafieldEntry::findOneBySQL("datafield_id = ? AND range_id = ?", array($datafield->getId(), $object->getId())); if ($user_wants_to_stay['content']) { //In Veranstaltung ALUMNI die Statusgruppe anlegen: $datafield = Datafield::findOneBySQL("name = 'Alumni' AND object_type = 'user'"); $entry = DatafieldEntry::findOneBySQL("datafield_id = ? AND range_id = ?", array($datafield->getId(), $object->getId())); $course = Course::findOneByName("ALUMNI"); $gruppenname = $entry ? $entry['content'] : null; if ($course && $gruppenname) { $statusgruppe = Statusgruppen::findOneBySQL("name = ? range_id = ?", array($gruppenname, $course->getId())); if (!$statusgruppe) { $statusgruppe = new Statusgruppen(); $statusgruppe['name'] = $gruppenname; $statusgruppe['range_id'] = $course->getId(); $statusgruppe->store(); } if (!$statusgruppe->isMember($object->getId())) { $statusgruppe->addUser($object->getId()); } } } else { $object->delete(); $deleted = true; } } } } }
function get_seminars_by_sem_tree_id_action($api_key, $sem_tree_id, $term_id) { $seminar_infos = array(); $seminar_ids = StudipLectureTreeHelper::get_seminars_by_sem_tree_id($sem_tree_id, $term_id); foreach ($seminar_ids as $seminar_id) { $sem_obj = new Seminar($seminar_id['seminar_id']); $lecturers = StudipSeminarHelper::get_participants($seminar_id['seminar_id'], 'dozent'); foreach ($lecturers as $lecturer) { $lecturers[] = Studip_User::find_by_user_name($lecturer); } $seminar_info = new Studip_Seminar_Info(); $seminar_info->title = $sem_obj->getName(); $seminar_info->lecturers = $lecturers; $seminar_info->turnus = $sem_obj->getDatesTemplate('dates/seminar_export', array('semester_id' => $term_id)); $seminar_info->lecture_number = $sem_obj->seminar_number; $seminar_infos[] = $seminar_info; } return $seminar_infos; }
/** * Returns a schedule entry for a course * * @param string $seminar_id the ID of the course * @param string $user_id the ID of the user * @param string $cycle_id optional; if given, specifies the ID of the entry * @return array an array containing the properties of the entry */ static function getSeminarEntry($seminar_id, $user_id, $cycle_id = false) { $ret = array(); $sem = new Seminar($seminar_id); foreach ($sem->getCycles() as $cycle) { if (!$cycle_id || $cycle->getMetaDateID() == $cycle_id) { $entry = array(); $entry['id'] = $seminar_id; $entry['cycle_id'] = $cycle->getMetaDateId(); $entry['start_formatted'] = sprintf("%02d", $cycle->getStartStunde()) . ':' . sprintf("%02d", $cycle->getStartMinute()); $entry['end_formatted'] = sprintf("%02d", $cycle->getEndStunde()) . ':' . sprintf("%02d", $cycle->getEndMinute()); $entry['start'] = (int) $cycle->getStartStunde() * 100 + $cycle->getStartMinute(); $entry['end'] = (int) $cycle->getEndStunde() * 100 + $cycle->getEndMinute(); $entry['day'] = $cycle->getDay(); $entry['content'] = $sem->getNumber() . ' ' . $sem->getName(); $entry['url'] = URLHelper::getLink('dispatch.php/calendar/instschedule/entry/' . $seminar_id . '/' . $cycle->getMetaDateId()); $entry['onClick'] = "function(id) { STUDIP.Instschedule.showSeminarDetails('{$seminar_id}', '" . $cycle->getMetaDateId() . "'); }"; $entry['title'] = ''; $ret[] = $entry; } } return $ret; }
function before_filter(&$action, &$args) { global $SEM_TYPE, $SEM_CLASS; parent::before_filter($action, $args); checkObject(); $this->course = Course::findCurrent(); if (!$this->course) { throw new CheckObjectException(_('Sie haben kein Objekt gewählt.')); } $this->course_id = $this->course->id; PageLayout::setHelpKeyword("Basis.InVeranstaltungKurzinfo"); PageLayout::setTitle($GLOBALS['SessSemName']["header_line"] . " - " . _("Kurzinfo")); Navigation::activateItem('/course/main/info'); // add skip link SkipLinks::addIndex(Navigation::getItem('/course/main/info')->getTitle(), 'main_content', 100); $this->sem = Seminar::getInstance($this->course_id); $sem_class = $this->sem->getSemClass(); $this->studygroup_mode = $sem_class["studygroup_mode"]; }
function before_filter(&$action, &$args) { parent::before_filter($action, $args); $this->course_id = current($args); if ($this->course_id === '' || get_object_type($this->course_id) !== 'sem' || !$GLOBALS['perm']->have_studip_perm("tutor", $this->course_id)) { $this->set_status(403); return FALSE; } $this->body_id = 'custom_avatar'; PageLayout::setTitle(Course::findCurrent()->getFullname() . ' - ' . _('Bild ändern')); $sem = Seminar::getInstance($this->course_id); $this->studygroup_mode = $sem->getSemClass()->offsetget("studygroup_mode"); if ($this->studygroup_mode) { $this->avatar = StudygroupAvatar::getAvatar($this->course_id); } else { $this->avatar = CourseAvatar::getAvatar($this->course_id); } Navigation::activateItem('/course/admin/avatar'); }
public function before_filter(&$action, &$args) { $this->set_layout($GLOBALS['template_factory']->open('layouts/base_without_infobox')); $this->course = Course::findCurrent(); if (!$this->course) { throw new CheckObjectException(_('Sie haben kein Objekt gewählt.')); } else { if (Navigation::hasItem('/course/admin')) { Navigation::activateItem('/course/admin/seminar_tabs'); } else { if (Navigation::hasItem('/admin/course/seminar_tabs')) { Navigation::activateItem('/admin/course/seminar_tabs'); } } $this->ignore_tabs = array('modules', 'mini_course'); $this->ignore_visibility_tabs = array('admin', 'main'); $this->course_id = $this->course->id; $this->sem = Seminar::getInstance($this->course_id); $sem_class = $GLOBALS['SEM_CLASS'][$GLOBALS['SEM_TYPE'][$this->sem->status]['class']]; $sem_class || ($sem_class = SemClass::getDefaultSemClass()); $this->studygroup_mode = $SEM_CLASS[$SEM_TYPE[$this->sem->status]["class"]]["studygroup_mode"]; } }
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 $range_id * @param unknown_type $type */ function show_rss_news($range_id, $type) { $item_url_fmt = '%1$s&contentbox_open=%2$s#%2$s'; switch ($type) { case 'user': $studip_url = $GLOBALS['ABSOLUTE_URI_STUDIP'] . 'dispatch.php/profile?again=yes&username='******' (Stud.IP - ' . $GLOBALS['UNI_NAME_CLEAN'] . ')'; $description = _('Persönliche Neuigkeiten') . ' ' . $title; break; case 'sem': $studip_url = $GLOBALS['ABSOLUTE_URI_STUDIP'] . 'dispatch.php/course/overview?cid=' . $range_id; $sem_obj = Seminar::GetInstance($range_id); if ($sem_obj->read_level > 0) { $studip_url .= '&again=yes'; } $title = $sem_obj->getName() . ' (Stud.IP - ' . $GLOBALS['UNI_NAME_CLEAN'] . ')'; $description = _('Neuigkeiten der Veranstaltung') . ' ' . $title; break; case 'inst': $studip_url = $GLOBALS['ABSOLUTE_URI_STUDIP'] . 'dispatch.php/institute/overview?auswahl=' . $range_id; $object_name = get_object_name($range_id, $type); if (!get_config('ENABLE_FREE_ACCESS')) { $studip_url .= "&again=yes"; } $title = $object_name['name'] . ' (Stud.IP - ' . $GLOBALS['UNI_NAME_CLEAN'] . ')'; $description = _('Neuigkeiten der Einrichtung') . ' ' . $title; break; case 'global': $studip_url = $GLOBALS['ABSOLUTE_URI_STUDIP'] . 'dispatch.php/start?again=yes'; $title = 'Stud.IP - ' . $GLOBALS['UNI_NAME_CLEAN']; $description = _('Allgemeine Neuigkeiten') . ' ' . $title; break; } $items = StudipNews::GetNewsByRange($range_id, true); $last_changed = 0; foreach ($items as &$item) { if ($last_changed < $item['chdate']) { $last_changed = $item['chdate']; } if ($item['date'] < $item['chdate']) { $item['date'] = $item['chdate']; } list($body, $admin_msg) = explode('<admin_msg>', $item['body']); $item['body'] = $body; } header('Content-type: application/rss+xml; charset=utf-8'); $template = $GLOBALS['template_factory']->open('news/rss-feed'); $template->items = $items; $template->title = $title; $template->studip_url = $studip_url; $template->description = $description; $template->last_changed = $last_changed; $template->item_url_fmt = $item_url_fmt; echo $template->render(); return true; }
/** * Returns an HTML fragment of a grouped entry in the schedule of an institute. * * @param string $start the start time of the group, e.g. "1000" * @param string $end the end time of the group, e.g. "1200" * @param string $seminars the IDs of the courses * @param string $day numeric day to show * * @return void */ function groupedentry_action($start, $end, $seminars, $day) { $this->response->add_header('Content-Type', 'text/html; charset=windows-1252'); // strucutre of an id: seminar_id-cycle_id // we do not need the cycle id here, so we trash it. $seminar_list = array(); foreach (explode(',', $seminars) as $seminar) { $zw = explode('-', $seminar); $this->seminars[$zw[0]] = Seminar::getInstance($zw[0]); } $this->start = substr($start, 0, 2) . ':' . substr($start, 2, 2); $this->end = substr($end, 0, 2) . ':' . substr($end, 2, 2); $day_names = array(_("Montag"), _("Dienstag"), _("Mittwoch"), _("Donnerstag"), _("Freitag"), _("Samstag"), _("Sonntag")); $this->day = $day_names[(int) $day]; $this->render_template('calendar/instschedule/_entry_details'); }
/** * Exports lecture-data. * * This function gets the data of the lectures at an institute and writes it into $data_object. * It calls output_data afterwards. * * @access public * @param string $inst_id Stud.IP-inst_id for export * @param string $ex_sem_id allows to choose if only a specific lecture is to be exported */ function export_sem($inst_id, $ex_sem_id = 'all') { global $range_id, $xml_file, $o_mode, $xml_names_lecture, $xml_groupnames_lecture, $object_counter, $SEM_TYPE, $SEM_CLASS, $filter, $ex_sem, $ex_sem_class, $ex_person_details, $persons; $ex_only_homeinst = Request::int('ex_only_homeinst', 0); // Prepare user count statement $query = "SELECT COUNT(user_id)\n FROM seminar_user\n WHERE seminar_id = ? AND status = 'autor'"; $count_statement = DBManager::get()->prepare($query); // Prepare inner statement $query = "SELECT seminar_user.position,\n auth_user_md5.user_id, auth_user_md5.username, auth_user_md5.Vorname, auth_user_md5.Nachname,\n user_info.title_front, user_info.title_rear\n FROM seminar_user\n LEFT JOIN user_info USING (user_id)\n LEFT JOIN auth_user_md5 USING (user_id)\n WHERE seminar_user.status = 'dozent' AND seminar_user.Seminar_id = ?\n ORDER BY seminar_user.position"; $inner_statement = DBManager::get()->prepare($query); // Prepare (build) and execute outmost query switch ($filter) { case "seminar": $order = " seminare.Name"; break; case "status": $order = "seminare.status, seminare.Name"; $group = "FIRSTGROUP"; $group_tab_zelle = "status"; $do_group = true; break; default: $order = "seminare.status, seminare.Name"; $group = "FIRSTGROUP"; $group_tab_zelle = "status"; $do_group = true; } $parameters = array(); if (isset($ex_sem) && ($semester = Semester::find($ex_sem))) { $addquery = " AND seminare.start_time <= :begin AND (:begin <= (seminare.start_time + seminare.duration_time) OR seminare.duration_time = -1) "; $parameters[':begin'] = $semester->beginn; } if ($ex_sem_id != 'all') { if ($ex_sem_id == 'root') { $addquery .= " AND EXISTS (SELECT * FROM seminar_sem_tree WHERE seminar_sem_tree.seminar_id = seminare.Seminar_id) "; } else { if (!is_array($ex_sem_id)) { $ex_sem_id = array($ex_sem_id); } $ex_sem_id = array_flip($ex_sem_id); } } if (!$GLOBALS['perm']->have_perm('root') && !$GLOBALS['perm']->have_studip_perm('admin', $inst_id)) { $addquery .= " AND visible = 1 "; } if (count($ex_sem_class) > 0) { $allowed_sem_types = array(); foreach (array_keys($ex_sem_class) as $semclassid) { $allowed_sem_types += array_keys(SeminarCategories::get($semclassid)->getTypes()); } $addquery .= " AND seminare.status IN (:status) "; $parameters[':status'] = $allowed_sem_types; } else { $addquery .= " AND seminare.status NOT IN (:status) "; $parameters[':status'] = studygroup_sem_types() ?: ''; } if ($ex_only_homeinst) { $query = "SELECT seminare.*,Seminar_id as seminar_id, Institute.Name AS heimateinrichtung\n FROM seminare\n LEFT JOIN Institute USING (Institut_id)\n WHERE Institut_id = :institute_id {$addquery}\n ORDER BY " . $order; $parameters[':institute_id'] = $inst_id; } else { $query = "SELECT seminare.*,Seminar_id as seminar_id, Institute.Name AS heimateinrichtung\n FROM seminar_inst\n LEFT JOIN seminare USING (Seminar_id)\n LEFT JOIN Institute ON seminare.Institut_id = Institute.Institut_id\n WHERE seminar_inst.Institut_id = :institute_id {$addquery}\n ORDER BY " . $order; $parameters[':institute_id'] = $inst_id; } $statement = DBManager::get()->prepare($query); $statement->execute($parameters); $data = $statement->fetchAll(PDO::FETCH_ASSOC); $data_object .= xml_open_tag($xml_groupnames_lecture['group']); foreach ($data as $row) { if (is_array($ex_sem_id) && !isset($ex_sem_id[$row['seminar_id']])) { continue; } $group_string = ''; if ($do_group && $group != $row[$group_tab_zelle]) { if ($group != 'FIRSTGROUP') { $group_string .= xml_close_tag($xml_groupnames_lecture['subgroup1']); } if ($group_tab_zelle == 'status') { $group_string .= xml_open_tag($xml_groupnames_lecture['subgroup1'], $SEM_TYPE[$row[$group_tab_zelle]]['name']); } else { $group_string .= xml_open_tag($xml_groupnames_lecture['subgroup1'], $row[$group_tab_zelle]); } $group = $row[$group_tab_zelle]; if ($do_subgroup && $subgroup == $row[$subgroup_tab_zelle]) { $subgroup = "NEXTGROUP"; } } if ($do_subgroup && $subgroup != $row[$subgroup_tab_zelle]) { if ($subgroup != 'FIRSTGROUP') { $group_string = xml_close_tag($xml_groupnames_lecture['subgroup2']) . $group_string; } $group_string .= xml_open_tag($xml_groupnames_lecture['subgroup2'], $row[$subgroup_tab_zelle]); $subgroup = $row[$subgroup_tab_zelle]; } $data_object .= $group_string; $object_counter += 1; $data_object .= xml_open_tag($xml_groupnames_lecture['object'], $row['seminar_id']); $sem_obj = new Seminar($row['seminar_id']); while (list($key, $val) = each($xml_names_lecture)) { if ($val == '') { $val = $key; } if ($key == 'status') { $data_object .= xml_tag($val, $SEM_TYPE[$row[$key]]['name']); } elseif ($key == 'ort') { $data_object .= xml_tag($val, $sem_obj->getDatesTemplate('dates/seminar_export_location')); } elseif ($key == 'bereich' && $SEM_CLASS[$SEM_TYPE[$row['status']]['class']]['bereiche']) { $data_object .= xml_open_tag($xml_groupnames_lecture['childgroup3']); $pathes = get_sem_tree_path($row['seminar_id']); if (is_array($pathes)) { foreach ($pathes as $path_name) { $data_object .= xml_tag($val, $path_name); } } else { $data_object .= xml_tag($val, 'n.a.'); } $data_object .= xml_close_tag($xml_groupnames_lecture['childgroup3']); } elseif ($key == 'admission_turnout') { $data_object .= xml_open_tag($val, $row['admission_type'] ? _('max.') : _('erw.')); $data_object .= $row[$key]; $data_object .= xml_close_tag($val); } elseif ($key == 'teilnehmer_anzahl_aktuell') { $count_statement->execute(array($row['seminar_id'])); $count = $count_statement->fetchColumn(); $count_statement->closeCursor(); $data_object .= xml_tag($val, $count); } elseif ($key == 'metadata_dates') { $data_object .= xml_open_tag($xml_groupnames_lecture['childgroup1']); $vorb = vorbesprechung($row['seminar_id'], 'export'); if ($vorb != false) { $data_object .= xml_tag($val[0], $vorb); } if (($first_date = SeminarDB::getFirstDate($row['seminar_id'])) && count($first_date)) { $really_first_date = new SingleDate($first_date[0]); $data_object .= xml_tag($val[1], $really_first_date->getDatesExport()); } $data_object .= xml_tag($val[2], $sem_obj->getDatesExport()); $data_object .= xml_close_tag($xml_groupnames_lecture["childgroup1"]); } elseif ($key == 'Institut_id') { $data_object .= xml_tag($val, $row['heimateinrichtung'], array('key' => $row[$key])); } elseif ($row[$key] != '') { $data_object .= xml_tag($val, $row[$key]); } } $data_object .= "<" . $xml_groupnames_lecture['childgroup2'] . ">\n"; $inner_statement->execute(array($row['seminar_id'])); while ($inner = $inner_statement->fetch(PDO::FETCH_ASSOC)) { if ($ex_person_details) { $persons[$inner['user_id']] = true; } $content_string = $inner['Vorname'] . ' ' . $inner['Nachname']; if ($inner['title_front'] != '') { $content_string = $inner['title_front'] . ' ' . $content_string; } if ($inner['title_rear'] != '') { $content_string .= ', ' . $inner['title_rear']; } $data_object .= xml_tag($xml_groupnames_lecture['childobject2'], $content_string, array('key' => $inner['username'])); } $data_object .= xml_close_tag($xml_groupnames_lecture['childgroup2']); // freie Datenfelder ausgeben $data_object .= export_datafields($row['seminar_id'], $xml_groupnames_lecture['childgroup4'], $xml_groupnames_lecture['childobject4'], 'sem', $row['status']); $data_object .= xml_close_tag($xml_groupnames_lecture['object']); reset($xml_names_lecture); output_data($data_object, $o_mode); $data_object = ''; } if ($do_subgroup && $subgroup != 'FIRSTGROUP') { $data_object .= xml_close_tag($xml_groupnames_lecture['subgroup2']); } if ($do_group && $group != 'FIRSTGROUP') { $data_object .= xml_close_tag($xml_groupnames_lecture['subgroup1']); } $data_object .= xml_close_tag($xml_groupnames_lecture['group']); output_data($data_object, $o_mode); }
/** * * @param $request_id */ function showRequest($request_id) { global $cssSw, $perm; $reqObj = new RoomRequest($request_id); $semObj = new Seminar($reqObj->getSeminarId()); $sem_link = $perm->have_studip_perm('tutor', $semObj->getId()) ? "seminar_main.php?auswahl=" . $semObj->getId() : "dispatch.php/course/details/?sem_id=" . $semObj->getId() . "&send_from_search=1&send_from_search_page=" . URLHelper::getLink("resources.php?working_on_request=$request_id"); ?> <form method="POST" action="<?echo URLHelper::getLink('?working_on_request=' . $request_id);?>"> <?php echo CSRFProtection::tokenTag(); ?> <input type="hidden" name="view" value="edit_request"> <table border=0 celpadding=2 cellspacing=0 width="99%" align="center"> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" colspan="2" width="96%" valign="top"> <a href="<?php echo URLHelper::getLink($sem_link); ?> "> <b><?php echo $semObj->seminar_number ? htmlReady($semObj->seminar_number) . ':' : ''; echo htmlReady($semObj->getName()); ?> </b> </a> <font size="-1"> <br> <? $names = $this->selectSemInstituteNames($semObj->getInstitutId()); print " "._("Art der Anfrage").": ".$reqObj->getTypeExplained()."<br>"; print " "._("Erstellt von").": <a href=\"".URLHelper::getLink('dispatch.php/profile?username='******'%x %H:%M', $reqObj->mkdate) . '<br>'; print " "._("Letzte Änderung") . ": ". strftime('%x %H:%M', $reqObj->chdate) . '<br>'; print " "._("Letzte Änderung von") . ": <a href=\"".URLHelper::getLink('dispatch.php/profile?username='******': '; foreach ($semObj->getMembers('dozent') as $doz) { if ($dozent){ echo ", "; } echo '<a href ="'. URLHelper::getLink('dispatch.php/profile?username='******'username']). '">'.HtmlReady($doz['fullname'])."</a>"; $dozent = true; } print "<br>"; print " "._("verantwortliche Einrichtung").": ".htmlReady($names['inst_name'])."<br>"; print " "._("verantwortliche Fakultät").": ".htmlReady($names['fak_name'])."<br>"; print " "._("aktuelle Teilnehmerzahl").": ".$semObj->getNumberOfParticipants('total').'<br>'; ?> </font> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="35%" valign="top"> <font size="-1"><b><?php echo _("angeforderte Belegungszeiten"); ?> :</b><br><br> <? $dates = $semObj->getGroupedDates($reqObj->getTerminId(),$reqObj->getMetadateId()); if ($dates['first_event']) { $i = 1; if(is_array($dates['info']) && sizeof($dates['info']) > 0 ){ foreach ($dates['info'] as $info) { $name = $info['name']; if ($info['weekend']) $name = '<span style="color:red">'. $info['name'] . '</span>'; printf ("<font color=\"blue\"><i><b>%s</b></i></font>. %s<br>", $i, $name); $i++; } } if ($reqObj->getType() != 'date') { echo _("regelmäßige Buchung ab").": ".strftime("%x", $dates['first_event']); } } else { print _("nicht angegeben"); } ?> </font> </td> <td style="border-left:1px dotted black; background-color: #f3f5f8" width="51%" rowspan="4" valign="top"> <table cellpadding="2" cellspacing="0" border="0" width="90%"> <tr> <td width="70%"> <font size="-1"><b><?php echo _("angeforderter Raum"); ?> :</b></font> </td> <? unset($resObj); $cols=0; if (is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"])) foreach ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"] as $key => $val) { $cols++; print "<td width=\"1%\" align=\"left\"><font size=\"-1\" color=\"blue\"><i><b>".$cols.".</b></i></font></td>"; } ?> <td width="29%" align="right"> <!--<font style="font-size:10px;color:blue;"><?//=_("Kapazität")?></font>--> </td> </tr> <tr> <td width="70%"> <? if ($request_resource_id = $reqObj->getResourceId()) { $resObj = ResourceObject::Factory($request_resource_id); print $resObj->getFormattedLink($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["first_event"]); print tooltipicon(_('Der ausgewählte Raum bietet folgende der wünschbaren Eigenschaften:') . "\n" . $resObj->getPlainProperties(TRUE), $resObj->getOwnerId() == 'global'); if ($resObj->getOwnerId() == 'global') { print ' [global]'; } } else print _("Es wurde kein Raum angefordert."); ?> </td> <? $i=0; if(is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"]) && sizeof($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"]) > 0 ) foreach ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"] as $key => $val) { print "<td width=\"1%\" nowrap><font size=\"-1\">"; if ($request_resource_id) { if ($request_resource_id == $val["resource_id"]) { print Icon::create('accept', 'accept', ['title' => _("Dieser Raum ist augenblicklich gebucht"), TRUE])->asImg(); echo '<input type="radio" name="selected_resource_id['. $i .']" value="'. $request_resource_id .'" checked="checked">'; } else { $overlap_status = $this->showGroupOverlapStatus($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["detected_overlaps"][$request_resource_id], $val["events_count"], $val["overlap_events_count"][$request_resource_id], $val["termin_ids"]); print $overlap_status["html"]; printf ("<input type=\"radio\" name=\"selected_resource_id[%s]\" value=\"%s\" %s %s>", $i, $request_resource_id, ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["selected_resources"][$i] == $request_resource_id) ? "checked" : "", ($overlap_status["status"] == 2 || !ResourcesUserRoomsList::CheckUserResource($request_resource_id)) ? "disabled" : ""); } } else print " "; print "</font></td>"; $i++; } ?> <td width="29%" align="right"> <? if (is_object($resObj)) { $seats = $resObj->getSeats(); $requested_seats = $reqObj->getSeats(); if ((is_numeric($seats)) && (is_numeric($requested_seats))) { $percent_diff = (100 / $requested_seats) * $seats; if ($percent_diff > 0) $percent_diff = "+".$percent_diff; if ($percent_diff < 0) $percent_diff = "-".$percent_diff; print "<font style=\"font-size:10px;\">".round($percent_diff)."%</font>"; } } ?> </td> </tr> <? if (get_config('RESOURCES_ENABLE_GROUPING')) { $room_group = RoomGroups::GetInstance(); $group_id = $_SESSION['resources_data']['actual_room_group']; ?> <tr> <td style="border-top:1px solid;" width="100%" colspan="<?php echo $cols + 2; ?> "> <font size="-1"><b><?php echo _("Raumgruppe berücksichtigen"); ?> :</b></font> </td> </tr> <tr> <td colspan="<?php echo $cols; ?> "><font size="-1"> <select name="request_tool_choose_group"> <option <?php echo is_null($group_id) ? 'selected' : ''; ?> value="-"><?php echo _("Keine Raumgruppe anzeigen"); ?> </option> <? foreach($room_group->getAvailableGroups() as $gid){ echo '<option value="'.$gid.'" ' . (!is_null($group_id) && $group_id == $gid ? 'selected' : '') . '>' .htmlReady(my_substr($room_group->getGroupName($gid),0,45)) .' ('.$room_group->getGroupCount($gid).')</option>'; } ?> </select> </font> </td> <td colspan="2"><font size="-1"> <?php echo Button::create(_('Auswählen'), 'request_tool_group'); ?> <br> </font> </td> </tr> <? if ($room_group->getGroupCount($group_id)){ foreach ($room_group->getGroupContent($group_id) as $key) { ?> <tr> <td width="70%"> <? $resObj = ResourceObject::Factory($key); print $resObj->getFormattedLink($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["first_event"]); print tooltipicon(_('Der ausgewählte Raum bietet folgende der wünschbaren Eigenschaften:') . "\n" . $resObj->getPlainProperties(TRUE), $resObj->getOwnerId() == 'global'); if ($resObj->getOwnerId() == 'global') { print ' [global]'; } ?> </td> <? $i=0; if (is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"])) { foreach ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"] as $key2 => $val2) { print "<td width=\"1%\" nowrap><font size=\"-1\">"; if ($key == $val2["resource_id"]) { print Icon::create('accept', 'accept', ['title' => _("Dieser Raum ist augenblicklich gebucht"), TRUE])->asImg(); echo '<input type="radio" name="selected_resource_id['. $i .']" value="'. $key .'" checked="checked">'; } else { $overlap_status = $this->showGroupOverlapStatus($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["detected_overlaps"][$key], $val2["events_count"], $val2["overlap_events_count"][$resObj->getId()], $val2["termin_ids"]); print $overlap_status["html"]; printf ("<input type=\"radio\" name=\"selected_resource_id[%s]\" value=\"%s\" %s %s>", $i, $key, ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["selected_resources"][$i] == $key) ? "checked" : "", ($overlap_status["status"] == 2 || !ResourcesUserRoomsList::CheckUserResource($key)) ? "disabled" : ""); } print "</font></td>"; $i++; } } ?> <td width="29%" align="right"> <? if (is_object($resObj)) { $seats = $resObj->getSeats(); $requested_seats = $reqObj->getSeats(); if ((is_numeric($seats)) && (is_numeric($requested_seats))) { $percent_diff = (100 / $requested_seats) * $seats; if ($percent_diff > 0) $percent_diff = "+".$percent_diff; if ($percent_diff < 0) $percent_diff = "-".$percent_diff; print "<font style=\"font-size:10px;\">".round($percent_diff)."%</font>"; } } ?> </td> </tr> <? } } } ?> <tr> <td style="border-top:1px solid;" width="100%" colspan="<?php echo $cols + 2; ?> "> <font size="-1"><b><?php echo _("weitere passende Räume"); ?> :</b> </font> </td> </tr> <? if (is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["considered_resources"])) foreach ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["considered_resources"] as $key=>$val) { if ($val["type"] == "matching") $matching_rooms[$key] = TRUE; if ($val["type"] == "clipped") $clipped_rooms[$key] = TRUE; if ($val["type"] == "grouped") $grouped_rooms[$key] = TRUE; } if (sizeof($matching_rooms)) { // filter list to [search_limit_low]...[search_limit_high] $search_limit_low = $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_low"]; $search_limit_high = $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_high"]; $matching_rooms = array_slice($matching_rooms, $search_limit_low, $search_limit_high - $search_limit_low); foreach ($matching_rooms as $key=>$val) { ?> <tr> <td width="70%"> <? $resObj = ResourceObject::Factory($key); print $resObj->getFormattedLink($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["first_event"]); print tooltipicon(_('Der ausgewählte Raum bietet folgende der wünschbaren Eigenschaften:') . "\n" . $resObj->getPlainProperties(TRUE), $resObj->getOwnerId() == 'global'); if ($resObj->getOwnerId() == 'global') { print ' [global]'; } ?> </td> <? $i=0; if (is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"])) { foreach ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"] as $key2 => $val2) { print "<td width=\"1%\" nowrap><font size=\"-1\">"; if ($key == $val2["resource_id"]) { print Icon::create('accept', 'accept', ['title' => _("Dieser Raum ist augenblicklich gebucht"), TRUE])->asImg(); echo '<input type="radio" name="selected_resource_id['. $i .']" value="'. $key .'" checked="checked">'; } else { $overlap_status = $this->showGroupOverlapStatus($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["detected_overlaps"][$key], $val2["events_count"], $val2["overlap_events_count"][$resObj->getId()], $val2["termin_ids"]); print $overlap_status["html"]; printf ("<input type=\"radio\" name=\"selected_resource_id[%s]\" value=\"%s\" %s %s>", $i, $key, ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["selected_resources"][$i] == $key) ? "checked" : "", ($overlap_status["status"] == 2 || !ResourcesUserRoomsList::CheckUserResource($key)) ? "disabled" : ""); } print "</font></td>"; $i++; } } ?> <td width="29%" align="right"> <? if (is_object($resObj)) { $seats = $resObj->getSeats(); $requested_seats = $reqObj->getSeats(); if ((is_numeric($seats)) && (is_numeric($requested_seats))) { $percent_diff = (100 / $requested_seats) * $seats; if ($percent_diff > 0) $percent_diff = "+".$percent_diff; if ($percent_diff < 0) $percent_diff = "-".$percent_diff; print "<font style=\"font-size:10px;\">".round($percent_diff)."%</font>"; } } ?> </td> </tr> <? } ?> <tr> <td colspan="<?php echo $cols + 2; ?> " align="center"> <font size="-1"> <?php echo _("zeige Räume"); ?> <a href="<?php echo URLHelper::getLink('?dec_limit_low=1'); ?> ">-</a> <input type="text" name="search_rooms_limit_low" size="1" value="<?php echo $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_low"] + 1; ?> "> <a href="<?php echo URLHelper::getLink('?inc_limit_low=1'); ?> ">+</a> bis <a href="<?php echo URLHelper::getLink('?dec_limit_high=1'); ?> ">-</a> <input type="text" name="search_rooms_limit_high" size="1" value="<?php echo $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_high"]; ?> "> <a href="<?php echo URLHelper::getLink('?inc_limit_high=1'); ?> ">+</a> <?php echo Icon::create('arr_2up', 'sort', ['title' => 'ausgewählten Bereich anzeigen'])->asInput(array('name' => 'matching_rooms_limit_submit')); ?> </font> </td> </tr> <? } else print "<tr><td width=\"100%\" colspan=\"".($cols+1)."\"><font size=\"-1\">"._("keine gefunden")."</font></td></tr>"; //Clipped Rooms if (sizeof($clipped_rooms)) { ?> <tr> <td style="border-top:1px solid;" width="100%" colspan="<?php echo $cols + 2; ?> "> <font size="-1"><b><?php echo _("Räume aus der Merkliste"); ?> :</b></font> </td> </tr> <? foreach ($clipped_rooms as $key=>$val) { ?> <tr> <td width="70%"> <? $resObj = ResourceObject::Factory($key); print $resObj->getFormattedLink($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["first_event"]); print tooltipicon(_('Der ausgewählte Raum bietet folgende der wünschbaren Eigenschaften:') . "\n" . $resObj->getPlainProperties(TRUE), $resObj->getOwnerId() == 'global'); if ($resObj->getOwnerId() == 'global') { print ' [global]'; } ?> </td> <? $i=0; if (is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"])) { foreach ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"] as $key2 => $val2) { print "<td width=\"1%\" nowrap><font size=\"-1\">"; if ($key == $val2["resource_id"]) { print Icon::create('accept', 'clickable', ['title' => _('Dieser Raum ist augenblicklich gebucht'), TRUE])->asImg(); } else { $overlap_status = $this->showGroupOverlapStatus($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["detected_overlaps"][$key], $val2["events_count"], $val2["overlap_events_count"][$resObj->getId()], $val2["termin_ids"]); print $overlap_status["html"]; printf ("<input type=\"radio\" name=\"selected_resource_id[%s]\" value=\"%s\" %s %s>", $i, $key, ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["selected_resources"][$i] == $key) ? "checked" : "", ($overlap_status["status"] == 2 || !ResourcesUserRoomsList::CheckUserResource($key)) ? "disabled" : ""); } print "</font></td>"; $i++; } } ?> <td width="29%" align="right"> <? if (is_object($resObj)) { $seats = $resObj->getSeats(); $requested_seats = $reqObj->getSeats(); if ((is_numeric($seats)) && (is_numeric($requested_seats))) { $percent_diff = (100 / $requested_seats) * $seats; if ($percent_diff > 0) $percent_diff = "+".$percent_diff; if ($percent_diff < 0) $percent_diff = "-".$percent_diff; print "<font style=\"font-size:10px;\">".round($percent_diff)."%</font>"; } } ?> </td> </font></td> </tr> <? } } ?> </table> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="35%" valign="top"> <font size="-1"><b><?php echo _("gewünschte Raumeigenschaften"); ?> :</b><br><br> <? $properties = $reqObj->getProperties(); if (sizeof($properties)) { ?> <table width="99%" cellspacing="0" cellpadding="2" border="0"> <? foreach ($properties as $key=>$val) { ?> <tr> <td width="70%"> <li><font size="-1"><?php echo htmlReady($val["name"]); ?> </font></li> </td> <td width="30%"><font size="-1"> <? switch ($val["type"]) { case "bool": /*printf ("%s", ($val["state"]) ? htmlReady($val["options"]) : " - ");*/ break; case "num": case "text": print htmlReady($val["state"]); break; case "select": $options=explode (";",$val["options"]); foreach ($options as $a) { if ($val["state"] == $a) print htmlReady($a); } break; } ?></font> </td> </tr> <? } ?> </table> <? } else print _("Es wurden keine Raumeigenschaften gewünscht."); ?> </font> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="35%" valign="top"> <font size="-1"><b><?php echo _("Kommentar des Anfragenden"); ?> :</b><br><br> <? if ($comment = $reqObj->getComment()) print $comment; else print _("Es wurde kein Kommentar eingegeben"); ?> </font> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="35%" valign="top"> <? $user_status_mkdate = $reqObj->getUserStatus($GLOBALS['user']->id); ?> <b><?php echo "Benachrichtigungen"; ?> :</b><br> <input type="radio" onChange="jQuery(this).closest('form').submit()" name="reply_recipients" id="reply_recipients_requester" value="requester" checked> <label for="reply_recipients_requester"> <?php echo _("Ersteller"); ?> </label> <input type="radio" onChange="jQuery(this).closest('form').submit()" name="reply_recipients" id="reply_recipients_lecturer" value="lecturer" <?php echo $reqObj->reply_recipients == 'lecturer' ? 'checked' : ''; ?> > <label for="reply_recipients_lecturer"> <?php echo _("Ersteller und alle Lehrenden"); ?> </label> <br> <b><?php echo "Anfrage markieren"; ?> :</b><br> <input type="radio" onChange="jQuery(this).closest('form').submit()" name="request_user_status" id="request_user_status_0" value="0" checked> <label for="request_user_status_0"> <?php echo _("unbearbeitet"); ?> </label> <input type="radio" onChange="jQuery(this).closest('form').submit()" name="request_user_status" id="request_user_status_1" value="1" <?php echo $user_status_mkdate ? 'checked' : ''; ?> > <label for="request_user_status_1"> <?php echo _("bearbeitet"); ?> </label> <br><br> <b><?php echo _("Kommentar zur Belegung (intern)"); ?> :</b><br><br> <textarea name="comment_internal" style="width: 90%" rows="2"></textarea> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" colspan="2" width="96%" valign="top" align="center"> <div class="button-group"> <? // can we dec? if ($_SESSION['resources_data']["requests_working_pos"] > 0) { $d = -1; if ($_SESSION['resources_data']["skip_closed_requests"]) while ((!$_SESSION['resources_data']["requests_open"][$_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"] + $d]["request_id"]]) && ($_SESSION['resources_data']["requests_working_pos"] + $d > 0)) $d--; if ((sizeof($_SESSION['resources_data']["requests_open"]) > 1) && (($_SESSION['resources_data']["requests_open"][$_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"] + $d]["request_id"]]) || (!$_SESSION['resources_data']["skip_closed_requests"]))) $inc_possible = TRUE; } if ($inc_possible) { echo Button::create('<< ' . _('Zurück'), 'dec_request'); } echo Button::createCancel(_('Abbrechen'), 'cancel_edit_request'); echo Button::create(_('Löschen'), 'delete_request'); if ((($reqObj->getResourceId()) || (sizeof($matching_rooms)) || (sizeof($clipped_rooms)) || (sizeof($grouped_rooms))) && ((is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["groups"])) || ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["assign_objects"]))) { echo Button::createAccept(_('Speichern'), 'save_state'); echo Button::createCancel(_('Ablehnen'), 'suppose_decline_request'); } // can we inc? if ($_SESSION['resources_data']["requests_working_pos"] < sizeof($_SESSION['resources_data']["requests_working_on"])-1) { $i = 1; if ($_SESSION['resources_data']["skip_closed_requests"]) while ((!$_SESSION['resources_data']["requests_open"][$_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"] + $i]["request_id"]]) && ($_SESSION['resources_data']["requests_working_pos"] + $i < sizeof($_SESSION['resources_data']["requests_working_on"])-1)) $i++; if ((sizeof($_SESSION['resources_data']["requests_open"]) > 1) && (($_SESSION['resources_data']["requests_open"][$_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"] + $i]["request_id"]]) || (!$_SESSION['resources_data']["skip_closed_requests"]))) $dec_possible = TRUE; } if ($dec_possible) { echo Button::create(_('Weiter') . ' >>', 'inc_request'); } ?> </div> <? if (sizeof($_SESSION['resources_data']["requests_open"]) > 1) printf ("<br><font size=\"-1\">" . _("<b>%s</b> von <b>%s</b> Anfragen in der Bearbeitung wurden noch nicht aufgelöst.") . "</font>", sizeof($_SESSION['resources_data']["requests_open"]), sizeof($_SESSION['resources_data']["requests_working_on"])); printf ("<br><font size=\"-1\">" . _("Aktueller Request: ")."<b>%s</b></font>", $_SESSION['resources_data']["requests_working_pos"]+1); ?> </td> </tr> </table> </form> <br><br> <? }
public function getTypeExplained() { $ret = ''; if ($this->termin_id) { $ret = _("Einzeltermin der Veranstaltung"); if (get_object_type($this->termin_id, array('date'))) { $termin = new SingleDate($this->termin_id); $ret .= chr(10) . '(' . $termin->toString() . ')'; } } elseif ($this->metadate_id) { $ret = _("alle Termine einer regelmäßigen Zeit"); if ($cycle = SeminarCycleDate::find($this->metadate_id)) { $ret .= chr(10) . ' (' . $cycle->toString('full') . ')'; } } elseif ($this->seminar_id) { $ret = _("alle regelmäßigen und unregelmäßigen Termine der Veranstaltung"); if (get_object_type($this->seminar_id, array('sem'))) { $course = new Seminar($this->seminar_id); $ret .= chr(10) . ' (' . $course->getDatesExport(array('short' => true, 'shrink' => true)) . ')'; } } else { $ret = _("Kein Typ zugewiesen"); } return $ret; }
function handleOrder() { $values = $_SESSION["ticketDataAddress"]; $F = new Factory("Adresse"); $values["land"] = ISO3166::getCountryToCode($values["land"]); $F->fill($values); $exists = $F->exists(true); if (!$exists) { $AdresseID = $F->store(false, false); $K = new Kunden(); $Kappendix = $K->createKundeToAdresse($AdresseID, false, true); } else { $AdresseID = $exists->getID(); $Kappendix = Kappendix::getKappendixToAdresse($AdresseID); } if ($_SESSION["ticketDataPayment"]["via"] == "debit") { $Kappendix->changeA("KappendixKontonummer", $_SESSION["ticketDataPayment"]["debitKontonummer"]); $Kappendix->changeA("KappendixBLZ", $_SESSION["ticketDataPayment"]["debitBlz"]); $Kappendix->changeA("KappendixKontoinhaber", $_SESSION["ticketDataPayment"]["debitInhaber"]); $Kappendix->changeA("KappendixEinzugsermaechtigung", "1"); $Kappendix->changeA("KappendixEinzugsermaechtigungAltZBTB", "5"); $Kappendix->changeA("KappendixSameKontoinhaber", "0"); } if (!$exists) { $Kappendix->newMe(false); } else { $Kappendix->saveMe(); } $zahlungsart = 6; if ($_SESSION["ticketDataPayment"]["via"] == "debit") { $zahlungsart = 1; } if ($_SESSION["ticketDataPayment"]["via"] == "transfer") { $zahlungsart = 5; } if ($_SESSION["ticketDataPayment"]["via"] == "paypal") { $zahlungsart = 7; } $orderIDs = array(); foreach ($_SESSION["ticketDataSelection"] as $SeminarID => $anzahl) { if ($anzahl == 0) { continue; } $F = new Factory("STeilnehmer"); $F->sA("STeilnehmerSeminarID", $SeminarID); $F->sA("STeilnehmerAdresseID", $AdresseID); $F->sA("STeilnehmerAngemeldetAm", time()); $F->sA("STeilnehmerErwachsene", $anzahl); $F->sA("STeilnehmerZahlungsart", $zahlungsart); $STeilnehmerID = $F->store(); $Tickets = array(); foreach ($_SESSION["ticketDataTickets"] as $k => $v) { $ex = explode("_", $k); if (count($ex) != 3) { continue; } if ($ex[1] != $SeminarID) { continue; } if (!isset($Tickets[$ex[2]])) { $Tickets[$ex[2]] = array(); } $Tickets[$ex[2]][$ex[0]] = $v; } foreach ($Tickets as $ticket) { $F = new Factory("STeilnehmerTicket"); $F->sA("STeilnehmerTicketSeminarID", $SeminarID); $F->sA("STeilnehmerTicketSTeilnehmerID", $STeilnehmerID); $F->sA("STeilnehmerTicketVorname", $ticket["Vorname"]); $F->sA("STeilnehmerTicketNachname", $ticket["Nachname"]); $F->sA("STeilnehmerTicketPosition", $ticket["Position"]); $F->sA("STeilnehmerTicketUnternehmen", $ticket["Unternehmen"]); $F->sA("STeilnehmerTicketEMail", $ticket["Email"]); if ($this->fromPOS) { $F->sA("STeilnehmerTicketFirstSeen", time()); } $F->store(); } $S = new Seminar($SeminarID); $S->createRechnungen($STeilnehmerID); foreach ($S->createdGRLBMs as $GRLBM) { $Auftrag = new Auftrag($GRLBM->A("AuftragID")); $Auftrag->sendViaEmail($GRLBM->getID(), "", "", "", false); $B = new Bestellung(-1); $orderIDs[] = $B->createFromInvoice($GRLBM->A("AuftragID"), $GRLBM, "MMDB/Seminare/STeilnehmer", $STeilnehmerID); } } $_SESSION["ticketStep"] = 6; $_SESSION["ticketDataOrderIDs"] = $orderIDs; }
function getContent () { global $SEM_TYPE, $SEM_CLASS, $sem_type_tmp; if (is_array($this->sem_browse_data['search_result']) && count($this->sem_browse_data['search_result'])) { // show only selected subject areas $selected_ranges = (array) $this->module->config->getValue('SelectSubjectAreas', 'subjectareasselected'); $selected_ranges[] = $this->sem_browse_data['start_item_id']; if (!$this->module->config->getValue('SelectSubjectAreas', 'selectallsubjectareas') && count($selected_ranges)) { if ($this->module->config->getValue('SelectSubjectAreas', 'reverseselection')) { $sem_range_query = "AND seminar_sem_tree.sem_tree_id NOT IN ('".implode("','", $selected_ranges)."')"; } else { $sem_range_query = "AND seminar_sem_tree.sem_tree_id IN ('".implode("','", $selected_ranges)."')"; } } else { $sem_range_query = ''; } // show only selected SemTypes $selected_semtypes = $this->module->config->getValue('ReplaceTextSemType', 'visibility'); $sem_types_array = array(); if (count($selected_semtypes)) { for ($i = 0; $i < count($selected_semtypes); $i++) { if ($selected_semtypes[$i] == '1') { $sem_types_array[] = $i + 1; } } $sem_types_query = "AND seminare.status IN ('" . implode("','", $sem_types_array) . "')"; } else { $sem_types_query = ''; } // number of visible columns $group_colspan = array_count_values((array) $this->module->config->getValue("Main", "visible")); if ($this->sem_browse_data['group_by'] == 1){ if (!is_object($this->sem_tree)){ $the_tree = TreeAbstract::GetInstance("StudipSemTree"); } else { $the_tree =& $this->sem_tree->tree; } $the_tree->buildIndex(); } if (!$this->module->config->getValue("Main", "allseminars")){ $sem_inst_query = " AND seminare.Institut_id='{$this->module->config->range_id}' "; } if (!$nameformat = $this->module->config->getValue("Main", "nameformat")) $nameformat = "no_title_short"; $dbv = DbView::getView('sem_tree'); $query = "SELECT seminare.* , Institute.Name AS Institut,Institute.Institut_id, seminar_sem_tree.sem_tree_id AS bereich, " . $GLOBALS['_fullname_sql'][$nameformat] ." AS fullname, auth_user_md5.username, Vorname, Nachname, title_front, title_rear, " . $dbv->sem_number_sql . " AS sem_number, " . $dbv->sem_number_end_sql . " AS sem_number_end, seminar_user.position AS position FROM seminare LEFT JOIN seminar_user ON (seminare.Seminar_id=seminar_user.Seminar_id AND seminar_user.status='dozent') LEFT JOIN auth_user_md5 USING (user_id) LEFT JOIN user_info USING (user_id) LEFT JOIN seminar_sem_tree ON (seminare.Seminar_id = seminar_sem_tree.seminar_id) LEFT JOIN seminar_inst ON (seminare.Seminar_id = seminar_inst.Seminar_id) LEFT JOIN Institute ON (seminar_inst.institut_id = Institute.Institut_id) WHERE seminare.Seminar_id IN('" . join("','", array_keys($this->sem_browse_data['search_result'])) . "') $sem_inst_query $sem_range_query $sem_types_query"; $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 - 1] && count($detail['sem_number']) == 1)){ continue; } else { foreach ($detail['Seminar_id'] as $seminar_id => $foo){ $start_sem = key($sem_data[$seminar_id]["sem_number"]); if ($sem_number_end == -1){ if (is_array($this->sem_number)){ $sem_number_end = $this->sem_number[0]; } else { $sem_number_end = count($this->sem_dates)-1; } } 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; } } } 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); $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); return (int)($the_tree->tree_data[$a]["index"] - $the_tree->tree_data[$b]["index"]); ')); break; case 3: if ($order = $this->module->config->getValue("ReplaceTextSemType", "order")) { foreach ((array) $order as $position) { if (isset($group_by_data[$position])) $group_by_data_tmp[$position] = $group_by_data[$position]; } $group_by_data = $group_by_data_tmp; unset($group_by_data_tmp); } else { 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; } // generic datafields $generic_datafields = $this->module->config->getValue("Main", "genericdatafields"); $content['__GLOBAL__']['LECTURES-COUNT'] = count($sem_data); $group_by_name = $this->module->config->getValue("Main", "aliasesgrouping"); $content['__GLOBAL__']['LECTURES-SUBSTITUTE-GROUPED-BY'] = $group_by_name[$this->sem_browse_data['group_by']]; $i = 0; foreach ((array) $group_by_data as $group_field => $sem_ids) { $content['LECTURES']['GROUP'][$i]['GROUP'] = $this->getGroupContent($the_tree, $group_field); $content['LECTURES']['GROUP'][$i]['GROUP-NO'] = $i + 1; if (is_array($sem_ids['Seminar_id'])) { $zebra = 0; $j = 0; while (list($seminar_id,) = each($sem_ids['Seminar_id'])) { // $sem_name = key($sem_data[$seminar_id]["Name"]); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['TITLE'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Name'])); $sem_number_start = key($sem_data[$seminar_id]['sem_number']); $sem_number_end = key($sem_data[$seminar_id]['sem_number_end']); $sem_semester = $this->sem_dates[$sem_number_start]['name']; if ($sem_number_start != $sem_number_end){ $sem_semester .= ' - ' . ($sem_number_end == -1 ? _("unbegrenzt") : $this->sem_dates[$sem_number_end]['name']); } $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SEMESTER'] = $sem_semester; // create turnus field $sem_turnus = Seminar::getInstance($seminar_id)->getDatesExport(array('show_room' => true)); // shorten, if string too long if (strlen($sem_turnus) > 70) { $sem_turnus = substr($sem_turnus, 0, strpos(substr($sem_turnus, 70, strlen($sem_turnus)), ",") +71); $sem_turnus .= "..."; } $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['CYCLE'] = ExternModule::ExtHtmlReady($sem_turnus); $doz_name = array_keys($sem_data[$seminar_id]['fullname']); $doz_lastname = array_keys($sem_data[$seminar_id]['Nachname']); $doz_firstname = array_keys($sem_data[$seminar_id]['Vorname']); $doz_titlefront = array_keys($sem_data[$seminar_id]['title_front']); $doz_titlerear = array_keys($sem_data[$seminar_id]['title_rear']); $doz_uname = array_keys($sem_data[$seminar_id]['username']); $doz_position = array_keys($sem_data[$seminar_id]['position']); if (sizeof($doz_position) < $doz_name) $doz_position = array_fill(0, sizeof($doz_name), 0); if (is_array($doz_name)){ array_multisort($doz_position, $doz_name, $doz_uname); $k = 0; foreach ($doz_name as $index => $value) { $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['PERSONDETAIL-HREF'] = $this->module->elements['LinkInternPersondetails']->createUrl(array('link_args' => 'username='******'LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['FULLNAME'] = ExternModule::ExtHtmlReady($doz_name[$index]); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['LASTNAME'] = ExternModule::ExtHtmlReady($doz_lastname[$index]); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['FIRSTNAME'] = ExternModule::ExtHtmlReady($doz_firstname[$index]); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['TITLEFRONT'] = ExternModule::ExtHtmlReady($doz_titlefront[$index]); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['TITLEREAR'] = ExternModule::ExtHtmlReady($doz_titlerear[$index]); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['UNAME'] = $doz_uname[$index]; $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['LECTURER-NO'] = $k + 1; $k++; } } $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTUREDETAILS-HREF'] = $this->module->elements['LinkInternLecturedetails']->createUrl(array('link_args' => 'seminar_id=' . $seminar_id)); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['NUMBER'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['VeranstaltungsNummer'])); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SUBTITLE'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Untertitel'])); $aliases_sem_type = $this->module->config->getValue('ReplaceTextSemType', 'class_' . $SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SEMTYPE-SUBSTITUTE'] = $aliases_sem_type[$this->sem_types_position[key($sem_data[$seminar_id]['status'])] - 1]; $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SEMTYPE'] = ExternModule::ExtHtmlReady($SEM_TYPE[key($sem_data[$seminar_id]['status'])]['name'] .' ('. $SEM_CLASS[$SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']]['name'] . ')'); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['ROOM'] = ExternModule::ExtHtmlReady(Seminar::getInstance($seminar_id)->getDatesTemplate('dates/seminar_export_location')); $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['FORM'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['art'])); // generic data fields if (is_array($generic_datafields)) { $localEntries = DataFieldEntry::getDataFieldEntries($seminar_id, 'sem'); #$datafields = $datafields_obj->getLocalFields($seminar_id); $l = 1; foreach ($generic_datafields as $datafield) { if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield])) { $localEntry = $localEntries[$datafield]->getDisplayValue(); if ($localEntry) { $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['DATAFIELD_' . $l] = $localEntry; } } $l++; } } $j++; } } $i++; } } else { $content['__GLOBAL__']['LECTURES-COUNT'] = 0; $group_by_name = $this->module->config->getValue('Main', 'aliasesgrouping'); $content['__GLOBAL__']['LECTURES-SUBSTITUTE-GROUPED-BY'] = $group_by_name[$this->sem_browse_data['group_by']]; $content['LECTURES']['NO-LECTURES']['NO-LECTURES-TEXT'] = ExternModule::ExtHtmlReady($this->module->config->getValue('Main', 'nodatatext')); } return $content; }
/** * deletes a studygroup * * @param string id of a studypgroup * @param boolean approveDelete * @param string studipticket * * @return void * */ function delete_action($id, $approveDelete = false, $studipticket = false) { global $perm; if ($perm->have_studip_perm('dozent', $id)) { if ($approveDelete && check_ticket($studipticket)) { $messages = array(); $sem = new Seminar($id); $sem->delete(); if ($messages = $sem->getStackedMessages()) { $this->flash['messages'] = $messages; } unset($sem); // Weiterleitung auf die "meine Seminare", wenn es kein Admin // ist, ansonsten auf die Studiengruppenseite if (!$perm->have_perm('root')) { $this->redirect(URLHelper::getURL('dispatch.php/my_courses')); } else { $this->redirect(URLHelper::getURL('dispatch.php/studygroup/browse')); } return; } else { if (!$approveDelete) { $template = $GLOBALS['template_factory']->open('shared/question'); $template->set_attribute('approvalLink', $this->url_for('course/studygroup/delete/' . $id . '/true/' . get_ticket())); $template->set_attribute('disapprovalLink', $this->url_for('course/studygroup/edit/' . $id)); $template->set_attribute('question', _("Sind Sie sicher, dass Sie diese Studiengruppe löschen möchten?")); $this->flash['question'] = $template->render(); $this->redirect('course/studygroup/edit/' . $id); return; } } } throw new Trails_Exception(401); }
/** * Returns the currently active course or false if none is active. * * @return mixed Course object of currently active course, false otherwise * @since 3.0 */ public static function findCurrent() { if (empty($GLOBALS['SessionSeminar'])) { return null; } if (isset(self::$current_course) && $GLOBALS['SessionSeminar'] === self::$current_course->id) { return self::$current_course; } $found = Course::find($GLOBALS['SessionSeminar']); if ($found) { self::$current_course = $found; Seminar::setInstance(new Seminar(self::$current_course)); return self::$current_course; } }
function showScheduleGraphical($print_view = false) { global $RELATIVE_PATH_RESOURCES, $cssSw, $view_mode, $ActualObjectPerms; $categories["na"] = 4; $categories["sd"] = 4; $categories["y"] = 3; $categories["m"] = 3; $categories["w"] = 0; $categories["d"] = 2; //an assign for a date corresponding to a (seminar-)metadate $categories["meta"] = 1; //match start_time & end_time for a whole week $dow = date ("w", $this->start_time); if (date ("w", $this->start_time) >1) $offset = 1 - date ("w", $this->start_time); if (date ("w", $this->start_time) <1) $offset = -6; //select view to jump from the schedule if ($this->used_view == "openobject_schedule") $view = "openobject_assign"; else $view = "edit_object_assign"; $start_time = mktime (0, 0, 0, date("n",$this->start_time), date("j", $this->start_time)+$offset+($this->week_offset*7), date("Y", $this->start_time)); $end_time = mktime (23, 59, 59, date("n",$start_time), date("j", $start_time)+6, date("Y", $start_time)); if ($_SESSION['resources_data']["schedule_time_range"] == -1) { $start_hour = 0; $end_hour = 12; } elseif ($_SESSION['resources_data']["schedule_time_range"] == 1) { $start_hour = 12; $end_hour = 23; } else { $start_hour = 8; $end_hour = 22; } $schedule = new ScheduleWeek($start_hour, $end_hour, FALSE, $start_time, true); if ($ActualObjectPerms->havePerm("autor")) $schedule->add_link = "resources.php?cancel_edit_assign=1&quick_view=$view&quick_view_mode=".$view_mode."&add_ts="; //fill the schedule $assign_events=new AssignEventList ($start_time, $end_time, $this->resource_id, '', '', TRUE, $_SESSION['resources_data']["show_repeat_mode"]); while ($event=$assign_events->nextEvent()) { $repeat_mode = $event->getRepeatMode(TRUE); $add_info = ''; if ($event->getOwnerType() == 'date') { $sem_obj = Seminar::GetInstance(Seminar::GetSemIdByDateId($event->getAssignUserId())); $date = new SingleDate($event->getAssignUserId()); $dozenten = array_intersect_key($sem_obj->getMembers('dozent'), array_flip($date->getRelatedPersons())); $sem_doz_names = array_map(create_function('$a', 'return $a["Nachname"];'), array_slice($dozenten,0,3, true)); $add_info = '(' . join(', ', $sem_doz_names) . ')'; } $schedule->addEvent($event->getName(get_config('RESOURCES_SCHEDULE_EXPLAIN_USER_NAME')), $event->getBegin(), $event->getEnd(), URLHelper::getLink('?cancel_edit_assign=1&quick_view=' . $view . '&quick_view_mode='.$view_mode.'&edit_assign_object='.$event->getAssignId()), $add_info, $categories[$repeat_mode]); } ?> <table border=0 celpadding=2 cellspacing=0 width="99%" align="center"> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?> hidden" width="10%" align="left"> <a href="<? echo URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&previous_week=TRUE') ?> "><?= Icon::create('arr_2left', 'clickable', ['title' => _("Vorherige Woche anzeigen")])->asImg(16, ["alt" => _("Vorherige Woche anzeigen"), "border" => 0]) ?></a> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" align="center" style="font-weight:bold"> <? printf(_("Anzeige der Woche vom %s bis %s (KW %s)"), strftime("%x", $start_time), strftime("%x", $end_time),strftime("%V", $start_time));?> <br> <?php $this->showSemWeekNumber($start_time); ?> <br> <?php $room = ResourceObject::Factory($this->resource_id); echo "Raum: ".htmlReady($room->getName()); ?> </td> <td class="<? echo $cssSw->getClass() ?> hidden" width="10%" align="center"> <a href="<? echo URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&next_week=TRUE')?>"><?= Icon::create('arr_2right', 'clickable', ['title' => _("Nächste Woche anzeigen")])->asImg(16, ["alt" => _("Nächste Woche anzeigen"), "border" => 0]) ?></a> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?> hidden" width="4%" align="center" valign="bottom"> <? if ((!$_SESSION['resources_data']["schedule_time_range"]) || ($_SESSION['resources_data']["schedule_time_range"] == 1)): ?> <a href="<?= URLHelper::getLink('', array('quick_view' => $this->used_view, 'quick_view_mode' => $view_mode, 'time_range' => $_SESSION['resources_data']['schedule_time_range'] ? 'FALSE' : -1)) ?>"> <?= Icon::create('arr_2up', 'clickable', ['title' => _('Frühere Belegungen anzeigen')])->asImg(['class' => 'middle']) ?> </a> <? endif; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" colspan="2"> <? echo " <font size=-1>"._("Anzahl der Belegungen in diesem Zeitraum:")." ", $assign_events->numberOfEvents()."</font><br> "; ?> </td> <td class="<? echo $cssSw->getClass() ?> hidden" width="20%" nowrap> <? print "<select style=\"font-size:10px;\" name=\"show_repeat_mode\">"; printf ("<option style=\"font-size:10px;\" %s value=\"all\">"._("alle Belegungen")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "all") ? "selected" : ""); printf ("<option %s style=\"font-size:10px;\" value=\"single\">"._("nur Einzeltermine")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "single") ? "selected" : ""); printf ("<option %s style=\"font-size:10px;\" value=\"repeated\">"._("nur Wiederholungstermine")."</option>", ($_SESSION['resources_data']["show_repeat_mode"] == "repeated") ? "selected" : ""); print "</select>"; print " " . Icon::create('accept', 'accept', ['title' => _("Ansicht umschalten")])->asInput(["type" => "image", "class" => "middle", "name" => "send_schedule_repeat_mode"]); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?> hidden" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="96%" colspan="3"> <? $schedule->showSchedule("html", $print_view); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?> hidden" width="4%" align="center" valign="bottom"> <? if ((!$_SESSION['resources_data']['schedule_time_range']) || ($_SESSION['resources_data']['schedule_time_range'] == -1)): ?> <a href="<?= URLHelper::getLink('', array('quick_view' => $this->used_view, 'quick_view_mode' => $view_mode, 'time_range' => $_SESSION['resources_data']['schedule_time_range'] ? 'FALSE' : 1)) ?>"> <?= Icon::create('arr_2down', 'clickable', ['title' => _('Spätere Belegungen anzeigen')])->asImg() ?> </a> <? endif; ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="20%" nowrap colspan="3"> </td> </tr> </table> </form> <? }
/** * This action remove a user from course * @param $course_id */ public function decline_action($course_id, $waiting = null) { $current_seminar = Seminar::getInstance($course_id); $ticket_check = Seminar_Session::check_ticket(Request::option('studipticket')); if (LockRules::Check($course_id, 'participants')) { $lockdata = LockRules::getObjectRule($course_id); PageLayout::postMessage(MessageBox::error(sprintf(_("Sie können sich nicht von der Veranstaltung <b>%s</b> abmelden."), htmlReady($current_seminar->name)))); if ($lockdata['description']) { PageLayout::postMessage(MessageBox::info(formatLinks($lockdata['description']))); } $this->redirect('my_courses/index'); return; } if (Request::option('cmd') == 'back') { $this->redirect('my_courses/index'); return; } if (Request::option('cmd') != 'kill' && Request::option('cmd') != 'kill_admission') { if ($current_seminar->admission_binding && Request::get('cmd') != 'suppose_to_kill_admission' && !LockRules::Check($current_seminar->getId(), 'participants')) { PageLayout::postMessage(MessageBox::error(sprintf(_("Die Veranstaltung <b>%s</b> ist als <b>bindend</b> angelegt.\n Wenn Sie sich abmelden wollen, müssen Sie sich an die Lehrende der Veranstaltung wenden."), htmlReady($current_seminar->name)))); $this->redirect('my_courses/index'); return; } if (Request::get('cmd') == 'suppose_to_kill') { // check course admission list(, $admission_end_time) = @array_values($current_seminar->getAdmissionTimeFrame()); $admission_enabled = $current_seminar->isAdmissionEnabled(); $admission_locked = $current_seminar->isAdmissionLocked(); if ($admission_enabled || $admission_locked || (int) $current_seminar->admission_prelim == 1) { $message = sprintf(_('Wollen Sie sich von der teilnahmebeschränkten Veranstaltung "%s" wirklich abmelden? Sie verlieren damit die Berechtigung für die Veranstaltung und müssen sich ggf. neu anmelden!'), $current_seminar->name); } else { if (isset($admission_end_time) && $admission_end_time < time()) { $message = sprintf(_('Wollen Sie sich von der teilnahmebeschränkten Veranstaltung "%s" wirklich abmelden? Der Anmeldzeitraum ist abgelaufen und Sie können sich nicht wieder anmelden!'), $current_seminar->name); } else { $message = sprintf(_('Wollen Sie sich von der Veranstaltung "%s" wirklich abmelden?'), $current_seminar->name); } } $this->flash['cmd'] = 'kill'; } else { if (admission_seminar_user_get_position($GLOBALS['user']->id, $course_id) === false) { $message = sprintf(_('Wollen Sie sich von der Anmeldeliste der Veranstaltung "%s" wirklich abmelden?'), $current_seminar->name); } else { $message = sprintf(_('Wollen Sie sich von der Warteliste der Veranstaltung "%s" wirklich abmelden? Sie verlieren damit die bereits erreichte Position und müssen sich ggf. neu anmelden!'), $current_seminar->name); } $this->flash['cmd'] = 'kill_admission'; } $this->flash['decline_course'] = true; $this->flash['course_id'] = $course_id; $this->flash['message'] = $message; $this->flash['studipticket'] = Seminar_Session::get_ticket(); $this->redirect('my_courses/index'); return; } else { if (!LockRules::Check($course_id, 'participants') && $ticket_check && Request::option('cmd') != 'back' && Request::get('cmd') != 'kill_admission') { $query = "DELETE FROM seminar_user WHERE user_id = ? AND Seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($GLOBALS['user']->id, $course_id)); if ($statement->rowCount() == 0) { PageLayout::postMessage(MessageBox::error(_('In der ausgewählten Veranstaltung wurde die gesuchten Personen nicht gefunden und konnte daher nicht ausgetragen werden.'))); } else { // LOGGING StudipLog::log('SEM_USER_DEL', $course_id, $GLOBALS['user']->id, 'Hat sich selbst ausgetragen'); // enable others to do something after the user has been deleted NotificationCenter::postNotification('UserDidLeaveCourse', $course_id, $GLOBALS['user']->id); // Delete from statusgroups RemovePersonStatusgruppeComplete(get_username(), $course_id); // Are successor available update_admission($course_id); PageLayout::postMessage(MessageBox::success(sprintf(_("Erfolgreich von Veranstaltung <b>%s</b> abgemeldet."), htmlReady($current_seminar->name)))); } } else { // LOGGING StudipLog::log('SEM_USER_DEL', $course_id, $GLOBALS['user']->id, 'Hat sich selbst aus der Warteliste ausgetragen'); if ($current_seminar->isAdmissionEnabled()) { $prio_delete = AdmissionPriority::unsetPriority($current_seminar->getCourseSet()->getId(), $GLOBALS['user']->id, $course_id); } $query = "DELETE FROM admission_seminar_user WHERE user_id = ? AND seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($GLOBALS['user']->id, $course_id)); if ($statement->rowCount() || $prio_delete) { //Warteliste neu sortieren renumber_admission($course_id); //Pruefen, ob es Nachruecker gibt update_admission($course_id); PageLayout::postMessage(MessageBox::success(sprintf(_("Der Eintrag in der Anmelde- bzw. Warteliste der Veranstaltung <b>%s</b> wurde aufgehoben.\n Wenn Sie an der Veranstaltung teilnehmen wollen, müssen Sie sich erneut bewerben."), htmlReady($current_seminar->name)))); } } $this->redirect('my_courses/index'); return; } }
/** * Maintenance view for the manual insert parameters * */ function manual_action() { $_request = Request::GetInstance(); if (Request::submitted('submit')) { $filters = array_filter(Request::getArray('filter')); if (!Request::get('sem_id') || Request::get('sem_id') == 'false') { $this->flash['error'] = _('Ungültiger Aufruf'); } elseif (!count($filters)) { $this->flash['error'] = _('Keine Filterkriterien gewählt'); } else { $seminar = Seminar::GetInstance(Request::option('sem_id')); $group = select_group($seminar->getSemesterStartTime()); $userlookup = new UserLookup(); foreach ($filters as $type => $values) { $userlookup->setFilter($type, $values); } $user_ids = $userlookup->execute(); $real_users = 0; foreach ($user_ids as $user_id) { if (!AutoInsert::checkAutoInsertUser(Request::option('sem_id'), $user_id)) { $seminar->addMember($user_id); $real_users += AutoInsert::saveAutoInsertUser(Request::option('sem_id'), $user_id); } } //messagebox $text = sprintf(_('Es wurden %u von %u möglichen Personen in die Veranstaltung %s eingetragen.'), $real_users, count($user_ids), sprintf('<a href="%s">%s</a>', URLHelper::getLink('dispatch.php/course/details/', array('cid' => $seminar->getId())), htmlReady($seminar->getName()))); if ($real_users > 0) { $this->flash['success'] = $text; } else { $this->flash['message'] = $text; } $this->flash['detail'] = array(_('Etwaige Abweichungen der Personenzahlen enstehen durch bereits vorhandene bzw. wieder ausgetragene Personen.')); $this->redirect('admin/autoinsert/manual'); } } $this->sem_id = Request::option('sem_id'); $this->sem_search = Request::get('sem_search'); $this->sem_select = Request::option('sem_select'); $this->filtertype = Request::getArray('filtertype'); $this->filter = Request::getArray('filter'); if (count(Request::getArray('remove_filter'))) { $this->filtertype = array_diff($this->filtertype, array_keys(Request::getArray('remove_filter'))); } elseif (Request::submitted('add_filter')) { array_push($this->filtertype, Request::get('add_filtertype')); } if (Request::get('sem_search') and Request::get('sem_select')) { if (Request::get('sem_search')) { $search = new SeminarSearch('number-name'); $this->seminar_search = $search->getResults(Request::get('sem_search'), array('search_sem_sem' => $this->sem_select)); if (count($this->seminar_search) == 0) { $this->flash['message'] = _("Es wurden keine Veranstaltungen gefunden."); } } else { $this->flash['error'] = _("Im Suchfeld wurde nichts eingetragen!"); } } $this->values = array(); foreach ($this->filtertype as $type) { $this->values[$type] = UserLookup::getValuesForType($type); } $this->available_filtertypes = array('fach' => _('Studienfach'), 'abschluss' => _('Studienabschluss'), 'fachsemester' => _('Studienfachsemester'), 'institut' => _('Einrichtung'), 'status' => _('Statusgruppe'), 'domain' => _('Domäne')); }
default: $this->costtype = self::FIXED; return 30; } } function chargeType() { switch ($this->costtype) { case self::TIMED: return "hourly rate"; break; case self::FIXED: return "fixed rate"; break; default: $this->costtype = self::FIXED; return "fixed rate"; } } } class Lecture extends Lesson { } class Seminar extends Lesson { } $lecture = new Lecture(5, Lesson::FIXED); echo get_class($lecture); print "{$lecture->cost()} ({$lecture->chargeType()}) \n"; $seminar = new Seminar(3, Lesson::TIMED); print "{$seminar->cost()} ({$seminar->chargeType()})\n";
function index_action() { if (!$GLOBALS['perm']->have_perm("admin")) { throw new AccessDeniedException(_("Sie sind nicht berechtigt, dieses Plugin zu benutzen.")); } $db = DBManager::get(); if (Request::submitted('do_search_source')) { $result = search_range(Request::quoted('search_source')); if (is_array($result)) { $result = array_filter($result, function ($r) { return $r["type"] == "sem"; }); if (count($result)) { PageLayout::postMessage(MessageBox::success(sprintf(_("Ihre Sucher ergab %s Treffer."), count($result)))); $show_source_result = true; } } else { PageLayout::postMessage(MessageBox::info(_("Ihre Suche ergab keine Treffer."))); } } if (Request::submitted('do_choose_source')) { $source_id = Request::option('search_source_result'); $copy_count = 5; Request::set('to_copy', null); } else { if (Request::submitted('source_id')) { $source_id = Request::option('source_id'); $copy_count = Request::int('copy_count'); if ($copy_count < 1) { $copy_count = 1; } } } if ($source_id) { $source = Seminar::getInstance($source_id); $source_name = $source->getName() . ' (' . $source->getStartSemesterName() . ')'; $copy_type = Request::int('copy_type', $source->status); if (SeminarCategories::getByTypeId($copy_type)->course_creation_forbidden) { $copy_type = 0; } if (SeminarCategories::getByTypeId($source->status)->only_inst_user) { $search_template = "user_inst"; } else { $search_template = "user"; } $bet_inst = $db->query("SELECT institut_id FROM seminar_inst WHERE seminar_id=" . $db->quote($source_id))->fetchAll(PDO::FETCH_COLUMN); $source_dozenten = array_keys($source->getMembers('dozent')); if ($copy_count) { $r = Request::getArray('to_copy'); $delete_lecturer = Request::getArray('delete_lecturer'); $add_lecturer = count(Request::getArray('add_lecturer')) ? (int) key(Request::getArray('add_lecturer')) : null; for ($i = 0; $i < $copy_count; $i++) { $to_copy['nr'][$i] = isset($r['nr'][$i]) ? $r['nr'][$i] : $source->getNumber(); $to_copy['name'][$i] = isset($r['name'][$i]) ? $r['name'][$i] : $source->getName(); $to_copy['participants'][$i] = isset($r['participants'][$i]) ? 1 : 0; $to_copy['lecturers'][$i] = $r['lecturers'][$i]; if (empty($to_copy['lecturers'][$i])) { $to_copy['lecturers'][$i] = $source_dozenten; } else { if (isset($delete_lecturer[$i]) && count($to_copy['lecturers'][$i]) > 1) { $to_delete = array_search(key($delete_lecturer[$i]), $to_copy['lecturers'][$i]); if ($to_delete !== false) { unset($to_copy['lecturers'][$i][$to_delete]); } } } if ($add_lecturer === $i && Request::option('add_doz_' . $add_lecturer)) { $to_copy['lecturers'][$i][] = Request::option('add_doz_' . $add_lecturer); } $to_copy['search_lecturer'][$i] = new PermissionSearch($search_template, sprintf(_("%s auswählen"), get_title_for_status('dozent', 1, $source->status)), "user_id", array('permission' => 'dozent', 'exclude_user' => $to_copy['lecturers'][$i], 'institute' => $bet_inst)); } } if (Request::submitted('do_copy') && count($to_copy)) { $copied = array(); $lecturer_insert = $db->prepare("INSERT INTO seminar_user (seminar_id,user_id,status,position,gruppe,comment,visible,mkdate) VALUES (?,?,'dozent',?,?,'','yes',UNIX_TIMESTAMP())"); $copy_seminar_inst = $db->prepare("INSERT INTO seminar_inst (seminar_id,institut_id) SELECT ?,institut_id FROM seminar_inst WHERE seminar_id=?"); $copy_seminar_sem_tree = $db->prepare("INSERT INTO seminar_sem_tree (seminar_id,sem_tree_id) SELECT ?,sem_tree_id FROM seminar_sem_tree WHERE seminar_id=?"); $copy_seminar_user = $db->prepare("INSERT IGNORE INTO seminar_user (seminar_id,user_id,status,gruppe, mkdate,comment,position) SELECT ?,user_id,status,gruppe,UNIX_TIMESTAMP(),'',0 FROM seminar_user WHERE status IN ('user','autor','tutor') AND seminar_id=?"); $copy_seminar_userdomains = $db->prepare("INSERT INTO seminar_userdomains (seminar_id,userdomain_id) SELECT ?,userdomain_id FROM seminar_userdomains WHERE seminar_id=?"); $copy_statusgruppen = $db->prepare("INSERT INTO statusgruppen (statusgruppe_id,name,range_id,position,size,selfassign,mkdate) SELECT MD5(CONCAT(statusgruppe_id, ?)),name,?,position,size,selfassign,UNIX_TIMESTAMP() FROM statusgruppen WHERE range_id=?"); $copy_statusgruppe_user = $db->prepare("INSERT INTO statusgruppe_user (statusgruppe_id,user_id,position) SELECT MD5(CONCAT(statusgruppe_user.statusgruppe_id, ?)),user_id,statusgruppe_user.position FROM statusgruppen INNER JOIN statusgruppe_user USING(statusgruppe_id) WHERE range_id=?"); for ($i = 0; $i < $copy_count; $i++) { $new_sem = Course::build($source->toArray()); $new_sem->setId($new_sem->getNewId()); $new_sem_id = $new_sem->id; $new_sem->status = Request::int('copy_type', 1); $new_sem->name = $to_copy['name'][$i]; $new_sem->veranstaltungsnummer = $to_copy['nr'][$i]; $new_sem->store(); if (!$new_sem->isNew()) { log_event("SEM_CREATE", $new_sem_id); $gruppe = (int) select_group($new_sem->start_time); $position = 1; foreach ($to_copy['lecturers'][$i] as $lecturer) { $lecturer_insert->execute(array($new_sem_id, $lecturer, $position, $gruppe)); } $copy_seminar_inst->execute(array($new_sem_id, $source_id)); $copy_seminar_sem_tree->execute(array($new_sem_id, $source_id)); $copy_seminar_userdomains->execute(array($new_sem_id, $source_id)); if ($to_copy['participants'][$i]) { $copy_seminar_user->execute(array($new_sem_id, $source_id)); $copy_statusgruppen->execute(array($new_sem_id, $new_sem_id, $source_id)); $copy_statusgruppe_user->execute(array($new_sem_id, $source_id)); } $copied[] = $new_sem; } } PageLayout::postMessage(MessageBox::success(sprintf(_("Es wurden %s Kopien erstellt."), count($copied)))); $source_id = null; } } PageLayout::setTitle(_("Veranstaltungs-Vervielfältiger")); $template_factory = new Flexi_TemplateFactory(dirname(__FILE__) . "/templates"); $template = $template_factory->open('index.php'); $template->set_layout($GLOBALS['template_factory']->open('layouts/base.php')); echo $template->render(compact('source_id', 'source_name', 'show_source_result', 'result', 'copy_count', 'copy_type', 'to_copy', 'copied')); }
function createResultXls() { 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 (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"); } else { $the_tree =& $this->sem_tree; } list($group_by_data, $sem_data) = $this->getResult(); $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, _("Stud.IP Veranstaltungen") . ' - ' . $GLOBALS['UNI_NAME_CLEAN'], $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['do_search'] ? _("(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: $semester = SemesterData::GetSemesterArray(); $headline = $semester[$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'])) { $semester = SemesterData::GetSemesterArray(); 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 .= ' (' . $semester[$sem_number_start]['name'] . ' - '; $sem_name .= ($sem_number_end == -1 ? _("unbegrenzt") : $semester[$sem_number_end]['name']) . ')'; } elseif ($this->sem_browse_data['group_by']) { $sem_name .= ' (' . $semester[$sem_number_start]['name'] . ")"; } $worksheet1->write_string($row, 0, $sem_name, $data_format); //create Turnus field $temp_turnus_string = Seminar::GetInstance($seminar_id)->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_keys($sem_data[$seminar_id]['fullname']); $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; }
<?php echo Assets::img("icons/16/black/seminar", array('class' => "text-bottom")); ?> <br> <?php echo _("Veranstaltung"); ?> </label> </td> <td> <?php echo _("Im Kurs"); ?> <select name="context"> <? foreach (ForumPosting::getMyBlubberCourses() as $course_id) : ?> <? $seminar = new Seminar($course_id) ?> <option value="<?php echo htmlReady($course_id); ?> "><?php echo htmlReady($seminar->getName()); ?> </option> <? endforeach ?> </select> </td> </tr> </tbody> </table> <div> <button class="button" id="submit_button" style="display: none;" onClick="STUDIP.Blubber.prepareSubmitGlobalPosting();">
} //inform the owner of the requests //if ($snd_closed_request_sms) { if ($_sendMessage) { require_once 'lib/messaging.inc.php'; $messaging = new messaging; foreach ($_SESSION['resources_data']["requests_working_on"] as $val) { //$request_ids[] = $val["request_id"]; $request_data[$val["request_id"]] = $val; } $reqObj = new RoomRequest($_sendMessage['request_id']); $semObj = new Seminar($_sendMessage['seminar_id']); // first we have to get all users to which the message will be sent // -> creator of request $users = Array($reqObj->getUserId()); if ($reqObj->reply_recipients == 'lecturer') { $users = array_merge($users, array_keys($semObj->getMembers('dozent'))); } // the room-request has been declined if ($_sendMessage['type'] == 'declined') { $decline_message = Request::get('decline_message'); if ($semObj->seminar_number) { $message = sprintf(_("ABGELEHNTE RAUMANFRAGE: Ihre Raumanfrage zur Veranstaltung %s (%s) wurde abgelehnt.") . "\n\n" . _("Nachricht des Raumadministrators:") . "\n" . $decline_message, $semObj->getName(), $semObj->seminar_number);
<?php $this->load->view('admin/includes/header'); ?> <form id="frm_display_data" name="frm_display_data" action="<?php echo base_url() . $this->lang->lang() . '/' . ADMIN; ?> /seminar/delete_all" method="post"> <div class="form-actions"> <?php $this_object = new Seminar(); if ($this_object->user_screen_privielge_allowed($this_object->screen_id, $this_object->privielge_delete)) { ?> <a class='btn btn-danger' href="javascript: submitform()" class="bt_red" onclick="return delete_all_confirm('<?php echo $this->lang->lang(); ?> ');"> <i class='icon-trash icon-white'></i> <?php echo $this->lang->line('btn_delete_all'); ?> </a> <?php } if ($this_object->user_screen_privielge_allowed($this_object->screen_id, $this_object->privielge_add)) { ?> <a class='btn btn-info' href="<?php echo base_url() . $this->lang->lang() . '/' . ADMIN; ?>
/** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { // $data = Input::All(); $riwayat = Seminar::find($id); if ($riwayat->delete()) { return Response::json(array('success' => TRUE)); } }
public function display_data_table($array_of_data, $link_to_screen = '', $object) { echo "\n\t\t<script type='text/javascript' src='" . base_url() . "js/includes/functions.js' > </script>\n\t\t<script type='text/javascript' src='" . base_url() . "js/admin/seminar/form.js' > </script>\n\t\t"; //echo "<table style=' width:962px; table-layout:fixed;' border='0' cellpadding='3' cellspacing='1'>"; echo "<table class='table table-striped table-bordered bootstrap-datatable datatable'>"; $index = 0; $color_row = ''; $height_row = ''; foreach ($array_of_data as $record) { $current_row_id = 0; if ($index == 0) { echo "<thead><tr>"; foreach ($record as $key => $value) { if ($key == 'id') { echo "<th > <input type='checkbox' name='chk_all' id='chk_all' onchange='checkUncheck_DisplayDataForm()' /> </th> "; } else { if ($key == 'approved') { if ($object->session->userdata('user_session')->admin == 1) { echo "<th >" . lang($key) . " </th>"; } } else { if ($key != 'are_canceled') { echo "<th >" . lang($key) . " </th>"; } } } } echo "<th >" . lang('btn_actions') . "</th>"; echo "</tr></thead>"; } echo "<tbody><tr>"; foreach ($record as $key => $value) { if ($index % 2 == 1) { //$color_row='#e6f6fd'; $height_row = '30px'; } else { //$color_row='#FFFFFF'; $height_row = '25px'; } $color_row = ''; if ($key == 'id') { echo "<td ><input type='checkbox' id='chk_current_row[]' name='chk_current_row[]' value='{$value}' ></td>"; $current_row_id = $value; } else { if ($key == 'are_canceled') { if ($value == 0) { $what_will = 1; $icon = "cancel_for_table.png"; $title = $object->lang->line('btn_cancel'); } else { $what_will = 0; $icon = "uncancel_for_table.png"; $title = $object->lang->line('btn_uncancel'); } //$cancel_link="<a href='$link_to_screen/cancel_uncancel/$current_row_id/$what_will/view' ><img src='".base_url()."/images/icons/$icon' width='15'; height='15' title='".$title."' /></a>"; } else { if ($key == 'alias' || $key == 'title' || $key == 'title_ar') { $width_td = '160px'; echo "<td class='center' width='{$width_td}'> <a href='{$link_to_screen}/form/{$current_row_id}/view' >{$value}</a> </td>"; } else { if ($key == 'banner_image_thumb_selected') { $width_row = '210px'; echo "<td class='center' > <img src='" . base_url() . $value . "' title='{$value}' /> </td>"; } else { if ($key == 'approved') { if ($object->session->userdata('user_session')->admin == 1) { if ($value == 0) { echo "<td class='center'> <a href='{$link_to_screen}/approve/{$current_row_id}/1' ><span class='label label-warning'>" . lang('no') . "</span></a> </td>"; } else { echo "<td class='center'> <a href='{$link_to_screen}/approve/{$current_row_id}/0' ><span class='label label-success'>" . lang('yes') . "</span></a> </td>"; } } } else { $width_row = '150px'; echo "<td class='center'> {$value} </td>"; } } } } } } echo "\n\t\t\t\t<td class='center'>\n\t\t\t\t\t\t\t\t\t<a class='btn btn-success' href='{$link_to_screen}/form/{$current_row_id}/view'>\n\t\t\t\t\t\t\t\t\t\t<i class='icon-zoom-in icon-white'></i> \n\t\t\t\t\t\t\t\t\t\t\t" . lang('btn_view') . " \n\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\n\t\t\t\t\t\t\t\t\t\t\t"; $this_object = new Seminar(); if ($this_object->user_screen_privielge_allowed($this_object->screen_id, $this_object->privielge_edit)) { echo "<a class='btn btn-info' href='{$link_to_screen}/form/{$current_row_id}/edit'>\n\t\t\t\t\t\t\t\t\t\t<i class='icon-edit icon-white'></i> \n\t\t\t\t\t\t\t\t\t\t" . lang('btn_edit') . " \n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t"; } if ($this_object->user_screen_privielge_allowed($this_object->screen_id, $this_object->privielge_delete)) { echo "<a class='btn btn-danger' href='{$link_to_screen}/delete/{$current_row_id}' onclick='return delete_confirm(\"" . $object->lang->lang() . "\")'>\n\t\t\t\t\t\t\t\t\t\t<i class='icon-trash icon-white'></i> \n\t\t\t\t\t\t\t\t\t\t" . lang('btn_delete') . "\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t"; } echo "</td></tr>"; $index = $index + 1; } echo "</tbody></table>"; }