$res .= '<form action="changeLang" method="post" class="submitonchange">';\r
$res .= '<table class="liste">';\r
$res .= '<tr><td class="center">' . __('Sélectionnez la langue à configurer') . ' : ' . form::combo('lang', $langs, $args[1]) . ' </td></tr>';\r
- //$res .= '<tr class="odd"><td class="right"><a href="#" class="submit">' . $core->typo->Ajouter('OK') . '</a></td></tr>';\r
+ // $res .= '<tr class="odd"><td class="right"><a href="#" class="submit">' . $core->typo->Ajouter('OK') . '</a></td></tr>';\r
$res .= '</table>';\r
$res .= '</form>';\r
$res .= extranetPage::bf();\r
}\r
return $res;\r
}\r
+\r
+ public static function clients($args)\r
+ {\r
+ global $core;\r
+ cubePage::truePopup();\r
+ cubePage::autoComplete();\r
+ cubePage::emptyfield();\r
+ extranetDroits::min(1);\r
+ $settings = $core->user->getSettings('clients');\r
+\r
+ $shortcuts = array();\r
+ $shortcuts[] = '<a href="#" class="popup" rel="formClient/new">' . $core->typo->Ajouter('Créer un nouveau client') . '</a>';\r
+ $filtres = array();\r
+ $filtres[] = new extranetFiltre(__('Ayant un projet'), 'status_client_projet', $settings['filtres']);\r
+ $filtres[] = new extranetFiltre(__('Ayant des impayés'), 'impaye', $settings['filtres']);\r
+ $res = extranetPage::barre($filtres, 'filtreClients', 'clients', $shortcuts);\r
+ $res .= extranetPage::tMain();\r
+ $res .= extranetPage::bh();\r
+ $res .= '<div id="listeClients">';\r
+ $res .= self::listeClients();\r
+ $res .= '</div>';\r
+ $res .= extranetPage::bf();\r
+ $res .= extranetPage::bMain();\r
+ return $res;\r
+ }\r
+\r
+ public static function listeClients($dashboard = null, $settings = null)\r
+ {\r
+ global $core;\r
+ extranetDroits::min(1);\r
+ $settings = is_null($settings)?$core->user->getSettings('clients'):$settings;\r
+ $change = is_null($dashboard)?'Client':'Dashboard/' . $dashboard;\r
+ $dao = new extranetDAOEntreprise($core->con);\r
+ if (isset($settings['search']) && !is_null($settings['search'])) {\r
+ $dao->setSearch($settings['search']);\r
+ }\r
+ $dao->setFiltres($settings['filtres']);\r
+ $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
+\r
+ $res = '<table class="liste">';\r
+ $res .= '<tr><th>' . extranetUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . extranetUrl::orderby(__('Raison sociale'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . __('Contacts') . '</th>';\r
+ $res .= '<th class="min"></th><th class="min"></th></tr>';\r
+ $i = 0;\r
+ foreach($liste as $id => $client) {\r
+ if (!is_array($client->contacts)) {\r
+ fb($client);\r
+ continue;\r
+ }\r
+ $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+ $res .= '<tr' . $odd . '>';\r
+ $res .= '<td>' . $client->entreprise_id . '</td>';\r
+ $res .= '<td>' . $client->nom . '</td>';\r
+ $contacts = array();\r
+\r
+ foreach($client->contacts as $c) {\r
+ $contacts[] = '<a href="#" class="popup" rel="formContact/' . $c->utilisateur_id . '">' . $c->prenom . ' ' . $c->nom . '</a>';\r
+ }\r
+\r
+ $res .= '<td id="contacts_' . $client->entreprise_id . '">' . implode(', ', $contacts) . '</td>';\r
+ $res .= '<td class="nowrap">';\r
+ $res .= '</td>';\r
+ $res .= '<td class="action"><a href="#" class="popup" rel="formClient/' . $client->entreprise_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+ $res .= '</tr>';\r
+ $i++;\r
+ }\r
+ if (!isset($settings['search']) || is_null($settings['search'])) {\r
+ $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+ $res .= '<tr' . $odd . '><td colspan="10">';\r
+ $res .= extranetPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
+ $res .= extranetUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients'));\r
+ $res .= '</td></tr>';\r
+ }\r
+ $res .= '</table>';\r
+ return $res;\r
+ }\r
+\r
+ public static function formClient($entreprise_id = 'new')\r
+ {\r
+ global $core;\r
+ extranetDroits::min(1);\r
+ $dao = new extranetDAOEntreprise($core->con);\r
+ $daoUtilisateur = new extranetDAOUtilisateur($core->con);\r
+ if ($entreprise_id == 'new') {\r
+ $client = $dao->cree();\r
+ } else {\r
+ $client = $dao->selectById($entreprise_id);\r
+ }\r
+\r
+ $res = '<tr><td>' . __('Numéro de client') . '</td><td>' . form::hidden('entreprise_id', $client->entreprise_id) . '' . $client->entreprise_id . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Raison sociale') . '</td><td>' . form::field('nom', 30, 128, $client->nom) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Adresse') . '</td><td>' . form::textarea('adresse', 40, 3, $client->adresse) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Code postal') . '</td><td>' . form::field('code_postal', 10, 20, $client->code_postal) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Ville') . '</td><td>' . form::field('ville', 30, 128, $client->ville) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Pays') . '</td><td>' . form::combo('pays', cubeCountry::getList(), $client->pays) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Adresse de facturation') . '</td><td>' . form::textarea('adresse_facturation', 40, 3, $client->adresse_facturation) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Numéro de TVA intracommunautaire') . '</td><td>' . form::field('tva_intra', 15, 13, $client->tva_intra) . '</td></tr>';\r
+ $res .= '<tr class="light"><th colspan="2" class="light"><strong>' . __('Fluidbook Workshop') . '</strong></th></tr>';\r
+ $res .= '<tr class="odd"><td>' . __('Grade') . '</td><td>' . form::combo('ws_grade', array_flip($core->ws_grades), $client->ws_grade) . '</td></tr>';\r
+ if ($entreprise_id == 'new' || !$client->ws_admin) {\r
+ $class = 'empty-field';\r
+ $default_id = '';\r
+ $default = __('Entrez le nom du revendeur ou de l\'administrateur');\r
+ } else {\r
+ $class = '';\r
+ $default_id = $client->ws_admin;\r
+ $wsa = $daoUtilisateur->selectById($client->ws_admin, 'utilisateurs_entreprise');\r
+ $default = $wsa->utilisateur_id . ' - ' . $wsa->rs . ' (' . $wsa->prenom . ' ' . $wsa->nom . ')';\r
+ }\r
+\r
+ $d = $dao->getWSDatas($entreprise_id);\r
+\r
+ $res .= '<tr class="odd"><td>' . __('Revendeur / Administrateur') . '</td><td>' . form::field('ws_admin_nom', 60, 128, $default, $class) . form::hidden('ws_admin', $default_id) . '</td></tr>';\r
+ if (!is_null($d)) {\r
+ $res .= '<tr class="odd"><td>' . __('Entité facturable') . '</td><td>' . $d->facturable->prenom . ' ' . $d->facturable->nom . ' (' . $d->facturable->rs . ')</td></tr>';\r
+ $res .= '<tr class="odd"><td>' . __('Administrateur responsable') . '</td><td>' . $d->administrateur->prenom . ' ' . $d->administrateur->nom . ' (' . $d->administrateur->rs . ')</td></tr>';\r
+ }\r
+ if ($entreprise_id == 'new') {\r
+ $daoContact = new extranetDAOClient($core->con);\r
+ $contact = $daoContact->cree();\r
+ $res .= '<tr><th colspan="2" class="light"><strong>' . __('Contact') . '</strong></th></tr>';\r
+ $res .= '<tr><td>' . __('Adresse e-mail') . '</td><td>' . form::field(array('contact[email]'), 30, 128, $contact->email) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Mot de passe') . '</td><td>' . form::field(array('contact[password]'), 30, 128, $contact->password) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Prénom') . '</td><td>' . form::field(array('contact[prenom]'), 30, 128, $contact->prenom) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Nom') . '</td><td>' . form::field(array('contact[nom]'), 30, 128, $contact->nom) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Téléphone') . '</td><td>' . form::field(array('contact[telephone]'), 20, 128, $contact->telephone) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Mobile') . '</td><td>' . form::field(array('contact[mobile]'), 20, 128, $contact->mobile) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Fax') . '</td><td>' . form::field(array('contact[fax]'), 20, 128, $contact->fax) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Langue') . '</td><td>' . form::combo(array('contact[lang]'), cubeLang::getAvailableLangs(true), $contact->lang) . '</td></tr>';\r
+ }\r
+ return $res;\r
+ }\r
+\r
+ public static function listeContacts($entreprise_id)\r
+ {\r
+ global $core;\r
+ extranetDroits::min(1);\r
+ $dao = new extranetDAOEntreprise($core->con);\r
+ $contacts = $dao->getContacts($entreprise_id);\r
+\r
+ $res = '<table class="liste light">';\r
+ $res .= '<tr class="light"><th colspan="4"><a href="" class="popup" rel="formContact/new/' . $entreprise_id . '">' . $core->typo->Contact('Ajouter un contact') . '</a></th></tr>';\r
+ $i = 0;\r
+ foreach($contacts as $contact) {\r
+ $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+ $res .= '<tr' . $odd . '><td>' . trim($contact->prenom . ' ' . $contact->nom) . '</td>';\r
+ $res .= '<td><a href="mailto:' . trim($contact->prenom . ' ' . $contact->nom) . '<' . $contact->email . '>">' . $contact->email . '</a></td>';\r
+ $res .= '<td class="min"><a href="' . SITE_PATH . 'fichiers/' . $contact->utilisateur_id . '">FTP</a></td>';\r
+ $res .= '<td class="right"><a href="#" rel="formContact/' . $contact->utilisateur_id . '" class="popup">' . cubeMedia::image(IMG . '/edit.png') . '</a></td></tr>';\r
+ $i++;\r
+ }\r
+ $res .= '</table>';\r
+ return $res;\r
+ }\r
+\r
+ public static function formContact($client_id = 'new', $entreprise_id = null)\r
+ {\r
+ global $core;\r
+ extranetDroits::min(1);\r
+\r
+ $dao = new extranetDAOClient($core->con);\r
+ if ($client_id == 'new') {\r
+ $client = $dao->creeFromEntreprise($entreprise_id);\r
+ } else {\r
+ $client = $dao->selectById($client_id);\r
+ }\r
+\r
+ $res = '<tr><td>' . __('Numéro de client') . '</td><td>' . form::hidden('grade', 0) . form::hidden('entreprise', $client->entreprise) . form::hidden('utilisateur_id', $client->utilisateur_id) . '' . $client->utilisateur_id . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Adresse e-mail') . '</td><td>' . form::field('email', 30, 128, $client->email) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Mot de passe') . '</td><td>' . form::field('password', 30, 128, $client->password) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Prénom du contact') . '</td><td>' . form::field('prenom', 30, 128, $client->prenom) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Nom du contact') . '</td><td>' . form::field('nom', 30, 128, $client->nom) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Adresse') . '</td><td>' . form::textarea('adresse', 40, 3, $client->adresse) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Code postal') . '</td><td>' . form::field('code_postal', 10, 20, $client->code_postal) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Ville') . '</td><td>' . form::field('ville', 30, 128, $client->ville) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Pays') . '</td><td>' . form::combo('pays', cubeCountry::getList(), $client->pays) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Téléphone') . '</td><td>' . form::field('telephone', 20, 128, $client->telephone) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Mobile') . '</td><td>' . form::field('mobile', 20, 128, $client->mobile) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Fax') . '</td><td>' . form::field('fax', 20, 128, $client->fax) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Langue') . '</td><td>' . form::combo('lang', cubeLang::getAvailableLangs(true), $client->lang) . '</td></tr>';\r
+ if ($client_id != 'new') {\r
+ $res .= '<tr><td colspan="2">' . cubeMedia::spacer(10, 10) . '</td></tr>';\r
+ $res .= '<tr><td></td><td><a href="' . SITE_PATH . 'fichiers/' . $client->utilisateur_id . '">' . __('FTP') . '</a></td></tr>';\r
+ $res .= '<tr><td>' . __("Paramètres de connexion au Fluidbook Workshop") . '</td><td>' . __('Adresse') . ' : http://' . $_SERVER['HTTP_HOST'] . '/<br />' . __("Nom d'utilisateur") . ' : ' . $client->email . '<br />' . __('Mot de passe') . ' : ' . $client->password . '</td></tr>';\r
+ $res .= '<tr><td colspan="2">' . cubeMedia::spacer(10, 10) . '</td></tr>';\r
+ }\r
+ return $res;\r
+ }\r
+\r
+ public static function formNotes($utilisateur_id)\r
+ {\r
+ global $core;\r
+ extranetDroits::min(1);\r
+ $dao = new extranetDAOUtilisateur($core->con);\r
+ $utilisateur = $dao->selectById($utilisateur_id);\r
+ $res = '<tr><td colspan="2">' . form::hidden('utilisateur_id', $utilisateur_id) . '</td></tr>';\r
+ $res .= '<tr><td colspan="2">' . form::textarea('notes', 100, 30, $utilisateur->notes) . '</td></tr>';\r
+ $res .= '<tr><td colspan="2"></td></tr>';\r
+ return $res;\r
+ }\r
}\r
\r
?>
\ No newline at end of file
public function refreshWSUsersTree()\r
{\r
$this->con->execute('TRUNCATE TABLE ws_users_tree');\r
- $this->con->execute('TRUNCATE TABLE ws_rights');\r
\r
$this->users = array();\r
$this->admins = array();\r
$this->grades = array();\r
$this->entreprises = array();\r
- $this->entreprises_tree = array();\r
\r
$this->rights = array();\r
\r
- $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
+ $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');\r
while ($r->fetch()) {\r
- $this->entreprises_tree[$r->entreprise_id] = $r->ws_admin;\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
}\r
\r
$this->facturables = $this->getFacturables();\r
-\r
-\r
// Fabrication de l'arbre\r
$c = $this->con->openCursor('ws_users_tree');\r
\r
$c->administrateur_id = $administrateur_id;\r
$c->insert();\r
}\r
+ // Fabrication de la liste des droits à partir de l'arbre\r
+ for($i = 1;$i <= 4;$i++) {\r
+ foreach($this->admins as $admin_id => $list) {\r
+ $newlist = array_merge(array(), $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] = $newlist;\r
+ }\r
+ }\r
+ // Ajout des droits personnels\r
+ foreach($this->users as $uid => $admin) {\r
+ $this->admins[$uid][] = $uid;\r
+ }\r
\r
- // Fabrication de la liste des droits\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
+ foreach($this->admins as $admin=>$list){\r
+ $this->admins[$admin]=array_unique($list);\r
+ sort($this->admins[$admin]);\r
+ }\r
+\r
+ $c = $this->con->openCursor('utilisateurs');\r
+ foreach($this->admins as $admin => $list) {\r
+ $c->ws_rights = implode(',', $list);\r
+ $c->update('WHERE utilisateur_id=\'' . $this->con->escape($admin) . '\'');\r
+ }\r
}\r
\r
protected function getFacturableOf($utilisateur_id, &$facturable_id, &$administrateur_id, $level)\r