diff --git a/include/benutzerberechtigung.class.php b/include/benutzerberechtigung.class.php index 2eca57225..8811d2f99 100644 --- a/include/benutzerberechtigung.class.php +++ b/include/benutzerberechtigung.class.php @@ -805,6 +805,9 @@ class benutzerberechtigung extends basis_db foreach ($this->berechtigungen as $b) { + if(!mb_strstr($b->berechtigung_kurzbz,'wawi/')) + continue; + if (($berechtigung_kurzbz==$b->berechtigung_kurzbz || $berechtigung_kurzbz==null || mb_substr($berechtigung_kurzbz,0,mb_strpos($berechtigung_kurzbz,':'))==$b->berechtigung_kurzbz) && (($timestamp>$b->starttimestamp || $b->starttimestamp==null) && ($timestamp<$b->endetimestamp || $b->endetimestamp==null))) { @@ -826,7 +829,7 @@ class benutzerberechtigung extends basis_db } else { - if(!is_null($b->oe_kurzbz)) + if($b->oe_kurzbz!='') { $childoes = $oe->getChilds($b->oe_kurzbz); foreach($childoes as $row) @@ -869,7 +872,7 @@ class benutzerberechtigung extends basis_db if(count($not)>0) $qry.=" AND oe_kurzbz NOT IN(".$this->implode4SQL($not).")"; } - + if($result = $this->db_query($qry)) { while($row = $this->db_fetch_object($result)) diff --git a/include/berechtigung.class.php b/include/berechtigung.class.php index 8ca5a1091..25808bd22 100644 --- a/include/berechtigung.class.php +++ b/include/berechtigung.class.php @@ -39,6 +39,69 @@ class berechtigung extends basis_db parent::__construct(); } + /** + * Laedt eine Berechtigung + * @param $berechtigung_kurzbz + * @return true wenn ok, false im Fehlerfall + */ + public function load($berechtigung_kurzbz) + { + $qry = "SELECT * FROM system.tbl_berechtigung WHERE berechtigung_kurzbz='".addslashes($berechtigung_kurzbz)."'"; + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + $this->berechtigung_kurzbz=$row->berechtigung_kurzbz; + $this->beschreibung = $row->beschreibung; + return true; + } + else + { + $this->errormsg = 'Eintrag wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Speichert eine Berechtigung + * + */ + public function save($new=null) + { + if(is_null($new)) + $new = $this->new; + + if($new) + { + $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES(". + $this->addslashes($this->berechtigung_kurzbz).','. + $this->addslashes($this->beschreibung).');'; + } + else + { + $qry = 'UPDATE system.tbl_berechtigung + SET beschreibung='.$this->addslashes($this->beschreibung).' + WHERE berechtigung_kurzbz='.$this->addslashes($this->berechtigung_kurzbz).';'; + } + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern: '.$this->db_last_error(); + return false; + } + } + /** * Holt alle BerechtigungsRollen * @return true wenn erfolgreich, false im Fehlerfall diff --git a/system/checksystem.php b/system/checksystem.php index 44b9db981..e23e4e5a4 100644 --- a/system/checksystem.php +++ b/system/checksystem.php @@ -1593,7 +1593,6 @@ if(!@$db->db_query('SELECT * FROM wawi.tbl_konto LIMIT 1')) GRANT SELECT, UPDATE ON SEQUENCE wawi.seq_bestellung_bestellung_id TO wawi; GRANT SELECT, UPDATE ON SEQUENCE wawi.seq_bestelldetail_bestelldetail_id TO wawi; - -- INDEX CREATE INDEX idx_bestelldetail_bestellung_id ON wawi.tbl_bestelldetail (bestellung_id); diff --git a/system/sync/sync_berechtigung.php b/system/sync/sync_berechtigung.php new file mode 100644 index 000000000..a58c09a6b --- /dev/null +++ b/system/sync/sync_berechtigung.php @@ -0,0 +1,276 @@ +, + * Andreas Oesterreicher and + * Karl Burkhart . + */ +/** + * Syncronisiert die Aufteilung von WaWi DB in FHComplete DB + */ +require_once('../../config/wawi.config.inc.php'); +require_once('../../include/basis_db.class.php'); +require_once('../../include/mail.class.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/berechtigung.class.php'); + +if (!$db = new basis_db()) + die('Fehler beim Herstellen der Datenbankverbindung'); + +if (!$conn_wawi = pg_pconnect(CONN_STRING_WAWI)) + die('Es konnte keine Verbindung zum Server aufgebaut werden. *** File:='.__FILE__.' Line:='.__LINE__."\n"); + +$error_log=''; +$update_log=''; +$anzahl=0; +$anzahl_insert=0; +$anzahl_update=0; +$anzahl_delete=0; +$anzahl_fehler=0; +$starttime=date("d.m.Y H:i:s"); + + +checkBerechtigung('wawi/bestellung','Bestellungen verwalten'); +checkBerechtigung('wawi/rechnung','Rechnungen verwalten'); +checkBerechtigung('wawi/konto','Konten verwalten'); +checkBerechtigung('wawi/kostenstelle','Kostenstellen verwalten'); +checkBerechtigung('wawi/freigabe','Freigeben von Bestellungen'); +checkBerechtigung('wawi/rechnung_freigeben','Freigeben von Rechnungen'); +checkBerechtigung('wawi/rechnung_transfer','Setzen des TransferDatums von Rechnungen'); + +?> + + +Synchro - WaWi -> FAS - Berechtigung + + + +username_neu=='test') + continue; + + if($row->freigeben=='t' && $row->kostenstelle_id!='') + { + // wawi/freigabe suid kostenstelle_id + addBerechtigung($row->username_neu, 'wawi/freigabe', 'suid', null, $row->kostenstelle_id); + } + + $art=''; + if($row->lesen=='t') + $art='s'; + if($row->schreiben=='t') + $art.='uid'; + + if($art!='') + { + // wawi/bestellung $art $kostenstelle_id/$oe_kurzbz + addBerechtigung($row->username_neu, 'wawi/bestellung', $art, $row->oe_kurzbz, $row->kostenstelle_id); + + // wawi/rechnung $art $kostenstelle_id/$oe_kurzbz + addBerechtigung($row->username_neu, 'wawi/rechnung', $art, $row->oe_kurzbz, $row->kostenstelle_id); + } + } + + /** + * Permissions aufgrund des Feldes perms + */ + + //GST + $qry = "SELECT username_neu FROM public.benutzer WHERE perms='gst'"; + if($result = pg_query($conn_wawi, $qry)) + { + while($row = pg_fetch_object($result)) + { + addBerechtigung($row->username_neu, 'wawi/freigabe', 'suid', 'gst', null); + } + } + + //REK + $qry = "SELECT username_neu FROM public.benutzer WHERE perms='rek'"; + if($result = pg_query($conn_wawi, $qry)) + { + while($row = pg_fetch_object($result)) + { + addBerechtigung($row->username_neu, 'wawi/freigabe', 'suid', 'etw', null); + } + } + + //GMBH + $qry = "SELECT username_neu FROM public.benutzer WHERE perms='gmb'"; + if($result = pg_query($conn_wawi, $qry)) + { + while($row = pg_fetch_object($result)) + { + addBerechtigung($row->username_neu, 'wawi/freigabe', 'suid', 'gmbh', null); + } + } + + //Admin + $qry = "SELECT username_neu FROM public.benutzer WHERE perms='admin'"; + if($result = pg_query($conn_wawi, $qry)) + { + while($row = pg_fetch_object($result)) + { + addBerechtigung($row->username_neu, 'wawi/konto', 'suid', 'gst', null); + addBerechtigung($row->username_neu, 'wawi/kostenstelle', 'suid', 'gst', null); + addBerechtigung($row->username_neu, 'wawi/bestellung', 'suid', 'gst', null); + addBerechtigung($row->username_neu, 'wawi/rechnung', 'suid', 'gst', null); + addBerechtigung($row->username_neu, 'wawi/rechnung_transfer', 'suid', 'gst', null); + addBerechtigung($row->username_neu, 'wawi/rechnung_freigeben', 'suid', 'gst', null); + } + } + //Mail versenden + $statistik="Berechtigung Sync\n--------------\n"; + $statistik.="Beginn: ".$starttime." von ".DB_NAME." - Anzahl Einträge: ".$anzahl."\n\n"; + $statistik.="\nEingefügte Datensätze: $anzahl_insert"; + $statistik.="\nGeänderte Datensätze: $anzahl_update"; + $statistik.="\nFehler: $anzahl_fehler\n"; + + $synced=$statistik.$error_log.$update_log; + $mail = new mail(MAIL_ADMIN, "vilesci@".DOMAIN, "SYNC Berechtigung von ".DB_NAME, $synced); + $mail->setReplyTo("vilesci@".DOMAIN); + if(!$mail->send()) + { + echo "Fehler beim Versenden des Durchführungs-Mails!
"; + } +} + +/** + * Prueft ob die Berechtigung (Benutzerrolle) vorhanden ist. Wenn nicht wird diese Angelegt + * @param $username + * @param $berechtigung_kurbz + * @param $art + * @param $oe_kurzbz + * @param $kostenstelle_id + */ +function addBerechtigung($username, $berechtigung_kurzbz, $art, $oe_kurzbz, $kostenstelle_id) +{ + global $error_log, $anzahl_fehler, $anzahl_insert, $db; + + $qry = "SELECT * FROM system.tbl_benutzerrolle + WHERE + uid='".addslashes($username)."' + AND berechtigung_kurzbz='".addslashes($berechtigung_kurzbz)."'"; + if($oe_kurzbz!='') + $qry.=" AND oe_kurzbz='".addslashes($oe_kurzbz)."'"; + if($kostenstelle_id!='') + $qry.=" AND kostenstelle_id='".addslashes($kostenstelle_id)."'"; + if($art!='') + $qry.=" AND art='".addslashes($art)."'"; + + if($result = $db->db_query($qry)) + { + if($db->db_num_rows($result)==0) + { + $rechte = new benutzerberechtigung(); + $rechte->uid = $username; + $rechte->berechtigung_kurzbz = $berechtigung_kurzbz; + $rechte->art = $art; + $rechte->oe_kurzbz = $oe_kurzbz; + $rechte->kostenstelle_id = $kostenstelle_id; + $rechte->insertamum = date('Y-m-d H:i:s'); + $rechte->inservon = 'Syncro'; + $rechte->new = true; + + if($rechte->save()) + { + $anzahl_insert++; + } + else + { + $anzahl_fehler++; + $error_log.="\n".$rechte->errormsg; + } + } + } +} + +/** + * Prueft ob eine Berechtigung vorhanden ist und legt diese ggf an + * @param $berechtigung_kurzbz + * @param $beschreibung + */ +function checkBerechtigung($berechtigung_kurzbz, $beschreibung) +{ + global $error_log, $anzahl_fehler; + + $berechtigung = new berechtigung(); + + if(!$berechtigung->load($berechtigung_kurzbz)) + { + $berechtigung->berechtigung_kurzbz=$berechtigung_kurzbz; + $berechtigung->beschreibung=$beschreibung; + $berechtigung->new = true; + + if(!$berechtigung->save()) + { + $error_log.="\nFehler beim Anlegen der Berechtigung wawi/bestellung"; + $anzahl_fehler++; + } + } +} +?> \ No newline at end of file diff --git a/wawi/rechnung.php b/wawi/rechnung.php index b4d679244..7fc5ea83d 100644 --- a/wawi/rechnung.php +++ b/wawi/rechnung.php @@ -356,7 +356,7 @@ elseif($aktion == 'new') foreach($kostenstelle->result as $row) { - echo ''; + echo ''; } echo ''; echo '';