From 146b62d185aab4c5ec56687467320c3172a9df38 Mon Sep 17 00:00:00 2001 From: kindlm Date: Thu, 18 Jan 2024 20:33:03 +0100 Subject: [PATCH 1/2] Filter in GET-Parameter --- include/filter.class.php | 60 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/include/filter.class.php b/include/filter.class.php index f15fd39e9..349a6a6c1 100644 --- a/include/filter.class.php +++ b/include/filter.class.php @@ -184,13 +184,30 @@ class filter extends basis_db } /** - * Ausgabe des HTML Widgets - * @param kurzbz des Datensatzes, der gefunden werden soll + * Ausgabe des HTML Widgets. Parameter, die als GET übergeben werden, werden ausgelesen und vorselektiert + * @param $kurzbz String Kurzbz des Datensatzes, der gefunden werden soll * @return boolean true wenn ok, false im Fehlerfall */ public function getHtmlWidget($kurzbz) { $html=''; + // GET-Parameter parsen und in String rausschreiben + parse_str($this->getVars(), $getParams); + + foreach ($getParams AS $key=>$value) + { + // Vordefinierte Parameter entfernen + if ($key == 'type' || + $key == 'statistik_kurzbz' || + $key == 'report_id' || + $key == 'putlog' || + $key == 'systemfilter_id' || + $key == 'debug') + { + unset($getParams[$key]); + } + } + foreach ($this->result as $filter) { if ($filter->kurzbz==$kurzbz) @@ -206,11 +223,46 @@ class filter extends basis_db $sql = str_replace('$user', $this->db_add_param($user), $filter->sql); $this->loadValues($sql, $filter->valuename, $filter->showvalue); foreach ($this->values as $value) - $html.="\n\t\t\t\t".''; + { + // Wenn ein Attribut als GET-Parameter übergeben wurde, dann vorselektieren + if (isset($getParams[$filter->kurzbz])) + { + //GET-Parameter aufsplitten + $paramsArr = explode(',',$getParams[$filter->kurzbz]); + //echo '
', var_dump($value->value), '
'; + //$value->value = preg_replace('/(.*?)\s*selected.*/im', '$1', $value->value); + $value->value = preg_replace('/"\s*.*/im', '', $value->value); + //echo '
', var_dump($value->value), '
'; + + if (in_array($value->value, $paramsArr)) + $html .= "\n\t\t\t\t".''; + else + { + //$value->value = preg_replace('/(.*?)selected=.selected./', '$1', $value->value); + //$value->value = preg_replace('/(.*?)\s*[selected=?selected?]/', '$1', $value->value); + //$value->value = preg_replace('/(.*?)\s*selected="selected"\s*/', '${1}', $value->value); + //$value->value = preg_replace('/^\s*selected=.*?selected.*?\s*/', ' ', $value->value); + //$value->value = str_replace('selected=', '', $value->value); + + //echo '
', var_dump($value->value), '
'; + $html .= "\n\t\t\t\t".''; + } + } + else + { + //$value->value = str_replace('selected="selected', '', $value->value); + $html .= "\n\t\t\t\t".''; + } + } $html.="\n\t\t\t"; break; case 'datepicker': - $html .= ''; + $html .= 'kurzbz])) + { + $html .= ' value="'.$getParams[$filter->kurzbz].'"'; + } + $html .= ' >'; $html .= ''; From 2f9945728385d44a48743ee4b34906712f64bee7 Mon Sep 17 00:00:00 2001 From: kindlm Date: Thu, 28 Mar 2024 13:54:45 +0100 Subject: [PATCH 2/2] =?UTF-8?q?GET-Parameter=20auch=20f=C3=BCr=20Text=20?= =?UTF-8?q?=C3=BCbernehmen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/filter.class.php | 7 +- include/statistik.class.php | 1311 ++++++++++++++++++----------------- 2 files changed, 662 insertions(+), 656 deletions(-) diff --git a/include/filter.class.php b/include/filter.class.php index 1d574f1cc..c3d1d6ac1 100644 --- a/include/filter.class.php +++ b/include/filter.class.php @@ -268,7 +268,12 @@ class filter extends basis_db $html .= ''; break; case 'text': - $html .= 'htmlattr.'>'; + $html .= 'htmlattr; + if (isset($getParams[$filter->kurzbz])) + { + $html .= ' value="'.$getParams[$filter->kurzbz].'"'; + } + $html .= '>'; break; } return $html; diff --git a/include/statistik.class.php b/include/statistik.class.php index 34477a548..fd48e7d28 100644 --- a/include/statistik.class.php +++ b/include/statistik.class.php @@ -1,655 +1,656 @@ -, - * Andreas Oesterreicher - * Karl Burkhart . - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); - -class statistik extends basis_db -{ - public $new; - public $statistik_obj=array(); - public $result=array(); - - public $statistik_kurzbz; - public $content_id; - public $bezeichnung; - public $url; - public $sql; - public $gruppe; - public $publish; - public $insertamum; - public $insertvon; - public $updateamum; - public $udpatevon; - public $berechtigung_kurzbz; - public $preferences; - - public $studiengang_kz; // integer - public $prestudent_id; // integer - public $geschlecht; // char(1) - public $studiensemester_kurzbz;// varchar(16) - public $ausbildungssemester;// smallint - - public $anzahl; //Hilfsvariable fuer Group BY Abfragen - - // Daten der Statistik - public $data; // DB ressource - public $html; - public $countRows; - public $csv; - public $json; - - /** - * Konstruktor - */ - public function __construct($statistik_kurzbz=null) - { - parent::__construct(); - - if(!is_null($statistik_kurzbz)) - $this->load($statistik_kurzbz); - else - $this->new=true; - } - - /** - * Laedt eine Statistik - * @param $statistik_kurzbz - */ - public function load($statistik_kurzbz) - { - $qry = "SELECT - * - FROM - public.tbl_statistik - WHERE - statistik_kurzbz = " . $this->db_add_param($statistik_kurzbz); - - if($result = $this->db_query($qry)) - { - if($row = $this->db_fetch_object($result)) - { - $this->statistik_kurzbz = $row->statistik_kurzbz; - $this->content_id = $row->content_id; - $this->bezeichnung = $row->bezeichnung; - $this->url = $row->url; - $this->sql = $row->sql; - $this->gruppe = $row->gruppe; - $this->publish = $this->db_parse_bool($row->publish); - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->udpatevon = $row->updatevon; - $this->berechtigung_kurzbz = $row->berechtigung_kurzbz; - $this->preferences = $row->preferences; - $this->new = false; - - return true; - } - else - { - $this->errormsg = 'Dieser Eintrag wurde nicht gefunden: ' . $statistik_kurzbz; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt alle Statistiken - * @return true wenn ok, sonst false - */ - public function getAll($order = FALSE) - { - $qry = 'SELECT * FROM public.tbl_statistik'; - - if($order) - $qry .= ' ORDER BY ' . $order; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new statistik(); - - $obj->statistik_kurzbz = $row->statistik_kurzbz; - $obj->content_id = $row->content_id; - $obj->bezeichnung = $row->bezeichnung; - $obj->url = $row->url; - $obj->sql = $row->sql; - $obj->gruppe = $row->gruppe; - $obj->publish = $this->db_parse_bool($row->publish); - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->berechtigung_kurzbz = $row->berechtigung_kurzbz; - $obj->preferences = $row->preferences; - - $this->result[] = $obj; - } - - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - /** - * Laedt alle Statistiken einer Gruppe, Parameter publish zum Filtern. - * @return true wenn ok, sonst false - */ - public function getGruppe($gruppe,$publish=null) - { - $qry = "SELECT * FROM public.tbl_statistik WHERE gruppe=".$this->db_add_param($gruppe); - if ($publish===true) - $qry.=' AND publish '; - elseif ($publish===false) - $qry.=' AND NOT publish '; - $qry.=' ORDER BY bezeichnung;'; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new statistik(); - - $obj->statistik_kurzbz = $row->statistik_kurzbz; - $obj->content_id = $row->content_id; - $obj->bezeichnung = $row->bezeichnung; - $obj->url = $row->url; - $obj->sql = $row->sql; - $obj->gruppe = $row->gruppe; - $obj->publish = $this->db_parse_bool($row->publish); - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->udpatevon = $row->updatevon; - $obj->berechtigung_kurzbz = $row->berechtigung_kurzbz; - $obj->preferences = $row->preferences; - - $this->result[] = $obj; - } - - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - /** - * Laedt alle Statistik Gruppen, Parameter publish zum Filtern. - * @return true wenn ok, sonst false - */ - public function getAnzahlGruppe($publish = null) - { - $qry = 'SELECT gruppe, count(*) AS anzahl FROM public.tbl_statistik '; - - if($publish === true) - { - $qry .= 'WHERE publish '; - } - elseif($publish === false) - { - $qry .= 'WHERE NOT publish '; - } - - $qry .= ' GROUP BY gruppe ORDER BY gruppe;'; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new statistik(); - - $obj->gruppe = $row->gruppe; - $obj->anzahl = $row->anzahl; - - $this->result[] = $obj; - } - - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - /** - * Speichert einen Statistik Datensatz - * @param $new boolean - * @return boolean true wenn ok false im Fehlerfalls - */ - public function save($new=null) - { - if(is_null($new)) - $new = $this->new; - - /* Da derzeit die statistik_kurzbz der primary key in der DB ist, - * darf er vorerst nur [a-zA-Z0-9_] (\w) enthalten. (bis auf autoincrement - * integer umgestellt ist) - */ - $this->statistik_kurzbz = preg_replace('/\W/', '', $this->statistik_kurzbz); - - if($new) - { - $qry = 'INSERT INTO public.tbl_statistik(statistik_kurzbz, content_id, bezeichnung, url, sql, - gruppe, publish, insertamum, insertvon, updateamum, updatevon, preferences, berechtigung_kurzbz) VALUES('. - $this->db_add_param($this->statistik_kurzbz).','. - $this->db_add_param($this->content_id,FHC_INTEGER).','. - $this->db_add_param($this->bezeichnung).','. - $this->db_add_param($this->url).','. - $this->db_add_param($this->sql).','. - $this->db_add_param($this->gruppe).','. - $this->db_add_param($this->publish, FHC_BOOLEAN).','. - $this->db_add_param($this->insertamum).','. - $this->db_add_param($this->insertvon).','. - $this->db_add_param($this->updateamum).','. - $this->db_add_param($this->updatevon).','. - $this->db_add_param($this->preferences).','. - $this->db_add_param($this->berechtigung_kurzbz).');'; - } - else - { - if($this->statistik_kurzbz_orig=='') - $this->statistik_kurzbz_orig=$this->statistik_kurzbz; - $qry = 'UPDATE public.tbl_statistik SET - content_id='.$this->db_add_param($this->content_id,FHC_INTEGER).','. - ' bezeichnung='.$this->db_add_param($this->bezeichnung).','. - ' statistik_kurzbz='.$this->db_add_param($this->statistik_kurzbz).','. - ' url='.$this->db_add_param($this->url).','. - ' sql='.$this->db_add_param($this->sql).','. - ' gruppe='.$this->db_add_param($this->gruppe).','. - ' publish='.$this->db_add_param($this->publish, FHC_BOOLEAN).','. - ' insertamum='.$this->db_add_param($this->insertamum).','. - ' insertvon='.$this->db_add_param($this->insertvon).','. - ' updateamum='.$this->db_add_param($this->updateamum).','. - ' updatevon='.$this->db_add_param($this->updatevon).','. - ' preferences='.$this->db_add_param($this->preferences).','. - ' berechtigung_kurzbz='.$this->db_add_param($this->berechtigung_kurzbz). - ' WHERE statistik_kurzbz='.$this->db_add_param($this->statistik_kurzbz_orig,FHC_STRING,false); - } - //echo $qry; - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg='Fehler beim Speichern der Daten'; - return false; - } - } - - /** - * Liefert ein Array mit den Menueeintraegen der Statistiken - * Mit dem Returnwert dieser Funktion wird die entsprechende Stelle im - * Menue ueberschrieben - * @return Array fuer Menue - */ - public function getMenueArray() - { - $arr = array(); - - $qry = "SELECT - * - FROM - public.tbl_statistik - ORDER BY gruppe, bezeichnung, statistik_kurzbz"; - - if($result = $this->db_query($qry)) - { - $lastgruppe=''; - while($row = $this->db_fetch_object($result)) - { - if($row->gruppe!='' && $row->gruppe!=$lastgruppe) - { - $arr[$row->gruppe]=array('name'=>$row->gruppe); - $lastgruppe=$row->gruppe; - } - if($row->gruppe!='') - { - $arr[$row->gruppe][$row->statistik_kurzbz]=array('name'=>$row->bezeichnung, 'link'=>APP_ROOT.'vilesci/statistik/statistik_frameset.php?statistik_kurzbz='.$row->statistik_kurzbz, 'target'=>'main'); - if($row->berechtigung_kurzbz!='') - $arr[$row->gruppe][$row->statistik_kurzbz]['permissions']=array($row->berechtigung_kurzbz); - } - else - { - $arr[$row->statistik_kurzbz]=array('name'=>$row->bezeichnung, 'link'=>APP_ROOT.'vilesci/statistik/statistik_frameset.php?statistik_kurzbz='.$row->statistik_kurzbz, 'target'=>'main'); - if($row->berechtigung_kurzbz!='') - $arr[$row->statistik_kurzbz]['permissions']=array($row->berechtigung_kurzbz); - } - } - } - return $arr; - } - - /** - * Loescht einen Eintrag - * - * @param $statistik_kurzbz - * @return true wenn ok, sonst false - */ - public function delete($statistik_kurzbz) - { - $qry = "DELETE FROM public.tbl_statistik WHERE statistik_kurzbz=".$this->db_add_param($statistik_kurzbz).";"; - - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg='Fehler beim Löschen des Eintrages'; - return false; - } - } - - - - /** - * Laedt bestimmte PreStudenten - * @param studiengang_kz KZ des Studienganges der zu Laden ist - * @param studiensemester_kurzbz Studiensemester - * @param ausbildungssemester KZ Ausbildungssemester - * @param datum_stichtag Stichtag im ISO-Format, Ergebniss filtert auf <= (kleiner,gleich) - * @return true wenn ok, false im Fehlerfall - */ - public function get_prestudenten($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester=null, $datum_stichtag=null) - { - if(!is_numeric($studiengang_kz)) - { - $this->errormsg = 'Studiengang_kz muss eine gueltige Zahl sein'; - return false; - } - - if($ausbildungssemester!='' && !is_numeric($ausbildungssemester)) - { - $this->errormsg = 'Ausbildungssemester muss eine gueltige Zahl sein'; - return false; - } - - // Neue Studenten ermitteln - $qry=" - SELECT - DISTINCT prestudent_id, geschlecht, studiengang_kz, ausbildungssemester, studiensemester_kurzbz - FROM - public.tbl_prestudent - JOIN public.tbl_prestudentstatus status USING (prestudent_id) - JOIN public.tbl_person USING (person_id) - WHERE - status_kurzbz='Student' - AND NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz='Student' AND datumdb_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $stat_obj = new statistik(); - $stat_obj->studiengang_kz=$row->studiengang_kz; - $stat_obj->ausbildungssemester=$row->ausbildungssemester; - $stat_obj->prestudent_id=$row->prestudent_id; - $stat_obj->geschlecht=$row->geschlecht; - $stat_obj->studiensemester_kurzbz=$row->studiensemester_kurzbz; - $this->statistik_obj[]=$stat_obj; - } - } - else - { - $this->errormsg = 'Datensatz konnte nicht geladen werden'; - return false; - } - - return true; - } - - /** - * - * Liefert die DropOut Rate - * @param unknown_type $studiengang_kz - * @param unknown_type $studiensemester_kurzbz - * @param unknown_type $ausbildungssemester - * @param unknown_type $datum_stichtag - */ - public function get_DropOut($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester=null, $datum_stichtag=null) - { - $this->statistik_obj=array(); - - if(!is_numeric($studiengang_kz)) - { - $this->errormsg = 'Studiengang_kz muss eine gueltige Zahl sein'; - return false; - } - - if($ausbildungssemester!='' && !is_numeric($ausbildungssemester)) - { - $this->errormsg = 'Ausbildungssemester muss eine gueltige Zahl sein'; - return false; - } - - // Neue Studenten ermitteln - $qry="SELECT DISTINCT prestudent_id, geschlecht, studiengang_kz, ausbildungssemester, studiensemester_kurzbz - FROM tbl_prestudent JOIN tbl_prestudentstatus USING (prestudent_id) JOIN tbl_person USING (person_id) - WHERE (status_kurzbz='Abbrecher') - AND studiengang_kz=".$this->db_add_param($studiengang_kz); - if($ausbildungssemester!='') - $qry.=" AND ausbildungssemester=".$this->db_add_param($ausbildungssemester); - - $qry.=" AND (studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); - if (!is_null($datum_stichtag)) - $qry.=" AND datum <=".$this->db_add_param($datum_stichtag); - $qry.=') '; - $qry.=" ORDER BY prestudent_id;"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $stat_obj = new statistik(); - $stat_obj->studiengang_kz=$row->studiengang_kz; - $stat_obj->ausbildungssemester=$row->ausbildungssemester; - $stat_obj->prestudent_id=$row->prestudent_id; - $stat_obj->geschlecht=$row->geschlecht; - $stat_obj->studiensemester_kurzbz=$row->studiensemester_kurzbz; - $this->statistik_obj[]=$stat_obj; - } - } - else - { - $this->errormsg = 'Datensatz konnte nicht geladen werden'; - return false; - } - - return true; - } - - /** - * Laedt die Daten einer Statistik (derzeit nur SQL) - * @param $statistik_kurzbz - */ - public function loadData() - { - $this->html=''; - $this->csv=''; - $this->json=array(); - $this->countRows=0; - set_time_limit(600); - - // In case a decryption function is used then perform password substitution - $this->sql = $this->replaceSQLDecryptionPassword($this->sql); - - if($this->sql!='') - { - $sql = $this->sql; - - // Wenn im SQL ein $user vorkommt wird das durch den eingeloggten User ersetzt - if(strpos($sql, '$user')!==false) - { - $uid = get_uid(); - $sql = str_replace('$user',$this->db_add_param($uid),$sql); - } - foreach($_REQUEST as $name=>$value) - { - // Inputs, die in eckigen Klammern stehen, werden als Array interpretiert - if (is_string($value) && substr($value, 0, 1) == '[' && substr($value, -1) == ']') - { - //Eckige Klammern entfernen und String aufsplitten - $value = substr($value, 1); - $value = substr($value, 0, -1); - $value = explode(',', $value); - } - if (is_array($value)) - { - $in = $this->db_implode4SQL($value); - $sql = str_replace('$'.$name,$in,$sql); - } - else - $sql = str_replace('$'.$name,$this->db_add_param($value),$sql); - } - if($this->data = $this->db_query($sql)) - { - $this->html.= ''; - $anzahl_spalten = $this->db_num_fields($this->data); - for($spalte=0;$spalte<$anzahl_spalten;$spalte++) - { - $this->html.= ''.$this->convert_html_chars($this->db_field_name($this->data,$spalte)).''; - $this->csv.='"'.$this->db_field_name($this->data,$spalte).'",'; - } - $this->html.= ''; - $this->csv=substr($this->csv,0,-1)."\n"; - while($row = $this->db_fetch_object($this->data)) - { - $this->html.= ''; - $anzahl_spalten = $this->db_num_fields($this->data); - - for($spalte=0;$spalte<$anzahl_spalten;$spalte++) - { - $name = $this->db_field_name($this->data,$spalte); - $this->html.= ''.$this->convert_html_chars($row->$name).''; - // Umwandeln von Punkt in Komma bei Float-Werten - if (is_numeric($row->$name)) - { - if (strpos($row->$name,'.') != false) - $row->$name = number_format($row->$name,2,",",""); - } - $this->csv.= '"'.$row->$name.'",'; - } - - $this->json[] = $row; - $this->html.= ''; - $this->csv=substr($this->csv,0,-1)."\n"; - $this->countRows++; - } - $this->html.= ''; - } - return true; - } - else - { - $this->errormsg= 'Zu dieser Statistik gibt es keine SQL Abfrage'; - return false; - } - } - - function getHtmlTable($id, $class='') - { - return '

'.$this->countRows.' Zeilen

'.$this->html.'
'; - } - - function getCSV() - { - return $this->csv; - } - - function writeCSV($filename, $delimiter=',', $enclosure='"') - { - $fh=fopen($filename,'w'); - - $fieldnames=array(); - for ($i=0; $i < $this->db_num_fields($this->data); $i++) - $fieldnames[]=$this->db_field_name($this->data,$i); - fputcsv($fh, $fieldnames, $delimiter, $enclosure); - $this->db_result_seek($this->data,0); - while ($row = $this->db_fetch_row($this->data)) - fputcsv($fh, $row, $delimiter, $enclosure); - fclose($fh); - return true; - } - - function getJSON() - { - return json_encode($this->json); - } - - function getArray() - { - return $this->json; - } - - /** - * - * Parst Variablen aus einem String und liefert diese als Array zurueck - * @param $value String mit Variablen - * z.B.: "Select * from tbl_person where person_id<'$person_id'" - * oder "../content/statistik/bewerberstatistik.php?stsem=$StSem&stg_kz=$stg_kz" - * - * @return Array mit den Variablennamen - */ - function parseVars($value) - { - $result = array(); - - $check = '/\$[0-9A-z]+/'; - preg_match_all($check, $value, $result); - $result = $result[0]; - $vars = array(); - for($i=0;$i, + * Andreas Oesterreicher + * Karl Burkhart . + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class statistik extends basis_db +{ + public $new; + public $statistik_obj=array(); + public $result=array(); + + public $statistik_kurzbz; + public $content_id; + public $bezeichnung; + public $url; + public $sql; + public $gruppe; + public $publish; + public $insertamum; + public $insertvon; + public $updateamum; + public $udpatevon; + public $berechtigung_kurzbz; + public $preferences; + + public $studiengang_kz; // integer + public $prestudent_id; // integer + public $geschlecht; // char(1) + public $studiensemester_kurzbz;// varchar(16) + public $ausbildungssemester;// smallint + + public $anzahl; //Hilfsvariable fuer Group BY Abfragen + + // Daten der Statistik + public $data; // DB ressource + public $html; + public $countRows; + public $csv; + public $json; + + /** + * Konstruktor + */ + public function __construct($statistik_kurzbz=null) + { + parent::__construct(); + + if(!is_null($statistik_kurzbz)) + $this->load($statistik_kurzbz); + else + $this->new=true; + } + + /** + * Laedt eine Statistik + * @param $statistik_kurzbz + */ + public function load($statistik_kurzbz) + { + $qry = "SELECT + * + FROM + public.tbl_statistik + WHERE + statistik_kurzbz = " . $this->db_add_param($statistik_kurzbz); + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + $this->statistik_kurzbz = $row->statistik_kurzbz; + $this->content_id = $row->content_id; + $this->bezeichnung = $row->bezeichnung; + $this->url = $row->url; + $this->sql = $row->sql; + $this->gruppe = $row->gruppe; + $this->publish = $this->db_parse_bool($row->publish); + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->udpatevon = $row->updatevon; + $this->berechtigung_kurzbz = $row->berechtigung_kurzbz; + $this->preferences = $row->preferences; + $this->new = false; + + return true; + } + else + { + $this->errormsg = 'Dieser Eintrag wurde nicht gefunden: ' . $statistik_kurzbz; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt alle Statistiken + * @return true wenn ok, sonst false + */ + public function getAll($order = FALSE) + { + $qry = 'SELECT * FROM public.tbl_statistik'; + + if($order) + $qry .= ' ORDER BY ' . $order; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new statistik(); + + $obj->statistik_kurzbz = $row->statistik_kurzbz; + $obj->content_id = $row->content_id; + $obj->bezeichnung = $row->bezeichnung; + $obj->url = $row->url; + $obj->sql = $row->sql; + $obj->gruppe = $row->gruppe; + $obj->publish = $this->db_parse_bool($row->publish); + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->berechtigung_kurzbz = $row->berechtigung_kurzbz; + $obj->preferences = $row->preferences; + + $this->result[] = $obj; + } + + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** + * Laedt alle Statistiken einer Gruppe, Parameter publish zum Filtern. + * @return true wenn ok, sonst false + */ + public function getGruppe($gruppe,$publish=null) + { + $qry = "SELECT * FROM public.tbl_statistik WHERE gruppe=".$this->db_add_param($gruppe); + if ($publish===true) + $qry.=' AND publish '; + elseif ($publish===false) + $qry.=' AND NOT publish '; + $qry.=' ORDER BY bezeichnung;'; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new statistik(); + + $obj->statistik_kurzbz = $row->statistik_kurzbz; + $obj->content_id = $row->content_id; + $obj->bezeichnung = $row->bezeichnung; + $obj->url = $row->url; + $obj->sql = $row->sql; + $obj->gruppe = $row->gruppe; + $obj->publish = $this->db_parse_bool($row->publish); + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->udpatevon = $row->updatevon; + $obj->berechtigung_kurzbz = $row->berechtigung_kurzbz; + $obj->preferences = $row->preferences; + + $this->result[] = $obj; + } + + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** + * Laedt alle Statistik Gruppen, Parameter publish zum Filtern. + * @return true wenn ok, sonst false + */ + public function getAnzahlGruppe($publish = null) + { + $qry = 'SELECT gruppe, count(*) AS anzahl FROM public.tbl_statistik '; + + if($publish === true) + { + $qry .= 'WHERE publish '; + } + elseif($publish === false) + { + $qry .= 'WHERE NOT publish '; + } + + $qry .= ' GROUP BY gruppe ORDER BY gruppe;'; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new statistik(); + + $obj->gruppe = $row->gruppe; + $obj->anzahl = $row->anzahl; + + $this->result[] = $obj; + } + + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** + * Speichert einen Statistik Datensatz + * @param $new boolean + * @return boolean true wenn ok false im Fehlerfalls + */ + public function save($new=null) + { + if(is_null($new)) + $new = $this->new; + + /* Da derzeit die statistik_kurzbz der primary key in der DB ist, + * darf er vorerst nur [a-zA-Z0-9_] (\w) enthalten. (bis auf autoincrement + * integer umgestellt ist) + */ + $this->statistik_kurzbz = preg_replace('/\W/', '', $this->statistik_kurzbz); + + if($new) + { + $qry = 'INSERT INTO public.tbl_statistik(statistik_kurzbz, content_id, bezeichnung, url, sql, + gruppe, publish, insertamum, insertvon, updateamum, updatevon, preferences, berechtigung_kurzbz) VALUES('. + $this->db_add_param($this->statistik_kurzbz).','. + $this->db_add_param($this->content_id,FHC_INTEGER).','. + $this->db_add_param($this->bezeichnung).','. + $this->db_add_param($this->url).','. + $this->db_add_param($this->sql).','. + $this->db_add_param($this->gruppe).','. + $this->db_add_param($this->publish, FHC_BOOLEAN).','. + $this->db_add_param($this->insertamum).','. + $this->db_add_param($this->insertvon).','. + $this->db_add_param($this->updateamum).','. + $this->db_add_param($this->updatevon).','. + $this->db_add_param($this->preferences).','. + $this->db_add_param($this->berechtigung_kurzbz).');'; + } + else + { + if($this->statistik_kurzbz_orig=='') + $this->statistik_kurzbz_orig=$this->statistik_kurzbz; + $qry = 'UPDATE public.tbl_statistik SET + content_id='.$this->db_add_param($this->content_id,FHC_INTEGER).','. + ' bezeichnung='.$this->db_add_param($this->bezeichnung).','. + ' statistik_kurzbz='.$this->db_add_param($this->statistik_kurzbz).','. + ' url='.$this->db_add_param($this->url).','. + ' sql='.$this->db_add_param($this->sql).','. + ' gruppe='.$this->db_add_param($this->gruppe).','. + ' publish='.$this->db_add_param($this->publish, FHC_BOOLEAN).','. + ' insertamum='.$this->db_add_param($this->insertamum).','. + ' insertvon='.$this->db_add_param($this->insertvon).','. + ' updateamum='.$this->db_add_param($this->updateamum).','. + ' updatevon='.$this->db_add_param($this->updatevon).','. + ' preferences='.$this->db_add_param($this->preferences).','. + ' berechtigung_kurzbz='.$this->db_add_param($this->berechtigung_kurzbz). + ' WHERE statistik_kurzbz='.$this->db_add_param($this->statistik_kurzbz_orig,FHC_STRING,false); + } + //echo $qry; + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg='Fehler beim Speichern der Daten'; + return false; + } + } + + /** + * Liefert ein Array mit den Menueeintraegen der Statistiken + * Mit dem Returnwert dieser Funktion wird die entsprechende Stelle im + * Menue ueberschrieben + * @return Array fuer Menue + */ + public function getMenueArray() + { + $arr = array(); + + $qry = "SELECT + * + FROM + public.tbl_statistik + ORDER BY gruppe, bezeichnung, statistik_kurzbz"; + + if($result = $this->db_query($qry)) + { + $lastgruppe=''; + while($row = $this->db_fetch_object($result)) + { + if($row->gruppe!='' && $row->gruppe!=$lastgruppe) + { + $arr[$row->gruppe]=array('name'=>$row->gruppe); + $lastgruppe=$row->gruppe; + } + if($row->gruppe!='') + { + $arr[$row->gruppe][$row->statistik_kurzbz]=array('name'=>$row->bezeichnung, 'link'=>APP_ROOT.'vilesci/statistik/statistik_frameset.php?statistik_kurzbz='.$row->statistik_kurzbz, 'target'=>'main'); + if($row->berechtigung_kurzbz!='') + $arr[$row->gruppe][$row->statistik_kurzbz]['permissions']=array($row->berechtigung_kurzbz); + } + else + { + $arr[$row->statistik_kurzbz]=array('name'=>$row->bezeichnung, 'link'=>APP_ROOT.'vilesci/statistik/statistik_frameset.php?statistik_kurzbz='.$row->statistik_kurzbz, 'target'=>'main'); + if($row->berechtigung_kurzbz!='') + $arr[$row->statistik_kurzbz]['permissions']=array($row->berechtigung_kurzbz); + } + } + } + return $arr; + } + + /** + * Loescht einen Eintrag + * + * @param $statistik_kurzbz + * @return true wenn ok, sonst false + */ + public function delete($statistik_kurzbz) + { + $qry = "DELETE FROM public.tbl_statistik WHERE statistik_kurzbz=".$this->db_add_param($statistik_kurzbz).";"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg='Fehler beim Löschen des Eintrages'; + return false; + } + } + + + + /** + * Laedt bestimmte PreStudenten + * @param studiengang_kz KZ des Studienganges der zu Laden ist + * @param studiensemester_kurzbz Studiensemester + * @param ausbildungssemester KZ Ausbildungssemester + * @param datum_stichtag Stichtag im ISO-Format, Ergebniss filtert auf <= (kleiner,gleich) + * @return true wenn ok, false im Fehlerfall + */ + public function get_prestudenten($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester=null, $datum_stichtag=null) + { + if(!is_numeric($studiengang_kz)) + { + $this->errormsg = 'Studiengang_kz muss eine gueltige Zahl sein'; + return false; + } + + if($ausbildungssemester!='' && !is_numeric($ausbildungssemester)) + { + $this->errormsg = 'Ausbildungssemester muss eine gueltige Zahl sein'; + return false; + } + + // Neue Studenten ermitteln + $qry=" + SELECT + DISTINCT prestudent_id, geschlecht, studiengang_kz, ausbildungssemester, studiensemester_kurzbz + FROM + public.tbl_prestudent + JOIN public.tbl_prestudentstatus status USING (prestudent_id) + JOIN public.tbl_person USING (person_id) + WHERE + status_kurzbz='Student' + AND NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz='Student' AND datumdb_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $stat_obj = new statistik(); + $stat_obj->studiengang_kz=$row->studiengang_kz; + $stat_obj->ausbildungssemester=$row->ausbildungssemester; + $stat_obj->prestudent_id=$row->prestudent_id; + $stat_obj->geschlecht=$row->geschlecht; + $stat_obj->studiensemester_kurzbz=$row->studiensemester_kurzbz; + $this->statistik_obj[]=$stat_obj; + } + } + else + { + $this->errormsg = 'Datensatz konnte nicht geladen werden'; + return false; + } + + return true; + } + + /** + * + * Liefert die DropOut Rate + * @param unknown_type $studiengang_kz + * @param unknown_type $studiensemester_kurzbz + * @param unknown_type $ausbildungssemester + * @param unknown_type $datum_stichtag + */ + public function get_DropOut($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester=null, $datum_stichtag=null) + { + $this->statistik_obj=array(); + + if(!is_numeric($studiengang_kz)) + { + $this->errormsg = 'Studiengang_kz muss eine gueltige Zahl sein'; + return false; + } + + if($ausbildungssemester!='' && !is_numeric($ausbildungssemester)) + { + $this->errormsg = 'Ausbildungssemester muss eine gueltige Zahl sein'; + return false; + } + + // Neue Studenten ermitteln + $qry="SELECT DISTINCT prestudent_id, geschlecht, studiengang_kz, ausbildungssemester, studiensemester_kurzbz + FROM tbl_prestudent JOIN tbl_prestudentstatus USING (prestudent_id) JOIN tbl_person USING (person_id) + WHERE (status_kurzbz='Abbrecher') + AND studiengang_kz=".$this->db_add_param($studiengang_kz); + if($ausbildungssemester!='') + $qry.=" AND ausbildungssemester=".$this->db_add_param($ausbildungssemester); + + $qry.=" AND (studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); + if (!is_null($datum_stichtag)) + $qry.=" AND datum <=".$this->db_add_param($datum_stichtag); + $qry.=') '; + $qry.=" ORDER BY prestudent_id;"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $stat_obj = new statistik(); + $stat_obj->studiengang_kz=$row->studiengang_kz; + $stat_obj->ausbildungssemester=$row->ausbildungssemester; + $stat_obj->prestudent_id=$row->prestudent_id; + $stat_obj->geschlecht=$row->geschlecht; + $stat_obj->studiensemester_kurzbz=$row->studiensemester_kurzbz; + $this->statistik_obj[]=$stat_obj; + } + } + else + { + $this->errormsg = 'Datensatz konnte nicht geladen werden'; + return false; + } + + return true; + } + + /** + * Laedt die Daten einer Statistik (derzeit nur SQL) + * @param $statistik_kurzbz + */ + public function loadData() + { + $this->html=''; + $this->csv=''; + $this->json=array(); + $this->countRows=0; + set_time_limit(600); + + // In case a decryption function is used then perform password substitution + $this->sql = $this->replaceSQLDecryptionPassword($this->sql); + + if($this->sql!='') + { + $sql = $this->sql; + + // Wenn im SQL ein $user vorkommt wird das durch den eingeloggten User ersetzt + if(strpos($sql, '$user')!==false) + { + $uid = get_uid(); + $sql = str_replace('$user',$this->db_add_param($uid),$sql); + } + + foreach($_REQUEST as $name=>$value) + { + // Inputs, die in eckigen Klammern stehen, werden als Array interpretiert + if (is_string($value) && substr($value, 0, 1) == '[' && substr($value, -1) == ']') + { + //Eckige Klammern entfernen und String aufsplitten + $value = substr($value, 1); + $value = substr($value, 0, -1); + $value = explode(',', $value); + } + if (is_array($value)) + { + $in = $this->db_implode4SQL($value); + $sql = str_replace('$'.$name,$in,$sql); + } + else + $sql = str_replace('$'.$name,$this->db_add_param($value),$sql); + } + if($this->data = $this->db_query($sql)) + { + $this->html.= ''; + $anzahl_spalten = $this->db_num_fields($this->data); + for($spalte=0;$spalte<$anzahl_spalten;$spalte++) + { + $this->html.= ''.$this->convert_html_chars($this->db_field_name($this->data,$spalte)).''; + $this->csv.='"'.$this->db_field_name($this->data,$spalte).'",'; + } + $this->html.= ''; + $this->csv=substr($this->csv,0,-1)."\n"; + while($row = $this->db_fetch_object($this->data)) + { + $this->html.= ''; + $anzahl_spalten = $this->db_num_fields($this->data); + + for($spalte=0;$spalte<$anzahl_spalten;$spalte++) + { + $name = $this->db_field_name($this->data,$spalte); + $this->html.= ''.$this->convert_html_chars($row->$name).''; + // Umwandeln von Punkt in Komma bei Float-Werten + if (is_numeric($row->$name)) + { + if (strpos($row->$name,'.') != false) + $row->$name = number_format($row->$name,2,",",""); + } + $this->csv.= '"'.$row->$name.'",'; + } + + $this->json[] = $row; + $this->html.= ''; + $this->csv=substr($this->csv,0,-1)."\n"; + $this->countRows++; + } + $this->html.= ''; + } + return true; + } + else + { + $this->errormsg= 'Zu dieser Statistik gibt es keine SQL Abfrage'; + return false; + } + } + + function getHtmlTable($id, $class='') + { + return '

'.$this->countRows.' Zeilen

'.$this->html.'
'; + } + + function getCSV() + { + return $this->csv; + } + + function writeCSV($filename, $delimiter=',', $enclosure='"') + { + $fh=fopen($filename,'w'); + + $fieldnames=array(); + for ($i=0; $i < $this->db_num_fields($this->data); $i++) + $fieldnames[]=$this->db_field_name($this->data,$i); + fputcsv($fh, $fieldnames, $delimiter, $enclosure); + $this->db_result_seek($this->data,0); + while ($row = $this->db_fetch_row($this->data)) + fputcsv($fh, $row, $delimiter, $enclosure); + fclose($fh); + return true; + } + + function getJSON() + { + return json_encode($this->json); + } + + function getArray() + { + return $this->json; + } + + /** + * + * Parst Variablen aus einem String und liefert diese als Array zurueck + * @param $value String mit Variablen + * z.B.: "Select * from tbl_person where person_id<'$person_id'" + * oder "../content/statistik/bewerberstatistik.php?stsem=$StSem&stg_kz=$stg_kz" + * + * @return Array mit den Variablennamen + */ + function parseVars($value) + { + $result = array(); + + $check = '/\$[0-9A-z]+/'; + preg_match_all($check, $value, $result); + $result = $result[0]; + $vars = array(); + for($i=0;$i