/** * Constructor * * Do not use directly, call factory method in base class instead * @access private * @param string $item_id */ function RangeTreeObjectInst($item_id) { parent::RangeTreeObject($item_id); //calling the baseclass constructor $this->initItemDetail(); $this->item_data_mapping = array('Strasse' => _("Straße"), 'Plz' => _("Ort"), 'telefon' => _("Tel."), 'fax' => _("Fax"), 'url' => _("Homepage"), 'email' => _("Kontakt")); $this->item_data['type_num'] = $this->item_data['type']; $this->item_data['type'] = $this->item_data['type'] ? $GLOBALS['INST_TYPE'][$this->item_data['type']]['name'] : $GLOBALS['INST_TYPE'][1]['name']; }
function getItemContent($item_id) { $content = "\n<table width=\"90%\" cellpadding=\"2\" cellspacing=\"2\" align=\"center\" style=\"font-size:10pt\">"; if ($item_id == "root") { $content .= "\n<tr><td class=\"table_header_bold\" align=\"left\">" . htmlReady($this->tree->root_name) . " </td></tr>"; $content .= "\n<tr><td class=\"blank\" align=\"left\">" . htmlReady($this->root_content) . " </td></tr>"; $content .= "\n</table>"; return $content; } $range_object = RangeTreeObject::GetInstance($item_id); $name = $range_object->item_data['type'] ? $range_object->item_data['type'] . ": " : ""; $name .= $range_object->item_data['name']; $content .= "\n<tr><td class=\"table_header_bold\" align=\"left\">" . htmlReady($name) . " </td></tr>"; if (is_array($range_object->item_data_mapping)) { $content .= "\n<tr><td class=\"blank\" align=\"left\">"; foreach ($range_object->item_data_mapping as $key => $value) { if ($range_object->item_data[$key]) { $content .= "<b>" . htmlReady($value) . ":</b> "; $content .= formatLinks($range_object->item_data[$key]) . " "; } } $content .= "</td></tr><tr><td class=\"blank\" align=\"left\">" . "<a href=\"" . URLHelper::getLink("dispatch.php/institute/overview?auswahl=" . $range_object->item_data['studip_object_id']) . "\"" . tooltip(_("Seite dieser Einrichtung in Stud.IP aufrufen")) . ">" . htmlReady($range_object->item_data['name']) . "</a> " . _("in Stud.IP") . "</td></tr>"; } elseif (!$range_object->item_data['studip_object']) { $content .= "\n<tr><td class=\"blank\" align=\"left\">" . _("Dieses Element ist keine Stud.IP-Einrichtung, es hat daher keine Grunddaten.") . "</td></tr>"; } else { $content .= "\n<tr><td class=\"blank\" align=\"left\">" . _("Keine Grunddaten vorhanden!") . "</td></tr>"; } $content .= "\n<tr><td> </td></tr>"; $kategorien =& $range_object->getCategories(); if ($kategorien->numRows) { while ($kategorien->nextRow()) { $content .= "\n<tr><td class=\"table_header_bold\">" . htmlReady($kategorien->getField("name")) . "</td></tr>"; $content .= "\n<tr><td class=\"blank\">" . formatReady($kategorien->getField("content")) . "</td></tr>"; } } else { $content .= "\n<tr><td class=\"blank\">" . _("Keine weiteren Daten vorhanden!") . "</td></tr>"; } $content .= "</table>"; return $content; }
function showContent ($item_id) { echo "<table" . $this->config->getAttributes("RangeTreeLevelName", "table"); echo ">\n<tr><td" . $this->config->getAttributes("RangeTreeLevelName", "td") . ">"; echo "<font" . $this->config->getAttributes("RangeTreeLevelName", "font") . ">"; $alias_names = $this->config->getValue("RangeTreeLevelName", "aliases"); $range_object = RangeTreeObject::GetInstance($item_id); if ($range_object->item_data['type']) $name = $alias_names[$range_object->item_data['type_num'] - 1] . " "; $name .= $range_object->item_data['name']; echo htmlReady($name) ."</font></td></tr>\n</table>\n"; if (is_array($range_object->item_data_mapping)) { echo "</td></tr><tr><td>\n"; echo "<table" . $this->config->getAttributes("RangeTreeLevelContent", "table"); echo ">\n<tr><td" . $this->config->getAttributes("RangeTreeLevelContent", "td") . ">"; $alias_mapping = $this->config->getValue("RangeTreeLevelContent", "mapping"); $aliases = $this->config->getValue("RangeTreeLevelContent", "aliases"); foreach ($alias_mapping as $position => $key) { if ($range_object->item_data[$key]) { echo "<font" . $this->config->getAttributes("RangeTreeLevelContent", "fontalias") . ">"; echo htmlReady($aliases[$position]) . " </font>"; echo "<font" . $this->config->getAttributes("RangeTreeLevelContent", "fontdata") . ">"; echo formatLinks($range_object->item_data[$key]) . " </font>"; } } echo "</td></tr></table>\n"; } }
public function doSearch() { if (!count($this->params)) { return false; } $this->params = array_map('mysql_escape_string', $this->params); $clause = ""; $and_clause = ""; $this->search_result = new DbSnapshot(); $combination = $this->params['combination']; $view = DbView::getView('sem_tree'); if (isset($this->params['sem']) && $this->params['sem'] != 'all') { $sem_number = (int) $this->params['sem']; $clause = " HAVING (sem_number <= {$sem_number} AND (sem_number_end >= {$sem_number} OR sem_number_end = -1)) "; } if (isset($this->params['category']) && $this->params['category'] != 'all') { foreach ($GLOBALS['SEM_TYPE'] as $type_key => $type_value) { if ($type_value['class'] == $this->params['category']) { $sem_types[] = $type_key; } } } if (isset($this->params['type']) && $this->params['type'] != 'all') { unset($sem_types); $sem_types[0] = $this->params['type']; } if (is_array($sem_types)) { $clause = " AND c.status IN('" . join("','", $sem_types) . "') " . $clause; } if ($this->params['scope_choose'] && $this->params['scope_choose'] != 'root') { $sem_tree = TreeAbstract::GetInstance("StudipSemTree", false); $view->params[0] = is_array($sem_types) ? $sem_types : $sem_tree->sem_status; $view->params[1] = $this->visible_only ? "c.visible=1" : "1"; $view->params[2] = $sem_tree->getKidsKids($this->params['scope_choose']); $view->params[2][] = $this->params['scope_choose']; $view->params[3] = $clause; $snap = new DbSnapshot($view->get_query("view:SEM_TREE_GET_SEMIDS")); if ($snap->numRows) { $clause = " AND c.seminar_id IN('" . join("','", $snap->getRows("seminar_id")) . "')" . $clause; } else { return 0; } unset($snap); } if ($this->params['range_choose'] && $this->params['range_choose'] != 'root') { $range_object = RangeTreeObject::GetInstance($this->params['range_choose']); $view->params[0] = $range_object->getAllObjectKids(); $view->params[0][] = $range_object->item_data['studip_object_id']; $view->params[1] = $this->visible_only ? " AND c.visible=1 " : ""; $view->params[2] = $clause; $snap = new DbSnapshot($view->get_query("view:SEM_INST_GET_SEM")); if ($snap->numRows) { $clause = " AND c.seminar_id IN('" . join("','", $snap->getRows("Seminar_id")) . "')" . $clause; } else { return 0; } unset($snap); } if (isset($this->params['lecturer']) && strlen($this->params['lecturer']) > 2) { $view->params[0] = "%" . trim($this->params['lecturer']) . "%"; $view->params[1] = "%" . trim($this->params['lecturer']) . "%"; $view->params[2] = "%" . trim($this->params['lecturer']) . "%"; $view->params[3] = "%" . trim($this->params['lecturer']) . "%"; $view->params[4] = "%" . trim($this->params['lecturer']) . "%"; $result = $view->get_query("view:SEM_SEARCH_LECTURER"); $lecturers = array(); while ($result->next_record()) { $lecturers[] = $result->f('user_id'); } if (count($lecturers)) { $view->params[0] = $this->visible_only ? "c.visible=1" : "1"; $view->params[1] = $lecturers; $view->params[2] = $clause; $snap = new DbSnapshot($view->get_query("view:SEM_SEARCH_LECTURER_ID")); $this->search_result = $snap; $this->found_rows = $this->search_result->numRows; } } if ($combination == "AND" && $this->search_result->numRows) { $and_clause = " AND c.seminar_id IN('" . join("','", $this->search_result->getRows("seminar_id")) . "')"; } if (isset($this->params['title']) && strlen($this->params['title']) > 2 || isset($this->params['sub_title']) && strlen($this->params['sub_title']) > 2 || isset($this->params['number']) && strlen($this->params['number']) > 2 || isset($this->params['comment']) && strlen($this->params['comment']) > 2) { $toFilter = explode(" ", $this->params['title']); $search_for = "(Name LIKE '%" . implode("%' AND Name LIKE '%", $toFilter) . "%')"; $view->params[0] .= $this->params['title'] ? $search_for . " " : " "; $view->params[0] .= $this->params['title'] && $this->params['sub_title'] ? $combination : " "; $view->params[0] .= $this->params['sub_title'] ? " Untertitel LIKE '%" . trim($this->params['sub_title']) . "%' " : " "; $view->params[0] .= ($this->params['title'] || $this->params['sub_title']) && $this->params['comment'] ? $combination : " "; $view->params[0] .= $this->params['comment'] ? " Beschreibung LIKE '%" . trim($this->params['comment']) . "%' " : " "; $view->params[0] .= ($this->params['title'] || $this->params['sub_title'] || $this->params['comment']) && $this->params['number'] ? $combination : " "; $view->params[0] .= $this->params['number'] ? " VeranstaltungsNummer LIKE '%" . trim($this->params['number']) . "%' " : " "; $view->params[0] = ($this->visible_only ? " c.visible=1 AND " : "") . "(" . $view->params[0] . ")"; $view->params[1] = $and_clause . $clause; $snap = new DbSnapshot($view->get_query("view:SEM_SEARCH_SEM")); if ($this->found_rows === false) { $this->search_result = $snap; } else { $this->search_result->mergeSnapshot($snap, "seminar_id", $combination); } $this->found_rows = $this->search_result->numRows; } if ($combination == "AND" && $this->search_result->numRows) { $and_clause = " AND c.seminar_id IN('" . join("','", $this->search_result->getRows("seminar_id")) . "')"; } if (isset($this->params['scope']) && strlen($this->params['scope']) > 2) { $view->params[0] = $this->visible_only ? "c.visible=1" : "1"; $view->params[1] = "%" . trim($this->params['scope']) . "%"; $view->params[2] = $and_clause . $clause; $snap = new DbSnapshot($view->get_query("view:SEM_TREE_SEARCH_SEM")); if ($this->found_rows === false) { $this->search_result = $snap; } else { $this->search_result->mergeSnapshot($snap, "seminar_id", $combination); } $this->found_rows = $this->search_result->numRows; } return $this->found_rows; }
function get_sem_range_tree($item_id, $with_kids) { $range_object = RangeTreeObject::GetInstance($item_id); if ($with_kids) { $inst_ids = $range_object->getAllObjectKids(); } $inst_ids[] = $range_object->item_data['studip_object_id']; $db_view = DbView::getView('sem_tree'); $db_view->params[0] = $inst_ids; $db_view->params[1] = ' AND c.visible=1'; $db_view->params[1] .= is_array($this->sem_browse_data['sem_status']) ? " AND c.status IN('" . join("','", $this->sem_browse_data['sem_status']) . "')" : ""; $db_view->params[2] = is_array($this->sem_number) ? " HAVING sem_number IN (" . join(",", $this->sem_number) . ") OR (sem_number <= " . $this->sem_number[0] . " AND (sem_number_end >= " . $this->sem_number[0] . " OR sem_number_end = -1)) " : ''; $db_snap = new DbSnapshot($db_view->get_query("view:SEM_INST_GET_SEM")); if ($db_snap->numRows) { $sem_ids = $db_snap->getRows("Seminar_id"); $this->sem_browse_data['search_result'] = array_flip($sem_ids); } else { $this->sem_browse_data['search_result'] = array(); } }
/** * Exports data of the given range. * * This function calls the functions that export the data sepcified by the given $export_range. * It calls the function output_data afterwards. * * @access public * @param string $range_id Stud.IP-range_id for export */ function export_range($range_id) { global $o_mode, $range_name, $ex_person_details, $persons, $ex_sem; // Ist die Range-ID eine Einrichtungs-ID? $query = "SELECT Name FROM Institute WHERE Institut_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($range_id)); $name = $statement->fetchColumn(); if ($name) { $range_name = $name; output_data(xml_header(), $o_mode); $output_startet = true; export_inst($range_id); } // Ist die Range-ID eine Fakultaets-ID? Dann auch untergeordnete Institute exportieren! $query = "SELECT Name, Institut_id\n FROM Institute\n WHERE fakultaets_id = ? AND Institut_id != fakultaets_id"; $statement = DBManager::get()->prepare($query); $statement->execute(array($range_id)); while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { if ($row['Name'] != '') { // output_data ( xml_header(), $o_mode); export_inst($row['Institut_id']); } } // Ist die Range-ID eine Seminar-ID? $query = "SELECT Name, Seminar_id, Institut_id\n FROM seminare\n WHERE Seminar_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($range_id)); $row = $statement->fetch(PDO::FETCH_ASSOC); if ($row && $row['Name'] != '') { $range_name = $row['Name']; if (!$output_startet) { output_data(xml_header(), $o_mode); $output_startet = true; } export_inst($row['Institut_id'], $row['Seminar_id']); } // Ist die Range-ID ein Range-Tree-Item? if ($range_id != 'root') { $tree_object = new RangeTreeObject($range_id); $range_name = $tree_object->item_data["name"]; // Tree-Item ist ein Institut: if ($tree_object->item_data['studip_object'] == 'inst') { if (!$output_startet) { output_data(xml_header(), $o_mode); $output_startet = true; } export_inst($tree_object->item_data['studip_object_id']); } // Tree-Item hat Institute als Kinder: $inst_array = $tree_object->GetInstKids(); if (count($inst_array) > 0) { if (!$output_startet) { output_data(xml_header(), $o_mode); $output_startet = true; } while (list($key, $inst_ids) = each($inst_array)) { export_inst($inst_ids); } } } $query = "SELECT 1 FROM sem_tree WHERE sem_tree_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($range_id)); if ($statement->fetchColumn() || $range_id == 'root') { if (!$output_startet) { output_data(xml_header(), $o_mode); $output_startet = true; } if (isset($ex_sem) && ($semester = Semester::find($ex_sem))) { $args = array('sem_number' => array(SemesterData::GetSemesterIndexById($ex_sem))); } else { $args = array(); } if ($range_id != 'root') { $the_tree = TreeAbstract::GetInstance('StudipSemTree', $args); $sem_ids = array_unique($the_tree->getSemIds($range_id, true)); } if (is_array($sem_ids) || $range_id == 'root') { if (is_array($sem_ids)) { $query = "SELECT DISTINCT Institut_id\n FROM seminare\n WHERE Seminar_id IN (?)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($sem_ids)); $to_export = $statement->fetchAll(PDO::FETCH_COLUMN); } else { $sem_ids = 'root'; $query = "SELECT DISTINCT Institut_id\n FROM seminare\n INNER JOIN seminar_sem_tree USING (seminar_id)"; if ($semester) { $query .= " WHERE seminare.start_time <= :begin\n AND (:begin <= (seminare.start_time + seminare.duration_time) OR\n seminare.duration_time = -1)"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':begin', $semester->beginn); $statement->execute(); } else { $statement = DBManager::get()->query($query); } $to_export = $statement->fetchAll(PDO::FETCH_COLUMN); } foreach ($to_export as $inst) { export_inst($inst, $sem_ids); } } } if ($ex_person_details && is_array($persons)) { export_persons(array_keys($persons)); } output_data(xml_footer(), $o_mode, $flush = true); }
function getTooltip($item_id) { if ($item_id == "root") { $ret = $this->root_content ? $this->root_content : _("Keine weitere Info vorhanden"); } else { $range_object = RangeTreeObject::GetInstance($item_id); if (is_array($range_object->item_data_mapping)) { foreach ($range_object->item_data_mapping as $key => $value) { if ($range_object->item_data[$key]) { $info .= $value . ": "; $info .= $range_object->item_data[$key] . " "; } } } $ret = $info ? $info : _("Keine weitere Info vorhanden"); } return $ret; }
function getItemContent($item_id) { if ($item_id == $this->edit_item_id) { return $this->getEditItemContent(); } if ($item_id == $this->move_item_id) { $this->msg[$item_id] = "info§" . sprintf(_("Dieses Element wurde zum Verschieben markiert. Bitte wählen Sie ein Einfügesymbol %s aus, um das Element zu verschieben."), Icon::create('arr_2right', 'sort', ['title' => "Einfügesymbol"])->asImg(16, ["alt" => "Einfügesymbol"])); } $content = "\n<table width=\"90%\" cellpadding=\"2\" cellspacing=\"2\" align=\"center\" style=\"font-size:10pt\">"; $content .= $this->getItemMessage($item_id); $content .= "\n<tr><td align=\"center\">"; if ($this->isItemAdmin($item_id)) { $content .= LinkButton::create(_("Neues Objekt"), URLHelper::getURL($this->getSelf("cmd=NewItem&item_id={$item_id}")), array('title' => _("Innerhalb dieser Ebene ein neues Element einfügen"))); } if ($this->isParentAdmin($item_id) && $item_id != $this->start_item_id && $item_id != "root") { $content .= LinkButton::create(_("Bearbeiten"), URLHelper::getURL($this->getSelf("cmd=EditItem&item_id={$item_id}"))); $content .= LinkButton::create(_("Löschen"), URLHelper::getURL($this->getSelf("cmd=AssertDeleteItem&item_id={$item_id}"))); if ($this->move_item_id == $item_id && $this->mode == "MoveItem") { $content .= LinkButton::create(_("Abbrechen"), URLHelper::getURL($this->getSelf("cmd=Cancel&item_id={$item_id}"))); } else { $content .= LinkButton::create(_("Verschieben"), URLHelper::getURL($this->getSelf("cmd=MoveItem&item_id={$item_id}"))); } } $content .= "</td></tr></table>"; $content .= "\n<table width=\"90%\" cellpadding=\"2\" cellspacing=\"2\" align=\"center\" style=\"font-size:10pt\">"; if ($item_id == "root") { if ($this->isItemAdmin($item_id)) { $view = DbView::getView('range_tree'); $rs = $view->get_query("SELECT i1.Name,i1.Institut_id,COUNT(i2.Institut_id) as num FROM Institute i1 LEFT JOIN Institute i2 ON i1.Institut_id = i2.fakultaets_id AND i2.fakultaets_id<>i2.Institut_id WHERE i1.fakultaets_id=i1.Institut_id GROUP BY i1.Institut_id ORDER BY Name"); $content .= "\n<tr><td align=\"center\">"; $content .= "\n<form action=\"" . URLHelper::getLink($this->getSelf("cmd=InsertFak")) . "\" method=\"post\">" . CSRFProtection::tokenTag() . _("Stud.IP Fakultät einfügen:") . " \n<select style=\"width:300px;vertical-align:middle;\" name=\"insert_fak\">"; while ($rs->next_record()) { $content .= "\n<option value=\"" . $rs->f("Institut_id") . "\">" . htmlReady(my_substr($rs->f("Name") . '(' . $rs->f('num') . ')', 0, 60)) . "</option>"; } $content .= "</select>" . Button::create(_("Fakultät einfügen")) . "</form>"; $content .= " </td></tr>"; } $content .= "\n<tr><td class=\"table_header_bold\" align=\"left\">" . htmlReady($this->tree->root_name) . " </td></tr>"; $content .= "\n<tr><td class=\"blank\" align=\"left\">" . htmlReady($this->root_content) . " </td></tr>"; $content .= "\n</table>"; return $content; } $range_object = RangeTreeObject::GetInstance($item_id); $name = $range_object->item_data['type'] ? $range_object->item_data['type'] . ": " : ""; $name .= $range_object->item_data['name']; $content .= "\n<tr><td class=\"table_header_bold\" align=\"left\" style=\"font-size:10pt\">" . htmlReady($name) . " </td></tr>"; if (is_array($range_object->item_data_mapping)) { $content .= "\n<tr><td class=\"blank\" align=\"left\" style=\"font-size:10pt\">"; foreach ($range_object->item_data_mapping as $key => $value) { if ($range_object->item_data[$key]) { $content .= "<b>" . htmlReady($value) . ":</b> "; $content .= formatLinks($range_object->item_data[$key]) . " "; } } $content .= " "; } elseif (!$range_object->item_data['studip_object']) { $content .= "\n<tr><td class=\"blank\" align=\"left\" style=\"font-size:10pt\">" . _("Dieses Element ist keine Stud.IP-Einrichtung, es hat daher keine Grunddaten."); } else { $content .= "\n<tr><td class=\"blank\" align=\"left\" style=\"font-size:10pt\">" . _("Keine Grunddaten vorhanden!"); } $content .= "\n<div class=\"blank\" align=\"left\" style=\"font-size:10pt\"><b>" . _("Mitarbeiter:") . "</b> " . $range_object->getNumStaff() . "</b></div>"; if ($this->isItemAdmin($item_id) && $range_object->item_data['studip_object']) { $content .= "\n<div class=\"blank\" align=\"center\" style=\"font-size:10pt\">"; $content .= LinkButton::create(_("Grunddaten in Stud.IP bearbeiten"), "dispatch.php/institute/basicdata/index?admin_inst_id=" . $range_object->item_data['studip_object_id']); $content .= "</div>"; } $content .= "</td></tr><tr><td> </td></tr>"; if ($this->mode == "NewCat" && $this->edit_cat_item_id == $item_id) { $categories =& $this->edit_cat_snap; } else { $categories =& $range_object->getCategories(); } if (!$this->isItemAdmin($item_id)) { if ($categories->numRows) { while ($categories->nextRow()) { $content .= "\n<tr><td class=\"table_header_bold\" style=\"font-size:10pt\">" . formatReady($categories->getField("name")) . "</td></tr>"; $content .= "\n<tr><td class=\"blank\" style=\"font-size:10pt\">" . formatReady($categories->getField("content")) . "</td></tr>"; } } else { $content .= "\n<tr><td class=\"blank\" style=\"font-size:10pt\">" . _("Keine weiteren Daten vorhanden!") . "</td></tr>"; } } else { $content .= "<tr><td class=\"blank\" style=\"font-size:10pt\">" . $this->getEditCatContent($item_id, $categories) . "</td></tr>"; } $content .= "</table>"; return $content; }