]> _ Git - cubeextranet.git/commitdiff
(no commit message)
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Thu, 10 Feb 2011 10:43:03 +0000 (10:43 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Thu, 10 Feb 2011 10:43:03 +0000 (10:43 +0000)
19 files changed:
inc/commons/class.common.url.php
inc/extranet/Controlleur/_common.php
inc/extranet/Controlleur/class.extranet.ajax.php
inc/extranet/Controlleur/class.extranet.url.php
inc/extranet/Controlleur/url/_common.php [deleted file]
inc/extranet/Controlleur/url/class.extranet.url.client.php [deleted file]
inc/extranet/Controlleur/url/class.extranet.url.devis.php [deleted file]
inc/extranet/Controlleur/url/class.extranet.url.facture.php [deleted file]
inc/extranet/Controlleur/url/class.extranet.url.projet.php [deleted file]
inc/extranet/Controlleur/url/class.extranet.url.timereport.php [deleted file]
inc/ws/Controlleur/_common.php
inc/ws/Controlleur/class.ws.ajax.php
inc/ws/Controlleur/class.ws.url.php
inc/ws/Controlleur/url/_common.php [deleted file]
inc/ws/Controlleur/url/class.ws.url.book.php [deleted file]
inc/ws/Controlleur/url/class.ws.url.client.php [deleted file]
inc/ws/Controlleur/url/class.ws.url.demande.php [deleted file]
inc/ws/Controlleur/url/class.ws.url.traduction.php [deleted file]
inc/ws/DAO/class.ws.dao.demande.php

index 423b55ac7bd99a240add6dba85afeff6b2c08137..d4330f27ce24e3fe8872d19e76917e65810d4152 100644 (file)
@@ -3,8 +3,6 @@ class commonUrl {
        public static function hub($args)\r
        {\r
                global $core;\r
-               global $urlClasses;\r
-\r
                $args = cubePage::getArgs($args);\r
                // Si l'utilisateur n'est pas connecté, on affiche le formulaire\r
                // de login\r
@@ -30,22 +28,18 @@ class commonUrl {
 \r
                $f = $args[0];\r
 \r
-               echo commonPage::header($args);\r
-               echo self::execStaticMethod($f,$args);\r
-               echo commonPage::footer();\r
-       }\r
+               $classes = array(MODE . 'Url', 'commonUrl');\r
 \r
-       public static function execStaticMethod($method,$args)\r
-       {\r
-               global $urlClasses;\r
-               $classes = array_merge(array(MODE . 'Url', 'commonUrl'), array_keys($urlClasses));\r
+               echo commonPage::header($args);\r
 \r
                foreach($classes as $class) {\r
-                       $cb = array($class, $method);\r
+                       $cb = array($class, $f);\r
                        if (is_callable($cb)) {\r
-                               return call_user_func($cb, $args);\r
+                               echo call_user_func($cb, $args);\r
+                               break;\r
                        }\r
                }\r
+               echo commonPage::footer();\r
        }\r
 \r
        public static function login($args)\r
index b82118f0a946099a347b9b994fc038f235de1e8c..33ca1215282c5967952dc02380c135c7011e768f 100644 (file)
@@ -5,6 +5,4 @@ $__autoload['extranetUrl'] = dirname(__FILE__) . '/class.extranet.url.php';
 $__autoload['extranetDroits'] = dirname(__FILE__) . '/class.extranet.droits.php';\r
 $__autoload['extranetPageChiffres'] = dirname(__FILE__) . '/class.extranet.page.chiffres.php';\r
 \r
-include(dirname(__FILE__) . '/url/_common.php');\r
-\r
 ?>
\ No newline at end of file
index a8d2b2d03bd82aec129335592cf25f89ed9ec601..a663a748a0d3c8a919d8bc77cb498896af88c9dd 100644 (file)
@@ -7,11 +7,11 @@ class extranetAjax {
                if ($args[1] == 'new') {\r
                        $extra = '';\r
                } else {\r
-                       $extra = '<p><br /><br /><br /></p><div id="listeContacts">' . extranetUrlClient::listeContacts($args[1]) . '</div>';\r
+                       $extra = '<p><br /><br /><br /></p><div id="listeContacts">' . extranetUrl::listeContacts($args[1]) . '</div>';\r
                }\r
                $extra .= '<p class="right" style="margin-top:10px;margin-right:10px;"><br /><br /><a href="#" class="submit">' . $core->typo->BoutonOK(__('Enregistrer')) . '</a><br /><br /></p>';\r
 \r
-               commonAjax::form('saveClient', __("Edition d'un client"), extranetUrlClient::formClient($args[1]), false, 2, '', $extra);\r
+               commonAjax::form('saveClient', __("Edition d'un client"), extranetUrl::formClient($args[1]), false, 2, '', $extra);\r
        }\r
 \r
        public static function formContact($args, &$x)\r
@@ -19,13 +19,13 @@ class extranetAjax {
                if (!isset($args[2])) {\r
                        $args[2] = null;\r
                }\r
-               commonAjax::form('saveContact', __("Edition d'un contact"), extranetUrlClient::formContact($args[1], $args[2]));\r
+               commonAjax::form('saveContact', __("Edition d'un contact"), extranetUrl::formContact($args[1], $args[2]));\r
        }\r
 \r
        public static function formNotes($args, &$x)\r
        {\r
                global $core;\r
-               commonAjax::form('saveNotes', __('Edition des notes'), extranetUrlClient::formNotes($args[1]));\r
+               commonAjax::form('saveNotes', __('Edition des notes'), extranetUrl::formNotes($args[1]));\r
        }\r
 \r
        public static function saveClient($args, &$x)\r
@@ -53,7 +53,7 @@ class extranetAjax {
                        }\r
                }\r
 \r
-               $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+               $x->addContent('listeClients', extranetUrl::listeClients());\r
                $x->addClosePopup();\r
        }\r
 \r
@@ -71,9 +71,9 @@ class extranetAjax {
                $dao = new commonDAOClient($core->con);\r
                $client = $dao->sauve($_POST);\r
                $x->addClosePopup();\r
-               $x->addContent('devisAdresseDisplay', extranetUrlClient::adresse($client->utilisateur_id, null, 'devis'));\r
-               $x->addContent('factureAdresseDisplay', extranetUrlClient::adresse($client->utilisateur_id, null, 'facture'));\r
-               $x->addContent('listeContacts', extranetUrlClient::listeContacts($client->entreprise));\r
+               $x->addContent('devisAdresseDisplay', extranetUrl::adresse($client->utilisateur_id, null, 'devis'));\r
+               $x->addContent('factureAdresseDisplay', extranetUrl::adresse($client->utilisateur_id, null, 'facture'));\r
+               $x->addContent('listeContacts', extranetUrl::listeContacts($client->entreprise));\r
                $contacts = array();\r
                $client_contacts = $dao->getContactsOfEntreprise($client->entreprise);\r
                foreach($client_contacts as $c) {\r
@@ -90,18 +90,18 @@ class extranetAjax {
                $dao = new commonDAOEntreprise($core->con);\r
                $dao->supprime($args[1]);\r
 \r
-               $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+               $x->addContent('listeClients', extranetUrl::listeClients());\r
        }\r
 \r
        public static function searchClients($args, &$x)\r
        {\r
-               $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+               $x->addContent('listeClients', extranetUrl::listeClients());\r
        }\r
 \r
        public static function sortClient($args, &$x)\r
        {\r
                commonAjax::sort('clients', $args[1]);\r
-               $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+               $x->addContent('listeClients', extranetUrl::listeClients());\r
        }\r
        public static function sortEquipier($args, &$x)\r
        {\r
@@ -112,13 +112,13 @@ class extranetAjax {
        public static function pageClient($args, &$x)\r
        {\r
                commonAjax::page('clients', $args[1]);\r
-               $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+               $x->addContent('listeClients', extranetUrl::listeClients());\r
        }\r
 \r
        public static function parPageClient($args, &$x)\r
        {\r
                commonAjax::parPage('clients', $_POST['par_page']);\r
-               $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+               $x->addContent('listeClients', extranetUrl::listeClients());\r
        }\r
 \r
        public static function filtreClients($args, &$x)\r
@@ -129,7 +129,7 @@ class extranetAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('clients', $_POST);\r
-                       $x->addContent('listeClients', extranetUrlClient::listeClients());\r
+                       $x->addContent('listeClients', extranetUrl::listeClients());\r
                }\r
        }\r
 \r
@@ -138,7 +138,7 @@ class extranetAjax {
                global $core;\r
                $dao = new commonDAOEntreprise($core->con);\r
                $client = $dao->selectById($args[1]);\r
-               return commonAjax::form('', __("Détail du chiffre d'affaire de") . ' ' . $client->nom, extranetUrlClient::clientDetailCa($args[1]), false);\r
+               return commonAjax::form('', __("Détail du chiffre d'affaire de") . ' ' . $client->nom, extranetUrl::clientDetailCa($args[1]), false);\r
        }\r
 \r
        public static function clientDetailImpaye($args, &$x)\r
@@ -146,12 +146,12 @@ class extranetAjax {
                global $core;\r
                $dao = new commonDAOEntreprise($core->con);\r
                $client = $dao->selectById($args[1]);\r
-               return commonAjax::form('', __("Détail des impayés de") . ' ' . $client->nom, extranetUrlClient::clientDetailImpaye($args[1]), false, 4);\r
+               return commonAjax::form('', __("Détail des impayés de") . ' ' . $client->nom, extranetUrl::clientDetailImpaye($args[1]), false, 4);\r
        }\r
 \r
        public static function formProjet($args, &$x)\r
        {\r
-               commonAjax::form('saveProjet', __("Edition d'un projet"), extranetUrlProjet::formProjet($args[1]));\r
+               commonAjax::form('saveProjet', __("Edition d'un projet"), extranetUrl::formProjet($args[1]));\r
        }\r
 \r
        public static function saveProjet($args, &$x)\r
@@ -160,7 +160,7 @@ class extranetAjax {
                $dao = new extranetDAOProjet($core->con);\r
                $id = $dao->sauve($_POST);\r
 \r
-               $x->addContent('listeProjets', extranetUrlProjet::listeProjets());\r
+               $x->addContent('listeProjets', extranetUrl::listeProjets());\r
                $x->addRedirection(SITE_PATH . 'projet/' . $id);\r
        }\r
 \r
@@ -170,7 +170,7 @@ class extranetAjax {
                $dao = new extranetDAOProjet($core->con);\r
                $dao->changeStatus($args[1]);\r
 \r
-               $x->addContent('listeProjet', extranetUrlProjet::listeProjet($args[1]));\r
+               $x->addContent('listeProjet', extranetUrl::listeProjet($args[1]));\r
        }\r
 \r
        public static function changeProjetsStatus($args, &$x)\r
@@ -179,7 +179,7 @@ class extranetAjax {
                $dao = new extranetDAOProjet($core->con);\r
                $dao->changeStatus($args[1]);\r
 \r
-               $x->addContent('listeProjets', extranetUrlProjet::listeProjets($args[1]));\r
+               $x->addContent('listeProjets', extranetUrl::listeProjets($args[1]));\r
        }\r
 \r
        public static function supprimeProjet($args, &$x)\r
@@ -193,24 +193,24 @@ class extranetAjax {
 \r
        public static function searchProjets($args, &$x)\r
        {\r
-               $x->addContent('listeProjets', extranetUrlProjet::listeProjets());\r
+               $x->addContent('listeProjets', extranetUrl::listeProjets());\r
        }\r
 \r
        public static function pageProjet($args, &$x)\r
        {\r
                commonAjax::page('projets', $args[1]);\r
-               $x->addContent('listeProjets', extranetUrlProjet::listeProjets());\r
+               $x->addContent('listeProjets', extranetUrl::listeProjets());\r
        }\r
        public static function parPageProjet($args, &$x)\r
        {\r
                commonAjax::parPage('projets', $_POST['par_page']);\r
-               $x->addContent('listeProjets', extranetUrlProjet::listeProjets());\r
+               $x->addContent('listeProjets', extranetUrl::listeProjets());\r
        }\r
 \r
        public static function sortProjet($args, &$x)\r
        {\r
                commonAjax::sort('projets', $args[1]);\r
-               $x->addContent('listeProjets', extranetUrlProjet::listeProjets());\r
+               $x->addContent('listeProjets', extranetUrl::listeProjets());\r
        }\r
 \r
        public static function filtreProjet($args, &$x)\r
@@ -221,20 +221,20 @@ class extranetAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('projets', $_POST);\r
-                       $x->addContent('listeProjets', extranetUrlProjet::listeProjets());\r
+                       $x->addContent('listeProjets', extranetUrl::listeProjets());\r
                }\r
        }\r
 \r
        public static function formTacheNormale($args, &$x)\r
        {\r
                $projet = isset($args[2])?$args[2]:null;\r
-               commonAjax::form('saveTache', __("Edition d'un tâche"), extranetUrlProjet::formTacheNormale($args[1], $projet));\r
+               commonAjax::form('saveTache', __("Edition d'un tâche"), extranetUrl::formTacheNormale($args[1], $projet));\r
        }\r
 \r
        public static function formTacheSousTraitee($args, &$x)\r
        {\r
                $projet = isset($args[2])?$args[2]:null;\r
-               commonAjax::form('saveTache', __("Edition d'un tâche sous-traitée"), extranetUrlProjet::formTacheSousTraitee($args[1], $projet));\r
+               commonAjax::form('saveTache', __("Edition d'un tâche sous-traitée"), extranetUrl::formTacheSousTraitee($args[1], $projet));\r
        }\r
 \r
        public static function saveTache($args, &$x)\r
@@ -243,7 +243,7 @@ class extranetAjax {
                $dao = new extranetDAOTache($core->con);\r
                $dao->sauve($_POST);\r
 \r
-               $x->addContent('listeProjet', extranetUrlProjet::listeProjet($_POST['projet']));\r
+               $x->addContent('listeProjet', extranetUrl::listeProjet($_POST['projet']));\r
                $x->addClosePopup();\r
        }\r
 \r
@@ -254,7 +254,7 @@ class extranetAjax {
                $tache = $dao->selectById($args[1]);\r
 \r
                $dao->supprime($args[1]);\r
-               $x->addContent('listeProjet', extranetUrlProjet::listeProjet($tache->projet));\r
+               $x->addContent('listeProjet', extranetUrl::listeProjet($tache->projet));\r
        }\r
 \r
        public static function saveTimereport($args, &$x)\r
@@ -290,24 +290,24 @@ class extranetAjax {
        public static function sortTimereport($args, &$x)\r
        {\r
                commonAjax::sort('timereport', $args[1]);\r
-               $x->addContent('listeTimereport', extranetUrlTimereport::listeTimereport());\r
+               $x->addContent('listeTimereport', extranetUrl::listeTimereport());\r
        }\r
 \r
        public static function pageTimereport($args, &$x)\r
        {\r
                commonAjax::page('timereport', $args[1]);\r
-               $x->addContent('listeTimereport', extranetUrlTimereport::listeTimereport());\r
+               $x->addContent('listeTimereport', extranetUrl::listeTimereport());\r
        }\r
 \r
        public static function searchTimereport($args, &$x)\r
        {\r
-               $x->addContent('listeTimereport', extranetUrlTimereport::listeTimereport());\r
+               $x->addContent('listeTimereport', extranetUrl::listeTimereport());\r
        }\r
 \r
        public static function parPageTimereport($args, &$x)\r
        {\r
                commonAjax::parPage('timereport', $_POST['par_page']);\r
-               $x->addContent('listeTimereport', extranetUrlTimereport::listeTimereport());\r
+               $x->addContent('listeTimereport', extranetUrl::listeTimereport());\r
        }\r
 \r
        public static function filtreTimereport($args, &$x)\r
@@ -318,7 +318,7 @@ class extranetAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('timereport', $_POST);\r
-                       $x->addContent('listeTimereport', extranetUrlTimereport::listeTimereport());\r
+                       $x->addContent('listeTimereport', extranetUrl::listeTimereport());\r
                }\r
        }\r
 \r
@@ -333,7 +333,7 @@ class extranetAjax {
                        $projet_id = $daoProjet->createFromDevis($args[1], $core->user->utilisateur_id);\r
                        $x->addRedirection(SITE_PATH . 'projet/' . $projet_id);\r
                } else {\r
-                       $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+                       $x->addContent('listeDevis', extranetUrl::listeDevis());\r
                }\r
        }\r
 \r
@@ -344,30 +344,31 @@ class extranetAjax {
                $dao->supprime($args[1]);\r
                @unlink(ROOT . '/devis/' . $args[1] . '.pdf');\r
 \r
-               $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevis());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevis());\r
        }\r
 \r
        public static function searchDevis($args, &$x)\r
        {\r
-               $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevis());\r
        }\r
 \r
        public static function pageDevis($args, &$x)\r
        {\r
                commonAjax::page('devis', $args[1]);\r
-               $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevis());\r
        }\r
 \r
        public static function parPageDevis($args, &$x)\r
        {\r
                commonAjax::parPage('devis', $_POST['par_page']);\r
-               $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevis());\r
        }\r
 \r
        public static function sortDevis($args, &$x)\r
        {\r
                commonAjax::sort('devis', $args[1]);\r
-               $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevis());\r
        }\r
 \r
        public static function filtreDevis($args, &$x)\r
@@ -378,14 +379,14 @@ class extranetAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('devis', $_POST);\r
-                       $x->addContent('listeDevis', extranetUrlDevis::listeDevis());\r
+                       $x->addContent('listeDevis', extranetUrl::listeDevis());\r
                }\r
        }\r
 \r
        public static function sortDevisClient($args, &$x)\r
        {\r
                commonAjax::sort('devis', $args[1]);\r
-               $x->addContent('listeDevis', extranetUrlDevis::listeDevisClient());\r
+               $x->addContent('listeDevis', extranetUrl::listeDevisClient());\r
        }\r
 \r
        public static function expedieDevis($args, &$x)\r
