diff --git a/include/ampel.class.php b/include/ampel.class.php index 40f8a503d..445190955 100644 --- a/include/ampel.class.php +++ b/include/ampel.class.php @@ -1,579 +1,586 @@ - and - */ -/** - * Klasse Ampel - * - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); -require_once(dirname(__FILE__).'/sprache.class.php'); - -class ampel extends basis_db -{ - public $new; - public $result = array(); - - //Tabellenspalten - public $ampel_id; // bigint - public $kurzbz; // varchar(64) - public $beschreibung = array(); // text[] - public $benutzer_select;// text - public $deadline; // date - public $vorlaufzeit; // smallint - public $verfallszeit; // smallint - public $email; // boolean - public $verpflichtend; // boolean - public $buttontext; // varchar(64)[] - public $insertamum; // timestamp - public $insertvon; // varchar(32) - public $updateamum; // timestamp - public $updatevon; // varchar(32) - - public $ampel_benutzer_id; // bigint - public $uid; // varchar(32) - - /** - * Konstruktor - Laedt optional eine Ampel - * @param $amepl_id - */ - public function __construct($ampel_id=null) - { - parent::__construct(); - - if(!is_null($ampel_id)) - $this->load($ampel_id); - } - - /** - * Laedt eine Ampel mit der uebergebenen ID - * - * @param $ampel_id - * @return boolean - */ - public function load($ampel_id) - { - if(!is_numeric($ampel_id)) - { - $this->errormsg = 'Ampel ID ist ungueltig'; - return false; - } - - $sprache = new sprache(); - $beschreibung = $sprache->getSprachQuery('beschreibung'); - $buttontext = $sprache->getSprachQuery('buttontext'); - - $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER); - - if($result = $this->db_query($qry)) - { - if($row = $this->db_fetch_object($result)) - { - $this->ampel_id = $row->ampel_id; - $this->kurzbz = $row->kurzbz; - $this->beschreibung = $sprache->parseSprachResult('beschreibung', $row); - $this->benutzer_select = $row->benutzer_select; - $this->deadline = $row->deadline; - $this->vorlaufzeit = $row->vorlaufzeit; - $this->verfallszeit = $row->verfallszeit; - $this->email = $row->email; - $this->verpflichtend = $row->verpflichtend; - $this->buttontext = $sprache->parseSprachResult('buttontext', $row); - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->updatevon = $row->updatevon; - - return true; - } - else - { - $this->errormsg = 'Ampel mit dieser ID exisitert nicht'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Ampel'; - return false; - } - } - - /** - * Laedt alle vorhandenen Ampeln - * @param aktiv lade nur aktive Ampeln - */ - public function getAll($aktiv=false) - { - $sprache = new sprache(); - $beschreibung = $sprache->getSprachQuery('beschreibung'); - $buttontext = $sprache->getSprachQuery('buttontext'); - - $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; - if($aktiv) - { - $qry .= " WHERE (NOW()>(deadline-(vorlaufzeit || ' days')::interval)::date)"; - $qry .= " AND (NOW()<(deadline+(verfallszeit || ' days')::interval)::date)"; - } - $qry .= " ORDER BY deadline"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new ampel(); - - $obj->ampel_id = $row->ampel_id; - $obj->kurzbz = $row->kurzbz; - $obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row); - $obj->benutzer_select = $row->benutzer_select; - $obj->deadline = $row->deadline; - $obj->vorlaufzeit = $row->vorlaufzeit; - $obj->verfallszeit = $row->verfallszeit; - $obj->email = $this->db_parse_bool($row->email); - $obj->verpflichtend = $this->db_parse_bool($row->verpflichtend); - $obj->buttontext = $sprache->parseSprachResult('buttontext', $row); - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg='Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Prueft ob ein User eine Ampel schon bestaetigt hat - * - * @param $user - * @param $ampel_id - * @return boolean - */ - public function isBestaetigt($user, $ampel_id) - { - $qry = "SELECT 1 FROM public.tbl_ampel_benutzer_bestaetigt WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER)." AND uid=".$this->db_add_param($user); - - if($result = $this->db_query($qry)) - { - if($this->db_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg='Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Prueft ob ein User zu einer Ampel zugeteilt ist - * @param $user - * @param $benutzer_select - */ - public function isZugeteilt($user, $benutzer_select) - { - $qry = "SELECT CASE WHEN ".$this->db_add_param($user)." IN (".$benutzer_select.") THEN true ELSE false END as zugeteilt"; - - if($result_zugeteilt = $this->db_query($qry)) - { - if($row_zugeteilt = $this->db_fetch_object($result_zugeteilt)) - { - if($row_zugeteilt->zugeteilt=='t') - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt alle aktuellen Ampeln eines Users - * @param string $user User, dessen Ampeln geladen werden sollen - * @param boolean $bestaetigt Default false - * wenn true, werden alle Ampeln geladen - * wenn false, werden nur die Ampeln geladen die noch NICHT bestaetigt wurden - */ - public function loadUserAmpel($user, $bestaetigt=false) - { - $sprache = new sprache(); - $beschreibung = $sprache->getSprachQuery('beschreibung'); - $buttontext = $sprache->getSprachQuery('buttontext'); - - //all ampeln except where now is before the vorlaufzeit - $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; - - //only ampeln that are not confirmed - if(!$bestaetigt) - { - $qry.=" WHERE NOT EXISTS - (SELECT ampel_id - FROM public.tbl_ampel_benutzer_bestaetigt - WHERE uid=".$this->db_add_param($user)." AND ampel_id=tbl_ampel.ampel_id)"; - } - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - if($this->isZugeteilt($user, $row->benutzer_select)) - { - $obj = new ampel(); - - $obj->ampel_id = $row->ampel_id; - $obj->kurzbz = $row->kurzbz; - $obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row); - $obj->benutzer_select = $row->benutzer_select; - $obj->deadline = $row->deadline; - $obj->vorlaufzeit = $row->vorlaufzeit; - $obj->verfallszeit = $row->verfallszeit; - $obj->email = $row->email; - $obj->verpflichtend = $row->verpflichtend; - $obj->buttontext = $sprache->parseSprachResult('buttontext', $row); - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - - $this->result[] = $obj; - } - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Prueft die Daten vor dem Speichern - * @return boolean - */ - public function validate() - { - $benutzer_select = mb_strtolower($this->benutzer_select); - - if(mb_strstr($benutzer_select, 'update ') || mb_strstr($benutzer_select, 'insert ') || mb_strstr($benutzer_select, 'delete ')) - { - $this->errormsg = 'Der Benutzer Select darf nur Selects beinhalten'; - return false; - } - - if(!mb_strstr($benutzer_select,'select ')) - { - $this->errormsg = 'Der Benutzer Select muss einen Select-Befehl beinhalten'; - return false; - } - return true; - } - - /** - * Speichert eine Ampel - * @param $new - */ - public function save($new=null) - { - if(is_null($new)) - $new = $this->new; - - if(!$this->validate()) - return false; - - $sprache = new sprache(); - $sprache->loadIndexArray(); - - if($this->new) - { - $qry = "BEGIN;INSERT INTO public.tbl_ampel (kurzbz, "; - - foreach($this->beschreibung as $key=>$value) - { - $idx = sprache::$index_arr[$key]; - $qry.=" beschreibung[$idx],"; - } - foreach($this->buttontext as $key=>$value) - { - $idx = sprache::$index_arr[$key]; - $qry.=" buttontext[$idx],"; - } - - $qry.=" benutzer_select, deadline, - vorlaufzeit, verfallszeit, email, verpflichtend, insertamum, insertvon , updateamum, updatevon) VALUES(". - $this->db_add_param($this->kurzbz).','; - reset($this->beschreibung); - foreach($this->beschreibung as $key=>$value) - $qry.=$this->db_add_param($value).','; - reset($this->buttontext); - foreach($this->buttontext as $key=>$value) - $qry.=$this->db_add_param($value).','; - - $qry .= $this->db_add_param($this->benutzer_select).','. - $this->db_add_param($this->deadline).','. - $this->db_add_param($this->vorlaufzeit).','. - $this->db_add_param($this->verfallszeit).','. - $this->db_add_param($this->email, FHC_BOOLEAN).','. - $this->db_add_param($this->verpflichtend, 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).');'; - } - else - { - $qry = 'UPDATE public.tbl_ampel SET'. - ' kurzbz = '.$this->db_add_param($this->kurzbz).','; - reset($this->beschreibung); - foreach($this->beschreibung as $key=>$value) - { - $idx = sprache::$index_arr[$key]; - $qry.=' beschreibung['.$idx.'] = '.$this->db_add_param($value).','; - } - reset($this->buttontext); - foreach($this->buttontext as $key=>$value) - { - $idx = sprache::$index_arr[$key]; - $qry.=' buttontext['.$idx.'] = '.$this->db_add_param($value).','; - } - - $qry.= ' benutzer_select = '.$this->db_add_param($this->benutzer_select).','. - ' deadline = '.$this->db_add_param($this->deadline).','. - ' vorlaufzeit = '.$this->db_add_param($this->vorlaufzeit).','. - ' verfallszeit = '.$this->db_add_param($this->verfallszeit).','. - ' email = '.$this->db_add_param($this->email, FHC_BOOLEAN).','. - ' verpflichtend = '.$this->db_add_param($this->verpflichtend, FHC_BOOLEAN).','. - ' updateamum ='.$this->db_add_param($this->updateamum).','. - ' updatevon ='.$this->db_add_param($this->updatevon). - ' WHERE ampel_id='.$this->db_add_param($this->ampel_id, FHC_INTEGER).';'; - } - - if($this->db_query($qry)) - { - if($new) - { - $qry = "SELECT currval('public.seq_ampel_ampel_id') as id"; - if($result = $this->db_query($qry)) - { - if($row = $this->db_fetch_object($result)) - { - $this->ampel_id = $row->id; - $this->db_query('COMMIT;'); - return true; - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - $this->db_query('ROLLBACK'); - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - $this->db_query('ROLLBACK'); - return false; - } - } - else - return true; - } - else - { - $this->errormsg = 'Fehler beim Speichern der Daten'; - return false; - } - } - - /** - * Loescht eine Ampel - - * @param $ampel_id - */ - public function delete($ampel_id) - { - if(!is_numeric($ampel_id)) - { - $this->errormsg='ID ist ungueltig'; - return false; - } - $qry = "DELETE FROM public.tbl_ampel WHERE ampel_id=".$this->db_add_param($ampel_id); - - if($this->db_query($qry)) - return true; - else - { - $this->errormsg = 'Fehler beim Loeschen der Ampel'; - return false; - } - } - - /** - * Loescht eine Bestaetigung einer Ampel - - * @param $ampel_id - */ - public function deleteAmpelBenutzer($ampel_benutzer_bestaetigt_id) - { - if(!is_numeric($ampel_benutzer_bestaetigt_id)) - { - $this->errormsg='ID ist ungueltig'; - return false; - } - $qry = "DELETE FROM public.tbl_ampel_benutzer_bestaetigt WHERE ampel_benutzer_bestaetigt_id=".$this->db_add_param($ampel_benutzer_bestaetigt_id); - - if($this->db_query($qry)) - return true; - else - { - $this->errormsg = 'Fehler beim Loeschen der Bestaetigung'; - return false; - } - } - - /** - * Bestaetigt die Ampel eines Users - * @param $user - * @param $ampel_id - * @return boolean - */ - public function bestaetigen($user, $ampel_id) - { - $qry = 'INSERT INTO public.tbl_ampel_benutzer_bestaetigt(ampel_id, uid, insertamum, insertvon) VALUES('. - $this->db_add_param($ampel_id, FHC_INTEGER).','. - $this->db_add_param($user).','. - 'now(),'. - $this->db_add_param($user).');'; - - if($this->db_query($qry)) - return true; - else - { - $this->errormsg = 'Fehler beim Speichern der Daten'; - return false; - } - } - - /** - * Laedt Ampeln und Mitarbeiter zu einer OE/Ampel - * @param $oe_arr - * @param $ampel_id - */ - public function loadAmpelMitarbeiter($oe_arr, $ampel_id) - { - $sprache = new sprache(); - $beschreibung = $sprache->getSprachQuery('beschreibung'); - $buttontext = $sprache->getSprachQuery('buttontext'); - - if(!is_numeric($ampel_id) && $ampel_id!='') - { - $this->errormsg = 'Ampel ID ist ungueltig'; - return false; - } - - // Ampeln holen - $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; - if($ampel_id!='') - $qry.=" WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER); - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - // Alle Mitarbeiter/Studenten dazu holen - $qry = "SELECT - distinct on (tbl_ampel_benutzer_bestaetigt.ampel_benutzer_bestaetigt_id, a.uid) *, - tbl_ampel_benutzer_bestaetigt.insertamum,tbl_ampel_benutzer_bestaetigt.insertvon - FROM - (".$row->benutzer_select.") a - JOIN campus.vw_benutzer USING(uid) - LEFT JOIN public.tbl_benutzerfunktion USING(uid) - LEFT JOIN public.tbl_ampel_benutzer_bestaetigt on(public.tbl_ampel_benutzer_bestaetigt.uid=a.uid AND ampel_id=".$this->db_add_param($row->ampel_id, FHC_INTEGER).") - WHERE - (tbl_ampel_benutzer_bestaetigt.ampel_id is null OR tbl_ampel_benutzer_bestaetigt.ampel_id=".$this->db_add_param($row->ampel_id).") - AND - ( - (funktion_kurzbz='oezuordnung' AND oe_kurzbz in(".$this->implode4SQL($oe_arr).")) - OR - (funktion_kurzbz is null - AND (SELECT oe_kurzbz FROM - public.tbl_studiengang JOIN public.tbl_student USING(studiengang_kz) - WHERE vw_benutzer.uid=tbl_student.student_uid) - in(".$this->implode4SQL($oe_arr).") - ) - ) - "; - - if($result_ma = $this->db_query($qry)) - { - while($row_ma = $this->db_fetch_object($result_ma)) - { - $obj = new ampel(); - - $obj->ampel_id = $row->ampel_id; - $obj->kurzbz = $row->kurzbz; - $obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row); - $obj->benutzer_select = $row->benutzer_select; - $obj->deadline = $row->deadline; - $obj->vorlaufzeit = $row->vorlaufzeit; - $obj->verfallszeit = $row->verfallszeit; - $obj->email = $row->email; - $obj->verpflichtend = $row->verpflichtend; - $obj->buttontext = $sprache->parseSprachResult('buttontext', $row); - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - - $obj->vorname = $row_ma->vorname; - $obj->nachname = $row_ma->nachname; - $obj->titelpre = $row_ma->titelpre; - $obj->titelpost = $row_ma->titelpost; - $obj->oe_kurzbz = $row_ma->oe_kurzbz; - - $obj->insertamum_best = $row_ma->insertamum; - $obj->insertvon_best = $row_ma->insertvon; - $obj->ampel_benutzer_bestaetigt_id = $row_ma->ampel_benutzer_bestaetigt_id; - - $this->result[] = $obj; - } - } - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - - } -} -?> + and + */ +/** + * Klasse Ampel + * + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/sprache.class.php'); + +class ampel extends basis_db +{ + public $new; + public $result = array(); + + //Tabellenspalten + public $ampel_id; // bigint + public $kurzbz; // varchar(64) + public $beschreibung = array(); // text[] + public $benutzer_select;// text + public $deadline; // date + public $vorlaufzeit; // smallint + public $verfallszeit; // smallint + public $email; // boolean + public $verpflichtend; // boolean + public $buttontext; // varchar(64)[] + public $insertamum; // timestamp + public $insertvon; // varchar(32) + public $updateamum; // timestamp + public $updatevon; // varchar(32) + public $dauerampel; // boolean + + public $ampel_benutzer_id; // bigint + public $uid; // varchar(32) + + /** + * Konstruktor - Laedt optional eine Ampel + * @param $amepl_id + */ + public function __construct($ampel_id=null) + { + parent::__construct(); + + if(!is_null($ampel_id)) + $this->load($ampel_id); + } + + /** + * Laedt eine Ampel mit der uebergebenen ID + * + * @param $ampel_id + * @return boolean + */ + public function load($ampel_id) + { + if(!is_numeric($ampel_id)) + { + $this->errormsg = 'Ampel ID ist ungueltig'; + return false; + } + + $sprache = new sprache(); + $beschreibung = $sprache->getSprachQuery('beschreibung'); + $buttontext = $sprache->getSprachQuery('buttontext'); + + $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER); + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + $this->ampel_id = $row->ampel_id; + $this->kurzbz = $row->kurzbz; + $this->beschreibung = $sprache->parseSprachResult('beschreibung', $row); + $this->benutzer_select = $row->benutzer_select; + $this->deadline = $row->deadline; + $this->vorlaufzeit = $row->vorlaufzeit; + $this->verfallszeit = $row->verfallszeit; + $this->email = $row->email; + $this->verpflichtend = $row->verpflichtend; + $this->buttontext = $sprache->parseSprachResult('buttontext', $row); + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->dauerampel = $row->dauerampel; + + return true; + } + else + { + $this->errormsg = 'Ampel mit dieser ID exisitert nicht'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Ampel'; + return false; + } + } + + /** + * Laedt alle vorhandenen Ampeln + * @param aktiv lade nur aktive Ampeln + */ + public function getAll($aktiv=false) + { + $sprache = new sprache(); + $beschreibung = $sprache->getSprachQuery('beschreibung'); + $buttontext = $sprache->getSprachQuery('buttontext'); + + $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; + if($aktiv) + { + $qry .= " WHERE (NOW()>(deadline-(vorlaufzeit || ' days')::interval)::date)"; + $qry .= " AND (NOW()<(deadline+(verfallszeit || ' days')::interval)::date)"; + } + $qry .= " ORDER BY deadline"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new ampel(); + + $obj->ampel_id = $row->ampel_id; + $obj->kurzbz = $row->kurzbz; + $obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row); + $obj->benutzer_select = $row->benutzer_select; + $obj->deadline = $row->deadline; + $obj->vorlaufzeit = $row->vorlaufzeit; + $obj->verfallszeit = $row->verfallszeit; + $obj->email = $this->db_parse_bool($row->email); + $obj->verpflichtend = $this->db_parse_bool($row->verpflichtend); + $obj->buttontext = $sprache->parseSprachResult('buttontext', $row); + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->dauerampel = $row->dauerampel; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Prueft ob ein User eine Ampel schon bestaetigt hat + * + * @param $user + * @param $ampel_id + * @return boolean + */ + public function isBestaetigt($user, $ampel_id) + { + $qry = "SELECT 1 FROM public.tbl_ampel_benutzer_bestaetigt WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER)." AND uid=".$this->db_add_param($user); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Prueft ob ein User zu einer Ampel zugeteilt ist + * @param $user + * @param $benutzer_select + */ + public function isZugeteilt($user, $benutzer_select) + { + $qry = "SELECT CASE WHEN ".$this->db_add_param($user)." IN (".$benutzer_select.") THEN true ELSE false END as zugeteilt"; + + if($result_zugeteilt = $this->db_query($qry)) + { + if($row_zugeteilt = $this->db_fetch_object($result_zugeteilt)) + { + if($row_zugeteilt->zugeteilt=='t') + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt alle aktuellen Ampeln eines Users + * @param string $user User, dessen Ampeln geladen werden sollen + * @param boolean $bestaetigt Default false + * wenn true, werden alle Ampeln geladen + * wenn false, werden nur die Ampeln geladen die noch NICHT bestaetigt wurden + */ + public function loadUserAmpel($user, $bestaetigt=false) + { + $sprache = new sprache(); + $beschreibung = $sprache->getSprachQuery('beschreibung'); + $buttontext = $sprache->getSprachQuery('buttontext'); + + //all ampeln except where now is before the vorlaufzeit + $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; + + //only ampeln that are not confirmed + if(!$bestaetigt) + { + $qry.=" WHERE NOT EXISTS + (SELECT ampel_id + FROM public.tbl_ampel_benutzer_bestaetigt + WHERE uid=".$this->db_add_param($user)." AND ampel_id=tbl_ampel.ampel_id)"; + } + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + if($this->isZugeteilt($user, $row->benutzer_select)) + { + $obj = new ampel(); + + $obj->ampel_id = $row->ampel_id; + $obj->kurzbz = $row->kurzbz; + $obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row); + $obj->benutzer_select = $row->benutzer_select; + $obj->deadline = $row->deadline; + $obj->vorlaufzeit = $row->vorlaufzeit; + $obj->verfallszeit = $row->verfallszeit; + $obj->email = $row->email; + $obj->verpflichtend = $row->verpflichtend; + $obj->buttontext = $sprache->parseSprachResult('buttontext', $row); + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->dauerampel = $row->dauerampel; + + $this->result[] = $obj; + } + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Prueft die Daten vor dem Speichern + * @return boolean + */ + public function validate() + { + $benutzer_select = mb_strtolower($this->benutzer_select); + + if(mb_strstr($benutzer_select, 'update ') || mb_strstr($benutzer_select, 'insert ') || mb_strstr($benutzer_select, 'delete ')) + { + $this->errormsg = 'Der Benutzer Select darf nur Selects beinhalten'; + return false; + } + + if(!mb_strstr($benutzer_select,'select ')) + { + $this->errormsg = 'Der Benutzer Select muss einen Select-Befehl beinhalten'; + return false; + } + return true; + } + + /** + * Speichert eine Ampel + * @param $new + */ + public function save($new=null) + { + if(is_null($new)) + $new = $this->new; + + if(!$this->validate()) + return false; + + $sprache = new sprache(); + $sprache->loadIndexArray(); + + if($this->new) + { + $qry = "BEGIN;INSERT INTO public.tbl_ampel (kurzbz, "; + + foreach($this->beschreibung as $key=>$value) + { + $idx = sprache::$index_arr[$key]; + $qry.=" beschreibung[$idx],"; + } + foreach($this->buttontext as $key=>$value) + { + $idx = sprache::$index_arr[$key]; + $qry.=" buttontext[$idx],"; + } + + $qry.=" benutzer_select, deadline, + vorlaufzeit, verfallszeit, email, verpflichtend, insertamum, insertvon , updateamum, updatevon, dauerampel) VALUES(". + $this->db_add_param($this->kurzbz).','; + reset($this->beschreibung); + foreach($this->beschreibung as $key=>$value) + $qry.=$this->db_add_param($value).','; + reset($this->buttontext); + foreach($this->buttontext as $key=>$value) + $qry.=$this->db_add_param($value).','; + + $qry .= $this->db_add_param($this->benutzer_select).','. + $this->db_add_param($this->deadline).','. + $this->db_add_param($this->vorlaufzeit).','. + $this->db_add_param($this->verfallszeit).','. + $this->db_add_param($this->email, FHC_BOOLEAN).','. + $this->db_add_param($this->verpflichtend, 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->dauerampel, FHC_BOOLEAN).');'; + } + else + { + $qry = 'UPDATE public.tbl_ampel SET'. + ' kurzbz = '.$this->db_add_param($this->kurzbz).','; + reset($this->beschreibung); + foreach($this->beschreibung as $key=>$value) + { + $idx = sprache::$index_arr[$key]; + $qry.=' beschreibung['.$idx.'] = '.$this->db_add_param($value).','; + } + reset($this->buttontext); + foreach($this->buttontext as $key=>$value) + { + $idx = sprache::$index_arr[$key]; + $qry.=' buttontext['.$idx.'] = '.$this->db_add_param($value).','; + } + + $qry.= ' benutzer_select = '.$this->db_add_param($this->benutzer_select).','. + ' deadline = '.$this->db_add_param($this->deadline).','. + ' vorlaufzeit = '.$this->db_add_param($this->vorlaufzeit).','. + ' verfallszeit = '.$this->db_add_param($this->verfallszeit).','. + ' email = '.$this->db_add_param($this->email, FHC_BOOLEAN).','. + ' verpflichtend = '.$this->db_add_param($this->verpflichtend, FHC_BOOLEAN).','. + ' updateamum ='.$this->db_add_param($this->updateamum).','. + ' updatevon ='.$this->db_add_param($this->updatevon).','. + ' dauerampel ='.$this->db_add_param($this->dauerampel, FHC_BOOLEAN). + ' WHERE ampel_id='.$this->db_add_param($this->ampel_id, FHC_INTEGER).';'; + } + + if($this->db_query($qry)) + { + if($new) + { + $qry = "SELECT currval('public.seq_ampel_ampel_id') as id"; + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + $this->ampel_id = $row->id; + $this->db_query('COMMIT;'); + return true; + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + $this->db_query('ROLLBACK'); + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + $this->db_query('ROLLBACK'); + return false; + } + } + else + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Daten'; + return false; + } + } + + /** + * Loescht eine Ampel + + * @param $ampel_id + */ + public function delete($ampel_id) + { + if(!is_numeric($ampel_id)) + { + $this->errormsg='ID ist ungueltig'; + return false; + } + $qry = "DELETE FROM public.tbl_ampel WHERE ampel_id=".$this->db_add_param($ampel_id); + + if($this->db_query($qry)) + return true; + else + { + $this->errormsg = 'Fehler beim Loeschen der Ampel'; + return false; + } + } + + /** + * Loescht eine Bestaetigung einer Ampel + + * @param $ampel_id + */ + public function deleteAmpelBenutzer($ampel_benutzer_bestaetigt_id) + { + if(!is_numeric($ampel_benutzer_bestaetigt_id)) + { + $this->errormsg='ID ist ungueltig'; + return false; + } + $qry = "DELETE FROM public.tbl_ampel_benutzer_bestaetigt WHERE ampel_benutzer_bestaetigt_id=".$this->db_add_param($ampel_benutzer_bestaetigt_id); + + if($this->db_query($qry)) + return true; + else + { + $this->errormsg = 'Fehler beim Loeschen der Bestaetigung'; + return false; + } + } + + /** + * Bestaetigt die Ampel eines Users + * @param $user + * @param $ampel_id + * @return boolean + */ + public function bestaetigen($user, $ampel_id) + { + $qry = 'INSERT INTO public.tbl_ampel_benutzer_bestaetigt(ampel_id, uid, insertamum, insertvon) VALUES('. + $this->db_add_param($ampel_id, FHC_INTEGER).','. + $this->db_add_param($user).','. + 'now(),'. + $this->db_add_param($user).');'; + + if($this->db_query($qry)) + return true; + else + { + $this->errormsg = 'Fehler beim Speichern der Daten'; + return false; + } + } + + /** + * Laedt Ampeln und Mitarbeiter zu einer OE/Ampel + * @param $oe_arr + * @param $ampel_id + */ + public function loadAmpelMitarbeiter($oe_arr, $ampel_id) + { + $sprache = new sprache(); + $beschreibung = $sprache->getSprachQuery('beschreibung'); + $buttontext = $sprache->getSprachQuery('buttontext'); + + if(!is_numeric($ampel_id) && $ampel_id!='') + { + $this->errormsg = 'Ampel ID ist ungueltig'; + return false; + } + + // Ampeln holen + $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; + if($ampel_id!='') + $qry.=" WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER); + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + // Alle Mitarbeiter/Studenten dazu holen + $qry = "SELECT + distinct on (tbl_ampel_benutzer_bestaetigt.ampel_benutzer_bestaetigt_id, a.uid) *, + tbl_ampel_benutzer_bestaetigt.insertamum,tbl_ampel_benutzer_bestaetigt.insertvon + FROM + (".$row->benutzer_select.") a + JOIN campus.vw_benutzer USING(uid) + LEFT JOIN public.tbl_benutzerfunktion USING(uid) + LEFT JOIN public.tbl_ampel_benutzer_bestaetigt on(public.tbl_ampel_benutzer_bestaetigt.uid=a.uid AND ampel_id=".$this->db_add_param($row->ampel_id, FHC_INTEGER).") + WHERE + (tbl_ampel_benutzer_bestaetigt.ampel_id is null OR tbl_ampel_benutzer_bestaetigt.ampel_id=".$this->db_add_param($row->ampel_id).") + AND + ( + (funktion_kurzbz='oezuordnung' AND oe_kurzbz in(".$this->implode4SQL($oe_arr).")) + OR + (funktion_kurzbz is null + AND (SELECT oe_kurzbz FROM + public.tbl_studiengang JOIN public.tbl_student USING(studiengang_kz) + WHERE vw_benutzer.uid=tbl_student.student_uid) + in(".$this->implode4SQL($oe_arr).") + ) + ) + "; + + if($result_ma = $this->db_query($qry)) + { + while($row_ma = $this->db_fetch_object($result_ma)) + { + $obj = new ampel(); + + $obj->ampel_id = $row->ampel_id; + $obj->kurzbz = $row->kurzbz; + $obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row); + $obj->benutzer_select = $row->benutzer_select; + $obj->deadline = $row->deadline; + $obj->vorlaufzeit = $row->vorlaufzeit; + $obj->verfallszeit = $row->verfallszeit; + $obj->email = $row->email; + $obj->verpflichtend = $row->verpflichtend; + $obj->buttontext = $sprache->parseSprachResult('buttontext', $row); + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->dauerampel = $row->dauerampel; + + $obj->vorname = $row_ma->vorname; + $obj->nachname = $row_ma->nachname; + $obj->titelpre = $row_ma->titelpre; + $obj->titelpost = $row_ma->titelpost; + $obj->oe_kurzbz = $row_ma->oe_kurzbz; + + $obj->insertamum_best = $row_ma->insertamum; + $obj->insertvon_best = $row_ma->insertvon; + $obj->ampel_benutzer_bestaetigt_id = $row_ma->ampel_benutzer_bestaetigt_id; + + $this->result[] = $obj; + } + } + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + } +} +?>