function get_sem_class()
 {
     $db = new DB_Seminar("SELECT Seminar_id from seminare WHERE seminare.visible=1 AND seminare.status IN ('" . join("','", $this->sem_browse_data['sem_status']) . "')");
     $snap = new DbSnapshot($db);
     $sem_ids = $snap->getRows("Seminar_id");
     if (is_array($sem_ids)) {
         $this->sem_browse_data['search_result'] = array_flip($sem_ids);
     }
     $this->show_result = true;
 }
 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;
 }
Esempio n. 3
0
    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") . ">&nbsp;";
                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>";
        }
    }
    function getContent () {
        global $SEM_TYPE, $SEM_CLASS, $sem_type_tmp;

        if (is_array($this->sem_browse_data['search_result']) && count($this->sem_browse_data['search_result'])) {

            // show only selected subject areas
            $selected_ranges = (array) $this->module->config->getValue('SelectSubjectAreas', 'subjectareasselected');
            $selected_ranges[] = $this->sem_browse_data['start_item_id'];
            if (!$this->module->config->getValue('SelectSubjectAreas', 'selectallsubjectareas')
                    && count($selected_ranges)) {
                if ($this->module->config->getValue('SelectSubjectAreas', 'reverseselection')) {
                    $sem_range_query =  "AND seminar_sem_tree.sem_tree_id NOT IN ('".implode("','", $selected_ranges)."')";
                } else {
                    $sem_range_query =  "AND seminar_sem_tree.sem_tree_id IN ('".implode("','", $selected_ranges)."')";
                }
            } else {
                $sem_range_query = '';
            }

            // show only selected SemTypes
            $selected_semtypes = $this->module->config->getValue('ReplaceTextSemType', 'visibility');
            $sem_types_array = array();
            if (count($selected_semtypes)) {
                for ($i = 0; $i < count($selected_semtypes); $i++) {
                    if ($selected_semtypes[$i] == '1') {
                        $sem_types_array[] = $i + 1;
                    }
                }
                $sem_types_query = "AND seminare.status IN ('" . implode("','", $sem_types_array) . "')";
            } else {
                $sem_types_query = '';
            }

            // number of visible columns
            $group_colspan = array_count_values((array) $this->module->config->getValue("Main", "visible"));

            if ($this->sem_browse_data['group_by'] == 1){
                if (!is_object($this->sem_tree)){
                    $the_tree = TreeAbstract::GetInstance("StudipSemTree");
                } else {
                    $the_tree =& $this->sem_tree->tree;
                }
            $the_tree->buildIndex();
            }

            if (!$this->module->config->getValue("Main", "allseminars")){
                $sem_inst_query = " AND seminare.Institut_id='{$this->module->config->range_id}' ";
            }
            if (!$nameformat = $this->module->config->getValue("Main", "nameformat"))
                $nameformat = "no_title_short";

            $dbv = DbView::getView('sem_tree');

            $query = "SELECT seminare.*
                , Institute.Name AS Institut,Institute.Institut_id,
                seminar_sem_tree.sem_tree_id AS bereich, " . $GLOBALS['_fullname_sql'][$nameformat] ." AS fullname, auth_user_md5.username, Vorname, Nachname, title_front, title_rear,
                " . $dbv->sem_number_sql . " AS sem_number, " . $dbv->sem_number_end_sql . " AS sem_number_end,
                seminar_user.position AS position FROM seminare
                LEFT JOIN seminar_user ON (seminare.Seminar_id=seminar_user.Seminar_id AND seminar_user.status='dozent')
                LEFT JOIN auth_user_md5 USING (user_id)
                LEFT JOIN user_info USING (user_id)
                LEFT JOIN seminar_sem_tree ON (seminare.Seminar_id = seminar_sem_tree.seminar_id)
                LEFT JOIN seminar_inst ON (seminare.Seminar_id = seminar_inst.Seminar_id)
                LEFT JOIN Institute ON (seminar_inst.institut_id = Institute.Institut_id)
                WHERE seminare.Seminar_id IN('" . join("','", array_keys($this->sem_browse_data['search_result']))
                 . "') $sem_inst_query $sem_range_query $sem_types_query";

            $db = new DB_Seminar($query);
            $snap = new DbSnapshot($db);
            $group_field = $this->group_by_fields[$this->sem_browse_data['group_by']]['group_field'];
            $data_fields[0] = "Seminar_id";
            if ($this->group_by_fields[$this->sem_browse_data['group_by']]['unique_field']){
                $data_fields[1] = $this->group_by_fields[$this->sem_browse_data['group_by']]['unique_field'];
            }
            $group_by_data = $snap->getGroupedResult($group_field, $data_fields);
            $sem_data = $snap->getGroupedResult("Seminar_id");
            if ($this->sem_browse_data['group_by'] == 0){
                $group_by_duration = $snap->getGroupedResult("sem_number_end", array("sem_number","Seminar_id"));
                foreach ($group_by_duration as $sem_number_end => $detail){
                    if ($sem_number_end != -1 && ($detail['sem_number'][$sem_number_end - 1] && count($detail['sem_number']) == 1)){
                        continue;
                    } else {
                        foreach ($detail['Seminar_id'] as $seminar_id => $foo){
                            $start_sem = key($sem_data[$seminar_id]["sem_number"]);
                            if ($sem_number_end == -1){
                                if (is_array($this->sem_number)){
                                    $sem_number_end = $this->sem_number[0];
                                } else {
                                    $sem_number_end = count($this->sem_dates)-1;
                                }
                            }
                            for ($i = $start_sem; $i <= $sem_number_end; ++$i){
                                if ($this->sem_number === false || (is_array($this->sem_number) && in_array($i,$this->sem_number))){
                                    if ($group_by_data[$i] && !$tmp_group_by_data[$i]){
                                        foreach($group_by_data[$i]['Seminar_id'] as $id => $bar){
                                            $tmp_group_by_data[$i]['Seminar_id'][$id] = true;
                                        }
                                    }
                                    $tmp_group_by_data[$i]['Seminar_id'][$seminar_id] = true;
                                }
                            }
                        }
                    }
                }
                if (is_array($tmp_group_by_data)){
                    if ($this->sem_number !== false){
                        unset($group_by_data);
                    }
                    foreach ($tmp_group_by_data as $start_sem => $detail){
                        $group_by_data[$start_sem] = $detail;
                    }
                }
            }

            foreach ($group_by_data as $group_field => $sem_ids){
                foreach ($sem_ids['Seminar_id'] as $seminar_id => $foo){
                    $name = strtolower(key($sem_data[$seminar_id]["Name"]));
                    $name = str_replace("ä","ae",$name);
                    $name = str_replace("ö","oe",$name);
                    $name = str_replace("ü","ue",$name);
                    $group_by_data[$group_field]['Seminar_id'][$seminar_id] = $name;
                }
                uasort($group_by_data[$group_field]['Seminar_id'], 'strnatcmp');
            }

            switch ($this->sem_browse_data["group_by"]){
                    case 0:
                    krsort($group_by_data, SORT_NUMERIC);
                    break;

                    case 1:
                    uksort($group_by_data, create_function('$a,$b',
                            '$the_tree = TreeAbstract::GetInstance("StudipSemTree", false);
                            return (int)($the_tree->tree_data[$a]["index"] - $the_tree->tree_data[$b]["index"]);
                            '));
                    break;

                    case 3:
                    if ($order = $this->module->config->getValue("ReplaceTextSemType", "order")) {
                        foreach ((array) $order as $position) {
                            if (isset($group_by_data[$position]))
                                $group_by_data_tmp[$position] = $group_by_data[$position];
                        }
                        $group_by_data = $group_by_data_tmp;
                        unset($group_by_data_tmp);
                    }
                    else {
                        uksort($group_by_data, create_function('$a,$b',
                                'global $SEM_CLASS,$SEM_TYPE;
                                return strnatcasecmp($SEM_TYPE[$a]["name"]." (". $SEM_CLASS[$SEM_TYPE[$a]["class"]]["name"].")",
                                                $SEM_TYPE[$b]["name"]." (". $SEM_CLASS[$SEM_TYPE[$b]["class"]]["name"].")");'));
                    }
                    break;
                    default:
                    uksort($group_by_data, 'strnatcasecmp');
                    break;

            }

            // generic datafields
            $generic_datafields = $this->module->config->getValue("Main", "genericdatafields");

            $content['__GLOBAL__']['LECTURES-COUNT'] = count($sem_data);
            $group_by_name = $this->module->config->getValue("Main", "aliasesgrouping");
            $content['__GLOBAL__']['LECTURES-SUBSTITUTE-GROUPED-BY'] = $group_by_name[$this->sem_browse_data['group_by']];

            $i = 0;
            foreach ((array) $group_by_data as $group_field => $sem_ids) {
                $content['LECTURES']['GROUP'][$i]['GROUP'] = $this->getGroupContent($the_tree, $group_field);
                $content['LECTURES']['GROUP'][$i]['GROUP-NO'] = $i + 1;

                if (is_array($sem_ids['Seminar_id'])) {
                    $zebra = 0;
                    $j = 0;
                    while (list($seminar_id,) = each($sem_ids['Seminar_id'])) {

                //      $sem_name = key($sem_data[$seminar_id]["Name"]);

                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['TITLE'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Name']));

                        $sem_number_start = key($sem_data[$seminar_id]['sem_number']);
                        $sem_number_end = key($sem_data[$seminar_id]['sem_number_end']);
                        $sem_semester = $this->sem_dates[$sem_number_start]['name'];
                        if ($sem_number_start != $sem_number_end){
                            $sem_semester .= ' - ' . ($sem_number_end == -1 ? _("unbegrenzt") : $this->sem_dates[$sem_number_end]['name']);
                        }

                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SEMESTER'] = $sem_semester;

                        // create turnus field
                        $sem_turnus = Seminar::getInstance($seminar_id)->getDatesExport(array('show_room' => true));

                        // shorten, if string too long
                        if (strlen($sem_turnus) > 70) {
                            $sem_turnus = substr($sem_turnus, 0,
                                    strpos(substr($sem_turnus, 70, strlen($sem_turnus)), ",") +71);
                            $sem_turnus .= "...";
                        }
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['CYCLE'] = ExternModule::ExtHtmlReady($sem_turnus);

                        $doz_name = array_keys($sem_data[$seminar_id]['fullname']);
                        $doz_lastname = array_keys($sem_data[$seminar_id]['Nachname']);
                        $doz_firstname = array_keys($sem_data[$seminar_id]['Vorname']);
                        $doz_titlefront = array_keys($sem_data[$seminar_id]['title_front']);
                        $doz_titlerear = array_keys($sem_data[$seminar_id]['title_rear']);
                        $doz_uname = array_keys($sem_data[$seminar_id]['username']);
                        $doz_position = array_keys($sem_data[$seminar_id]['position']);
                        if (sizeof($doz_position) < $doz_name) $doz_position = array_fill(0, sizeof($doz_name), 0);
                        if (is_array($doz_name)){
                            array_multisort($doz_position, $doz_name, $doz_uname);
                            $k = 0;
                            foreach ($doz_name as $index => $value) {
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['PERSONDETAIL-HREF'] = $this->module->elements['LinkInternPersondetails']->createUrl(array('link_args' => 'username='******'LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['FULLNAME'] = ExternModule::ExtHtmlReady($doz_name[$index]);
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['LASTNAME'] = ExternModule::ExtHtmlReady($doz_lastname[$index]);
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['FIRSTNAME'] = ExternModule::ExtHtmlReady($doz_firstname[$index]);
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['TITLEFRONT'] = ExternModule::ExtHtmlReady($doz_titlefront[$index]);
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['TITLEREAR'] = ExternModule::ExtHtmlReady($doz_titlerear[$index]);
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['UNAME'] = $doz_uname[$index];
                                $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTURERS'][$k]['LECTURER-NO'] = $k + 1;
                                $k++;
                            }
                        }

                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['LECTUREDETAILS-HREF'] = $this->module->elements['LinkInternLecturedetails']->createUrl(array('link_args' => 'seminar_id=' . $seminar_id));
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['NUMBER'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['VeranstaltungsNummer']));
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SUBTITLE'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Untertitel']));
                        $aliases_sem_type = $this->module->config->getValue('ReplaceTextSemType', 'class_' . $SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']);
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SEMTYPE-SUBSTITUTE'] = $aliases_sem_type[$this->sem_types_position[key($sem_data[$seminar_id]['status'])] - 1];
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['SEMTYPE'] = ExternModule::ExtHtmlReady($SEM_TYPE[key($sem_data[$seminar_id]['status'])]['name']
                                    .' ('. $SEM_CLASS[$SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']]['name'] . ')');
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['ROOM'] = ExternModule::ExtHtmlReady(Seminar::getInstance($seminar_id)->getDatesTemplate('dates/seminar_export_location'));
                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['FORM'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['art']));

                        // generic data fields
                        if (is_array($generic_datafields)) {
                            $localEntries = DataFieldEntry::getDataFieldEntries($seminar_id, 'sem');
                            #$datafields = $datafields_obj->getLocalFields($seminar_id);
                            $l = 1;
                            foreach ($generic_datafields as $datafield) {
                                if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield])) {
                                    $localEntry = $localEntries[$datafield]->getDisplayValue();
                                    if ($localEntry) {
                                        $content['LECTURES']['GROUP'][$i]['LECTURE'][$j]['DATAFIELD_' . $l] = $localEntry;
                                    }
                                }
                                $l++;
                            }

                        }

                        $j++;
                    }
                }
                $i++;
            }
        } else {
            $content['__GLOBAL__']['LECTURES-COUNT'] = 0;
            $group_by_name = $this->module->config->getValue('Main', 'aliasesgrouping');
            $content['__GLOBAL__']['LECTURES-SUBSTITUTE-GROUPED-BY'] = $group_by_name[$this->sem_browse_data['group_by']];
            $content['LECTURES']['NO-LECTURES']['NO-LECTURES-TEXT'] = ExternModule::ExtHtmlReady($this->module->config->getValue('Main', 'nodatatext'));
        }
        return $content;

    }
Esempio n. 5
0
?>
</b>
    </p>
    <form action="<?php 
echo URLHelper::getLink($the_tree->getSelf("cmd=MarkList"));
?>
" method="post">
    <?php 
echo CSRFProtection::tokenTag();
?>
    <select multiple size="20" name="sem_mark_list[]" style="font-size:8pt;width:100%">
    <?
    $cols = 50;
    if (is_array($_SESSION['_marked_sem']) && count($_SESSION['_marked_sem'])){
        $view->params[0] = array_keys($_SESSION['_marked_sem']);
        $entries = new DbSnapshot($view->get_query("view:SEMINAR_GET_SEMDATA"));
        $sem_data = $entries->getGroupedResult("seminar_id");
        $sem_number = -1;
        foreach($sem_data as $seminar_id => $data){
            if (key($data['sem_number']) != $sem_number){
                $sem_number = key($data['sem_number']);
                echo "\n<option value=\"0\" style=\"font-weight:bold;color:red;\">&nbsp;</option>";
                echo "\n<option value=\"0\" style=\"font-weight:bold;color:red;\">" . $the_tree->tree->sem_dates[$sem_number]['name'] . ":</option>";
                echo "\n<option value=\"0\" style=\"font-weight:bold;color:red;\">" . str_repeat("¯",floor($cols * .8)) . "</option>";
            }
            $sem_name = key($data["Name"]);
            $sem_number_end = key($data["sem_number_end"]);
            if ($sem_number != $sem_number_end){
                $sem_name .= " (" . $the_tree->tree->sem_dates[$sem_number]['name'] . " - ";
                $sem_name .= (($sem_number_end == -1) ? _("unbegrenzt") : $the_tree->tree->sem_dates[$sem_number_end]['name']) . ")";
            }
    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 = "&nbsp;" . 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));
        }
    }