@@ -429,12 +430,12 @@ class extranetAjax {
                $dao = new extranetDAOFacture($core->con);\r
                $dao->changeStatus($args[1], $args[2]);\r
 \r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function changeFacturePaiement($args, &$x)\r
        {\r
-               return commonAjax::form('saveFacturePaiement', __('Informations relatives au paiement de la facture'), extranetUrlFacture::formFacturePaiement($args[1]));\r
+               return commonAjax::form('saveFacturePaiement', __('Informations relatives au paiement de la facture'), extranetUrl::formFacturePaiement($args[1]));\r
        }\r
 \r
        public static function saveFacturePaiement($args, &$x)\r
@@ -443,7 +444,7 @@ class extranetAjax {
                $dao = new extranetDAOFacture($core->con);\r
                $dao->savePaiement($_POST);\r
                $x->addClosePopup();\r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function supprimeFacture($args, &$x)\r
@@ -453,7 +454,7 @@ class extranetAjax {
                $dao->supprime($args[1]);\r
                @unlink(ROOT . '/facture/' . $args[1] . '.pdf');\r
 \r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function valideFacture($args, &$x)\r
@@ -467,25 +468,25 @@ class extranetAjax {
 \r
        public static function searchFactures($args, &$x)\r
        {\r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function pageFacture($args, &$x)\r
        {\r
                commonAjax::page('factures', $args[1]);\r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function parPageFacture($args, &$x)\r
        {\r
                commonAjax::parPage('factures', $_POST['par_page']);\r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function sortFacture($args, &$x)\r
        {\r
                commonAjax::sort('factures', $args[1]);\r
-               $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+               $x->addContent('listeFactures', extranetUrl::listeFactures());\r
        }\r
 \r
        public static function filtreFactures($args, &$x)\r
@@ -496,7 +497,7 @@ class extranetAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('factures', $_POST);\r
-                       $x->addContent('listeFactures', extranetUrlFacture::listeFactures());\r
+                       $x->addContent('listeFactures', extranetUrl::listeFactures());\r
                }\r
        }\r
 \r
@@ -521,7 +522,7 @@ class extranetAjax {
 \r
        public static function formPrintFactures($args, &$x)\r
        {\r
-               commonAjax::form('printFactures', __('Imprimer des factures'), extranetUrlFacture::formPrintFactures(), __("Lancer l'impression"));\r
+               commonAjax::form('printFactures', __('Imprimer des factures'), extranetUrl::formPrintFactures(), __("Lancer l'impression"));\r
        }\r
 \r
        public static function printFactures($args, &$x)\r
index 49d9eddb86ce5b704ccd0bcd6ef8bc5f2e1b3525..be5941cf77c8d2c91f006510b15a1ea2b1d24a81 100644 (file)
 <?php\r
 class extranetUrl {\r
+       public static function clients($args)\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+               cubePage::autoComplete();\r
+               cubePage::emptyfield();\r
+               commonDroits::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 commonFiltre(__('Ayant un projet'), 'status_client_projet', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Ayant des impayés'), 'impaye', $settings['filtres']);\r
+               $res = commonPage::barre($filtres, 'filtreClients', 'clients', $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeClients">';\r
+               $res .= self::listeClients();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeClients($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $settings = is_null($settings)?$core->user->getSettings('clients'):$settings;\r
+               $change = is_null($dashboard)?'Client':'Dashboard/' . $dashboard;\r
+               $dao = new commonDAOEntreprise($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>' . commonUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Raison sociale'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . __('Contacts') . '</th>';\r
+               $res .= '<th>' . __('Notes') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby('<abbr title="' . __("Chiffre d'affaire") . '">CA</abbr>', 'ca', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby('Impayés', 'impaye', $settings, 'sort' . $change) . '</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="action center"><a href="#" class="popup" rel="formNotes/' . $client->entreprise_id . '">' . cubeMedia::image(IMG . '/postit.png') . '</a></td>';\r
+                       $res .= '<td class="nowrap">';\r
+                       if ($client->ca) {\r
+                               $res .= '<a href="#" class="popup" rel="clientDetailCa/' . $client->entreprise_id . '" title="' . __("Voir le détail du chiffre d'affaire") . '">' . number_format($client->ca, 0, ',', ' ') . '</a>';\r
+                       }\r
+\r
+                       $res .= '</td>';\r
+                       if ($client->impaye) {\r
+                               $res .= '<td class="nowrap"><a href="#" class="popup" rel="clientDetailImpaye/' . $client->entreprise_id . '">' . number_format($client->impaye, 0, '.', ' ') . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\r
+\r
+                       $res .= '<td class="action"><a href="#" class="popup" rel="formClient/' . $client->entreprise_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                       if (is_null($client->ca)) {\r
+                               $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeClient/' . $client->entreprise_id . '" title="' . __('Êtes vous certain de vouloir supprimer ce client ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\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 .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients'));\r
+                       $res .= '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function clientDetailCa($entreprise_id)\r
+       {\r
+               global $core;\r
+               $dao = new commonDAOEntreprise($core->con);\r
+               $annees = $dao->getCaDetails($entreprise_id);\r
+               $res = '';\r
+               $i = 0;\r
+               foreach($annees as $annee => $ca) {\r
+                       $class = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $class . '><td><strong>' . $annee . '</strong></td><td>' . number_format($ca, 0, ',', ' ') . ' €</td></tr>';\r
+                       $i++;\r
+               }\r
+               return $res;\r
+       }\r
+\r
+       public static function clientDetailImpaye($entreprise_id)\r
+       {\r
+               global $core;\r
+               $dao = new extranetDAOFacture($core->con);\r
+               $daoClient = new commonDAOEntreprise($core->con);\r
+               $factures = $dao->getImpayesOfClient($entreprise_id);\r
+               $client = $daoClient->selectById($entreprise_id);\r
+               $res = '';\r
+               $i = 0;\r
+               foreach($factures as $facture) {\r
+                       $class = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $class . '>';\r
+                       $res .= '<td>' . $facture->facture_id . '</td>';\r
+                       $res .= '<td>';\r
+                       if ($facture->facture_id > 0) {\r
+                               $res .= '<a href="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" class="popupA4">' . $facture->nom . '</a>';\r
+                       } else {\r
+                               $res .= $facture->nom ;\r
+                       }\r
+                       $res .= '</td>';\r
+                       $tva = cubeTaxes::tva($client->pays);\r
+                       $res .= '<td>' . number_format($facture->total_ht, 0, ',', '') . ' €';\r
+                       if ($tva > 0 && $tva != 'UE') {\r
+                               $res .= ' HT </td><td> ' . number_format(cubePrices::HTtoTTC($facture->total_ht, $tva), 2, ',', '') . ' € TTC';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\r
+                       $res .= '</td></tr>';\r
+                       $i++;\r
+               }\r
+               return $res;\r
+       }\r
+\r
+       public static function formClient($entreprise_id = 'new')\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $dao = new commonDAOEntreprise($core->con);\r
+               $daoUtilisateur = new commonDAOUtilisateur($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 commonDAOClient($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
+               commonDroits::min(1);\r
+               $dao = new commonDAOEntreprise($core->con);\r
+               $contacts = $dao->getContacts($entreprise_id);\r
+\r
+               $res = '<table class="liste light">';\r
+               $res .= '<tr class="light"><th colspan="5"><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><a class="ajax" href="#" rel="connectAs/' . $contact->utilisateur_id . '">Se connecter comme ...</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
+               commonDroits::min(1);\r
+\r
+               $dao = new commonDAOClient($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></td><td><a class="ajax" href="#" rel="connectAs/' . $client->utilisateur_id . '">' . __('Se connecter comme ...') . '</a></td></tr>';\r
+                       $res .= '<tr><td>' . __("Paramètres de connexion à l'extranet") . '</td><td>' . __('Adresse') . ' : http://extranet.cubedesigners.com/<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
+                       // $res .= '<tr><td>' . __("Paramètres de connexion au FTP") . '</td><td>' . __('Serveur FTP') . ' : extranet.cubedesigners.com (ftp://extranet.cubedesigners.com)<br />' . __("Nom d'utilisateur") . ' : ' . $client->email . '<br />' . __('Mot de passe') . ' : ' . $client->password . '</td></tr>';\r
+               }\r
+               return $res;\r
+       }\r
+\r
+       public static function formNotes($utilisateur_id)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $dao = new commonDAOUtilisateur($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
+       public static function projets($args)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+\r
+               $settings = $core->user->getSettings('projets');\r
+\r
+               $shortcuts = array();\r
+               $shortcuts[] = '<a href="#" class="popup" rel="formProjet/new">' . $core->typo->Ajouter('Créer un projet') . '</a>';\r
+\r
+               $filtres = array();\r
+               $filtres[] = new commonFiltre(__('Crée par'), 'equipier', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Status'), 'status_projet', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Année'), 'annee', $settings['filtres']);\r
+\r
+               $res = commonPage::barre($filtres, 'filtreProjet', 'projets', $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeProjets">';\r
+               $res .= self::listeProjets();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeProjets($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $settings = is_null($settings)?$core->user->getSettings('projets'):$settings;\r
+               $change = is_null($dashboard)?'Projet':'Dashboard/' . $dashboard;\r
+\r
+               $res = '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Année'), 'annee_fin', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Chef'), 'chef', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Facturé'), 'rapport_facturation', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Payé'), 'rapport_paiement', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby('<abbr title="' . __('Budget') . '">B</abbr>', 'budget', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby('<abbr title="' . __('Progression') . '">Pr</abbr>', 'progression', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="min"></th></tr>';\r
+\r
+               $dao = new extranetDAOProjet($core->con);\r
+               $dao->setFiltres($settings['filtres']);\r
+               if (isset($settings['search']) && !is_null($settings['search'])) {\r
+                       $dao->setSearch($settings['search']);\r
+               }\r
+               $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
+\r
+               $i = 0;\r
+               foreach($liste as $projet) {\r
+                       $droits = extranetDroits::projet($projet, false);\r
+\r
+                       $projet->progression = !$projet->progression?'-':$projet->progression . '%';\r
+                       $projet->jours_prevus = !$projet->jours_prevus?'-':$projet->jours_prevus;\r
+                       $projet->jours_consommes = !$projet->jours_consommes?'-':$projet->jours_consommes;\r
+\r
+                       $projet->budget = !$projet->budget || !$droits?'-':$projet->budget;\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $projet->projet_id . '</td>';\r
+                       $res .= '<td>' . $projet->nom . '</td>';\r
+                       $res .= '<td>' . $projet->client . '</td>';\r
+                       $res .= '<td>' . $projet->annee_fin . '</td>';\r
+                       $res .= '<td>' . $projet->chef . '</td>';\r
+                       if ($droits) {\r
+                               $res .= '<td><a href="#" class="ajax" rel="changeProjetsStatus/' . $projet->projet_id . '" title="' . __('Modifier le status du projet') . '">' . $core->projets_status[$projet->status] . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td>' . $core->projets_status[$projet->status] . '</td>';\r
+                       }\r
+\r
+                       $rf = $projet->rapport_facturation;\r
+                       if ($projet->budget == '-') {\r
+                               $rapport_facturation = '-';\r
+                       } elseif (!$rf) {\r
+                               $rapport_facturation = __('Non');\r
+                       } elseif ($rf == 1) {\r
+                               $rapport_facturation = __('Oui');\r
+                       } elseif ($rf < 1) {\r
+                               $rapport_facturation = __('Partie');\r
+                       } elseif ($rf > 1) {\r
+                               $rapport_facturation = __('Trop');\r
+                       }\r
+\r
+                       $rp = $projet->rapport_paiement;\r
+                       if ($projet->budget == '-') {\r
+                               $rapport_paiement = '-';\r
+                       } elseif (!$rp) {\r
+                               $rapport_paiement = __('Non') ;\r
+                       } elseif ($rp == 1) {\r
+                               $rapport_paiement = __('Oui');\r
+                       } elseif ($rp < 1) {\r
+                               $rapport_paiement = __('Partie');\r
+                       } elseif ($rp > 1) {\r
+                               $rapport_paiement = __('Trop');\r
+                       }\r
+\r
+                       $res .= '<td>';\r
+                       if ($projet->status == 1 && !$rf) {\r
+                               $res .= '<a href="' . SITE_PATH . 'editefacture/new/' . $projet->projet_id . '" title="' . __('Créer la facture pour ce projet') . '">' . $rapport_facturation . '</a>';\r
+                       } else {\r
+                               $res .= $rapport_facturation;\r
+                       }\r
+                       $res .= '</td>';\r
+                       $res .= '<td>' . $rapport_paiement . '</td>';\r
+\r
+                       $res .= '<td>' . $projet->budget . '</td>';\r
+                       // $res .= '<td>' . $projet->jours_prevus . '</td>';\r
+                       // $res .= '<td>' . $projet->jours_consommes . '</td>';\r
+                       $res .= '<td>' . $projet->progression . '</td>';\r
+                       $res .= '<td><a href="' . SITE_PATH . 'projet/' . $projet->projet_id . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
+\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="11">';\r
+                       $res .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets'));\r
+                       $res .= '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function projet($args)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+\r
+               $shortcuts = array();\r
+               $shortcuts[] = '<a href="#" class="popup" rel="formTacheNormale/new/' . $args[1] . '">' . $core->typo->Ajouter('Créer une tâche') . '</a>';\r
+               $shortcuts[] = '<a href="#" class="popup" rel="formTacheSousTraitee/new/' . $args[1] . '">' . $core->typo->Ajouter('Créer une tâche sous-traitée') . '</a>';\r
+\r
+               $res = commonPage::barre(null, null, null, $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeProjet">';\r
+               $res .= self::listeProjet($args[1]);\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeProjet($projet_id)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+\r
+               $res = '<table class="liste">';\r
+               $res .= '<tr><th>#</th>';\r
+               $res .= '<th><strong>' . __('Projet') . '</strong> / ' . __('Tâche') . '</th>';\r
+               $res .= '<th><strong>' . __('Client') . '</strong> / ' . __('Catégorie') . '</th>';\r
+               $res .= '<th>' . __('Année') . '</th>';\r
+               $res .= '<th>' . __('Chef de projet') . '</th>';\r
+               $res .= '<th>' . __('Status') . '</th>';\r
+               $res .= '<th><abbr title="' . __('Budget') . '">B</abbr></th>';\r
+               $res .= '<th><abbr title="' . __('Jours prévus') . '">Pl</abbr></th>';\r
+               $res .= '<th><abbr title="' . __('Jours consommés') . '">Co</abbr></th>';\r
+               $res .= '<th><abbr title="' . __('Progression') . '">Pr</abbr></th>';\r
+               $res .= '<th class="min"></th><th class="min"></th></tr>';\r
+\r
+               $dao = new extranetDAOProjet($core->con);\r
+               $projet = $dao->selectById($projet_id);\r
+\r
+               $hasFacture = $dao->hasFacture($projet_id);\r
+\r
+               $droits = extranetDroits::projet($projet, false);\r
+\r
+               $projet->progression = !$projet->progression?'-':$projet->progression . '%';\r
+               $projet->jours_prevus = !$projet->jours_prevus?'-':$projet->jours_prevus;\r
+               $projet->jours_consommes = !$projet->jours_consommes?'-':$projet->jours_consommes;\r
+\r
+               $projet->budget = !$projet->budget || !$droits?'-':$projet->budget;\r
+\r
+               $res .= '<tr class="bold">';\r
+               $res .= '<td>' . $projet->projet_id . '</td>';\r
+               $res .= '<td>' . $projet->nom . '</td>';\r
+               $res .= '<td>' . $projet->client . '</td>';\r
+               $res .= '<td>' . $projet->annee_fin . '</td>';\r
+               $res .= '<td>' . $projet->chef . '</td>';\r
+               if ($droits) {\r
+                       $res .= '<td><a href="#" class="ajax" rel="changeProjetStatus/' . $projet->projet_id . '" title="' . __('Modifier le status du projet') . '">' . $core->projets_status[$projet->status] . '</a></td>';\r
+               } else {\r
+                       $res .= '<td>' . $core->projets_status[$projet->status] . '</td>';\r
+               }\r
+               $res .= '<td>' . $projet->budget . '</td>';\r
+               $res .= '<td>' . $projet->jours_prevus . '</td>';\r
+               $res .= '<td>' . $projet->jours_consommes . '</td>';\r
+               $res .= '<td>' . $projet->progression . '</td>';\r
+               if ($droits) {\r
+                       $res .= '<td class="action"><a href="#" class="popup" rel="formProjet/' . $projet->projet_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                       if (!count($projet->taches) && !$hasFacture) {\r
+                               $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeProjet/' . $projet->projet_id . '" title="' . __('Êtes vous certain de vouloir supprimer ce projet ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\r
+               } else {\r
+                       $res .= '<td></td><td></td>';\r
+               }\r
+               $res .= '</tr>';\r
+               $i = 1;\r
+               foreach($projet->taches as $tache) {\r
+                       $tache->budget = !$tache->budget || !$droits?'-':$tache->budget;\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>T' . $i . '</td>';\r
+                       $res .= '<td>' . $tache->nom . '</td>';\r
+                       $res .= '<td>' . $core->categories[$tache->categorie] . '</td>';\r
+                       $res .= '<td></td>';\r
+                       $res .= '<td></td>';\r
+                       $res .= '<td></td>';\r
+                       $res .= '<td>' . $tache->budget . '</td>';\r
+\r
+                       if ($tache instanceof extranetTacheNormale) {\r
+                               $progression = !$tache->progression?'-':$tache->progression . '%';\r
+                               $jours_prevus = !$tache->jours_prevus?'-':$tache->jours_prevus;\r
+                               $jours_consommes = !$tache->jours_consommes?'-':$tache->jours_consommes;\r
+                               $res .= '<td>' . $jours_prevus . '</td>';\r
+                               $res .= '<td>' . $jours_consommes . '</td>';\r
+                               $res .= '<td>' . $progression . '</td>';\r
+                               if ($droits) {\r
+                                       $res .= '<td class="action"><a href="#" class="popup" rel="formTacheNormale/' . $tache->tache_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td></td>';\r
+                               }\r
+                       } else {\r
+                               $res .= '<td colspan="3">' . __('Tâche sous-traitée') . '</td>';\r
+                               if ($droits) {\r
+                                       $res .= '<td class="action"><a href="#" class="popup" rel="formTacheSousTraitee/' . $tache->tache_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td></td>';\r
+                               }\r
+                       }\r
+\r
+                       $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeTache/' . $tache->tache_id . '" title="' . __('Supprimer cette tâche va également supprimer les timereports associés. Êtes vous certain de vouloir supprimer cette tâche ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+\r
+                       $res .= '</tr>';\r
+                       $i++;\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function formProjet($projet_id = 'new')\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+\r
+               $dao = new extranetDAOProjet($core->con);\r
+               if ($projet_id == 'new') {\r
+                       $projet = $dao->cree($core->user->utilisateur_id);\r
+               } else {\r
+                       $projet = $dao->selectById($projet_id);\r
+               }\r
+\r
+               $daoClient = new commonDAOClient($core->con);\r
+               $clients = $daoClient->getListe();\r
+\r
+               $listeClients = array();\r
+               foreach($clients as $client) {\r
+                       $listeClients[$client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'] = $client->utilisateur_id;\r
+               }\r
+               ksort($listeClients);\r
+\r
+               $daoEquipier = new commonDAOEquipier($core->con);\r
+               $equipiers = $daoEquipier->getListe();\r
+\r
+               $listeEquipiers = array();\r
+               foreach($equipiers as $equipier) {\r
+                       $listeEquipiers[$equipier->prenom . ' ' . $equipier->nom . ' (' . $equipier->agence . ')'] = $equipier->utilisateur_id;\r
+               }\r
+\r
+               $daoDevis = new extranetDAODevis($core->con);\r
+               $devis = $daoDevis->getListeValidesLibres($projet_id);\r
+               $listeDevis = array('--' => 0);\r
+               foreach($devis as $id => $dev) {\r
+                       $listeDevis[$dev->nom] = $dev->devis_id;\r
+               }\r
+\r
+               $res = '<tr><td>' . __('Numéro de projet') . '</td><td>' . form::hidden('projet_id', $projet->projet_id) . '' . $projet->projet_id . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Nom du projet') . '</td><td>' . form::textarea('nom', 50, 3, html::escapeHTML($projet->nom)) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Chef de projet') . '</td><td>';\r
+               if ($core->user->grade > 1) {\r
+                       $res .= form::combo('chef', $listeEquipiers, $projet->chef_id);\r
+               } else {\r
+                       $res .= form::hidden('chef', $projet->chef_id) . ' ' . $projet->chef;\r
+               }\r
+               $res .= '</td></tr>';\r
+               $res .= '<tr><td>' . __('Date de début') . '</td><td>' . cubeForm::dateFree('date_debut', $projet->date_debut) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Deadline') . '</td><td>' . cubeForm::dateFree('deadline', $projet->deadline) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Date de fin') . '</td><td>' . cubeForm::dateFree('date_fin', $projet->date_fin) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Client') . '</td><td>' . form::combo('client', $listeClients, $projet->client_id) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Devis') . '</td><td>' . form::combo('devis', $listeDevis, $projet->devis) . '</td></tr>';\r
+               return $res;\r
+       }\r
+\r
+       public static function formTache($tache)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+\r
+               $res = '<tr><td>' . __('Numéro de tâche') . '</td><td>' . form::hidden('projet', $tache->projet) . form::hidden('tache_id', $tache->tache_id) . '' . $tache->tache_id . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Catégorie') . '</td><td>' . form::combo('categorie', array_flip($core->categories), $tache->categorie) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Nom') . '</td><td>' . form::textarea('nom', 50, 3, html::escapeHTML($tache->nom)) . '</td></tr>';\r
+\r
+               return $res;\r
+       }\r
+\r
+       public static function formTacheNormale($tache_id, $projet_id = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $dao = new extranetDAOTache($core->con);\r
+               if ($tache_id == 'new') {\r
+                       $tache = $dao->creeNormale();\r
+                       $tache->projet = $projet_id;\r
+               } else {\r
+                       $tache = $dao->selectById($tache_id);\r
+               }\r
+               $res = self::formTache($tache);\r
+               $res .= '<tr><td>' . __('Taux journalier') . '</td><td>' . form::field('taux_journalier', 6, 6, $tache->taux_journalier) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Budget') . '</td><td>' . form::hidden('type', '0') . form::field('budget', 6, 6, $tache->budget) . '</td></tr>';\r
+               return $res;\r
+       }\r
+\r
+       public static function formTacheSousTraitee($tache_id, $projet_id = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $dao = new extranetDAOTache($core->con);\r
+               if ($tache_id == 'new') {\r
+                       $tache = $dao->creeSousTraitee();\r
+                       $tache->projet = $projet_id;\r
+               } else {\r
+                       $tache = $dao->selectById($tache_id);\r
+               }\r
+               $res = self::formTache($tache);\r
+               $res .= '<tr><td>' . __('Budget') . '</td><td>' . form::hidden('type', '1') . form::field('budget', 6, 6, $tache->budget) . '</td></tr>';\r
+               return $res;\r
+       }\r
+\r
+       public static function timereport($args)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $settings = $core->user->getSettings('timereport');\r
+               $filtres = array();\r
+               $filtres[] = new commonFiltre(__('Participants'), 'equipier_participe', $settings['filtres']);\r
+               $res = commonPage::barre($filtres, 'filtreTimereport', 'timereport', null);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeTimereport">';\r
+               $res .= self::listeTimereport();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeTimereport($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               // Récupère la liste des projets\r
+               $settings = is_null($settings)?$core->user->getSettings('timereport'):$settings;\r
+               $change = is_null($dashboard)?'Timereport':'Dashboard/' . $dashboard;\r
+\r
+               $dao = new extranetDAOProjet($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->getProjetsForTimereport($settings['orderby'], $settings['sens'], $settings['limit'], $core->user->utilisateur_id);\r
+               // Extrait la liste des tâches\r
+               $taches = array();\r
+               foreach($liste as $id => $projet) {\r
+                       foreach($projet->taches as $tache) {\r
+                               if ($tache instanceof extranetTacheNormale) {\r
+                                       $taches[] = $tache->tache_id;\r
+                               }\r
+                       }\r
+               }\r
+               // Fixe les limites des jours à afficher\r
+               $time = cubeDate::round(null, 'd'); // aujourd'hui\r
+               $avant = $time - (3600 * 24 * 15); // 15 jours avant\r
+               $apres = $time; // aujourd'hui\r
+               // Récupère la liste des timereports à afficher\r
+               $daoTimereport = new extranetDAOTimereport($core->con);\r
+               $timereports = $daoTimereport->getListe($taches, $core->user->utilisateur_id, array('start' => $avant, 'end' => $apres));\r
+               // Affiche le tableau\r
+               $res = '<table class="liste listeTimereport">';\r
+               $res .= '<tr><th class="normal">' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="normal">' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="normal">' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
+               for($date = $avant;$date <= $apres;$date += 3600 * 24) {\r
+                       $res .= '<th>' . date('d', $date) . '' . cubeMedia::spacer(16, 1, '', 'spacer') . '</th>';\r
+               }\r
+               $res .= '<th class="normal info">' . commonUrl::orderby('<abbr title="' . __('Progression') . '">Pr</abbr>', 'progression', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="normal info">' . commonUrl::orderby('<abbr title="' . __('Jours consommés') . '">Co</abbr>', 'jours_consommes', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="normal info">' . commonUrl::orderby('<abbr title="' . __('Jours prévus') . '">Pl</abbr>', 'jours_prevus', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '</tr>';\r
+\r
+               foreach($liste as $projet) {\r
+                       $res .= '<tr class="bold">';\r
+                       $res .= '<td class="normal">' . $projet->projet_id . '</td>';\r
+                       $res .= '<td class="normal">' . $projet->nom . '</td>';\r
+                       $res .= '<td class="normal">' . $projet->client . '</td>';\r
+                       for($date = $avant;$date <= $apres;$date += 3600 * 24) {\r
+                               $cc = self::getClassOfDay($date);\r
+                               $class = ($cc == '')?'':' class="' . $cc . '"';\r
+                               $res .= '<td' . $class . '></td>';\r
+                       }\r
+                       $projet->progression = !$projet->progression?'-':$projet->progression . '%';\r
+                       $projet->jours_prevus = !$projet->jours_prevus?'-':$projet->jours_prevus;\r
+                       $projet->jours_consommes = !$projet->jours_consommes?'-':$projet->jours_consommes;\r
+                       $res .= '<td class="normal info"><span id="progress_projet_' . $projet->projet_id . '">' . $projet->progression . '</span></td>';\r
+                       $res .= '<td class="normal info"><span id="consommees_projet_' . $projet->projet_id . '">' . $projet->jours_consommes . '</span></td>';\r
+                       $res .= '<td class="normal info">' . $projet->jours_prevus . '</td>';\r
+                       $res .= '</tr>';\r
+                       $i = 1;\r
+                       foreach($projet->taches as $tache) {\r
+                               if ($tache instanceof extranetTacheNormale) {\r
+                                       $res .= '<tr class="odd">';\r
+                                       $res .= '<td class="normal">T' . $i . '</td>';\r
+                                       $res .= '<td class="normal">' . $tache->nom . '</td>';\r
+                                       $res .= '<td class="normal">' . $core->categories[$tache->categorie] . '</td>';\r
+                                       for($date = $avant;$date <= $apres;$date += (3600 * 24)) {\r
+                                               $hh = isset($timereports[$tache->tache_id][$date])?$timereports[$tache->tache_id][$date]->heures:'';\r
+                                               $c = ($hh == '')?'':'filled';\r
+                                               $cc = trim(self::getClassOfDay($date) . ' ' . $c);\r
+                                               $class = ($cc == '')?'':' class="' . $cc . '"';\r
+                                               $res .= '<td' . $class . '>' . form::field(array('timereport', 't_' . $date . '_' . $tache->tache_id), 1, 2, $hh, 'timereport_field') . '</td>';\r
+                                       }\r
+                                       $tache->progression = !$tache->progression?'-':$tache->progression . '%';\r
+                                       $tache->jours_prevus = !$tache->jours_prevus?'-':$tache->jours_prevus;\r
+                                       $tache->jours_consommes = !$tache->jours_consommes?'-':$tache->jours_consommes;\r
+                                       $res .= '<td class="normal info"><span id="progress_' . $tache->tache_id . '">' . $tache->progression . '</span></td>';\r
+                                       $res .= '<td class="normal info"><span id="consommees_' . $tache->tache_id . '">' . $tache->jours_consommes . '</span></td>';\r
+                                       $res .= '<td class="normal info">' . $tache->jours_prevus . '</td>';\r
+                                       $res .= '</tr>';\r
+                                       $i++;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               if (!isset($settings['search']) || is_null($settings['search'])) {\r
+                       $res .= '<tr><td colspan="22"> ';\r
+                       $res .= commonPage::pager($settings['page'], $dao->countActifs(), $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets'));\r
+                       $res .= ' </td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function getClassOfDay($date)\r
+       {\r
+               $aujourdhui = cubeDate::round(null, 'd');\r
+               $highlight = ($date == $aujourdhui);\r
+               $we = (date('N', $date) >= 6);\r
+               if ($highlight) {\r
+                       return 'highlight';\r
+               }\r
+               if ($we) {\r
+                       return 'we';\r
+               }\r
+               return '';\r
+       }\r
+\r
+       public static function devis($args)\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+               cubePage::contextMenu();\r
+\r
+               if ($core->user->grade == 0) {\r
+                       return self::devis_client($args);\r
+               }\r
+               $settings = $core->user->getSettings('devis');\r
+               commonDroits::min(1);\r
+\r
+               $shortcuts = array();\r
+               $shortcuts[] = '<a href="' . SITE_PATH . 'editedevis/new">' . $core->typo->Ajouter('Créer un devis') . '</a>';\r
+\r
+               $filtres = array();\r
+               $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Status'), 'status_devis', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']);\r
+\r
+               $res = commonPage::barre($filtres, 'filtreDevis', 'devis' , $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeDevis">';\r
+               $res .= self::listeDevis();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function devis_client($args)\r
+       {\r
+               global $core;\r
+\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeDevis">';\r
+               $res .= self::listeDevis();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeDevis($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+\r
+               if ($core->user->grade == 0) {\r
+                       return self::listeDevisClient($dashboard, $settings);\r
+               } else {\r
+                       return self::listeDevisEquipier($dashboard, $settings);\r
+               }\r
+       }\r
+\r
+       public static function contextDevis($id)\r
+       {\r
+               global $core;\r
+               $res = '<div class="contextMenu" id="' . $id . '">';\r
+               $res .= '<ul>';\r
+               $res .= '<li class="head">' . __("Changer le status du devis") . '</li>';\r
+               foreach($core->devis_status as $k => $v) {\r
+                       if ($k == 0) {\r
+                               continue;\r
+                       }\r
+                       $res .= '<li><a href="#" rel="changeDevisStatus/$1/' . $k . '" class="ajax">' . $v . '</a></li>';\r
+                       if ($k == 2) {\r
+                               $res .= '<li><a href="#" rel="changeDevisStatus/$1/' . $k . '/createProjet" class="ajax">' . __('Valider puis créer le projet correspondant') . '</a></li>';\r
+                       }\r
+               }\r
+               $res .= '</ul></div>';\r
+               return $res;\r
+       }\r
+\r
+       public static function listeDevisEquipier($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $settings = is_null($settings)?$core->user->getSettings('devis'):$settings;\r
+               $change = is_null($dashboard)?'Devis':'Dashboard/' . $dashboard;\r
+               $context_id = is_null($dashboard)?'contextDevis':'contextDashboard_' . $dashboard;\r
+\r
+               $dao = new extranetDAODevis($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
+               $res = self::contextDevis($context_id);\r
+               $res .= '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'devis_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="min"></th><th class="min"></th><th class="min"></th></tr>';\r
+               $i = 0;\r
+               foreach($liste as $devis) {\r
+                       $droits = extranetDroits::devis($devis, 'w', false);\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $devis->devis_id . '</td>';\r
+                       $res .= '<td>' . $devis->nom . '</td>';\r
+                       $res .= '<td>' . $devis->client . '</td>';\r
+                       $res .= '<td>' . $devis->createur . '</td>';\r
+                       $res .= '<td>' . date(__('d/m/Y'), $devis->date_creation) . '</td>';\r
+                       $res .= '<td>' . $devis->total_ht . '</td>';\r
+\r
+                       if ($devis->status == 0) {\r
+                               $res .= '<td>' . $core->devis_status[$devis->status] . '</td>';\r
+                       } else {\r
+                               if ($droits) {\r
+                                       $res .= '<td><a href="#" class="openContextMenu" rel="' . $context_id . '" rev="' . $devis->devis_id . '">' . $core->devis_status[$devis->status] . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td>' . $core->devis_status[$devis->status] . '</td>';\r
+                               }\r
+                       }\r
+\r
+                       if (in_array($devis->status, array(0, 1)) && $droits) {\r
+                               $res .= '<td class="action"><a href="' . SITE_PATH . 'editedevis/' . $devis->devis_id . '" title="' . __('Editer le devis') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\r
+                       $res .= '<td><a href="' . SITE_PATH . 'voirdevis/' . $devis->devis_id . '" class="popupA4" title="' . __('Voir le devis') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
+                       if ($devis->status == 0) {\r
+                               if ($droits) {\r
+                                       $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeDevis/' . $devis->devis_id . '" title="' . __('Êtes vous certain de vouloir supprimer ce devis ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td></td>';\r
+                               }\r
+                       } elseif ($devis->status >= 1) {\r
+                               $res .= '<td><a href="#" class="ajax" rel="duplicateDevis/' . $devis->devis_id . '" title="' . __('Dupliquer le devis') . '">' . cubeMedia::image(IMG . '/duplicate.png') . '</a></td>';\r
+                       }\r
+\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 .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('devis'));\r
+                       $res .= '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function listeDevisClient($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+\r
+               $dao = new extranetDAODevis($core->con);\r
+               $settings = $core->user->getSettings('devis');\r
+               $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens']);\r
+               $res = '<table class="liste">';\r
+               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortDevis') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortDevis') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortDevis') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortDevis') . '</th>';\r
+               $res .= '<th class="min"></th></tr>';\r
+               $i = 0;\r
+               foreach($liste as $devis) {\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $devis->nom . '</td>';\r
+                       $res .= '<td>' . date(__('d/m/Y'), $devis->date_creation) . '</td>';\r
+                       $res .= '<td>' . $devis->total_ht . '</td>';\r
+                       $res .= '<td>' . $core->devis_status[$devis->status] . '</td>';\r
+                       $res .= '<td><a href="' . SITE_PATH . 'voirdevis/' . $devis->devis_id . '" class="popupA4" title="' . __('Voir le devis') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
+                       $res .= '</tr>';\r
+                       $i++;\r
+               }\r
+               if (!count($liste)) {\r
+                       $res .= '<tr><td colspan="6" class="center">' . __("Vous n'avez pour le moment aucun devis associé à votre compte") . '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function voirdevis($args)\r
+       {\r
+               global $core;\r
+               // Charge le devis\r
+               $dao = new extranetDAODevis($core->con);\r
+               $devis = $dao->selectById($args[1]);\r
+               // Vérification des droits en lecture de l'utilisateur\r
+               extranetDroits::devis($devis, 'r');\r
+\r
+               cubeHTTP::relayNoCache(ROOT . '/devis/' . $args[1] . '.pdf');\r
+       }\r
+\r
+       public static function editedevis($args)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= self::formDevis($args[1]);\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function formDevis($devis_id = 'new')\r
+       {\r
+               global $core;\r
+               cubePage::autocomplete();\r
+               cubePage::emptyField();\r
+               cubePage::ui('Sortable');\r
+               commonDroits::min(1);\r
+               $dao = new extranetDAODevis($core->con);\r
+               if ($devis_id == 'new') {\r
+                       $devis = $dao->cree();\r
+               } else {\r
+                       $devis = $dao->selectById($devis_id);\r
+               }\r
+\r
+               $res = '<div id="editeDevis">';\r
+               $res .= '<form action="previewDevis" method="post">';\r
+\r
+               $res .= '<div id="devisTop">';\r
+               // Adresse\r
+               $res .= '<div id="devisAdresse">';\r
+               if ($devis->devis_id == 'new') {\r
+                       $default = __('Entrez le nom du client');\r
+                       $default_id = '';\r
+                       $class = 'empty-field';\r
+               } else {\r
+                       $default = $devis->client;\r
+                       $default_id = $devis->client_id;\r
+                       $class = '';\r
+               }\r
+\r
+               $res .= form::field('client_nom', 40, 128, $default, $class);\r
+               $res .= form::hidden('client', $default_id);\r
+               $res .= '<div id="devisAdresseDisplay">';\r
+               if ($devis->client_id) {\r
+                       $res .= self::adresse($devis->client_id, null, 'devis', $devis->adresse);\r
+               }\r
+               $res .= '</div>';\r
+               $res .= '</div>';\r
+               // Titre\r
+               $res .= '<div id="devisTitre">';\r
+               $res .= form::hidden('devis_id', $devis->devis_id);\r
+               $res .= form::textarea('nom', 40, 4, $devis->nom);\r
+               $res .= '</div>';\r
+               $res .= '</div>';\r
+\r
+               $res .= '<div id="devisMiddle">';\r
+               $res .= '<div id="devisLignes">';\r
+               // Lignes du devis\r
+               $nb_lignes = max(4, count($devis->lignes) + 2);\r
+\r
+               for($i = 0;$i < $nb_lignes;$i++) {\r
+                       if (isset($devis->lignes[$i])) {\r
+                               $titre = $devis->lignes[$i]['titre'];\r
+                               $description = $devis->lignes[$i]['description'];\r
+                               $montant = $devis->lignes[$i]['montant'];\r
+                       } else {\r
+                               $titre = $description = $montant = '';\r
+                       }\r
+                       $res .= '<div class="devisLigne">';\r
+                       $res .= '<div class="devisLigneRight">';\r
+                       $res .= form::field(array('montant[]'), 6, 15, $montant) . " €";\r
+                       $res .= '</div>';\r
+                       $res .= '<div class="devisLigneLeft">';\r
+                       $res .= form::field(array('titre[]'), 105, 256, htmlspecialchars($titre, ENT_QUOTES)) . '<br /><br />';\r
+                       $res .= form::textarea(array('description[]'), 110, 4, $description);\r
+                       $res .= '</div>';\r
+\r
+                       $res .= '</div>';\r
+               }\r
+\r
+               $res .= '</div>';\r
+               $res .= '</div>';\r
+               $res .= '<div id="devisBottom">' . cubeMedia::spacer(10, 10) . '</div>';\r
+               $res .= '<div id="devisMail">';\r
+               $res .= '<table>';\r
+               $res .= '<tr><td>' . __('De') . '</td><td>' . $core->user->prenom . ' ' . $core->user->nom . ' &lt;' . $core->user->email . '&gt;</td></tr>';\r
+               $res .= '<tr><td>' . __('Sujet') . '</td><td>' . form::field(array('email[sujet]'), 80, 128, htmlspecialchars($devis->email['sujet'], ENT_QUOTES)) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Corps') . '</td><td>' . form::textarea(array('email[corps]'), 80, 20, $devis->email['corps']) . '</td></tr>';\r
+               $res .= '</table>';\r
+               $res .= '</div>';\r
+               $res .= '<div class="right"><a href="#" class="submit">' . $core->typo->BoutonOK('Enregistrer et prévisualiser') . '</a></div>';\r
+               $res .= '</form>';\r
+               $res .= '</div>';\r
+\r
+               return $res;\r
+       }\r
+\r
+       public static function previewDevis($args)\r
+       {\r
+               global $core;\r
+\r
+               $dao = new extranetDAODevis($core->con);\r
+               $devis = $dao->selectById($args[1]);\r
+\r
+               $daoUtilisateur = new commonDAOUtilisateur($core->con);\r
+               $createur = $devis->createur = $daoUtilisateur->selectById($devis->createur_id);\r
+               $client = $devis->client = $daoUtilisateur->selectById($devis->client_id);\r
+\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<iframe src="' . SITE_PATH . 'voirdevis/' . $devis->devis_id . '/?junk=' . TIME . '" width="960" height="1000" frameborder="0"></iframe>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="devis_email">';\r
+               $res .= '<table class="liste">';\r
+               $res .= '<tr><td>' . __('De') . '</td><td>' . $createur->prenom . ' ' . $createur->nom . '&lt;' . $createur->email . '&gt;</td></tr>';\r
+               $res .= '<tr class="odd"><td>' . __('A') . '</td><td>' . $client->prenom . ' ' . $client->nom . '&lt;' . $client->email . '&gt;</td></tr>';\r
+               $res .= '<tr><td>' . __('Sujet') . '</td><td>' . $devis->email['sujet'] . '</td></tr>';\r
+               $res .= '<tr class="odd"><td>' . __('Message') . '</td><td>' . nl2br($devis->email['corps'] . "\n\n" . $createur->getSignature()) . '</td></tr>';\r
+               $res .= '<tr><td colspan="2" class="right">';\r
+               $res .= cubeMedia::spacer(40, 40) . '<a href="' . SITE_PATH . 'editedevis/' . $devis->devis_id . '">' . $core->typo->BoutonOK(__('Editer le devis')) . '</a> ';\r
+               $res .= '<a href="#" rel="expedieDevis/0/' . $devis->devis_id . '" class="ajax" title="' . __("Le devis est sur le point d'être validé, mais l'email ne sera pas envoyé. Veuillez confirmer votre choix ?") . '">' . $core->typo->BoutonOK(__('Valider sans envoyer le devis')) . '</a> ';\r
+               $res .= '<a href="#" rel="expedieDevis/1/' . $devis->devis_id . '" class="ajax" title="' . __("Le devis est sur le point d'être envoyé. Veuillez confirmer votre choix ?") . '">' . $core->typo->BoutonOK(__('Valider et envoyer le devis')) . '</a></td></tr>';\r
+               $res .= '</table>';\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function factures($args)\r
+       {\r
+               global $core;\r
+\r
+               if ($core->user->grade == 0) {\r
+                       return self::factures_client($args);\r
+               }\r
+               $settings = $core->user->getSettings('factures');\r
+\r
+               commonDroits::min(1);\r
+               $shortcuts = array();\r
+               if ($core->user->grade != 3) {\r
+                       $shortcuts[] = '<a href="' . SITE_PATH . 'editefacture/new">' . $core->typo->Ajouter('Créer une facture') . '</a>';\r
+               }\r
+               $shortcuts[] = '<a href="#" rel="formPrintFactures" title="Imprimer les factures" class="popup">' . cubeMedia::image(IMG . '/print.png') . '</a>';\r
+               $filtres = array();\r
+               $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Status'), 'status_facture', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']);\r
+               $res = commonPage::barre($filtres , 'filtreFactures', 'factures', $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeFactures">';\r
+               $res .= self::listeFactures();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function factures_client($args)\r
+       {\r
+               global $core;\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeFactures">';\r
+               $res .= self::listeFactures();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function contextFacture($id)\r
+       {\r
+               global $core;\r
+               $res = '<div class="contextMenu" id="' . $id . '">';\r
+               $res .= '<ul>';\r
+               $res .= '<li class="head">' . __("Changer le status de la facture") . '</li>';\r
+               foreach($core->factures_status as $k => $v) {\r
+                       if (in_array($k, array(0, 4))) {\r
+                               continue;\r
+                       }\r
+                       if ($k == 2) {\r
+                               $res .= '<li><a href="#" rel="changeFacturePaiement/$1" class="popup">' . $v . '</a></li>';\r
+                       } else {\r
+                               if ($k == 3) {\r
+                                       $title = ' title="' . __("Êtes-vous certain de vouloir annuler cette facture ? Cette action est irreversible et provoquera la création d'un avoir correpondant.") . '"';\r
+                               } else {\r
+                                       $title = '';\r
+                               }\r
+                               $res .= '<li><a href="#" rel="changeFactureStatus/$1/' . $k . '" class="ajax"' . $title . '>' . $v . '</a></li>';\r
+                       }\r
+               }\r
+               $res .= '</ul></div>';\r
+               return $res;\r
+       }\r
+\r
+       public static function listeFactures($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               if ($core->user->grade == 0) {\r
+                       return self::listeFacturesClient($dashboard, $settings);\r
+               } else {\r
+                       return self::listeFacturesEquipier($dashboard, $settings);\r
+               }\r
+       }\r
+\r
+       public static function listeFacturesEquipier($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+               cubePage::contextMenu();\r
+\r
+               $settings = is_null($settings)?$core->user->getSettings('factures'):$settings;\r
+               $change = is_null($dashboard)?'Facture':'Dashboard/' . $dashboard;\r
+               $context_id = is_null($dashboard)?'contextFacture':'contextDashboard_' . $dashboard;\r
+               $dao = new extranetDAOFacture($core->con);\r
+               if (isset($settings['search']) && !is_null($settings['search'])) {\r
+                       $dao->setSearch($settings['search']);\r
+               } else {\r
+                       $dao->setFiltres($settings['filtres']);\r
+               }\r
+\r
+               if ($core->user->grade != 3) {\r
+                       $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
+               } else {\r
+                       $liste = $dao->getListeCompta($settings['orderby'], $settings['sens'], $settings['limit']);\r
+               }\r
+\r
+               $res = self::contextFacture($context_id);\r
+               $res .= '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'facture_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th><th class="min"></th><th class="min"></th><th class="min"></th></tr>';\r
+               $i = 0;\r
+               foreach($liste as $facture) {\r
+                       $droits = extranetDroits::facture($facture, 'w', false);\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $facture->facture_id . '</td>';\r
+                       $res .= '<td>' . $facture->nom . '</td>';\r
+                       $res .= '<td>' . $facture->client . '</td>';\r
+                       $res .= '<td>' . $facture->createur . '</td>';\r
+                       $res .= '<td>' . date(__('d/m/Y'), $facture->date_creation) . '</td>';\r
+                       $res .= '<td>' . $facture->total_ht . '</td>';\r
+                       if ($facture->status == 0) {\r
+                               $res .= '<td>' . $core->factures_status[$facture->status] . '</td>';\r
+                               if ($droits) {\r
+                                       $res .= '<td></td>';\r
+                                       $res .= '<td class="action"><a href="' . SITE_PATH . 'editefacture/' . $facture->facture_id . '" title="' . __('Editer la facture') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                                       $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeFacture/' . $facture->facture_id . '" title="' . __('Êtes vous certain de vouloir supprimer cette facture ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td></td><td></td>';\r
+                               }\r
+                       } elseif ($facture->status >= 1) {\r
+                               if ($facture->status < 3) {\r
+                                       if ($droits) {\r
+                                               $res .= '<td><a href="#" class="openContextMenu" rel="' . $context_id . '" rev="' . $facture->facture_id . '">' . $core->factures_status[$facture->status] . '</a></td>';\r
+                                       } else {\r
+                                               $res .= '<td>' . $core->factures_status[$facture->status] . '</td>';\r
+                                       }\r
+                               } else {\r
+                                       $title = $facture->status == 3?__("Voir l'avoir correspondant"):__("Voir la facture annulée correspondante");\r
+                                       $res .= '<td><a href="' . SITE_PATH . 'voirfacture/' . $facture->avoir . '" class="popupA4" title="' . $title . '">' . $core->factures_status[$facture->status] . '</a></td>';\r
+                               }\r
+                               if ($facture->facture_id > 0) {\r
+                                       if ($droits && $facture->status == 1) {\r
+                                               $res .= '<td>' . '<a href="' . SITE_PATH . 'editefacture/' . $facture->facture_id . '" title="' . __('Editer la facture') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                                       } else {\r
+                                               $res .= '<td></td>';\r
+                                       }\r
+                                       $res .= '<td><a href="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" class="popupA4" title="' . __('Voir la facture') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
+                                       if ($facture->status != 4 && $core->user->grade != 3) {\r
+                                               $res .= '<td><a href="#" class="ajax" rel="duplicateFacture/' . $facture->facture_id . '" title="' . __('Dupliquer la facture') . '">' . cubeMedia::image(IMG . '/duplicate.png') . '</a></td>';\r
+                                       } else {\r
+                                               $res .= '<td></td>';\r
+                                       }\r
+                               } else {\r
+                                       $res .= '<td></td><td></td><td></td>';\r
+                               }\r
+                       }\r
+\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
+                       if ($core->user->grade != 3) {\r
+                               $res .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
+                       } else {\r
+                               $res .= commonPage::pager($settings['page'], $dao->countCompta() , $settings['par_page'], 'page' . $change . '/%d');\r
+                       }\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('factures'));\r
+                       $res .= '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function listeFacturesClient($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+               $settings = $core->user->getSettings('factures');\r
+               $dao = new extranetDAOFacture($core->con);\r
+               $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens'], true);\r
+\r
+               $res = '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'facture_id', $settings, 'sortFacture') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortFacture') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortFacture') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortFacture') . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortFacture') . '</th>';\r
+               $res .= '<th class="min"></th></tr>';\r
+               $i = 0;\r
+               foreach($liste as $facture) {\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $facture->numeroFacture() . '</td>';\r
+                       $res .= '<td>' . $facture->nom . '</td>';\r
+                       $res .= '<td>' . date(__('d/m/Y'), $facture->date_creation) . '</td>';\r
+                       $res .= '<td>' . $facture->total_ht . '</td>';\r
+                       $res .= '<td>' . $core->factures_status[$facture->status] . '</td>';\r
+                       $res .= '<td><a href="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" class="popupA4" title="' . __('Voir la facture') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
+                       $res .= '</tr>';\r
+                       $i++;\r
+               }\r
+               if (!count($liste)) {\r
+                       $res .= '<tr><td colspan="6" class="center">' . __("Vous n'avez pour le moment aucune facture associée à votre compte") . '</td></tr>';\r
+               }\r
+\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function formFacturePaiement($facture_id)\r
+       {\r
+               global $core;\r
+               $dao = new extranetDAOFacture($core->con);\r
+               $facture = $dao->selectById($facture_id);\r
+               $date = !$facture->date_paiement?null:$facture->date_paiement;\r
+\r
+               $res = '<tr><td>' . form::hidden('facture_id', $facture_id) . __('Date de paiement') . '</td><td>' . cubeForm::date('date_paiement', $date) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Informations de paiement') . '</td><td>' . form::textarea('informations_paiement', 40, 3, $facture->informations_paiement) . '</td></tr>';\r
+\r
+               return $res;\r
+       }\r
+\r
+       public static function voirfacture($args)\r
+       {\r
+               global $core;\r
+               // Charge la facture\r
+               $dao = new extranetDAOFacture($core->con);\r
+               $facture = $dao->selectById($args[1]);\r
+               // Vérification des droits de l'utilisateur\r
+               extranetDroits::facture($facture, 'r', true);\r
+\r
+               cubeHTTP::relayNoCache(ROOT . '/factures/' . $args[1] . '.pdf');\r
+       }\r
+\r
+       public static function editefacture($args)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               if (isset($args[2])) {\r
+                       $res .= self::formFacture($args[1], $args[2]);\r
+               } else {\r
+                       $res .= self::formFacture($args[1]);\r
+               }\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function formFacture($facture_id = 'new', $projet_id = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               cubePage::autoComplete();\r
+               cubePage::emptyField();\r
+               cubePage::ui('Sortable');\r
+\r
+               $daoProjet = new extranetDAOProjet($core->con);\r
+               $dao = new extranetDAOFacture($core->con);\r
+\r
+               $projet_id = isset($_POST['projet_id']) && $_POST['projet_id'] > 0?$_POST['projet_id']:$projet_id;\r
+\r
+               if ($facture_id == 'new') {\r
+                       $facture = $dao->cree();\r
+               } elseif ($facture_id == 'ws') {\r
+                       $facture = $dao->cree();\r
+                       $facture->facture_id = 'ws';\r
+               } else {\r
+                       $facture = $dao->selectById($facture_id);\r
+               }\r
+\r
+               if (!is_null($projet_id) && $facture_id == 'new') {\r
+                       $projet = $daoProjet->selectById($projet_id);\r
+                       $facture->projet_id = $projet->projet_id;\r
+                       $facture->client = $projet->client;\r
+                       $facture->projet = $facture->nom = $projet->nom;\r
+                       $lignes = array();\r
+                       foreach($projet->taches as $tache) {\r
+                               $lignes[] = array('montant' => $tache->budget, 'titre' => $tache->nom, 'description' => '');\r
+                       }\r
+                       $facture->lignes = $lignes;\r
+               } elseif ($facture_id == 'ws') {\r
+                       if (is_null($projet_id)) {\r
+                               $daoClient = new commonDAOClient($core->con);\r
+                               $client = $daoClient->selectById($_POST['client_id']);\r
+                               $facture->projet_id = 'new';\r
+                               $facture->client = $client->rs;\r
+                               $facture->client_id = $client->utilisateur_id;\r
+                               $facture->projet = __('Nouveau projet');\r
+                               $facture->nom = 'Fluidbook';\r
+                       } else {\r
+                               $projet = $daoProjet->selectById($projet_id);\r
+                               $facture->projet_id = $projet->projet_id;\r
+                               $facture->client = $projet->client;\r
+                               $facture->projet = $facture->nom = $projet->nom;\r
+                       }\r
+                       $lignes = array();\r
+                       $b = $core->con->select('SELECT * FROM ws.book WHERE bid IN(' . implode(',', array_keys($_POST['book_facture'])) . ')');\r
+                       while ($b->fetch()) {\r
+                               $lignes[] = array('book' => $b->bid, 'montant' => 0, 'titre' => 'Fluidbook &laquo; ' . $b->titre . ' &raquo;', 'description' => '');\r
+                       }\r
+                       $facture->lignes = $lignes;\r
+               }\r
+\r
+               $res = '<div id="editeDevis">';\r
+               $res .= '<form action="previewFacture" method="post">';\r
+               $res .= '<div id="devisTop">';\r
+               // Adresse\r
+               if ($facture->facture_id == 'new' && is_null($projet_id)) {\r
+                       $class = 'empty-field';\r
+                       $default_id = '';\r
+                       $default = __('Entrez le nom du projet ou du client');\r
+               } else {\r
+                       $class = '';\r
+                       $default_id = $facture->projet_id;\r
+                       $default = $facture->projet_id . ' - ' . $facture->projet . ' (' . $facture->client . ')';\r
+               }\r
+\r
+               $res .= '<div id="factureAdresse">';\r
+               $res .= form::field('projet_nom', 40, 128, $default, $class);\r
+               $res .= form::hidden('projet', $default_id);\r
+               $res .= '<div id="factureAdresseDisplay">';\r
+               if ($facture->projet_id != 'new') {\r
+                       $res .= extranetUrl::adresse(null, $facture->projet_id, 'facture', $facture->adresse);\r
+               } else {\r
+                       $res .= extranetUrl::adresse($facture->client_id, null, 'facture', $facture->adresse);\r
+                       $res .= form::hidden('client', $facture->client_id);\r
+               }\r
+\r
+               $res .= '</div>';\r
+               $res .= form::textarea('texte_complementaire', 50, 2, $facture->texte_complementaire);\r
+               $res .= '</div>';\r
+               // Titre\r
+               $res .= '<div id="devisTitre">';\r
+               $res .= 'Date : ' . cubeForm::date('date_creation', $facture->date_creation) . '<br /><br />';\r
+               $res .= form::hidden('facture_id', $facture->facture_id);\r
+               $res .= form::textarea('nom', 40, 4, $facture->nom);\r
+               $res .= '</div>';\r
+               $res .= '</div>';\r
+\r
+               $res .= '<div id="devisMiddle">';\r
+               $res .= '<div id="devisLignes">';\r
+               // Lignes du devis\r
+               $nb_lignes = max(4, count($facture->lignes) + 2);\r
+\r
+               for($i = 0;$i < $nb_lignes;$i++) {\r
+                       if (isset($facture->lignes[$i])) {\r
+                               $titre = $facture->lignes[$i]['titre'];\r
+                               $description = $facture->lignes[$i]['description'];\r
+                               $montant = $facture->lignes[$i]['montant'];\r
+                               $book = isset($facture->lignes[$i]['book'])?$facture->lignes[$i]['book']:null;\r
+                       } else {\r
+                               $titre = $description = $montant = '';\r
+                       }\r
+\r
+                       $res .= '<div class="devisLigne">';\r
+\r
+                       $res .= '<div class="devisLigneRight">';\r
+                       $res .= form::field(array('montant[]'), 6, 15, $montant) . " €";\r
+                       if (isset($book) && !is_null($book)) {\r
+                               $res .= form::hidden(array('book[]'), $book) ;\r
+                       }\r
+                       $res .= '</div>';\r
+                       $res .= '<div class="devisLigneLeft">';\r
+                       $res .= form::field(array('titre[]'), 80, 256, htmlspecialchars($titre, ENT_QUOTES)) . '<br /><br />';\r
+                       $res .= form::textarea(array('description[]'), 80, 2, $description);\r
+                       $res .= '</div>';\r
+\r
+                       $res .= '</div>';\r
+               }\r
+\r
+               $res .= '</div>';\r
+               $res .= '</div>';\r
+               $res .= '<div id="devisBottom">' . cubeMedia::spacer(10, 10) . '</div>';\r
+               $res .= '<div class="right"><a href="#" class="submit">' . $core->typo->BoutonOK('Enregistrer et prévisualiser') . '</a></div>';\r
+               $res .= '</form>';\r
+               $res .= '</div>';\r
+               return $res;\r
+       }\r
+\r
+       public static function previewFacture($args)\r
+       {\r
+               global $core;\r
+               commonDroits::min(1);\r
+               $dao = new extranetDAOFacture($core->con);\r
+               $facture = $dao->selectById($args[1]);\r
+\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<iframe src="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" width="960" height="1000" frameborder="0"></iframe>';\r
+\r
+               $res .= '<div class="right">' . '<a href="' . SITE_PATH . 'editefacture/' . $facture->facture_id . '">' . $core->typo->BoutonOK(__('Editer la facture')) . '</a> ';\r
+               if ($facture->status == 0) {\r
+                       $res .= '<a href="#" rel="valideFacture/' . $facture->facture_id . '" class="ajax" title="' . __("La facture est sur le point d'être validée. Elle ne sera plus éditable. Veuillez confirmer votre choix ?") . '">' . $core->typo->BoutonOK(__('Valider la facture')) . '</a>';\r
+               } else {\r
+                       $res .= '<a href="' . SITE_PATH . 'factures">' . $core->typo->BoutonOK(__('Valider la facture')) . '</a>';\r
+               }\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function formPrintFactures()\r
+       {\r
+               global $core;\r
+               $last = $core->user->getLastPrint();\r
+               $res = '';\r
+               if ($last['date']) {\r
+                       $res .= '<tr><td>' . __('Dernière factures imprimées') . ' : </td><td>' . __('Factures') . ' <a href="' . SITE_PATH . 'voirfacture/print_' . $core->user->utilisateur_id . '_' . $last['date'] . '" class="popupA4">' . $last['pages'] . ' (' . date('Y-m-d', $last['date']) . ')</a></td></tr>';\r
+               }\r
+               $res .= '<tr><td>' . __('Factures à imprimer') . '</td><td>' . form::field('factures', 20, 64) . '</td></tr>';\r
+               $res .= '<tr><td colspan="2"><em>' . __('Ex') . ' : 1;3-5;7;9 ' . __('signifie factures') . ' 1,3,4,5,7,9</em></td></tr>';\r
+               return $res;\r
+       }\r
 \r
        public static function chiffres($args)\r
        {\r
diff --git a/inc/extranet/Controlleur/url/_common.php b/inc/extranet/Controlleur/url/_common.php
deleted file mode 100644 (file)
index 1b991eb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php\r
-$urlClasses['extranetUrlClient'] = dirname(__FILE__) . '/class.extranet.url.client.php';\r
-$urlClasses['extranetUrlFacture'] = dirname(__FILE__) . '/class.extranet.url.facture.php';\r
-$urlClasses['extranetUrlDevis'] = dirname(__FILE__) . '/class.extranet.url.devis.php';\r
-$urlClasses['extranetUrlTimereport'] = dirname(__FILE__) . '/class.extranet.url.timereport.php';\r
-$urlClasses['extranetUrlProjet'] = dirname(__FILE__) . '/class.extranet.url.projet.php';\r
-\r
-$__autoload += $urlClasses;\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/extranet/Controlleur/url/class.extranet.url.client.php b/inc/extranet/Controlleur/url/class.extranet.url.client.php
deleted file mode 100644 (file)
index 2b6da9b..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php\r
-\r
-class extranetUrlClient{\r
-       public static function clients($args)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               cubePage::autoComplete();\r
-               cubePage::emptyfield();\r
-               commonDroits::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 commonFiltre(__('Ayant un projet'), 'status_client_projet', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Ayant des impayés'), 'impaye', $settings['filtres']);\r
-               $res = commonPage::barre($filtres, 'filtreClients', 'clients', $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeClients">';\r
-               $res .= self::listeClients();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeClients($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $settings = is_null($settings)?$core->user->getSettings('clients'):$settings;\r
-               $change = is_null($dashboard)?'Client':'Dashboard/' . $dashboard;\r
-               $dao = new commonDAOEntreprise($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>' . commonUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Raison sociale'), 'nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . __('Contacts') . '</th>';\r
-               $res .= '<th>' . __('Notes') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby('<abbr title="' . __("Chiffre d'affaire") . '">CA</abbr>', 'ca', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby('Impayés', 'impaye', $settings, 'sort' . $change) . '</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="action center"><a href="#" class="popup" rel="formNotes/' . $client->entreprise_id . '">' . cubeMedia::image(IMG . '/postit.png') . '</a></td>';\r
-                       $res .= '<td class="nowrap">';\r
-                       if ($client->ca) {\r
-                               $res .= '<a href="#" class="popup" rel="clientDetailCa/' . $client->entreprise_id . '" title="' . __("Voir le détail du chiffre d'affaire") . '">' . number_format($client->ca, 0, ',', ' ') . '</a>';\r
-                       }\r
-\r
-                       $res .= '</td>';\r
-                       if ($client->impaye) {\r
-                               $res .= '<td class="nowrap"><a href="#" class="popup" rel="clientDetailImpaye/' . $client->entreprise_id . '">' . number_format($client->impaye, 0, '.', ' ') . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\r
-\r
-                       $res .= '<td class="action"><a href="#" class="popup" rel="formClient/' . $client->entreprise_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                       if (is_null($client->ca)) {\r
-                               $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeClient/' . $client->entreprise_id . '" title="' . __('Êtes vous certain de vouloir supprimer ce client ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\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 .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients'));\r
-                       $res .= '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function clientDetailCa($entreprise_id)\r
-       {\r
-               global $core;\r
-               $dao = new commonDAOEntreprise($core->con);\r
-               $annees = $dao->getCaDetails($entreprise_id);\r
-               $res = '';\r
-               $i = 0;\r
-               foreach($annees as $annee => $ca) {\r
-                       $class = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $class . '><td><strong>' . $annee . '</strong></td><td>' . number_format($ca, 0, ',', ' ') . ' €</td></tr>';\r
-                       $i++;\r
-               }\r
-               return $res;\r
-       }\r
-\r
-       public static function clientDetailImpaye($entreprise_id)\r
-       {\r
-               global $core;\r
-               $dao = new extranetDAOFacture($core->con);\r
-               $daoClient = new commonDAOEntreprise($core->con);\r
-               $factures = $dao->getImpayesOfClient($entreprise_id);\r
-               $client = $daoClient->selectById($entreprise_id);\r
-               $res = '';\r
-               $i = 0;\r
-               foreach($factures as $facture) {\r
-                       $class = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $class . '>';\r
-                       $res .= '<td>' . $facture->facture_id . '</td>';\r
-                       $res .= '<td>';\r
-                       if ($facture->facture_id > 0) {\r
-                               $res .= '<a href="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" class="popupA4">' . $facture->nom . '</a>';\r
-                       } else {\r
-                               $res .= $facture->nom ;\r
-                       }\r
-                       $res .= '</td>';\r
-                       $tva = cubeTaxes::tva($client->pays);\r
-                       $res .= '<td>' . number_format($facture->total_ht, 0, ',', '') . ' €';\r
-                       if ($tva > 0 && $tva != 'UE') {\r
-                               $res .= ' HT </td><td> ' . number_format(cubePrices::HTtoTTC($facture->total_ht, $tva), 2, ',', '') . ' € TTC';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\r
-                       $res .= '</td></tr>';\r
-                       $i++;\r
-               }\r
-               return $res;\r
-       }\r
-\r
-       public static function formClient($entreprise_id = 'new')\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $dao = new commonDAOEntreprise($core->con);\r
-               $daoUtilisateur = new commonDAOUtilisateur($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 commonDAOClient($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
-               commonDroits::min(1);\r
-               $dao = new commonDAOEntreprise($core->con);\r
-               $contacts = $dao->getContacts($entreprise_id);\r
-\r
-               $res = '<table class="liste light">';\r
-               $res .= '<tr class="light"><th colspan="5"><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><a class="ajax" href="#" rel="connectAs/' . $contact->utilisateur_id . '">Se connecter comme ...</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
-               commonDroits::min(1);\r
-\r
-               $dao = new commonDAOClient($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></td><td><a class="ajax" href="#" rel="connectAs/' . $client->utilisateur_id . '">' . __('Se connecter comme ...') . '</a></td></tr>';\r
-                       $res .= '<tr><td>' . __("Paramètres de connexion à l'extranet") . '</td><td>' . __('Adresse') . ' : http://extranet.cubedesigners.com/<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
-                       // $res .= '<tr><td>' . __("Paramètres de connexion au FTP") . '</td><td>' . __('Serveur FTP') . ' : extranet.cubedesigners.com (ftp://extranet.cubedesigners.com)<br />' . __("Nom d'utilisateur") . ' : ' . $client->email . '<br />' . __('Mot de passe') . ' : ' . $client->password . '</td></tr>';\r
-               }\r
-               return $res;\r
-       }\r
-\r
-       public static function formNotes($utilisateur_id)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $dao = new commonDAOUtilisateur($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
-\r
-?>
\ No newline at end of file
diff --git a/inc/extranet/Controlleur/url/class.extranet.url.devis.php b/inc/extranet/Controlleur/url/class.extranet.url.devis.php
deleted file mode 100644 (file)
index 02d9038..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php\r
-class extranetUrlDevis {\r
-       public static function devis($args)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               cubePage::contextMenu();\r
-\r
-               if ($core->user->grade == 0) {\r
-                       return self::devis_client($args);\r
-               }\r
-               $settings = $core->user->getSettings('devis');\r
-               commonDroits::min(1);\r
-\r
-               $shortcuts = array();\r
-               $shortcuts[] = '<a href="' . SITE_PATH . 'editedevis/new">' . $core->typo->Ajouter('Créer un devis') . '</a>';\r
-\r
-               $filtres = array();\r
-               $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Status'), 'status_devis', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']);\r
-\r
-               $res = commonPage::barre($filtres, 'filtreDevis', 'devis' , $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeDevis">';\r
-               $res .= self::listeDevis();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function devis_client($args)\r
-       {\r
-               global $core;\r
-\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeDevis">';\r
-               $res .= self::listeDevis();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeDevis($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-\r
-               if ($core->user->grade == 0) {\r
-                       return self::listeDevisClient($dashboard, $settings);\r
-               } else {\r
-                       return self::listeDevisEquipier($dashboard, $settings);\r
-               }\r
-       }\r
-\r
-       public static function contextDevis($id)\r
-       {\r
-               global $core;\r
-               $res = '<div class="contextMenu" id="' . $id . '">';\r
-               $res .= '<ul>';\r
-               $res .= '<li class="head">' . __("Changer le status du devis") . '</li>';\r
-               foreach($core->devis_status as $k => $v) {\r
-                       if ($k == 0) {\r
-                               continue;\r
-                       }\r
-                       $res .= '<li><a href="#" rel="changeDevisStatus/$1/' . $k . '" class="ajax">' . $v . '</a></li>';\r
-                       if ($k == 2) {\r
-                               $res .= '<li><a href="#" rel="changeDevisStatus/$1/' . $k . '/createProjet" class="ajax">' . __('Valider puis créer le projet correspondant') . '</a></li>';\r
-                       }\r
-               }\r
-               $res .= '</ul></div>';\r
-               return $res;\r
-       }\r
-\r
-       public static function listeDevisEquipier($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $settings = is_null($settings)?$core->user->getSettings('devis'):$settings;\r
-               $change = is_null($dashboard)?'Devis':'Dashboard/' . $dashboard;\r
-               $context_id = is_null($dashboard)?'contextDevis':'contextDashboard_' . $dashboard;\r
-\r
-               $dao = new extranetDAODevis($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
-               $res = self::contextDevis($context_id);\r
-               $res .= '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'devis_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="min"></th><th class="min"></th><th class="min"></th></tr>';\r
-               $i = 0;\r
-               foreach($liste as $devis) {\r
-                       $droits = extranetDroits::devis($devis, 'w', false);\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $devis->devis_id . '</td>';\r
-                       $res .= '<td>' . $devis->nom . '</td>';\r
-                       $res .= '<td>' . $devis->client . '</td>';\r
-                       $res .= '<td>' . $devis->createur . '</td>';\r
-                       $res .= '<td>' . date(__('d/m/Y'), $devis->date_creation) . '</td>';\r
-                       $res .= '<td>' . $devis->total_ht . '</td>';\r
-\r
-                       if ($devis->status == 0) {\r
-                               $res .= '<td>' . $core->devis_status[$devis->status] . '</td>';\r
-                       } else {\r
-                               if ($droits) {\r
-                                       $res .= '<td><a href="#" class="openContextMenu" rel="' . $context_id . '" rev="' . $devis->devis_id . '">' . $core->devis_status[$devis->status] . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td>' . $core->devis_status[$devis->status] . '</td>';\r
-                               }\r
-                       }\r
-\r
-                       if (in_array($devis->status, array(0, 1)) && $droits) {\r
-                               $res .= '<td class="action"><a href="' . SITE_PATH . 'editedevis/' . $devis->devis_id . '" title="' . __('Editer le devis') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\r
-                       $res .= '<td><a href="' . SITE_PATH . 'voirdevis/' . $devis->devis_id . '" class="popupA4" title="' . __('Voir le devis') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
-                       if ($devis->status == 0) {\r
-                               if ($droits) {\r
-                                       $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeDevis/' . $devis->devis_id . '" title="' . __('Êtes vous certain de vouloir supprimer ce devis ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td></td>';\r
-                               }\r
-                       } elseif ($devis->status >= 1) {\r
-                               $res .= '<td><a href="#" class="ajax" rel="duplicateDevis/' . $devis->devis_id . '" title="' . __('Dupliquer le devis') . '">' . cubeMedia::image(IMG . '/duplicate.png') . '</a></td>';\r
-                       }\r
-\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 .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('devis'));\r
-                       $res .= '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function listeDevisClient($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-\r
-               $dao = new extranetDAODevis($core->con);\r
-               $settings = $core->user->getSettings('devis');\r
-               $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens']);\r
-               $res = '<table class="liste">';\r
-               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortDevis') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortDevis') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortDevis') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortDevis') . '</th>';\r
-               $res .= '<th class="min"></th></tr>';\r
-               $i = 0;\r
-               foreach($liste as $devis) {\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $devis->nom . '</td>';\r
-                       $res .= '<td>' . date(__('d/m/Y'), $devis->date_creation) . '</td>';\r
-                       $res .= '<td>' . $devis->total_ht . '</td>';\r
-                       $res .= '<td>' . $core->devis_status[$devis->status] . '</td>';\r
-                       $res .= '<td><a href="' . SITE_PATH . 'voirdevis/' . $devis->devis_id . '" class="popupA4" title="' . __('Voir le devis') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
-                       $res .= '</tr>';\r
-                       $i++;\r
-               }\r
-               if (!count($liste)) {\r
-                       $res .= '<tr><td colspan="6" class="center">' . __("Vous n'avez pour le moment aucun devis associé à votre compte") . '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function voirdevis($args)\r
-       {\r
-               global $core;\r
-               // Charge le devis\r
-               $dao = new extranetDAODevis($core->con);\r
-               $devis = $dao->selectById($args[1]);\r
-               // Vérification des droits en lecture de l'utilisateur\r
-               extranetDroits::devis($devis, 'r');\r
-\r
-               cubeHTTP::relayNoCache(ROOT . '/devis/' . $args[1] . '.pdf');\r
-       }\r
-\r
-       public static function editedevis($args)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= self::formDevis($args[1]);\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function formDevis($devis_id = 'new')\r
-       {\r
-               global $core;\r
-               cubePage::autocomplete();\r
-               cubePage::emptyField();\r
-               cubePage::ui('Sortable');\r
-               commonDroits::min(1);\r
-               $dao = new extranetDAODevis($core->con);\r
-               if ($devis_id == 'new') {\r
-                       $devis = $dao->cree();\r
-               } else {\r
-                       $devis = $dao->selectById($devis_id);\r
-               }\r
-\r
-               $res = '<div id="editeDevis">';\r
-               $res .= '<form action="previewDevis" method="post">';\r
-\r
-               $res .= '<div id="devisTop">';\r
-               // Adresse\r
-               $res .= '<div id="devisAdresse">';\r
-               if ($devis->devis_id == 'new') {\r
-                       $default = __('Entrez le nom du client');\r
-                       $default_id = '';\r
-                       $class = 'empty-field';\r
-               } else {\r
-                       $default = $devis->client;\r
-                       $default_id = $devis->client_id;\r
-                       $class = '';\r
-               }\r
-\r
-               $res .= form::field('client_nom', 40, 128, $default, $class);\r
-               $res .= form::hidden('client', $default_id);\r
-               $res .= '<div id="devisAdresseDisplay">';\r
-               if ($devis->client_id) {\r
-                       $res .= self::adresse($devis->client_id, null, 'devis', $devis->adresse);\r
-               }\r
-               $res .= '</div>';\r
-               $res .= '</div>';\r
-               // Titre\r
-               $res .= '<div id="devisTitre">';\r
-               $res .= form::hidden('devis_id', $devis->devis_id);\r
-               $res .= form::textarea('nom', 40, 4, $devis->nom);\r
-               $res .= '</div>';\r
-               $res .= '</div>';\r
-\r
-               $res .= '<div id="devisMiddle">';\r
-               $res .= '<div id="devisLignes">';\r
-               // Lignes du devis\r
-               $nb_lignes = max(4, count($devis->lignes) + 2);\r
-\r
-               for($i = 0;$i < $nb_lignes;$i++) {\r
-                       if (isset($devis->lignes[$i])) {\r
-                               $titre = $devis->lignes[$i]['titre'];\r
-                               $description = $devis->lignes[$i]['description'];\r
-                               $montant = $devis->lignes[$i]['montant'];\r
-                       } else {\r
-                               $titre = $description = $montant = '';\r
-                       }\r
-                       $res .= '<div class="devisLigne">';\r
-                       $res .= '<div class="devisLigneRight">';\r
-                       $res .= form::field(array('montant[]'), 6, 15, $montant) . " €";\r
-                       $res .= '</div>';\r
-                       $res .= '<div class="devisLigneLeft">';\r
-                       $res .= form::field(array('titre[]'), 105, 256, htmlspecialchars($titre, ENT_QUOTES)) . '<br /><br />';\r
-                       $res .= form::textarea(array('description[]'), 110, 4, $description);\r
-                       $res .= '</div>';\r
-\r
-                       $res .= '</div>';\r
-               }\r
-\r
-               $res .= '</div>';\r
-               $res .= '</div>';\r
-               $res .= '<div id="devisBottom">' . cubeMedia::spacer(10, 10) . '</div>';\r
-               $res .= '<div id="devisMail">';\r
-               $res .= '<table>';\r
-               $res .= '<tr><td>' . __('De') . '</td><td>' . $core->user->prenom . ' ' . $core->user->nom . ' &lt;' . $core->user->email . '&gt;</td></tr>';\r
-               $res .= '<tr><td>' . __('Sujet') . '</td><td>' . form::field(array('email[sujet]'), 80, 128, htmlspecialchars($devis->email['sujet'], ENT_QUOTES)) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Corps') . '</td><td>' . form::textarea(array('email[corps]'), 80, 20, $devis->email['corps']) . '</td></tr>';\r
-               $res .= '</table>';\r
-               $res .= '</div>';\r
-               $res .= '<div class="right"><a href="#" class="submit">' . $core->typo->BoutonOK('Enregistrer et prévisualiser') . '</a></div>';\r
-               $res .= '</form>';\r
-               $res .= '</div>';\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function previewDevis($args)\r
-       {\r
-               global $core;\r
-\r
-               $dao = new extranetDAODevis($core->con);\r
-               $devis = $dao->selectById($args[1]);\r
-\r
-               $daoUtilisateur = new commonDAOUtilisateur($core->con);\r
-               $createur = $devis->createur = $daoUtilisateur->selectById($devis->createur_id);\r
-               $client = $devis->client = $daoUtilisateur->selectById($devis->client_id);\r
-\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<iframe src="' . SITE_PATH . 'voirdevis/' . $devis->devis_id . '/?junk=' . TIME . '" width="960" height="1000" frameborder="0"></iframe>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="devis_email">';\r
-               $res .= '<table class="liste">';\r
-               $res .= '<tr><td>' . __('De') . '</td><td>' . $createur->prenom . ' ' . $createur->nom . '&lt;' . $createur->email . '&gt;</td></tr>';\r
-               $res .= '<tr class="odd"><td>' . __('A') . '</td><td>' . $client->prenom . ' ' . $client->nom . '&lt;' . $client->email . '&gt;</td></tr>';\r
-               $res .= '<tr><td>' . __('Sujet') . '</td><td>' . $devis->email['sujet'] . '</td></tr>';\r
-               $res .= '<tr class="odd"><td>' . __('Message') . '</td><td>' . nl2br($devis->email['corps'] . "\n\n" . $createur->getSignature()) . '</td></tr>';\r
-               $res .= '<tr><td colspan="2" class="right">';\r
-               $res .= cubeMedia::spacer(40, 40) . '<a href="' . SITE_PATH . 'editedevis/' . $devis->devis_id . '">' . $core->typo->BoutonOK(__('Editer le devis')) . '</a> ';\r
-               $res .= '<a href="#" rel="expedieDevis/0/' . $devis->devis_id . '" class="ajax" title="' . __("Le devis est sur le point d'être validé, mais l'email ne sera pas envoyé. Veuillez confirmer votre choix ?") . '">' . $core->typo->BoutonOK(__('Valider sans envoyer le devis')) . '</a> ';\r
-               $res .= '<a href="#" rel="expedieDevis/1/' . $devis->devis_id . '" class="ajax" title="' . __("Le devis est sur le point d'être envoyé. Veuillez confirmer votre choix ?") . '">' . $core->typo->BoutonOK(__('Valider et envoyer le devis')) . '</a></td></tr>';\r
-               $res .= '</table>';\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-}\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/extranet/Controlleur/url/class.extranet.url.facture.php b/inc/extranet/Controlleur/url/class.extranet.url.facture.php
deleted file mode 100644 (file)
index eae5b45..0000000
+++ /dev/null
@@ -1,427 +0,0 @@
-<?php\r
-\r
-class extranetUrlFacture {\r
-       public static function factures($args)\r
-       {\r
-               global $core;\r
-\r
-               if ($core->user->grade == 0) {\r
-                       return self::factures_client($args);\r
-               }\r
-               $settings = $core->user->getSettings('factures');\r
-\r
-               commonDroits::min(1);\r
-               $shortcuts = array();\r
-               if ($core->user->grade != 3) {\r
-                       $shortcuts[] = '<a href="' . SITE_PATH . 'editefacture/new">' . $core->typo->Ajouter('Créer une facture') . '</a>';\r
-               }\r
-               $shortcuts[] = '<a href="#" rel="formPrintFactures" title="Imprimer les factures" class="popup">' . cubeMedia::image(IMG . '/print.png') . '</a>';\r
-               $filtres = array();\r
-               $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Status'), 'status_facture', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']);\r
-               $res = commonPage::barre($filtres , 'filtreFactures', 'factures', $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeFactures">';\r
-               $res .= self::listeFactures();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function factures_client($args)\r
-       {\r
-               global $core;\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeFactures">';\r
-               $res .= self::listeFactures();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function contextFacture($id)\r
-       {\r
-               global $core;\r
-               $res = '<div class="contextMenu" id="' . $id . '">';\r
-               $res .= '<ul>';\r
-               $res .= '<li class="head">' . __("Changer le status de la facture") . '</li>';\r
-               foreach($core->factures_status as $k => $v) {\r
-                       if (in_array($k, array(0, 4))) {\r
-                               continue;\r
-                       }\r
-                       if ($k == 2) {\r
-                               $res .= '<li><a href="#" rel="changeFacturePaiement/$1" class="popup">' . $v . '</a></li>';\r
-                       } else {\r
-                               if ($k == 3) {\r
-                                       $title = ' title="' . __("Êtes-vous certain de vouloir annuler cette facture ? Cette action est irreversible et provoquera la création d'un avoir correpondant.") . '"';\r
-                               } else {\r
-                                       $title = '';\r
-                               }\r
-                               $res .= '<li><a href="#" rel="changeFactureStatus/$1/' . $k . '" class="ajax"' . $title . '>' . $v . '</a></li>';\r
-                       }\r
-               }\r
-               $res .= '</ul></div>';\r
-               return $res;\r
-       }\r
-\r
-       public static function listeFactures($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               if ($core->user->grade == 0) {\r
-                       return self::listeFacturesClient($dashboard, $settings);\r
-               } else {\r
-                       return self::listeFacturesEquipier($dashboard, $settings);\r
-               }\r
-       }\r
-\r
-       public static function listeFacturesEquipier($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               cubePage::contextMenu();\r
-\r
-               $settings = is_null($settings)?$core->user->getSettings('factures'):$settings;\r
-               $change = is_null($dashboard)?'Facture':'Dashboard/' . $dashboard;\r
-               $context_id = is_null($dashboard)?'contextFacture':'contextDashboard_' . $dashboard;\r
-               $dao = new extranetDAOFacture($core->con);\r
-               if (isset($settings['search']) && !is_null($settings['search'])) {\r
-                       $dao->setSearch($settings['search']);\r
-               } else {\r
-                       $dao->setFiltres($settings['filtres']);\r
-               }\r
-\r
-               if ($core->user->grade != 3) {\r
-                       $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
-               } else {\r
-                       $liste = $dao->getListeCompta($settings['orderby'], $settings['sens'], $settings['limit']);\r
-               }\r
-\r
-               $res = self::contextFacture($context_id);\r
-               $res .= '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'facture_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th><th class="min"></th><th class="min"></th><th class="min"></th></tr>';\r
-               $i = 0;\r
-               foreach($liste as $facture) {\r
-                       $droits = extranetDroits::facture($facture, 'w', false);\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $facture->facture_id . '</td>';\r
-                       $res .= '<td>' . $facture->nom . '</td>';\r
-                       $res .= '<td>' . $facture->client . '</td>';\r
-                       $res .= '<td>' . $facture->createur . '</td>';\r
-                       $res .= '<td>' . date(__('d/m/Y'), $facture->date_creation) . '</td>';\r
-                       $res .= '<td>' . $facture->total_ht . '</td>';\r
-                       if ($facture->status == 0) {\r
-                               $res .= '<td>' . $core->factures_status[$facture->status] . '</td>';\r
-                               if ($droits) {\r
-                                       $res .= '<td></td>';\r
-                                       $res .= '<td class="action"><a href="' . SITE_PATH . 'editefacture/' . $facture->facture_id . '" title="' . __('Editer la facture') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                                       $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeFacture/' . $facture->facture_id . '" title="' . __('Êtes vous certain de vouloir supprimer cette facture ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td></td><td></td>';\r
-                               }\r
-                       } elseif ($facture->status >= 1) {\r
-                               if ($facture->status < 3) {\r
-                                       if ($droits) {\r
-                                               $res .= '<td><a href="#" class="openContextMenu" rel="' . $context_id . '" rev="' . $facture->facture_id . '">' . $core->factures_status[$facture->status] . '</a></td>';\r
-                                       } else {\r
-                                               $res .= '<td>' . $core->factures_status[$facture->status] . '</td>';\r
-                                       }\r
-                               } else {\r
-                                       $title = $facture->status == 3?__("Voir l'avoir correspondant"):__("Voir la facture annulée correspondante");\r
-                                       $res .= '<td><a href="' . SITE_PATH . 'voirfacture/' . $facture->avoir . '" class="popupA4" title="' . $title . '">' . $core->factures_status[$facture->status] . '</a></td>';\r
-                               }\r
-                               if ($facture->facture_id > 0) {\r
-                                       if ($droits && $facture->status == 1) {\r
-                                               $res .= '<td>' . '<a href="' . SITE_PATH . 'editefacture/' . $facture->facture_id . '" title="' . __('Editer la facture') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                                       } else {\r
-                                               $res .= '<td></td>';\r
-                                       }\r
-                                       $res .= '<td><a href="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" class="popupA4" title="' . __('Voir la facture') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
-                                       if ($facture->status != 4 && $core->user->grade != 3) {\r
-                                               $res .= '<td><a href="#" class="ajax" rel="duplicateFacture/' . $facture->facture_id . '" title="' . __('Dupliquer la facture') . '">' . cubeMedia::image(IMG . '/duplicate.png') . '</a></td>';\r
-                                       } else {\r
-                                               $res .= '<td></td>';\r
-                                       }\r
-                               } else {\r
-                                       $res .= '<td></td><td></td><td></td>';\r
-                               }\r
-                       }\r
-\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
-                       if ($core->user->grade != 3) {\r
-                               $res .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
-                       } else {\r
-                               $res .= commonPage::pager($settings['page'], $dao->countCompta() , $settings['par_page'], 'page' . $change . '/%d');\r
-                       }\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('factures'));\r
-                       $res .= '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function listeFacturesClient($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               $settings = $core->user->getSettings('factures');\r
-               $dao = new extranetDAOFacture($core->con);\r
-               $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens'], true);\r
-\r
-               $res = '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'facture_id', $settings, 'sortFacture') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortFacture') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortFacture') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortFacture') . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortFacture') . '</th>';\r
-               $res .= '<th class="min"></th></tr>';\r
-               $i = 0;\r
-               foreach($liste as $facture) {\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $facture->numeroFacture() . '</td>';\r
-                       $res .= '<td>' . $facture->nom . '</td>';\r
-                       $res .= '<td>' . date(__('d/m/Y'), $facture->date_creation) . '</td>';\r
-                       $res .= '<td>' . $facture->total_ht . '</td>';\r
-                       $res .= '<td>' . $core->factures_status[$facture->status] . '</td>';\r
-                       $res .= '<td><a href="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" class="popupA4" title="' . __('Voir la facture') . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
-                       $res .= '</tr>';\r
-                       $i++;\r
-               }\r
-               if (!count($liste)) {\r
-                       $res .= '<tr><td colspan="6" class="center">' . __("Vous n'avez pour le moment aucune facture associée à votre compte") . '</td></tr>';\r
-               }\r
-\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function formFacturePaiement($facture_id)\r
-       {\r
-               global $core;\r
-               $dao = new extranetDAOFacture($core->con);\r
-               $facture = $dao->selectById($facture_id);\r
-               $date = !$facture->date_paiement?null:$facture->date_paiement;\r
-\r
-               $res = '<tr><td>' . form::hidden('facture_id', $facture_id) . __('Date de paiement') . '</td><td>' . cubeForm::date('date_paiement', $date) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Informations de paiement') . '</td><td>' . form::textarea('informations_paiement', 40, 3, $facture->informations_paiement) . '</td></tr>';\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function voirfacture($args)\r
-       {\r
-               global $core;\r
-               // Charge la facture\r
-               $dao = new extranetDAOFacture($core->con);\r
-               $facture = $dao->selectById($args[1]);\r
-               // Vérification des droits de l'utilisateur\r
-               extranetDroits::facture($facture, 'r', true);\r
-\r
-               cubeHTTP::relayNoCache(ROOT . '/factures/' . $args[1] . '.pdf');\r
-       }\r
-\r
-       public static function editefacture($args)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               if (isset($args[2])) {\r
-                       $res .= self::formFacture($args[1], $args[2]);\r
-               } else {\r
-                       $res .= self::formFacture($args[1]);\r
-               }\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function formFacture($facture_id = 'new', $projet_id = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               cubePage::autoComplete();\r
-               cubePage::emptyField();\r
-               cubePage::ui('Sortable');\r
-\r
-               $daoProjet = new extranetDAOProjet($core->con);\r
-               $dao = new extranetDAOFacture($core->con);\r
-\r
-               $projet_id = isset($_POST['projet_id']) && $_POST['projet_id'] > 0?$_POST['projet_id']:$projet_id;\r
-\r
-               if ($facture_id == 'new') {\r
-                       $facture = $dao->cree();\r
-               } elseif ($facture_id == 'ws') {\r
-                       $facture = $dao->cree();\r
-                       $facture->facture_id = 'ws';\r
-               } else {\r
-                       $facture = $dao->selectById($facture_id);\r
-               }\r
-\r
-               if (!is_null($projet_id) && $facture_id == 'new') {\r
-                       $projet = $daoProjet->selectById($projet_id);\r
-                       $facture->projet_id = $projet->projet_id;\r
-                       $facture->client = $projet->client;\r
-                       $facture->projet = $facture->nom = $projet->nom;\r
-                       $lignes = array();\r
-                       foreach($projet->taches as $tache) {\r
-                               $lignes[] = array('montant' => $tache->budget, 'titre' => $tache->nom, 'description' => '');\r
-                       }\r
-                       $facture->lignes = $lignes;\r
-               } elseif ($facture_id == 'ws') {\r
-                       if (is_null($projet_id)) {\r
-                               $daoClient = new commonDAOClient($core->con);\r
-                               $client = $daoClient->selectById($_POST['client_id']);\r
-                               $facture->projet_id = 'new';\r
-                               $facture->client = $client->rs;\r
-                               $facture->client_id = $client->utilisateur_id;\r
-                               $facture->projet = __('Nouveau projet');\r
-                               $facture->nom = 'Fluidbook';\r
-                       } else {\r
-                               $projet = $daoProjet->selectById($projet_id);\r
-                               $facture->projet_id = $projet->projet_id;\r
-                               $facture->client = $projet->client;\r
-                               $facture->projet = $facture->nom = $projet->nom;\r
-                       }\r
-                       $lignes = array();\r
-                       $b = $core->con->select('SELECT * FROM ws.book WHERE bid IN(' . implode(',', array_keys($_POST['book_facture'])) . ')');\r
-                       while ($b->fetch()) {\r
-                               $lignes[] = array('book' => $b->bid, 'montant' => 0, 'titre' => 'Fluidbook &laquo; ' . $b->titre . ' &raquo;', 'description' => '');\r
-                       }\r
-                       $facture->lignes = $lignes;\r
-               }\r
-\r
-               $res = '<div id="editeDevis">';\r
-               $res .= '<form action="previewFacture" method="post">';\r
-               $res .= '<div id="devisTop">';\r
-               // Adresse\r
-               if ($facture->facture_id == 'new' && is_null($projet_id)) {\r
-                       $class = 'empty-field';\r
-                       $default_id = '';\r
-                       $default = __('Entrez le nom du projet ou du client');\r
-               } else {\r
-                       $class = '';\r
-                       $default_id = $facture->projet_id;\r
-                       $default = $facture->projet_id . ' - ' . $facture->projet . ' (' . $facture->client . ')';\r
-               }\r
-\r
-               $res .= '<div id="factureAdresse">';\r
-               $res .= form::field('projet_nom', 40, 128, $default, $class);\r
-               $res .= form::hidden('projet', $default_id);\r
-               $res .= '<div id="factureAdresseDisplay">';\r
-               if ($facture->projet_id != 'new') {\r
-                       $res .= extranetUrl::adresse(null, $facture->projet_id, 'facture', $facture->adresse);\r
-               } else {\r
-                       $res .= extranetUrl::adresse($facture->client_id, null, 'facture', $facture->adresse);\r
-                       $res .= form::hidden('client', $facture->client_id);\r
-               }\r
-\r
-               $res .= '</div>';\r
-               $res .= form::textarea('texte_complementaire', 50, 2, $facture->texte_complementaire);\r
-               $res .= '</div>';\r
-               // Titre\r
-               $res .= '<div id="devisTitre">';\r
-               $res .= 'Date : ' . cubeForm::date('date_creation', $facture->date_creation) . '<br /><br />';\r
-               $res .= form::hidden('facture_id', $facture->facture_id);\r
-               $res .= form::textarea('nom', 40, 4, $facture->nom);\r
-               $res .= '</div>';\r
-               $res .= '</div>';\r
-\r
-               $res .= '<div id="devisMiddle">';\r
-               $res .= '<div id="devisLignes">';\r
-               // Lignes du devis\r
-               $nb_lignes = max(4, count($facture->lignes) + 2);\r
-\r
-               for($i = 0;$i < $nb_lignes;$i++) {\r
-                       if (isset($facture->lignes[$i])) {\r
-                               $titre = $facture->lignes[$i]['titre'];\r
-                               $description = $facture->lignes[$i]['description'];\r
-                               $montant = $facture->lignes[$i]['montant'];\r
-                               $book = isset($facture->lignes[$i]['book'])?$facture->lignes[$i]['book']:null;\r
-                       } else {\r
-                               $titre = $description = $montant = '';\r
-                       }\r
-\r
-                       $res .= '<div class="devisLigne">';\r
-\r
-                       $res .= '<div class="devisLigneRight">';\r
-                       $res .= form::field(array('montant[]'), 6, 15, $montant) . " €";\r
-                       if (isset($book) && !is_null($book)) {\r
-                               $res .= form::hidden(array('book[]'), $book) ;\r
-                       }\r
-                       $res .= '</div>';\r
-                       $res .= '<div class="devisLigneLeft">';\r
-                       $res .= form::field(array('titre[]'), 80, 256, htmlspecialchars($titre, ENT_QUOTES)) . '<br /><br />';\r
-                       $res .= form::textarea(array('description[]'), 80, 2, $description);\r
-                       $res .= '</div>';\r
-\r
-                       $res .= '</div>';\r
-               }\r
-\r
-               $res .= '</div>';\r
-               $res .= '</div>';\r
-               $res .= '<div id="devisBottom">' . cubeMedia::spacer(10, 10) . '</div>';\r
-               $res .= '<div class="right"><a href="#" class="submit">' . $core->typo->BoutonOK('Enregistrer et prévisualiser') . '</a></div>';\r
-               $res .= '</form>';\r
-               $res .= '</div>';\r
-               return $res;\r
-       }\r
-\r
-       public static function previewFacture($args)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $dao = new extranetDAOFacture($core->con);\r
-               $facture = $dao->selectById($args[1]);\r
-\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<iframe src="' . SITE_PATH . 'voirfacture/' . $facture->facture_id . '" width="960" height="1000" frameborder="0"></iframe>';\r
-\r
-               $res .= '<div class="right">' . '<a href="' . SITE_PATH . 'editefacture/' . $facture->facture_id . '">' . $core->typo->BoutonOK(__('Editer la facture')) . '</a> ';\r
-               if ($facture->status == 0) {\r
-                       $res .= '<a href="#" rel="valideFacture/' . $facture->facture_id . '" class="ajax" title="' . __("La facture est sur le point d'être validée. Elle ne sera plus éditable. Veuillez confirmer votre choix ?") . '">' . $core->typo->BoutonOK(__('Valider la facture')) . '</a>';\r
-               } else {\r
-                       $res .= '<a href="' . SITE_PATH . 'factures">' . $core->typo->BoutonOK(__('Valider la facture')) . '</a>';\r
-               }\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function formPrintFactures()\r
-       {\r
-               global $core;\r
-               $last = $core->user->getLastPrint();\r
-               $res = '';\r
-               if ($last['date']) {\r
-                       $res .= '<tr><td>' . __('Dernière factures imprimées') . ' : </td><td>' . __('Factures') . ' <a href="' . SITE_PATH . 'voirfacture/print_' . $core->user->utilisateur_id . '_' . $last['date'] . '" class="popupA4">' . $last['pages'] . ' (' . date('Y-m-d', $last['date']) . ')</a></td></tr>';\r
-               }\r
-               $res .= '<tr><td>' . __('Factures à imprimer') . '</td><td>' . form::field('factures', 20, 64) . '</td></tr>';\r
-               $res .= '<tr><td colspan="2"><em>' . __('Ex') . ' : 1;3-5;7;9 ' . __('signifie factures') . ' 1,3,4,5,7,9</em></td></tr>';\r
-               return $res;\r
-       }\r
-}\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/extranet/Controlleur/url/class.extranet.url.projet.php b/inc/extranet/Controlleur/url/class.extranet.url.projet.php
deleted file mode 100644 (file)
index 98271f0..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php\r
-\r
-class extranetUrlProjet {\r
-       public static function projets($args)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-\r
-               $settings = $core->user->getSettings('projets');\r
-\r
-               $shortcuts = array();\r
-               $shortcuts[] = '<a href="#" class="popup" rel="formProjet/new">' . $core->typo->Ajouter('Créer un projet') . '</a>';\r
-\r
-               $filtres = array();\r
-               $filtres[] = new commonFiltre(__('Crée par'), 'equipier', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Status'), 'status_projet', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Année'), 'annee', $settings['filtres']);\r
-\r
-               $res = commonPage::barre($filtres, 'filtreProjet', 'projets', $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeProjets">';\r
-               $res .= self::listeProjets();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeProjets($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $settings = is_null($settings)?$core->user->getSettings('projets'):$settings;\r
-               $change = is_null($dashboard)?'Projet':'Dashboard/' . $dashboard;\r
-\r
-               $res = '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Année'), 'annee_fin', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Chef'), 'chef', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Facturé'), 'rapport_facturation', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Payé'), 'rapport_paiement', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby('<abbr title="' . __('Budget') . '">B</abbr>', 'budget', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby('<abbr title="' . __('Progression') . '">Pr</abbr>', 'progression', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="min"></th></tr>';\r
-\r
-               $dao = new extranetDAOProjet($core->con);\r
-               $dao->setFiltres($settings['filtres']);\r
-               if (isset($settings['search']) && !is_null($settings['search'])) {\r
-                       $dao->setSearch($settings['search']);\r
-               }\r
-               $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
-\r
-               $i = 0;\r
-               foreach($liste as $projet) {\r
-                       $droits = extranetDroits::projet($projet, false);\r
-\r
-                       $projet->progression = !$projet->progression?'-':$projet->progression . '%';\r
-                       $projet->jours_prevus = !$projet->jours_prevus?'-':$projet->jours_prevus;\r
-                       $projet->jours_consommes = !$projet->jours_consommes?'-':$projet->jours_consommes;\r
-\r
-                       $projet->budget = !$projet->budget || !$droits?'-':$projet->budget;\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $projet->projet_id . '</td>';\r
-                       $res .= '<td>' . $projet->nom . '</td>';\r
-                       $res .= '<td>' . $projet->client . '</td>';\r
-                       $res .= '<td>' . $projet->annee_fin . '</td>';\r
-                       $res .= '<td>' . $projet->chef . '</td>';\r
-                       if ($droits) {\r
-                               $res .= '<td><a href="#" class="ajax" rel="changeProjetsStatus/' . $projet->projet_id . '" title="' . __('Modifier le status du projet') . '">' . $core->projets_status[$projet->status] . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td>' . $core->projets_status[$projet->status] . '</td>';\r
-                       }\r
-\r
-                       $rf = $projet->rapport_facturation;\r
-                       if ($projet->budget == '-') {\r
-                               $rapport_facturation = '-';\r
-                       } elseif (!$rf) {\r
-                               $rapport_facturation = __('Non');\r
-                       } elseif ($rf == 1) {\r
-                               $rapport_facturation = __('Oui');\r
-                       } elseif ($rf < 1) {\r
-                               $rapport_facturation = __('Partie');\r
-                       } elseif ($rf > 1) {\r
-                               $rapport_facturation = __('Trop');\r
-                       }\r
-\r
-                       $rp = $projet->rapport_paiement;\r
-                       if ($projet->budget == '-') {\r
-                               $rapport_paiement = '-';\r
-                       } elseif (!$rp) {\r
-                               $rapport_paiement = __('Non') ;\r
-                       } elseif ($rp == 1) {\r
-                               $rapport_paiement = __('Oui');\r
-                       } elseif ($rp < 1) {\r
-                               $rapport_paiement = __('Partie');\r
-                       } elseif ($rp > 1) {\r
-                               $rapport_paiement = __('Trop');\r
-                       }\r
-\r
-                       $res .= '<td>';\r
-                       if ($projet->status == 1 && !$rf) {\r
-                               $res .= '<a href="' . SITE_PATH . 'editefacture/new/' . $projet->projet_id . '" title="' . __('Créer la facture pour ce projet') . '">' . $rapport_facturation . '</a>';\r
-                       } else {\r
-                               $res .= $rapport_facturation;\r
-                       }\r
-                       $res .= '</td>';\r
-                       $res .= '<td>' . $rapport_paiement . '</td>';\r
-\r
-                       $res .= '<td>' . $projet->budget . '</td>';\r
-                       // $res .= '<td>' . $projet->jours_prevus . '</td>';\r
-                       // $res .= '<td>' . $projet->jours_consommes . '</td>';\r
-                       $res .= '<td>' . $projet->progression . '</td>';\r
-                       $res .= '<td><a href="' . SITE_PATH . 'projet/' . $projet->projet_id . '">' . cubeMedia::image(IMG . '/view.png') . '</a></td>';\r
-\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="11">';\r
-                       $res .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets'));\r
-                       $res .= '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function projet($args)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-\r
-               $shortcuts = array();\r
-               $shortcuts[] = '<a href="#" class="popup" rel="formTacheNormale/new/' . $args[1] . '">' . $core->typo->Ajouter('Créer une tâche') . '</a>';\r
-               $shortcuts[] = '<a href="#" class="popup" rel="formTacheSousTraitee/new/' . $args[1] . '">' . $core->typo->Ajouter('Créer une tâche sous-traitée') . '</a>';\r
-\r
-               $res = commonPage::barre(null, null, null, $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeProjet">';\r
-               $res .= self::listeProjet($args[1]);\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeProjet($projet_id)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-\r
-               $res = '<table class="liste">';\r
-               $res .= '<tr><th>#</th>';\r
-               $res .= '<th><strong>' . __('Projet') . '</strong> / ' . __('Tâche') . '</th>';\r
-               $res .= '<th><strong>' . __('Client') . '</strong> / ' . __('Catégorie') . '</th>';\r
-               $res .= '<th>' . __('Année') . '</th>';\r
-               $res .= '<th>' . __('Chef de projet') . '</th>';\r
-               $res .= '<th>' . __('Status') . '</th>';\r
-               $res .= '<th><abbr title="' . __('Budget') . '">B</abbr></th>';\r
-               $res .= '<th><abbr title="' . __('Jours prévus') . '">Pl</abbr></th>';\r
-               $res .= '<th><abbr title="' . __('Jours consommés') . '">Co</abbr></th>';\r
-               $res .= '<th><abbr title="' . __('Progression') . '">Pr</abbr></th>';\r
-               $res .= '<th class="min"></th><th class="min"></th></tr>';\r
-\r
-               $dao = new extranetDAOProjet($core->con);\r
-               $projet = $dao->selectById($projet_id);\r
-\r
-               $hasFacture = $dao->hasFacture($projet_id);\r
-\r
-               $droits = extranetDroits::projet($projet, false);\r
-\r
-               $projet->progression = !$projet->progression?'-':$projet->progression . '%';\r
-               $projet->jours_prevus = !$projet->jours_prevus?'-':$projet->jours_prevus;\r
-               $projet->jours_consommes = !$projet->jours_consommes?'-':$projet->jours_consommes;\r
-\r
-               $projet->budget = !$projet->budget || !$droits?'-':$projet->budget;\r
-\r
-               $res .= '<tr class="bold">';\r
-               $res .= '<td>' . $projet->projet_id . '</td>';\r
-               $res .= '<td>' . $projet->nom . '</td>';\r
-               $res .= '<td>' . $projet->client . '</td>';\r
-               $res .= '<td>' . $projet->annee_fin . '</td>';\r
-               $res .= '<td>' . $projet->chef . '</td>';\r
-               if ($droits) {\r
-                       $res .= '<td><a href="#" class="ajax" rel="changeProjetStatus/' . $projet->projet_id . '" title="' . __('Modifier le status du projet') . '">' . $core->projets_status[$projet->status] . '</a></td>';\r
-               } else {\r
-                       $res .= '<td>' . $core->projets_status[$projet->status] . '</td>';\r
-               }\r
-               $res .= '<td>' . $projet->budget . '</td>';\r
-               $res .= '<td>' . $projet->jours_prevus . '</td>';\r
-               $res .= '<td>' . $projet->jours_consommes . '</td>';\r
-               $res .= '<td>' . $projet->progression . '</td>';\r
-               if ($droits) {\r
-                       $res .= '<td class="action"><a href="#" class="popup" rel="formProjet/' . $projet->projet_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                       if (!count($projet->taches) && !$hasFacture) {\r
-                               $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeProjet/' . $projet->projet_id . '" title="' . __('Êtes vous certain de vouloir supprimer ce projet ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\r
-               } else {\r
-                       $res .= '<td></td><td></td>';\r
-               }\r
-               $res .= '</tr>';\r
-               $i = 1;\r
-               foreach($projet->taches as $tache) {\r
-                       $tache->budget = !$tache->budget || !$droits?'-':$tache->budget;\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>T' . $i . '</td>';\r
-                       $res .= '<td>' . $tache->nom . '</td>';\r
-                       $res .= '<td>' . $core->categories[$tache->categorie] . '</td>';\r
-                       $res .= '<td></td>';\r
-                       $res .= '<td></td>';\r
-                       $res .= '<td></td>';\r
-                       $res .= '<td>' . $tache->budget . '</td>';\r
-\r
-                       if ($tache instanceof extranetTacheNormale) {\r
-                               $progression = !$tache->progression?'-':$tache->progression . '%';\r
-                               $jours_prevus = !$tache->jours_prevus?'-':$tache->jours_prevus;\r
-                               $jours_consommes = !$tache->jours_consommes?'-':$tache->jours_consommes;\r
-                               $res .= '<td>' . $jours_prevus . '</td>';\r
-                               $res .= '<td>' . $jours_consommes . '</td>';\r
-                               $res .= '<td>' . $progression . '</td>';\r
-                               if ($droits) {\r
-                                       $res .= '<td class="action"><a href="#" class="popup" rel="formTacheNormale/' . $tache->tache_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td></td>';\r
-                               }\r
-                       } else {\r
-                               $res .= '<td colspan="3">' . __('Tâche sous-traitée') . '</td>';\r
-                               if ($droits) {\r
-                                       $res .= '<td class="action"><a href="#" class="popup" rel="formTacheSousTraitee/' . $tache->tache_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td></td>';\r
-                               }\r
-                       }\r
-\r
-                       $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeTache/' . $tache->tache_id . '" title="' . __('Supprimer cette tâche va également supprimer les timereports associés. Êtes vous certain de vouloir supprimer cette tâche ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
-\r
-                       $res .= '</tr>';\r
-                       $i++;\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function formProjet($projet_id = 'new')\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-\r
-               $dao = new extranetDAOProjet($core->con);\r
-               if ($projet_id == 'new') {\r
-                       $projet = $dao->cree($core->user->utilisateur_id);\r
-               } else {\r
-                       $projet = $dao->selectById($projet_id);\r
-               }\r
-\r
-               $daoClient = new commonDAOClient($core->con);\r
-               $clients = $daoClient->getListe();\r
-\r
-               $listeClients = array();\r
-               foreach($clients as $client) {\r
-                       $listeClients[$client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'] = $client->utilisateur_id;\r
-               }\r
-               ksort($listeClients);\r
-\r
-               $daoEquipier = new commonDAOEquipier($core->con);\r
-               $equipiers = $daoEquipier->getListe();\r
-\r
-               $listeEquipiers = array();\r
-               foreach($equipiers as $equipier) {\r
-                       $listeEquipiers[$equipier->prenom . ' ' . $equipier->nom . ' (' . $equipier->agence . ')'] = $equipier->utilisateur_id;\r
-               }\r
-\r
-               $daoDevis = new extranetDAODevis($core->con);\r
-               $devis = $daoDevis->getListeValidesLibres($projet_id);\r
-               $listeDevis = array('--' => 0);\r
-               foreach($devis as $id => $dev) {\r
-                       $listeDevis[$dev->nom] = $dev->devis_id;\r
-               }\r
-\r
-               $res = '<tr><td>' . __('Numéro de projet') . '</td><td>' . form::hidden('projet_id', $projet->projet_id) . '' . $projet->projet_id . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Nom du projet') . '</td><td>' . form::textarea('nom', 50, 3, html::escapeHTML($projet->nom)) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Chef de projet') . '</td><td>';\r
-               if ($core->user->grade > 1) {\r
-                       $res .= form::combo('chef', $listeEquipiers, $projet->chef_id);\r
-               } else {\r
-                       $res .= form::hidden('chef', $projet->chef_id) . ' ' . $projet->chef;\r
-               }\r
-               $res .= '</td></tr>';\r
-               $res .= '<tr><td>' . __('Date de début') . '</td><td>' . cubeForm::dateFree('date_debut', $projet->date_debut) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Deadline') . '</td><td>' . cubeForm::dateFree('deadline', $projet->deadline) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Date de fin') . '</td><td>' . cubeForm::dateFree('date_fin', $projet->date_fin) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Client') . '</td><td>' . form::combo('client', $listeClients, $projet->client_id) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Devis') . '</td><td>' . form::combo('devis', $listeDevis, $projet->devis) . '</td></tr>';\r
-               return $res;\r
-       }\r
-\r
-       public static function formTache($tache)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-\r
-               $res = '<tr><td>' . __('Numéro de tâche') . '</td><td>' . form::hidden('projet', $tache->projet) . form::hidden('tache_id', $tache->tache_id) . '' . $tache->tache_id . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Catégorie') . '</td><td>' . form::combo('categorie', array_flip($core->categories), $tache->categorie) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Nom') . '</td><td>' . form::textarea('nom', 50, 3, html::escapeHTML($tache->nom)) . '</td></tr>';\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function formTacheNormale($tache_id, $projet_id = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $dao = new extranetDAOTache($core->con);\r
-               if ($tache_id == 'new') {\r
-                       $tache = $dao->creeNormale();\r
-                       $tache->projet = $projet_id;\r
-               } else {\r
-                       $tache = $dao->selectById($tache_id);\r
-               }\r
-               $res = self::formTache($tache);\r
-               $res .= '<tr><td>' . __('Taux journalier') . '</td><td>' . form::field('taux_journalier', 6, 6, $tache->taux_journalier) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Budget') . '</td><td>' . form::hidden('type', '0') . form::field('budget', 6, 6, $tache->budget) . '</td></tr>';\r
-               return $res;\r
-       }\r
-\r
-       public static function formTacheSousTraitee($tache_id, $projet_id = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $dao = new extranetDAOTache($core->con);\r
-               if ($tache_id == 'new') {\r
-                       $tache = $dao->creeSousTraitee();\r
-                       $tache->projet = $projet_id;\r
-               } else {\r
-                       $tache = $dao->selectById($tache_id);\r
-               }\r
-               $res = self::formTache($tache);\r
-               $res .= '<tr><td>' . __('Budget') . '</td><td>' . form::hidden('type', '1') . form::field('budget', 6, 6, $tache->budget) . '</td></tr>';\r
-               return $res;\r
-       }\r
-}\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/extranet/Controlleur/url/class.extranet.url.timereport.php b/inc/extranet/Controlleur/url/class.extranet.url.timereport.php
deleted file mode 100644 (file)
index 946dad6..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php\r
-\r
-class extranetUrlTimereport {\r
-       public static function timereport($args)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               $settings = $core->user->getSettings('timereport');\r
-               $filtres = array();\r
-               $filtres[] = new commonFiltre(__('Participants'), 'equipier_participe', $settings['filtres']);\r
-               $res = commonPage::barre($filtres, 'filtreTimereport', 'timereport', null);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeTimereport">';\r
-               $res .= self::listeTimereport();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeTimereport($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(1);\r
-               // Récupère la liste des projets\r
-               $settings = is_null($settings)?$core->user->getSettings('timereport'):$settings;\r
-               $change = is_null($dashboard)?'Timereport':'Dashboard/' . $dashboard;\r
-\r
-               $dao = new extranetDAOProjet($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->getProjetsForTimereport($settings['orderby'], $settings['sens'], $settings['limit'], $core->user->utilisateur_id);\r
-               // Extrait la liste des tâches\r
-               $taches = array();\r
-               foreach($liste as $id => $projet) {\r
-                       foreach($projet->taches as $tache) {\r
-                               if ($tache instanceof extranetTacheNormale) {\r
-                                       $taches[] = $tache->tache_id;\r
-                               }\r
-                       }\r
-               }\r
-               // Fixe les limites des jours à afficher\r
-               $time = cubeDate::round(null, 'd'); // aujourd'hui\r
-               $avant = $time - (3600 * 24 * 15); // 15 jours avant\r
-               $apres = $time; // aujourd'hui\r
-               // Récupère la liste des timereports à afficher\r
-               $daoTimereport = new extranetDAOTimereport($core->con);\r
-               $timereports = $daoTimereport->getListe($taches, $core->user->utilisateur_id, array('start' => $avant, 'end' => $apres));\r
-               // Affiche le tableau\r
-               $res = '<table class="liste listeTimereport">';\r
-               $res .= '<tr><th class="normal">' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="normal">' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="normal">' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '</th>';\r
-               for($date = $avant;$date <= $apres;$date += 3600 * 24) {\r
-                       $res .= '<th>' . date('d', $date) . '' . cubeMedia::spacer(16, 1, '', 'spacer') . '</th>';\r
-               }\r
-               $res .= '<th class="normal info">' . commonUrl::orderby('<abbr title="' . __('Progression') . '">Pr</abbr>', 'progression', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="normal info">' . commonUrl::orderby('<abbr title="' . __('Jours consommés') . '">Co</abbr>', 'jours_consommes', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="normal info">' . commonUrl::orderby('<abbr title="' . __('Jours prévus') . '">Pl</abbr>', 'jours_prevus', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '</tr>';\r
-\r
-               foreach($liste as $projet) {\r
-                       $res .= '<tr class="bold">';\r
-                       $res .= '<td class="normal">' . $projet->projet_id . '</td>';\r
-                       $res .= '<td class="normal">' . $projet->nom . '</td>';\r
-                       $res .= '<td class="normal">' . $projet->client . '</td>';\r
-                       for($date = $avant;$date <= $apres;$date += 3600 * 24) {\r
-                               $cc = self::getClassOfDay($date);\r
-                               $class = ($cc == '')?'':' class="' . $cc . '"';\r
-                               $res .= '<td' . $class . '></td>';\r
-                       }\r
-                       $projet->progression = !$projet->progression?'-':$projet->progression . '%';\r
-                       $projet->jours_prevus = !$projet->jours_prevus?'-':$projet->jours_prevus;\r
-                       $projet->jours_consommes = !$projet->jours_consommes?'-':$projet->jours_consommes;\r
-                       $res .= '<td class="normal info"><span id="progress_projet_' . $projet->projet_id . '">' . $projet->progression . '</span></td>';\r
-                       $res .= '<td class="normal info"><span id="consommees_projet_' . $projet->projet_id . '">' . $projet->jours_consommes . '</span></td>';\r
-                       $res .= '<td class="normal info">' . $projet->jours_prevus . '</td>';\r
-                       $res .= '</tr>';\r
-                       $i = 1;\r
-                       foreach($projet->taches as $tache) {\r
-                               if ($tache instanceof extranetTacheNormale) {\r
-                                       $res .= '<tr class="odd">';\r
-                                       $res .= '<td class="normal">T' . $i . '</td>';\r
-                                       $res .= '<td class="normal">' . $tache->nom . '</td>';\r
-                                       $res .= '<td class="normal">' . $core->categories[$tache->categorie] . '</td>';\r
-                                       for($date = $avant;$date <= $apres;$date += (3600 * 24)) {\r
-                                               $hh = isset($timereports[$tache->tache_id][$date])?$timereports[$tache->tache_id][$date]->heures:'';\r
-                                               $c = ($hh == '')?'':'filled';\r
-                                               $cc = trim(self::getClassOfDay($date) . ' ' . $c);\r
-                                               $class = ($cc == '')?'':' class="' . $cc . '"';\r
-                                               $res .= '<td' . $class . '>' . form::field(array('timereport', 't_' . $date . '_' . $tache->tache_id), 1, 2, $hh, 'timereport_field') . '</td>';\r
-                                       }\r
-                                       $tache->progression = !$tache->progression?'-':$tache->progression . '%';\r
-                                       $tache->jours_prevus = !$tache->jours_prevus?'-':$tache->jours_prevus;\r
-                                       $tache->jours_consommes = !$tache->jours_consommes?'-':$tache->jours_consommes;\r
-                                       $res .= '<td class="normal info"><span id="progress_' . $tache->tache_id . '">' . $tache->progression . '</span></td>';\r
-                                       $res .= '<td class="normal info"><span id="consommees_' . $tache->tache_id . '">' . $tache->jours_consommes . '</span></td>';\r
-                                       $res .= '<td class="normal info">' . $tache->jours_prevus . '</td>';\r
-                                       $res .= '</tr>';\r
-                                       $i++;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if (!isset($settings['search']) || is_null($settings['search'])) {\r
-                       $res .= '<tr><td colspan="22"> ';\r
-                       $res .= commonPage::pager($settings['page'], $dao->countActifs(), $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets'));\r
-                       $res .= ' </td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function getClassOfDay($date)\r
-       {\r
-               $aujourdhui = cubeDate::round(null, 'd');\r
-               $highlight = ($date == $aujourdhui);\r
-               $we = (date('N', $date) >= 6);\r
-               if ($highlight) {\r
-                       return 'highlight';\r
-               }\r
-               if ($we) {\r
-                       return 'we';\r
-               }\r
-               return '';\r
-       }\r
-}\r
-\r
-?>
\ No newline at end of file
index e0e838ecca83deacaf565e2a4baf9a8a61235394..551049511d73624e77cb91ed4c67995126f66101 100644 (file)
@@ -1,6 +1,5 @@
 <?php\r
 include_once(dirname(__FILE__) . '/packager/_common.php');\r
-include_once(dirname(__FILE__) . '/url/_common.php');\r
 // Workshop\r
 $__autoload['wsFlash'] = dirname(__FILE__) . '/class.ws.flash.php';\r
 $__autoload['wsAjax'] = dirname(__FILE__) . '/class.ws.ajax.php';\r
index cb26b325c06ac65c554424c4f0b403c46b555fb9..3684b7771119e85043d5a9a9aa4bc8538fbfe86e 100644 (file)
@@ -7,11 +7,11 @@ class wsAjax extends cubeAjax {
                if ($args[1] == 'new') {\r
                        $extra = '';\r
                } else {\r
-                       $extra = '<p><br /><br /><br /></p><div id="listeContacts">' . wsUrlClient::listeContacts($args[1]) . '</div>';\r
+                       $extra = '<p><br /><br /><br /></p><div id="listeContacts">' . wsUrl::listeContacts($args[1]) . '</div>';\r
                }\r
                $extra .= '<p class="right" style="margin-top:10px;margin-right:10px;"><br /><br /><a href="#" class="submit">' . $core->typo->BoutonOK(__('Enregistrer')) . '</a><br /><br /></p>';\r
 \r
-               commonAjax::form('saveClient', __("Edition d'un client"), wsUrlClient::formClient($args[1]), false, 2, '', $extra);\r
+               commonAjax::form('saveClient', __("Edition d'un client"), wsUrl::formClient($args[1]), false, 2, '', $extra);\r
        }\r
 \r
        public static function formContact($args, &$x)\r
@@ -19,7 +19,7 @@ class wsAjax extends cubeAjax {
                if (!isset($args[2])) {\r
                        $args[2] = null;\r
                }\r
-               commonAjax::form('saveContact', __("Edition d'un contact"), wsUrlClient::formContact($args[1], $args[2]));\r
+               commonAjax::form('saveContact', __("Edition d'un contact"), wsUrl::formContact($args[1], $args[2]));\r
        }\r
 \r
        public static function saveClient($args, &$x)\r
@@ -55,7 +55,7 @@ class wsAjax extends cubeAjax {
 \r
                $core->refreshWSUsersTree();\r
 \r
-               $x->addContent('listeClients', wsUrlClient::listeClients());\r
+               $x->addContent('listeClients', wsUrl::listeClients());\r
                $x->addClosePopup();\r
        }\r
 \r
@@ -65,9 +65,9 @@ class wsAjax extends cubeAjax {
                $dao = new commonDAOClient($core->con);\r
                $client = $dao->sauve($_POST);\r
                $x->addClosePopup();\r
-               $x->addContent('devisAdresseDisplay', wsUrlClient::adresse($client->utilisateur_id, null, 'devis'));\r
-               $x->addContent('factureAdresseDisplay', wsUrlClient::adresse($client->utilisateur_id, null, 'facture'));\r
-               $x->addContent('listeContacts', wsUrlClient::listeContacts($client->entreprise));\r
+               $x->addContent('devisAdresseDisplay', wsUrl::adresse($client->utilisateur_id, null, 'devis'));\r
+               $x->addContent('factureAdresseDisplay', wsUrl::adresse($client->utilisateur_id, null, 'facture'));\r
+               $x->addContent('listeContacts', wsUrl::listeContacts($client->entreprise));\r
                $contacts = array();\r
                $client_contacts = $dao->getContactsOfEntreprise($client->entreprise);\r
                foreach($client_contacts as $c) {\r
@@ -89,30 +89,30 @@ class wsAjax extends cubeAjax {
 \r
                $core->refreshWSUsersTree();\r
 \r
-               $x->addContent('listeClients', wsUrlClient::listeClients());\r
+               $x->addContent('listeClients', wsUrl::listeClients());\r
        }\r
 \r
        public static function searchClients($args, &$x)\r
        {\r
-               $x->addContent('listeClients', wsUrlClient::listeClients());\r
+               $x->addContent('listeClients', wsUrl::listeClients());\r
        }\r
 \r
        public static function sortClient($args, &$x)\r
        {\r
                commonAjax::sort('clients', $args[1]);\r
-               $x->addContent('listeClients', wsUrlClient::listeClients());\r
+               $x->addContent('listeClients', wsUrl::listeClients());\r
        }\r
 \r
        public static function pageClient($args, &$x)\r
        {\r
                commonAjax::page('clients', $args[1]);\r
-               $x->addContent('listeClients', wsUrlClient::listeClients());\r
+               $x->addContent('listeClients', wsUrl::listeClients());\r
        }\r
 \r
        public static function parPageClient($args, &$x)\r
        {\r
                commonAjax::parPage('clients', $_POST['par_page']);\r
-               $x->addContent('listeClients', wsUrlClient::listeClients());\r
+               $x->addContent('listeClients', wsUrl::listeClients());\r
        }\r
 \r
        public static function supprimeBook($args, &$x)\r
@@ -120,40 +120,40 @@ class wsAjax extends cubeAjax {
                global $core;\r
                $dao = new wsDAOBook($core->con);\r
                $dao->supprime($args[1]);\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function searchPublications($args, &$x)\r
        {\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function pageBooks($args, &$x)\r
        {\r
                commonAjax::page('books', $args[1]);\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function parPageBooks($args, &$x)\r
        {\r
                commonAjax::parPage('books', $_POST['par_page']);\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function sortBooks($args, &$x)\r
        {\r
                commonAjax::sort('books', $args[1]);\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function newBookForm($args, &$x)\r
        {\r
-               commonAjax::form('newBook', __("Créer une nouvelle publication à partir d'une existante"), wsUrlBook::chooseExistingBook(), __('Créer une nouvelle publication'), 3);\r
+               commonAjax::form('newBook', __("Créer une nouvelle publication à partir d'une existante"), wsUrl::chooseExistingBook(), __('Créer une nouvelle publication'), 3);\r
        }\r
 \r
        public static function formChangeBookProprietaire($args, &$x)\r
        {\r
-               commonAjax::form('changeBookProprietaire/' . $args[1], __("Modifier le propriétaire de la publication"), wsUrlBook::changeBookProprietaire($args[1]), __('Enregistrer'), 3);\r
+               commonAjax::form('changeBookProprietaire/' . $args[1], __("Modifier le propriétaire de la publication"), wsUrl::changeBookProprietaire($args[1]), __('Enregistrer'), 3);\r
        }\r
 \r
        public static function filtreBooks($args, &$x)\r
@@ -164,7 +164,7 @@ class wsAjax extends cubeAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('books', $_POST);\r
-                       $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+                       $x->addContent('listeBooks', wsUrl::listeBooks());\r
                }\r
        }\r
 \r
@@ -179,7 +179,7 @@ class wsAjax extends cubeAjax {
                }\r
 \r
                $x->addClosePopup();\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
                $x->addTruePopup(SITE_PATH . 'editor/' . $book->book_id);\r
        }\r
 \r
@@ -194,7 +194,7 @@ class wsAjax extends cubeAjax {
                $dao = new wsDAOBook($core->con);\r
                $dao->setProprietaire($args[1], $_POST['proprietaire']);\r
                $x->addClosePopup();\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function downbook($args, &$x)\r
@@ -218,7 +218,7 @@ class wsAjax extends cubeAjax {
                        if ($book->status < 1) {\r
                                $popup = commonAjax::form('downbook/' . $book_id . '/' . $version,\r
                                        __('Téléchargement du Fluidbook'),\r
-                                       wsUrlBook::valideDownload($book_id, $version),\r
+                                       wsUrl::valideDownload($book_id, $version),\r
                                        __('Télécharger'), 2, '', '', true);\r
 \r
                                $x->addOpenPopup($popup);\r
@@ -244,12 +244,12 @@ class wsAjax extends cubeAjax {
                $daoBook = new wsDAOBook($core->con);\r
                $daoBook->setStatus($book_id, $status);\r
 \r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function formBookChooseProject($book_id)\r
        {\r
-               return commonAjax::form('bookChooseProject', __("Selection d'un projet"), wsUrlBook::chooseBookProject($book_id), __('Suivant'), 3, '', '', true);\r
+               return commonAjax::form('bookChooseProject', __("Selection d'un projet"), wsUrl::chooseBookProject($book_id), __('Suivant'), 3, '', '', true);\r
        }\r
 \r
        public static function bookChooseProject($args, &$x)\r
@@ -286,7 +286,7 @@ class wsAjax extends cubeAjax {
 \r
        public static function formBookChooseTache($book_id, $project)\r
        {\r
-               return commonAjax::form('bookChooseTache', __("Selection d'une tâche"), wsUrlBook::chooseBookTache($book_id, $project), __('Enregistrer'), 3, '', '', true);\r
+               return commonAjax::form('bookChooseTache', __("Selection d'une tâche"), wsUrl::chooseBookTache($book_id, $project), __('Enregistrer'), 3, '', '', true);\r
        }\r
 \r
        public static function bookChooseTache($args, &$x)\r
@@ -334,12 +334,12 @@ class wsAjax extends cubeAjax {
                $daoBook->setTache($book_id, $tache);\r
 \r
                $x->addClosePopup();\r
-               $x->addContent('listeBooks', wsUrlBook::listeBooks());\r
+               $x->addContent('listeBooks', wsUrl::listeBooks());\r
        }\r
 \r
        public static function changeLang($args, &$x)\r
        {\r
-               $x->addContent('formLang', wsUrlTraduction::formLang($_POST['lang']));\r
+               $x->addContent('formLang', wsUrl::formLang($_POST['lang']));\r
        }\r
 \r
        public static function saveLang($args, &$x)\r
@@ -498,25 +498,25 @@ class wsAjax extends cubeAjax {
 \r
        public static function searchDemandes($args, &$x)\r
        {\r
-               $x->addContent('listeDemandes', wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes', wsUrl::listeDemandes());\r
        }\r
 \r
        public static function sortDemandes($args, &$x)\r
        {\r
                commonAjax::sort('demandes', $args[1]);\r
-               $x->addContent('listeDemandes', wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes', wsUrl::listeDemandes());\r
        }\r
 \r
        public static function pageDemandes($args, &$x)\r
        {\r
                commonAjax::page('demandes', $args[1]);\r
-               $x->addContent('listeDemandes', wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes', wsUrl::listeDemandes());\r
        }\r
 \r
        public static function parPageDemandes($args, &$x)\r
        {\r
                commonAjax::parPage('demandes', $_POST['par_page']);\r
-               $x->addContent('listeDemandes', wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes', wsUrl::listeDemandes());\r
        }\r
 \r
        public static function supprimeDemande($args, &$x)\r
@@ -527,7 +527,7 @@ class wsAjax extends cubeAjax {
                $dao = new wsDAODemande($core->con);\r
                $dao->supprime($demande_id);\r
 \r
-               $x->addContent('listeDemandes', wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes', wsUrl::listeDemandes());\r
        }\r
 \r
        public static function filtreDemandes($args, &$x)\r
@@ -538,7 +538,7 @@ class wsAjax extends cubeAjax {
                        return;\r
                } else {\r
                        commonAjax::filtre('demandes', $_POST);\r
-                       $x->addContent('listeDemandes', wsUrlDemande::listeDemandes());\r
+                       $x->addContent('listeDemandes', wsUrl::listeDemandes());\r
                }\r
        }\r
 \r
@@ -547,7 +547,7 @@ class wsAjax extends cubeAjax {
                if (!isset($args[2])) {\r
                        $args[2] = null;\r
                }\r
-               commonAjax::form('saveDemande', __("Edition d'une demande"), wsUrlDemande::formDemande($args[1], $args[2]));\r
+               commonAjax::form('saveDemande', __("Edition d'une demande"), wsUrl::formDemande($args[1], $args[2]));\r
        }\r
 \r
        public static function saveDemande($args, &$x)\r
@@ -566,7 +566,7 @@ class wsAjax extends cubeAjax {
                        $demande = $dao->setRevendeur($_POST['demande_id'], $_POST['revendeur']);\r
                }\r
 \r
-               $x->addContent('listeDemandes' , wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes' , wsUrl::listeDemandes());\r
                $x->addClosePopup();\r
        }\r
 \r
@@ -641,17 +641,15 @@ class wsAjax extends cubeAjax {
 \r
                if ($reponse == '0') {\r
                        $dao->reinitDemande($demande_id);\r
-               } elseif ($reponse == '1') {\r
+               } else {\r
                        $dao->accepteDemande($demande_id, $revendeur_id);\r
-               } elseif ($reponse == '-1') {\r
-                       $dao->setStatus($demande_id, 1);\r
                }\r
 \r
+               $x->addAlert(__('Votre choix a bien été prise en compte.'));\r
                if (!isset($args[4])) {\r
-                       $x->addAlert(__('Votre choix a bien été prise en compte.'));\r
                        $x->addRedirection(SITE_PATH);\r
                } else {\r
-                       $x->addContent('listeDemandes' , wsUrlDemande::listeDemandes());\r
+                       $x->addContent('listeDemandes' , wsUrl::listeDemandes());\r
                }\r
        }\r
 \r
@@ -663,7 +661,7 @@ class wsAjax extends cubeAjax {
 \r
                $dao = new wsDAODemande($core->con);\r
                $dao->reinitDemande($demande_id);\r
-               $x->addContent('listeDemandes' , wsUrlDemande::listeDemandes());\r
+               $x->addContent('listeDemandes' , wsUrl::listeDemandes());\r
        }\r
 }\r
 \r
index 2eedb13b0b1093d2deabeef16a594de6b9b08b5b..5b4ea8db8bb6f8cfdf3a65c950babf366b6e7ccf 100644 (file)
 <?php\r
 class wsUrl {\r
+       public static function publications($args)\r
+       {\r
+               global $core;\r
+\r
+               $settings = $core->user->getSettings('books');\r
+\r
+               $shortcuts = array();\r
+               if (wsDroits::creation()) {\r
+                       $shortcuts[] = '<a href="#" class="popup" rel="newBookForm">' . $core->typo->Ajouter(__('Créer une nouvelle publication')) . '</a>';\r
+               }\r
+\r
+               $filtres = array();\r
+               if (wsDroits::revendeur(false)) {\r
+                       $filtres[] = new commonFiltre(__('Status'), 'status_book', $settings['filtres']);\r
+               }\r
+               $filtres[] = new commonFiltre(__('Année'), 'annee_book', $settings['filtres']);\r
+               $res = commonPage::barre($filtres , 'filtreBooks', 'books', $shortcuts);\r
+               $res .= commonPage::tMain(null, true);\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeBooks">';\r
+               $res .= self::listeBooks();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeBooks($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+               cubePage::autocomplete();\r
+               cubePage::contextMenu();\r
+\r
+               $droits = wsDroits::getDroits();\r
+\r
+               commonDroits::min(1);\r
+               $settings = is_null($settings)?$core->user->getSettings('books'):$settings;\r
+               $change = is_null($dashboard)?'Books':'Dashboard/' . $dashboard;\r
+               $dao = new wsDAOBook($core->con);\r
+               $context_download_id = is_null($dashboard)?'contextDownloadBook':'contextDashboard_Download' . $dashboard;\r
+               $context_status_id = is_null($dashboard)?'contextStatusBook':'contextDashboard_Status' . $dashboard;\r
+\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'], $core->user);\r
+\r
+               $res = self::contextBookDownload($context_download_id);\r
+               $res = self::contextBookStatus($context_status_id);\r
+\r
+               $res .= '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'book_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Titre de la publication'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__(''), 'lang', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . __('Pages') . '</th>';\r
+               if ($droits->revendeur) {\r
+                       $res .= '<th>' . commonUrl::orderby(__('Proprietaire'), 'proprietaire_nom', $settings, 'sort' . $change) . '</th>';\r
+               } else {\r
+                       $res .= '<th>' . commonUrl::orderby(__('Proprietaire'), 'proprietaire_utilisateur', $settings, 'sort' . $change) . '</th>';\r
+               }\r
+               if ($droits->admin) {\r
+                       $res .= '<th>' . commonUrl::orderby(__('Facturation'), 'facturable', $settings, 'sort' . $change) . '</th>';\r
+               }\r
+               if ($droits->revendeur) {\r
+                       $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th>';\r
+               }\r
+               $res .= str_repeat('<th class="min"></th>', $droits->creation?5:4);\r
+               $res .= '</tr>';\r
+               $i = 0;\r
+\r
+               $btVoir = cubeMedia::cssRollover($core->typo->Voir('voir', '', false));\r
+               $btEdit = cubeMedia::cssRollover($core->typo->Editer('éditer', '', false));\r
+               $btStats = cubeMedia::cssRollover($core->typo->Stats('stats', '', false));\r
+               $btDownload = cubeMedia::cssRollover($core->typo->BookTelecharger('télécharger', '', false));\r
+               if ($droits->creation) {\r
+                       $btDel = cubeMedia::cssRollover($core->typo->Supprimer('suppr.', '', false));\r
+               }\r
+\r
+               foreach($liste as $id => $book) {\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $book->book_id . '</td>';\r
+                       $res .= '<td>' . $book->nom . '</td>';\r
+                       $res .= '<td>' . mb_strtoupper($book->lang) . '</td>';\r
+                       $res .= '<td>' . $book->parametres->pages . '</td>';\r
+\r
+                       if ($droits->revendeur) {\r
+                               $p = str_replace(" (", '<br />', $book->proprietaire);\r
+                               $p = trim($p, ')');\r
+                               $res .= '<td><a href="#" class="popup" rel="formChangeBookProprietaire/' . $book->book_id . '" title="' . __('Mofifier le proprietaire') . '">' . $p . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td>' . $book->proprietaire_utilisateur . '</td>';\r
+                       }\r
+                       if ($droits->admin) {\r
+                               $res .= '<td>' . $book->facturable . '</td>';\r
+                       }\r
+                       if ($droits->revendeur) {\r
+                               if ($droits->admin || $book->status <= 1) {\r
+                                       $p = '';\r
+                                       if (!is_null($book->projet)) {\r
+                                               $p = ' <a href="' . EXTRANET_URL . '/projet/' . $book->projet . '" title="' . __('Voir les détails du projet') . '" class="blank icon">' . cubeMedia::silk('arrow_right.png') . '</a>';\r
+                                       }\r
+\r
+                                       $res .= '<td><a href="#" class="openContextMenu" rel="' . $context_status_id . '" rev="' . $book->book_id . '">' . $core->books_status[$book->status] . '</a>' . $p . '</td>';\r
+                               } else if ($book->status > 1) {\r
+                                       $res .= '<td>' . $core->books_status[1] . '</td>';\r
+                               }\r
+                       }\r
+                       $res .= '<td class="bouton"><a class="popupFS" rel="toolbar=yes" rev="viewer_' . $book->book_id . '" href="' . SITE_PATH . 'viewer/' . $book->book_id . '_' . $book->hash . '/">' . $btVoir . '</a></td>';\r
+                       $res .= '<td class="bouton"><a class="popupFS" rel="toolbar=yes" rev="editor_' . $book->book_id . '" href="' . SITE_PATH . 'editor/' . $book->book_id . '">' . $btEdit . '</a></td>';\r
+                       $res .= '<td class="bouton"><a href="' . SITE_PATH . 'stats/' . $book->book_id . '">' . $btStats . '</a></td>';\r
+                       $res .= '<td class="bouton"><a href="#" class="openContextMenu" rel="' . $context_download_id . '" rev="' . $book->book_id . '">' . $btDownload . '</a></td>';\r
+                       if ($droits->creation) {\r
+                               $res .= '<td class="bouton"><a href="#" rel="supprimeBook/' . $book->book_id . '" class="ajax" title="' . __('Êtes-vous certain de vouloir supprimer cette publication ?') . '">' . $btDel . '</a></td>';\r
+                       }\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="12">';\r
+                       $res .= commonPage::pager($settings['page'], $dao->count($core->user) , $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('publications'), false);\r
+                       $res .= '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function contextBookDownload($id)\r
+       {\r
+               global $core;\r
+\r
+               $versions = array();\r
+               $versions['html'] = array('title' => __('Version online'), 'icon' => cubeMedia::silk('page_white_world.png'));\r
+               $versions['win-exe'] = array('title' => __('Version offline') . ' - ' . __('Executable Windows'), 'icon' => cubeMedia::silk('application_view_tile.png'));\r
+               $versions['win-ins'] = array('title' => __('Version offline') . ' - ' . __('Installeur Auto-executable Windows'), 'icon' => cubeMedia::silk('application_view_tile.png'));\r
+               $versions['mac-exe'] = array('title' => __('Version offline') . ' - ' . __('Exécutable Mac OS X'), 'icon' => cubeMedia::image(IMG . '/macos.png'));\r
+               $versions['win-cd'] = array('title' => __('Version offline') . ' - ' . __('CD-ROM') . ' / ' . __('Clé USB'), 'icon' => cubeMedia::silk('cd.png'));\r
+\r
+               $res = '<div class="contextMenu downbookContextMenu" id="' . $id . '">';\r
+               $res .= '<ul>';\r
+               $res .= '<li class="head">' . __("Sélectionnez une version") . '</li>';\r
+               foreach($versions as $k => $v) {\r
+                       $res .= '<li><a href="#" rel="downbook/$1/' . $k . '" class="ajax">' . $v['icon'] . $v['title'] . '</a></li>';\r
+               }\r
+               $res .= '</ul></div>';\r
+               return $res;\r
+       }\r
+\r
+       public static function contextBookStatus($id)\r
+       {\r
+               global $core;\r
+\r
+               if (wsDroits::admin()) {\r
+                       $status = $core->books_status;\r
+                       $status[2] = __('Facturé (associé à un projet)');\r
+               } else {\r
+                       $status = array();\r
+                       $status[-1] = $core->books_status[-1];\r
+                       $status[0] = $core->books_status[0];\r
+               }\r
+\r
+               $res = '<div class="contextMenu statusbookContextMenu" id="' . $id . '">';\r
+               $res .= '<ul>';\r
+               $res .= '<li class="head">' . __("Changer le status de la publication") . '</li>';\r
+               foreach($status as $s => $title) {\r
+                       $res .= '<li><a href="#" rel="statusBook/$1/' . $s . '" class="ajax">' . $title . '</a></li>';\r
+               }\r
+               $res .= '</ul></div>';\r
+               return $res;\r
+       }\r
+\r
+       public static function traductions($args)\r
+       {\r
+               global $core;\r
+\r
+               commonDroits::min(5);\r
+\r
+               if (count($args) < 2) {\r
+                       $args[1] = 'fr';\r
+               }\r
+\r
+               $allLangs = cubeLang::getCodes($core->user->lang);\r
+               $existingLangs = array();\r
+\r
+               $dao = new wsDAOLang($core->con);\r
+               $langs = $dao->selectAll();\r
+               foreach($langs as $lang) {\r
+                       if (!isset($allLangs[$lang->lang_id])) {\r
+                               continue;\r
+                       }\r
+                       $existingLangs[$lang->lang_id] = $allLangs[$lang->lang_id];\r
+\r
+                       unset($allLangs[$lang->lang_id]);\r
+               }\r
+\r
+               $langs = array(__('Langues configurées') => array_flip($existingLangs), __('Autres langues') => array_flip($allLangs));\r
+\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain(null, false);\r
+\r
+               $res .= commonPage::bh();\r
+               $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 .= '</table>';\r
+               $res .= '</form>';\r
+               $res .= commonPage::bf();\r
+\r
+               $res .= '<div id="formLang">';\r
+               $res .= self::formLang($args[1]);\r
+               $res .= '</div>';\r
+               $res .= commonPage::bMain(true);\r
+\r
+               return $res;\r
+       }\r
+\r
+       public static function formLang($lang_id)\r
+       {\r
+               commonDroits::min(5);\r
+               global $core;\r
+               $dao = new wsDAOLang($core->con);\r
+               $lang = $dao->selectById($lang_id);\r
+\r
+               $res = '<form action="saveLang" method="post">';\r
+\r
+               $res .= commonPage::bh();\r
+               $res .= '<table class="liste">';\r
+               $res .= '<tr><td>' . __('Police de caractères') . ' : </td><td>' . form::hidden('lang', $lang_id) . form::combo('font', self::getFonts(), $lang->font) . '</td></tr>';\r
+               $res .= '<tr class="odd"><td>' . __('Jeux de caractères') . ' : </td><td>' . form::combo('charset', self::getCharsets(), $lang->charset) . '</td></tr>';\r
+               $res .= '<tr><td>' . __("Langue de l'installeur") . ' : </td><td>' . form::combo('nsis', self::getNSISLangs(), $lang->nsis) . '</td></tr>';\r
+               $res .= '<tr><td colspan="2" class="right odd"><a href="#" class="submit">' . $core->typo->Ajouter('Valider') . '</a></td></tr>';\r
+               $res .= '</table>';\r
+               $res .= commonPage::bf();\r
+\r
+               $res .= commonPage::bh();\r
+               $res .= cubeLang::translationForm(PLAYER_SOURCES, $lang_id , null, 'liste', array(), '<a href="#" class="submit">' . $core->typo->Ajouter(__('Enregistrer')) . '</a>', $lang->traductions);\r
+               $res .= commonPage::bf();\r
+               $res .= '</form>';\r
+               return $res;\r
+       }\r
+\r
+       public static function getFonts()\r
+       {\r
+               $formats = array('ttf', 'otf', 'TTF', 'OTF');\r
+\r
+               $dr = opendir(FONT_PATH);\r
+               $fonts = array();\r
+               while ($file = readdir($dr)) {\r
+                       if ($file == '.' || $file == '..' || !in_array(files::getExtension($file), $formats)) {\r
+                               continue;\r
+                       }\r
+                       $fonts[$file] = $file;\r
+               }\r
+               return $fonts;\r
+       }\r
+\r
+       protected static function getCharsets()\r
+       {\r
+               $sets = cubeFlexFontAsset::getSets();\r
+               $res = array();\r
+               foreach($sets as $k => $v) {\r
+                       $res[$k] = $k;\r
+               }\r
+               return $res;\r
+       }\r
+\r
+       protected static function getNSISLangs()\r
+       {\r
+               $res = array();\r
+               $dir = WS_FILES . '/nsislangs';\r
+               $dr = opendir($dir);\r
+               while ($file = readdir($dr)) {\r
+                       if ($file == '.' || $file == '..') {\r
+                               continue;\r
+                       }\r
+                       $e = explode('.', $file);\r
+                       $res[$e[0]] = $e[0];\r
+               }\r
+\r
+               ksort($res);\r
+               return $res;\r
+       }\r
+\r
+       public static function editor($args)\r
+       {\r
+               commonDroits::min(1);\r
+\r
+               global $core;\r
+\r
+               $args = cubePage::getArgs($args);\r
+               $book_id = $args[0];\r
+\r
+               self::checkDocumentVersionOfBook($book_id);\r
+\r
+               if ($book_id == 'new') {\r
+                       $dao = new wsDAOBook($core->con);\r
+                       $book = $dao->creeEmpty($core->user->utilisateur_id, $core->user->lang);\r
+                       http::redirect(SITE_PATH . 'editor/' . $book->book_id);\r
+               }\r
+\r
+               $res = '<html><head><style type="text/css">';\r
+               $res .= '#composerSwf{width:100%;height:100%;margin:0 auto;}\r
+body{margin:0;padding:0;height:100%;overflow:hidden;background:#d2d3c7;}\r
+html{height:100%}' . "\n";\r
+               $res .= '</style>';\r
+               $res .= '<title>' . __('Edition de la publication') . ' #' . $args[0] . '</title>';\r
+               $res .= '</head>';\r
+               $res .= '<body onload="this.focus();">';\r
+               $res .= self::editComposition($args);\r
+               $res .= '</body>';\r
+               $res .= '</html>';\r
+               echo $res;\r
+       }\r
+\r
+       public static function editComposition($args)\r
+       {\r
+               $fv = array(session_name() => session_id(),\r
+                       'book_id' => $args[0]);\r
+               $res = cubeMedia::flash2(WEBROOT . '/swf/composer.swf?junk=' . TIME, '100%', '100%', $fv, 'composerSwf', 'swfPanel', 10, '#d2d3c7', '', 'false', 'noscale', 'normal', array(), false, true, true);\r
+               return $res;\r
+       }\r
+\r
+       public static function stats($args)\r
+       {\r
+               $bid = (isset($args[1]))?$args[1]:null;\r
+               $annee = (isset($args[2]))?$args[2]:null;\r
+               $mois = (isset($args[3]))?$args[3]:null;\r
+               return wsStats::display($bid, $annee, $mois);\r
+       }\r
+\r
+       public static function viewerp($args)\r
+       {\r
+               commonDroits::min(5);\r
+\r
+               $args = cubePage::getArgs($args);\r
+\r
+               $e = explode('_', $args[0]);\r
+               if (count($e) == 2 || $e[2] < TIME-10) {\r
+                       $e[2] = TIME;\r
+                       http::redirect(SITE_PATH . 'viewerp/' . implode('_', $e) . '/');\r
+                       exit;\r
+               }\r
+\r
+               $book_id = $e[0];\r
+\r
+               self::checkDocumentVersionOfBook($book_id);\r
+\r
+               echo self::commonViewer($book_id, $e[1]);\r
+       }\r
+\r
+       public static function vieweru($args)\r
+       {\r
+               commonDroits::min(5);\r
+\r
+               $args = cubePage::getArgs($args);\r
+\r
+               $e = explode('_', $args[0]);\r
+               if (count($e) == 2 || $e[2] < TIME-10) {\r
+                       $e[2] = TIME;\r
+                       http::redirect(SITE_PATH . 'vieweru/' . implode('_', $e) . '/');\r
+                       exit;\r
+               }\r
+\r
+               $book_id = $e[0];\r
+\r
+               self::checkDocumentVersionOfBook($book_id);\r
+\r
+               echo self::commonViewer($book_id, $e[1]);\r
+       }\r
+\r
+       public static function viewer($args)\r
+       {\r
+               $args = cubePage::getArgs($args);\r
+\r
+               $e = explode('_', $args[0]);\r
+               if (count($e) == 2 || $e[2] < TIME-10) {\r
+                       $e[2] = TIME;\r
+                       http::redirect(SITE_PATH . 'viewer/' . implode('_', $e) . '/');\r
+                       exit;\r
+               }\r
+\r
+               $book_id = $e[0];\r
+\r
+               self::checkDocumentVersionOfBook($book_id);\r
+               wsSecureSWF::checkProtectedSWF();\r
+\r
+               echo self::commonViewer($book_id, $e[1]);\r
+       }\r
+\r
+       public static function commonViewer($book_id, $hash)\r
+       {\r
+               if (!defined('MINIMIZE_JS')) {\r
+                       define('MINIMIZE_JS', false);\r
+               }\r
+               if (!defined('MINIMIZE_CSS')) {\r
+                       define('MINIMIZE_CSS', false);\r
+               }\r
+               if (!defined('JQUERY')) {\r
+                       define('JQUERY', false);\r
+               }\r
+\r
+               global $core;\r
+               global $css;\r
+               global $js;\r
+               global $standard;\r
+               global $meta;\r
+               global $jsvar;\r
+\r
+               $dao = new wsDAOBook($core->con);\r
+\r
+               $book = $dao->selectById($book_id);\r
+               if ($book->hash != $hash) {\r
+                       commonDroits::error();\r
+               }\r
+\r
+               if (!$dao->isUpToDate($book_id)) {\r
+                       $dao->compile($book_id);\r
+                       $dao->touchCompile($book_id);\r
+               }\r
+\r
+               $daoTheme = new wsDAOTheme($core->con);\r
+               $theme = $daoTheme->getThemeOfBook($book_id, false);\r
+\r
+               $webcompile = WEBROOT . '/fluidbook/compile/';\r
+\r
+               $standard = 'XHTML 1.0 Transitional';\r
+               $css = $js = array();\r
+               $css[] = $webcompile . 'style.css';\r
+               $fv = array();\r
+\r
+               $res = '<html>';\r
+               $res .= '<head>';\r
+               $res .= '<title>' . $book->parametres->title . '</title>';\r
+               // Entêtes Facebook\r
+               if ($book->parametres->facebook) {\r
+                       $meta['og:title'] = ($book->parametres->facebook_title == '')?$book->parametres->title:$book->parametres->facebook_title;\r
+                       if ($book->parametres->facebook_description != '') {\r
+                               $meta['og:description'] = $book->parametres->facebook_description;\r
+                       }\r
+                       $meta['og:image'] = 'http://dev.ws.fluidbook.com/services/facebook_thumbnail?id=' . $book->book_id ;\r
+               }\r
+\r
+               $res .= '</head>';\r
+               $res .= '<body style="background-color:#' . $theme->parametres->loadingBackColor . '" onload="this.focus();">';\r
+               $res .= cubeMedia::flash2('index.swf', '100%', '100%', $fv, 'fluidbook', '', 10, '#' . $theme->parametres->loadingBackColor, '', 'true', 'noscale', 'gpu', array('allowScriptAccess' => 'always'));\r
+               $js = array($webcompile . 'fluidbook.js');\r
+               $jsvar = array();\r
+\r
+               $gacodes = array(GA);\r
+               if ($book->parametres->googleAnalytics != '') {\r
+                       $gacodes[] = $book->parametres->googleAnalytics;\r
+               }\r
+               $res .= cubePage::googleAnalytics($gacodes, false);\r
+               $res .= '</body>';\r
+               $res .= '</html>';\r
+\r
+               return $res;\r
+       }\r
+\r
        public static function statsxls($args)\r
        {\r
                $bid = (isset($args[1]))?$args[1]:null;\r
                wsStats::exportXLS($bid);\r
        }\r
 \r
+       public static function chooseExistingBook()\r
+       {\r
+               wsDroits::creation(true);\r
+               $res = '<tr><td colspan="2"><p style="width:600px;text-align:justify;"><em>' . __("Si votre nouvelle publication a des paramètres en commun avec une publication existante, veuillez rechercher cette publication afin d'attribuer par défaut à votre nouvelle publication les paramètres de l'existante") . '</em></p></td></tr>';\r
+               $res .= '<tr><td>' . __('Rechercher une publication') . ' : </td><td>' . form::field('book_nom', 64, 1024) . form::hidden('book', '') . '</td></tr>';\r
+               // $res .= '<tr><td colspan="2"><hr /></td></tr>';\r
+               $res .= '<tr><td>' . __('Indiquez le titre de votre nouvelle publication') . '</td><td>' . form::field('title', 64, 1024) . '</td></tr>';\r
+               return $res;\r
+       }\r
+\r
+       public static function changeBookProprietaire($book_id)\r
+       {\r
+               global $core;\r
+               commonDroits::min(3);\r
+\r
+               $dao = new wsDAOBook($core->con);\r
+               $book = $dao->selectById($book_id);\r
+\r
+               $res = '<tr><td>' . __('Propriétaire actuel') . ' : </td><td>' . $book->proprietaire . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Rechercher un utilisateur') . ' : </td><td>' . form::field('book_proprietaire', 64, 1024) . form::hidden('proprietaire', '') . '</td></tr>';\r
+               return $res;\r
+       }\r
+\r
+       public static function chooseBookProject($book_id)\r
+       {\r
+               global $core;\r
+\r
+               wsDroits::admin(true);\r
+\r
+               $dao = new wsDAOBook($core->con);\r
+               $book = $dao->selectById($book_id);\r
+\r
+               $projects = array("--" => '0');\r
+               $r = $core->con->select('SELECT * FROM projets WHERE client IN(SELECT entreprise FROM utilisateurs WHERE utilisateur_id IN( SELECT facturable_id FROM ws_users_tree WHERE utilisateur_id IN (SELECT utilisateur_id FROM utilisateurs WHERE entreprise=\'' . $core->con->escape($book->proprietaire_id) . '\'))) ORDER BY projet_id DESC');\r
+               while ($r->fetch()) {\r
+                       $projects[$r->projet_id . ' - ' . $r->nom] = $r->projet_id;\r
+               }\r
+\r
+               $res = '<tr><td>' . __('Choisir un projet') . ' : </td><td>' . form::hidden('book_id', $book_id) . form::combo('book_project', $projects, $book->projet) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('ou créer un nouveau projet') . ' : </td><td>' . form::field('new_book_project_nom', 64, 1024, $book->nom) . '</td></tr>';\r
+               return $res;\r
+       }\r
+\r
+       public static function chooseBookTache($book_id, $projet_id)\r
+       {\r
+               global $core;\r
+               wsDroits::admin(true);\r
+\r
+               $dao = new wsDAOBook($core->con);\r
+               $book = $dao->selectById($book_id);\r
+\r
+               $taches = array("--" => '0');\r
+               $r = $core->con->select('SELECT * FROM taches WHERE projet=\'' . $core->con->escape($projet_id) . '\' AND categorie=8');\r
+               while ($r->fetch()) {\r
+                       $taches[$r->nom] = $r->tache_id;\r
+               }\r
+\r
+               $res = '';\r
+\r
+               if ($r->count() > 0) {\r
+                       $res .= '<tr><td>' . __('Choisir une tâche') . ' : </td><td>' . form::hidden('book_id', $book_id) . form::hidden('projet_id', $projet_id) . form::combo('tache', $taches) . '</td></tr>';\r
+                       $res .= '<tr><td>' . __('ou créer une nouvelle tâche') . ' : </td><td>' . form::field('nom', 32, 1024, 'Fluidbook #' . $book->book_id . ' : ' . $book->nom) . ' ' . __('ayant le budget suivant') . ' ' . form::field('budget', 6, 6) . '</td></tr>';\r
+               } else {\r
+                       $res .= '<tr><td>' . __('Créer une tâche') . ' : </td><td>'\r
+                        . form::hidden('book_id', $book_id)\r
+                        . form::hidden('projet_id', $projet_id)\r
+                        . form::hidden('tache', '0')\r
+                        . form::field('nom', 32, 1024, 'Fluidbook #' . $book->book_id . ' : ' . $book->nom)\r
+                        . ' ' . __('ayant le budget suivant')\r
+                        . ' ' . form::field('budget', 6, 6) . '</td></tr>';\r
+               }\r
+\r
+               return $res;\r
+       }\r
+\r
+       public static function valideDownload()\r
+       {\r
+               global $core;\r
+\r
+               $res .= '<tr><td>' . __("Le téléchargement du fluidbook implique qu'il a été testé et définitivement validé.") . '<br />' . __("Si vous le téléchargez, il vous sera facturé selon les conditions stipulées dans votre contrat.") . '</td></tr>';\r
+               $res .= '<tr><td class="right"><label>' . __("Oui, ce fluidbook est validé, je souhaite le télécharger et il me sera facturé.") . ' ' . form::checkbox('valide', 1, false) . '</label></td></tr>';\r
+\r
+               return $res;\r
+       }\r
+\r
        public static function testAS($args)\r
        {\r
                global $core;\r
@@ -110,6 +658,408 @@ class wsUrl {
                }\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
+               commonDroits::min(3);\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
+\r
+               $filtres = array();\r
+\r
+               $res = commonPage::barre($filtres, 'filtreClients', 'clients', $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeClients">';\r
+               $res .= self::listeClients();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeClients($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(3);\r
+               $settings = is_null($settings)?$core->user->getSettings('clients'):$settings;\r
+               $change = is_null($dashboard)?'Client':'Dashboard/' . $dashboard;\r
+               $dao = new commonDAOEntreprise($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'], $core->user);\r
+\r
+               $res = '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::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
+                               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 .= commonPage::pager($settings['page'], $dao->count($core->user) , $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::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
+               commonDroits::min(3);\r
+               $dao = new commonDAOEntreprise($core->con);\r
+               $daoUtilisateur = new commonDAOUtilisateur($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
+               if (wsDroits::admin(false)) {\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
+               }\r
+               // Bloc Fluidbook Workshop\r
+               if (wsDroits::admin(false)) {\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
+\r
+                       $daoSignature = new wsDAOSignature($core->con);\r
+                       $signaturesList = $daoSignature->selectAll();\r
+\r
+                       $signatures = array();\r
+                       foreach($signaturesList as $s) {\r
+                               $signatures[$s->nom] = $s->signature_id;\r
+                       }\r
+\r
+                       $res .= '<tr class="odd"><td>' . __('Signatures Fluidbook') . '</td><td>' . cubeForm::checkMultiple('ws_signatures', $signatures, 5, explode(',', $client->ws_signatures)) . '</td></tr>';\r
+               }\r
+               if ($entreprise_id == 'new') {\r
+                       $daoContact = new commonDAOClient($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
+               commonDroits::min(3);\r
+               $dao = new commonDAOEntreprise($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><a class="ajax" href="#" rel="connectAs/' . $contact->utilisateur_id . '">Se connecter comme ...</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
+               commonDroits::min(3);\r
+\r
+               $dao = new commonDAOClient($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></td><td><a href="#" class="ajax" rel="connectAs/' . $client->utilisateur_id . '">' . __('Se connecter comme ...') . '</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 demandes()\r
+       {\r
+               global $core;\r
+               cubePage::truePopup();\r
+               cubePage::autoComplete();\r
+               cubePage::emptyfield();\r
+               commonDroits::min(5);\r
+               $settings = $core->user->getSettings('demandes');\r
+\r
+               $shortcuts = array();\r
+\r
+               $filtres = array();\r
+               $filtres[] = new commonFiltre(__('Statut'), 'status_demande', $settings['filtres']);\r
+               $filtres[] = new commonFiltre(__('Confiées à'), 'demande_moi', $settings['filtres']);\r
+\r
+               $res = commonPage::barre($filtres, 'filtreDemandes', 'demandes', $shortcuts);\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="listeDemandes">';\r
+               $res .= self::listeDemandes();\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
+\r
+       public static function listeDemandes($dashboard = null, $settings = null)\r
+       {\r
+               global $core;\r
+               commonDroits::min(5);\r
+               $settings = is_null($settings)?$core->user->getSettings('demandes'):$settings;\r
+               $change = is_null($dashboard)?'Demandes':'Dashboard/' . $dashboard;\r
+               $dao = new wsDAODemande($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'], $core->user);\r
+\r
+               $res = '<table class="liste">';\r
+               $res .= '<tr><th>' . commonUrl::orderby('#', 'demande_id', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Date') , 'date', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Type') , 'type', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Prospect') . '/' . __('Client'), 'utilisateur_nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Confiée à'), 'revendeur_nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Gérée par'), 'administrateur_nom', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th>' . commonUrl::orderby(__('Statut'), 'status', $settings, 'sort' . $change) . '</th>';\r
+               $res .= '<th class="min"></th><th class="min"></th></tr>';\r
+               $i = 0;\r
+               foreach($liste as $id => $demande) {\r
+                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
+                       $res .= '<tr' . $odd . '>';\r
+                       $res .= '<td>' . $demande->demande_id . '</td>';\r
+                       $res .= '<td>' . date(__('d/m/Y H:i'), $demande->date) . '</td>';\r
+                       $res .= '<td>' . $core->demandes_type[$demande->type] . '</td>';\r
+                       $res .= '<td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td>';\r
+                       $revendeur = $demande->revendeur == 0?'-':$demande->revendeur_nom;\r
+                       $res .= '<td>' . $revendeur . '</td>';\r
+                       $administrateur = $demande->administrateur == 0?'-':$demande->administrateur_nom;\r
+                       $res .= '<td>' . $administrateur . '</td>';\r
+                       // Affichage du status\r
+                       // Si non traitée ou traitée, pas la possibilité de changer le status\r
+                       if ($demande->status == 0 || $demande->status == 2) {\r
+                               $res .= '<td>' . $core->demandes_status[$demande->status] . '</td>';\r
+                       } else if ($demande->status == 1) {\r
+                               if ($demande->revendeur == $core->user->utilisateur_id) {\r
+                                       $res .= '<td><a href="#" class="ajax" rel="reponseDemande/' . $demande->demande_id . '/' . $demande->revendeur . '/1/1">' . __('Je me suis chargé de cette demande') . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td>' . $core->demandes_status[$demande->status] . ' (<a href="#" class="ajax" rel="resetDemande/' . $demande->demande_id . '" title="' . __('Réinitialiser la demande') . '">x</a>)</td>';\r
+                               }\r
+                       }\r
+                       // On ne peut éditer que si la facture est non traitée et qu'elle n'a pas commencé à être éditée par un autre administrateur\r
+                       if (($demande->administrateur == 0 || $demande->administrateur == $core->user->utilisateur_id) && $demande->status == 0) {\r
+                               $res .= '<td class="action"><a href="#" class="popup" rel="formDemande/' . $demande->demande_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\r
+                       // On n'affiche le bouton "Supprimer" que si la demande est non-traitée\r
+                       if (($demande->administrateur == 0 || $demande->administrateur == $core->user->utilisateur_id) && $demande->status == 0) {\r
+                               $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeDemande/' . $demande->demande_id . '" title="' . __('Êtes-vous certain de vouloir supprimer cette demande ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+                       } else {\r
+                               $res .= '<td></td>';\r
+                       }\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 .= commonPage::pager($settings['page'], $dao->count($core->user) , $settings['par_page'], 'page' . $change . '/%d');\r
+                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('demandes'));\r
+                       $res .= '</td></tr>';\r
+               }\r
+               $res .= '</table>';\r
+               return $res;\r
+       }\r
+\r
+       public static function formDemande($demande_id = 'new')\r
+       {\r
+               global $core;\r
+               commonDroits::min(5);\r
+               $dao = new wsDAODemande($core->con);\r
+               $daoUtilisateur = new commonDAOUtilisateur($core->con);\r
+               $demande = $dao->selectById($demande_id);\r
+               if ($demande->administrateur != 0 && $demande->administrateur != $core->user->utilisateur_id) {\r
+                       $res = '<tr><td colspan="2"><p class="center">' . __("Cette demande est actuellement en cours d'édition par un autre administrateur") . '</p></td></tr>';\r
+                       return $res;\r
+               }\r
+               if ($demande->status > 1) {\r
+                       $res = '<tr><td colspan="2"><p class="center">' . __("Cette demande est actuellement en cours de traitement") . '</p></td></tr>';\r
+                       return $res;\r
+               }\r
+               // On place la demande comme en cours d'édition\r
+               $dao->setAdministrateur($demande_id, $core->user->utilisateur_id);\r
+               // On vérifie que l'utilisateur n'est pas déjà géré par un revendeur\r
+               $demandeur = $daoUtilisateur->selectById($demande->utilisateur, 'utilisateurs_entreprise');\r
+               $administrateurs = $daoUtilisateur->selectWSAdministrateursId();\r
+               if (!is_null($demandeur->ws_admin) && !in_array($demandeur->ws_admin, $administrateurs)) {\r
+                       // Si déjà géré par un revendeur\r
+                       $revendeur = $daoUtilisateur->selectById($demandeur->ws_admin, 'utilisateurs_entreprise');\r
+                       $actions[__('Je confie la demande à ' . $revendeur->rs . ' (' . $revendeur->prenom . ' ' . $revendeur->nom . ')')] = $demandeur->ws_admin;\r
+               } else {\r
+                       $liste = $daoUtilisateur->selectWSRevendeursFacturables();\r
+                       $revendeurs = array();\r
+                       foreach($liste as $revendeur) {\r
+                               $revendeurs[$revendeur->rs . '(' . $revendeur->prenom . ' ' . $revendeur->nom . ')'] = $revendeur->utilisateur_id;\r
+                       }\r
+\r
+                       $actions = array(__('Je vais me charger de cette demande') => $core->user->utilisateur_id);\r
+                       $actions[' '] = array();\r
+                       $actions[__('Je confie la demande à') . ' : '] = $revendeurs;\r
+               }\r
+\r
+               $res = '<tr><td>' . __('Numéro de demande') . '</td><td>' . form::hidden('demande_id', $demande->demande_id) . '' . $demande->demande_id . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Date de la demande') . '</td><td>' . date(__('d/m/Y H:i'), $demande->date) . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Emetteur de la demande') . '</td><td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td></tr>';\r
+               $res .= '<tr><td>' . __('Nombre de pages') . '</td><td>' . $demande->pages . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Nombre de liens') . '</td><td>' . $demande->liens . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Nombre de langues') . '</td><td>' . $demande->langues . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Détails') . '</td><td>' . $demande->details . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Action') . '</td><td>' . form::combo('revendeur', $actions) . '</td></tr>';\r
+               $res .= '<tr><td></td></tr>';\r
+\r
+               return $res;\r
+       }\r
+\r
+       public static function reponseDemande($args)\r
+       {\r
+               global $core;\r
+\r
+               commonDroits::min(3);\r
+\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain(null, false);\r
+\r
+               $res .= commonPage::bh();\r
+\r
+               $demande_id = $args[1];\r
+               $revendeur_id = $args[2];\r
+\r
+               $dao = new wsDAODemande($core->con);\r
+               $demande = $dao->selectById($demande_id);\r
+               if ($demande->revendeur != $revendeur_id || $demande->revendeur != $core->user->utilisateur_id) {\r
+                       commonDroits::error();\r
+                       exit;\r
+               }\r
+\r
+               $res = commonPage::barre();\r
+               $res .= commonPage::tMain();\r
+               $res .= commonPage::bh();\r
+               $res .= '<div id="accepteDemandes">';\r
+               $res .= '<h2>' . $core->typo->Titre(__('Prendre en charge une demande de devis')) . '</h2>';\r
+               $res .= '<br /><br />';\r
+               $res .= '<p>' . __('Si vous acceptez de traiter la demande suivante, veuillez cliquer sur le bouton "Accepter la demande" situé à droite de la description.');\r
+               $res .= ' ' . __('Vous avez également la possibilité de décliner la demande en cliquant sur le bouton "Décliner la demande"') . "</p>";\r
+               $res .= '<br /><br />';\r
+\r
+               $res .= '<table>';\r
+               $res .= '<tr><th class="left" colspan="2">' . __("Détails de la demande") . '</th><th class="left" style="width:40%">' . __('Votre action') . '</th></tr>';\r
+               $res .= '<tr><td>' . __('Numéro de demande') . '</td><td>' . $demande->demande_id . '</td>';\r
+               $res .= '<td>' . '<a href="#" class="ajax" rel="reponseDemande/' . $demande_id . '/' . $revendeur_id . '/1" >' . cubeMedia::cssRollover($core->typo->BookTelecharger('Accepter la demande', '', false)) . '</a>' . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Date de la demande') . '</td><td>' . date(__('d/m/Y H:i'), $demande->date) . '</td>';\r
+               $res .= '<td>' . '<a href="#" class="ajax" rel="reponseDemande/' . $demande_id . '/' . $revendeur_id . '/0">' . cubeMedia::cssRollover($core->typo->Supprimer('Décliner la demande', '', false)) . '</a>' . '</td>';\r
+               $res .= '</tr>';\r
+               $res .= '<tr><td>' . __('Client') . ' / ' . __('Prospect') . '</td><td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td></tr>';\r
+               $res .= '<tr><td>' . __('Nombre de pages') . '</td><td>' . $demande->pages . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Nombre de liens') . '</td><td>' . $demande->liens . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Nombre de langues') . '</td><td>' . $demande->langues . '</td></tr>';\r
+               $res .= '<tr><td>' . __('Détails') . '</td><td>' . $demande->details . '</td></tr>';\r
+               $res .= '</table>';\r
+\r
+               $res .= '</div>';\r
+               $res .= commonPage::bf();\r
+               $res .= commonPage::bMain();\r
+               return $res;\r
+       }\r
 }\r
 \r
 ?>
\ No newline at end of file
diff --git a/inc/ws/Controlleur/url/_common.php b/inc/ws/Controlleur/url/_common.php
deleted file mode 100644 (file)
index d8a3ff2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php\r
-$urlClasses['wsUrlBook'] = dirname(__FILE__) . '/class.ws.url.book.php';\r
-$urlClasses['wsUrlClient'] = dirname(__FILE__) . '/class.ws.url.client.php';\r
-$urlClasses['wsUrlDemande'] = dirname(__FILE__) . '/class.ws.url.demande.php';\r
-$urlClasses['wsUrlTraduction'] = dirname(__FILE__) . '/class.ws.url.traduction.php';\r
-\r
-$__autoload += $urlClasses;\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/ws/Controlleur/url/class.ws.url.book.php b/inc/ws/Controlleur/url/class.ws.url.book.php
deleted file mode 100644 (file)
index 3af2514..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-<?php\r
-class wsUrlBook {\r
-       public static function publications($args)\r
-       {\r
-               global $core;\r
-\r
-               $settings = $core->user->getSettings('books');\r
-\r
-               $shortcuts = array();\r
-               if (wsDroits::creation()) {\r
-                       $shortcuts[] = '<a href="#" class="popup" rel="newBookForm">' . $core->typo->Ajouter(__('Créer une nouvelle publication')) . '</a>';\r
-               }\r
-\r
-               $filtres = array();\r
-               if (wsDroits::revendeur(false)) {\r
-                       $filtres[] = new commonFiltre(__('Status'), 'status_book', $settings['filtres']);\r
-               }\r
-               $filtres[] = new commonFiltre(__('Année'), 'annee_book', $settings['filtres']);\r
-               $res = commonPage::barre($filtres , 'filtreBooks', 'books', $shortcuts);\r
-               $res .= commonPage::tMain(null, true);\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeBooks">';\r
-               $res .= self::listeBooks();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeBooks($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               cubePage::autocomplete();\r
-               cubePage::contextMenu();\r
-\r
-               $droits = wsDroits::getDroits();\r
-\r
-               commonDroits::min(1);\r
-               $settings = is_null($settings)?$core->user->getSettings('books'):$settings;\r
-               $change = is_null($dashboard)?'Books':'Dashboard/' . $dashboard;\r
-               $dao = new wsDAOBook($core->con);\r
-               $context_download_id = is_null($dashboard)?'contextDownloadBook':'contextDashboard_Download' . $dashboard;\r
-               $context_status_id = is_null($dashboard)?'contextStatusBook':'contextDashboard_Status' . $dashboard;\r
-\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'], $core->user);\r
-\r
-               $res = self::contextBookDownload($context_download_id);\r
-               $res = self::contextBookStatus($context_status_id);\r
-\r
-               $res .= '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'book_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Titre de la publication'), 'nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__(''), 'lang', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . __('Pages') . '</th>';\r
-               if ($droits->revendeur) {\r
-                       $res .= '<th>' . commonUrl::orderby(__('Proprietaire'), 'proprietaire_nom', $settings, 'sort' . $change) . '</th>';\r
-               } else {\r
-                       $res .= '<th>' . commonUrl::orderby(__('Proprietaire'), 'proprietaire_utilisateur', $settings, 'sort' . $change) . '</th>';\r
-               }\r
-               if ($droits->admin) {\r
-                       $res .= '<th>' . commonUrl::orderby(__('Facturation'), 'facturable', $settings, 'sort' . $change) . '</th>';\r
-               }\r
-               if ($droits->revendeur) {\r
-                       $res .= '<th>' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '</th>';\r
-               }\r
-               $res .= str_repeat('<th class="min"></th>', $droits->creation?5:4);\r
-               $res .= '</tr>';\r
-               $i = 0;\r
-\r
-               $btVoir = cubeMedia::cssRollover($core->typo->Voir('voir', '', false));\r
-               $btEdit = cubeMedia::cssRollover($core->typo->Editer('éditer', '', false));\r
-               $btStats = cubeMedia::cssRollover($core->typo->Stats('stats', '', false));\r
-               $btDownload = cubeMedia::cssRollover($core->typo->BookTelecharger('télécharger', '', false));\r
-               if ($droits->creation) {\r
-                       $btDel = cubeMedia::cssRollover($core->typo->Supprimer('suppr.', '', false));\r
-               }\r
-\r
-               foreach($liste as $id => $book) {\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $book->book_id . '</td>';\r
-                       $res .= '<td>' . $book->nom . '</td>';\r
-                       $res .= '<td>' . mb_strtoupper($book->lang) . '</td>';\r
-                       $res .= '<td>' . $book->parametres->pages . '</td>';\r
-\r
-                       if ($droits->revendeur) {\r
-                               $p = str_replace(" (", '<br />', $book->proprietaire);\r
-                               $p = trim($p, ')');\r
-                               $res .= '<td><a href="#" class="popup" rel="formChangeBookProprietaire/' . $book->book_id . '" title="' . __('Mofifier le proprietaire') . '">' . $p . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td>' . $book->proprietaire_utilisateur . '</td>';\r
-                       }\r
-                       if ($droits->admin) {\r
-                               $res .= '<td>' . $book->facturable . '</td>';\r
-                       }\r
-                       if ($droits->revendeur) {\r
-                               if ($droits->admin || $book->status <= 1) {\r
-                                       $p = '';\r
-                                       if (!is_null($book->projet)) {\r
-                                               $p = ' <a href="' . EXTRANET_URL . '/projet/' . $book->projet . '" title="' . __('Voir les détails du projet') . '" class="blank icon">' . cubeMedia::silk('arrow_right.png') . '</a>';\r
-                                       }\r
-\r
-                                       $res .= '<td><a href="#" class="openContextMenu" rel="' . $context_status_id . '" rev="' . $book->book_id . '">' . $core->books_status[$book->status] . '</a>' . $p . '</td>';\r
-                               } else if ($book->status > 1) {\r
-                                       $res .= '<td>' . $core->books_status[1] . '</td>';\r
-                               }\r
-                       }\r
-                       $res .= '<td class="bouton"><a class="popupFS" rel="toolbar=yes" rev="viewer_' . $book->book_id . '" href="' . SITE_PATH . 'viewer/' . $book->book_id . '_' . $book->hash . '/">' . $btVoir . '</a></td>';\r
-                       $res .= '<td class="bouton"><a class="popupFS" rel="toolbar=yes" rev="editor_' . $book->book_id . '" href="' . SITE_PATH . 'editor/' . $book->book_id . '">' . $btEdit . '</a></td>';\r
-                       $res .= '<td class="bouton"><a href="' . SITE_PATH . 'stats/' . $book->book_id . '">' . $btStats . '</a></td>';\r
-                       $res .= '<td class="bouton"><a href="#" class="openContextMenu" rel="' . $context_download_id . '" rev="' . $book->book_id . '">' . $btDownload . '</a></td>';\r
-                       if ($droits->creation) {\r
-                               $res .= '<td class="bouton"><a href="#" rel="supprimeBook/' . $book->book_id . '" class="ajax" title="' . __('Êtes-vous certain de vouloir supprimer cette publication ?') . '">' . $btDel . '</a></td>';\r
-                       }\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="12">';\r
-                       $res .= commonPage::pager($settings['page'], $dao->count($core->user) , $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('publications'), false);\r
-                       $res .= '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function contextBookDownload($id)\r
-       {\r
-               global $core;\r
-\r
-               $versions = array();\r
-               $versions['html'] = array('title' => __('Version online'), 'icon' => cubeMedia::silk('page_white_world.png'));\r
-               $versions['win-exe'] = array('title' => __('Version offline') . ' - ' . __('Executable Windows'), 'icon' => cubeMedia::silk('application_view_tile.png'));\r
-               $versions['win-ins'] = array('title' => __('Version offline') . ' - ' . __('Installeur Auto-executable Windows'), 'icon' => cubeMedia::silk('application_view_tile.png'));\r
-               $versions['mac-exe'] = array('title' => __('Version offline') . ' - ' . __('Exécutable Mac OS X'), 'icon' => cubeMedia::image(IMG . '/macos.png'));\r
-               $versions['win-cd'] = array('title' => __('Version offline') . ' - ' . __('CD-ROM') . ' / ' . __('Clé USB'), 'icon' => cubeMedia::silk('cd.png'));\r
-\r
-               $res = '<div class="contextMenu downbookContextMenu" id="' . $id . '">';\r
-               $res .= '<ul>';\r
-               $res .= '<li class="head">' . __("Sélectionnez une version") . '</li>';\r
-               foreach($versions as $k => $v) {\r
-                       $res .= '<li><a href="#" rel="downbook/$1/' . $k . '" class="ajax">' . $v['icon'] . $v['title'] . '</a></li>';\r
-               }\r
-               $res .= '</ul></div>';\r
-               return $res;\r
-       }\r
-\r
-       public static function contextBookStatus($id)\r
-       {\r
-               global $core;\r
-\r
-               if (wsDroits::admin()) {\r
-                       $status = $core->books_status;\r
-                       $status[2] = __('Facturé (associé à un projet)');\r
-               } else {\r
-                       $status = array();\r
-                       $status[-1] = $core->books_status[-1];\r
-                       $status[0] = $core->books_status[0];\r
-               }\r
-\r
-               $res = '<div class="contextMenu statusbookContextMenu" id="' . $id . '">';\r
-               $res .= '<ul>';\r
-               $res .= '<li class="head">' . __("Changer le status de la publication") . '</li>';\r
-               foreach($status as $s => $title) {\r
-                       $res .= '<li><a href="#" rel="statusBook/$1/' . $s . '" class="ajax">' . $title . '</a></li>';\r
-               }\r
-               $res .= '</ul></div>';\r
-               return $res;\r
-       }\r
-\r
-       public static function chooseExistingBook()\r
-       {\r
-               wsDroits::creation(true);\r
-               $res = '<tr><td colspan="2"><p style="width:600px;text-align:justify;"><em>' . __("Si votre nouvelle publication a des paramètres en commun avec une publication existante, veuillez rechercher cette publication afin d'attribuer par défaut à votre nouvelle publication les paramètres de l'existante") . '</em></p></td></tr>';\r
-               $res .= '<tr><td>' . __('Rechercher une publication') . ' : </td><td>' . form::field('book_nom', 64, 1024) . form::hidden('book', '') . '</td></tr>';\r
-               // $res .= '<tr><td colspan="2"><hr /></td></tr>';\r
-               $res .= '<tr><td>' . __('Indiquez le titre de votre nouvelle publication') . '</td><td>' . form::field('title', 64, 1024) . '</td></tr>';\r
-               return $res;\r
-       }\r
-\r
-       public static function changeBookProprietaire($book_id)\r
-       {\r
-               global $core;\r
-               commonDroits::min(3);\r
-\r
-               $dao = new wsDAOBook($core->con);\r
-               $book = $dao->selectById($book_id);\r
-\r
-               $res = '<tr><td>' . __('Propriétaire actuel') . ' : </td><td>' . $book->proprietaire . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Rechercher un utilisateur') . ' : </td><td>' . form::field('book_proprietaire', 64, 1024) . form::hidden('proprietaire', '') . '</td></tr>';\r
-               return $res;\r
-       }\r
-\r
-       public static function chooseBookProject($book_id)\r
-       {\r
-               global $core;\r
-\r
-               wsDroits::admin(true);\r
-\r
-               $dao = new wsDAOBook($core->con);\r
-               $book = $dao->selectById($book_id);\r
-\r
-               $projects = array("--" => '0');\r
-               $r = $core->con->select('SELECT * FROM projets WHERE client IN(SELECT entreprise FROM utilisateurs WHERE utilisateur_id IN( SELECT facturable_id FROM ws_users_tree WHERE utilisateur_id IN (SELECT utilisateur_id FROM utilisateurs WHERE entreprise=\'' . $core->con->escape($book->proprietaire_id) . '\'))) ORDER BY projet_id DESC');\r
-               while ($r->fetch()) {\r
-                       $projects[$r->projet_id . ' - ' . $r->nom] = $r->projet_id;\r
-               }\r
-\r
-               $res = '<tr><td>' . __('Choisir un projet') . ' : </td><td>' . form::hidden('book_id', $book_id) . form::combo('book_project', $projects, $book->projet) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('ou créer un nouveau projet') . ' : </td><td>' . form::field('new_book_project_nom', 64, 1024, $book->nom) . '</td></tr>';\r
-               return $res;\r
-       }\r
-\r
-       public static function chooseBookTache($book_id, $projet_id)\r
-       {\r
-               global $core;\r
-               wsDroits::admin(true);\r
-\r
-               $dao = new wsDAOBook($core->con);\r
-               $book = $dao->selectById($book_id);\r
-\r
-               $taches = array("--" => '0');\r
-               $r = $core->con->select('SELECT * FROM taches WHERE projet=\'' . $core->con->escape($projet_id) . '\' AND categorie=8');\r
-               while ($r->fetch()) {\r
-                       $taches[$r->nom] = $r->tache_id;\r
-               }\r
-\r
-               $res = '';\r
-\r
-               if ($r->count() > 0) {\r
-                       $res .= '<tr><td>' . __('Choisir une tâche') . ' : </td><td>' . form::hidden('book_id', $book_id) . form::hidden('projet_id', $projet_id) . form::combo('tache', $taches) . '</td></tr>';\r
-                       $res .= '<tr><td>' . __('ou créer une nouvelle tâche') . ' : </td><td>' . form::field('nom', 32, 1024, 'Fluidbook #' . $book->book_id . ' : ' . $book->nom) . ' ' . __('ayant le budget suivant') . ' ' . form::field('budget', 6, 6) . '</td></tr>';\r
-               } else {\r
-                       $res .= '<tr><td>' . __('Créer une tâche') . ' : </td><td>'\r
-                        . form::hidden('book_id', $book_id)\r
-                        . form::hidden('projet_id', $projet_id)\r
-                        . form::hidden('tache', '0')\r
-                        . form::field('nom', 32, 1024, 'Fluidbook #' . $book->book_id . ' : ' . $book->nom)\r
-                        . ' ' . __('ayant le budget suivant')\r
-                        . ' ' . form::field('budget', 6, 6) . '</td></tr>';\r
-               }\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function editor($args)\r
-       {\r
-               commonDroits::min(1);\r
-\r
-               global $core;\r
-\r
-               $args = cubePage::getArgs($args);\r
-               $book_id = $args[0];\r
-\r
-               self::checkDocumentVersionOfBook($book_id);\r
-\r
-               if ($book_id == 'new') {\r
-                       $dao = new wsDAOBook($core->con);\r
-                       $book = $dao->creeEmpty($core->user->utilisateur_id, $core->user->lang);\r
-                       http::redirect(SITE_PATH . 'editor/' . $book->book_id);\r
-               }\r
-\r
-               $res = '<html><head><style type="text/css">';\r
-               $res .= '#composerSwf{width:100%;height:100%;margin:0 auto;}\r
-body{margin:0;padding:0;height:100%;overflow:hidden;background:#d2d3c7;}\r
-html{height:100%}' . "\n";\r
-               $res .= '</style>';\r
-               $res .= '<title>' . __('Edition de la publication') . ' #' . $args[0] . '</title>';\r
-               $res .= '</head>';\r
-               $res .= '<body onload="this.focus();">';\r
-               $res .= self::editComposition($args);\r
-               $res .= '</body>';\r
-               $res .= '</html>';\r
-               echo $res;\r
-       }\r
-\r
-       public static function editComposition($args)\r
-       {\r
-               $fv = array(session_name() => session_id(),\r
-                       'book_id' => $args[0]);\r
-               $res = cubeMedia::flash2(WEBROOT . '/swf/composer.swf?junk=' . TIME, '100%', '100%', $fv, 'composerSwf', 'swfPanel', 10, '#d2d3c7', '', 'false', 'noscale', 'normal', array(), false, true, true);\r
-               return $res;\r
-       }\r
-\r
-       public static function stats($args)\r
-       {\r
-               $bid = (isset($args[1]))?$args[1]:null;\r
-               $annee = (isset($args[2]))?$args[2]:null;\r
-               $mois = (isset($args[3]))?$args[3]:null;\r
-               return wsStats::display($bid, $annee, $mois);\r
-       }\r
-\r
-       public static function viewerp($args)\r
-       {\r
-               commonDroits::min(5);\r
-\r
-               $args = cubePage::getArgs($args);\r
-\r
-               $e = explode('_', $args[0]);\r
-               if (count($e) == 2 || $e[2] < TIME-10) {\r
-                       $e[2] = TIME;\r
-                       http::redirect(SITE_PATH . 'viewerp/' . implode('_', $e) . '/');\r
-                       exit;\r
-               }\r
-\r
-               $book_id = $e[0];\r
-\r
-               self::checkDocumentVersionOfBook($book_id);\r
-\r
-               echo self::commonViewer($book_id, $e[1]);\r
-       }\r
-\r
-       public static function vieweru($args)\r
-       {\r
-               commonDroits::min(5);\r
-\r
-               $args = cubePage::getArgs($args);\r
-\r
-               $e = explode('_', $args[0]);\r
-               if (count($e) == 2 || $e[2] < TIME-10) {\r
-                       $e[2] = TIME;\r
-                       http::redirect(SITE_PATH . 'vieweru/' . implode('_', $e) . '/');\r
-                       exit;\r
-               }\r
-\r
-               $book_id = $e[0];\r
-\r
-               self::checkDocumentVersionOfBook($book_id);\r
-\r
-               echo self::commonViewer($book_id, $e[1]);\r
-       }\r
-\r
-       public static function viewer($args)\r
-       {\r
-               $args = cubePage::getArgs($args);\r
-\r
-               $e = explode('_', $args[0]);\r
-               if (count($e) == 2 || $e[2] < TIME-10) {\r
-                       $e[2] = TIME;\r
-                       http::redirect(SITE_PATH . 'viewer/' . implode('_', $e) . '/');\r
-                       exit;\r
-               }\r
-\r
-               $book_id = $e[0];\r
-\r
-               self::checkDocumentVersionOfBook($book_id);\r
-               wsSecureSWF::checkProtectedSWF();\r
-\r
-               echo self::commonViewer($book_id, $e[1]);\r
-       }\r
-\r
-       public static function commonViewer($book_id, $hash)\r
-       {\r
-               if (!defined('MINIMIZE_JS')) {\r
-                       define('MINIMIZE_JS', false);\r
-               }\r
-               if (!defined('MINIMIZE_CSS')) {\r
-                       define('MINIMIZE_CSS', false);\r
-               }\r
-               if (!defined('JQUERY')) {\r
-                       define('JQUERY', false);\r
-               }\r
-\r
-               global $core;\r
-               global $css;\r
-               global $js;\r
-               global $standard;\r
-               global $meta;\r
-               global $jsvar;\r
-\r
-               $dao = new wsDAOBook($core->con);\r
-\r
-               $book = $dao->selectById($book_id);\r
-               if ($book->hash != $hash) {\r
-                       commonDroits::error();\r
-               }\r
-\r
-               if (!$dao->isUpToDate($book_id)) {\r
-                       $dao->compile($book_id);\r
-                       $dao->touchCompile($book_id);\r
-               }\r
-\r
-               $daoTheme = new wsDAOTheme($core->con);\r
-               $theme = $daoTheme->getThemeOfBook($book_id, false);\r
-\r
-               $webcompile = WEBROOT . '/fluidbook/compile/';\r
-\r
-               $standard = 'XHTML 1.0 Transitional';\r
-               $css = $js = array();\r
-               $css[] = $webcompile . 'style.css';\r
-               $fv = array();\r
-\r
-               $res = '<html>';\r
-               $res .= '<head>';\r
-               $res .= '<title>' . $book->parametres->title . '</title>';\r
-               // Entêtes Facebook\r
-               if ($book->parametres->facebook) {\r
-                       $meta['og:title'] = ($book->parametres->facebook_title == '')?$book->parametres->title:$book->parametres->facebook_title;\r
-                       if ($book->parametres->facebook_description != '') {\r
-                               $meta['og:description'] = $book->parametres->facebook_description;\r
-                       }\r
-                       $meta['og:image'] = 'http://dev.ws.fluidbook.com/services/facebook_thumbnail?id=' . $book->book_id ;\r
-               }\r
-\r
-               $res .= '</head>';\r
-               $res .= '<body style="background-color:#' . $theme->parametres->loadingBackColor . '" onload="this.focus();">';\r
-               $res .= cubeMedia::flash2('index.swf', '100%', '100%', $fv, 'fluidbook', '', 10, '#' . $theme->parametres->loadingBackColor, '', 'true', 'noscale', 'gpu', array('allowScriptAccess' => 'always'));\r
-               $js = array($webcompile . 'fluidbook.js');\r
-               $jsvar = array();\r
-\r
-               $gacodes = array(GA);\r
-               if ($book->parametres->googleAnalytics != '') {\r
-                       $gacodes[] = $book->parametres->googleAnalytics;\r
-               }\r
-               $res .= cubePage::googleAnalytics($gacodes, false);\r
-               $res .= '</body>';\r
-               $res .= '</html>';\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function valideDownload()\r
-       {\r
-               global $core;\r
-\r
-               $res .= '<tr><td>' . __("Le téléchargement du fluidbook implique qu'il a été testé et définitivement validé.") . '<br />' . __("Si vous le téléchargez, il vous sera facturé selon les conditions stipulées dans votre contrat.") . '</td></tr>';\r
-               $res .= '<tr><td class="right"><label>' . __("Oui, ce fluidbook est validé, je souhaite le télécharger et il me sera facturé.") . ' ' . form::checkbox('valide', 1, false) . '</label></td></tr>';\r
-\r
-               return $res;\r
-       }\r
-}\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/ws/Controlleur/url/class.ws.url.client.php b/inc/ws/Controlleur/url/class.ws.url.client.php
deleted file mode 100644 (file)
index 6fbba87..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php\r
-class wsUrlClient {\r
-       public static function clients($args)\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               cubePage::autoComplete();\r
-               cubePage::emptyfield();\r
-               commonDroits::min(3);\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
-\r
-               $filtres = array();\r
-\r
-               $res = commonPage::barre($filtres, 'filtreClients', 'clients', $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeClients">';\r
-               $res .= self::listeClients();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeClients($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(3);\r
-               $settings = is_null($settings)?$core->user->getSettings('clients'):$settings;\r
-               $change = is_null($dashboard)?'Client':'Dashboard/' . $dashboard;\r
-               $dao = new commonDAOEntreprise($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'], $core->user);\r
-\r
-               $res = '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::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
-                               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 .= commonPage::pager($settings['page'], $dao->count($core->user) , $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::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
-               commonDroits::min(3);\r
-               $dao = new commonDAOEntreprise($core->con);\r
-               $daoUtilisateur = new commonDAOUtilisateur($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
-               if (wsDroits::admin(false)) {\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
-               }\r
-               // Bloc Fluidbook Workshop\r
-               if (wsDroits::admin(false)) {\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
-\r
-                       $daoSignature = new wsDAOSignature($core->con);\r
-                       $signaturesList = $daoSignature->selectAll();\r
-\r
-                       $signatures = array();\r
-                       foreach($signaturesList as $s) {\r
-                               $signatures[$s->nom] = $s->signature_id;\r
-                       }\r
-\r
-                       $res .= '<tr class="odd"><td>' . __('Signatures Fluidbook') . '</td><td>' . cubeForm::checkMultiple('ws_signatures', $signatures, 5, explode(',', $client->ws_signatures)) . '</td></tr>';\r
-               }\r
-               if ($entreprise_id == 'new') {\r
-                       $daoContact = new commonDAOClient($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
-               commonDroits::min(3);\r
-               $dao = new commonDAOEntreprise($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><a class="ajax" href="#" rel="connectAs/' . $contact->utilisateur_id . '">Se connecter comme ...</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
-               commonDroits::min(3);\r
-\r
-               $dao = new commonDAOClient($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></td><td><a href="#" class="ajax" rel="connectAs/' . $client->utilisateur_id . '">' . __('Se connecter comme ...') . '</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
-\r
-?>
\ No newline at end of file
diff --git a/inc/ws/Controlleur/url/class.ws.url.demande.php b/inc/ws/Controlleur/url/class.ws.url.demande.php
deleted file mode 100644 (file)
index 3b69a16..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php\r
-class wsUrlDemande {\r
-       public static function demandes()\r
-       {\r
-               global $core;\r
-               cubePage::truePopup();\r
-               cubePage::autoComplete();\r
-               cubePage::emptyfield();\r
-               commonDroits::min(5);\r
-               $settings = $core->user->getSettings('demandes');\r
-\r
-               $shortcuts = array();\r
-\r
-               $filtres = array();\r
-               $filtres[] = new commonFiltre(__('Statut'), 'status_demande', $settings['filtres']);\r
-               $filtres[] = new commonFiltre(__('Confiées à'), 'demande_moi', $settings['filtres']);\r
-\r
-               $res = commonPage::barre($filtres, 'filtreDemandes', 'demandes', $shortcuts);\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="listeDemandes">';\r
-               $res .= self::listeDemandes();\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-\r
-       public static function listeDemandes($dashboard = null, $settings = null)\r
-       {\r
-               global $core;\r
-               commonDroits::min(5);\r
-               $settings = is_null($settings)?$core->user->getSettings('demandes'):$settings;\r
-               $change = is_null($dashboard)?'Demandes':'Dashboard/' . $dashboard;\r
-               $dao = new wsDAODemande($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'], $core->user);\r
-\r
-               $res = '<table class="liste">';\r
-               $res .= '<tr><th>' . commonUrl::orderby('#', 'demande_id', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Date') , 'date', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Type') , 'type', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Prospect') . '/' . __('Client'), 'utilisateur_nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Confiée à'), 'revendeur_nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Gérée par'), 'administrateur_nom', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th>' . commonUrl::orderby(__('Statut'), 'status', $settings, 'sort' . $change) . '</th>';\r
-               $res .= '<th class="min"></th><th class="min"></th></tr>';\r
-               $i = 0;\r
-               foreach($liste as $id => $demande) {\r
-                       $odd = cubeMath::isOdd($i)?' class="odd"':'';\r
-                       $res .= '<tr' . $odd . '>';\r
-                       $res .= '<td>' . $demande->demande_id . '</td>';\r
-                       $res .= '<td>' . date(__('d/m/Y H:i'), $demande->date) . '</td>';\r
-                       $res .= '<td>' . $core->demandes_type[$demande->type] . '</td>';\r
-                       $res .= '<td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td>';\r
-                       $revendeur = $demande->revendeur == 0?'-':$demande->revendeur_nom;\r
-                       $res .= '<td>' . $revendeur . '</td>';\r
-                       $administrateur = $demande->administrateur == 0?'-':$demande->administrateur_nom;\r
-                       $res .= '<td>' . $administrateur . '</td>';\r
-                       // Affichage du status\r
-                       // Si non traitée ou traitée, pas la possibilité de changer le status\r
-                       if ($demande->status == 0) {\r
-                               $res .= '<td>' . $core->demandes_status[$demande->status] . '</td>';\r
-                       } else if ($demande->status == 1) {\r
-                               if ($demande->revendeur == $core->user->utilisateur_id) {\r
-                                       $res .= '<td><a href="#" class="ajax" rel="reponseDemande/' . $demande->demande_id . '/' . $demande->revendeur . '/1/1">' . __('Je me suis chargé de cette demande') . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td>' . $core->demandes_status[$demande->status] . ' (<a href="#" class="ajax" rel="resetDemande/' . $demande->demande_id . '" title="' . __('Réinitialiser la demande') . '">x</a>)</td>';\r
-                               }\r
-                       } elseif ($demande->status == 2) {\r
-                               if ($demande->revendeur == $core->user->utilisateur_id) {\r
-                                       $res .= '<td><a href="#" class="ajax" rel="reponseDemande/' . $demande->demande_id . '/' . $demande->revendeur . '/-1/1">' . $core->demandes_status[$demande->status] . '</a></td>';\r
-                               } else {\r
-                                       $res .= '<td>' . $core->demandes_status[$demande->status] . '</td>';\r
-                               }\r
-                       }\r
-                       // On ne peut éditer que si la facture est non traitée et qu'elle n'a pas commencé à être éditée par un autre administrateur\r
-                       if (($demande->administrateur == 0 || $demande->administrateur == $core->user->utilisateur_id) && $demande->status == 0) {\r
-                               $res .= '<td class="action"><a href="#" class="popup" rel="formDemande/' . $demande->demande_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\r
-                       // On n'affiche le bouton "Supprimer" que si la demande est non-traitée\r
-                       if (($demande->administrateur == 0 || $demande->administrateur == $core->user->utilisateur_id) && $demande->status == 0) {\r
-                               $res .= '<td class="action"><a href="#" class="ajax" rel="supprimeDemande/' . $demande->demande_id . '" title="' . __('Êtes-vous certain de vouloir supprimer cette demande ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
-                       } else {\r
-                               $res .= '<td></td>';\r
-                       }\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 .= commonPage::pager($settings['page'], $dao->count($core->user) , $settings['par_page'], 'page' . $change . '/%d');\r
-                       $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('demandes'));\r
-                       $res .= '</td></tr>';\r
-               }\r
-               $res .= '</table>';\r
-               return $res;\r
-       }\r
-\r
-       public static function formDemande($demande_id = 'new')\r
-       {\r
-               global $core;\r
-               commonDroits::min(5);\r
-               $dao = new wsDAODemande($core->con);\r
-               $daoUtilisateur = new commonDAOUtilisateur($core->con);\r
-               $demande = $dao->selectById($demande_id);\r
-               if ($demande->administrateur != 0 && $demande->administrateur != $core->user->utilisateur_id) {\r
-                       $res = '<tr><td colspan="2"><p class="center">' . __("Cette demande est actuellement en cours d'édition par un autre administrateur") . '</p></td></tr>';\r
-                       return $res;\r
-               }\r
-               if ($demande->status > 1) {\r
-                       $res = '<tr><td colspan="2"><p class="center">' . __("Cette demande est actuellement en cours de traitement") . '</p></td></tr>';\r
-                       return $res;\r
-               }\r
-               // On place la demande comme en cours d'édition\r
-               $dao->setAdministrateur($demande_id, $core->user->utilisateur_id);\r
-               // On vérifie que l'utilisateur n'est pas déjà géré par un revendeur\r
-               $demandeur = $daoUtilisateur->selectById($demande->utilisateur, 'utilisateurs_entreprise');\r
-               $administrateurs = $daoUtilisateur->selectWSAdministrateursId();\r
-               if (!is_null($demandeur->ws_admin) && !in_array($demandeur->ws_admin, $administrateurs)) {\r
-                       // Si déjà géré par un revendeur\r
-                       $revendeur = $daoUtilisateur->selectById($demandeur->ws_admin, 'utilisateurs_entreprise');\r
-                       $actions[__('Je confie la demande à ' . $revendeur->rs . ' (' . $revendeur->prenom . ' ' . $revendeur->nom . ')')] = $demandeur->ws_admin;\r
-               } else {\r
-                       $liste = $daoUtilisateur->selectWSRevendeursFacturables();\r
-                       $revendeurs = array();\r
-                       foreach($liste as $revendeur) {\r
-                               $revendeurs[$revendeur->rs . '(' . $revendeur->prenom . ' ' . $revendeur->nom . ')'] = $revendeur->utilisateur_id;\r
-                       }\r
-\r
-                       $actions = array(__('Je vais me charger de cette demande') => $core->user->utilisateur_id);\r
-                       $actions[' '] = array();\r
-                       $actions[__('Je confie la demande à') . ' : '] = $revendeurs;\r
-               }\r
-\r
-               $res = '<tr><td>' . __('Numéro de demande') . '</td><td>' . form::hidden('demande_id', $demande->demande_id) . '' . $demande->demande_id . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Date de la demande') . '</td><td>' . date(__('d/m/Y H:i'), $demande->date) . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Emetteur de la demande') . '</td><td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td></tr>';\r
-               $res .= '<tr><td>' . __('Nombre de pages') . '</td><td>' . $demande->pages . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Nombre de liens') . '</td><td>' . $demande->liens . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Nombre de langues') . '</td><td>' . $demande->langues . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Détails') . '</td><td>' . $demande->details . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Action') . '</td><td>' . form::combo('revendeur', $actions) . '</td></tr>';\r
-               $res .= '<tr><td></td></tr>';\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function reponseDemande($args)\r
-       {\r
-               global $core;\r
-\r
-               commonDroits::min(3);\r
-\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain(null, false);\r
-\r
-               $res .= commonPage::bh();\r
-\r
-               $demande_id = $args[1];\r
-               $revendeur_id = $args[2];\r
-\r
-               $dao = new wsDAODemande($core->con);\r
-               $demande = $dao->selectById($demande_id);\r
-               if ($demande->revendeur != $revendeur_id || $demande->revendeur != $core->user->utilisateur_id) {\r
-                       commonDroits::error();\r
-                       exit;\r
-               }\r
-\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain();\r
-               $res .= commonPage::bh();\r
-               $res .= '<div id="accepteDemandes">';\r
-               $res .= '<h2>' . $core->typo->Titre(__('Prendre en charge une demande de devis')) . '</h2>';\r
-               $res .= '<br /><br />';\r
-               $res .= '<p>' . __('Si vous acceptez de traiter la demande suivante, veuillez cliquer sur le bouton "Accepter la demande" situé à droite de la description.');\r
-               $res .= ' ' . __('Vous avez également la possibilité de décliner la demande en cliquant sur le bouton "Décliner la demande"') . "</p>";\r
-               $res .= '<br /><br />';\r
-\r
-               $res .= '<table>';\r
-               $res .= '<tr><th class="left" colspan="2">' . __("Détails de la demande") . '</th><th class="left" style="width:40%">' . __('Votre action') . '</th></tr>';\r
-               $res .= '<tr><td>' . __('Numéro de demande') . '</td><td>' . $demande->demande_id . '</td>';\r
-               $res .= '<td>' . '<a href="#" class="ajax" rel="reponseDemande/' . $demande_id . '/' . $revendeur_id . '/1" >' . cubeMedia::cssRollover($core->typo->BookTelecharger('Accepter la demande', '', false)) . '</a>' . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Date de la demande') . '</td><td>' . date(__('d/m/Y H:i'), $demande->date) . '</td>';\r
-               $res .= '<td>' . '<a href="#" class="ajax" rel="reponseDemande/' . $demande_id . '/' . $revendeur_id . '/0">' . cubeMedia::cssRollover($core->typo->Supprimer('Décliner la demande', '', false)) . '</a>' . '</td>';\r
-               $res .= '</tr>';\r
-               $res .= '<tr><td>' . __('Client') . ' / ' . __('Prospect') . '</td><td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td></tr>';\r
-               $res .= '<tr><td>' . __('Nombre de pages') . '</td><td>' . $demande->pages . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Nombre de liens') . '</td><td>' . $demande->liens . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Nombre de langues') . '</td><td>' . $demande->langues . '</td></tr>';\r
-               $res .= '<tr><td>' . __('Détails') . '</td><td>' . $demande->details . '</td></tr>';\r
-               $res .= '</table>';\r
-\r
-               $res .= '</div>';\r
-               $res .= commonPage::bf();\r
-               $res .= commonPage::bMain();\r
-               return $res;\r
-       }\r
-}\r
-\r
-?>
\ No newline at end of file
diff --git a/inc/ws/Controlleur/url/class.ws.url.traduction.php b/inc/ws/Controlleur/url/class.ws.url.traduction.php
deleted file mode 100644 (file)
index 7efd737..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php\r
-class wsUrlTraduction{\r
-       public static function traductions($args)\r
-       {\r
-               global $core;\r
-\r
-               commonDroits::min(5);\r
-\r
-               if (count($args) < 2) {\r
-                       $args[1] = 'fr';\r
-               }\r
-\r
-               $allLangs = cubeLang::getCodes($core->user->lang);\r
-               $existingLangs = array();\r
-\r
-               $dao = new wsDAOLang($core->con);\r
-               $langs = $dao->selectAll();\r
-               foreach($langs as $lang) {\r
-                       if (!isset($allLangs[$lang->lang_id])) {\r
-                               continue;\r
-                       }\r
-                       $existingLangs[$lang->lang_id] = $allLangs[$lang->lang_id];\r
-\r
-                       unset($allLangs[$lang->lang_id]);\r
-               }\r
-\r
-               $langs = array(__('Langues configurées') => array_flip($existingLangs), __('Autres langues') => array_flip($allLangs));\r
-\r
-               $res = commonPage::barre();\r
-               $res .= commonPage::tMain(null, false);\r
-\r
-               $res .= commonPage::bh();\r
-               $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 .= '</table>';\r
-               $res .= '</form>';\r
-               $res .= commonPage::bf();\r
-\r
-               $res .= '<div id="formLang">';\r
-               $res .= self::formLang($args[1]);\r
-               $res .= '</div>';\r
-               $res .= commonPage::bMain(true);\r
-\r
-               return $res;\r
-       }\r
-\r
-       public static function formLang($lang_id)\r
-       {\r
-               commonDroits::min(5);\r
-               global $core;\r
-               $dao = new wsDAOLang($core->con);\r
-               $lang = $dao->selectById($lang_id);\r
-\r
-               $res = '<form action="saveLang" method="post">';\r
-\r
-               $res .= commonPage::bh();\r
-               $res .= '<table class="liste">';\r
-               $res .= '<tr><td>' . __('Police de caractères') . ' : </td><td>' . form::hidden('lang', $lang_id) . form::combo('font', self::getFonts(), $lang->font) . '</td></tr>';\r
-               $res .= '<tr class="odd"><td>' . __('Jeux de caractères') . ' : </td><td>' . form::combo('charset', self::getCharsets(), $lang->charset) . '</td></tr>';\r
-               $res .= '<tr><td>' . __("Langue de l'installeur") . ' : </td><td>' . form::combo('nsis', self::getNSISLangs(), $lang->nsis) . '</td></tr>';\r
-               $res .= '<tr><td colspan="2" class="right odd"><a href="#" class="submit">' . $core->typo->Ajouter('Valider') . '</a></td></tr>';\r
-               $res .= '</table>';\r
-               $res .= commonPage::bf();\r
-\r
-               $res .= commonPage::bh();\r
-               $res .= cubeLang::translationForm(PLAYER_SOURCES, $lang_id , null, 'liste', array(), '<a href="#" class="submit">' . $core->typo->Ajouter(__('Enregistrer')) . '</a>', $lang->traductions);\r
-               $res .= commonPage::bf();\r
-               $res .= '</form>';\r
-               return $res;\r
-       }\r
-\r
-       public static function getFonts()\r
-       {\r
-               $formats = array('ttf', 'otf', 'TTF', 'OTF');\r
-\r
-               $dr = opendir(FONT_PATH);\r
-               $fonts = array();\r
-               while ($file = readdir($dr)) {\r
-                       if ($file == '.' || $file == '..' || !in_array(files::getExtension($file), $formats)) {\r
-                               continue;\r
-                       }\r
-                       $fonts[$file] = $file;\r
-               }\r
-               return $fonts;\r
-       }\r
-\r
-       protected static function getCharsets()\r
-       {\r
-               $sets = cubeFlexFontAsset::getSets();\r
-               $res = array();\r
-               foreach($sets as $k => $v) {\r
-                       $res[$k] = $k;\r
-               }\r
-               return $res;\r
-       }\r
-\r
-       protected static function getNSISLangs()\r
-       {\r
-               $res = array();\r
-               $dir = WS_FILES . '/nsislangs';\r
-               $dr = opendir($dir);\r
-               while ($file = readdir($dr)) {\r
-                       if ($file == '.' || $file == '..') {\r
-                               continue;\r
-                       }\r
-                       $e = explode('.', $file);\r
-                       $res[$e[0]] = $e[0];\r
-               }\r
-\r
-               ksort($res);\r
-               return $res;\r
-       }\r
-}\r
-?>
\ No newline at end of file
index e39de15826a733f9c75cdf05f3dc59faf40831bb..44867a15a491f9bc45b96c86b07bcd3d0c85c8a4 100644 (file)
@@ -102,22 +102,17 @@ class wsDAODemande extends commonDAO {
 \r
        public function accepteDemande($demande_id, $revendeur)\r
        {\r
-               $demande = $this->setStatus($demande_id, 2);\r
+               $c = $this->con->openCursor('demandes');\r
+               $c->status = 2;\r
+               $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
+\r
+               $demande = $this->selectById($demande_id);\r
                // Mets également à jour l'entreprise afin d'associer client et revendeur\r
                $daoEntreprise = new commonDAOEntreprise($this->con);\r
                $daoEntreprise->setWSAdmin($demande->entreprise, $revendeur);\r
                return $demande;\r
        }\r
 \r
-       public function setStatus($demande_id, $status)\r
-       {\r
-               $c = $this->con->openCursor('demandes');\r
-               $c->status = $status;\r
-               $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
-\r
-               return $this->selectById($demande_id);\r
-       }\r
-\r
        public function setRevendeur($demande_id, $revendeur)\r
        {\r
                // Mets à jour l'entreprise\r