diff --git a/include/filter.class.php b/include/filter.class.php
index d60e673cd..c3d1d6ac1 100644
--- a/include/filter.class.php
+++ b/include/filter.class.php
@@ -1,454 +1,511 @@
-
- */
-require_once(dirname(__FILE__).'/basis_db.class.php');
-
-class filter extends basis_db
-{
- private $new = true; // boolean
- public $result = array(); // Objekte
-
- //Tabellenspalten
- protected $filter_id; // integer (PK)
- protected $kurzbz; // varchar(32) unique
- protected $bezeichnung; // varchar(64) (label shown before filter dropdown)
- protected $sql; // text
- protected $valuename; // varchar(32)
- protected $showvalue; // boolean (should the value be showed in the input widget
- protected $type; // varchar (32) type of input widget
- protected $htmlattr; // text (HTML Attributes for the Input Widget
- protected $updateamum; // timestamp
- protected $updatevon; // varchar
- protected $insertamum; // timestamp
- protected $insertvon; // varchar
-
- protected $values=array();
-
- /**
- * Konstruktor
- */
- public function __construct()
- {
- parent::__construct();
- }
-
- public function __set($name,$value)
- {
- $this->$name=$value;
- }
-
- public function __get($name)
- {
- return $this->$name;
- }
-
-
- /**
- * Laden eines Filters
- * @param filter_id ID des Datensatzes, der geladen werden soll
- * @return boolean true wenn ok, false im Fehlerfall
- */
- public function load($filter_id)
- {
- if(!is_numeric($filter_id))
- {
- $this->errormsg = 'Filter_id muss eine gueltige Zahl sein';
- return false;
- }
-
- $qry = "SELECT * FROM public.tbl_filter WHERE filter_id=".$this->db_add_param($filter_id, FHC_INTEGER, false);
-
- if($this->db_query($qry))
- {
- if($row = $this->db_fetch_object())
- {
- $this->filter_id=$row->filter_id;
- $this->kurzbz=$row->kurzbz;
- $this->bezeichnung=$row->bezeichnung;
- $this->sql=$row->sql;
- $this->valuename=$row->valuename;
- $this->showvalue=$this->db_parse_bool($row->showvalue);
- $this->type=$row->type;
- $this->htmlattr=$row->htmlattr;
- $this->insertamum=$row->insertamum;
- $this->insertvon=$row->insertvon;
- $this->updateamum=$row->updateamum;
- $this->updatevon=$row->updatevon;
- $this->new = false;
-
- }
- }
- else
- {
- $this->error_msg = 'Datensatz konnte nicht geladen werden';
- return false;
- }
-
- return true;
- }
-
- /**
- * Laden eines Filters
- * @param filter_id ID des Datensatzes, der geladen werden soll
- * @return boolean true wenn ok, false im Fehlerfall
- */
- public function loadAll()
- {
-
- $qry = "SELECT * FROM public.tbl_filter;";
-
- if($this->db_query($qry))
- {
- while($row = $this->db_fetch_object())
- {
- $obj = new filter();
-
- $obj->filter_id=$row->filter_id;
- $obj->kurzbz=$row->kurzbz;
- $obj->bezeichnung=$row->bezeichnung;
- $obj->sql=$row->sql;
- $obj->valuename=$row->valuename;
- $obj->showvalue = $this->db_parse_bool($row->showvalue);
- $obj->type=$row->type;
- $obj->htmlattr=$row->htmlattr;
- $obj->insertamum=$row->insertamum;
- $obj->insertvon=$row->insertvon;
- $obj->updateamum=$row->updateamum;
- $obj->updatevon=$row->updatevon;
- $obj->new = false;
-
- $this->result[] = $obj;
- }
- }
- else
- {
- $this->errormsg = 'Datensatz konnte nicht geladen werden';
- return false;
- }
-
- return true;
- }
-
- /**
- * Suchen ob Filter vorhanden
- * @param kurzbz des Datensatzes, der gefunden werden soll
- * @return boolean true wenn ok, false im Fehlerfall
- */
- public function isFilter($kurzbz)
- {
- foreach ($this->result as $filter)
- {
- if ($filter->kurzbz==$kurzbz)
- return true;
- }
-
- return false;
- }
-
- /**
- * Filter Bezeichnung des Filters mit einer gegebenen kurzbz holen
- * @param $kurzbz kurzbz des Datensatzes, der gefunden werden soll
- * @return string|boolean Bezeichnung wenn kurzbz gefunden, false andernfalls
- */
- public function getBezeichnungFromKurzbz($kurzbz)
- {
- foreach ($this->result as $filter)
- {
- if ($filter->kurzbz==$kurzbz)
- return $filter->__get('bezeichnung');
- }
-
- return false;
- }
-
- /**
- * Ausgabe des HTML Widgets
- * @param kurzbz des Datensatzes, der gefunden werden soll
- * @return boolean true wenn ok, false im Fehlerfall
- */
- public function getHtmlWidget($kurzbz)
- {
- $html='';
- foreach ($this->result as $filter)
- {
- if ($filter->kurzbz==$kurzbz)
- {
- $html.="\n\t\t\t";
- switch ($filter->type)
- {
- case 'select':
- $html.='";
- break;
- case 'datepicker':
- $html .= '';
- $html .= '';
- break;
- case 'text':
- $html .= 'htmlattr.'>';
- break;
- }
- return $html;
- }
- }
-
- return $this->errormsg;
- }
-
- /**
- * Laden eines Filters
- * @param filter_id ID des Datensatzes, der geladen werden soll
- * @return boolean true wenn ok, false im Fehlerfall
- */
- public function loadValues($sql, $valuename, $showvalue)
- {
- $this->values = array();
-
- // In case a decryption function is used then perform password substitution
- $sql = $this->replaceSQLDecryptionPassword($sql);
-
- if($this->db_query($sql))
- {
- while($row = $this->db_fetch_row())
- {
- $obj=new stdClass();
- $obj->text='';
- for ($i=0; $i<$this->db_num_fields(); $i++)
- {
- if ($this->db_field_name(null,$i)=='value')
- {
- $obj->value=$row[$i];
- if ($showvalue)
- $obj->text.=' ('.$row[$i].') ';
- }
- elseif ($this->db_field_name(null,$i)=='name')
- {
- if ($showvalue)
- $obj->text.=' - '.$row[$i];
- else
- $obj->text.=$row[$i];
- }
- else
- $obj->text.=' - '.$row[$i];
- }
- //$obj->text = mb_substr($obj->text,1);
- $this->values[] = $obj;
- }
- //var_dump($this);
- }
- else
- {
- $this->errormsg = 'Datensatz konnte nicht geladen werden';
- return false;
- }
-
- return true;
- }
-
-
-
- /**
- * Prueft die Variablen auf Gueltigkeit
- * @return true wenn ok, false im Fehlerfall
- */
- protected function validate()
- {
- //Zahlenfelder pruefen
- /* version wird beim speichern automatisch gesetzt
- if(!is_numeric($this->version) && $this->version!=='')
- {
- $this->errormsg='version enthaelt ungueltige Zeichen';
- return false;
- }*/
-
- //Gesamtlaenge pruefen
- if(mb_strlen($this->kurzbz)>32)
- {
- $this->errormsg = 'Kurzbz darf nicht länger als 32 Zeichen sein';
- return false;
- }
-
- //Boleanfelder prüfen
- if(!is_bool($this->showvalue))
- {
- $this->errormsg='Showvalue ist ungueltig';
- return false;
- }
-
- $this->errormsg = '';
- return true;
- }
-
- /**
- * Speichert den aktuellen Datensatz in die Datenbank
- * @param neueVersion boolean default false; wenn gesetzt, dann
- * wird Versionsnummer auf aktuelles Maximum+1 gesetzt. (für 'Save As'
- * Funktion bzw. zum Anlegen komplett neuer Daten)
- * @return true wenn ok, false im Fehlerfall
- */
- public function save($neueVersion=false)
- {
- //Variablen pruefen
- if(!$this->validate())
- return false;
-
- $this->db_query('BEGIN'); //Starting Transaction
-
- if($this->new)
- {
- //Neuen Datensatz einfuegen
- $qry='INSERT INTO public.tbl_filter (kurzbz, bezeichnung, sql, valuename,
- showvalue, type, htmlattr, insertamum, insertvon) VALUES ('.
- $this->db_add_param($this->kurzbz).', '.
- $this->db_add_param($this->bezeichnung).', '.
- $this->db_add_param($this->sql).', '.
- $this->db_add_param($this->valuename).', '.
- $this->db_add_param($this->showvalue, FHC_BOOLEAN).', '.
- $this->db_add_param($this->type).', '.
- $this->db_add_param($this->htmlattr).', '.
- 'now(), '.
- $this->db_add_param($this->insertvon).');';
- }
- else
- {
- //Pruefen ob filter_id eine gueltige Zahl ist
- if(!is_numeric($this->filter_id))
- {
- $this->errormsg = 'filter_id muss eine gueltige Zahl sein';
- return false;
- }
-
- $qry='UPDATE public.tbl_filter SET'.
- ' kurzbz='.$this->db_add_param($this->kurzbz).', '.
- ' bezeichnung='.$this->db_add_param($this->bezeichnung).', '.
- ' sql='.$this->db_add_param($this->sql).', '.
- ' valuename='.$this->db_add_param($this->valuename).', '.
- ' showvalue='.$this->db_add_param($this->showvalue, FHC_BOOLEAN).', '.
- ' type='.$this->db_add_param($this->type).', '.
- ' htmlattr='.$this->db_add_param($this->htmlattr).', '.
- ' updateamum= now(), '.
- ' updatevon='.$this->db_add_param($this->updatevon).' '.
- ' WHERE filter_id='.$this->db_add_param($this->filter_id, FHC_INTEGER, false).';';
- }
-
- if($this->db_query($qry))
- {
- if($this->new)
- {
- //naechste ID aus der Sequence holen
- $qry="SELECT currval('public.seq_filter_filter_id') as id;";
- if($this->db_query($qry))
- {
- if($row = $this->db_fetch_object())
- {
- $this->filter_id = $row->id;
- $this->db_query('COMMIT');
- }
- else
- {
- $this->db_query('ROLLBACK');
- $this->errormsg = "Fehler beim Auslesen der Sequence";
- return false;
- }
- }
- else
- {
- $this->db_query('ROLLBACK');
- $this->errormsg = 'Fehler beim Auslesen der Sequence';
- return false;
- }
- }
- else
- $this->db_query('COMMIT');
-
- }
- else
- {
- $this->errormsg = 'Fehler beim Speichern des Datensatzes';
- return false;
- }
- //echo '
'.var_dump($this).'
';
- return $this->filter_id;
- }
-
- /**
- * Loescht den Datenensatz mit der ID die uebergeben wird
- * @param $filter_id ID die geloescht werden soll
- * @return true wenn ok, false im Fehlerfall
- */
- public function delete($filter_id)
- {
- //Pruefen ob filter_id eine gueltige Zahl ist
- if(!is_numeric($filter_id) || $filter_id === '')
- {
- $this->errormsg = 'filter_id muss eine gültige Zahl sein'."\n";
- return false;
- }
-
- //loeschen des Datensatzes
- $qry="DELETE FROM public.tbl_filter WHERE filter_id=".$this->db_add_param($filter_id, FHC_INTEGER, false).";";
-
- if($this->db_query($qry))
- {
- return true;
- }
- else
- {
- $this->errormsg = 'Fehler beim Löschen der Daten'."\n";
- return false;
- }
- }
-
- /**
- * Ermittelt alle POST/GET-Variablen
- * @return Zeichenkette fuer eine GET-Methode, false im Fehlerfall
- */
- public function getVars()
- {
- $vars='';
- foreach($_REQUEST as $name=>$value)
- {
- if (is_array($value))
- {
- foreach($value AS $val)
- $vars.='&'.$name.'='.$val;
- }
- else
- $vars.='&'.$name.'='.$value;
- }
- //$vars.='&statistik_kurzbz='.$_REQUEST['statistik_kurzbz'];
- return $vars;
- }
-
-}
+
+ */
+require_once(dirname(__FILE__).'/basis_db.class.php');
+
+class filter extends basis_db
+{
+ private $new = true; // boolean
+ public $result = array(); // Objekte
+
+ //Tabellenspalten
+ protected $filter_id; // integer (PK)
+ protected $kurzbz; // varchar(32) unique
+ protected $bezeichnung; // varchar(64) (label shown before filter dropdown)
+ protected $sql; // text
+ protected $valuename; // varchar(32)
+ protected $showvalue; // boolean (should the value be showed in the input widget
+ protected $type; // varchar (32) type of input widget
+ protected $htmlattr; // text (HTML Attributes for the Input Widget
+ protected $updateamum; // timestamp
+ protected $updatevon; // varchar
+ protected $insertamum; // timestamp
+ protected $insertvon; // varchar
+
+ protected $values=array();
+
+ /**
+ * Konstruktor
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ public function __set($name,$value)
+ {
+ $this->$name=$value;
+ }
+
+ public function __get($name)
+ {
+ return $this->$name;
+ }
+
+
+ /**
+ * Laden eines Filters
+ * @param filter_id ID des Datensatzes, der geladen werden soll
+ * @return boolean true wenn ok, false im Fehlerfall
+ */
+ public function load($filter_id)
+ {
+ if(!is_numeric($filter_id))
+ {
+ $this->errormsg = 'Filter_id muss eine gueltige Zahl sein';
+ return false;
+ }
+
+ $qry = "SELECT * FROM public.tbl_filter WHERE filter_id=".$this->db_add_param($filter_id, FHC_INTEGER, false);
+
+ if($this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object())
+ {
+ $this->filter_id=$row->filter_id;
+ $this->kurzbz=$row->kurzbz;
+ $this->bezeichnung=$row->bezeichnung;
+ $this->sql=$row->sql;
+ $this->valuename=$row->valuename;
+ $this->showvalue=$this->db_parse_bool($row->showvalue);
+ $this->type=$row->type;
+ $this->htmlattr=$row->htmlattr;
+ $this->insertamum=$row->insertamum;
+ $this->insertvon=$row->insertvon;
+ $this->updateamum=$row->updateamum;
+ $this->updatevon=$row->updatevon;
+ $this->new = false;
+
+ }
+ }
+ else
+ {
+ $this->error_msg = 'Datensatz konnte nicht geladen werden';
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Laden eines Filters
+ * @param filter_id ID des Datensatzes, der geladen werden soll
+ * @return boolean true wenn ok, false im Fehlerfall
+ */
+ public function loadAll()
+ {
+
+ $qry = "SELECT * FROM public.tbl_filter;";
+
+ if($this->db_query($qry))
+ {
+ while($row = $this->db_fetch_object())
+ {
+ $obj = new filter();
+
+ $obj->filter_id=$row->filter_id;
+ $obj->kurzbz=$row->kurzbz;
+ $obj->bezeichnung=$row->bezeichnung;
+ $obj->sql=$row->sql;
+ $obj->valuename=$row->valuename;
+ $obj->showvalue = $this->db_parse_bool($row->showvalue);
+ $obj->type=$row->type;
+ $obj->htmlattr=$row->htmlattr;
+ $obj->insertamum=$row->insertamum;
+ $obj->insertvon=$row->insertvon;
+ $obj->updateamum=$row->updateamum;
+ $obj->updatevon=$row->updatevon;
+ $obj->new = false;
+
+ $this->result[] = $obj;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Datensatz konnte nicht geladen werden';
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Suchen ob Filter vorhanden
+ * @param kurzbz des Datensatzes, der gefunden werden soll
+ * @return boolean true wenn ok, false im Fehlerfall
+ */
+ public function isFilter($kurzbz)
+ {
+ foreach ($this->result as $filter)
+ {
+ if ($filter->kurzbz==$kurzbz)
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Filter Bezeichnung des Filters mit einer gegebenen kurzbz holen
+ * @param $kurzbz kurzbz des Datensatzes, der gefunden werden soll
+ * @return string|boolean Bezeichnung wenn kurzbz gefunden, false andernfalls
+ */
+ public function getBezeichnungFromKurzbz($kurzbz)
+ {
+ foreach ($this->result as $filter)
+ {
+ if ($filter->kurzbz==$kurzbz)
+ return $filter->__get('bezeichnung');
+ }
+
+ return false;
+ }
+
+ /**
+ * 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)
+ {
+ $html.="\n\t\t\t";
+ switch ($filter->type)
+ {
+ case 'select':
+ $html.='";
+ break;
+ case 'datepicker':
+ $html .= 'kurzbz]))
+ {
+ $html .= ' value="'.$getParams[$filter->kurzbz].'"';
+ }
+ $html .= ' >';
+ $html .= '';
+ break;
+ case 'text':
+ $html .= 'htmlattr;
+ if (isset($getParams[$filter->kurzbz]))
+ {
+ $html .= ' value="'.$getParams[$filter->kurzbz].'"';
+ }
+ $html .= '>';
+ break;
+ }
+ return $html;
+ }
+ }
+
+ return $this->errormsg;
+ }
+
+ /**
+ * Laden eines Filters
+ * @param filter_id ID des Datensatzes, der geladen werden soll
+ * @return boolean true wenn ok, false im Fehlerfall
+ */
+ public function loadValues($sql, $valuename, $showvalue)
+ {
+ $this->values = array();
+
+ // In case a decryption function is used then perform password substitution
+ $sql = $this->replaceSQLDecryptionPassword($sql);
+
+ if($this->db_query($sql))
+ {
+ while($row = $this->db_fetch_row())
+ {
+ $obj=new stdClass();
+ $obj->text='';
+ for ($i=0; $i<$this->db_num_fields(); $i++)
+ {
+ if ($this->db_field_name(null,$i)=='value')
+ {
+ $obj->value=$row[$i];
+ if ($showvalue)
+ $obj->text.=' ('.$row[$i].') ';
+ }
+ elseif ($this->db_field_name(null,$i)=='name')
+ {
+ if ($showvalue)
+ $obj->text.=' - '.$row[$i];
+ else
+ $obj->text.=$row[$i];
+ }
+ else
+ $obj->text.=' - '.$row[$i];
+ }
+ //$obj->text = mb_substr($obj->text,1);
+ $this->values[] = $obj;
+ }
+ //var_dump($this);
+ }
+ else
+ {
+ $this->errormsg = 'Datensatz konnte nicht geladen werden';
+ return false;
+ }
+
+ return true;
+ }
+
+
+
+ /**
+ * Prueft die Variablen auf Gueltigkeit
+ * @return true wenn ok, false im Fehlerfall
+ */
+ protected function validate()
+ {
+ //Zahlenfelder pruefen
+ /* version wird beim speichern automatisch gesetzt
+ if(!is_numeric($this->version) && $this->version!=='')
+ {
+ $this->errormsg='version enthaelt ungueltige Zeichen';
+ return false;
+ }*/
+
+ //Gesamtlaenge pruefen
+ if(mb_strlen($this->kurzbz)>32)
+ {
+ $this->errormsg = 'Kurzbz darf nicht länger als 32 Zeichen sein';
+ return false;
+ }
+
+ //Boleanfelder prüfen
+ if(!is_bool($this->showvalue))
+ {
+ $this->errormsg='Showvalue ist ungueltig';
+ return false;
+ }
+
+ $this->errormsg = '';
+ return true;
+ }
+
+ /**
+ * Speichert den aktuellen Datensatz in die Datenbank
+ * @param neueVersion boolean default false; wenn gesetzt, dann
+ * wird Versionsnummer auf aktuelles Maximum+1 gesetzt. (für 'Save As'
+ * Funktion bzw. zum Anlegen komplett neuer Daten)
+ * @return true wenn ok, false im Fehlerfall
+ */
+ public function save($neueVersion=false)
+ {
+ //Variablen pruefen
+ if(!$this->validate())
+ return false;
+
+ $this->db_query('BEGIN'); //Starting Transaction
+
+ if($this->new)
+ {
+ //Neuen Datensatz einfuegen
+ $qry='INSERT INTO public.tbl_filter (kurzbz, bezeichnung, sql, valuename,
+ showvalue, type, htmlattr, insertamum, insertvon) VALUES ('.
+ $this->db_add_param($this->kurzbz).', '.
+ $this->db_add_param($this->bezeichnung).', '.
+ $this->db_add_param($this->sql).', '.
+ $this->db_add_param($this->valuename).', '.
+ $this->db_add_param($this->showvalue, FHC_BOOLEAN).', '.
+ $this->db_add_param($this->type).', '.
+ $this->db_add_param($this->htmlattr).', '.
+ 'now(), '.
+ $this->db_add_param($this->insertvon).');';
+ }
+ else
+ {
+ //Pruefen ob filter_id eine gueltige Zahl ist
+ if(!is_numeric($this->filter_id))
+ {
+ $this->errormsg = 'filter_id muss eine gueltige Zahl sein';
+ return false;
+ }
+
+ $qry='UPDATE public.tbl_filter SET'.
+ ' kurzbz='.$this->db_add_param($this->kurzbz).', '.
+ ' bezeichnung='.$this->db_add_param($this->bezeichnung).', '.
+ ' sql='.$this->db_add_param($this->sql).', '.
+ ' valuename='.$this->db_add_param($this->valuename).', '.
+ ' showvalue='.$this->db_add_param($this->showvalue, FHC_BOOLEAN).', '.
+ ' type='.$this->db_add_param($this->type).', '.
+ ' htmlattr='.$this->db_add_param($this->htmlattr).', '.
+ ' updateamum= now(), '.
+ ' updatevon='.$this->db_add_param($this->updatevon).' '.
+ ' WHERE filter_id='.$this->db_add_param($this->filter_id, FHC_INTEGER, false).';';
+ }
+
+ if($this->db_query($qry))
+ {
+ if($this->new)
+ {
+ //naechste ID aus der Sequence holen
+ $qry="SELECT currval('public.seq_filter_filter_id') as id;";
+ if($this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object())
+ {
+ $this->filter_id = $row->id;
+ $this->db_query('COMMIT');
+ }
+ else
+ {
+ $this->db_query('ROLLBACK');
+ $this->errormsg = "Fehler beim Auslesen der Sequence";
+ return false;
+ }
+ }
+ else
+ {
+ $this->db_query('ROLLBACK');
+ $this->errormsg = 'Fehler beim Auslesen der Sequence';
+ return false;
+ }
+ }
+ else
+ $this->db_query('COMMIT');
+
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Speichern des Datensatzes';
+ return false;
+ }
+ //echo ''.var_dump($this).'
';
+ return $this->filter_id;
+ }
+
+ /**
+ * Loescht den Datenensatz mit der ID die uebergeben wird
+ * @param $filter_id ID die geloescht werden soll
+ * @return true wenn ok, false im Fehlerfall
+ */
+ public function delete($filter_id)
+ {
+ //Pruefen ob filter_id eine gueltige Zahl ist
+ if(!is_numeric($filter_id) || $filter_id === '')
+ {
+ $this->errormsg = 'filter_id muss eine gültige Zahl sein'."\n";
+ return false;
+ }
+
+ //loeschen des Datensatzes
+ $qry="DELETE FROM public.tbl_filter WHERE filter_id=".$this->db_add_param($filter_id, FHC_INTEGER, false).";";
+
+ if($this->db_query($qry))
+ {
+ return true;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Löschen der Daten'."\n";
+ return false;
+ }
+ }
+
+ /**
+ * Ermittelt alle POST/GET-Variablen
+ * @return Zeichenkette fuer eine GET-Methode, false im Fehlerfall
+ */
+ public function getVars()
+ {
+ $vars='';
+ foreach($_REQUEST as $name=>$value)
+ {
+ if (is_array($value))
+ {
+ foreach($value AS $val)
+ $vars.='&'.$name.'='.$val;
+ }
+ else
+ $vars.='&'.$name.'='.$value;
+ }
+ //$vars.='&statistik_kurzbz='.$_REQUEST['statistik_kurzbz'];
+ return $vars;
+ }
+
+}
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_add_param($studiensemester_kurzbz);
- if (!is_null($datum_stichtag))
- $qry.=" AND datum <=".$this->db_add_param($datum_stichtag);
- $qry.=') ';
- $qry.=" OR (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;
- }
-
- /**
- *
- * 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
';
- }
-
- 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_add_param($studiensemester_kurzbz);
+ if (!is_null($datum_stichtag))
+ $qry.=" AND datum <=".$this->db_add_param($datum_stichtag);
+ $qry.=') ';
+ $qry.=" OR (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;
+ }
+
+ /**
+ *
+ * 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
';
+ }
+
+ 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