diff --git a/composer.json b/composer.json index 2392b922f..8558cbdd5 100644 --- a/composer.json +++ b/composer.json @@ -1,281 +1,270 @@ -{ - "name": "fh-complete/fhc-core", - "type": "app", - "description": "FH-Complete Core", - "keywords": [ - "fhc", - "fh-complete", - "campusmanagement" - ], - "homepage": "https://github.com/FH-Complete/FHC-Core", - "license": "GPLv3", - "authors": [ - { - "name": "Christian Paminger", - "email": "christian.paminger@fhcomplete.org", - "homepage": "http://fhcomplete.org" - }, - { - "name": "Andreas Österreicher", - "email": "oesi@technikum-wien.at", - "homepage": "http://fhcomplete.org" - } - ], - "support": { - "email": "info@fhcomplete.org", - "forum": "https://plus.google.com/communities/113278802529782592610", - "wiki": "http://wiki.fhcomplete.org/" - }, - "repositories": [ - { - "type": "package", - "package": { - "name": "codeigniter-restserver", - "version": "2.6", - "dist": { - "url": "https://github.com/chriskacerguis/codeigniter-restserver/archive/master.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "jsoneditor", - "version": "5.5.6", - "dist": { - "url": "https://github.com/josdejong/jsoneditor/archive/v5.5.6.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "json-forms", - "version": "1.4.0", - "dist": { - "url": "https://github.com/brutusin/json-forms/archive/v1.4.0.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "borgar/textile-js", - "version": "1.0", - "source": { - "url": "https://github.com/borgar/textile-js.git", - "type": "git", - "reference": "master" - } - } - }, - { - "type": "package", - "package": { - "name": "rmariuzzo/jquery-checkboxes", - "version": "1.0.7", - "source": { - "url": "https://github.com/rmariuzzo/checkboxes.js.git", - "type": "git", - "reference": "081cac1eb9b504dc32be27b57f32f6d1d29a5253" - } - } - }, - { - "type": "package", - "package": { - "name": "jquery/jqueryV1", - "version": "1.12.4", - "dist": { - "type": "file", - "url": "https://code.jquery.com/jquery-1.12.4.min.js" - } - } - }, - { - "type": "package", - "package": { - "name": "jquery/jqueryV2", - "version": "2.2.4", - "dist": { - "type": "file", - "url": "https://code.jquery.com/jquery-2.2.4.min.js" - } - } - }, - { - "type": "package", - "package": { - "name": "fgelinas/timepicker", - "version": "0.3.3", - "dist": { - "url": "https://fgelinas.com/code/timepicker/releases/jquery-ui-timepicker-0.3.3.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "alvaro-prieto/colResizable", - "version": "1.6", - "dist": { - "url": "https://github.com/alvaro-prieto/colResizable/archive/1.6.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "tapmodo/Jcrop", - "version": "2.0.4", - "dist": { - "url": "https://github.com/tapmodo/Jcrop/archive/v2.0.4.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "jquery-archive/jquery-metadata", - "version": "1.0", - "source": { - "url": "https://github.com/jquery-archive/jquery-metadata.git", - "type": "git", - "reference": "e5a9e4315675bf4d68716872ca754e858088f8ab" - } - } - }, - { - "type": "package", - "package": { - "name": "tomazdragar/SimpleCropper", - "version": "1.0", - "source": { - "url": "https://github.com/tomazdragar/SimpleCropper.git", - "type": "git", - "reference": "9750b81fa55ed07b3b429297d18ffbeac07a2cde" - } - } - }, - { - "type": "package", - "package": { - "name": "joeldbirch/superfish", - "version": "1.7.9", - "dist": { - "url": "https://github.com/joeldbirch/superfish/archive/v1.7.9.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "jquery/sizzle", - "version": "1.0", - "dist": { - "url": "https://github.com/jquery/sizzle/archive/1.0.0.zip", - "type": "zip" - } - } - }, - { - "type": "package", - "package": { - "name": "nicolaskruchten/pivottable", - "version": "2.15.0", - "source": { - "url": "https://github.com/nicolaskruchten/pivottable.git", - "type": "git", - "reference": "b15ea33268b587d986371c0b6f215c36ffbb860c" - } - } - }, - { - "type": "package", - "package": { - "name": "BlackrockDigital/startbootstrap-sb-admin-2", - "version": "3.3.7", - "source": { - "url": "https://github.com/BlackrockDigital/startbootstrap-sb-admin-2.git", - "type": "git", - "reference": "master" - } - } - } - ], - "require": { - "php": ">=5.4.0", - - "alvaro-prieto/colResizable": "^1.6", - "borgar/textile-js": "1.0", - "BlackrockDigital/startbootstrap-sb-admin-2": "^3.3", - "christianbach/tablesorter": "^1.0", - - "codeigniter/framework": "3.*", - "codeigniter-restserver": "2.6", - - "components/jquery": "^3.2", - "components/jqueryui": "^1.12", - "components/font-awesome": "^4.7", - "components/angular.js": "1.3.16", - - "easyrdf/easyrdf": "0.9.*", - "fgelinas/timepicker": "^0.3.3", - "fzaninotto/faker": "1.*", - "joeldbirch/superfish": "^1.7", - - "jquery/jqueryV1": "^1.12", - "jquery/jqueryV2": "^2.2", - "jquery/sizzle": "^1.0", - - "jquery-archive/jquery-metadata": "^1.0", - - "json-forms": "1.4.0", - "jsoneditor": "5.5.6", - "kingsquare/json-schema-form": "*", - "michelf/php-markdown": "1.5.0", - "ml/json-ld": "1.*", - "mottie/tablesorter": "^2.29", - "netcarver/textile": "^3.5", - "nicolaskruchten/pivottable": "^2.15.0", - "rmariuzzo/jquery-checkboxes": "1.0.7", - - "rougin/combustor": "1.1.*", - "rougin/refinery": "*", - - "tapmodo/Jcrop": "^2.0", - "tinymce/tinymce": "4.*", - "tomazdragar/SimpleCropper": "^1.0", - "twbs/bootstrap": "^3.3", - - "zetacomponents/workflow": "1.*", - "zetacomponents/document": "1.*", - "zetacomponents/workflow-database-tiein": "1.*", - "zetacomponents/workflow-event-log-tiein": "1.*" - }, - "require-dev": { - "squizlabs/php_codesniffer": "2.*" - }, - "config": { - "bin-dir": "vendor/bin" - }, - "extra": { - "merge-plugin": { - "include": [ - "composer.json", - "addons/*/composer.json" - ], - "recurse": true, - "replace": false, - "merge-dev": false, - "merge-extra": false - } - } -} +{ + "name": "fh-complete/fhc-core", + "type": "app", + "description": "FH-Complete Core", + "keywords": [ + "fhc", + "fh-complete", + "campusmanagement" + ], + "homepage": "https://github.com/FH-Complete/FHC-Core", + "license": "GPLv3", + "authors": [ + { + "name": "Christian Paminger", + "email": "christian.paminger@fhcomplete.org", + "homepage": "http://fhcomplete.org" + }, + { + "name": "Andreas Österreicher", + "email": "oesi@technikum-wien.at", + "homepage": "http://fhcomplete.org" + } + ], + "support": { + "email": "info@fhcomplete.org", + "forum": "https://plus.google.com/communities/113278802529782592610", + "wiki": "http://wiki.fhcomplete.org/" + }, + "repositories": [ + { + "type": "package", + "package": { + "name": "codeigniter-restserver", + "version": "2.6", + "dist": { + "url": "https://github.com/chriskacerguis/codeigniter-restserver/archive/master.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "jsoneditor", + "version": "5.5.6", + "dist": { + "url": "https://github.com/josdejong/jsoneditor/archive/v5.5.6.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "json-forms", + "version": "1.4.0", + "dist": { + "url": "https://github.com/brutusin/json-forms/archive/v1.4.0.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "borgar/textile-js", + "version": "1.0", + "source": { + "url": "https://github.com/borgar/textile-js.git", + "type": "git", + "reference": "master" + } + } + }, + { + "type": "package", + "package": { + "name": "rmariuzzo/jquery-checkboxes", + "version": "1.0.7", + "source": { + "url": "https://github.com/rmariuzzo/checkboxes.js.git", + "type": "git", + "reference": "081cac1eb9b504dc32be27b57f32f6d1d29a5253" + } + } + }, + { + "type": "package", + "package": { + "name": "jquery/jqueryV1", + "version": "1.12.4", + "dist": { + "type": "file", + "url": "https://code.jquery.com/jquery-1.12.4.min.js" + } + } + }, + { + "type": "package", + "package": { + "name": "jquery/jqueryV2", + "version": "2.2.4", + "dist": { + "type": "file", + "url": "https://code.jquery.com/jquery-2.2.4.min.js" + } + } + }, + { + "type": "package", + "package": { + "name": "fgelinas/timepicker", + "version": "0.3.3", + "dist": { + "url": "https://fgelinas.com/code/timepicker/releases/jquery-ui-timepicker-0.3.3.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "alvaro-prieto/colResizable", + "version": "1.6", + "dist": { + "url": "https://github.com/alvaro-prieto/colResizable/archive/1.6.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "tapmodo/Jcrop", + "version": "2.0.4", + "dist": { + "url": "https://github.com/tapmodo/Jcrop/archive/v2.0.4.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "jquery-archive/jquery-metadata", + "version": "1.0", + "source": { + "url": "https://github.com/jquery-archive/jquery-metadata.git", + "type": "git", + "reference": "e5a9e4315675bf4d68716872ca754e858088f8ab" + } + } + }, + { + "type": "package", + "package": { + "name": "tomazdragar/SimpleCropper", + "version": "1.0", + "source": { + "url": "https://github.com/tomazdragar/SimpleCropper.git", + "type": "git", + "reference": "9750b81fa55ed07b3b429297d18ffbeac07a2cde" + } + } + }, + { + "type": "package", + "package": { + "name": "joeldbirch/superfish", + "version": "1.7.9", + "dist": { + "url": "https://github.com/joeldbirch/superfish/archive/v1.7.9.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "jquery/sizzle", + "version": "1.0", + "dist": { + "url": "https://github.com/jquery/sizzle/archive/1.0.0.zip", + "type": "zip" + } + } + }, + { + "type": "package", + "package": { + "name": "nicolaskruchten/pivottable", + "version": "2.15.0", + "source": { + "url": "https://github.com/nicolaskruchten/pivottable.git", + "type": "git", + "reference": "b15ea33268b587d986371c0b6f215c36ffbb860c" + } + } + }, + { + "type": "package", + "package": { + "name": "BlackrockDigital/startbootstrap-sb-admin-2", + "version": "3.3.7", + "source": { + "url": "https://github.com/BlackrockDigital/startbootstrap-sb-admin-2.git", + "type": "git", + "reference": "master" + } + } + } + ], + "require": { + "php": ">=5.4.0", + + "alvaro-prieto/colResizable": "^1.6", + "borgar/textile-js": "1.0", + "BlackrockDigital/startbootstrap-sb-admin-2": "^3.3", + "christianbach/tablesorter": "^1.0", + + "codeigniter/framework": "3.*", + "codeigniter-restserver": "2.6", + + "components/jquery": "^3.2", + "components/jqueryui": "^1.12", + "components/font-awesome": "^4.7", + "components/angular.js": "1.3.16", + + "easyrdf/easyrdf": "0.9.*", + "fgelinas/timepicker": "^0.3.3", + "fzaninotto/faker": "1.*", + "joeldbirch/superfish": "^1.7", + + "jquery/jqueryV1": "^1.12", + "jquery/jqueryV2": "^2.2", + "jquery/sizzle": "^1.0", + + "jquery-archive/jquery-metadata": "^1.0", + + "json-forms": "1.4.0", + "jsoneditor": "5.5.6", + "kingsquare/json-schema-form": "*", + "michelf/php-markdown": "1.5.0", + "ml/json-ld": "1.*", + "mottie/tablesorter": "^2.29", + "netcarver/textile": "^3.5", + "nicolaskruchten/pivottable": "^2.15.0", + "rmariuzzo/jquery-checkboxes": "1.0.7", + + "rougin/combustor": "1.1.*", + "rougin/refinery": "*", + + "tapmodo/Jcrop": "^2.0", + "tinymce/tinymce": "4.*", + "tomazdragar/SimpleCropper": "^1.0", + "twbs/bootstrap": "^3.3", + + "zetacomponents/workflow": "1.*", + "zetacomponents/document": "1.*", + "zetacomponents/workflow-database-tiein": "1.*", + "zetacomponents/workflow-event-log-tiein": "1.*" + }, + "require-dev": { + "squizlabs/php_codesniffer": "2.*" + }, + "config": { + "bin-dir": "vendor/bin" + } +} + diff --git a/include/ampel.class.php b/include/ampel.class.php index fba67585e..40f8a503d 100644 --- a/include/ampel.class.php +++ b/include/ampel.class.php @@ -1,579 +1,579 @@ - 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 $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; + } + + } +} +?> diff --git a/include/datum.class.php b/include/datum.class.php index 1206ae6f0..90ba0066c 100644 --- a/include/datum.class.php +++ b/include/datum.class.php @@ -1,400 +1,400 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ - -class datum -{ - public $ts_day=86400; // Timestamp eines Tages - - /** - * Konstruktor - * - */ - public function __construct() - { - } - - /** - * Liefert einen UNIX Timestamp von einem String im - * Format "31.12.2007 14:30" - */ - public function mktime_datumundzeit($datumundzeit) - { - if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4}) ([0-9]{2}):([0-9]{2})",$datumundzeit, $regs)) - return mktime($regs[4],$regs[5],0,$regs[2],$regs[1],$regs[3]); - else - { - $this->errormsg = 'Falsches Datumsformat'; - return false; - } - } - - /** - * Liefert einen UNIX Timestamp von einem String im - * Format "31.12.2007" - */ - public function mktime_datum($datum) - { - if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})",$datum, $regs)) - { - return mktime(0,0,0,$regs[2],$regs[1],$regs[3]); - } - else - { - $this->errormsg = 'Falsches Datumsformat'; - return false; - } - } - - /** - * Liefert einen UNIX Timestamp von einem Datum im - * ISO-Format "2007-01-31" - */ - public function mktime_fromdate($datum) - { - if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$datum, $regs)) - { - return mktime(0,0,0,$regs[2],$regs[3],$regs[1]); - } - else - { - $this->errormsg = 'Falsches Datumsformat'; - return false; - } - } - - /** - * Liefert einen UNIX Timestamp von einem String im - * Format "2007-01-31 14:30:12" - */ - public function mktime_fromtimestamp($timestamp) - { - if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",$timestamp, $regs)) - { - return mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[3],$regs[1]); - } - else - { - $this->errormsg = 'Falsches Datumsformat'; - return false; - } - } - - /** - * Springt von einen UNIX Timestamp ($datum) $wochen nach vor bzw. hinten - */ - public function jump_week($datum, $wochen) - { - $days = $wochen * 7; - - $datetime=new DateTime(); - $datetime->setTimestamp($datum); - $datetime->modify($days.' day'); - return $datetime->format("U"); - } - - /** - * Springt von einen UNIX Timestamp ($datum) $days nach vor bzw. hinten - */ - public function jump_day($datum, $days) - { - $stunde_vor=date("G",$datum); - // Ein Tag sind 86400 Sekunden - $datum+=86400*$days; - $stunde_nach=date("G",$datum); - if ($stunde_nach!=$stunde_vor) - $datum+=3600; - return $datum; - } - - /** - * Konvertiert das ISO Datumsformat (YYYY-MM-DD) - * nach (DD.MM.YYYY) - */ - public function convertISODate($datum) - { - return (mb_strlen($datum)>0?date('d.m.Y',strtotime($datum)):''); - } - - - /** - * Prueft Uhrzeit auf Gueltigkeit (HH:MM:SS) - * @return true wenn ok, false wenn falsches Format - */ - public function checkUhrzeit($uhrzeit) - { - if(mb_ereg("([0-9]{2}):([0-9]{2})(:([0-9]{2}))?$",$uhrzeit)) - return true; - else - return false; - } - - /** - * Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist - * @return true wenn ok, false wenn falsches Format - */ - public function checkDatum($datum) - { - if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$",$datum) || mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$",$datum)) - return true; - else - return false; - } - - /** - * Zieht ein Datum von einem anderen ab, und gibt die differenz in Tagen zurueck (mit Vorzeichen) - * @param $datum1 - * @param $datum2 - */ - public function DateDiff($datum1, $datum2) - { - $datetime1 = new DateTime($datum1); - $datetime2 = new DateTime($datum2); - $interval = $datetime1->diff($datetime2); - return $interval->format('%R%a'); - } - - /** - * Prueft ob ein Datum / Datum und Uhrzeit zwischen 2 anderen liegt - * Unterstuetzt auch offenes (leeres) Start und Ende Datum - * - * @param $start Startdatum - * @param $ende Endedatum - * @param $datum Datum das geprueft wird - * @return true wenn dazwischen sonst false - */ - public function between($start, $ende, $datum) - { - $datestart = new DateTime($start); - $dateende = new DateTime($ende); - $dateref = new DateTime($datum); - - // Start und Ende nicht gesetzt - if($start=='' && $ende=='') - return true; - - // Start nicht gesetzt; Ende gesetzt - if($start=='' && $ende!='' && $dateende>=$dateref) - return true; - - // Ende nicht gesetzt; Start gesetzt - if($ende=='' && $start!='' && $datestart<=$dateref) - return true; - - // Start und Ende gesetzt - if($ende!='' && $start!='' && $datestart<=$dateref && $dateende>=$dateref) - return true; - - return false; - } - - /** - * Summiert 2 Zeiten Stunde:Minute - * Es liefert keine Uhrzeit zurueck sondern Stunden und Minuten - * zB 12:10 + 23:15 = 35:25 - * - * @param $zeit1 - * @param $zeit2 - * @return summe der beiden zeiten im Format Stunden:Minuten - */ - public function sumZeit($zeit1, $zeit2) - { - list($h1, $m1) = explode(':', $zeit1); - list($h2, $m2) = explode(':', $zeit2); - - $m1 +=$m2; - - if($m1>=60) - { - $uebertrag = (int)($m1/60); - $h1+= $uebertrag; - } - $m1=$m1%60; - $h1+=$h2; - if($m1<10) - $m1='0'.$m1; - if($h1<10) - $h1='0'.$h1; - - return $h1.':'.$m1; - } - - /** - * Subtrahiert 2 Zeiten ($zeit1-$zeit2) Stunde:Minute - * Es liefert keine Uhrzeit zurueck sondern Stunden und Minuten - * zB 23:15 - 12:10 = 11:05 - * - * @param $zeit1 - * @param $zeit2 - * @return subtraktion der beiden zeiten im Format Stunden:Minuten, null wenn zeit 1 kleiner als zeit2 ist - */ - public function subZeit($zeit1, $zeit2) - { - list($h1, $m1) = explode(':', $zeit1); - list($h2, $m2) = explode(':', $zeit2); - - if($h1<$h2) - return null; - else if($h1 == $h2 && $m1<$m2) - return null; - - $m1 -=$m2; -//echo $h1.','.$m1.','.$h2.','.$m2; - if($m1<0) - { - $m1 = $m1 + 60; - $h1 = (int)$h1-1; - } - $m1=$m1%60; - $h1-=$h2; - if($m1<10) - $m1='0'.$m1; - if($h1<10) - $h1='0'.$h1; - - return $h1.':'.$m1; - } - - /** - * Prueft und Liefert ein Datum im angegeben Format - * fuer die Formatierung wird die Funktion formatDatum verwendet - * @param $datum - * @param $format - * @param $strict wenn das Datum aus einem Suchfeld komment, dann strict auf TRUE setzen da sonst - * Eintraege wie zB 'last Monday' oder 'a' auch in ein Datum umgewandelt werden. - * @return Formatierten Timestamp wenn ok, false im Fehlerfall - */ - function checkformatDatum($datum, $format='Y-m-d H:i:s', $strict=false) - { - - @list($day, $month, $year) = @explode(".", $datum); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - @list($day, $month, $year) = @explode("-", $datum); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - @list($year, $month, $day) = @explode(".", $datum); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - @list($year, $month, $day) = @explode("-", $datum); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - - if (strlen($datum)==6) - { - $year="20".substr($datum,0,2); - $month=substr($datum,2,2); - $day=substr($datum,4,2); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - } - else if (strlen($datum)==8) - { - $year=substr($datum,0,4); - $month=substr($datum,4,2); - $day=substr($datum, 6,2); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - - $year=substr($datum,5,4); - $month=substr($datum,3,2); - $day=substr($datum, 0,2); - if (@checkdate($month, $day, $year)) - return $this->formatDatum($datum, $format, $strict); - } - return false; - } - - - /** - * Liefert ein Datum im angegeben Format - * ToDo: Liefert aktuellen Timestamp wenn Sonderzeichen uebergeben werden - * zB '---' - * @param $datum - * @param $format - * @param $strict wenn das Datum aus einem Suchfeld kommt, dann strict auf TRUE setzen da sonst - * Eintraege wie zB 'last Monday' oder 'a' auch in ein Datum umgewandelt werden. - * @return Formatierten Timestamp wenn ok, false im Fehlerfall - */ - public function formatDatum($datum, $format='Y-m-d H:i:s', $strict=false) - { - if(trim($datum)=='') - return ''; - - $ts=''; - $error=false; - - //2008-12-31 - if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$datum, $regs)) - $ts = mktime(0,0,0,$regs[2],$regs[3],$regs[1]); - - //2008-12-31 12:30 - if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2})",$datum, $regs)) - $ts = mktime($regs[4],$regs[5],0,$regs[2],$regs[3],$regs[1]); - - //2008-12-31 12:30:15 - if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",$datum, $regs)) - $ts = mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[3],$regs[1]); - - if($ts=='') - { - //1.12.2008 - if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})",$datum, $regs)) - $ts = mktime(0,0,0,$regs[2],$regs[1],$regs[3]); - - //1.12.2008 12:30 - if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4}) ([0-9]{2}):([0-9]{2})",$datum, $regs)) - $ts = mktime($regs[4],$regs[5],0,$regs[2],$regs[1],$regs[3]); - - //1.12.2008 12:30:15 - if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",$datum, $regs)) - $ts = mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[1],$regs[3]); - } - - if($ts=='' && !$strict) - { - $ts = strtotime($datum); - - if(!$ts || $ts==-1) - { - //wenn strtotime fehlschlaegt liefert diese -1 zurueck, ab php5.1.0 jedoch false - $error = true; - } - } - - if($ts!='' && !$error) - return date($format, $ts); - - return false; - } - - /** - * konvertiert Zeit in format stunden:minuten in Stunden als Dezimalahl - * @param $timestring in Form stunden:minuten - * @return int Stundenzahl als Dezimalzahl - */ - public function convertTimeStringToHours($timestring) - { - return intval(substr($timestring, 0, 2)) + intval(substr($timestring, 3, 2)) / 60; - } - -} -?> +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ + +class datum +{ + public $ts_day=86400; // Timestamp eines Tages + + /** + * Konstruktor + * + */ + public function __construct() + { + } + + /** + * Liefert einen UNIX Timestamp von einem String im + * Format "31.12.2007 14:30" + */ + public function mktime_datumundzeit($datumundzeit) + { + if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4}) ([0-9]{2}):([0-9]{2})",$datumundzeit, $regs)) + return mktime($regs[4],$regs[5],0,$regs[2],$regs[1],$regs[3]); + else + { + $this->errormsg = 'Falsches Datumsformat'; + return false; + } + } + + /** + * Liefert einen UNIX Timestamp von einem String im + * Format "31.12.2007" + */ + public function mktime_datum($datum) + { + if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})",$datum, $regs)) + { + return mktime(0,0,0,$regs[2],$regs[1],$regs[3]); + } + else + { + $this->errormsg = 'Falsches Datumsformat'; + return false; + } + } + + /** + * Liefert einen UNIX Timestamp von einem Datum im + * ISO-Format "2007-01-31" + */ + public function mktime_fromdate($datum) + { + if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$datum, $regs)) + { + return mktime(0,0,0,$regs[2],$regs[3],$regs[1]); + } + else + { + $this->errormsg = 'Falsches Datumsformat'; + return false; + } + } + + /** + * Liefert einen UNIX Timestamp von einem String im + * Format "2007-01-31 14:30:12" + */ + public function mktime_fromtimestamp($timestamp) + { + if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",$timestamp, $regs)) + { + return mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[3],$regs[1]); + } + else + { + $this->errormsg = 'Falsches Datumsformat'; + return false; + } + } + + /** + * Springt von einen UNIX Timestamp ($datum) $wochen nach vor bzw. hinten + */ + public function jump_week($datum, $wochen) + { + $days = $wochen * 7; + + $datetime=new DateTime(); + $datetime->setTimestamp($datum); + $datetime->modify($days.' day'); + return $datetime->format("U"); + } + + /** + * Springt von einen UNIX Timestamp ($datum) $days nach vor bzw. hinten + */ + public function jump_day($datum, $days) + { + $stunde_vor=date("G",$datum); + // Ein Tag sind 86400 Sekunden + $datum+=86400*$days; + $stunde_nach=date("G",$datum); + if ($stunde_nach!=$stunde_vor) + $datum+=3600; + return $datum; + } + + /** + * Konvertiert das ISO Datumsformat (YYYY-MM-DD) + * nach (DD.MM.YYYY) + */ + public function convertISODate($datum) + { + return (mb_strlen($datum)>0?date('d.m.Y',strtotime($datum)):''); + } + + + /** + * Prueft Uhrzeit auf Gueltigkeit (HH:MM:SS) + * @return true wenn ok, false wenn falsches Format + */ + public function checkUhrzeit($uhrzeit) + { + if(mb_ereg("([0-9]{2}):([0-9]{2})(:([0-9]{2}))?$",$uhrzeit)) + return true; + else + return false; + } + + /** + * Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist + * @return true wenn ok, false wenn falsches Format + */ + public function checkDatum($datum) + { + if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$",$datum) || mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$",$datum)) + return true; + else + return false; + } + + /** + * Zieht ein Datum von einem anderen ab, und gibt die differenz in Tagen zurueck (mit Vorzeichen) + * @param $datum1 + * @param $datum2 + */ + public function DateDiff($datum1, $datum2) + { + $datetime1 = new DateTime($datum1); + $datetime2 = new DateTime($datum2); + $interval = $datetime1->diff($datetime2); + return $interval->format('%R%a'); + } + + /** + * Prueft ob ein Datum / Datum und Uhrzeit zwischen 2 anderen liegt + * Unterstuetzt auch offenes (leeres) Start und Ende Datum + * + * @param $start Startdatum + * @param $ende Endedatum + * @param $datum Datum das geprueft wird + * @return true wenn dazwischen sonst false + */ + public function between($start, $ende, $datum) + { + $datestart = new DateTime($start); + $dateende = new DateTime($ende); + $dateref = new DateTime($datum); + + // Start und Ende nicht gesetzt + if($start=='' && $ende=='') + return true; + + // Start nicht gesetzt; Ende gesetzt + if($start=='' && $ende!='' && $dateende>=$dateref) + return true; + + // Ende nicht gesetzt; Start gesetzt + if($ende=='' && $start!='' && $datestart<=$dateref) + return true; + + // Start und Ende gesetzt + if($ende!='' && $start!='' && $datestart<=$dateref && $dateende>=$dateref) + return true; + + return false; + } + + /** + * Summiert 2 Zeiten Stunde:Minute + * Es liefert keine Uhrzeit zurueck sondern Stunden und Minuten + * zB 12:10 + 23:15 = 35:25 + * + * @param $zeit1 + * @param $zeit2 + * @return summe der beiden zeiten im Format Stunden:Minuten + */ + public function sumZeit($zeit1, $zeit2) + { + list($h1, $m1) = explode(':', $zeit1); + list($h2, $m2) = explode(':', $zeit2); + + $m1 +=$m2; + + if($m1>=60) + { + $uebertrag = (int)($m1/60); + $h1+= $uebertrag; + } + $m1=$m1%60; + $h1+=$h2; + if($m1<10) + $m1='0'.$m1; + if($h1<10) + $h1='0'.$h1; + + return $h1.':'.$m1; + } + + /** + * Subtrahiert 2 Zeiten ($zeit1-$zeit2) Stunde:Minute + * Es liefert keine Uhrzeit zurueck sondern Stunden und Minuten + * zB 23:15 - 12:10 = 11:05 + * + * @param $zeit1 + * @param $zeit2 + * @return subtraktion der beiden zeiten im Format Stunden:Minuten, null wenn zeit 1 kleiner als zeit2 ist + */ + public function subZeit($zeit1, $zeit2) + { + list($h1, $m1) = explode(':', $zeit1); + list($h2, $m2) = explode(':', $zeit2); + + if($h1<$h2) + return null; + else if($h1 == $h2 && $m1<$m2) + return null; + + $m1 -=$m2; +//echo $h1.','.$m1.','.$h2.','.$m2; + if($m1<0) + { + $m1 = $m1 + 60; + $h1 = (int)$h1-1; + } + $m1=$m1%60; + $h1-=$h2; + if($m1<10) + $m1='0'.$m1; + if($h1<10) + $h1='0'.$h1; + + return $h1.':'.$m1; + } + + /** + * Prueft und Liefert ein Datum im angegeben Format + * fuer die Formatierung wird die Funktion formatDatum verwendet + * @param $datum + * @param $format + * @param $strict wenn das Datum aus einem Suchfeld komment, dann strict auf TRUE setzen da sonst + * Eintraege wie zB 'last Monday' oder 'a' auch in ein Datum umgewandelt werden. + * @return Formatierten Timestamp wenn ok, false im Fehlerfall + */ + function checkformatDatum($datum, $format='Y-m-d H:i:s', $strict=false) + { + + @list($day, $month, $year) = @explode(".", $datum); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + @list($day, $month, $year) = @explode("-", $datum); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + @list($year, $month, $day) = @explode(".", $datum); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + @list($year, $month, $day) = @explode("-", $datum); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + + if (strlen($datum)==6) + { + $year="20".substr($datum,0,2); + $month=substr($datum,2,2); + $day=substr($datum,4,2); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + } + else if (strlen($datum)==8) + { + $year=substr($datum,0,4); + $month=substr($datum,4,2); + $day=substr($datum, 6,2); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + + $year=substr($datum,5,4); + $month=substr($datum,3,2); + $day=substr($datum, 0,2); + if (@checkdate($month, $day, $year)) + return $this->formatDatum($datum, $format, $strict); + } + return false; + } + + + /** + * Liefert ein Datum im angegeben Format + * ToDo: Liefert aktuellen Timestamp wenn Sonderzeichen uebergeben werden + * zB '---' + * @param $datum + * @param $format + * @param $strict wenn das Datum aus einem Suchfeld kommt, dann strict auf TRUE setzen da sonst + * Eintraege wie zB 'last Monday' oder 'a' auch in ein Datum umgewandelt werden. + * @return Formatierten Timestamp wenn ok, false im Fehlerfall + */ + public function formatDatum($datum, $format='Y-m-d H:i:s', $strict=false) + { + if(trim($datum)=='') + return ''; + + $ts=''; + $error=false; + + //2008-12-31 + if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$datum, $regs)) + $ts = mktime(0,0,0,$regs[2],$regs[3],$regs[1]); + + //2008-12-31 12:30 + if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2})",$datum, $regs)) + $ts = mktime($regs[4],$regs[5],0,$regs[2],$regs[3],$regs[1]); + + //2008-12-31 12:30:15 + if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",$datum, $regs)) + $ts = mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[3],$regs[1]); + + if($ts=='') + { + //1.12.2008 + if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})",$datum, $regs)) + $ts = mktime(0,0,0,$regs[2],$regs[1],$regs[3]); + + //1.12.2008 12:30 + if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4}) ([0-9]{2}):([0-9]{2})",$datum, $regs)) + $ts = mktime($regs[4],$regs[5],0,$regs[2],$regs[1],$regs[3]); + + //1.12.2008 12:30:15 + if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",$datum, $regs)) + $ts = mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[1],$regs[3]); + } + + if($ts=='' && !$strict) + { + $ts = strtotime($datum); + + if(!$ts || $ts==-1) + { + //wenn strtotime fehlschlaegt liefert diese -1 zurueck, ab php5.1.0 jedoch false + $error = true; + } + } + + if($ts!='' && !$error) + return date($format, $ts); + + return false; + } + + /** + * konvertiert Zeit in format stunden:minuten in Stunden als Dezimalahl + * @param $timestring in Form stunden:minuten + * @return int Stundenzahl als Dezimalzahl + */ + public function convertTimeStringToHours($timestring) + { + return intval(substr($timestring, 0, 2)) + intval(substr($timestring, 3, 2)) / 60; + } + +} +?> diff --git a/include/mail.class.php b/include/mail.class.php index 94d6f4344..b0285c11b 100644 --- a/include/mail.class.php +++ b/include/mail.class.php @@ -96,7 +96,8 @@ class mail $header .= 'X-Mailer: FHComplete V1'.$eol; $header .= 'Mime-Version: 1.0'.$eol; - $header .= "Content-Type: multipart/mixed; boundary=\"$mime_boundary_mixed\"".$eol; + $header .= "Content-Type: multipart/related; boundary=\"$mime_boundary_mixed\"".$eol; + $header .= "Content-Transfer-Encoding: 8bit".$eol; // Body $mailbody = ""; @@ -152,7 +153,7 @@ class mail $dispo = empty($attachment[3]) ? 'attachment' : 'inline'; $mailbody .= $eol; $mailbody .= "Content-Disposition: $dispo; filename={$attachment[2]}".$eol; - $mailbody .= "Content-Type: {$attachment[1]}; name={$attachment[2]}".$eol; + $mailbody .= "Content-Type: {$attachment[1]}; name={$attachment[2]}".$eol; if (!empty($attachment[3])) { $mailbody .= "Content-ID: <{$attachment[3]}>".$eol; @@ -231,6 +232,26 @@ class mail return true; } + /** + * Fuegt ein Bild zum Mail hinzu + * $image image-URL + * $type MIME Type "image/[image-type]", zB "image/jpg" + * $name Anzeigename des Files + * $ContentID ContentID für inline-embedding (diese muss im script im tag angegeben werden) + */ + public function addEmbeddedImage ($image, $type, $name = '', $ContentID) + { + $image_string = file_get_contents($image); + if (!$image_string) + { + $this->errormsg = 'Fehler beim Einlesen der Datei'; + return false; + } + + $image_b64 = chunk_split(base64_encode($image_string), 76, "\n"); + $this->attachments[] = Array($image_b64, $type, $name, $ContentID); + } + /** * Fuegt ein Attachment zum Mail hinzu * $content diff --git a/locale/de-AT/global.php b/locale/de-AT/global.php index d13729ba5..e8308806a 100644 --- a/locale/de-AT/global.php +++ b/locale/de-AT/global.php @@ -4,6 +4,7 @@ $this->phrasen['global/studienrichtung']='Studienrichtung'; $this->phrasen['global/institut']='Institut'; $this->phrasen['global/semester']='Semester'; $this->phrasen['global/studiensemester']='Studiensemester'; +$this->phrasen['global/studienplan']='Studienplan'; $this->phrasen['global/studienzentrum']='Studienzentrum'; $this->phrasen['global/studiengangsleitung']='Studiengangsleitung'; $this->phrasen['global/leitung']='Leitung'; diff --git a/locale/en-US/global.php b/locale/en-US/global.php index 3a614ac46..c34ae6771 100644 --- a/locale/en-US/global.php +++ b/locale/en-US/global.php @@ -4,6 +4,7 @@ $this->phrasen['global/studienrichtung']='Degree-Program'; $this->phrasen['global/institut']='Institute'; $this->phrasen['global/semester']='Semester'; $this->phrasen['global/studiensemester']='Semester'; +$this->phrasen['global/studienplan']='Study Plan'; $this->phrasen['global/studienzentrum']='Study Center'; $this->phrasen['global/studiengangsleitung']='Program Director'; $this->phrasen['global/leitung']='Head'; diff --git a/locale/it-IT/global.php b/locale/it-IT/global.php index 82f61b10b..f549662f0 100644 --- a/locale/it-IT/global.php +++ b/locale/it-IT/global.php @@ -1,158 +1,159 @@ -phrasen['global/abbrechen']='annulla'; -$this->phrasen['global/abmelden']='esci'; -$this->phrasen['global/abschicken']='Invia '; -$this->phrasen['global/adresse']='indirizzo'; -$this->phrasen['global/aendern']='modifica'; -$this->phrasen['global/aktion']='azione'; -$this->phrasen['global/alle']='tutti'; -$this->phrasen['global/allgemeinerdownload']='download generale'; -$this->phrasen['global/angelegtAm']='registrato il '; -$this->phrasen['global/angemeldet']='iscritto'; -$this->phrasen['global/anleitung']='istruzioni'; -$this->phrasen['global/anmelden']='iscriversi'; -$this->phrasen['global/anmerkung']='osservazioni'; -$this->phrasen['global/anmerkungen']='osservazioni'; -$this->phrasen['global/anzeigen']='mostra'; -$this->phrasen['global/ausblenden']=''; -$this->phrasen['global/auswaehlen']=''; -$this->phrasen['global/auswahl']=''; -$this->phrasen['global/bearbeiten']='modifica'; -$this->phrasen['global/beginn']='inizio'; -$this->phrasen['global/beispiele']='esempi'; -$this->phrasen['global/benutzer']='utente'; -$this->phrasen['global/beschreibung']='descrizione'; -$this->phrasen['global/betreff']='oggetto'; -$this->phrasen['global/bezeichnung']='denominazione'; -$this->phrasen['global/bis']='fino'; -$this->phrasen['global/code']='codice'; -$this->phrasen['global/datei']='file'; -$this->phrasen['global/dateiErfolgreichHochgeladen']='il file è stato caricato'; -$this->phrasen['global/dateiExistiertNicht']='il file è inesistente'; -$this->phrasen['global/dateiLoeschen']='cancella file'; -$this->phrasen['global/dateiNichtErfolgreichHochgeladen']='impossibile caricare il file. Si prega di ripetere l\'operazione.'; -$this->phrasen['global/datensatzWurdeNichtGefunden']='impossibile trovare i dati cercati'; -$this->phrasen['global/datenWurdenGespeichert']='i dati sono stati salvati'; -$this->phrasen['global/datum']='Data'; -$this->phrasen['global/datumNichtGesetzt']='non è stata impostata la data'; -$this->phrasen['global/deutsch']='tedesco'; -$this->phrasen['global/dienstag']='martedì'; -$this->phrasen['global/donnerstag']='giovedì '; -$this->phrasen['global/download']='download'; -$this->phrasen['global/editieren']='editare'; -$this->phrasen['global/eintragen']='registrare'; -$this->phrasen['global/eintragWurdeGeloescht']='cancellata registrazione'; -$this->phrasen['global/emailAdresse']='indirizzo e-mail'; -$this->phrasen['global/emailAnAssistenz']='e-mail alla segreteria'; -$this->phrasen['global/emailgesendetan']='spedisci e-mail a'; -$this->phrasen['global/ende']='fine'; -$this->phrasen['global/englisch']='inglese'; -$this->phrasen['global/entfernen']='cestina'; -$this->phrasen['global/erfolgreichAngelegt']='ok, registrato'; -$this->phrasen['global/erfolgreichgelöscht']='ok, cancellato'; -$this->phrasen['global/erfolgreichgespeichert']='ok, salvato'; -$this->phrasen['global/erstellen']='crea'; -$this->phrasen['global/fax']='fax'; -$this->phrasen['global/fehleraufgetreten']='è avvenuto un errore'; -$this->phrasen['global/fehlerBeiDerParameteruebergabe']='errore di trasmissione dei parametri'; -$this->phrasen['global/fehlerBeimAktualisierenDerDaten']='errore di aggiornamento dei dati'; -$this->phrasen['global/fehlerBeimErmittelnDerUID ']='errore di ricerca della UID'; -$this->phrasen['global/fehlerBeimLadenDesDatensatzes']='errore di caricamento dei dati'; -$this->phrasen['global/fehlerBeimLesenAusDatenbank']='errore di lettura dalla banca dati'; -$this->phrasen['global/fehlerBeimLoeschenDesEintrags']='errore di cancellazione della registrazione'; -$this->phrasen['global/fehlerBeimOeffnenDerDatenbankverbindung']='errore di apertura del collegamento con la banca dati'; -$this->phrasen['global/fehlerBeimSpeichernDerDaten']='errore di salvataggio dati'; -$this->phrasen['global/fhTechnikumWien']='SFU'; -$this->phrasen['global/fhtw']='Sigmund Freud PrivatUniversität'; -$this->phrasen['global/frau']='Sig.ra'; -$this->phrasen['global/freitag']='venerdì'; -$this->phrasen['global/FuerDieseAktionBenoetigenSieAdministrationsrechte']='per questa azione si necessita l\'amministratore del sistema'; -$this->phrasen['global/funktion']='funzione'; -$this->phrasen['global/geburtsdatum']='Data di nascita'; -$this->phrasen['global/geburtsort']='Luogo di nascita'; -$this->phrasen['global/geschaeftsfuehrendeltg']='Amministratore'; -$this->phrasen['global/geschlecht']=''; -$this->phrasen['global/gruppe']='Gruppo'; -$this->phrasen['global/handbuch']='Manuale'; -$this->phrasen['global/handy']='Cellulare'; -$this->phrasen['global/hauptwohnsitz']='Residenza '; -$this->phrasen['global/hilfe']='Assistenza'; -$this->phrasen['global/hinzufuegen']='aggiungi'; -$this->phrasen['global/institut']='Istituto'; -$this->phrasen['global/ja']='sì'; -$this->phrasen['global/kalender']='Calendario'; -$this->phrasen['global/keineBerechtigung']='non autorizzato'; -$this->phrasen['global/keineBerechtigungFuerDieseSeite']='errore di autorizzazione per questa pagina'; -$this->phrasen['global/keineBerechtigungZumAendernDesDatensatzes']='errore di autorizzazione per modificare i dati'; -$this->phrasen['global/keineDatenGefunden']='impossibile trovare i dati'; -$this->phrasen['global/kopieren']='copia'; -$this->phrasen['global/LDAPserverNichtErreichbar']='il server LDAP non è raggiungibile'; -$this->phrasen['global/lehreinheit']=''; -$this->phrasen['global/lehrveranstaltung']='Insegnamento'; -$this->phrasen['global/lehrziele']='obiettivi di studio'; -$this->phrasen['global/loeschen']='cancella'; -$this->phrasen['global/löschen']='cancella'; -$this->phrasen['global/mail']='messaggio mail'; -$this->phrasen['global/mann']='maschio/uomo'; -$this->phrasen['global/matrikelnummer']='Matricola'; -$this->phrasen['global/minute']='minuti'; -$this->phrasen['global/mittwoch']='mercoledì'; -$this->phrasen['global/montag']='lunedì'; -$this->phrasen['global/nachname']='Cognome'; -$this->phrasen['global/name']='Nome'; -$this->phrasen['global/nebenwohnsitz']='domicilio'; -$this->phrasen['global/nein']='no'; -$this->phrasen['global/neu']='nuovo'; -$this->phrasen['global/newsgroups']='newsgroup'; -$this->phrasen['global/nichtAngemeldet ']='errore di log in: impossibile trovare l\'UID dell\'utente '; -$this->phrasen['global/nummer']='numero'; -$this->phrasen['global/ok']='ok'; -$this->phrasen['global/organisationseinheit']='Unità organizzativa'; -$this->phrasen['global/organisationseinheiten']=''; -$this->phrasen['global/ort']='luogo'; -$this->phrasen['global/passwort']='Password'; -$this->phrasen['global/person']='persona'; -$this->phrasen['global/personen']='persone '; -$this->phrasen['global/personenkennzeichen']='Codice Persona'; -$this->phrasen['global/personenkz']='Codice Persona'; -$this->phrasen['global/plz']='CAP'; -$this->phrasen['global/postnomen']='Titolo'; -$this->phrasen['global/samstag']='sabato'; -$this->phrasen['global/sekretariat']='segreteria'; -$this->phrasen['global/semester']='Semestre'; -$this->phrasen['global/sonntag']='domenica'; -$this->phrasen['global/speichern']='salva'; -$this->phrasen['global/sprache']='lingua'; -$this->phrasen['global/staatsbuergerschaft']='cittadinanza'; -$this->phrasen['global/stellvertreter']='supplenza '; -$this->phrasen['global/strasse']='via'; -$this->phrasen['global/studentenvertreter']='rappresentanti degli studendi'; -$this->phrasen['global/studiengang']='Corso di studi'; -$this->phrasen['global/studiengangKonnteNichtGefundenWerden ']='impossibile trovare corso di studi digitato'; -$this->phrasen['global/studiengangsleitung']='Direzione del corso di studi'; -$this->phrasen['global/studiengangsmanagement']='Management del corso di studi'; -$this->phrasen['global/studienrichtung']='indirizzo di studio'; -$this->phrasen['global/studiensemester']='Semestre di studio'; -$this->phrasen['global/studiensemesterKonnteNichtGefundenWerden ']='impossibile trovare semestre di studio digitato'; -$this->phrasen['global/studienzentrum']=''; -$this->phrasen['global/stunde']='ora'; -$this->phrasen['global/suchen']='cerca'; -$this->phrasen['global/telefon']='telefono'; -$this->phrasen['global/telefonnummer']='numero telefonico'; -$this->phrasen['global/titel']='Titolo'; -$this->phrasen['global/uid']='UID'; -$this->phrasen['global/umbenennen']='cambia nome'; -$this->phrasen['global/unbekannterFehleraufgetreten']='è avvenuto un errore sconosciuto'; -$this->phrasen['global/universität']='università'; -$this->phrasen['global/username']='Username'; -$this->phrasen['global/userNichtGefunden']=''; -$this->phrasen['global/verband']='Gruppo Principale'; -$this->phrasen['global/von']='inizio'; -$this->phrasen['global/vorname']='Nome'; -$this->phrasen['global/warnungWirklichLoeschen']=''; -$this->phrasen['global/zurueck']='Indietro'; -$this->phrasen['global/zuruecksetzen']=''; -$this->phrasen['global/zweck']=''; -$this->phrasen['global/ects']='ECTS'; - -?> +phrasen['global/abbrechen']='annulla'; +$this->phrasen['global/abmelden']='esci'; +$this->phrasen['global/abschicken']='Invia '; +$this->phrasen['global/adresse']='indirizzo'; +$this->phrasen['global/aendern']='modifica'; +$this->phrasen['global/aktion']='azione'; +$this->phrasen['global/alle']='tutti'; +$this->phrasen['global/allgemeinerdownload']='download generale'; +$this->phrasen['global/angelegtAm']='registrato il '; +$this->phrasen['global/angemeldet']='iscritto'; +$this->phrasen['global/anleitung']='istruzioni'; +$this->phrasen['global/anmelden']='iscriversi'; +$this->phrasen['global/anmerkung']='osservazioni'; +$this->phrasen['global/anmerkungen']='osservazioni'; +$this->phrasen['global/anzeigen']='mostra'; +$this->phrasen['global/ausblenden']=''; +$this->phrasen['global/auswaehlen']=''; +$this->phrasen['global/auswahl']=''; +$this->phrasen['global/bearbeiten']='modifica'; +$this->phrasen['global/beginn']='inizio'; +$this->phrasen['global/beispiele']='esempi'; +$this->phrasen['global/benutzer']='utente'; +$this->phrasen['global/beschreibung']='descrizione'; +$this->phrasen['global/betreff']='oggetto'; +$this->phrasen['global/bezeichnung']='denominazione'; +$this->phrasen['global/bis']='fino'; +$this->phrasen['global/code']='codice'; +$this->phrasen['global/datei']='file'; +$this->phrasen['global/dateiErfolgreichHochgeladen']='il file è stato caricato'; +$this->phrasen['global/dateiExistiertNicht']='il file è inesistente'; +$this->phrasen['global/dateiLoeschen']='cancella file'; +$this->phrasen['global/dateiNichtErfolgreichHochgeladen']='impossibile caricare il file. Si prega di ripetere l\'operazione.'; +$this->phrasen['global/datensatzWurdeNichtGefunden']='impossibile trovare i dati cercati'; +$this->phrasen['global/datenWurdenGespeichert']='i dati sono stati salvati'; +$this->phrasen['global/datum']='Data'; +$this->phrasen['global/datumNichtGesetzt']='non è stata impostata la data'; +$this->phrasen['global/deutsch']='tedesco'; +$this->phrasen['global/dienstag']='martedì'; +$this->phrasen['global/donnerstag']='giovedì '; +$this->phrasen['global/download']='download'; +$this->phrasen['global/editieren']='editare'; +$this->phrasen['global/eintragen']='registrare'; +$this->phrasen['global/eintragWurdeGeloescht']='cancellata registrazione'; +$this->phrasen['global/emailAdresse']='indirizzo e-mail'; +$this->phrasen['global/emailAnAssistenz']='e-mail alla segreteria'; +$this->phrasen['global/emailgesendetan']='spedisci e-mail a'; +$this->phrasen['global/ende']='fine'; +$this->phrasen['global/englisch']='inglese'; +$this->phrasen['global/entfernen']='cestina'; +$this->phrasen['global/erfolgreichAngelegt']='ok, registrato'; +$this->phrasen['global/erfolgreichgelöscht']='ok, cancellato'; +$this->phrasen['global/erfolgreichgespeichert']='ok, salvato'; +$this->phrasen['global/erstellen']='crea'; +$this->phrasen['global/fax']='fax'; +$this->phrasen['global/fehleraufgetreten']='è avvenuto un errore'; +$this->phrasen['global/fehlerBeiDerParameteruebergabe']='errore di trasmissione dei parametri'; +$this->phrasen['global/fehlerBeimAktualisierenDerDaten']='errore di aggiornamento dei dati'; +$this->phrasen['global/fehlerBeimErmittelnDerUID ']='errore di ricerca della UID'; +$this->phrasen['global/fehlerBeimLadenDesDatensatzes']='errore di caricamento dei dati'; +$this->phrasen['global/fehlerBeimLesenAusDatenbank']='errore di lettura dalla banca dati'; +$this->phrasen['global/fehlerBeimLoeschenDesEintrags']='errore di cancellazione della registrazione'; +$this->phrasen['global/fehlerBeimOeffnenDerDatenbankverbindung']='errore di apertura del collegamento con la banca dati'; +$this->phrasen['global/fehlerBeimSpeichernDerDaten']='errore di salvataggio dati'; +$this->phrasen['global/fhTechnikumWien']='SFU'; +$this->phrasen['global/fhtw']='Sigmund Freud PrivatUniversität'; +$this->phrasen['global/frau']='Sig.ra'; +$this->phrasen['global/freitag']='venerdì'; +$this->phrasen['global/FuerDieseAktionBenoetigenSieAdministrationsrechte']='per questa azione si necessita l\'amministratore del sistema'; +$this->phrasen['global/funktion']='funzione'; +$this->phrasen['global/geburtsdatum']='Data di nascita'; +$this->phrasen['global/geburtsort']='Luogo di nascita'; +$this->phrasen['global/geschaeftsfuehrendeltg']='Amministratore'; +$this->phrasen['global/geschlecht']=''; +$this->phrasen['global/gruppe']='Gruppo'; +$this->phrasen['global/handbuch']='Manuale'; +$this->phrasen['global/handy']='Cellulare'; +$this->phrasen['global/hauptwohnsitz']='Residenza '; +$this->phrasen['global/hilfe']='Assistenza'; +$this->phrasen['global/hinzufuegen']='aggiungi'; +$this->phrasen['global/institut']='Istituto'; +$this->phrasen['global/ja']='sì'; +$this->phrasen['global/kalender']='Calendario'; +$this->phrasen['global/keineBerechtigung']='non autorizzato'; +$this->phrasen['global/keineBerechtigungFuerDieseSeite']='errore di autorizzazione per questa pagina'; +$this->phrasen['global/keineBerechtigungZumAendernDesDatensatzes']='errore di autorizzazione per modificare i dati'; +$this->phrasen['global/keineDatenGefunden']='impossibile trovare i dati'; +$this->phrasen['global/kopieren']='copia'; +$this->phrasen['global/LDAPserverNichtErreichbar']='il server LDAP non è raggiungibile'; +$this->phrasen['global/lehreinheit']=''; +$this->phrasen['global/lehrveranstaltung']='Insegnamento'; +$this->phrasen['global/lehrziele']='obiettivi di studio'; +$this->phrasen['global/loeschen']='cancella'; +$this->phrasen['global/löschen']='cancella'; +$this->phrasen['global/mail']='messaggio mail'; +$this->phrasen['global/mann']='maschio/uomo'; +$this->phrasen['global/matrikelnummer']='Matricola'; +$this->phrasen['global/minute']='minuti'; +$this->phrasen['global/mittwoch']='mercoledì'; +$this->phrasen['global/montag']='lunedì'; +$this->phrasen['global/nachname']='Cognome'; +$this->phrasen['global/name']='Nome'; +$this->phrasen['global/nebenwohnsitz']='domicilio'; +$this->phrasen['global/nein']='no'; +$this->phrasen['global/neu']='nuovo'; +$this->phrasen['global/newsgroups']='newsgroup'; +$this->phrasen['global/nichtAngemeldet ']='errore di log in: impossibile trovare l\'UID dell\'utente '; +$this->phrasen['global/nummer']='numero'; +$this->phrasen['global/ok']='ok'; +$this->phrasen['global/organisationseinheit']='Unità organizzativa'; +$this->phrasen['global/organisationseinheiten']=''; +$this->phrasen['global/ort']='luogo'; +$this->phrasen['global/passwort']='Password'; +$this->phrasen['global/person']='persona'; +$this->phrasen['global/personen']='persone '; +$this->phrasen['global/personenkennzeichen']='Codice Persona'; +$this->phrasen['global/personenkz']='Codice Persona'; +$this->phrasen['global/plz']='CAP'; +$this->phrasen['global/postnomen']='Titolo'; +$this->phrasen['global/samstag']='sabato'; +$this->phrasen['global/sekretariat']='segreteria'; +$this->phrasen['global/semester']='Semestre'; +$this->phrasen['global/sonntag']='domenica'; +$this->phrasen['global/speichern']='salva'; +$this->phrasen['global/sprache']='lingua'; +$this->phrasen['global/staatsbuergerschaft']='cittadinanza'; +$this->phrasen['global/stellvertreter']='supplenza '; +$this->phrasen['global/strasse']='via'; +$this->phrasen['global/studentenvertreter']='rappresentanti degli studendi'; +$this->phrasen['global/studiengang']='Corso di studi'; +$this->phrasen['global/studiengangKonnteNichtGefundenWerden ']='impossibile trovare corso di studi digitato'; +$this->phrasen['global/studiengangsleitung']='Direzione del corso di studi'; +$this->phrasen['global/studiengangsmanagement']='Management del corso di studi'; +$this->phrasen['global/studienrichtung']='indirizzo di studio'; +$this->phrasen['global/studiensemester']='Semestre di studio'; +$this->phrasen['global/studienplan']='Piano di studio'; +$this->phrasen['global/studiensemesterKonnteNichtGefundenWerden ']='impossibile trovare semestre di studio digitato'; +$this->phrasen['global/studienzentrum']=''; +$this->phrasen['global/stunde']='ora'; +$this->phrasen['global/suchen']='cerca'; +$this->phrasen['global/telefon']='telefono'; +$this->phrasen['global/telefonnummer']='numero telefonico'; +$this->phrasen['global/titel']='Titolo'; +$this->phrasen['global/uid']='UID'; +$this->phrasen['global/umbenennen']='cambia nome'; +$this->phrasen['global/unbekannterFehleraufgetreten']='è avvenuto un errore sconosciuto'; +$this->phrasen['global/universität']='università'; +$this->phrasen['global/username']='Username'; +$this->phrasen['global/userNichtGefunden']=''; +$this->phrasen['global/verband']='Gruppo Principale'; +$this->phrasen['global/von']='inizio'; +$this->phrasen['global/vorname']='Nome'; +$this->phrasen['global/warnungWirklichLoeschen']=''; +$this->phrasen['global/zurueck']='Indietro'; +$this->phrasen['global/zuruecksetzen']=''; +$this->phrasen['global/zweck']=''; +$this->phrasen['global/ects']='ECTS'; + +?> diff --git a/skin/images/fh_logo.png b/skin/images/fh_logo.png new file mode 100644 index 000000000..67efb4b20 Binary files /dev/null and b/skin/images/fh_logo.png differ diff --git a/skin/images/sancho_round_right_blue.png b/skin/images/sancho_round_right_blue.png new file mode 100644 index 000000000..c7eac934a Binary files /dev/null and b/skin/images/sancho_round_right_blue.png differ diff --git a/vilesci/cronjobs/ampel_erinnerungsmail.php b/vilesci/cronjobs/ampel_erinnerungsmail.php new file mode 100644 index 000000000..af8a2d61a --- /dev/null +++ b/vilesci/cronjobs/ampel_erinnerungsmail.php @@ -0,0 +1,315 @@ + */ +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/basis_db.class.php'); +require_once('../../include/datum.class.php'); +require_once('../../include/mail.class.php'); +require_once('../../include/ampel.class.php'); +require_once('../../include/person.class.php'); +require_once('../../include/phrasen.class.php'); + +$db = new basis_db(); +$datum = new datum(); +$now = $datum->mktime_fromdate(date('Y-m-d')); + +$sprache = getSprache(); +$p = new phrasen($sprache); + +//get all notifications +$ampel_obj = new ampel(); +$ampel_obj->getAll(); +$ampel_arr = $ampel_obj->result; + +//filter only notifications that are not expired, not before vorlaufzeit AND email is true +$ampel_arr = filterAmpeln($ampel_arr); + +//get user of notifications, ampel_id, description and deadline +$new_ampel_user_arr = array(); //user with new notifications that are not confirmed +$overdue_ampel_user_arr = array(); //user with overdue notifications that are not confirmed +foreach($ampel_arr as $ampel) +{ + $deadline = $datum->mktime_fromdate($ampel->deadline); + $insert_date = $datum->formatDatum($ampel->insertamum, 'Y-m-d'); + $qry_all_ampel_user = $ampel->benutzer_select; + $kurzbz = $ampel->kurzbz; + + $new = false; + $overdue = false; + $new_user_arr = array(); + $overdue_user_arr = array(); + + if($result = $db->db_query($qry_all_ampel_user)) + { + while($row = $db->db_fetch_object($result)) + { + $user = $row->uid; + + //break if almost confirmed + if ($ampel_obj->isBestaetigt($user, $ampel->ampel_id)) + break; + + //check if notification is new (within last week, as cronjob will run every week) + if ($datum->DateDiff (date('Y-m-d'), $insert_date) >= -7) + { + $new = true; + $new_user_arr[] = $user; + } + + //check if notification is overdue + if ($now > $deadline) + { + $overdue = true; + $overdue_user_arr[] = $user; + } + } + } + + if ($new) + { + $new_ampel_user_arr[] = array( + 'ampel_id' => $ampel->ampel_id, + 'ampel_bezeichnung' => $kurzbz, + 'user' => $new_user_arr, + 'deadline' => date('d.m.Y', $deadline)); + } + + if ($overdue) + { + $overdue_ampel_user_arr[] = array( + 'ampel_id' => $ampel->ampel_id, + 'ampel_bezeichnung' => $kurzbz, + 'user' => $overdue_user_arr, + 'deadline' => date('d.m.Y', $deadline)); + } +} + +//rearrange arrays as needed to send in eMails +$new_ampel_user_arr = organizeAmpelnForMail($new_ampel_user_arr); +$overdue_ampel_user_arr = organizeAmpelnForMail($overdue_ampel_user_arr); + +//send eMail for new notifications +foreach ($new_ampel_user_arr as $receiver) +{ + //get data about sender + $person = new person(); + $person->getPersonFromBenutzer($receiver['user']); + $firstName = $person->vorname; + + //link to notifications system site + $link = APP_ROOT . "cis/index.php?sprache=German&content_id=&menu=" . APP_ROOT . "cis/menu.php?content_id=&content=" . APP_ROOT . "cis/private/tools/ampelverwaltung.php"; + + //eMail data + $to = $receiver['user'] . '@' . DOMAIN; + $from = 'noreply@'.DOMAIN; + $subject = 'Sie haben eine neue Ampel!'; + $title = "Sie haben neue Nachrichten in Ihrem Ampelsystem!"; + $content = "

Hallo " . $firstName . ",

"; + $content .= "

es gibt neue Ampeln für Sie:


"; + + for ($i = 0; $i < count($receiver) - 1; $i++) + { + $receiver[$i]['ampel_id']; + $content .= "

NEU:  " . $receiver[$i]['ampel_bezeichnung'] . "

"; + } + + $content .= "

Sie können sie jetzt gleich in Ihrem Ampelsystem bestätigen:

"; + $content .= "
Zu meinem Ampelsystem
"; + $content .= "


Schönen Tag noch,

"; + $content .= "

Sancho

"; + + //send eMail + sendMail($to, $from, $subject, $content, $title); +} + +//send eMail for overdue notifications +foreach ($overdue_ampel_user_arr as $receiver) +{ + //get data about sender + $person = new person(); + $person->getPersonFromBenutzer($receiver['user']); + $firstName = $person->vorname; + + //link to notifications system site + $link = APP_ROOT . "cis/index.php?sprache=German&content_id=&menu=" . APP_ROOT . "cis/menu.php?content_id=&content=" . APP_ROOT . "cis/private/tools/ampelverwaltung.php"; + + //eMail data + $to = $receiver['user'] . '@' . DOMAIN; + $from = 'noreply@'.DOMAIN; + $subject = 'Bestätigen Sie bitte Ihre Ampel!'; + $title = "Die Deadline für Ihre Ampel ist überschritten!"; + $content = "

Hallo " . $firstName . ",

"; + $content .= "

es gibt Ampeln, die von Ihnen noch bestätigt werden müssen:


"; + + for ($i = 0; $i < count($receiver) - 1; $i++) + { + $receiver[$i]['ampel_id']; + $content .= "

BESTÄTIGUNG FEHLT:  " . $receiver[$i]['ampel_bezeichnung'] . "

"; + $content .= "

Die Deadline für die Bestätigung war am " . $receiver[$i]['deadline'] . "


"; + } + + $content .= "

Sie können sie jetzt gleich in Ihrem Ampelsystem bestätigen:

"; + $content .= "
Zu meinem Ampelsystem
"; + $content .= "


Schönen Tag noch,

"; + $content .= "

Sancho

"; + + //send eMail + sendMail($to, $from, $subject, $content, $title); +} + + +//************************************************************* FUNCTIONS +function filterAmpeln($ampel_arr) +{ + $datum = new datum(); + $now = $datum->mktime_fromdate(date('Y-m-d')); + $arr = array(); + + foreach ($ampel_arr as $ampel) + { + $deadline = $datum->mktime_fromdate($ampel->deadline); + $vorlaufzeit = $ampel->vorlaufzeit; + $verfallszeit = $ampel->verfallszeit; + + $datum_liegt_vor_vorlaufzeit = false; + $datum_liegt_nach_verfallszeit = false; + + if (!is_null($vorlaufzeit)) + $datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline); + + if (!is_null($verfallszeit)) + $datum_liegt_nach_verfallszeit = $now > strtotime('+' . $verfallszeit . ' day', $deadline); + + if (!$datum_liegt_vor_vorlaufzeit && !$datum_liegt_nach_verfallszeit && $ampel->email) + { + $arr[] = $ampel; + } + } + return $arr; +} +function organizeAmpelnForMail ($ampel_user_arr) +{ + $helper_arr = array(); + $unique_user_arr = array(); + foreach ($ampel_user_arr as $ampel_user) + { + foreach ($ampel_user['user'] as $user) + { + if(!in_array($user, $helper_arr)) + { + $helper_arr[] = $user; + $unique_user_arr[] = array( + 'user' => $user, + array( + 'ampel_id' => $ampel_user['ampel_id'], + 'ampel_bezeichnung' => $ampel_user['ampel_bezeichnung'], + 'deadline' => $ampel_user['deadline'])); + } + else + { + $index = array_search($user, array_column($unique_user_arr, 'user')); + $unique_user_arr[$index][] = + array( + 'ampel_id' => $ampel_user['ampel_id'], + 'ampel_bezeichnung' => $ampel_user['ampel_bezeichnung'], + 'deadline' => $ampel_user['deadline']); + } + } + } + return $unique_user_arr; +} +function sendMail($to, $from, $subject, $html_content, $title = 'Sancho hat neue Nachrichten für Sie!') +{ + $sancho_img = APP_ROOT . "skin/images/sancho_round_right_blue.png"; + $logo_img = APP_ROOT . "skin/images/fh_logo.png"; + + //mail content as plain text (fallback if html not activated) + $plain_text = "Hallo,\n\n"; + if (!empty ($title)) + $plain_text .= strip_tags($title) . "\n\n"; + $plain_text .= "Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Inhalt vollständig darzustellen."; + + //mail content as html text + /* + * no css styles in html-head (email clients picky about that) + * tables inside tables for correct styles in different email clients + */ + $html_text = ' + + + Sancho Ampelmail + +
+ + + + + + + + + + +
+ + + + + +
+ sancho_face + +

' . $title . '

+
+
+ + + + +
+
' . $html_content . '
+
+
+ + + + + +
+ So spannend kann Technik sein! + + logo +
+
+
+ '; + + $mail = new mail($to, $from, $subject, $plain_text); + $mail->setHtmlContent($html_text); + $mail->addEmbeddedImage($sancho_img, "image/png", "", "SanchoFace"); + $mail->addEmbeddedImage($logo_img, "image/png", "", "Logo"); + + if(!$mail->send()) + echo $p->t('global/emailNichtVersendet') . ' an ' . $to . "
"; +} + + + + +