From 59cf91925ca8da43d2427331b23e4673b0e53095 Mon Sep 17 00:00:00 2001 From: Tarik Gasmi Date: Mon, 14 May 2007 08:03:48 +0000 Subject: Other webinterface data. git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1077 95ad53e4-c205-0410-b2fa-d234c58c8868 --- ldap-site-mngmt/webinterface/lib/commonlib.inc.php | 552 +++++++++++++++++++++ 1 file changed, 552 insertions(+) create mode 100644 ldap-site-mngmt/webinterface/lib/commonlib.inc.php (limited to 'ldap-site-mngmt/webinterface/lib/commonlib.inc.php') diff --git a/ldap-site-mngmt/webinterface/lib/commonlib.inc.php b/ldap-site-mngmt/webinterface/lib/commonlib.inc.php new file mode 100644 index 00000000..32df2a1c --- /dev/null +++ b/ldap-site-mngmt/webinterface/lib/commonlib.inc.php @@ -0,0 +1,552 @@ +\n" . + " \n" . + ' ' . "\n" . + " \n"; + if ($msg) { + echo " \n" . + $msg . + " \n"; + } + echo "\n"; + } + + + +/** +* getRights($ds, $userDn) - ermittelt die Rechte eines Users. +* +* Die Funktion erwartet ein Directory-Handle und den vollständigen Distiguished Name des +* Users. Rückgabewert ist ein numerisches eindimensionales Array, welches die Rechte enthält. +* +* @param resource ds LDAP Directory Handle +* @param string userDn Distinguishedname des Users +* +* @return array rechte +* +* @author Timothy Burk +*/ + +function getRoles($ds, $userDN) { + global $ldapError, $suffix, $uid; + + if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(member=$userDN)(cn=*))", array("dn","cn"), "dn", "sub", 0, 0))) { + redirect(5, "index.php", $ldapError, FALSE); + die; + } + $result = ldapArraySauber($result); + $clean = array(); + + foreach($result as $item) { + $dn = ldap_explode_dn($item['dn'], 0); + $dnsub = array_slice($dn,3); + $auDN = implode(',',$dnsub); + $element['au'] = $auDN; + $element['role'] = $item['cn']; + $clean[] = $element; + } + + $res = array(); + foreach($clean as $item){ + $au = $item['au']; + $role = $item['role']; + if(array_key_exists($au,$res)){ + $res[$au][] = $role; + } + else{ + $res[$au] = array($role); + } + } + $i=0; + foreach (array_keys($res) as $key){ + $au_roles[$i]['au'] = $key; + $au_roles[$i]['role'] = $res[$key]; + $i++; + } + return $au_roles; +} + + +/** +* createMenu($rechte) - erstellt die Menuleiste abhängig von der Rechten des Users. +* +* Die Navigationsleiste wird dynamisch erzeugt und von dieser Funktion direkt in das +* entsprechende Template geparst. Dabei werden nur die Schaltflächen zur Verfügung +* gestellt, die der User mit seinen Rechten anzeigen darf. +* +* @param array rechte Eindimensionales Array mit den Rechten des Users +* @param int mainnr Nummer des aktiven Hauptmenus +* +* @author Timothy Burk +*/ + +function createMainMenu($rollen , $mainnr) { + global $template; + global $START_PATH; + + # pre-checks + if ( check_if_max_networks() ){ + $dhcplink = "dhcp/dhcp.php"; + }else{ + $dhcplink = "dhcp/no_dhcp.php"; + } + + # Struktur der Registerkartenleiste + $mainmenu = array(array("link" => "au/au.php", + "text" => "AU Home", + "zugriff" => "alle"), + array("link" => "roles/roles.php", + "text" => "Admin Rollen", + "zugriff" => array("MainAdmin")), + array("link" => "ip/ip.php", + "text" => "IP Management", + "zugriff" => array("MainAdmin","HostAdmin","DhcpAdmin")), + array("link" => "computers/computers.php", + "text" => "Rechner", + "zugriff" => array("MainAdmin","HostAdmin","DhcpAdmin")), + array("link" => "rbs/rbs.php", + "text" => "RemoteBoot/PXE", + "zugriff" => array("MainAdmin","HostAdmin")), + array("link" => $dhcplink, + "text" => "DHCP", + "zugriff" => array("MainAdmin","DhcpAdmin")), + array("link" => "dns/dns.php", + "text" => "DNS", + "zugriff" => array("MainAdmin","ZoneAdmin","HostAdmin"))); + + + # Zusammenstellen der Menuleiste + $template->define_dynamic("Mainmenu", "Mmenu"); + $i=0; + foreach($mainmenu as $item) { + if($item['zugriff'] === "alle" || vergleicheArrays($rollen , $item['zugriff'])) { + if ($i==0) { + if ($mainnr==0) { + $zwisch=""; + $lastaktive=true; + $farb="#505050"; + } + else { + $zwisch=""; + $farb="#A0A0A0"; + $lastaktive=false; + } + } + else { + if ($mainnr==$i) { + $zwisch=""; + $lastaktive=true; + $farb="#505050"; + } + else { + $farb="#A0A0A0"; + if ($lastaktive) {$zwisch="";} + else {$zwisch="";} + $lastaktive=false; + } + } + $template->assign(array("MZWISCHEN" => $zwisch, + "MFARBE" => $farb, + "MLINK_M" => $START_PATH.$item["link"], + "MTEXT_M" => $item["text"])); + $template->parse("MAINMENU_LIST", ".Mainmenu"); + } + $i=$i+1; + } + if ($lastaktive) {$template->assign(array("MENDE" => ""));} + else { + $template->assign(array("MENDE" => "")); + } + +} + + + +/** +* vergleicheArrays($a, $b) - Ermitteln der Schnittmenge zweier Arrays +* +* @param array a +* @param array b +* +* @return boolean TRUE, wenn die Schnittmenge von a und b nicht leer ist, sonst FALSE +* +* @author Timothy Burk +*/ + +function vergleicheArrays($a, $b) { + if((sizeof(array_unique($a)) + sizeof($b)) > sizeof(array_unique(array_merge($a, $b)))) { + return TRUE; + } else { + return FALSE; + } +} + + +/** +* inputArraySauber($Array) +* +* Löscht aus einem Array, welches POST-Daten enthält leere Felder. Nötig für die Formatierung +* vor dem Anlegen neuer Objekte. +* +* @param array _POST-Array +* +* @return array Bereinigtes Array. +* +* @author Timothy Burk +*/ +function inputArraySauber($Array) { + $b = array(); + foreach($Array as $key => $a) { + if(!is_array($a)) { + trim($a); + } + if (!$a == "") { + if(is_array($a)) { + $b[$key] = $a; + } else { + $b[$key] = htmlentities($a); + } + } + } + return $b; +} + + +/** +* numArraySauber($Array) +* +* Löscht aus einemn numerischen Array leere Felder. +* +* @param array Numerisches Array +* +* @return array Bereinigtes Array. +* +* @author Timothy Burk +*/ +function numArraySauber($Array) { + $b = array(); + $arr = array(); + if(!(is_array($Array))) { + $arr[] = $Array; + } else { + $arr = $Array; + } + foreach($arr as $key => $a) { + if (!$a == "") { + $b[] = $a; + } + } + return $b; +} + +/** +* ldapArraySauber($Array, [$delEmpty]) +* +* Bereinigt ein dreidimensionales Array, so wie es aus der Funktion uniLdapSearch kommt. +* Dabei werden alle count-Felder sowie alle numerischen Felder in denen der Schlüssel +* gespeichert ist entfernt. Attributarrays mit nur einem Element werden gelöscht, das Element +* wir als Skalar gespeichert. +* Wenn $delEmpty = TRUE ist, werden nur nichtleere Felder gespeichert. +* +* @param array $Array uniLdapSearch()-Ausgabe +* @param boolean $delEmpty (Standard: $delEmpty = FALSE) +* +* @return array Bereinigtes Array. +* +* @author Timothy Burk +*/ +function ldapArraySauber($Array, $delEmpty = FALSE) { + $b = array(); + foreach($Array as $key => $item) { + if(is_array($item)) { + foreach($item as $key_attr => $attr) { + if(!is_int($key_attr)) { + if(is_array($attr)) { + if($attr['count'] == 1) { + $attr[0] = str_replace(chr(160),"",trim($attr[0])); + if(($delEmpty && $attr[0] != "") || !($delEmpty)) { + $b[$key][$key_attr] = $attr[0]; + } + } else { + for($i=0; $i < $attr['count']; $i++) { + $attr[$i] = str_replace(chr(160),"",trim($attr[$i])); + if(($delEmpty && $attr[$i] != "") || !($delEmpty)) { + $b[$key][$key_attr][$i] = $attr[$i]; + } + } + } + } else { + $attr = str_replace(chr(160),"",trim($attr)); + if(($delEmpty && $attr != "") || !($delEmpty)) { + $b[$key][$key_attr] = $attr; + } + } + } + } + } else { + if(is_int($key)) { + $item = str_replace(chr(160),"",trim($item)); + if(($delEmpty && $item != "") || !($delEmpty)) { + $b[$key] = $item; + } + } + } + } + return $b; +} + +/** +* personOptionen($rechte) +* +* Enthält die möglichen Optionen, die auf einen User angewandt werden können als +* zweidimensionales Array mit folgenden Attributen: +* [ziel]: Aufzurufendes PHP-Skript +* [text]: Beschriftung der Schaltfläche +* [desc]: Beschreibung der Funktion +* [rechte][]: Array mit den erforderlichen Rechten für die jeweilige Option. array("alle") steht für "ohne Einschränkung". +* +* Dieses in dieser Funktion gespeicherte Array wird abhängig von den übergebenen +* Rechten um nicht erlaubte Optionen reduziert und dann ausgegeben. +* +* @param array $rechte Eindimensionales Array $_SESSION['rechte'] +* +* @return array Zweidimensionales Array mit den erlaubten Optionen. +* +* @author Timothy Burk +*/ +function personOptionen($rechte) { + global $utc_uid, $utc_cn, $START_PATH; + $optionen = array(); + $optionen[] = array("ziel" => $START_PATH."person/datensatz.php?aktion=edit", + "text" => "Userdaten bearbeiten", + "desc" => "Anzeigen und Ändern der persönlichen Daten des Users.", + "rechte" => array("writeMitarbeiter"), + "hidden" => array("aktion" => "edit")); + $optionen[] = array("ziel" => $START_PATH."person/datensatz.php", + "text" => "Datensatz löschen", + "desc" => "Der User wird vollständig mit allen Daten aus der Datenbank gelöscht.", + "rechte" => array("writeMitarbeiter"), + "hidden" => array("aktion" => "delete")); + $optionen[] = array("ziel" => $START_PATH."person/datensatz.php", + "text" => "User (de)aktivieren", + "desc" => "Diese Funktion legt einen User durch die Deaktivierung im Archiv ab. Von dort kann der Datensatz weiterhin eingesehen und ggf. reaktiviert werden.", + "rechte" => array("writeMitarbeiter"), + "hidden" => array("aktion" => "archiv")); + $optionen[] = array("ziel" => $START_PATH."person/vertrag_show.php", + "text" => "Verträge bearbeiten", + "desc" => "Bearbeiten oder Anlegen eines Vertrages. Sie können dabei zwischen verschiedenen Vertragsarten wählen.", + "rechte" => array("writeVertrag", "readVertrag")); + $optionen[] = array("ziel" => $START_PATH."urlaub/krank_angabe.php", + "text" => "Krankheitstage", + "desc" => "Krankheitsdaten bearbeiten.", + "rechte" => array("writeKrankheitUrlaub"), + "hidden" => array("uidToChange" => $utc_uid, "GName" => $utc_cn)); + $optionen[] = array("ziel" => $START_PATH."urlaub/liste.php", + "text" => "Urlaubstage anzeigen", + "desc" => "Urlaubstage des Users in grafischer Übersicht anzeigen.", + "rechte" => array("readKrankheitUrlaub"), + "hidden" => array("wer" => $utc_uid, "wann" => "g", "sub" => $utc_cn)); + $optionen[] = array("ziel" => $START_PATH."person/rechte_show.php", + "text" => "Rechte vergeben", + "desc" => "Diese Option dient dazu, dem User bestimmte Rechte zuzuweisen, beispielsweise das Recht Urlaub zu beantragen, Vertragsdaten andere User zu bearbeiten oder einzusehen usw..", + "rechte" => array("writeRechte")); + $optionen[] = array("ziel" => $START_PATH."person/suchen.php", + "text" => "Abbrechen", + "desc" => " ", + "rechte" => array("alle")); + + $opt_reduced = array(); + foreach($optionen as $option) { + if(in_array("alle",$option['rechte']) || vergleicheArrays($option['rechte'],$rechte)) { + array_push($opt_reduced, $option); + } + } + return $opt_reduced; +} + + +/** +* makeArrFromAttribute($a, $attribute) +* +* Ein zweidimensionales Array wird nach der ersten Dimension durchlaufen. +* Dabei werden die Werte des angegebenen Attributes $attribute für alle +* Einträge extrahiert und in einem neuen Array gespeichert, welches +* anschließend zurückgegeben wird. +* +* @param array $a Zweidimensionales Array +* @param string $attribute Schlüsselname der zweiten Dimension +* +* @return array Eindimensionales numerisches Array mit den Attributwerten. +* +* @author Timothy Burk +*/ +function makeArrFromAttribute($a, $attribute) { + $c = array(); + foreach($a as $b) { + $c[] = $b[$attribute]; + } + return $c; +} +?> + + $sortKey = "$j#$k#sortkey" +* @param string $sortDirection : die Sortierrichtung, gültige Werte sind "up", "down" +* +* +* @author Daniel Höfler +*/ +function sortArrayByKey($array, $sortKey, $sortDirection = "up") { + $sortKeyArray = explode("#", $sortKey); + $count = count($sortKeyArray); + if($count < 5) { + switch($count) { + case 0: + foreach($array as $key => $item) { + $toSortKeys[$key] = $item; + } + break; + case 1: + foreach($array as $key => $item) { + $toSortKeys[$key] = $item[$sortKeyArray[0]]; + } + break; + case 2: + foreach($array as $key => $item) { + $toSortKeys[$key] = $item[$sortKeyArray[0]][$sortKeyArray[1]]; + } + break; + case 3: + foreach($array as $key => $item) { + $toSortKeys[$key] = $item[$sortKeyArray[0]][$sortKeyArray[1]][$sortKeyArray[2]]; + } + break; + case 4: + foreach($array as $key => $item) { + $toSortKeys[$key] = $item[$sortKeyArray[0]][$sortKeyArray[1]][$sortKeyArray[2]][$sortKeyArray[3]]; + } + break; + } + } else { + echo "zu viele Dimensionen!! Höchstens 4 Dimensionen möglich"; + return false; + } + if($sortDirection == "up") { + asort($toSortKeys); + } elseif($sortDirection == "down") { + arsort($toSortKeys); + } else { + echo "Keine gültige Sortierrichtung!! Wählen sie \"up\" oder \"down\"\n"; + return false; + } + $sortArray = array(); + foreach($toSortKeys as $key => $item) { + $sortArray[$key] = $array[$key]; + } + return($sortArray); +} + +?> \ No newline at end of file -- cgit v1.2.3-55-g7522