</td> <? endif ?> <? if (in_array('type', $view_filter)) : ?> <td> <strong><?php echo $GLOBALS['SEM_CLASS'][$GLOBALS['SEM_TYPE'][$values["status"]]["class"]]['name']; ?> </strong>: <?php echo $GLOBALS['SEM_TYPE'][$values["status"]]["name"]; ?> </td> <? endif ?> <? if (in_array('room_time', $view_filter)) : ?> <td class="raumzeit"> <?php echo Seminar::GetInstance($semid)->getDatesHTML(array('semester_id' => $semester->id, 'show_room' => true)) ?: _('nicht angegeben'); ?> </td> <? endif ?> <? if (in_array('teachers', $view_filter)) : ?> <td> <?php echo $this->render_partial_collection('my_courses/_dozent', $values['dozenten']); ?> <? if ($values['teacher_search']): ?> <br> <?php echo $values['teacher_search']->render(); ?> <? endif; ?> </td>
function print_result ($args) { global $_fullname_sql,$SEM_TYPE,$SEM_CLASS; if (is_array($this->sem_browse_data['search_result']) && count($this->sem_browse_data['search_result'])) { // show only selected subject areas $selected_ranges = $this->config->getValue('SelectSubjectAreas', 'subjectareasselected'); if ($stid = Request::option('sem_tree_id')) { if (!is_object($this->sem_tree)){ $the_tree = TreeAbstract::GetInstance("StudipSemTree"); } else { $the_tree =& $this->sem_tree->tree; } $the_tree->buildIndex(); $selected_ranges = array_merge(array($stid), $the_tree->getKidsKids($stid)); } if (!$this->config->getValue('SelectSubjectAreas', 'selectallsubjectareas') && count($selected_ranges)) { if ($this->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->config->getValue('ReplaceTextSemType', 'visibility'); if (Request::get('semstatus')) { $selected_semtypes = array(Request::get('semstatus')); } $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 = ''; } 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->config->getValue("Main", "allseminars") && !Request::get('allseminars')) { $sem_inst_query = " AND seminare.Institut_id='{$this->config->range_id}' "; } if (Request::option('aggregation')) { $i = Institute::find($this->config->range_id); $children = $i->sub_institutes->pluck('institut_id'); $sem_inst_query = " AND seminare.Institut_id IN ('".(implode("', '", $children))."')"; } $dbv = DbView::getView('sem_tree'); if (!$nameformat = $this->config->getValue("Main", "nameformat")) $nameformat = "no_title_short"; $query = "SELECT seminare.Seminar_id, seminare.status, seminare.Name , seminare.Institut_id, Institute.Name AS Institut,Institute.Institut_id, seminar_sem_tree.sem_tree_id AS bereich, " . $_fullname_sql[$nameformat] . " AS fullname, auth_user_md5.username, " . $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); if (isset($args['group']) && $args['group'] >= 0 && $args['group'] < 5) { $this->sem_browse_data['group_by'] = $args['group']; } $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"); 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 ($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; } $show_time = $this->config->getValue("Main", "time"); $show_lecturer = $this->config->getValue("Main", "lecturer"); if ($show_time && $show_lecturer) { if (!$td2width = $this->config->getValue("LecturesInnerTable", "td2width")) $td2width = 50; $colspan = " colspan=\"2\""; $td_time = $this->config->getAttributes("LecturesInnerTable", "td2"); $td_time .= " width=\"$td2width%\""; $td_lecturer = " align=\"" . $this->config->getValue("LecturesInnerTable", "td3_align"); $td_lecturer .= "\" valign=\"" . $this->config->getValue("LecturesInnerTable", "td2_valign"); $td_lecturer .= "\" width=\"" . (100 - $td2width) . "%\""; } else { $colspan = ""; $td_time = $this->config->getAttributes("LecturesInnerTable", "td2") . " width=\"100%\""; $td_lecturer = " align=\"" . $this->config->getValue("LecturesInnerTable", "td3_align"); $td_lecturer .= "\" valign=\"" . $this->config->getValue("LecturesInnerTable", "td2_valign"); $td_lecturer .= " width=\"100%\""; } // erase output buffer with warnings and start unbuffered output ob_end_clean(); echo "\n<table" . $this->config->getAttributes("TableHeader", "table") . ">\n"; if ($this->config->getValue("Main", "addinfo")) { echo "\n<tr" . $this->config->getAttributes("InfoCountSem", "tr") . ">"; echo "<td" . $this->config->getAttributes("InfoCountSem", "td") . ">"; echo "<font" . $this->config->getAttributes("InfoCountSem", "font") . "> "; echo count($sem_data); echo $this->config->getValue("Main", "textlectures"); echo ", " . $this->config->getValue("Main", "textgrouping"); $group_by_name = $this->config->getValue("Main", "aliasesgrouping"); echo $group_by_name[$this->sem_browse_data['group_by']]; echo "</font></td></tr>"; } if (count($group_by_data)) { foreach ($group_by_data as $group_field => $sem_ids) { echo "\n<tr" . $this->config->getAttributes("Grouping", "tr") . ">"; echo "<td" . $this->config->getAttributes("Grouping", "td") . ">"; echo "<font" . $this->config->getAttributes("Grouping", "font") . ">"; switch ($this->sem_browse_data["group_by"]){ case 0: echo $this->sem_dates[$group_field]['name']; break; case 1: if ($the_tree->tree_data[$group_field]) { $range_path_level = $this->config->getValue("Main", "rangepathlevel"); echo htmlReady($the_tree->getShortPath($group_field, NULL, '>', $range_path_level ? $range_path_level - 1 : 0)); } else { echo $this->config->getValue("Main", "textnogroups"); } /* $range_path_new = NULL; if ($the_tree->tree_data[$group_field]) { $range_path = explode(" ^ ", $the_tree->getShortPath($group_field, "^")); $range_path_level = $this->config->getValue("Main", "rangepathlevel"); if ($range_path_level > sizeof($range_path)) $range_path_level = sizeof($range_path); for ($i = $range_path_level - 1; $i < sizeof($range_path); $i++) $range_path_new[] = $range_path[$i]; echo htmlReady(implode(" > ", $range_path_new)); } else echo $this->config->getValue("Main", "textnogroups"); */ break; case 2: echo htmlReady($group_field); break; case 3: $aliases_sem_type = $this->config->getValue("ReplaceTextSemType", "class_{$SEM_TYPE[$group_field]['class']}"); if ($aliases_sem_type[$this->sem_types_position[$group_field] - 1]) echo $aliases_sem_type[$this->sem_types_position[$group_field] - 1]; else { echo htmlReady($SEM_TYPE[$group_field]["name"] ." (". $SEM_CLASS[$SEM_TYPE[$group_field]["class"]]["name"].")"); } break; case 4: echo htmlReady($group_field); break; } echo "</font></td></tr>"; if (is_array($sem_ids['Seminar_id'])) { $zebra = 0; while (list($seminar_id,) = each($sem_ids['Seminar_id'])) { $sem_name = 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"]); if ($sem_number_start != $sem_number_end){ $sem_name .= " (" . $this->sem_dates[$sem_number_start]['name'] . " - "; $sem_name .= (($sem_number_end == -1) ? _("unbegrenzt") : $this->sem_dates[$sem_number_end]['name']) . ")"; } echo "\n<tr" . $this->config->getAttributes("LecturesInnerTable", "tr").">"; if ($zebra % 2 && $this->config->getValue("LecturesInnerTable", "td_bgcolor2_")) echo "<td width=\"100%\"".$this->config->getAttributes("LecturesInnerTable", "td", TRUE)."\">\n"; else echo "<td width=\"100%\"".$this->config->getAttributes("LecturesInnerTable", "td")."\">\n"; $zebra++; echo "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n"; echo "<tr" . $this->config->getAttributes("LecturesInnerTable", "tr1") . ">"; echo "<td$colspan" . $this->config->getAttributes("LecturesInnerTable", "td1") . ">"; echo "<font" . $this->config->getAttributes("LecturesInnerTable", "font1") . ">"; $sem_link["module"] = "Lecturedetails"; $sem_link["link_args"] = "seminar_id=$seminar_id"; $sem_link["content"] = htmlReady($sem_name); $this->module->elements["SemLink"]->printout($sem_link); echo "</font></td></tr>\n"; //create Turnus field $temp_turnus_string = Seminar::GetInstance($seminar_id)->getDatesExport(array('show_room' => true)); //Shorten, if string too long (add link for details.php) if (strlen($temp_turnus_string) >70) { $temp_turnus_string = substr($temp_turnus_string, 0, strpos(substr($temp_turnus_string, 70, strlen($temp_turnus_string)), ',') +71); $temp_turnus_string .= '...'; } if ($show_time || $show_lecturer) { echo "\n<tr" . $this->config->getAttributes('LecturesInnerTable', 'tr2') . '>'; if ($show_time) { echo "<td$td_time>"; echo '<font' . $this->config->getAttributes('LecturesInnerTable', 'font2') . '>'; echo $temp_turnus_string . "</font></td>\n"; } if ($show_lecturer) { echo "<td$td_lecturer>"; echo '<font' . $this->config->getAttributes('LecturesInnerTable', 'font2') . '>('; $doz_position = array_keys($sem_data[$seminar_id]['position']); $doz_name = array_keys($sem_data[$seminar_id]['fullname']); $doz_uname = array_keys($sem_data[$seminar_id]['username']); if (is_array($doz_name)){ $lecturer_link['module'] = 'Persondetails'; if(count($doz_position) != count($doz_uname)) $doz_position = range(1, count($doz_uname)); array_multisort($doz_position, $doz_name, $doz_uname); $i = 0; foreach ($doz_name as $index => $value) { if ($i == 4) { echo '...'; break; } $lecturer_link['link_args'] = "username={$doz_uname[$index]}&seminar_id=$seminar_id"; $lecturer_link['content'] = htmlReady($value); $this->module->elements['LecturerLink']->printout($lecturer_link); if ($i != count($doz_name) - 1) { echo ', '; } ++$i; } echo ') '; } echo '</font></td>'; } echo '</tr>'; } echo "</table></td></tr>\n"; } } } } echo "</table>"; } }
/** * Return the default title of the avatar. * @return string the default title */ function getDefaultTitle() { return Seminar::GetInstance($this->user_id)->name; }
/** * * checks if the 'protected' flag of a file is set and if * the course access is closed * * @param string MD5 id of the file * @return bool */ function check_protected_download($document_id) { $ok = true; if (Config::GetInstance()->getValue('ENABLE_PROTECTED_DOWNLOAD_RESTRICTION')) { $doc = new StudipDocument($document_id); if ($doc->getValue('protected')) { $ok = false; $range_id = $doc->getValue('seminar_id'); if (get_object_type($range_id) == 'sem') { $seminar = Seminar::GetInstance($range_id); $timed_admission = $seminar->getAdmissionTimeFrame(); if ($seminar->isPasswordProtected() || $seminar->isAdmissionLocked() || ($timed_admission['end_time'] > 0 && $timed_admission['end_time'] < time())) { $ok = true; } else if (StudygroupModel::isStudygroup($range_id)) { $studygroup = Seminar::GetInstance($range_id); if ($studygroup->admission_prelim == 1) { $ok = true; } } } } } return $ok; }
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> <? }
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; }
/** * checks access to the document for user with given user_id * the number of deleted rows. * @param string user_id: id of the user * @return boolean: true if user has access to the document */ public function checkAccess($user_id) { if (!$this->getValue('dokument_id')) { return false; } $object_type = get_object_type($this->getValue('seminar_id')); $access = false; if (in_array($object_type, array('inst', 'fak'))) { //download from institute and user is always allowed if (get_config('ENABLE_FREE_ACCESS') || $GLOBALS['perm']->have_perm('user', $user_id)) { $access = true; } else { //check external download module (types 6 and 10) $result = DBManager::get()->query("SELECT * FROM extern_config WHERE range_id = '" . $this->getValue('seminar_id') . "' AND config_type IN (6,10)")->fetchColumn(); $access = (bool) $result; } } else { if ($object_type == 'sem') { //download from course is allowed if course is free for all or user is participant if (Seminar::GetInstance($this->getValue('seminar_id'))->isPublic()) { $access = true; } else { $access = $GLOBALS['perm']->have_studip_perm('user', $this->getValue('seminar_id'), $user_id); } } else { if ($object_type == 'user') { // message attachement $st = DBManager::get()->prepare("SELECT message_user.user_id FROM dokumente\n INNER JOIN message_user ON message_id=range_id\n WHERE dokument_id = ?"); $st->execute(array($this->getValue('dokument_id'))); $message_user = $st->fetchAll(PDO::FETCH_COLUMN); if (count($message_user)) { $access = in_array($user_id, $message_user); } else { //Blubberdatei aus persönlichem Blubb $access = $GLOBALS['perm']->have_perm('user', $user_id); } } } } //if allowed basically, check for closed folders and protected documents if ($access && in_array($object_type, array('inst', 'fak', 'sem'))) { $folder_tree = TreeAbstract::GetInstance('StudipDocumentTree', array('range_id' => $this->getValue('seminar_id'))); if (!$folder_tree->isDownloadFolder($this->getValue('range_id'), $user_id)) { $access = false; } if (!check_protected_download($this->getValue('dokument_id'))) { $access = false; } } return $access; }
private function addTeacher($dozent, $course_id) { $deputies_enabled = get_config('DEPUTIES_ENABLE'); $sem = Seminar::GetInstance($course_id); if ($GLOBALS['perm']->have_studip_perm('dozent', $course_id)) { if ($sem->addMember($dozent, "dozent")) { // Only applicable when globally enabled and user deputies enabled too if ($deputies_enabled) { // Check whether chosen person is set as deputy // -> delete deputy entry. if (isDeputy($dozent, $course_id)) { deleteDeputy($dozent, $course_id); } // Add default deputies of the chosen lecturer... if (get_config('DEPUTIES_DEFAULTENTRY_ENABLE')) { $deputies = getDeputies($dozent); $lecturers = $sem->getMembers('dozent'); foreach ($deputies as $deputy) { // ..but only if not already set as lecturer or deputy. if (!isset($lecturers[$deputy['user_id']]) && !isDeputy($deputy['user_id'], $course_id)) { addDeputy($deputy['user_id'], $course_id); } } } } return MessageBox::success(sprintf(_('%s wurde hinzugefügt.'), get_title_for_status('dozent', 1))); } } return false; }
/** * Delete an existing user from the database and tidy up * * @access public * @param bool delete all documents belonging to the user * @return bool Removal successful? */ function deleteUser($delete_documents = true) { global $perm; // Do we have permission to do so? if (!$perm->have_perm("admin")) { $this->msg .= "error§" . _("Sie haben keine Berechtigung Accounts zu löschen.") . "§"; return FALSE; } if (!$perm->have_perm("root")) { if ($this->user_data['auth_user_md5.perms'] == "root") { $this->msg .= "error§" . _("Sie haben keine Berechtigung <em>Root-Accounts</em> zu löschen.") . "§"; return FALSE; } if ($this->user_data['auth_user_md5.perms'] == "admin" && !$this->adminOK()) { $this->msg .= "error§" . _("Sie haben keine Berechtigung diesen Admin-Account zu löschen.") . "§"; return FALSE; } } $status = studygroup_sem_types(); // active dozent? if (empty($status)) { $active_count = 0; } else { $query = "SELECT SUM(c) AS count FROM (\n SELECT COUNT(*) AS c\n FROM seminar_user AS su1\n INNER JOIN seminar_user AS su2 ON (su1.seminar_id = su2.seminar_id AND su2.status = 'dozent')\n INNER JOIN seminare ON (su1.seminar_id = seminare.seminar_id AND seminare.status NOT IN (?))\n WHERE su1.user_id = ? AND su1.status = 'dozent'\n GROUP BY su1.seminar_id\n HAVING c = 1\n ORDER BY NULL\n ) AS sub"; $statement = DBManager::get()->prepare($query); $statement->execute(array(studygroup_sem_types(), $this->user_data['auth_user_md5.user_id'])); $active_count = $statement->fetchColumn(); } if ($active_count) { $this->msg .= sprintf("error§" . _("<em>%s</em> ist Lehrkraft in %s aktiven Veranstaltungen und kann daher nicht gelöscht werden.") . "§", $this->user_data['auth_user_md5.username'], $active_count); return FALSE; //founder of studygroup? } elseif (get_config('STUDYGROUPS_ENABLE')) { $status = studygroup_sem_types(); if (empty($status)) { $group_ids = array(); } else { $query = "SELECT Seminar_id\n FROM seminare AS s\n LEFT JOIN seminar_user AS su USING (Seminar_id)\n WHERE su.status = 'dozent' AND su.user_id = ? AND s.status IN (?)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'], studygroup_sem_types())); $group_ids = $statement->fetchAll(PDO::FETCH_COLUMN); } foreach ($group_ids as $group_id) { $sem = Seminar::GetInstance($group_id); if (StudygroupModel::countMembers($group_id) > 1) { // check whether there are tutors or even autors that can be promoted $tutors = $sem->getMembers('tutor'); $autors = $sem->getMembers('autor'); if (count($tutors) > 0) { $new_founder = current($tutors); StudygroupModel::promote_user($new_founder['username'], $sem->getId(), 'dozent'); continue; } elseif (count($autors) > 0) { $new_founder = current($autors); StudygroupModel::promote_user($new_founder['username'], $sem->getId(), 'dozent'); continue; } // since no suitable successor was found, we are allowed to remove the studygroup } else { $sem->delete(); } unset($sem); } } // store user preferred language for sending mail $user_language = getUserLanguagePath($this->user_data['auth_user_md5.user_id']); // delete documents of this user if ($delete_documents) { // Remove private file space of this user if (Config::get()->PERSONALDOCUMENT_ENABLE) { $root_dir = new RootDirectory($this->user_data['auth_user_md5.user_id']); $root_dir->delete(); } // Remove other files $temp_count = 0; $query = "SELECT dokument_id FROM dokumente WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); while ($document_id = $statement->fetchColumn()) { if (delete_document($document_id)) { $temp_count++; } } if ($temp_count) { $this->msg .= "info§" . sprintf(_("%s Dokumente gelöscht."), $temp_count) . "§"; } // delete empty folders of this user $temp_count = 0; $query = "SELECT COUNT(*) FROM folder WHERE range_id = ?"; $count_content = DBManager::get()->prepare($query); $query = "DELETE FROM folder WHERE folder_id = ?"; $delete_folder = DBManager::get()->prepare($query); $query = "SELECT folder_id FROM folder WHERE user_id = ? ORDER BY mkdate DESC"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); while ($folder_id = $statement->fetchColumn()) { $count_content->execute(array($folder_id)); $count = $count_content->fetchColumn(); $count_content->closeCursor(); if (!$count && !doc_count($folder_id)) { $delete_folder->execute(array($folder_id)); $temp_count += $delete_folder->rowCount(); } } if ($temp_count) { $this->msg .= "info§" . sprintf(_("%s leere Ordner gelöscht."), $temp_count) . "§"; } // folder left? $query = "SELECT COUNT(*) FROM folder WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $count = $statement->fetchColumn(); if ($count) { $this->msg .= sprintf("info§" . _("%s Ordner konnten nicht gelöscht werden, da sie noch Dokumente anderer BenutzerInnen enthalten.") . "§", $count); } } // kill all the ressources that are assigned to the user (and all the linked or subordinated stuff!) if (Config::get()->RESOURCES_ENABLE) { $killAssign = new DeleteResourcesUser($this->user_data['auth_user_md5.user_id']); $killAssign->delete(); } $this->re_sort_position_in_seminar_user(); // delete user from seminars (postings will be preserved) $query = "DELETE FROM seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Veranstaltungen gelöscht."), $db_ar) . "§"; } // delete user from waiting lists $query = "SELECT seminar_id FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $seminar_ids = $statement->fetchAll(PDO::FETCH_COLUMN); $query = "DELETE FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Wartelisten gelöscht."), $db_ar) . "§"; array_map('update_admission', $seminar_ids); } // delete user from instituts $this->logInstUserDel($this->user_data['auth_user_md5.user_id']); $query = "DELETE FROM user_inst WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus MitarbeiterInnenlisten gelöscht."), $db_ar) . "§"; } // delete user from Statusgruppen if ($db_ar = RemovePersonFromAllStatusgruppen(get_username($this->user_data['auth_user_md5.user_id'])) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Funktionen / Gruppen gelöscht."), $db_ar) . "§"; } // delete user from archiv $query = "DELETE FROM archiv_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Zugriffsberechtigungen für das Archiv gelöscht."), $db_ar) . "§"; } // delete all personal news from this user if ($db_ar = StudipNews::DeleteNewsByAuthor($this->user_data['auth_user_md5.user_id'])) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Ankündigungen gelöscht."), $db_ar) . "§"; } if ($db_ar = StudipNews::DeleteNewsRanges($this->user_data['auth_user_md5.user_id'])) { $this->msg .= "info§" . sprintf(_("%s Verweise auf Ankündigungen gelöscht."), $db_ar) . "§"; } //delete entry in news_rss_range StudipNews::UnsetRssId($this->user_data['auth_user_md5.user_id']); // delete 'Studiengaenge' $query = "DELETE FROM user_studiengang WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Zuordnungen zu Studiengängen gelöscht."), $db_ar) . "§"; } // delete all private appointments of this user if (get_config('CALENDAR_ENABLE')) { $appkills = CalendarEvent::deleteBySQL('range_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($appkills) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Terminen gelöscht."), $appkills) . "§"; } // delete membership in group calendars if (get_config('CALENDAR_GROUP_ENABLE')) { $membershipkills = CalendarUser::deleteBySQL('owner_id = :user_id OR user_id = :user_id', array(':user_id' => $this->user_data['auth_user_md5.user_id'])); if ($membershipkills) { $this->msg .= 'info§' . sprintf(_('%s Verknüpfungen mit Gruppenterminkalendern gelöscht.')); } } } // delete all messages send or received by this user $messaging = new messaging(); $messaging->delete_all_messages($this->user_data['auth_user_md5.user_id']); // delete user from all foreign adressbooks and empty own adressbook $buddykills = Contact::deleteBySQL('user_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($buddykills > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Adressbüchern gelöscht."), $buddykills) . "§"; } $contactkills = Contact::deleteBySQL('owner_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($contactkills) { $this->msg .= sprintf(_('Adressbuch mit %d Einträgen gelöscht.'), $contactkills); } // delete users groups Statusgruppen::deleteBySQL('range_id = ?', array($this->user_data['auth_user_md5.user_id'])); // remove user from any groups StatusgruppeUser::deleteBySQL('user_id = ?', array($this->user_data['auth_user_md5.user_id'])); // delete all blubber entrys $query = "DELETE FROM blubber WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Blubber gelöscht."), $db_ar) . "§"; } // delete the datafields $localEntries = DataFieldEntry::removeAll($this->user_data['auth_user_md5.user_id']); UserConfigEntry::deleteByUser($this->user_data['auth_user_md5.user_id']); // delete all remaining user data $queries = array("DELETE FROM kategorien WHERE range_id = ?", "DELETE FROM user_info WHERE user_id = ?", "DELETE FROM user_visibility WHERE user_id = ?", "DELETE FROM user_online WHERE user_id = ?", "DELETE FROM auto_insert_user WHERE user_id = ?", "DELETE FROM roles_user WHERE userid = ?", "DELETE FROM schedule WHERE user_id = ?", "DELETE FROM schedule_seminare WHERE user_id = ?", "DELETE FROM termin_related_persons WHERE user_id = ?", "DELETE FROM user_userdomains WHERE user_id = ?"); foreach ($queries as $query) { DBManager::get()->prepare($query)->execute(array($this->user_data['auth_user_md5.user_id'])); } object_kill_visits($this->user_data['auth_user_md5.user_id']); object_kill_views($this->user_data['auth_user_md5.user_id']); // delete picture $avatar = Avatar::getAvatar($this->user_data["auth_user_md5.user_id"]); if ($avatar->is_customized()) { $avatar->reset(); $this->msg .= "info§" . _("Bild gelöscht.") . "§"; } // delete visibility settings Visibility::removeUserPrivacySettings($this->user_data['auth_user_md5.user_id']); //delete connected users if (get_config('ELEARNING_INTERFACE_ENABLE')) { if (ELearningUtils::initElearningInterfaces()) { foreach ($GLOBALS['connected_cms'] as $cms) { if ($cms->auth_necessary && $cms->user instanceof ConnectedUser) { $user_auto_create = $cms->USER_AUTO_CREATE; $cms->USER_AUTO_CREATE = false; $userclass = strtolower(get_class($cms->user)); $connected_user = new $userclass($cms->cms_type, $this->user_data['auth_user_md5.user_id']); if ($ok = $connected_user->deleteUser()) { if ($connected_user->is_connected) { $this->msg .= "info§" . sprintf(_("Der verknüpfte Nutzer %s wurde im System %s gelöscht."), $connected_user->login, $connected_user->cms_type) . "§"; } } $cms->USER_AUTO_CREATE = $user_auto_create; } } } } // delete deputy entries if necessary $query = "DELETE FROM deputies WHERE ? IN (user_id, range_id)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $deputyEntries = $statement->rowCount(); if ($deputyEntries) { $this->msg .= "info§" . sprintf(_("%s Einträge in den Vertretungseinstellungen gelöscht."), $deputyEntries) . "§"; } // delete Stud.IP account $query = "DELETE FROM auth_user_md5 WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (!$statement->rowCount()) { $this->msg .= "error§<em>" . _("Fehler:") . "</em> " . $query . "§"; return FALSE; } else { $this->msg .= "msg§" . sprintf(_("Benutzer \"%s\" gelöscht."), $this->user_data['auth_user_md5.username']) . "§"; } log_event("USER_DEL", $this->user_data['auth_user_md5.user_id'], NULL, sprintf("%s %s (%s)", $this->user_data['auth_user_md5.Vorname'], $this->user_data['auth_user_md5.Nachname'], $this->user_data['auth_user_md5.username'])); //log with Vorname Nachname (username) as info string // Can we reach the email? if ($this->checkMail($this->user_data['auth_user_md5.Email'])) { // include language-specific subject and mailbody $Zeit = date("H:i:s, d.m.Y", time()); include "locale/{$user_language}/LC_MAILS/delete_mail.inc.php"; // send mail StudipMail::sendMessage($this->user_data['auth_user_md5.Email'], $subject, $mailbody); } unset($this->user_data); return TRUE; }
function print_result () { global $_fullname_sql,$SEM_TYPE,$SEM_CLASS,$sem_type_tmp; $sem_link = $this->module->getModuleLink("Lecturedetails", $this->module->config->getValue("SemLink", "config"), $this->module->config->getValue("SemLink", "srilink")); $lecturer_link = $this->module->getModuleLink("Persondetails", $this->module->config->getValue("LecturerLink", "config"), $this->module->config->getValue("LecturerLink", "srilink")); if (is_array($this->sem_browse_data['search_result']) && count($this->sem_browse_data['search_result'])) { // show only selected subject areas $selected_ranges = $this->module->config->getValue('SelectSubjectAreas', 'subjectareasselected'); if ($stid = Request::option('sem_tree_id')) { if (!is_object($this->sem_tree)){ $the_tree = TreeAbstract::GetInstance("StudipSemTree"); } else { $the_tree =& $this->sem_tree->tree; } $the_tree->buildIndex(); $selected_ranges = array_merge(array($stid), $the_tree->getKidsKids($stid)); } 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'); if (Request::get('semstatus')) { $selected_semtypes = array(Request::get('semstatus')); } $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($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") && !Request::get('allseminars')){ $sem_inst_query = " AND seminare.Institut_id='{$this->module->config->range_id}' "; } if (Request::option('aggregation')) { $i = Institute::find($this->config->range_id); $children = $i->sub_institutes->pluck('institut_id'); $sem_inst_query = " AND seminare.Institut_id IN ('".(implode("', '", $children))."')"; } 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, " . $_fullname_sql[$nameformat] ." AS fullname, auth_user_md5.username, " . $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; } } } //release memory unset($snap); unset($tmp_group_by_data); foreach ($group_by_data as $group_field => $sem_ids){ foreach ($sem_ids['Seminar_id'] as $seminar_id => $foo){ $name = strtolower(key($sem_data[$seminar_id]["Name"])); $name = str_replace("ä","ae",$name); $name = str_replace("ö","oe",$name); $name = str_replace("ü","ue",$name); $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"); 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 ($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"); // $datafields_obj = new DataFields(); if ($this->module->config->getValue("Main", "addinfo")) { $info = " " . count($sem_data); $info .= $this->module->config->getValue("Main", "textlectures"); $info .= ", " . $this->module->config->getValue("Main", "textgrouping"); $group_by_name = $this->module->config->getValue("Main", "aliasesgrouping"); $info .= $group_by_name[$this->sem_browse_data['group_by']]; $out = $this->module->elements["InfoCountSem"]->toString(array("content" => $info)); } else $out = ""; $first_loop = TRUE; $repeat_headrow = $this->module->config->getValue("Main", "repeatheadrow"); foreach ($group_by_data as $group_field => $sem_ids) { $group_content = $this->getGroupContent($the_tree, $group_field); if ($repeat_headrow == "beneath") { $out .= $this->module->elements["Grouping"]->toString(array("content" => $group_content)); $out .= $this->module->elements["TableHeadrow"]->toString(); } if($first_loop && $repeat_headrow != "beneath") $out .= $this->module->elements["TableHeadrow"]->toString(); if ($repeat_headrow != "beneath") { if ($repeat_headrow && !$first_loop) $out .= $this->module->elements["TableHeadrow"]->toString(); $out .= $this->module->elements["Grouping"]->toString(array("content" => $group_content)); } $first_loop = FALSE; if (is_array($sem_ids['Seminar_id'])) { $zebra = 0; while (list($seminar_id,) = each($sem_ids['Seminar_id'])) { $sem_name = 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"]); if ($sem_number_start != $sem_number_end){ $sem_name .= " (" . $this->sem_dates[$sem_number_start]['name'] . " - "; $sem_name .= (($sem_number_end == -1) ? _("unbegrenzt") : $this->sem_dates[$sem_number_end]['name']) . ")"; } //create Turnus field $data["content"]["zeiten"] = Seminar::GetInstance($seminar_id)->getDatesExport(array('show_room' => true)); //Shorten, if string too long if (strlen($data["content"]["zeiten"]) >70) { $data["content"]["zeiten"] = substr($data["content"]["zeiten"], 0, strpos(substr($data["content"]["zeiten"], 70, strlen($data["content"]["zeiten"])), ",") +71); $data["content"]["zeiten"] .= "..."; } $data["content"]["zeiten"] = htmlReady($data["content"]["zeiten"]); $doz_position = array_keys($sem_data[$seminar_id]['position']); $doz_name = array_keys($sem_data[$seminar_id]['fullname']); $doz_uname = array_keys($sem_data[$seminar_id]['username']); if (is_array($doz_name)){ if(count($doz_position) != count($doz_uname)) $doz_position = range(1, count($doz_uname)); array_multisort($doz_position, $doz_name, $doz_uname); $data["content"]["dozent"] = ""; $i = 0; foreach ($doz_name as $index => $value) { if ($i == 4) { $data["content"]["dozent"] .= $this->module->elements["LecturerLink"]->toString( array("module" => "Lecturedetails", "link_args" => "seminar_id=$seminar_id", "content" => "...")); break; } $data["content"]["dozent"] .= $this->module->elements["LecturerLink"]->toString( array("module" => "Persondetails", "link_args" => "username="******"&seminar_id=$seminar_id", "content" => htmlReady($value))); if ($i != count($doz_name) - 1) { $data["content"]["dozent"] .= ", "; } ++$i; } } $data["content"]["Name"] = $this->module->elements["SemLink"]->toString( array("module" => "Lecturedetails", "link_args" => "seminar_id=$seminar_id", "content" => htmlReady($sem_name))); $data["content"]["VeranstaltungsNummer"] = htmlReady(key($sem_data[$seminar_id]["VeranstaltungsNummer"])); $data["content"]["Untertitel"] = htmlReady(key($sem_data[$seminar_id]["Untertitel"])); $aliases_sem_type = $this->module->config->getValue("ReplaceTextSemType", "class_" . $SEM_TYPE[key($sem_data[$seminar_id]["status"])]['class']); if ($aliases_sem_type[$this->sem_types_position[key($sem_data[$seminar_id]["status"])] - 1]) { $data["content"]["status"] = $aliases_sem_type[$this->sem_types_position[key($sem_data[$seminar_id]["status"])] - 1]; } else { $data["content"]["status"] = htmlReady($SEM_TYPE[key($sem_data[$seminar_id]["status"])]["name"] ." (". $SEM_CLASS[$SEM_TYPE[key($sem_data[$seminar_id]["status"])]["class"]]["name"].")"); } $data["content"]["Ort"] = Seminar::getInstance($seminar_id)->getDatesTemplate('dates/seminar_export_location'); if ($sem_data[$seminar_id]["art"]) $data["content"]["art"] = htmlReady(key($sem_data[$seminar_id]["art"])); else $data["content"]["art"] = ""; // generic data fields if (is_array($generic_datafields)) { $localEntries = DataFieldEntry::getDataFieldEntries($seminar_id); foreach ($generic_datafields as $id) { if (isset($localEntries[$id]) && is_object($localEntries[$id])) { $data["content"][$id] = $localEntries[$id]->getDisplayValue(); } } } $data["data_fields"] = $this->module->data_fields; $out .= $this->module->elements["TableRow"]->toString($data); } } } ob_end_clean(); $this->module->elements["TableHeader"]->printout(array("content" => $out)); } }
/** * A person applies for a course. */ function apply_action() { $user_id = $GLOBALS['user']->id; $courseset = CourseSet::getSetForCourse($this->course_id); $this->course_name = PageLayout::getTitle(); if ($courseset) { $errors = $courseset->checkAdmission($user_id, $this->course_id); if (count($errors)) { $this->courseset_message = $courseset->toString(true); $this->admission_error = MessageBox::error(_("Die Anmeldung war nicht erfolgreich."), $errors); foreach ($courseset->getAdmissionRules() as $rule) { $admission_form .= $rule->getInput(); } if ($admission_form) { $this->admission_form = $admission_form; } } else { if ($courseset->isSeatDistributionEnabled()) { if ($courseset->hasAlgorithmRun()) { if ($courseset->getSeatDistributionTime()) { $msg = _("Die Plätze in dieser Veranstaltung wurden automatisch verteilt."); } if (StudipLock::get('enrolment' . $this->course_id)) { $course = Course::find($this->course_id); if ($course->getFreeSeats() && !$course->getNumWaiting()) { $enrol_user = true; } else { if ($course->isWaitlistAvailable()) { $seminar = new Seminar($course); if ($seminar->addToWaitlist($user_id, 'last')) { $msg_details[] = sprintf(_("Alle Plätze sind belegt, Sie wurden daher auf Platz %s der Warteliste gesetzt."), $maxpos); } } else { $this->admission_error = MessageBox::error(_("Die Anmeldung war nicht erfolgreich. Alle Plätze sind belegt und es steht keine Warteliste zur Verfügung.")); } } } else { $this->admission_error = MessageBox::error(_("Die Anmeldung war wegen technischer Probleme nicht erfolgreich. Bitte versuchen Sie es später noch einmal.")); } } else { $msg = _("Die Plätze in dieser Veranstaltung werden automatisch verteilt."); if ($limit = $courseset->getAdmissionRule('LimitedAdmission')) { $msg_details[] = sprintf(_("Diese Veranstaltung gehört zu einem Anmeldeset mit %s Veranstaltungen. Sie können maximal %s davon belegen. Bei der Verteilung werden die von Ihnen gewünschten Prioritäten berücksichtigt."), count($courseset->getCourses()), $limit->getMaxNumber()); $this->user_max_limit = $limit->getMaxNumberForUser($user_id); if (get_config('IMPORTANT_SEMNUMBER')) { $order = "ORDER BY VeranstaltungsNummer, Name"; } else { $order = "ORDER BY Name"; } $this->priocourses = Course::findMany($courseset->getCourses(), $order); $this->user_prio = AdmissionPriority::getPrioritiesByUser($courseset->getId(), $user_id); $this->max_limit = $limit->getMaxNumber(); $this->prio_stats = AdmissionPriority::getPrioritiesStats($courseset->getId()); $this->already_claimed = count($this->user_prio); } else { $this->priocourses = Course::find($this->course_id); $this->already_claimed = array_key_exists($this->course_id, AdmissionPriority::getPrioritiesByUser($courseset->getId(), $user_id)); } $msg_details[] = _("Zeitpunkt der automatischen Verteilung: ") . strftime("%x %X", $courseset->getSeatDistributionTime()); $this->num_claiming = count(AdmissionPriority::getPrioritiesByCourse($courseset->getId(), $this->course_id)); if ($this->already_claimed) { $msg_details[] = _("Sie sind bereits für die Verteilung angemeldet."); } } $this->courseset_message = MessageBox::info($msg, $msg_details); } else { $enrol_user = true; } } } else { $enrol_user = true; } if ($enrol_user) { $course = Seminar::GetInstance($this->course_id); if ($course->admission_prelim) { if (!$course->isStudygroup() && $course->admission_prelim_txt && !Request::submitted('apply')) { $this->admission_prelim_txt = $course->admission_prelim_txt; $this->admission_prelim_comment = Config::get()->ADMISSION_PRELIM_COMMENT_ENABLE; $this->admission_form = $this->render_template_as_string('course/enrolment/prelim'); } else { if (Request::get('admission_comment')) { $admission_comment = get_fullname() . ': ' . Request::get('admission_comment'); } else { $admission_comment = ''; } if ($course->addPreliminaryMember($user_id, $admission_comment)) { if ($course->isStudygroup()) { if (StudygroupModel::isInvited($user_id, $this->course_id)) { // an invitation exists, so accept the join request automatically $status = 'autor'; StudygroupModel::accept_user(get_username($user_id), $this->course_id); StudygroupModel::cancelInvitation(get_username($user_id), $this->course_id); $success = sprintf(_("Sie wurden in die Veranstaltung %s als %s eingetragen."), $course->getName(), get_title_for_status($status, 1)); PageLayout::postMessage(MessageBox::success($success)); } else { $success = sprintf(_("Sie wurden auf die Anmeldeliste der Studiengruppe %s eingetragen. Die Moderatoren der Studiengruppe können Sie jetzt freischalten."), $course->getName()); PageLayout::postMessage(MessageBox::success($success)); } } else { $success = sprintf(_("Sie wurden in die Veranstaltung %s vorläufig eingetragen."), $course->getName()); PageLayout::postMessage(MessageBox::success($success)); } } } } else { $status = 'autor'; if ($course->addMember($user_id, $status)) { $success = sprintf(_("Sie wurden in die Veranstaltung %s als %s eingetragen."), $course->getName(), get_title_for_status($status, 1)); PageLayout::postMessage(MessageBox::success($success)); $this->enrol_user = true; if (StudygroupModel::isInvited($user_id, $this->course_id)) { // delete an existing invitation StudygroupModel::cancelInvitation(get_username($user_id), $this->course_id); } } } unset($this->courseset_message); } StudipLock::release(); }
public function cancelAdmissionSubscription($users, $status) { $messaging = new messaging(); $query = "DELETE FROM admission_seminar_user WHERE seminar_id = ? AND user_id = ? AND status = ?"; $db = DBManager::get()->prepare($query); $cs = Seminar::GetInstance($this->course_id)->getCourseSet(); foreach ($users as $user_id) { $temp_user = UserModel::getUser($user_id); if ($cs) { $prio_delete = AdmissionPriority::unsetPriority($cs->getId(), $user_id, $this->course_id); } $db->execute(array($this->course_id, $user_id, $status)); if ($db->rowCount() > 0 || $prio_delete) { setTempLanguage($user_id); if ($status !== 'accepted') { $message = sprintf(_("Sie wurden von %s oder Admin von der Warteliste der Veranstaltung **%s** gestrichen und sind damit __nicht__ zugelassen worden."), get_title_for_status('dozent', 1), $this->course_title); } else { $message = sprintf(_("Sie wurden von %s oder Admin aus der Veranstaltung **%s** gestrichen und sind damit __nicht__ zugelassen worden."), get_title_for_status('dozent', 1), $this->course_title); } restoreLanguage(); $messaging->insert_message($message, $temp_user['username'], '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _("nicht zugelassen in Veranstaltung")), TRUE); log_event('SEM_USER_DEL', $this->course_id, $user_id, 'Wurde aus der Veranstaltung rausgeworfen'); $msgs[] = $temp_user['Vorname'] . ' ' . $temp_user['Nachname']; } } return $msgs; }
function syncronizeMetaDates() { $changed = false; if ($this->getOwnerType() == "sem") { $sem = Seminar::GetInstance($this->getAssignUserId()); if (!$sem->is_new) { $key = $sem->getMetaDatesKey($this->begin, $this->end); if (!is_null($key)) { $sem->setMetaDateValue($key, 'resource_id', $this->resource_id); $sem->setMetaDateValue($key, 'room_description', ''); $changed = $sem->store(); } } } return $changed; }
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; //select view to jump from the schedule if ($view_mode == "oobj") $view = "openobject_assign"; else $view = "edit_object_assign"; $start_time = $this->start_time; $end_time = $this->end_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; } if ($this->resources_groups->getGroupCount($this->group_id)){ $schedule=new SemGroupScheduleDayOfWeek($start_hour, $end_hour,$this->resources_groups->getGroupContent($this->group_id), $start_time, false); $schedule->add_link = "resources.php?cancel_edit_assign=1&quick_view=$view&quick_view_mode=".$view_mode."&add_ts="; $num_rep_events = 0; $num_single_events = 0; $num = 1; foreach ($this->resources_groups->getGroupContent($this->group_id) as $resource_to_show_id => $resource_id){ //fill the schedule $assign_events=new AssignEventList ($start_time, $end_time, $resource_id, '', '', TRUE, $_SESSION['resources_data']["show_repeat_mode"]); while ($event=$assign_events->nextEvent()) { $repeat_mode = $event->getRepeatMode(TRUE); if(in_array($repeat_mode, array('w','d','m','y'))){ $assign = AssignObject::Factory($event->getAssignId()); switch($event->repeat_mode){ case 'd': $add_info = '('.sprintf(_("täglich, %s bis %s"), strftime('%x',$assign->getBegin()), strftime('%x',$assign->getRepeatEnd())).')'; break; case 'w': if($assign->getRepeatInterval() == 1) $add_info = '('._("wöchentlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("wöchentlich").')'; break; case 'm': if($assign->getRepeatInterval() == 1) $add_info = '('._("monatlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("monatlich").')'; break; case 'y': if($assign->getRepeatInterval() == 1) $add_info = '('._("jährlich").')'; else $add_info = '('.$assign->getRepeatInterval().'-'._("jährlich").')'; break; } } else { $add_info = ''; } if (in_array($event->getOwnerType(), array('sem','date'))){ $sem_doz_names = array(); $c = 0; if ($event->getOwnerType() == 'sem'){ $sem_obj = Seminar::GetInstance($event->getAssignUserId()); } else { $sem_obj = Seminar::GetInstance(Seminar::GetSemIdByDateId($event->getAssignUserId())); } foreach($sem_obj->getMembers('dozent') as $dozent){ $sem_doz_names[] = $dozent['Nachname']; if (++$c > 2) break; } $add_info .= '(' . join(', ', $sem_doz_names) . ')'; } $schedule->addEvent($resource_to_show_id, $event->getName(get_config('RESOURCES_SCHEDULE_EXPLAIN_USER_NAME')), $event->getBegin(), $event->getEnd(), URLHelper::getLink('?show_object='.$resource_id.'&cancel_edit_assign=1&quick_view='.$view.'&quick_view_mode='.$view_mode.'&edit_assign_object='.$event->getAssignId()), $add_info, $categories[$repeat_mode]); } } } else { return; } if(!$print_view){ ?> <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() ?>" width="10%" align="left"> <a href="<? echo URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&previous_day=1')?>"><?= Icon::create('arr_2left', 'clickable', ['title' => _("Vorherigen Tag anzeigen")])->asImg(16, ["alt" => _("Vorherigen Tag anzeigen"), "border" => 0]) ?></a> </td> <td class="<? echo $cssSw->getClass() ?>" width="76%" align="center" style="font-weight:bold"> <? echo htmlReady(strftime('%A, %x (KW %V)', $start_time)); ?> <br> <?php $this->showSemWeekNumber($start_time); ?> </td> <td class="<? echo $cssSw->getClass() ?>" width="10%" align="center"> <a href="<? echo URLHelper::getLink('?quick_view='.$this->used_view.'&quick_view_mode='.$view_mode.'&next_day=1')?>"><?= Icon::create('arr_2right', 'clickable', ['title' => _("Nächsten Tag anzeigen")])->asImg(16, ["alt" => _("Nächsten Tag anzeigen"), "border" => 0]) ?></a> </td> </tr> <tr> <td class="<? $cssSw->switchClass(); echo $cssSw->getClass() ?>" 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() ?>" 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() ?>" width="4%"> </td> <td class="<? echo $cssSw->getClass() ?>" width="96%" colspan="3"> <? $schedule->showSchedule("html"); ?> </td> </tr> <tr> <td class="<? echo $cssSw->getClass() ?>" 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> <? } else { ?> <table border="0" cellpadding="0" cellspacing="0" width="100%" align="center"> <tr> <td align="center"> <div style="font-size:150%;font-weight:bold;"> <?=htmlReady($this->resources_groups->getGroupName($this->group_id))?> <br> <? echo htmlReady(strftime('%A, %x (KW %V)', $start_time));?> <br> <?php $this->showSemWeekNumber($start_time); ?> </div> </td> </tr> <tr> <td> <? $schedule->showSchedule("html", true); ?> </td> </tr> </table> <? } }
/** * Enter description here... * * @param unknown_type $seminar_id * @return unknown */ public static function GetBySeminarId($seminar_id) { return self::GetByTypeId(Seminar::GetInstance($seminar_id)->status); }
/** * Sets the start semester for the given course. * * @param String $course_id Id of the course */ public function setSemester_action($course_id) { $current_semester = Semester::findCurrent(); $start_semester = Semester::find(Request::get('startSemester')); if (Request::int('endSemester') != -1) { $end_semester = Semester::find(Request::get('endSemester')); } else { $end_semester = -1; } $course = Seminar::GetInstance($course_id); if ($start_semester == $end_semester) { $end_semester = 0; } if ($end_semester != 0 && $end_semester != -1 && $start_semester->beginn >= $end_semester->beginn) { PageLayout::postMessage(MessageBox::error(_('Das Startsemester liegt nach dem Endsemester!'))); } else { $course->setStartSemester($start_semester->beginn); if ($end_semester != -1) { $course->setEndSemester($end_semester->beginn); } else { $course->setEndSemester($end_semester); } //$course->removeAndUpdateSingleDates(); // If the new duration includes the current semester, we set the semester-chooser to the current semester if ($current_semester->beginn >= $course->getStartSemester() && $current_semester->beginn <= $course->getEndSemesterVorlesEnde()) { $course->setFilter($current_semester->beginn); } else { // otherwise we set it to the first semester $course->setFilter($course->getStartSemester()); } } $course->store(); SeminarCycleDate::removeOutRangedSingleDates($course->getStartSemester(), $course->getEndSemesterVorlesEnde(), $course->id); $cycles = SeminarCycleDate::findBySeminar_id($course->seminar_id); foreach ($cycles as $cycle) { $new_dates = $cycle->createTerminSlots($start_semester->beginn); foreach ($new_dates as $semester_id => $dates) { foreach ($dates['dates'] as $date) { $date->store(); } } } $messages = $course->getStackedMessages(); foreach ($messages as $type => $msg) { PageLayout::postMessage(MessageBox::$type($msg['title'], $msg['details'])); } if (Request::submitted('save_close')) { $this->relocate(str_replace('_', '/', Request::get('origin')), array('cid' => $course_id)); } else { $this->redirect($this->url_for('course/timesrooms/index', array('cid' => $course_id))); } }
/** * this functions extracts all the dates, which are corresponding to a metadate * * @param string seminar_id * @return array ["metadate_numer"]["termin_id"] * "metadate_number" the numerber of the corresponding metadate. first metadate (in chronological order) is always 0 * "termin_id" the termin_id that are corresponding to the given metdat_number * */ function getMetadateCorrespondingDates($sem_id, $presence_dates_only) { $sem = Seminar::GetInstance($sem_id); $types = getPresenceTypes(); foreach ($sem->getMetaDates() as $key => $val) { $termine = $sem->getSingleDatesForCycle($key); foreach ($termine as $val) { if ($presence_dates_only) { foreach ($types as $tp) { if ($val->getDateType() == $tp) { $zw[$val->getSingleDateID()] = TRUE; break; } } } else { $zw[$val->getSingleDateID()] = TRUE; } } $result[] = $zw; $zw = ''; } return $result; }
/** * 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')); }
private function createSidebar($filtered_members) { $sidebar = Sidebar::get(); $sem = Seminar::GetInstance($this->course_id); if ($this->is_tutor) { $widget = new ActionsWidget(); $url = URLHelper::getLink('dispatch.php/messages/write', array('course_id' => $this->course_id, 'default_subject' => $this->subject, 'filter' => 'all', 'emailrequest' => 1)); $widget->addLink(_('Nachricht an alle (Rundmail)'), $url, Icon::create('inbox', 'clickable'), array('data-dialog' => "buttons")); if ($this->is_dozent) { if (!$this->dozent_is_locked) { $sem_institutes = $sem->getInstitutes(); if (SeminarCategories::getByTypeId($sem->status)->only_inst_user) { $search_template = "user_inst"; } else { $search_template = "user"; } // create new search for dozent $searchtype = new PermissionSearch($search_template, sprintf(_("%s suchen"), get_title_for_status('dozent', 1, $sem->status)), "user_id", array('permission' => 'dozent', 'exclude_user' => array(), 'institute' => $sem_institutes)); // quickfilter: dozents of institut $sql = "SELECT user_id FROM user_inst WHERE Institut_id = ? AND inst_perms = 'dozent'"; $db = DBManager::get(); $statement = $db->prepare($sql, array(PDO::FETCH_NUM)); $statement->execute(array(Seminar::getInstance($this->course_id)->getInstitutId())); $membersOfInstitute = $statement->fetchAll(PDO::FETCH_COLUMN, 0); // add "add dozent" to infobox $mp = MultiPersonSearch::get('add_dozent' . $this->course_id)->setLinkText(sprintf(_('Neue/n %s eintragen'), $this->status_groups['dozent']))->setDefaultSelectedUser($filtered_members['dozent']->pluck('user_id'))->setLinkIconPath("")->setTitle(sprintf(_('Neue/n %s eintragen'), $this->status_groups['dozent']))->setExecuteURL(URLHelper::getLink('dispatch.php/course/members/execute_multipersonsearch_dozent'))->setSearchObject($searchtype)->addQuickfilter(sprintf(_('%s der Einrichtung'), $this->status_groups['dozent']), $membersOfInstitute)->setNavigationItem('/course/members/view')->render(); $element = LinkElement::fromHTML($mp, Icon::create('community+add', 'clickable')); $widget->addElement($element); } if (!$this->tutor_is_locked) { $sem_institutes = $sem->getInstitutes(); if (SeminarCategories::getByTypeId($sem->status)->only_inst_user) { $search_template = 'user_inst'; } else { $search_template = 'user'; } // create new search for tutor $searchType = new PermissionSearch($search_template, sprintf(_('%s suchen'), get_title_for_status('tutor', 1, $sem->status)), 'user_id', array('permission' => array('dozent', 'tutor'), 'exclude_user' => array(), 'institute' => $sem_institutes)); // quickfilter: tutors of institut $sql = "SELECT user_id FROM user_inst WHERE Institut_id = ? AND inst_perms = 'tutor'"; $db = DBManager::get(); $statement = $db->prepare($sql, array(PDO::FETCH_NUM)); $statement->execute(array(Seminar::getInstance($this->course_id)->getInstitutId())); $membersOfInstitute = $statement->fetchAll(PDO::FETCH_COLUMN, 0); // add "add tutor" to infobox $mp = MultiPersonSearch::get("add_tutor" . $this->course_id)->setLinkText(sprintf(_('Neue/n %s eintragen'), $this->status_groups['tutor']))->setDefaultSelectedUser($filtered_members['tutor']->pluck('user_id'))->setLinkIconPath("")->setTitle(sprintf(_('Neue/n %s eintragen'), $this->status_groups['tutor']))->setExecuteURL(URLHelper::getLink('dispatch.php/course/members/execute_multipersonsearch_tutor'))->setSearchObject($searchType)->addQuickfilter(sprintf(_('%s der Einrichtung'), $this->status_groups['tutor']), $membersOfInstitute)->setNavigationItem('/course/members/view')->render(); $element = LinkElement::fromHTML($mp, Icon::create('community+add', 'clickable')); $widget->addElement($element); } } if (!$this->is_locked) { // create new search for members $searchType = new SQLSearch("SELECT auth_user_md5.user_id, CONCAT(" . $GLOBALS['_fullname_sql']['full'] . ", \" (\", auth_user_md5.username, \")\") as fullname " . "FROM auth_user_md5 " . "LEFT JOIN user_info ON (user_info.user_id = auth_user_md5.user_id) " . "WHERE (CONCAT(auth_user_md5.Vorname, \" \", auth_user_md5.Nachname) LIKE :input " . "OR CONCAT(auth_user_md5.Nachname, \" \", auth_user_md5.Vorname) LIKE :input " . "OR auth_user_md5.username LIKE :input) " . "AND auth_user_md5.perms IN ('autor', 'tutor', 'dozent') " . " AND auth_user_md5.visible <> 'never' " . "ORDER BY Vorname, Nachname", _("Teilnehmer suchen"), "username"); // quickfilter: tutors of institut $sql = "SELECT user_id FROM user_inst WHERE Institut_id = ? AND inst_perms = 'autor'"; $db = DBManager::get(); $statement = $db->prepare($sql, array(PDO::FETCH_NUM)); $statement->execute(array(Seminar::getInstance($this->course_id)->getInstitutId())); $membersOfInstitute = $statement->fetchAll(PDO::FETCH_COLUMN, 0); // add "add autor" to infobox $mp = MultiPersonSearch::get("add_autor" . $this->course_id)->setLinkText(sprintf(_('Neue/n %s eintragen'), $this->status_groups['autor']))->setDefaultSelectedUser($filtered_members['autor']->pluck('user_id'))->setLinkIconPath("")->setTitle(sprintf(_('Neue/n %s eintragen'), $this->status_groups['autor']))->setExecuteURL(URLHelper::getLink('dispatch.php/course/members/execute_multipersonsearch_autor'))->setSearchObject($searchType)->addQuickfilter(sprintf(_('%s der Einrichtung'), $this->status_groups['autor']), $membersOfInstitute)->setNavigationItem('/course/members/view')->render(); $element = LinkElement::fromHTML($mp, Icon::create('community+add', 'clickable')); $widget->addElement($element); // add "add person to waitlist" to sidebar if ($sem->isAdmissionEnabled() && !$sem->admission_disable_waitlist && (!$sem->getFreeSeats() || $sem->admission_disable_waitlist_move)) { $ignore = array_merge($filtered_members['dozent']->pluck('user_id'), $filtered_members['tutor']->pluck('user_id'), $filtered_members['autor']->pluck('user_id'), $filtered_members['user']->pluck('user_id'), $filtered_members['awaiting']->pluck('user_id')); $mp = MultiPersonSearch::get('add_waitlist' . $this->course_id)->setLinkText(_('Neue/n Person auf Warteliste eintragen'))->setDefaultSelectedUser($ignore)->setLinkIconPath('')->setTitle(_('Neue/n Person auf Warteliste eintragen'))->setExecuteURL(URLHelper::getLink('dispatch.php/course/members/execute_multipersonsearch_waitlist'))->setSearchObject($searchType)->addQuickfilter(_('Mitglieder der Einrichtung'), $membersOfInstitute)->setNavigationItem('/course/members/view')->render(); $element = LinkElement::fromHTML($mp, Icon::create('community+add', 'clickable')); $widget->addElement($element); } } $widget->addLink(_('Teilnehmerliste importieren'), $this->url_for('course/members/import_autorlist'), Icon::create('community+add', 'clickable')); $sidebar->addWidget($widget); if (Config::get()->EXPORT_ENABLE) { include_once $GLOBALS['PATH_EXPORT'] . '/export_linking_func.inc.php'; $widget = new ExportWidget(); // create csv-export link $csvExport = export_link($this->course_id, "person", sprintf('%s %s', htmlReady($this->status_groups['autor']), htmlReady($this->course_title)), 'csv', 'csv-teiln', '', _('Teilnehmendenliste als csv-Dokument exportieren'), 'passthrough'); $widget->addLink(_('Teilnehmendenliste als CSV-Dokument exportieren'), $this->parseHref($csvExport), Icon::create('file-office', 'clickable')); // create csv-export link $rtfExport = export_link($this->course_id, "person", sprintf('%s %s', htmlReady($this->status_groups['autor']), htmlReady($this->course_title)), 'rtf', 'rtf-teiln', '', _('Teilnehmendenliste als rtf-Dokument exportieren'), 'passthrough'); $widget->addLink(_('Teilnehmendenliste als rtf-Dokument exportieren'), $this->parseHref($rtfExport), Icon::create('file-text', 'clickable')); if (count($this->awaiting) > 0) { $awaiting_rtf = export_link($this->course_id, "person", sprintf('%s %s', _("Warteliste"), htmlReady($this->course_title)), "rtf", "rtf-warteliste", $this->waiting_type, _("Warteliste als Textdokument (.rtf) exportieren"), 'passthrough'); $widget->addLink(_('Warteliste als rtf-Dokument exportieren'), $this->parseHref($awaiting_rtf), Icon::create('file-office+export', 'clickable')); $awaiting_csv = export_link($this->course_id, "person", sprintf('%s %s', _("Warteliste"), htmlReady($this->course_title)), "csv", "csv-warteliste", $this->waiting_type, _("Warteliste als Tabellendokument (.csv) exportieren"), 'passthrough'); $widget->addLink(_('Warteliste als csv-Dokument exportieren'), $this->parseHref($awaiting_csv), Icon::create('file-text+export', 'clickable')); } $sidebar->addWidget($widget); } } else { if ($this->is_autor || $this->is_user) { // Visibility preferences if (!$this->my_visibility['iam_visible']) { $text = _('Sie sind für andere Teilnehmenden auf der Teilnehmendenliste nicht sichtbar.'); $icon = Icon::create('visibility-visible', 'clickable'); $modus = 'make_visible'; $link_text = _('Klicken Sie hier, um sichtbar zu werden.'); } else { $text = _('Sie sind für andere Teilnehmenden auf der Teilnehmendenliste sichtbar.'); $icon = Icon::create('visibility-invisible', 'clickable'); $modus = 'make_invisible'; $link_text = _('Klicken Sie hier, um unsichtbar zu werden.'); } $actions = new ActionsWidget(); $actions->addLink($link_text, $this->url_for('course/members/change_visibility', $modus, $this->my_visibility['visible_mode']), $icon, array('title' => $text)); $sidebar->addWidget($actions); } } }
/** * * @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; }
/** * This function updates an admission procedure * * The function checks, if user could be insert to the seminar. * The User gets a message, if he is inserted to the seminar * * @param string seminar_id the seminar_id of the seminar to calculate * @param boolean send_message should a system-message be send? * */ function normal_update_admission($seminar_id, $send_message = TRUE) { $messaging=new messaging; //Daten holen / Abfrage ob ueberhaupt begrenzt $seminar = Seminar::GetInstance($seminar_id); if($seminar->isAdmissionEnabled()){ $sem_preliminary = ($seminar->admission_prelim == 1); $cs = $seminar->getCourseSet(); //Veranstaltung einfach auffuellen (nach Lostermin und Ende der Kontingentierung) if (!$seminar->admission_disable_waitlist_move && $cs->hasAlgorithmRun()) { //anzahl der freien Plaetze holen $count = (int)$seminar->getFreeAdmissionSeats(); //Studis auswaehlen, die jetzt aufsteigen koennen $query = "SELECT user_id, username FROM admission_seminar_user LEFT JOIN auth_user_md5 USING (user_id) WHERE seminar_id = ? AND status = 'awaiting' ORDER BY position LIMIT " . (int)$count; $statement = DBManager::get()->prepare($query); $statement->execute(array($seminar->getId())); $temp = $statement->fetchAll(PDO::FETCH_ASSOC); foreach ($temp as $row) { //ok, here ist the "colored-group" meant (for grouping on meine_seminare), not the grouped seminars as above! $group = select_group($seminar->getSemesterStartTime()); if (!$sem_preliminary) { $query = "INSERT INTO seminar_user (user_id, Seminar_id, status, gruppe, mkdate) VALUES (?, ?, 'autor', ?, UNIX_TIMESTAMP())"; $statement = DBManager::get()->prepare($query); $statement->execute(array( $row['user_id'], $seminar->getId(), $group )); $affected = $statement->rowCount(); NotificationCenter::postNotification('UserDidEnterCourse', $seminar->getId(), $row['user_id']); } else { $query = "UPDATE admission_seminar_user SET status = 'accepted' WHERE user_id = ? AND seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array( $row['user_id'], $seminar->getId() )); $affected = $statement->rowCount(); } if ($affected > 0) { $log_message = 'Wurde automatisch aus der Warteliste in die Veranstaltung eingetragen.'; StudipLog::log('SEM_USER_ADD', $seminar->getId(), $row['user_id'], $sem_preliminary ? 'accepted' : 'autor', $log_message); if (!$sem_preliminary) { $query = "DELETE FROM admission_seminar_user WHERE user_id = ? AND seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array( $row['user_id'], $seminar->getId() )); $affected = $statement->rowCount(); } else { $affected = 0; } //User benachrichtigen if (($sem_preliminary || $affected > 0) && $send_message) { setTempLanguage($row['user_id']); if (!$sem_preliminary) { $message = sprintf (_('Sie sind in die Veranstaltung **%s (%s)** eingetragen worden, da für Sie ein Platz frei geworden ist. Ab sofort finden Sie die Veranstaltung in der Übersicht Ihrer Veranstaltungen. Damit sind Sie auch für die Präsenzveranstaltung zugelassen.'), $seminar->getName(), $seminar->getFormattedTurnus(true)); } else { $message = sprintf (_('Sie haben den Status vorläufig akzeptiert in der Veranstaltung **%s (%s)** erhalten, da für Sie ein Platz freigeworden ist.'), $seminar->getName(), $seminar->getFormattedTurnus(true)); } $subject = sprintf(_("Teilnahme an der Veranstaltung %s"),$seminar->getName()); restoreLanguage(); $messaging->insert_message($message, $row['username'], '____%system%____', FALSE, FALSE, '1', FALSE, $subject, true); } } } //Warteposition der restlichen User neu eintragen renumber_admission($seminar_id, FALSE); } $seminar->restore(); } }
if ((!is_array($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["detected_overlaps"])) || ($marked_clip_ids) || ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["reload"])) { unset ($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["reload"]); if (!isset($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_low"])) { $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_low"] = 0; $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["search_limit_high"] = 10; } $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["considered_resources"] = array(); $semester = new SemesterData; $all_semester = $semester->getAllSemesterData(); $reqObj = new RoomRequest($_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["request_id"]); $semObj = Seminar::GetInstance($reqObj->getSeminarId(), true); $multiOverlaps = new CheckMultipleOverlaps(); $semResAssign = new VeranstaltungResourcesAssign($semObj->getId()); //add the requested ressource to selection if ($reqObj->getResourceId()) $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["considered_resources"][$reqObj->getResourceId()] = array("type"=>"requested"); //add resource_ids from room groups if (get_config('RESOURCES_ENABLE_GROUPING')){ $room_group = RoomGroups::GetInstance(); $group_id = $_SESSION['resources_data']['actual_room_group']; if ($room_group->getGroupCount($group_id)){ foreach ($room_group->getGroupContent($group_id) as $val) { $_SESSION['resources_data']["requests_working_on"][$_SESSION['resources_data']["requests_working_pos"]]["considered_resources"][$val] = array("type"=>"grouped"); }
function get_folder_pathes($semId) { if (isset($semId)) { $seminar = \Seminar::GetInstance($semId); $seminar_name = \Helper::cleanFilename($seminar->getName()); $folder_tree = \TreeAbstract::GetInstance('StudipDocumentTree', array('range_id' => $semId)); //$folder_ids = array_keys($folder_tree->tree_data); //unset($folder_ids[0]); // root element löschen $folder_ids = $folder_tree->getReadableFolders($GLOBALS['user']->id); $folder_paths = array(); foreach ($folder_ids as $folder_id) { if (!$folder_tree->hasKids($folder_id)) { $folder_paths[] = $seminar_name . "/" . \Helper::cleanFilename(eregi_replace("/virtual/", "", eregi_replace(" / ", "/", $folder_tree->getItemPath($folder_id)))); } } return $folder_paths; } return false; }