aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/StudipSemSearchHelper.class.php
diff options
context:
space:
mode:
authorPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
committerPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
commit4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch)
tree5c07151ae61276d334e88f6309c30d439a85c12e /lib/classes/StudipSemSearchHelper.class.php
parentda0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff)
parent97a188592c679890a25c37ab78463add76a52ff7 (diff)
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'lib/classes/StudipSemSearchHelper.class.php')
-rw-r--r--lib/classes/StudipSemSearchHelper.class.php239
1 files changed, 0 insertions, 239 deletions
diff --git a/lib/classes/StudipSemSearchHelper.class.php b/lib/classes/StudipSemSearchHelper.class.php
deleted file mode 100644
index 29ee5d3..0000000
--- a/lib/classes/StudipSemSearchHelper.class.php
+++ /dev/null
@@ -1,239 +0,0 @@
-<?php
-# Lifter002: TODO
-# Lifter007: TODO
-# Lifter003: TODO
-# Lifter010: TODO
-// +---------------------------------------------------------------------------+
-// This file is part of Stud.IP
-// StudipSemSearchHelper.class.php
-//
-//
-// Copyright (c) 2003 André Noack <noack@data-quest.de>
-// +---------------------------------------------------------------------------+
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// 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.
-// +---------------------------------------------------------------------------+
-
-class StudipSemSearchHelper {
-
- public static function GetQuickSearchFields(){
- return [ 'all' =>_("alles"),
- 'title_lecturer_number' => _("Titel") . ', ' . _("Lehrende") . ', ' . _("Nummer"),
- 'title' => _("Titel"),
- 'sub_title' => _("Untertitel"),
- 'lecturer' => _("Lehrende"),
- 'number' => _("Nummer"),
- 'comment' => _("Kommentar"),
- 'scope' => _("Bereich")];
- }
-
- private $search_result;
- private $found_rows = false;
- private $params = [];
- private $visible_only;
-
- function __construct($form = null, $visible_only = null){
- $params = [];
- if($form instanceof StudipForm){
- foreach($form->getFormFieldsByName(true) as $name){
- $params[$name] = $form->getFormFieldValue($name);
- }
- }
- $this->setParams($params, $visible_only);
- }
-
- public function setParams($params, $visible_only = null)
- {
- if(isset($params['quick_search']) && isset($params['qs_choose'])){
- if($params['qs_choose'] == 'all'){
- foreach (self::GetQuickSearchFields() as $key => $value){
- $params[$key] = $this->trim($params['quick_search']);
- }
- $params['combination'] = 'OR';
- } elseif($params['qs_choose'] == 'title_lecturer_number') {
- foreach (explode('_', 'title_lecturer_number') as $key){
- $params[$key] = $this->trim($params['quick_search']);
- }
- $params['combination'] = 'OR';
- } else {
- $params[$params['qs_choose']] = $this->trim($params['quick_search']);
- }
- }
- if(!isset($params['combination'])) $params['combination'] = 'AND';
- $this->params = $params;
- $this->visible_only = $visible_only;
- }
-
- public function doSearch()
- {
- if (count($this->params) === 0) {
- return false;
- }
- $this->params = array_map('addslashes', $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)) ";
- }
-
- $sem_types = [];
- 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'){
- $sem_types = [$this->params['type']];
- }
- if ($sem_types) {
- $clause = " AND c.status IN('" . join("','",$sem_types) . "') " . $clause;
- }
-
- $view->params = [];
-
- if ($this->params['scope_choose'] && $this->params['scope_choose'] != 'root'){
- $sem_tree = TreeAbstract::GetInstance("StudipSemTree", false);
- $view->params[0] = $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']) && mb_strlen($this->params['lecturer']) > 2){
- $view->params[0] = "%" . $this->trim($this->params['lecturer']) . "%";
- $view->params[1] = "%" . $this->trim($this->params['lecturer']) . "%";
- $view->params[2] = "%" . $this->trim($this->params['lecturer']) . "%";
- $view->params[3] = "%" . $this->trim($this->params['lecturer']) . "%";
- $view->params[4] = "%" . $this->trim($this->params['lecturer']) . "%";
- $result = $view->get_query("view:SEM_SEARCH_LECTURER");
-
- $lecturers = [];
- 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']) && mb_strlen($this->params['title']) > 2) ||
- (isset($this->params['sub_title']) && mb_strlen($this->params['sub_title']) > 2) ||
- (isset($this->params['number']) && mb_strlen($this->params['number']) > 2) ||
- (isset($this->params['comment']) && mb_strlen($this->params['comment']) > 2)){
-
- $toFilter = explode(" ", $this->params['title']);
- $search_for = "(Name LIKE '%" . implode("%' AND Name LIKE '%", $toFilter) . "%')";
- if (!array_key_exists(0, $view->params)) {
- $view->params[0] = '';
- }
- $view->params[0] .= ($this->params['title']) ? $search_for . " " : " ";
- $view->params[0] .= ($this->params['title'] && !empty($this->params['sub_title'])) ? $combination : " ";
- $view->params[0] .= (!empty($this->params['sub_title'])) ? " Untertitel LIKE '%" . $this->trim($this->params['sub_title']) . "%' " : " ";
- $view->params[0] .= (($this->params['title'] || !empty($this->params['sub_title'])) && !empty($this->params['comment'])) ? $combination : " ";
- $view->params[0] .= (!empty($this->params['comment'])) ? " Beschreibung LIKE '%" . $this->trim($this->params['comment']) . "%' " : " ";
- $view->params[0] .= (($this->params['title'] || !empty($this->params['sub_title']) || empty($this->params['comment'])) && $this->params['number']) ? $combination : " ";
- $view->params[0] .= ($this->params['number']) ? " VeranstaltungsNummer LIKE '%" . $this->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']) && mb_strlen($this->params['scope']) > 2){
- $view->params[0] = $this->visible_only ? "c.visible=1" : "1";
- $view->params[1] = "%" . $this->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;
- }
-
- public function getSearchResultAsSnapshot(){
- return $this->search_result;
- }
-
- public function getSearchResultAsArray(){
- if($this->search_result instanceof DBSnapshot && $this->search_result->numRows){
- return array_unique($this->search_result->getRows('seminar_id'));
- } else {
- return [];
- }
- }
-
- private function trim($what)
- {
- $what = trim($what);
- $what = preg_replace("/^\x{00A0}+|\x{00A0}+$/Su", '', $what);
- return $what;
- }
-}