Esempio n. 7
0
 function get_result()
 {
     global $_fullname_sql, $SEM_TYPE, $SEM_CLASS;
     if ($this->sem_browse_data['group_by'] == 1) {
         if (!is_object($this->sem_tree)) {
             $the_tree = TreeAbstract::GetInstance("StudipSemTree", false);
         } else {
             $the_tree = $this->sem_tree->tree;
         }
         if ($this->sem_browse_data['start_item_id'] != 'root' && ($this->sem_browse_data['level'] == "vv" || $this->sem_browse_data['level'] == "sbb")) {
             $allowed_ranges = $the_tree->getKidsKids($this->sem_browse_data['start_item_id']);
             $allowed_ranges[] = $this->sem_browse_data['start_item_id'];
             $sem_tree_query = " AND sem_tree_id IN('" . join("','", $allowed_ranges) . "') ";
         }
         $add_fields = "seminar_sem_tree.sem_tree_id AS bereich,";
         $add_query = "LEFT JOIN seminar_sem_tree ON (seminare.Seminar_id = seminar_sem_tree.seminar_id {$sem_tree_query})";
     } else {
         if ($this->sem_browse_data['group_by'] == 4) {
             $add_fields = "Institute.Name AS Institut,Institute.Institut_id,";
             $add_query = "LEFT JOIN seminar_inst ON (seminare.Seminar_id = seminar_inst.Seminar_id)\n            LEFT JOIN Institute ON (Institute.Institut_id = seminar_inst.institut_id)";
         } else {
             $add_fields = "";
             $add_query = "";
         }
     }
     $dbv = DbView::getView('sem_tree');
     $query = "SELECT seminare.Seminar_id,VeranstaltungsNummer, seminare.status, IF(seminare.visible=0,CONCAT(seminare.Name, ' " . _("(versteckt)") . "'), seminare.Name) AS Name,\n                {$add_fields}" . $_fullname_sql['full'] . " AS fullname, auth_user_md5.username,\n                " . $dbv->sem_number_sql . " AS sem_number, " . $dbv->sem_number_end_sql . " AS sem_number_end, seminar_user.position AS position FROM seminare\n                LEFT JOIN seminar_user ON (seminare.Seminar_id=seminar_user.Seminar_id AND seminar_user.status='dozent')\n                LEFT JOIN auth_user_md5 USING (user_id)\n                LEFT JOIN user_info USING (user_id)\n                {$add_query}\n                WHERE seminare.Seminar_id IN('" . join("','", array_keys($this->sem_browse_data['search_result'])) . "')";
     $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] && count($detail['sem_number']) == 1)) {
                 continue;
             } else {
                 $current_semester_index = SemesterData::GetInstance()->GetSemesterIndexById(Semester::findCurrent()->semester_id);
                 foreach ($detail['Seminar_id'] as $seminar_id => $foo) {
                     $start_sem = key($sem_data[$seminar_id]["sem_number"]);
                     if ($sem_number_end == -1) {
                         if ($this->sem_number === false) {
                             $sem_number_end = $current_semester_index && isset($this->search_obj->sem_dates[$current_semester_index + 1]) ? $current_semester_index + 1 : count($this->search_obj->sem_dates) - 1;
                         } else {
                             $sem_number_end = $this->sem_number[0];
                         }
                     }
                     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);
             if (Config::get()->IMPORTANT_SEMNUMBER && key($sem_data[$seminar_id]['VeranstaltungsNummer'])) {
                 $name = key($sem_data[$seminar_id]['VeranstaltungsNummer']) . ' ' . $name;
             }
             $group_by_data[$group_field]['Seminar_id'][$seminar_id] = $name;
         }
         uasort($group_by_data[$group_field]['Seminar_id'], 'strnatcmp');
     }
     switch ($this->sem_browse_data["group_by"]) {
         case 0:
             krsort($group_by_data, SORT_NUMERIC);
             break;
         case 1:
             uksort($group_by_data, create_function('$a,$b', '$the_tree = TreeAbstract::GetInstance("StudipSemTree", false);
         $the_tree->buildIndex();
         return (int)($the_tree->tree_data[$a]["index"] - $the_tree->tree_data[$b]["index"]);
         '));
             break;
         case 3:
             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;
     }
     return array($group_by_data, $sem_data);
 }
Esempio n. 8
0
// as published by the Free Software Foundation; either version 2
// of the License, or any later version.
// +---------------------------------------------------------------------------+
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// +---------------------------------------------------------------------------+
require_once dirname(__FILE__) . '/studip_cli_env.inc.php';
require_once $GLOBALS['RELATIVE_PATH_RESOURCES'] . "/lib/ResourceObject.class.php";
require_once "lib/classes/DbSnapshot.class.php";
$res_obj = ResourceObject::Factory();
$snap = new DbSnapshot(new DB_Seminar("SELECT resource_id, parent_id FROM resources_objects INNER JOIN resources_categories USING(category_id) WHERE is_room = 1"));
if ($snap->numRows) {
    fwrite(STDOUT, "<?php\n//copy to \$STUDIP_BASE_PATH/config/config_room_groups.inc.php\n//generated " . date('r') . "\n");
    foreach ($snap->getGroupedResult('parent_id') as $parent_id => $rooms) {
        if (is_array($rooms['resource_id'])) {
            $res_obj->restore($parent_id);
            fwrite(STDOUT, "//--------------------------------------------------------------------\n");
            fwrite(STDOUT, "\$room_groups[\$c]['name'] = '" . $res_obj->getPathToString(true) . "';\n");
            foreach (array_keys($rooms['resource_id']) as $room_id) {
                $res_obj->restore($room_id);
                fwrite(STDOUT, "\$room_groups[\$c]['rooms'][] = '{$room_id}';  //" . $res_obj->getPathToString(true) . "\n");
            }
        }
    }
    fwrite(STDOUT, "?>\n");
} else {
Esempio n. 9
0
 /**
  * extends the $item_data array
  *
  * This function fills the $item_data array with fields from the according database table (is of no use in the base class)
  * @abstract 
  * @access private
  */
 function initItemDetail()
 {
     if ($type = $this->item_data['studip_object']) {
         $view = DbView::getView('range_tree');
         $view->params = array($this->tree->studip_objects[$type]['table'], $this->tree->studip_objects[$type]['pk'], $this->item_data['studip_object_id']);
         $snap = new DbSnapshot($view->get_query("view:TREE_OBJECT_DETAIL"));
         if ($snap->numRows) {
             $fields = $snap->getFieldList();
             $snap->nextRow();
             for ($i = 0; $i < count($fields); ++$i) {
                 $this->item_data[$fields[$i]] = $snap->getField($fields[$i]);
             }
         }
         return true;
     }
     return false;
 }