<?php\r
\r
-class wsUsersTree {\r
-\r
- protected $users;\r
- protected $admins;\r
- protected $grades;\r
- protected $facturables;\r
- protected $rights;\r
- protected $entreprises;\r
- protected $entreprises_tree;\r
- protected $con;\r
-\r
- public function __construct(&$con) {\r
- $this->con = $con;\r
- }\r
-\r
- public function refreshWSUsersTree() {\r
- $this->con->execute('TRUNCATE TABLE ws_users_tree');\r
- $this->con->execute('TRUNCATE TABLE ws_entreprises_tree');\r
-\r
- $this->users = array();\r
- $this->admins = array();\r
- $this->grades = array();\r
- $this->entreprises = array();\r
- $this->domains = array();\r
-\r
- $this->rights = array();\r
-\r
- $r = $this->con->select('SELECT * FROM e2_u u LEFT JOIN e2_c e ON u.entreprise=e.entreprise_id WHERE e.ws_grade>0 ORDER BY e.ws_grade ASC');\r
- while ($r->fetch()) {\r
- $this->entreprises[$r->utilisateur_id] = $r->entreprise_id;\r
- $this->users[$r->utilisateur_id] = $r->ws_admin;\r
- $this->grades[$r->utilisateur_id] = $r->ws_grade;\r
- if (!isset($this->admins[$r->ws_admin])) {\r
- $this->admins[$r->ws_admin] = array();\r
- }\r
- if (!isset($this->admins[$r->utilisateur_id])) {\r
- $this->admins[$r->utilisateur_id] = array();\r
- }\r
- $this->admins[$r->ws_admin][] = $r->utilisateur_id;\r
- $d = explode('@', $r->email);\r
- $this->domains[$r->utilisateur_id] = mb_strtolower($d[1]);\r
- }\r
-\r
- $this->facturables = $this->getFacturables();\r
- // Fabrication de l'arbre\r
- $c = $this->con->openCursor('ws_users_tree');\r
- $ce = $this->con->openCursor('ws_entreprises_tree');\r
-\r
- $evu = array();\r
-\r
- foreach ($this->users as $utilisateur_id => $admin) {\r
- $facturable_id = $administrateur_id = 0;\r
- $this->getFacturableOf($utilisateur_id, $facturable_id, $administrateur_id, 1);\r
-\r
- if (!isset($this->entreprises[$facturable_id]) || is_null($this->entreprises[$facturable_id])) {\r
- //$this->entreprises[$facturable_id]=$this->entreprises[$utilisateur_id];\r
- }\r
-\r
-\r
- $c->utilisateur_id = $utilisateur_id;\r
- $ce->entreprise_id = $c->entreprise_id = $this->entreprises[$utilisateur_id];\r
- $c->facturable_id = $facturable_id;\r
- $ce->facturable_entreprise_id = $c->facturable_entreprise_id = $this->entreprises[$facturable_id];\r
- $ce->administrateur_id = $c->administrateur_id = $administrateur_id;\r
- try{\r
- $c->insert();\r
- }catch(Exception $e){\r
- fb($e);\r
- }\r
- if (isset($evu[$c->entreprise_id])) {\r
- continue;\r
- }\r
- try{\r
- $ce->insert();\r
- }catch(Exception $e){\r
- fb($e);\r
- }\r
- $evu[$c->entreprise_id] = true;\r
- }\r
- // Fabrication de la liste des droits à partir de l'arbre\r
- $j = 0;\r
- for ($i = 1; $i <= 5; $i++) {\r
- foreach ($this->admins as $admin_id => $list) {\r
- $newlist = $list;\r
- foreach ($list as $uid) {\r
- if ($uid != $admin_id && isset($this->admins[$uid])) {\r
- $newlist = array_merge($this->admins[$uid], $newlist);\r
- }\r
- }\r
- $this->admins[$admin_id] = array_unique($newlist);\r
- }\r
- }\r
- // Ajout des droits personnels\r
- foreach ($this->users as $uid => $admin) {\r
- $this->admins[$uid][] = $uid;\r
- }\r
- // Echange des droits entre collègues\r
- foreach ($this->admins as $admin_id => $list) {\r
- $e = $this->entreprises[$admin_id];\r
- $collegues = array_keys($this->entreprises, $e);\r
- $newlist = $this->admins[$admin_id];\r
- foreach ($collegues as $c) {\r
- $newlist = array_merge($newlist, $this->admins[$c]);\r
- }\r
- $newlist = array_unique($newlist);\r
- $this->admins[$admin_id] = $newlist;\r
- foreach ($collegues as $c) {\r
- $this->admins[$c] = $newlist;\r
- }\r
- }\r
-\r
- $adom = array();\r
-\r
- foreach ($this->admins as $admin => $list) {\r
- $this->admins[$admin] = array_unique($list);\r
- sort($this->admins[$admin]);\r
-\r
- $adom[$admin] = array();\r
- foreach ($list as $id) {\r
- $adom[$admin][] = $this->domains[$id];\r
- }\r
- $adom[$admin] = array_unique($adom[$admin]);\r
- }\r
-\r
- $c = $this->con->openCursor('extranet_users.user');\r
- foreach ($this->admins as $admin => $list) {\r
- $c->e1_ws_rights = implode(',', $list);\r
- $c->e1_ws_domains = implode(',', $adom[$admin]);\r
- $c->update('WHERE id=\'' . $this->con->escape($admin) . '\'');\r
- }\r
- }\r
-\r
- protected function getFacturableOf($utilisateur_id, &$facturable_id, &$administrateur_id, $level) {\r
- if (in_array($utilisateur_id, $this->facturables)) {\r
- $facturable_id = $utilisateur_id;\r
- $administrateur_id = $this->users[$utilisateur_id];\r
- return;\r
- }\r
- if ($level > 10) {\r
- $facturable_id = -1;\r
- $administrateur_id = -1;\r
- return;\r
- }\r
-\r
- return $this->getFacturableOf($this->users[$utilisateur_id], $facturable_id, $administrateur_id, $level + 1);\r
- }\r
-\r
- protected function getFacturables() {\r
- $res = array();\r
- foreach ($this->users as $utilisateur_id => $admin) {\r
- if ($this->grades[$admin] == 5) {\r
- $res[] = $utilisateur_id;\r
- }\r
- }\r
- sort($res);\r
- return $res;\r
- }\r
+class wsUsersTree\r
+{\r
+\r
+ protected $users;\r
+ protected $admins;\r
+ protected $grades;\r
+ protected $facturables;\r
+ protected $rights;\r
+ protected $entreprises;\r
+ protected $entreprises_tree;\r
+ protected $con;\r
+\r
+ public function __construct(&$con)\r
+ {\r
+ $this->con = $con;\r
+ }\r
+\r
+ public function refreshWSUsersTree()\r
+ {\r
+ $this->con->execute('TRUNCATE TABLE ws_users_tree');\r
+ $this->con->execute('TRUNCATE TABLE ws_entreprises_tree');\r
+\r
+ $this->users = array();\r
+ $this->admins = array();\r
+ $this->grades = array();\r
+ $this->entreprises = array();\r
+ $this->domains = array();\r
+\r
+ $this->rights = array();\r
+\r
+ $r = $this->con->select('SELECT * FROM e2_u u LEFT JOIN e2_c e ON u.entreprise=e.entreprise_id WHERE e.ws_grade>0 ORDER BY e.ws_grade ASC');\r
+ while ($r->fetch()) {\r
+ $this->entreprises[$r->utilisateur_id] = $r->entreprise_id;\r
+ $this->users[$r->utilisateur_id] = $r->ws_admin;\r
+ $this->grades[$r->utilisateur_id] = $r->ws_grade;\r
+ if (!isset($this->admins[$r->ws_admin])) {\r
+ $this->admins[$r->ws_admin] = array();\r
+ }\r
+ if (!isset($this->admins[$r->utilisateur_id])) {\r
+ $this->admins[$r->utilisateur_id] = array();\r
+ }\r
+ $this->admins[$r->ws_admin][] = $r->utilisateur_id;\r
+ $d = explode('@', $r->email);\r
+ $this->domains[$r->utilisateur_id] = mb_strtolower($d[1]);\r
+ }\r
+\r
+ $this->facturables = $this->getFacturables();\r
+ // Fabrication de l'arbre\r
+ $c = $this->con->openCursor('ws_users_tree');\r
+ $ce = $this->con->openCursor('ws_entreprises_tree');\r
+\r
+ $evu = array();\r
+\r
+ foreach ($this->users as $utilisateur_id => $admin) {\r
+ $facturable_id = $administrateur_id = 0;\r
+ $this->getFacturableOf($utilisateur_id, $facturable_id, $administrateur_id, 1);\r
+\r
+ if (!isset($this->entreprises[$facturable_id]) || is_null($this->entreprises[$facturable_id])) {\r
+ //$this->entreprises[$facturable_id]=$this->entreprises[$utilisateur_id];\r
+ }\r
+\r
+ $c->utilisateur_id = $utilisateur_id;\r
+ $ce->entreprise_id = $c->entreprise_id = $this->entreprises[$utilisateur_id];\r
+ $c->facturable_id = $facturable_id;\r
+ $ce->facturable_entreprise_id = $c->facturable_entreprise_id = $this->entreprises[$facturable_id];\r
+ $ce->administrateur_id = $c->administrateur_id = $administrateur_id;\r
+ try {\r
+ $c->insert();\r
+ } catch (Exception $e) {\r
+ fb($e);\r
+ }\r
+ if (isset($evu[$c->entreprise_id])) {\r
+ continue;\r
+ }\r
+ try {\r
+ $ce->insert();\r
+ } catch (Exception $e) {\r
+ fb($e);\r
+ }\r
+ $evu[$c->entreprise_id] = true;\r
+ }\r
+ // Fabrication de la liste des droits à partir de l'arbre\r
+ $j = 0;\r
+ for ($i = 1; $i <= 5; $i++) {\r
+ foreach ($this->admins as $admin_id => $list) {\r
+ $newlist = $list;\r
+ foreach ($list as $uid) {\r
+ if ($uid != $admin_id && isset($this->admins[$uid])) {\r
+ $newlist = array_merge($this->admins[$uid], $newlist);\r
+ }\r
+ }\r
+ $this->admins[$admin_id] = array_unique($newlist);\r
+ }\r
+ }\r
+ // Ajout des droits personnels\r
+ foreach ($this->users as $uid => $admin) {\r
+ $this->admins[$uid][] = $uid;\r
+ }\r
+ // Echange des droits entre collègues\r
+ foreach ($this->admins as $admin_id => $list) {\r
+ if (!isset($this->entreprises[$admin_id])) {\r
+ continue;\r
+ }\r
+ $e = $this->entreprises[$admin_id];\r
+ $collegues = array_keys($this->entreprises, $e);\r
+ $newlist = $this->admins[$admin_id];\r
+ foreach ($collegues as $c) {\r
+ $newlist = array_merge($newlist, $this->admins[$c]);\r
+ }\r
+ $newlist = array_unique($newlist);\r
+ $this->admins[$admin_id] = $newlist;\r
+ foreach ($collegues as $c) {\r
+ $this->admins[$c] = $newlist;\r
+ }\r
+ }\r
+\r
+ $adom = array();\r
+\r
+ foreach ($this->admins as $admin => $list) {\r
+ $this->admins[$admin] = array_unique($list);\r
+ sort($this->admins[$admin]);\r
+\r
+ $adom[$admin] = array();\r
+ foreach ($list as $id) {\r
+ $adom[$admin][] = $this->domains[$id];\r
+ }\r
+ $adom[$admin] = array_unique($adom[$admin]);\r
+ }\r
+\r
+ $c = $this->con->openCursor('extranet_users.user');\r
+ foreach ($this->admins as $admin => $list) {\r
+ $c->e1_ws_rights = implode(',', $list);\r
+ $c->e1_ws_domains = implode(',', $adom[$admin]);\r
+ $c->update('WHERE id=\'' . $this->con->escape($admin) . '\'');\r
+ }\r
+ }\r
+\r
+ protected function getFacturableOf($utilisateur_id, &$facturable_id, &$administrateur_id, $level)\r
+ {\r
+ if (in_array($utilisateur_id, $this->facturables)) {\r
+ $facturable_id = $utilisateur_id;\r
+ $administrateur_id = $this->users[$utilisateur_id];\r
+ return;\r
+ }\r
+ if ($level > 10) {\r
+ $facturable_id = -1;\r
+ $administrateur_id = -1;\r
+ return;\r
+ }\r
+ if (!$utilisateur_id || !isset($this->users[$utilisateur_id])) {\r
+ return;\r
+ }\r
+\r
+ return $this->getFacturableOf($this->users[$utilisateur_id], $facturable_id, $administrateur_id, $level + 1);\r
+ }\r
+\r
+ protected function getFacturables()\r
+ {\r
+ $res = array();\r
+ foreach ($this->users as $utilisateur_id => $admin) {\r
+ if ($this->grades[$admin] == 5) {\r
+ $res[] = $utilisateur_id;\r
+ }\r
+ }\r
+ sort($res);\r
+ return $res;\r
+ }\r
\r
}\r
\r