"mail_process", "MyBasket" => "mail_process"); //Baskets qui ne tiennent pas en compte de la redirection $group_basket = array("CopyMailBasket" => "copy_mail"); //WEB EXECUTION if(!isset($argv)) { if(!( isset($_GET['conf']) && isset($_GET['infile']) )) exit("

Erreur de Syntaxe !
La syntaxe est ".$_SERVER['REQUEST_URI']."?conf=".htmlentities("")."&infile=".htmlentities("")."

"); else { $ldap_conf_file = trim($_GET['conf']); $in_xml_file = trim($_GET['infile']); } } //CLI EXECUTION else { if(!(count($argv) > 2 )) exit("Erreur de Syntaxe !\nLa syntaxe est $argv[0] "); else { $ldap_conf_file = trim($argv[1]); $in_xml_file = trim($argv[2]); } } //PHP File to include $include_file = array("class_log.php","../class_functions.php","../class_db.php"); foreach($include_file as $if) { if ( !@include_once($if)) { if(!isset($argv)) exit("

Erreur:
Unable to load ".$if."

"); else exit("Unable to load ".$if."\n"); } } //Create The Log try { $log = new log('log.xml','root'); } catch(Exception $e){ exit($e->getMessage()."\n"); } $log->start(); //Looking for the config.xml if(!@DOMDocument::load("../xml/config.xml")) { $log->add_fatal_error("Unable to load the config.xml file"); exit; } else $config_xml = DOMDocument::load("../xml/config.xml"); //**********************************// // LOAD XML INFILE // //**********************************// $in_xml = new DomDocument(); try { $in_xml->load($in_xml_file); } catch(Exception $e) { $log->add_fatal_error("Impossible de charger le document : ".$in_xml_file." Erreur : ".$e.getMessage); exit; } $xp_in_xml = new domxpath($in_xml); $old_in_xml = new DomDocument(); try { @$old_in_xml->load(dirname($in_xml_file)."/old_".basename($in_xml_file)); } catch(Exception $e){} $old_xp_in_xml = new domxpath($old_in_xml); //**********************************// // LOAD CONF // //**********************************// //Extraction du fichier de conf $ldap_conf = new DomDocument(); try { $ldap_conf->load($ldap_conf_file); } catch(Exception $e) { $log->add_fatal_error("Impossible de charger le document : ".$ldap_conf_file." Erreur : ".$e.getMessage); exit; } $xp_ldap_conf = new domxpath($ldap_conf); foreach($xp_ldap_conf->query("/root/config/*") as $cf) ${$cf->nodeName} = $cf->nodeValue; //Extraction du fichier de conf de la derni�re execution $old_ldap_conf = new DomDocument(); try { @$old_ldap_conf->load(dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)); $log->add_notice("Old ldap conf xml File :".dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)); } catch(Exception $e) { $log->add_notice("No old ldap conf file :".dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)); } $old_xp_ldap_conf = new domxpath($old_ldap_conf); $old_lost_users = $xp_ldap_conf->query("/root/config/lost_users")->item(0)->nodeValue; ///**********************************// // DATABASE CONNECTION // //**********************************// //Database Session Var connection for the class_db $_SESSION['config']['databaseserver'] = $config_xml->getElementsByTagName("databaseserver")->item(0)->nodeValue; $_SESSION['config']['databaseuser'] = $config_xml->getElementsByTagName("databaseuser")->item(0)->nodeValue; $_SESSION['config']['databasepassword'] = $config_xml->getElementsByTagName("databasepassword")->item(0)->nodeValue; $_SESSION['config']['databasename'] = $config_xml->getElementsByTagName("databasename")->item(0)->nodeValue; $_SESSION['config']['force_client_utf8'] = $config_xml->getElementsByTagName("force_client_utf8")->item(0)->nodeValue; $db = new dbquery(); $db->connect(); //**********************************// // MAPPING // //**********************************// //User foreach( $xp_ldap_conf->query("/root/mapping/user/@* | /root/mapping/user/* | /root/mapping/user/*/@*") as $us) if( !empty($us->nodeValue) && ( trim($us->nodeValue) != "") ) $xml_user_fields[] = $us->nodeName; //Group foreach( $xp_ldap_conf->query("/root/mapping/group/@* | /root/mapping/group/* | /root/mapping/group/*/@*") as $gs) if( !empty($gs->nodeValue) && ( trim($gs->nodeValue) != "") ) $xml_group_fields[] = $gs->nodeName; //**********************************// // EXT_REFERENCES // //**********************************// //Cree la table ext_references si elle n'existe pas $db->query("CREATE TABLE IF NOT EXISTS `ext_references` ( `reference_id` varchar(32) character set utf8 NOT NULL, `type` varchar(32) character set utf8 NOT NULL, `field` varchar(32) character set utf8 NOT NULL, `value` varchar(32) character set utf8 NOT NULL, PRIMARY KEY (`reference_id`,`type`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;"); //**********************************// // GROUPS UPDATE // //**********************************// $log->add_notice("*** GROUPS UPDATE ***"); //Prepare les champs pour l'update ou l'insert //On enleve le champ group_id qui est trait� par un increment ici $db->query("SHOW COLUMNS FROM usergroups"); while($field = $db->fetch_object()) if($field->Field != "GROUP_ID") $lb_groups_fields[] = $field->Field; $update_groups_fields = array_values(array_uintersect($xml_group_fields,$lb_groups_fields,"strcasecmp")); $xml_groups_id = array(); foreach($xp_in_xml->query("//group/@ext_id") as $group_id) $xml_groups_id[] = $group_id->nodeValue; $old_xml_groups_id = array(); foreach($old_xp_in_xml->query("//group/@ext_id") as $old_group_id) $old_xml_groups_id[] = $old_group_id->nodeValue; //On supprimer les doublons des groupes $xml_groups_id = array_unique($xml_groups_id); $old_xml_groups_id = array_unique($old_xml_groups_id); //INSERT GROUPS $log->add_notice("-- INSERT GROUPS --"); $insert_groups = array_values(array_diff($xml_groups_id,$old_xml_groups_id)); foreach($insert_groups as $ig) { $db->query("SELECT group_id FROM usergroups WHERE group_id IN (SELECT value FROM ext_references WHERE reference_id = '".$ig."' AND field = 'group_id' AND type = '".$type_ldap."')"); if($group_id = $db->fetch_object()->group_id) { //Le groupe exise deja : on le supprime dans usergroups, on le maj dans ext_reference $db->query("DELETE FROM usergroups WHERE group_id = '".$group_id."'"); $log->add_notice("DELETE FROM usergroups WHERE group_id = '".$group_id."'"); } else { //Il n'existe pas : on l'insert dans ext_reference //On insert un group_id = {numero} $db->query("SELECT MAX(CAST(SUBSTRING(value,CHAR_LENGTH('".$group_prefix_ldap."')+1) as UNSIGNED )) as max_group_id FROM ext_references WHERE field = 'group_id' AND type = '".$type_ldap."'"); $max_group_id = $db->fetch_object()->max_group_id; if(!isset($max_group_id)) $max_group_id = 0; $group_id = $group_prefix_ldap.($max_group_id + 1); $db->query("INSERT IGNORE INTO ext_references (reference_id,field,value,type) VALUES ('".$ig."','group_id','".$group_id."','".$type_ldap."')"); $log->add_notice("INSERT IGNORE INTO ext_references (reference_id,field,value,type) VALUES ('".$ig."','group_id','".$group_id."','".$type_ldap."')"); } $sql_insert = "INSERT IGNORE INTO usergroups ( group_id, ".implode(",",$update_groups_fields)." ) VALUES ('".$group_id."','"; foreach($update_groups_fields as $ugf) { $sql_insert .= addslashes($xp_in_xml->query("//group[@ext_id=\"".$ig."\"]/".$ugf)->item(0)->nodeValue)."','"; } $sql_insert = substr($sql_insert,0,-2).")"; $db->query($sql_insert); $log->add_notice($sql_insert); unset($sql_insert); } //DELETE GROUPS $log->add_notice("-- DELETE GROUPS --"); $delete_groups = array_values(array_diff($old_xml_groups_id,$xml_groups_id)); foreach($delete_groups as $dg) { //Maj enabled N $sql_disabled = "UPDATE IGNORE usergroups SET enabled = 'N' WHERE group_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($dg)."' AND field = 'group_id' AND type = '".$type_ldap."')"; $db->query($sql_disabled); $log->add_notice($sql_disabled); unset($sql_disabled); } //UPDATE GROUPS $log->add_notice("-- UPDATE GROUPS --"); $update_groups = array_values(array_intersect($xml_groups_id,$old_xml_groups_id)); foreach($update_groups as $ug) { //Maj de group $sql_update = "UPDATE usergroups SET Enabled = 'Y', "; foreach($update_groups_fields as $ugf) { $sql_update .= $ugf." = '".addslashes($xp_in_xml->query("//group[@ext_id=\"".$ug."\"]/".$ugf)->item(0)->nodeValue)."', "; } $sql_update = substr($sql_update,0,-2)." WHERE group_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($ug)."' AND field = 'group_id' AND type = '".$type_ldap."')"; $db->query($sql_update); $log->add_notice($sql_update); unset($sql_update); } //**********************************// // UPDATE SERVICES // //**********************************// $log->add_notice("*** UPDATE SERVICES ***"); //Les services sont identiques au groupes sauf que l'on importe pas les groupes de type "rights" $update_services_fields = array("group_desc" => "SERVICE"); $xml_services_id = array(); foreach($xp_in_xml->query("//group[@type != \"rights\"]/@ext_id") as $service_id) $xml_services_id[] = $service_id->nodeValue; $old_xml_services_id = array(); foreach($old_xp_in_xml->query("//group[@type != \"rights\"]/@ext_id") as $old_service_id) $old_xml_services_id[] = $old_service_id->nodeValue; //On supprimer les doublons des services $xml_services_id = array_unique($xml_services_id); $old_xml_services_id = array_unique($old_xml_services_id); //INSERT SERVICES $log->add_notice("-- INSERT SERVICES --"); $insert_services = array_values(array_diff($xml_services_id,$old_xml_services_id)); foreach($insert_services as $is) { $db->query("SELECT id FROM services WHERE id IN (SELECT value FROM ext_references WHERE reference_id = '".$ig."' AND field = 'group_id' AND type = '".$type_ldap."')"); if($service_id = $db->fetch_object()->id) { //Le service existe deja : on le supprime dans services $db->query("DELETE FROM services WHERE id = '".$service_id."'"); $log->add_notice("DELETE FROM services WHERE id = '".$service_id."'"); } else { //On recupere le group_id du group qui correspond $db->query("SELECT value FROM ext_references WHERE reference_id = '".$is."' AND field = 'group_id' AND type = '".$type_ldap."'"); $service_id = $db->fetch_object()->value; } $sql_insert = "INSERT IGNORE INTO services ( id, ".implode(",",$update_services_fields)." ) VALUES ('".$service_id."','"; foreach($update_services_fields as $k_usf => $d_usf) { $sql_insert .= addslashes($xp_in_xml->query("//group[@ext_id=\"".$is."\"]/".$k_usf)->item(0)->nodeValue)."','"; } $sql_insert = substr($sql_insert,0,-2).")"; $db->query($sql_insert); $log->add_notice($sql_insert); unset($sql_insert); } //DELETE SERVICES $log->add_notice("-- DELETE SERVICES --"); $delete_services = array_values((array_diff($old_xml_services_id,$xml_services_id))); foreach($delete_services as $ds) { //Maj enabled N $sql_disabled = "UPDATE IGNORE services SET enabled = 'N' WHERE id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($ds)."' AND field = 'group_id' AND type = '".$type_ldap."')"; $db->query($sql_disabled); $log->add_notice($sql_disabled); unset($sql_disabled); } //UPDATE SERVICES $log->add_notice("-- UPDATE SERVICES --"); $update_services = array_values(array_intersect($xml_services_id,$old_xml_services_id)); foreach($update_services as $us) { //Maj de service $sql_update = "UPDATE services SET ENABLED = 'Y', "; foreach($update_services_fields as $k_usf => $d_usf) { $sql_update .= $d_usf." = '".addslashes($xp_in_xml->query("//group[@ext_id=\"".$us."\"]/".$k_usf)->item(0)->nodeValue)."', "; } $sql_update = substr($sql_update,0,-2)." WHERE id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($us)."' AND field = 'group_id' AND type = '".$type_ldap."')"; $db->query($sql_update); $log->add_notice($sql_update); unset($sql_update); } //**********************************// // USERS UPDATE // //**********************************// $log->add_notice("*** USERS UPDATE ***"); //Prepare les champs pour l'update ou l'insert dans users $db->query("SHOW COLUMNS FROM users"); while($field = $db->fetch_object()) $lb_users_fields[] = $field->Field; $update_users_fields = array_values(array_uintersect($xml_user_fields,$lb_users_fields,"strcasecmp")); if( $pass_is_login == 'true' ) $update_users_fields[] = 'password'; //On importe tous les users if($lost_users == "true") { $xml_users_id = array(); foreach($xp_in_xml->query("//user/@ext_id") as $user_id) $xml_users_id[] = $user_id->nodeValue; } //On importe que les users qui sont membres d'un groupe else { $xml_users_id = array(); foreach($xp_in_xml->query("//user[memberof]/@ext_id") as $user_id) $xml_users_id[] = $user_id->nodeValue; } //IDEM pour l'execution precedente if(isset($old_lost_users) && $old_lost_users == "true") { $old_xml_users_id = array(); foreach($old_xp_in_xml->query("//user/@ext_id") as $old_user_id) $old_xml_users_id[] = $old_user_id->nodeValue; } else { $old_xml_users_id = array(); foreach($old_xp_in_xml->query("//user[memberof]/@ext_id") as $old_user_id) $old_xml_users_id[] = $old_user_id->nodeValue; } //INSERT USERS $log->add_notice("-- INSERT USERS --"); $insert_users = array_values(array_diff($xml_users_id,$old_xml_users_id)); foreach($insert_users as $iu) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".$iu."' AND field = 'user_id' AND type = '".$type_ldap."'"); if($value = $db->fetch_object()->value) { //L'utilisateur existait deja : on le supprime avant de l'inserer $db->query("DELETE FROM users WHERE user_id = '".$value."'"); $log->add_notice("DELETE FROM users WHERE user_id = '".$value."'"); $db->query("DELETE FROM ext_references WHERE reference_id = '".$iu."' AND field = 'user_id' AND type = '".$type_ldap."'"); $log->add_notice("DELETE FROM ext_references WHERE reference_id = '".$iu."' AND field = 'user_id' AND type = '".$type_ldap."'"); } //Il n'existe pas : on l'insert dans ext_reference $db->query("INSERT IGNORE INTO ext_references (reference_id,field,value,type) VALUES ('".$iu."','user_id','".$xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/user_id")->item(0)->nodeValue."','".$type_ldap."')"); $log->add_notice("INSERT IGNORE INTO ext_references (reference_id,field,value,type) VALUES ('".$iu."','user_id','".$xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/user_id")->item(0)->nodeValue."','".$type_ldap."')"); $sql_insert = "INSERT IGNORE INTO users ( change_password ,".implode(",",$update_users_fields)." ) VALUES ('NO','"; foreach($update_users_fields as $uuf) { if($uuf == 'password') $sql_insert .= md5($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/user_id")->item(0)->nodeValue)."','"; else $sql_insert .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/".$uuf)->item(0)->nodeValue)."','"; } $sql_insert = substr($sql_insert,0,-2).")"; $db->query($sql_insert); $log->add_notice($sql_insert); unset($sql_insert); } //DELETE USERS $log->add_notice("-- DELETE USERS --"); $delete_users = array_values(array_diff($old_xml_users_id,$xml_users_id)); foreach($delete_users as $du) { //Maj status DEL $sql_disabled = "UPDATE IGNORE users SET status = 'DEL' WHERE user_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($du)."' AND field = 'user_id' AND type = '".$type_ldap."')"; $db->query($sql_disabled); $log->add_notice($sql_disabled); unset($sql_disabled); } //UPDATE USERS $log->add_notice("-- UPDATE USERS --"); $update_users = array_values(array_intersect($xml_users_id,$old_xml_users_id)); foreach($update_users as $uu) { //STATUS $db->query("SELECT status FROM users WHERE user_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($uu)."' AND field = 'user_id' AND type = '".$type_ldap."')"); $status = "OK"; if($db->fetch_object()->status == "ABS" ) $status = "ABS"; //Maj de user $sql_update = "UPDATE IGNORE users SET status = '".$status."', "; foreach($update_users_fields as $uuf) { if($uuf == 'password') $sql_update .= "password = '".md5($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."', "; else $sql_update .= $uuf." = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/".$uuf)->item(0)->nodeValue)."', "; } $sql_update = substr($sql_update,0,-2)." WHERE user_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($uu)."' AND field = 'user_id' AND type = '".$type_ldap."')"; $db->query($sql_update); $log->add_notice($sql_update); unset($sql_update); //Maj de ext_reference $db->query("UPDATE IGNORE ext_references SET value = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' WHERE reference_id = '".addslashes($uu)."' AND field = 'user_id' AND type = '".$type_ldap."'"); } //**********************************// // GROUPS / SERVICES USERS LINKS // //**********************************// $log->add_notice("*** GROUPS / SERVICES USERS LINKS ***"); //Memorisation des resultats des algos pour augmenter les performances $mem_group_up = array(); $mem_group_down = array(); function group_up($level,$xpath_xml,$ext_id) { global $mem_group_up; $xml_uri = $xpath_xml->document->documentURI; //Si deja cacul� alors on retourne le resultat if(isset($mem_group_up[$xml_uri][$ext_id][$level])) return $mem_group_up[$xml_uri][$ext_id][$level]; $group_ext_id = array(); $current_nodes = $xpath_xml->query("//group[@ext_id =\"".$ext_id."\"][@type=\"organization\"]"); //Quelque soit le groupe selectionn� dans l'arbre, il est membre des m�mes groupes $current_node = $current_nodes->item(0); if($level == 0) { $group_ext_id = array($ext_id); } else { $find_nodes = false; //Monte dans l'arbre foreach($xpath_xml->query("memberof[1]/group[@type=\"organization\"]",$current_node) as $this_group) { $find_nodes = true; if($this_group->nodeName == "group") { $group_ext_id = array_merge(array($ext_id),array_merge($group_ext_id,group_up(($level - 1),$xpath_xml,$this_group->getAttribute("ext_id")))); } else { $group_ext_id = array_merge(array($ext_id),$group_ext_id); } } if(!$find_nodes) $group_ext_id = array_merge(array($ext_id),$group_ext_id); } //Stocke le resultat pour optimisation resultat $mem_group_up[$xml_uri][$ext_id][$level] = array_values(array_unique($group_ext_id)); return $mem_group_up[$xml_uri][$ext_id][$level]; } function group_down($level,$xpath_xml,$ext_id) { global $mem_group_down; $xml_uri = $xpath_xml->document->documentURI; //Si deja cacul� alors on retourne le resultat if(isset($mem_group_down[$xml_uri][$ext_id][$level])) return $mem_group_down[$xml_uri][$ext_id][$level]; $group_ext_id = array(); //Les groupes selectionn�s ne sont n'ont pas tous pour membres les m�mes groupes et les m�mes users $current_nodes = $xpath_xml->query("//group[@ext_id =\"".$ext_id."\"][@type=\"organization\"]"); if($level == 0) { $group_ext_id = array($ext_id); } else { $find_nodes = false; //Descend dans l'arbre foreach($current_nodes as $current_node) { $find_nodes = true; $this_group = $xpath_xml->query("parent::memberof/parent::group[@type=\"organization\"]",$current_node)->item(0); if($this_group->nodeName == "group") $group_ext_id = array_merge(array($this_group->getAttribute("ext_id")),array_merge($group_ext_id,group_down(($level - 1),$xpath_xml,$this_group->getAttribute("ext_id")))); } if(!$find_nodes) $group_ext_id = array_merge(array($ext_id),$group_ext_id); } //Stocke le resultat pour optimisation algo $mem_group_down[$xml_uri][$ext_id][$level] = array_values(array_unique($group_ext_id)); return array_values(array_unique($group_ext_id)); } function group_brothers($xpath_xml,$ext_id) { $group_ext_id = array(); foreach(group_up(1,$xpath_xml,$ext_id) as $parent) { $group_ext_id = array_diff(array_merge($group_ext_id,group_down(1,$xpath_xml,$parent)),$parent); } return array_values(array_unique($group_ext_id)); } //Prepare les champs pour l'update ou l'insert dans usergroup_content $db->query("SHOW COLUMNS FROM usergroup_content"); while($field = $db->fetch_object()) $lb_usergroup_content_fields[] = $field->Field; $update_usergroup_content_fields = array_values(array_uintersect($xml_user_fields,$lb_usergroup_content_fields,"strcasecmp")); //On importe tous les users if($lost_users == "true") { $xml_users_id = array(); foreach($xp_in_xml->query("//user/@ext_id") as $user_id) $xml_users_id[] = $user_id->nodeValue; } //On importe que les users qui sont membres d'un groupe else { $xml_users_id = array(); foreach($xp_in_xml->query("//user[memberof]/@ext_id") as $user_id) $xml_users_id[] = $user_id->nodeValue; } //IDEM pour l'execution precedente if(isset($old_lost_users) && $old_lost_users == "true") { $old_xml_users_id = array(); foreach($old_xp_in_xml->query("//user/@ext_id") as $old_user_id) $old_xml_users_id[] = $old_user_id->nodeValue; } else { $old_xml_users_id = array(); foreach($old_xp_in_xml->query("//user[memberof]/@ext_id") as $old_user_id) $old_xml_users_id[] = $old_user_id->nodeValue; } //**********************************// // NEW USERS // //**********************************// $log->add_notice("*** NEW USERS ***"); $insert_users = array_values(array_diff($xml_users_id,$old_xml_users_id)); foreach($insert_users as $iu) { //Les groupes de type "organization" de premier niveau rencontr�s en remontant dans l'arbre $primary_groups_group_id = array(); foreach($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/memberof[1]/group[@type =\"organization\"]/@ext_id") as $node_ext_id) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($node_ext_id->nodeValue)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $primary_groups_group_id[] = $db->fetch_object()->value; } //Les groupes de type "rights" $group_rights_group_id = array(); foreach($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]//group[@type=\"rights\"]/@ext_id") as $group_rights_ext_id) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($group_rights_ext_id->nodeValue)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $group_rights_group_id[] = $db->fetch_object()->value; } //INSERT USER / ORGA GROUP(S) LINK(S) $log->add_notice("-- INSERT USER / ORGA GROUP(S) LINK(S) --"); foreach($primary_groups_group_id as $pggi ) { $sql_insert_usergroup_content = "INSERT IGNORE INTO usergroup_content (group_id, Primary_group, ".implode(",",$update_usergroup_content_fields)." ) VALUES ('".addslashes($pggi)."','N','"; foreach($update_usergroup_content_fields as $uugf) { $sql_insert_usergroup_content .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/".$uugf)->item(0)->nodeValue)."','"; } $sql_insert_usergroup_content = substr($sql_insert_usergroup_content,0,-2).")"; $db->query($sql_insert_usergroup_content); $log->add_notice($sql_insert_usergroup_content); unset($sql_insert_usergroup_content); } //INSERT USER / RIGHTS GROUP(S) LINK(S) $log->add_notice("-- INSERT USER / RIGHTS GROUP(S) LINK(S) --"); foreach($group_rights_group_id as $grgi) { $sql_insert_usergroup_content = "INSERT IGNORE INTO usergroup_content (group_id, Primary_group, ".implode(",",$update_usergroup_content_fields)." ) VALUES ('".addslashes($grgi)."','N','"; foreach($update_usergroup_content_fields as $uugf) { $sql_insert_usergroup_content .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/".$uugf)->item(0)->nodeValue)."','"; } $sql_insert_usergroup_content = substr($sql_insert_usergroup_content,0,-2).")"; $db->query($sql_insert_usergroup_content); $log->add_notice($sql_insert_usergroup_content); unset($sql_insert_usergroup_content); } //INSERT PRIMARY GROUP $log->add_notice("-- INSERT PRIMARY GROUP --"); if(isset($primary_groups_group_id[0])) { $sql_insert_p_group = "UPDATE usergroup_content SET PRIMARY_GROUP = 'Y' WHERE user_id ='".addslashes($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/user_id")->item(0)->nodeValue)."' AND group_id = '".$primary_groups_group_id[0]."'"; $db->query($sql_insert_p_group); $log->add_notice($sql_insert_p_group); } //INSERT USER SERVICE $log->add_notice("-- SET SERVICE --"); if(isset($primary_groups_group_id[0])) { $sql_insert_service = "UPDATE users SET department = '".$primary_groups_group_id[0]."' WHERE user_id ='".addslashes($xp_in_xml->query("//user[@ext_id=\"".$iu."\"]/user_id")->item(0)->nodeValue)."' "; $db->query($sql_insert_service); $log->add_notice($sql_insert_service); } } //**********************************// // UPDATE USERS // //**********************************// $log->add_notice("*** UPDATE USERS ***"); $update_users = array_values(array_intersect($xml_users_id,$old_xml_users_id)); foreach($update_users as $uu) { //UPDATE USER / GROUP(S) LINK(S) //On compare la liste des groupes de premier niveau � celle du xml de l'execution precedente $group_level_one = array(); foreach($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/memberof[1]/group[@type =\"organization\"]/@ext_id") as $glo) $group_level_one[] = $glo->nodeValue; $old_group_level_one = array(); foreach($old_xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/memberof[1]/group[@type =\"organization\"]/@ext_id") as $oglo) $old_group_level_one[] = $oglo->nodeValue; $group_rights = array(); foreach($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]//group[@type=\"rights\"]/@ext_id") as $gr) $group_rights[] = $gr->nodeValue; $old_group_rights = array(); foreach($old_xp_in_xml->query("//user[@ext_id=\"".$uu."\"]//group[@type=\"rights\"]/@ext_id") as $ogr) $old_group_rights[] = $ogr->nodeValue; //RIGHTS //INSERT GROUPS RIGHTS $log->add_notice("-- INSERT GROUPS RIGHTS --"); $user_group_link_insert = array_values(array_diff($group_rights,$old_group_rights)); foreach($user_group_link_insert as $ugli) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($ugli->nodeValue)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $ugli_group_id = $db->fetch_object()->value; $sql_insert_usergroup_content = "INSERT IGNORE INTO usergroup_content (group_id, primary_group, ".implode(",",$update_usergroup_content_fields)." ) VALUES ('".addslashes($ugli_group_id)."','N','"; foreach($update_usergroup_content_fields as $uugf) { if($uugf == 'user_id') $sql_insert_usergroup_content .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."','"; else $sql_insert_usergroup_content .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$ugli->nodeValue."\"]/".$uugf)->item(0)->nodeValue)."','"; } $sql_insert_usergroup_content = substr($sql_insert_usergroup_content,0,-2).")"; $db->query($sql_insert_usergroup_content); $log->add_notice($sql_insert_usergroup_content); unset($sql_insert_usergroup_content); } //DELETE GROUPS RIGHTS $log->add_notice("-- DELETE GROUPS RIGHTS --"); $user_group_link_delete = array_values(array_diff($old_group_rights,$group_rights)); foreach($user_group_link_delete as $ugld) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($ugld)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $ugld_group_id = $db->fetch_object()->value; $sql_delete_usergroup_content = "DELETE FROM usergroup_content WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' AND group_id = '".addslashes($ugld_group_id)."' "; $log->add_notice($sql_delete_usergroup_content); unset($sql_delete_usergroup_content); } //UPDATE GROUPS RIGHTS //Update l'intersection $log->add_notice("-- UPDATE GROUPS RIGHTS --"); $user_group_link_update = array_values(array_intersect($old_group_rights,$group_rights)); foreach($user_group_link_update as $uglu) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($uglu)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $uglu_group_id = $db->fetch_object()->value; $sql_update_usergroup_content = "UPDATE IGNORE usergroup_content SET group_id ='".$uglu_group_id."', primary_group = 'N',"; foreach($update_usergroup_content_fields as $uugf) { if($uugf == 'user_id') $sql_update_usergroup_content .= $uugf." = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."',"; else $sql_update_usergroup_content .= $uugf." = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uglu."\"]/".$uugf)->item(0)->nodeValue)."',"; } $sql_update_usergroup_content = substr($sql_update_usergroup_content,0,-1); $sql_update_usergroup_content .= " WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' AND group_id = '".addslashes($uglu_group_id)."' "; $db->query($sql_update_usergroup_content); $log->add_notice($sql_update_usergroup_content); unset($sql_update_usergroup_content); } //ORGANIZATION AND SERVICE //INSERT GROUPS ORGANIZATION AND SERVICE $log->add_notice("-- INSERT GROUPS ORGANIZATION --"); $user_group_link_insert = array(); $user_group_link_insert = array_values(array_diff($group_level_one,$old_group_level_one)); foreach($user_group_link_insert as $ugli) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($ugli->nodeValue)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $ugli_group_id = $db->fetch_object()->value; /* GROUPE PRIMAIRE */ $db->query("SELECT count(*) AS PG FROM usergroup_content WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' AND primary_group = 'Y'"); if($db->fetch_object()->PG > 0) { $primary_group = "N"; } else { $primary_group = "Y"; } $sql_insert_usergroup_content = "INSERT IGNORE INTO usergroup_content (group_id, primary_group,".implode(",",$update_usergroup_content_fields)." ) VALUES ('".addslashes($ugli_group_id)."','".$primary_group."','"; foreach($update_usergroup_content_fields as $uugf) { if($uugf == 'user_id') $sql_insert_usergroup_content .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."','"; else $sql_insert_usergroup_content .= addslashes($xp_in_xml->query("//user[@ext_id=\"".$ugli->nodeValue."\"]/".$uugf)->item(0)->nodeValue)."','"; } $sql_insert_usergroup_content = substr($sql_insert_usergroup_content,0,-2).")"; $db->query($sql_insert_usergroup_content); $log->add_notice($sql_insert_usergroup_content); unset($sql_insert_usergroup_content); //Service if( $primary_group == "Y" ) { $db->query("UPDATE IGNORE users SET department = '".addslashes($ugli_group_id)."' WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' "); $log->add_notice("UPDATE IGNORE users SET department = '".addslashes($ugli_group_id)."' WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' "); } } //DELETE GROUPS ORGANIZATION $log->add_notice("-- DELETE GROUPS ORGANIZATION --"); $user_group_link_delete = array(); $user_group_link_delete = array_values(array_diff($old_group_level_one,$group_level_one)); foreach($user_group_link_delete as $ugld) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($ugld)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $ugld_group_id = $db->fetch_object()->value; $sql_delete_usergroup_content = "DELETE FROM usergroup_content WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' AND group_id = '".addslashes($ugld_group_id)."' "; $log->add_notice($sql_delete_usergroup_content); unset($sql_delete_usergroup_content); //Service $db->query("UPDATE IGNORE users SET department = NULL WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' AND department = '".addslashes($ugld_group_id)."'"); $log->add_notice("UPDATE IGNORE users SET department = NULL WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' AND department = '".addslashes($ugld_group_id)."'"); } //UPDATE GROUPS ORGANIZATION //Update l'intersection $log->add_notice("-- UPDATE GROUPS ORGANIZATION --"); $user_group_link_update = array(); $user_group_link_update = array_values(array_intersect($old_group_level_one,$group_level_one)); foreach($user_group_link_update as $uglu) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($uglu)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $uglu_group_id = $db->fetch_object()->value; $sql_update_usergroup_content = "UPDATE IGNORE usergroup_content SET group_id ='".$uglu_group_id."',"; foreach($update_usergroup_content_fields as $uugf) { if($uugf == 'user_id') $sql_update_usergroup_content .= $uugf." = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."',"; else $sql_update_usergroup_content .= $uugf." = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uglu."\"]/".$uugf)->item(0)->nodeValue)."',"; } $sql_update_usergroup_content = substr($sql_update_usergroup_content,0,-1); $db->query($sql_update_usergroup_content); $log->add_notice($sql_update_usergroup_content); unset($sql_update_usergroup_content); //Service if( $primary_group == "Y" ) { $db->query("UPDATE IGNORE users SET department = '".addslashes($uglu_group_id)."' WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' "); $log->add_notice("UPDATE IGNORE users SET department = '".addslashes($uglu_group_id)."' WHERE user_id = '".addslashes($xp_in_xml->query("//user[@ext_id=\"".$uu."\"]/user_id")->item(0)->nodeValue)."' "); } } } //**********************************// // BASKET INSERT // //**********************************// if($load_default_basket <> "false") { $log->add_notice("*** BASKET INSERT ***"); //MyBasket $db->query("INSERT Ignore Into baskets (res_table,basket_id,basket_name,basket_desc,basket_clause,is_generic) VALUES ('res_x','MyBasket','Mes courriers � traiter','Courriers � traiter','(status = ''NEW'' or status=''COU'') and DEST_USER = @user and is_folder = ''Y''','Y')"); //LateMailBasket $db->query("INSERT Ignore Into baskets (res_table,basket_id,basket_name,basket_desc,basket_clause,is_generic) VALUES ('res_x','LateMailBasket','Mes courriers en retard','Courriers en retards','(STATUS=''NEW'' or STATUS=''COU'') and DEST_USER = @user and now() > CUSTOM_D2 and is_folder = ''Y''','Y')"); //CopyMailBasket $db->query("INSERT Ignore Into baskets (res_table,basket_id,basket_name,basket_desc,basket_clause,is_generic) VALUES ('res_x r, listinstance l','CopyMailBasket','Mes courriers en copie','Liste des courriers en copie','l.res_table = ''res_x'' and l.user_id = @user and l.res_id = r.res_id and l.sequence > 1 and ( r.status=''NEW'' or r.status=''COU'' or r.status=''WAI'') and is_folder = ''Y''', 'Y')"); //DepartmentBasket $db->query("INSERT Ignore Into baskets (res_table,basket_id,basket_name,basket_desc,basket_clause,is_generic) VALUES ('res_x LEFT JOIN notes ON (notes.RECORD_ID = res_x.RES_ID)','DepartmentBasket','Services autorisés','Services autorisés','status <> ''DEL'' AND status <> ''REP'' and status <> ''VAL'' and status <> ''END'' and is_folder=''Y''','Y')"); //OutMails $db->query("INSERT Ignore Into baskets (res_table,basket_id,basket_name,basket_desc,basket_clause,is_generic) VALUES ('res_x','OutMails', 'Mes Courriers sortant', 'Mes courriers sortant', 'IS_INGOING = ''N'' and AUTHOR = @user and is_folder = ''Y''','N')"); //QualifBasket $db->query("INSERT Ignore Into baskets (res_table,basket_id,basket_name,basket_desc,basket_clause,is_generic) VALUES ('res_x','QualifBasket','Mes affaires � qualifier','Mes affaires � qualifier','(status = ''ATT'' or status =''RSV'') and destination = @my_entity ','N')"); } //**********************************// // GROUPBASKET / SECURITY UPDATE // //**********************************// $log->add_notice("*** GROUPBASKET / SECURITY UPDATE ***"); //GROUPS TYPE RIGHTS $group_rights = array(); foreach($xp_in_xml->query("//group[@type=\"rights\"]/@ext_id") as $gr) $group_rights[] = $gr->nodeValue; $group_rights = array_values(array_unique($group_rights)); $old_group_rights = array(); foreach($old_xp_in_xml->query("//group[@type=\"rights\"]/@ext_id") as $ogr) $old_group_rights[] = $ogr->nodeValue; $old_group_rights = array_values(array_unique($old_group_rights)); $group_rights_insert = array_values(array_diff($group_rights,$old_group_rights)); //INSERT $log->add_notice("-- INSERT --"); foreach($group_rights_insert as $gri) { //Security $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($gri)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $gri_id = $db->fetch_object()->value; $sql_security_insert = "INSERT IGNORE INTO security (group_id,res_table,where_clause) VALUES ('".$gri_id."','res_x','(1=0)')"; $db->query($sql_security_insert); $log->add_notice($sql_security_insert); //Groupbasket //Pas de redirection } //DELETE $log->add_notice("-- DELETE --"); $group_rights_delete = array_values(array_diff($old_group_rights,$group_rights)); foreach($group_rights_delete as $grd) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($grd)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $grd_id = $db->fetch_object()->value; $sql_security_delete = "DELETE IGNORE FROM security WHERE group_id ='".$grd_id."'"; $db->query($sql_security_delete); $log->add_notice($sql_security_delete); //Groupbasket //Pas de redirection } $group_rights_update = array_values(array_intersect($group_rights,$old_group_rights)); //UPDATE $log->add_notice("-- UPDATE --"); //foreach($group_rights_update as $gru) { //On ne met rien � jour } //GROUPS TYPE ORGANIZATION $log->add_notice("-- GROUPS TYPE ORGANIZATION --"); $dns = $xp_in_xml->query("//dns/dn/@id"); foreach($dns as $dn) { //CONF XML Parameters foreach($xp_ldap_conf->query("//dn[@id=\"".$dn->nodeValue."\"]/security/*") as $s) $security[$s->nodeName] = $s->nodeValue; foreach($xp_ldap_conf->query("//dn[@id=\"".$dn->nodeValue."\"]/redirect_services/*") as $rs) $redirect_services[$rs->nodeName] = $rs->nodeValue; foreach($xp_ldap_conf->query("//dn[@id=\"".$dn->nodeValue."\"]/redirect_groups/*") as $rg) $redirect_groups[$rg->nodeName] = $rg->nodeValue; //CONF OLD XML Parameters foreach($old_xp_ldap_conf->query("//dn[@id=\"".$dn->nodeValue."\"]/security/*") as $s) $old_security[$s->nodeName] = $s->nodeValue; foreach($old_xp_ldap_conf->query("//dn[@id=\"".$dn->nodeValue."\"]/redirect_services/*") as $rs) $old_redirect_services[$rs->nodeName] = $rs->nodeValue; foreach($old_xp_ldap_conf->query("//dn[@id=\"".$dn->nodeValue."\"]/redirect_groups/*") as $rg) $old_redirect_groups[$rg->nodeName] = $rg->nodeValue; //GROUPS IN DN $group_orga = array(); foreach($xp_in_xml->query("/dns/dn[@id=\"".$dn->nodeValue."\"]//group[@type=\"organization\"]/@ext_id") as $go) $group_orga[] = $go->nodeValue; $group_orga = array_values(array_unique($group_orga)); //TREE CONSTRUCTION (Security, Redirect_services, Redirect_groups) foreach($group_orga as $go) { $tree_security[$go] = array(); $tree_redirect_services[$go]= array(); $tree_redirect_groups[$go]=array(); $tree_security[$go] = array_values(array_unique(array_merge($tree_security[$go],group_up(intval($security['up']),$xp_in_xml,$go)))); $tree_redirect_services[$go] = array_values(array_unique(array_merge($tree_redirect_services[$go],group_up(intval($redirect_services['up']),$xp_in_xml,$go)))); $tree_redirect_groups[$go] = array_values(array_unique(array_merge($tree_redirect_groups[$go],group_up(intval($redirect_groups['up']),$xp_in_xml,$go)))); $tree_security[$go] = array_values(array_unique(array_merge($tree_security[$go],group_down(intval($security['down']),$xp_in_xml,$go)))); $tree_redirect_services[$go] = array_values(array_unique(array_merge($tree_redirect_services[$go],group_down(intval($redirect_services['down']),$xp_in_xml,$go)))); $tree_redirect_groups[$go] = array_values(array_unique(array_merge($tree_redirect_groups[$go],group_down(intval($redirect_groups['down']),$xp_in_xml,$go)))); if($security['brothers'] == 'true') $tree_security[$go] = array_values(array_unique(array_merge($tree_security[$go],group_brothers($xp_in_xml,$go)))); if($redirect_services['brothers'] == 'true') $tree_redirect_services[$go] = array_values(array_unique(array_merge($tree_redirect_services[$go],group_brothers($xp_in_xml,$go)))); if($redirect_groups['brothers'] == 'true') $tree_redirect_groups[$go] = array_values(array_unique(array_merge($tree_redirect_groups[$go],group_brothers($xp_in_xml,$go)))); } //GROUPS IN DN $old_group_orga = array(); foreach($old_xp_in_xml->query("/dns/dn[@id=\"".$dn->nodeValue."\"]//group[@type=\"organization\"]/@ext_id") as $ogo) $old_group_orga[] = $ogo->nodeValue; $old_group_orga = array_values(array_unique($old_group_orga)); //TREE CONSTRUCTION (Security, Redirect_services, Redirect_groups) foreach($old_group_orga as $ogo) { $old_tree_security[$ogo] = array(); $old_tree_redirect_services[$ogo]= array(); $old_tree_redirect_groups[$ogo]=array(); $old_tree_security[$ogo] = array_values(array_unique(array_merge($old_tree_security[$ogo],group_up(intval($old_security['up']),$old_xp_in_xml,$ogo)))); $old_tree_redirect_services[$ogo] = array_values(array_unique(array_merge($old_tree_redirect_services[$ogo],group_up(intval($old_redirect_services['up']),$old_xp_in_xml,$ogo)))); $old_tree_redirect_groups[$ogo] = array_values(array_unique(array_merge($old_tree_redirect_groups[$ogo],group_up(intval($old_redirect_groups['up']),$old_xp_in_xml,$ogo)))); $old_tree_security[$ogo] = array_values(array_unique(array_merge($old_tree_security[$ogo],group_down(intval($old_security['down']),$old_xp_in_xml,$ogo)))); $old_tree_redirect_services[$ogo] = array_values(array_unique(array_merge($old_tree_redirect_services[$ogo],group_down(intval($old_redirect_services['down']),$old_xp_in_xml,$ogo)))); $old_tree_redirect_groups[$ogo] = array_values(array_unique(array_merge($old_tree_redirect_groups[$ogo],group_down(intval($old_redirect_groups['down']),$old_xp_in_xml,$ogo)))); if($security['brothers'] == 'true') $old_tree_security[$ogo] = array_values(array_unique(array_merge($old_tree_security[$ogo],group_brothers($old_xp_in_xml,$ogo)))); if($redirect_services['brothers'] == 'true') $old_tree_redirect_services[$ogo] = array_values(array_unique(array_merge($old_tree_redirect_services[$ogo],group_brothers($old_xp_in_xml,$ogo)))); if($redirect_groups['brothers'] == 'true') $old_tree_redirect_groups[$ogo] = array_values(array_unique(array_merge($old_tree_redirect_groups[$ogo],group_brothers($old_xp_in_xml,$ogo)))); } } //******************************************// //EACH GROUP UPDATE SECURITY AND GROUPBASKET// //******************************************// $log->add_notice("*** EACH GROUP UPDATE SECURITY AND GROUPBASKET ***"); $group_ext_id = array(); foreach($xp_in_xml->query("//group[@type=\"organization\"]/@ext_id") as $group) { $group_ext_id[] = $group->nodeValue; } $group_ext_id = array_values(array_unique($group_ext_id)); foreach($group_ext_id as $gei) { //SECURITY $log->add_notice("-- SECURITY --"); if(isset($tree_security[$gei])) { //Identifiant reel du groupe $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($gei)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $this_group = $db->fetch_object()->value; //LIST SERVICE $services_list = array(); //Les services present lors de la derniere execution foreach($tree_security[$gei] as $s) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($s)."' AND field = 'group_id' AND type = '".$type_ldap."'"); if($s_id = $db->fetch_object()->value) $services_list[] = $s_id; } $old_services_list = array(); //Les services presents lors de l'avant derniere execution if(isset($old_tree_security[$gei])) foreach($old_tree_security[$gei] as $s) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($s)."' AND field = 'group_id' AND type = '".$type_ldap."'"); if($s_id = $db->fetch_object()->value) $old_services_list[] = $s_id; } //Clause precedente $db->query("SELECT where_clause FROM security WHERE group_id ='".$this_group."'"); if($where_clause = $db->fetch_object()->where_clause) { $find_services = preg_replace("#\s#","",$where_clause); preg_match("#DESTINATIONIN\('(.*)'\)#" ,$find_services,$all_matches); $sql_services=array(); foreach(explode("','",$all_matches[1]) as $am) if( !empty($am) ) $sql_services[] = $am; $final_services=array(); //On enleve les services qui n'existent plus $final_services = array_unique(array_diff(array_unique(array_merge($sql_services,$services_list)),array_diff($old_services_list,$services_list))); $update_security = "UPDATE security SET where_clause = 'DESTINATION IN (''".implode("'',''",$final_services)."'')' WHERE group_id = '".$this_group."'"; $log->add_notice($update_security); $db->query($update_security); } else { $insert_security = "INSERT INTO security (group_id,res_table,where_clause) VALUES ('".$this_group."','res_x','DESTINATION IN (''".implode("'',''",$services_list)."'')')"; $log->add_notice($insert_security); $db->query($insert_security); } } //Liste des baskets affect�s par cette mise � jour foreach($group_basket_update as $k_gbu => $d_gbu) { //REDIRECT SERVICES $log->add_notice("-- REDIRECT SERVICES : ".$k_gbu."--"); if(isset($tree_redirect_services[$gei])) { //Identifiant reel du groupe $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($gei)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $this_group = $db->fetch_object()->value; //LIST SERVICE $services_list = array(); //Les services present lors de la derniere execution if(isset($tree_redirect_services[$gei])) foreach($tree_redirect_services[$gei] as $s) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($s)."' AND field = 'group_id' AND type = '".$type_ldap."'"); if($s_id = $db->fetch_object()->value) $services_list[] = $s_id; } $old_services_list = array(); //Les services present lors de l'avant derniere execution if(isset($old_tree_redirect_services[$gei])) foreach($old_tree_redirect_services[$gei] as $s) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($s)."' AND field = 'group_id' AND type = '".$type_ldap."'"); if($s_id = $db->fetch_object()->value) $old_services_list[] = $s_id; } //Clause precedente $db->query("SELECT redirect_basketlist FROM groupbasket WHERE group_id = '".$this_group."' AND basket_id = '".$k_gbu."' "); unset($where_clause); if($where_clause = $db->fetch_object()->redirect_basketlist) { $find_services = preg_replace("#\s#","",$where_clause); preg_match("#'(.*)'#",$find_services,$all_matches); $sql_services=array(); foreach(explode("','",$all_matches[1]) as $am) if( !empty($am) ) $sql_services[] = $am; $final_services=array(); //On enleve les services qui n'existent plus $final_services = array_unique(array_diff(array_unique(array_merge($sql_services,$services_list)),array_diff($old_services_list,$services_list))); $update_redirect_service = "UPDATE groupbasket SET redirect_basketlist = '''".implode("'',''",$final_services)."''' WHERE group_id = '".$this_group."' AND basket_id = '".$k_gbu."'"; $db->query($update_redirect_service); $log->add_notice($update_redirect_service); } else { $insert_redirect_service = "INSERT Ignore Into groupbasket (group_id,basket_id,redirect_basketlist,result_page) VALUES ('".$this_group."','".$k_gbu."','''".implode("'',''",$services_list)."''','".$d_gbu."')"; $log->add_notice($insert_redirect_service); $db->query($insert_redirect_service); //Si la ligne existe pas de insert, donc UPDATE $update_redirect_service = "UPDATE groupbasket SET redirect_basketlist = '''".implode("'',''",$services_list)."''' WHERE group_id = '".$this_group."' AND basket_id = '".$k_gbu."'"; $db->query($update_redirect_service); $log->add_notice($update_redirect_service); } } //REDIRECT GROUPS $log->add_notice("-- REDIRECT GROUPS : ".$k_gbu."--"); if(isset($tree_redirect_groups[$gei])) { //Identifiant reel du groupe $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($gei)."' AND field = 'group_id' AND type = '".$type_ldap."'"); $this_group = $db->fetch_object()->value; //LIST SERVICE $services_list = array(); //Les services present lors de la derniere execution if(isset($tree_redirect_groups[$gei])) foreach($tree_redirect_groups[$gei] as $s) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($s)."' AND field = 'group_id' AND type = '".$type_ldap."'"); if($s_id = $db->fetch_object()->value) $services_list[] = $s_id; } $old_services_list = array(); //Les services present lors de l'avant derniere execution if(isset($old_tree_redirect_groups[$gei])) foreach($old_tree_redirect_groups[$gei] as $s) { $db->query("SELECT value FROM ext_references WHERE reference_id = '".addslashes($s)."' AND field = 'group_id' AND type = '".$type_ldap."'"); if($s_id = $db->fetch_object()->value) $old_services_list[] = $s_id; } //Clause precedente $db->query("SELECT redirect_grouplist FROM groupbasket WHERE group_id = '".$this_group."' AND basket_id = '".$k_gbu."' "); unset($where_clause); if($where_clause = $db->fetch_object()->redirect_grouplist) { $find_services = preg_replace("#\s#","",$where_clause); preg_match("#'(.*)'#",$find_services,$all_matches); $sql_services=array(); foreach(explode("','",$all_matches[1]) as $am) if( !empty($am) ) $sql_services[] = $am; $final_services=array(); //On enleve les services qui n'existent plus $final_services = array_unique(array_diff(array_unique(array_merge($sql_services,$services_list)),array_diff($old_services_list,$services_list))); $update_redirect_group = "UPDATE groupbasket SET redirect_grouplist = '''".implode("'',''",$final_services)."''' WHERE group_id = '".$this_group."' AND basket_id = '".$k_gbu."'"; $log->add_notice($update_redirect_group); $db->query($update_redirect_group); } else { $insert_redirect_group = "INSERT Ignore Into groupbasket (group_id,basket_id,redirect_grouplist,result_page) VALUES ('".$this_group."','".$k_gbu."','''".implode("'',''",$services_list)."''','".$d_gbu."')"; $log->add_notice($insert_redirect_group); $db->query($insert_redirect_group); //Si la ligne existe pas de insert, donc UPDATE $update_redirect_group = "UPDATE groupbasket SET redirect_grouplist = '''".implode("'',''",$services_list)."''' WHERE group_id = '".$this_group."' AND basket_id = '".$k_gbu."'"; $log->add_notice($update_redirect_group); $db->query($update_redirect_group); } } } foreach($group_basket as $k_gb => $d_gb) { //Identifiant reel du groupe $db->query("SELECT enabled, group_id FROM usergroups WHERE group_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($gei)."' AND field = 'group_id' AND type = '".$type_ldap."')"); $enabled_group_id = $db->fetch_object(); if($enabled_group_id->enabled == 'Y') { $db->query("INSERT Ignore Into groupbasket (group_id,basket_id,result_page) VALUES ('".$enabled_group_id->group_id."','".$k_gb."','".$d_gb."')"); $log->add_notice("INSERT Ignore Into groupbasket (group_id,basket_id,result_page) VALUES ('".$enabled_group_id->group_id."','".$k_gb."','".$d_gb."')"); } else { $db->query("DELETE Ignore FROM groupbasket WHERE group_id ='".$enabled_group_id->group_id."' AND basket_id = '".$k_gb."' "); $log->add_notice("DELETE Ignore FROM groupbasket WHERE group_id ='".$enabled_group_id->group_id."' AND basket_id = '".$k_gb."' "); } } } //Les CopyMailBasket ne peuvent pas rediriger $db->query("UPDATE IGNORE groupbasket SET can_redirect ='N' WHERE basket_id = 'CopyMailBasket'"); $log->add_notice("UPDATE IGNORE groupbasket SET can_redirect ='N' WHERE basket_id = 'CopyMailBasket'"); //**********************************// // INSERT ADMIN RIGHTS // //**********************************// $log->add_notice("*** INSERT ADMIN RIGHTS ***"); //Note : L'admin doit appartenir aux dn mapp�s de l'AD //Le groupe primaire de l'admin devient le groupe administrateur $admin_group_ext_id = $xp_in_xml->query("//user[user_id = \"".$login_admin."\"]/memberof[1]/group[@type = \"rights\"][1]/@ext_id"); if(isset($admin_group_ext_id)) { $set_admin_group = "UPDATE usergroups SET Administrator = 'Y', consult_group ='Y', view_relance = 'Y', view_stats = 'Y', modif_rights = 'Y', export = 'Y', delete_rights = 'Y', print_rights = 'Y', param ='Y' WHERE group_id IN (SELECT value FROM ext_references WHERE reference_id = '".addslashes($admin_group_ext_id->item(0)->nodeValue)."' AND field = 'group_id' AND type = '".$type_ldap."')"; $db->query($set_admin_group); $log->add_notice($set_admin_group); } else { //Aucun admin il va falloir definir le groupe d'admin � la main $log->add_notice("NO ADMIN AND NO ADMIN GROUP"); } //**********************************// // RENAME XML // //**********************************// if(file_exists(dirname($in_xml_file)."/old_".basename($in_xml_file))) { unlink(dirname($in_xml_file)."/old_".basename($in_xml_file)); $log->add_notice("FILE ".dirname($in_xml_file)."/old_".basename($in_xml_file)." DELETED"); } if(file_exists(dirname($ldap_conf_file)."/old_".basename($ldap_conf_file))) { unlink(dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)); $log->add_notice("FILE ".dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)." DELETED"); } copy(dirname($in_xml_file)."/".basename($in_xml_file),dirname($in_xml_file)."/old_".basename($in_xml_file)); $log->add_notice("COPY ".dirname($in_xml_file)."/".basename($in_xml_file)." TO ".dirname($in_xml_file)."/old_".basename($in_xml_file)); copy(dirname($ldap_conf_file)."/".basename($ldap_conf_file),dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)); $log->add_notice("COPY ".dirname($ldap_conf_file)."/".basename($ldap_conf_file)." TO ".dirname($ldap_conf_file)."/old_".basename($ldap_conf_file)); $log->end(); $log->purge($purge_log); ?>