From 8de8f414b8b11e9cbf4b585eba008dae06108670 Mon Sep 17 00:00:00 2001 From: "vincent@cubedesigners.com" Date: Mon, 17 Jan 2011 08:54:28 +0000 Subject: [PATCH] --- .../Controlleur/class.extranet.core.php | 8 +- .../Controlleur/class.extranet.url.php | 17 +- .../DAO/class.extranet.dao.utilisateur.php | 5 +- inc/prepend.php | 10 +- inc/ws/Controlleur/class.ws.droits.php | 9 +- inc/ws/Controlleur/class.ws.url.php | 203 +++++++++++++++++- inc/ws/Controlleur/class.ws.users.tree.php | 52 ++++- 7 files changed, 283 insertions(+), 21 deletions(-) diff --git a/inc/extranet/Controlleur/class.extranet.core.php b/inc/extranet/Controlleur/class.extranet.core.php index bceae8808..d728b1d0b 100644 --- a/inc/extranet/Controlleur/class.extranet.core.php +++ b/inc/extranet/Controlleur/class.extranet.core.php @@ -141,6 +141,7 @@ class extranetCore extends cubeCore { $db->utilisateurs->ws_id('integer', 0, true); $db->utilisateurs->ws_password('varchar', 40, false); $db->utilisateurs->ws_settings('text', 0, false); + $db->utilisateurs->ws_rights('text', 0, false); // Clés $db->utilisateurs->primary('pk_utilisateurs', 'utilisateur_id'); $db->utilisateurs->unique('unique_utilisateurs_email', 'email'); @@ -385,10 +386,8 @@ class extranetCore extends cubeCore { $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); + // Clé + $db->ws_users_tree->primary('pk_utilisateur_id', 'utilisateur_id'); try { $dbi = new CubeDbStruct($this->con); @@ -484,7 +483,6 @@ class extranetCore extends cubeCore { . 'LEFT JOIN books b ON t.theme_id=b.theme ' . 'GROUP BY t.theme_id'); // cubeDb::mysqlConvert($this->con); - touch($cache); } public function sauvePreferencesUtilisateur() diff --git a/inc/extranet/Controlleur/class.extranet.url.php b/inc/extranet/Controlleur/class.extranet.url.php index 069c289ee..afb8eb2f4 100644 --- a/inc/extranet/Controlleur/class.extranet.url.php +++ b/inc/extranet/Controlleur/class.extranet.url.php @@ -28,11 +28,20 @@ class extranetUrl { $f = $args[0]; + if (MODE == 'extranet') { + $order = array('extratetUrl', 'wsUrl'); + } elseif (MODE == 'ws') { + $order = array('wsUrl', 'extranetUrl'); + } + echo extranetPage::header($args); - if (is_callable(array('extranetUrl', $f))) { - echo call_user_func(array('extranetUrl', $f), $args); - } else if (is_callable(array('wsUrl', $f))) { - echo call_user_func(array('wsUrl', $f), $args); + + foreach($order as $class) { + $cb = array($class, $f); + if (is_callable($cb)) { + echo call_user_func($cb, $args); + break; + } } echo extranetPage::footer(); } diff --git a/inc/extranet/DAO/class.extranet.dao.utilisateur.php b/inc/extranet/DAO/class.extranet.dao.utilisateur.php index 682d5c30a..2fca4b8cd 100644 --- a/inc/extranet/DAO/class.extranet.dao.utilisateur.php +++ b/inc/extranet/DAO/class.extranet.dao.utilisateur.php @@ -48,6 +48,9 @@ class extranetDAOUtilisateur extends extranetDAO { } else { $utilisateur->ws_settings = array('resolution' => 150, 'method' => 0, 'quality' => 85, 'objects' => 1800); } + if (isset($r->ws_grade)) { + $utilisateur->ws_grade = $r->ws_grade; + } return $utilisateur; } @@ -99,7 +102,7 @@ class extranetDAOUtilisateur extends extranetDAO { public function selectByLoginPassword($login, $password) { - $sql = 'SELECT * FROM utilisateurs WHERE (email=\'' . $this->con->escape($login) . '\' OR login=\'' . $this->con->escape($login) . '\') AND (password=\'' . $this->con->escape($password) . '\' OR ws_password=\'' . $this->con->escape($password) . '\') LIMIT 1'; + $sql = 'SELECT * FROM utilisateurs_entreprise WHERE (email=\'' . $this->con->escape($login) . '\' OR login=\'' . $this->con->escape($login) . '\') AND (password=\'' . $this->con->escape($password) . '\' OR ws_password=\'' . $this->con->escape($password) . '\') LIMIT 1'; $r = $this->con->select($sql); if ($r->count() == 0) { return false; diff --git a/inc/prepend.php b/inc/prepend.php index 6894bfc2d..5b90bad76 100644 --- a/inc/prepend.php +++ b/inc/prepend.php @@ -11,8 +11,14 @@ require_once(dirname(__FILE__) . '/extranet/DAO/_common.php'); require_once(dirname(__FILE__) . '/ws/Metier/_common.php'); require_once(dirname(__FILE__) . '/ws/Controlleur/_common.php'); require_once(dirname(__FILE__) . '/ws/DAO/_common.php'); -$GLOBALS['ajaxClasses'][] = 'extranetAjax'; -$GLOBALS['ajaxClasses'][] = 'wsAjax'; + +if (MODE == 'extranet') { + $GLOBALS['ajaxClasses'][] = 'extranetAjax'; + $GLOBALS['ajaxClasses'][] = 'wsAjax'; +} else { + $GLOBALS['ajaxClasses'][] = 'wsAjax'; + $GLOBALS['ajaxClasses'][] = 'extranetAjax'; +} // Instantiation de la classe de contrôle $core = new extranetCore(); // Définition des handlers des urls diff --git a/inc/ws/Controlleur/class.ws.droits.php b/inc/ws/Controlleur/class.ws.droits.php index 3fc263316..d5f682978 100644 --- a/inc/ws/Controlleur/class.ws.droits.php +++ b/inc/ws/Controlleur/class.ws.droits.php @@ -4,10 +4,17 @@ class wsDroits { { global $core; + fb($core->user); + $nav = array(); $nav[__('Dashboard')] = 'dashboard'; $nav[__('Publications')] = 'publications'; - $nav[__('Traductions')] = 'traductions'; + if ($core->user->ws_grade >= 3) { + $nav[__('Clients')] = 'clients'; + } + if ($core->user->ws_grade >= 5) { + $nav[__('Traductions')] = 'traductions'; + } return $nav; } diff --git a/inc/ws/Controlleur/class.ws.url.php b/inc/ws/Controlleur/class.ws.url.php index 087d6bd0d..abc398e24 100644 --- a/inc/ws/Controlleur/class.ws.url.php +++ b/inc/ws/Controlleur/class.ws.url.php @@ -117,7 +117,7 @@ class wsUrl { $res .= '
'; $res .= ''; $res .= ''; - //$res .= ''; + // $res .= ''; $res .= '
' . __('Sélectionnez la langue à configurer') . ' : ' . form::combo('lang', $langs, $args[1]) . '
' . $core->typo->Ajouter('OK') . '
' . $core->typo->Ajouter('OK') . '
'; $res .= '
'; $res .= extranetPage::bf(); @@ -367,6 +367,207 @@ html{height:100%}' . "\n"; } return $res; } + + public static function clients($args) + { + global $core; + cubePage::truePopup(); + cubePage::autoComplete(); + cubePage::emptyfield(); + extranetDroits::min(1); + $settings = $core->user->getSettings('clients'); + + $shortcuts = array(); + $shortcuts[] = '' . $core->typo->Ajouter('Créer un nouveau client') . ''; + $filtres = array(); + $filtres[] = new extranetFiltre(__('Ayant un projet'), 'status_client_projet', $settings['filtres']); + $filtres[] = new extranetFiltre(__('Ayant des impayés'), 'impaye', $settings['filtres']); + $res = extranetPage::barre($filtres, 'filtreClients', 'clients', $shortcuts); + $res .= extranetPage::tMain(); + $res .= extranetPage::bh(); + $res .= '
'; + $res .= self::listeClients(); + $res .= '
'; + $res .= extranetPage::bf(); + $res .= extranetPage::bMain(); + return $res; + } + + public static function listeClients($dashboard = null, $settings = null) + { + global $core; + extranetDroits::min(1); + $settings = is_null($settings)?$core->user->getSettings('clients'):$settings; + $change = is_null($dashboard)?'Client':'Dashboard/' . $dashboard; + $dao = new extranetDAOEntreprise($core->con); + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } + $dao->setFiltres($settings['filtres']); + $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach($liste as $id => $client) { + if (!is_array($client->contacts)) { + fb($client); + continue; + } + $odd = cubeMath::isOdd($i)?' class="odd"':''; + $res .= ''; + $res .= ''; + $res .= ''; + $contacts = array(); + + foreach($client->contacts as $c) { + $contacts[] = '' . $c->prenom . ' ' . $c->nom . ''; + } + + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i++; + } + if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i)?' class="odd"':''; + $res .= ''; + } + $res .= '
' . extranetUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '' . extranetUrl::orderby(__('Raison sociale'), 'nom', $settings, 'sort' . $change) . '' . __('Contacts') . '
' . $client->entreprise_id . '' . $client->nom . '' . implode(', ', $contacts) . ''; + $res .= '' . cubeMedia::image(IMG . '/edit.png') . '
'; + $res .= extranetPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d'); + $res .= extranetUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients')); + $res .= '
'; + return $res; + } + + public static function formClient($entreprise_id = 'new') + { + global $core; + extranetDroits::min(1); + $dao = new extranetDAOEntreprise($core->con); + $daoUtilisateur = new extranetDAOUtilisateur($core->con); + if ($entreprise_id == 'new') { + $client = $dao->cree(); + } else { + $client = $dao->selectById($entreprise_id); + } + + $res = '' . __('Numéro de client') . '' . form::hidden('entreprise_id', $client->entreprise_id) . '' . $client->entreprise_id . ''; + $res .= '' . __('Raison sociale') . '' . form::field('nom', 30, 128, $client->nom) . ''; + $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; + $res .= '' . __('Code postal') . '' . form::field('code_postal', 10, 20, $client->code_postal) . ''; + $res .= '' . __('Ville') . '' . form::field('ville', 30, 128, $client->ville) . ''; + $res .= '' . __('Pays') . '' . form::combo('pays', cubeCountry::getList(), $client->pays) . ''; + $res .= '' . __('Adresse de facturation') . '' . form::textarea('adresse_facturation', 40, 3, $client->adresse_facturation) . ''; + $res .= '' . __('Numéro de TVA intracommunautaire') . '' . form::field('tva_intra', 15, 13, $client->tva_intra) . ''; + $res .= '' . __('Fluidbook Workshop') . ''; + $res .= '' . __('Grade') . '' . form::combo('ws_grade', array_flip($core->ws_grades), $client->ws_grade) . ''; + if ($entreprise_id == 'new' || !$client->ws_admin) { + $class = 'empty-field'; + $default_id = ''; + $default = __('Entrez le nom du revendeur ou de l\'administrateur'); + } else { + $class = ''; + $default_id = $client->ws_admin; + $wsa = $daoUtilisateur->selectById($client->ws_admin, 'utilisateurs_entreprise'); + $default = $wsa->utilisateur_id . ' - ' . $wsa->rs . ' (' . $wsa->prenom . ' ' . $wsa->nom . ')'; + } + + $d = $dao->getWSDatas($entreprise_id); + + $res .= '' . __('Revendeur / Administrateur') . '' . form::field('ws_admin_nom', 60, 128, $default, $class) . form::hidden('ws_admin', $default_id) . ''; + if (!is_null($d)) { + $res .= '' . __('Entité facturable') . '' . $d->facturable->prenom . ' ' . $d->facturable->nom . ' (' . $d->facturable->rs . ')'; + $res .= '' . __('Administrateur responsable') . '' . $d->administrateur->prenom . ' ' . $d->administrateur->nom . ' (' . $d->administrateur->rs . ')'; + } + if ($entreprise_id == 'new') { + $daoContact = new extranetDAOClient($core->con); + $contact = $daoContact->cree(); + $res .= '' . __('Contact') . ''; + $res .= '' . __('Adresse e-mail') . '' . form::field(array('contact[email]'), 30, 128, $contact->email) . ''; + $res .= '' . __('Mot de passe') . '' . form::field(array('contact[password]'), 30, 128, $contact->password) . ''; + $res .= '' . __('Prénom') . '' . form::field(array('contact[prenom]'), 30, 128, $contact->prenom) . ''; + $res .= '' . __('Nom') . '' . form::field(array('contact[nom]'), 30, 128, $contact->nom) . ''; + $res .= '' . __('Téléphone') . '' . form::field(array('contact[telephone]'), 20, 128, $contact->telephone) . ''; + $res .= '' . __('Mobile') . '' . form::field(array('contact[mobile]'), 20, 128, $contact->mobile) . ''; + $res .= '' . __('Fax') . '' . form::field(array('contact[fax]'), 20, 128, $contact->fax) . ''; + $res .= '' . __('Langue') . '' . form::combo(array('contact[lang]'), cubeLang::getAvailableLangs(true), $contact->lang) . ''; + } + return $res; + } + + public static function listeContacts($entreprise_id) + { + global $core; + extranetDroits::min(1); + $dao = new extranetDAOEntreprise($core->con); + $contacts = $dao->getContacts($entreprise_id); + + $res = ''; + $res .= ''; + $i = 0; + foreach($contacts as $contact) { + $odd = cubeMath::isOdd($i)?' class="odd"':''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i++; + } + $res .= '
' . $core->typo->Contact('Ajouter un contact') . '
' . trim($contact->prenom . ' ' . $contact->nom) . '' . $contact->email . 'FTP' . cubeMedia::image(IMG . '/edit.png') . '
'; + return $res; + } + + public static function formContact($client_id = 'new', $entreprise_id = null) + { + global $core; + extranetDroits::min(1); + + $dao = new extranetDAOClient($core->con); + if ($client_id == 'new') { + $client = $dao->creeFromEntreprise($entreprise_id); + } else { + $client = $dao->selectById($client_id); + } + + $res = '' . __('Numéro de client') . '' . form::hidden('grade', 0) . form::hidden('entreprise', $client->entreprise) . form::hidden('utilisateur_id', $client->utilisateur_id) . '' . $client->utilisateur_id . ''; + $res .= '' . __('Adresse e-mail') . '' . form::field('email', 30, 128, $client->email) . ''; + $res .= '' . __('Mot de passe') . '' . form::field('password', 30, 128, $client->password) . ''; + $res .= '' . __('Prénom du contact') . '' . form::field('prenom', 30, 128, $client->prenom) . ''; + $res .= '' . __('Nom du contact') . '' . form::field('nom', 30, 128, $client->nom) . ''; + $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; + $res .= '' . __('Code postal') . '' . form::field('code_postal', 10, 20, $client->code_postal) . ''; + $res .= '' . __('Ville') . '' . form::field('ville', 30, 128, $client->ville) . ''; + $res .= '' . __('Pays') . '' . form::combo('pays', cubeCountry::getList(), $client->pays) . ''; + $res .= '' . __('Téléphone') . '' . form::field('telephone', 20, 128, $client->telephone) . ''; + $res .= '' . __('Mobile') . '' . form::field('mobile', 20, 128, $client->mobile) . ''; + $res .= '' . __('Fax') . '' . form::field('fax', 20, 128, $client->fax) . ''; + $res .= '' . __('Langue') . '' . form::combo('lang', cubeLang::getAvailableLangs(true), $client->lang) . ''; + if ($client_id != 'new') { + $res .= '' . cubeMedia::spacer(10, 10) . ''; + $res .= '' . __('FTP') . ''; + $res .= '' . __("Paramètres de connexion au Fluidbook Workshop") . '' . __('Adresse') . ' : http://' . $_SERVER['HTTP_HOST'] . '/
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . $client->password . ''; + $res .= '' . cubeMedia::spacer(10, 10) . ''; + } + return $res; + } + + public static function formNotes($utilisateur_id) + { + global $core; + extranetDroits::min(1); + $dao = new extranetDAOUtilisateur($core->con); + $utilisateur = $dao->selectById($utilisateur_id); + $res = '' . form::hidden('utilisateur_id', $utilisateur_id) . ''; + $res .= '' . form::textarea('notes', 100, 30, $utilisateur->notes) . ''; + $res .= ''; + return $res; + } } ?> \ 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 index 603c70d00..cb3df73fa 100644 --- a/inc/ws/Controlleur/class.ws.users.tree.php +++ b/inc/ws/Controlleur/class.ws.users.tree.php @@ -19,31 +19,29 @@ class wsUsersTree { 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->entreprises = array(); - $this->entreprises_tree = 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 e.ws_grade DESC'); + $r = $this->con->select('SELECT * FROM utilisateurs u,entreprises e WHERE u.entreprise=e.entreprise_id AND e.ws_grade>0 ORDER BY e.ws_grade ASC'); while ($r->fetch()) { - $this->entreprises_tree[$r->entreprise_id] = $r->ws_admin; $this->entreprises[$r->utilisateur_id] = $r->entreprise_id; $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(); } + if (!isset($this->admins[$r->utilisateur_id])) { + $this->admins[$r->utilisateur_id] = array(); + } $this->admins[$r->ws_admin][] = $r->utilisateur_id; } $this->facturables = $this->getFacturables(); - - // Fabrication de l'arbre $c = $this->con->openCursor('ws_users_tree'); @@ -55,8 +53,48 @@ class wsUsersTree { $c->administrateur_id = $administrateur_id; $c->insert(); } + // Fabrication de la liste des droits à partir de l'arbre + for($i = 1;$i <= 4;$i++) { + foreach($this->admins as $admin_id => $list) { + $newlist = array_merge(array(), $list); + foreach($list as $uid) { + if ($uid != $admin_id && isset($this->admins[$uid])) { + $newlist = array_merge($this->admins[$uid], $newlist); + } + } + $this->admins[$admin_id] = $newlist; + } + } + // Ajout des droits personnels + foreach($this->users as $uid => $admin) { + $this->admins[$uid][] = $uid; + } - // Fabrication de la liste des droits + // Echange des droits entre collègues + foreach($this->admins as $admin_id => $list) { + $e = $this->entreprises[$admin_id]; + $collegues = array_keys($this->entreprises, $e); + $newlist = $this->admins[$admin_id]; + foreach($collegues as $c) { + $newlist = array_merge($newlist, $this->admins[$c]); + } + $newlist = array_unique($newlist); + $this->admins[$admin_id] = $newlist; + foreach($collegues as $c) { + $this->admins[$c] = $newlist; + } + } + + foreach($this->admins as $admin=>$list){ + $this->admins[$admin]=array_unique($list); + sort($this->admins[$admin]); + } + + $c = $this->con->openCursor('utilisateurs'); + foreach($this->admins as $admin => $list) { + $c->ws_rights = implode(',', $list); + $c->update('WHERE utilisateur_id=\'' . $this->con->escape($admin) . '\''); + } } protected function getFacturableOf($utilisateur_id, &$facturable_id, &$administrateur_id, $level) -- 2.39.5