From e4bfa4a213467fedf8ab8cb2d5e0214d8713331b Mon Sep 17 00:00:00 2001 From: "vincent@cubedesigners.com" Date: Wed, 12 Jan 2011 11:38:43 +0000 Subject: [PATCH] --- .../Controlleur/class.extranet.core.php | 16 ++++ .../DAO/class.extranet.dao.client.php | 8 +- .../DAO/class.extranet.dao.entreprise.php | 5 +- .../DAO/class.extranet.dao.utilisateur.php | 10 ++- inc/ws/Controlleur/_common.php | 1 + inc/ws/Controlleur/class.ws.users.tree.php | 75 +++++++++++++++++++ 6 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 inc/ws/Controlleur/class.ws.users.tree.php diff --git a/inc/extranet/Controlleur/class.extranet.core.php b/inc/extranet/Controlleur/class.extranet.core.php index 7eb31a979..bceae8808 100644 --- a/inc/extranet/Controlleur/class.extranet.core.php +++ b/inc/extranet/Controlleur/class.extranet.core.php @@ -380,6 +380,16 @@ class extranetCore extends cubeCore { // Clés $db->book_short_url->index('index_book_short_url_long_url', 'BTREE', 'long_url'); $db->book_short_url->index('index_book_short_url_book_id', 'BTREE', 'book_id'); + // . + // Table des droits + $db->ws_users_tree->utilisateur_id('integer', 0, false); + $db->ws_users_tree->facturable_id('integer', 0, false); + $db->ws_users_tree->administrateur_id('integer', 0, false); + // . + // Table des droits + $db->ws_rights->utilisateur_id('integer', 0, false); + $db->ws_rights->rights_on('integer', 0, false); + try { $dbi = new CubeDbStruct($this->con); $dbi->synchronize($db); @@ -482,6 +492,12 @@ class extranetCore extends cubeCore { $dao = new extranetDAOUtilisateur($this->con); $dao->sauvePreferences($this->user); } + + public function refreshWSUsersTree() + { + $t = new wsUsersTree($this->con); + $t->refreshWSUsersTree(); + } } ?> \ No newline at end of file diff --git a/inc/extranet/DAO/class.extranet.dao.client.php b/inc/extranet/DAO/class.extranet.dao.client.php index 1a229c12f..99f7bf1e2 100644 --- a/inc/extranet/DAO/class.extranet.dao.client.php +++ b/inc/extranet/DAO/class.extranet.dao.client.php @@ -18,9 +18,9 @@ class extranetDAOClient extends extranetDAOUtilisateur { return parent::cree($utilisateur); } - public function selectById($client_id) + public function selectById($client_id, $table = 'clients') { - $r = $this->con->select('SELECT * FROM clients WHERE utilisateur_id=' . $this->con->escape($client_id) . ' LIMIT 1'); + $r = $this->con->select('SELECT * FROM ' . $table . ' WHERE utilisateur_id=' . $this->con->escape($client_id) . ' LIMIT 1'); $res = $this->factory($r); if (!count($res)) { @@ -35,9 +35,9 @@ class extranetDAOClient extends extranetDAOUtilisateur { return $this->singleton($r); } - public function getListe($orderby = null, $sens = null, $limit = null) + public function getListe($orderby = null, $sens = null, $limit = null, $where = null) { - $sql = $this->getQueryList('clients', $orderby, $sens, $limit); + $sql = $this->getQueryList('clients', $orderby, $sens, $limit, $where); $r = $this->con->select($sql); return $this->factory($r); } diff --git a/inc/extranet/DAO/class.extranet.dao.entreprise.php b/inc/extranet/DAO/class.extranet.dao.entreprise.php index db5a1f9da..4c30ffc10 100644 --- a/inc/extranet/DAO/class.extranet.dao.entreprise.php +++ b/inc/extranet/DAO/class.extranet.dao.entreprise.php @@ -117,13 +117,16 @@ class extranetDAOEntreprise extends extranetDAO { } $entreprise = $this->selectById($entreprise_id); + $core->refreshWSUsersTree(); return $entreprise; } public function supprime($entreprise_id) { $this->con->execute('DELETE FROM utilisateurs WHERE entreprise=\'' . $this->con->escape($entreprise_id) . '\''); - return $this->con->execute('DELETE FROM entreprises WHERE entreprise_id=\'' . $this->con->escape($entreprise_id) . '\''); + $this->con->execute('DELETE FROM entreprises WHERE entreprise_id=\'' . $this->con->escape($entreprise_id) . '\''); + $core->refreshWSUsersTree(); + return true; } public function count() diff --git a/inc/extranet/DAO/class.extranet.dao.utilisateur.php b/inc/extranet/DAO/class.extranet.dao.utilisateur.php index 0b6322c21..682d5c30a 100644 --- a/inc/extranet/DAO/class.extranet.dao.utilisateur.php +++ b/inc/extranet/DAO/class.extranet.dao.utilisateur.php @@ -91,9 +91,9 @@ class extranetDAOUtilisateur extends extranetDAO { return $utilisateur; } - public function selectById($utilisateur_id,$table='utilisateurs') + public function selectById($utilisateur_id, $table = 'utilisateurs') { - $r = $this->con->select('SELECT * FROM `'.$table.'` WHERE utilisateur_id=\'' . $this->con->escape($utilisateur_id) . '\' LIMIT 1'); + $r = $this->con->select('SELECT * FROM `' . $table . '` WHERE utilisateur_id=\'' . $this->con->escape($utilisateur_id) . '\' LIMIT 1'); return $this->singleton($r); } @@ -191,10 +191,12 @@ class extranetDAOUtilisateur extends extranetDAO { $c->utilisateur_id = $this->getNextId(); $c->date_creation = time(); $c->insert(); + $core->refreshWSUsersTree(); return $this->selectById($c->utilisateur_id); } else { // Mise à jour d'un client $c->update('WHERE utilisateur_id=\'' . $this->con->escape($data['utilisateur_id']) . '\''); + $core->refreshWSUsersTree(); return $this->selectById($data['utilisateur_id']); } } @@ -240,7 +242,9 @@ class extranetDAOUtilisateur extends extranetDAO { public function supprime($utilisateur_id) { - return $this->con->execute('DELETE FROM utilisateurs WHERE utilisateur_id=\'' . $this->con->escape($utilisateur_id) . '\''); + $ok = $this->con->execute('DELETE FROM utilisateurs WHERE utilisateur_id=\'' . $this->con->escape($utilisateur_id) . '\''); + $core->refreshWSUsersTree(); + return $ok; } public function count() diff --git a/inc/ws/Controlleur/_common.php b/inc/ws/Controlleur/_common.php index f77f4f978..b46e6c4da 100644 --- a/inc/ws/Controlleur/_common.php +++ b/inc/ws/Controlleur/_common.php @@ -7,4 +7,5 @@ $__autoload['wsDroits'] = dirname(__FILE__) . '/class.ws.droits.php'; $__autoload['wsConversionSession'] = dirname(__FILE__) . '/class.ws.conversion.session.php'; $__autoload['wsStats']=dirname(__FILE__).'/class.ws.stats.php'; $__autoload['wsServices']=dirname(__FILE__).'/class.ws.services.php'; +$__autoload['wsUsersTree']=dirname(__FILE__).'/class.ws.users.tree.php'; ?> \ No newline at end of file diff --git a/inc/ws/Controlleur/class.ws.users.tree.php b/inc/ws/Controlleur/class.ws.users.tree.php new file mode 100644 index 000000000..091497dc7 --- /dev/null +++ b/inc/ws/Controlleur/class.ws.users.tree.php @@ -0,0 +1,75 @@ +con = $con; + } + + public function refreshWSUsersTree() + { + $this->con->execute('TRUNCATE TABLE ws_users_tree'); + $this->con->execute('TRUNCATE TABLE ws_rights'); + + $this->users = array(); + $this->admins = array(); + $this->grades = array(); + + $this->rights = array(); + + $r = $this->con->select('SELECT * FROM utilisateurs u,entreprises e WHERE u.entreprise=e.entreprise_id AND e.ws_grade>0 ORDER BY ws_grade DESC'); + while ($r->fetch()) { + $this->users[$r->utilisateur_id] = $r->ws_admin; + $this->grades[$r->utilisateur_id] = $r->ws_grade; + if (!isset($this->admins[$r->ws_admin])) { + $this->admins[$r->ws_admin] = array(); + } + $this->admins[$r->ws_admin][] = $r->utilisateur_id; + } + + $this->facturables = $this->getFacturables(); + + fb($this->facturables); + return; + + $c = $this->con->openCursor('ws_users_tree'); + foreach($this->users as $utilisateur_id => $admin) { + $this->getFacturableOf($utilisateur_id, $facturable_id, $administrateur_id); + $c->utilisateur_id = $utilisateur_id; + $c->facturable_id = $facturable_id; + $c->administrateur = $administrateur_id; + $c->insert(); + } + } + + protected function getFacturableOf($utilisateur_id, &$facturable_id, &$administrateur_id) + { + if (in_array($utilisateur_id, $this->facturables)) { + $facturable_id = $utilisateur_id; + $administrateur_id = $this->users[$utilisateur_id]; + return; + } + return $this->getFacturableOf($this->users[$utilisateur_id], $facturable_id, $administrateur_id); + } + + protected function getFacturables() + { + $res = array(); + foreach($this->users as $utilisateur_id => $admin) { + if ($this->grades[$admin] == 5) { + $res[] = $utilisateur_id; + } + } + return $res; + } +} + +?> \ No newline at end of file -- 2.39.5