]> _ Git - cubeextranet.git/commitdiff
wip #3753 @3
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 24 Nov 2020 19:36:55 +0000 (19:36 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 24 Nov 2020 19:36:55 +0000 (19:36 +0000)
inc/commons/class.common.core.php
inc/commons/class.common.tools.php
inc/ws/Controlleur/class.ws.maintenance.php
inc/ws/Controlleur/class.ws.url.php
inc/ws/Controlleur/class.ws.users.tree.php
inc/ws/DAO/class.ws.dao.demande.php
inc/ws/Metier/class.ws.demande.php

index b9d2d3f845541e6390363c564f10d3cc6fa12350..31bf0feb178280adbda8fe76c7d0eb59bd8122c8 100644 (file)
@@ -150,6 +150,7 @@ class commonCore extends cubeCore
         $db->utilisateurs->ws_settings('text', 0, false);\r
         $db->utilisateurs->ws_rights('text', 0, false);\r
         $db->utilisateurs->ws_domains('text', 0, false);\r
+        $db->utilisateurs->ws_count('integer', 0, false);\r
         $db->utilisateurs->enabled('integer', 0, false, '1');\r
         // Clés\r
         $db->utilisateurs->primary('pk_utilisateurs', 'utilisateur_id');\r
@@ -465,6 +466,7 @@ class commonCore extends cubeCore
         $db->demandes->revendeur('integer', 0, false);\r
         $db->demandes->utilisateur('integer', 0, false);\r
         $db->demandes->administrateur('integer', 0, false);\r
+        $db->demandes->gclid('varchar', 256, false);\r
         // Clés\r
         $db->demandes->primary('pk_demandes', 'demande_id');\r
 \r
@@ -532,9 +534,8 @@ class commonCore extends cubeCore
 \r
         }\r
 \r
-\r
         $this->views->createView('e2_u', 'SELECT id AS utilisateur_id, enabled, email, password, e1_ws_password AS ws_password, firstname AS prenom, lastname AS nom, phone AS telephone,e1_mobile AS mobile,e1_fax as fax, locale AS lang,\r
- e1_ws_settings AS ws_settings, e1_settings AS settings, e1_ws_rights AS ws_rights, e1_ws_domains AS ws_domains, e1_login AS login,e1_grade AS grade,e1_resetpassword AS reset_password,\r
+ e1_ws_settings AS ws_settings, e1_settings AS settings, e1_ws_rights AS ws_rights, e1_ws_domains AS ws_domains, e1_ws_count AS ws_count, e1_login AS login,e1_grade AS grade,e1_resetpassword AS reset_password,\r
  JSON_UNQUOTE(address->"$.address") AS adresse,\r
  JSON_UNQUOTE(address->"$.postcode") AS code_postal,\r
  JSON_UNQUOTE(address->"$.country") AS pays,\r
@@ -680,7 +681,7 @@ LEFT JOIN e2_u a ON ri.administrateur_id=a.utilisateur_id');
             . 'FROM themes t '\r
             . 'LEFT JOIN themes_books_nb b ON t.theme_id=b.theme '\r
             . 'LEFT JOIN utilisateurs_entreprise e ON t.proprietaire=e.utilisateur_id');\r
-        $this->views->createView('demandes_vue', 'SELECT d.*, CONCAT(c.rs,\' (\',c.prenom,\' \',c.nom,\')\') AS utilisateur_nom, CONCAT(r.rs,\' (\',r.prenom,\' \',r.nom,\')\') AS revendeur_nom, c.entreprise AS entreprise, a.prenom AS administrateur_nom '\r
+        $this->views->createView('demandes_vue', 'SELECT d.*, CONCAT(c.rs,\' (\',c.prenom,\' \',c.nom,\')\') AS utilisateur_nom, CONCAT(r.rs,\' (\',r.prenom,\' \',r.nom,\')\') AS revendeur_nom, c.entreprise AS entreprise, a.prenom AS administrateur_nom, c.ws_count AS fluidbooks, IF(d.gclid=\'\',\'Organic\',\'Paid\') AS origin '\r
             . 'FROM demandes d '\r
             . 'LEFT JOIN utilisateurs_entreprise r ON d.revendeur=r.utilisateur_id '\r
             . 'LEFT JOIN utilisateurs_entreprise c ON d.utilisateur=c.utilisateur_id '\r
index 4d8f0105abaaf8f04ba6df48bad02cb959140467..5aec2d6bc5fea94e33a02ca73df6aa6dad7cfbb6 100644 (file)
@@ -1187,7 +1187,7 @@ class commonTools
             'ascocelda' => 'Asco & Celda',
             'wesco' => 'Wesco',
             'mopec' => 'Mopec',
-            'intex'=>'Intex'];
+            'intex' => 'Intex'];
 
         $options = array_flip($options);
         ksort($options);
@@ -1389,7 +1389,7 @@ class commonTools
         $res = commonPage::barre();
         $res .= commonPage::tMain();
         $res .= commonPage::bh();
-        $res .= '<form action="' . SITE_PATH . 'tools/convertXlsxToJson" method="post" class="notajax" enctype="multipart/form-data">';
+        $res .= '<form action="' . SITE_PATH . 'tools/convertXlsxToColumnKeysJson" method="post" class="notajax" enctype="multipart/form-data">';
         $res .= '<table class="liste">';
         $res .= '<tr><th><strong>' . __('Convertir un xlsx en json') . '</strong></th></tr>';
         $res .= '<tr><td>' . __('Charger un fichier excel') . '</td></tr>';
@@ -1421,6 +1421,16 @@ class commonTools
         die(json_encode($res));
     }
 
+    public static function convertXlsxToColumnKeysJson($args)
+    {
+        require_once ROOT . '/inc/ws/Util/class.ws.util.php';
+        $res = wsUtil::excelToArrayKeyVars($_FILES['file']['tmp_name']);
+
+        ob_end_clean();
+        header('Content-Type: application/json');
+        die(json_encode($res));
+    }
+
     public static function convertXlsxToKeyValueJson($args)
     {
         new PHPExcel();
@@ -1646,6 +1656,37 @@ class commonTools
         return $res;
     }
 
+
+    public function optimizeImages()
+    {
+        global $core;
+
+        commonDroits::min(1);
+
+        if (is_array($error)) {
+            $errorMessage = '';
+        } else {
+            $errorMessage = $error;
+        }
+
+        $res = commonPage::barre();
+        $res .= commonPage::tMain();
+        $res .= commonPage::bh();
+        $res .= '<form action="' . SITE_PATH . 'tools/optimizeImages" method="post" class="notajax" enctype="multipart/form-data">';
+        $res .= '<table class="liste">';
+        $res .= '<tr><th><strong>' . __('Optimiser des images') . '</strong></th></tr>';
+        $res .= '<tr class="odd"><td>Images source</td><td><input type="file" name="file[]" multiple /></td></tr>';
+        $res .= '<tr class="odd"><td>Format</td><td><select name="format"><option></option></select> </td></tr>';
+        $res .= '<tr><td class="right"><a href="#" class="submit">' . $core->typo->BoutonOK(__('Genérer la bibliothèque')) . '</a></td></td>';
+        $res .= '</table>';
+        $res .= '</form>';
+        $res .= '</div>';
+        $res .= commonPage::bf();
+        $res .= commonPage::bMain();
+        return $res;
+    }
+
+
     public static function buildIpGlobal()
     {
 
index d76a03d28ee46af47d1295ea3e7d2ee3252c282f..25f8dc1f6c61a70040966d626b9105c005964fdb 100644 (file)
@@ -186,6 +186,12 @@ class wsMaintenance
 //        $core->refreshWSUsersTree();
 //    }
 
+    public static function refreshUsersTree()
+    {
+        global $core;
+        $core->refreshWSUsersTree();
+    }
+
     public static function exportSommaire($args)
     {
         global $core;
@@ -1119,6 +1125,17 @@ class wsMaintenance
         exit;
     }
 
+    public static function installPetzl()
+    {
+        CubeIT_Util_PHP::neverStop();
+        $langs = ['FR' => 19014, 'EN' => 19092, 'IT' => 19099, 'JP' => 19101, 'KR' => 19103, 'NL' => 19104, 'PL' => 19105, 'RU' => 19106, 'CN' => 19107, 'CZ' => 19108, 'DE' => 19109, 'ES' => 19111, 'HU' => 19112];
+        foreach ($langs as $lang => $fbid) {
+            $exporter = new wsExporter();
+            $exporter->export($fbid, $x, 'install_hosting', 'online', "Petzl/Petzl-pro-catalog-2021/" . $lang, '');
+        }
+        exit;
+    }
+
     public static function fixStats($args)
     {
 //        commonDroits::min(5);
@@ -1369,17 +1386,26 @@ class wsMaintenance
         }
     }
 
-    public static function makeWSexe()
+    public static function makeWSexe($args)
     {
+        $platform = $args[0] ?: 'windows';
+
+        if ($platform === 'windows') {
+            $p = 'windows-x32';
+            $exe = 'workshop';
+        } else if ($platform === 'mac') {
+            $p = 'mac-x64';
+            $exe = 'Fluidbook Workshop';
+        }
 
         $path = ROOT . '/desktop';
-        $outpath = $path . '/windows';
+        $outpath = $path . '/' . $platform;
 
         $cl = new CubeIT_CommandLine('/usr/local/web2exe/web2exe-linux');
         $cl->setPath(CONVERTER_PATH);
         $cl->setEnv('TMPDIR', '/home/extranetfiles/tmp');
         $cl->setLongArgumentSeparator(' ');
-        $cl->setArg('export-to', 'windows-x32');
+        $cl->setArg('export-to', $p);
         $cl->setArg('uncompressed-folder');
         $cl->setArg('title', 'Fluidbook Workshop');
         $cl->setArg('output-dir', $outpath);
@@ -1387,13 +1413,16 @@ class wsMaintenance
         //$cl->setArg('sdk-build');
         $cl->setArg('main', 'index.html');
         $cl->setArg('package-json');
-        $cl->setArg('name', 'FluidbookWorkshop.exe');
-        //$cl->setArg('mac-icon', $this->vdir . 'icon.icns');
-        $cl->setArg('exe-icon', $path . '/assets/fluidbook.ico');
+        //$cl->setArg('name', 'FluidbookWorkshop.exe');
+        if ($platform === 'mac') {
+            $cl->setArg('mac-icon', $path . '/assets/fluidbook.icns');
+        } else if ($platform === 'windows') {
+            $cl->setArg('exe-icon', $path . '/assets/fluidbook.ico');
+        }
         $cl->setArg('icon', $path . '/assets/fluidbook.png');
         $cl->setArg('width', 1600);
         $cl->setArg('height', 800);
-        $cl->setArg('app-name', 'workshop');
+        $cl->setArg('app-name', $exe);
         $cl->setArg('version', '1.0');
         $cl->setArg('id', 'com.fluidbook.workshop');
         $cl->setArg('verbose');
@@ -1405,10 +1434,25 @@ class wsMaintenance
         echo $cl->commande . "\n";
         echo $cl->output . "\n";
 
-        copy(WS_COMPILE_ASSETS . '/_exehtml/_ffmpeg/ffmpeg.dll', $outpath . '/workshop/windows-x32/ffmpeg.dll');
-        $pepper = $path . '/assets/PepperFlash';
-        `cp -r $pepper $outpath/workshop/windows-x32/`;
-
+        if ($platform === 'windows') {
+            copy(WS_COMPILE_ASSETS . '/_exehtml/_ffmpeg/ffmpeg.dll', $outpath . '/workshop/' . $p . '/ffmpeg.dll');
+            $pepper = $path . '/assets/PepperFlash';
+            `cp -r $pepper $outpath/workshop/windows-x32/`;
+        } else if ($platform === 'mac') {
+            $appContainer = $outpath . '/' . $exe . '/' . $p;
+            $appPath = $appContainer . '/' . $exe . '.app';
+//            $current = $appPath . '/Contents/Frameworks/nwjs Framework.framework/Versions/86.0.4240.111';
+//            $pepper = $path . '/assets/mac/PepperFlash';
+//            $dest = $current . '/Internet Plug-Ins/';
+//            if (!file_exists($dest)) {
+//                mkdir($dest, 0777, true);
+//            }
+//            echo `cp -rv $pepper "$dest"`;
+            //copy(WS_COMPILE_ASSETS . '/_exehtml/_ffmpeg/libffmpeg.dylib', $current . '/libffmpeg.dylib');
+            echo wsPackagerMacEXEHTML::_signApp($appPath, false);
+            //unlink($appContainer . '/credits.html');
+            //CubeIT_Util_Zip::archive($appContainer, $appPath . '.zip');
+        }
     }
 }
 
index 08b54660f3244371c2eaf5aed69b4a8fd46c49e2..314b937d4cff3eaa756ddd78198505af40035dcb 100644 (file)
@@ -1802,6 +1802,7 @@ html,body{height:100%;cursor: wait;font-family: "Open Sans", Arial;background-co
         $filtres = array();
         $filtres[] = new commonFiltre(__('Statut'), 'status_demande', $settings['filtres']);
         $filtres[] = new commonFiltre(__('Confiées à'), 'demande_moi', $settings['filtres']);
+        // $filtres[] = new commonFiltre(__('Origine'), 'demande_origine', $settings['filtres']);
 
         $res = commonPage::barre($filtres, 'filtreDemandes', 'demandes', $shortcuts);
         $res .= commonPage::tMain();
@@ -1830,11 +1831,12 @@ html,body{height:100%;cursor: wait;font-family: "Open Sans", Arial;background-co
         $res = '<table class="liste">';
         $res .= '<tr><th>' . commonUrl::orderby('#', 'demande_id', $settings, 'sort' . $change) . '</th>';
         $res .= '<th>' . commonUrl::orderby(__('Date'), 'date', $settings, 'sort' . $change) . '</th>';
-        $res .= '<th>' . commonUrl::orderby(__('Type'), 'type', $settings, 'sort' . $change) . '</th>';
         $res .= '<th>' . commonUrl::orderby(__('Prospect') . '/' . __('Client'), 'utilisateur_nom', $settings, 'sort' . $change) . '</th>';
         $res .= '<th>' . commonUrl::orderby(__('Confiée à'), 'revendeur_nom', $settings, 'sort' . $change) . '</th>';
         $res .= '<th>' . commonUrl::orderby(__('Gérée par'), 'administrateur_nom', $settings, 'sort' . $change) . '</th>';
         $res .= '<th>' . commonUrl::orderby(__('Statut'), 'status', $settings, 'sort' . $change) . '</th>';
+        $res .= '<th>' . commonUrl::orderby(__('Origine'), 'origin', $settings, 'sort' . $change) . '</th>';
+        $res .= '<th>' . commonUrl::orderby(__('Fluidbooks'), 'fluidbooks', $settings, 'sort' . $change) . '</th>';
         $res .= '<th class="min"></th><th class="min"></th></tr>';
         $i = 0;
         foreach ($liste as $id => $demande) {
@@ -1842,7 +1844,6 @@ html,body{height:100%;cursor: wait;font-family: "Open Sans", Arial;background-co
             $res .= '<tr' . $odd . '>';
             $res .= '<td>' . $demande->demande_id . '</td>';
             $res .= '<td>' . date(__('d/m/Y H:i'), $demande->date) . '</td>';
-            $res .= '<td>' . $core->demandes_type[$demande->type] . '</td>';
             $res .= '<td><a href="#" class="popup" rel="formClient/' . $demande->entreprise . '">' . $demande->utilisateur_nom . '</a></td>';
             $revendeur = $demande->revendeur == 0 ? '-' : $demande->revendeur_nom;
             $res .= '<td>' . $revendeur . '</td>';
@@ -1859,6 +1860,8 @@ html,body{height:100%;cursor: wait;font-family: "Open Sans", Arial;background-co
                     $res .= '<td>' . $core->demandes_status[$demande->status] . ' (<a href="#" class="ajax" rel="resetDemande/' . $demande->demande_id . '" title="' . __('Réinitialiser la demande') . '">x</a>)</td>';
                 }
             }
+            $res .= '<td>' . $demande->origin . '</td>';
+            $res .= '<td>' . $demande->fluidbooks . '</td>';
             // 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
             if (($demande->administrateur == 0 || $demande->administrateur == $core->user->utilisateur_id) && $demande->status == 0) {
                 $res .= '<td class="action"><a href="#" class="popup" rel="formDemande/' . $demande->demande_id . '">' . cubeMedia::image(IMG . '/edit.png') . '</a></td>';
index e3f8066e49a56097367c1a77c0609d3f635d3dc1..c175a7048eb5659fae020b266c5762496cfb4c05 100644 (file)
@@ -46,6 +46,16 @@ class wsUsersTree
             $this->domains[$r->utilisateur_id] = mb_strtolower($d[1]);\r
         }\r
 \r
+        $daoBook = new wsDAOBook($this->con);\r
+        $books = $daoBook->selectAll();\r
+        $owners = [];\r
+        foreach ($books as $book) {\r
+            if (!isset($owners[$book->proprietaire_id])) {\r
+                $owners[$book->proprietaire_id] = 0;\r
+            }\r
+            $owners[$book->proprietaire_id]++;\r
+        }\r
+\r
         $this->facturables = $this->getFacturables();\r
         // Fabrication de l'arbre\r
         $c = $this->con->openCursor('ws_users_tree');\r
@@ -131,6 +141,11 @@ class wsUsersTree
 \r
         $c = $this->con->openCursor('extranet_users.user');\r
         foreach ($this->admins as $admin => $list) {\r
+            $wscount = 0;\r
+            foreach ($list as $item) {\r
+                $wscount += $owners[$item];\r
+            }\r
+            $c->e1_ws_count = $wscount;\r
             $c->e1_ws_rights = implode(',', $list);\r
             $c->e1_ws_domains = implode(',', $adom[$admin]);\r
             $c->update('WHERE id=\'' . $this->con->escape($admin) . '\'');\r
index d618695898faa25c47f8447f3e33c3c75331a0f5..af7e744556319221ed4385c20ff7af597d48265e 100644 (file)
 <?php\r
 \r
-class wsDAODemande extends commonDAO {\r
-\r
-       protected function singleton($r) {\r
-               global $core;\r
-               $demande = new wsDemande();\r
-               $demande->demande_id = $r->demande_id;\r
-               $demande->type = $r->type;\r
-               $demande->type_nom = $core->demandes_type[$r->type];\r
-               $demande->pages = $r->pages;\r
-               $demande->liens = $r->liens;\r
-               $demande->langues = $r->langues;\r
-               $demande->details = $r->details;\r
-               $demande->date = $r->date;\r
-               $demande->utilisateur = $r->utilisateur;\r
-               $demande->status = $r->status;\r
-               $demande->revendeur = $r->revendeur;\r
-               $demande->administrateur = $r->administrateur;\r
-\r
-               $demande->utilisateur_nom = $r->utilisateur_nom;\r
-               $demande->revendeur_nom = $r->revendeur_nom;\r
-               $demande->entreprise = $r->entreprise;\r
-               $demande->administrateur_nom = $r->administrateur_nom;\r
-\r
-               return $demande;\r
-       }\r
-\r
-       protected function getNextId() {\r
-               $r = $this->con->select('SELECT MAX(demande_id) AS demande_id FROM demandes');\r
-               return $r->demande_id + 1;\r
-       }\r
-\r
-       public function selectById($demande_id = null) {\r
-               $r = $this->con->select('SELECT * FROM demandes_vue WHERE demande_id=\'' . $this->con->escape($demande_id) . '\' LIMIT 1');\r
-               return $this->singleton($r);\r
-       }\r
-\r
-       public function getListe($orderby = null, $sens = null, $limit = null) {\r
-               global $core;\r
-               if (!is_null($this->q)) {\r
-                       $where = '';\r
-                       $where .= 'demande_id=\'' . $this->con->escape($this->q) . '\' OR ';\r
-                       $where .= 'utilisateur_nom LIKE \'%' . $this->con->escape($this->q) . '%\' OR ';\r
-                       $where .= 'revendeur_nom LIKE \'%' . $this->con->escape($this->q) . '%\' OR ';\r
-                       $limit = null;\r
-               } else {\r
-                       $where = $this->makeWhereFromFiltres();\r
-               }\r
-\r
-               $orderby = is_null($orderby) ? 'demande_id' : $orderby;\r
-               $sens = is_null($sens) ? 'DESC' : $sens;\r
-               $limit = is_null($limit) ? '' : $this->con->limit($limit[0], $limit[1]);\r
-\r
-               $sql = 'SELECT * FROM demandes_vue WHERE ' . $where . ' ORDER BY ' . $orderby . ' ' . $sens . ' ' . $limit;\r
-               $r = $this->con->select($sql);\r
-               return $this->factory($r);\r
-       }\r
-\r
-       public function sauve($data) {\r
-               global $core;\r
-\r
-               $c = $this->con->openCursor('demandes');\r
-               $c->type = $data['type'];\r
-               $c->pages = $data['pages'];\r
-               $c->liens = $data['liens'];\r
-               $c->langues = $data['langues'];\r
-               $c->details = $data['details'];\r
-               $c->utilisateur = $data['utilisateur'];\r
-               $c->revendeur = $data['revendeur'];\r
-               $c->administrateur = $data['administrateur'];\r
-               $c->status = $data['status'];\r
-\r
-               if ($data['demande_id'] == 'new' || $data['demande_id'] == '') {\r
-                       $c->date = TIME;\r
-                       $demande_id = $c->demande_id = $this->getNextId();\r
-                       $c->insert();\r
-               } else {\r
-                       $demande_id = $data['demande_id'];\r
-                       $c->update('WHERE demande_id=\'' . $this->con->escape($data['demande_id']) . '\'');\r
-               }\r
-\r
-               return $this->selectById($demande_id);\r
-       }\r
-\r
-       public function getMailto($demande_id) {\r
-\r
-               $demande = $this->selectById($demande_id);\r
-\r
-               $daoUtilisateur = new commonDAOClient($this->con);\r
-               $user = $daoUtilisateur->selectById($demande->utilisateur);\r
-\r
-               $res = 'mailto:';\r
-               $res .= rawurlencode($user->prenom . ' ' . $user->nom . '<' . $user->email . '>');\r
-               $res.='?subject=' . rawurlencode('Re: [Fluidbook] ' . __('Demande de devis'));\r
-               $res.='&body=' . rawurlencode(wsDemande::asMailBody($demande, $user));\r
-               return $res;\r
-       }\r
-\r
-       public function setAdministrateur($demande_id, $administrateur) {\r
-               $c = $this->con->openCursor('demandes');\r
-               $c->administrateur = $administrateur;\r
-               $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
-       }\r
-\r
-       public function reinitDemande($demande_id) {\r
-               $c = $this->con->openCursor('demandes');\r
-               $c->administrateur = 0;\r
-               $c->revendeur = 0;\r
-               $c->status = 0;\r
-               $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
-       }\r
-\r
-       public function accepteDemande($demande_id, $revendeur) {\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 setRevendeur($demande_id, $revendeur) {\r
-               // Mets à jour l'entreprise\r
-               $c = $this->con->openCursor('demandes');\r
-               $c->revendeur = $revendeur;\r
-               $c->status = 1;\r
-               $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
-\r
-               $demande = $this->selectById($demande_id);\r
-               return $demande;\r
-       }\r
-\r
-       public function count() {\r
-               $r = $this->con->select('SELECT COUNT(*) AS nb FROM demandes WHERE ' . $this->makeWhereFromFiltres());\r
-               return $r->nb;\r
-       }\r
-\r
-       public function supprime($demande_id) {\r
-               $this->con->execute('DELETE FROM demandes WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
-       }\r
-\r
-       protected function makeWhereFromFiltres() {\r
-               global $core;\r
-               if (!is_null($this->filtres)) {\r
-                       $w = array('1=1');\r
-                       if (commonFiltre::test('status_demande', $this->filtres)) {\r
-                               $w[] = 'status IN(' . implode(',', array_keys($this->filtres['status_demande'])) . ')';\r
-                       }\r
-                       if (commonFiltre::test('demande_moi', $this->filtres)) {\r
-                               $keys = array_keys($this->filtres['demande_moi']);\r
-\r
-                               foreach ($keys as $k) {\r
-                                       if ($k == 'moi') {\r
-                                               $w[] = 'revendeur=' . $core->user->utilisateur_id;\r
-                                       } elseif ($k == 'autres') {\r
-                                               $w[] = 'revendeur!=' . $core->user->utilisateur_id;\r
-                                       }\r
-                               }\r
-                       }\r
-                       return implode(' AND ', $w);\r
-               } else {\r
-                       return '1=1';\r
-               }\r
-       }\r
+class wsDAODemande extends commonDAO\r
+{\r
+\r
+    protected function singleton($r)\r
+    {\r
+        global $core;\r
+        $demande = new wsDemande();\r
+        $demande->demande_id = $r->demande_id;\r
+        $demande->type = $r->type;\r
+        $demande->type_nom = $core->demandes_type[$r->type];\r
+        $demande->pages = $r->pages;\r
+        $demande->liens = $r->liens;\r
+        $demande->langues = $r->langues;\r
+        $demande->details = $r->details;\r
+        $demande->date = $r->date;\r
+        $demande->utilisateur = $r->utilisateur;\r
+        $demande->status = $r->status;\r
+        $demande->revendeur = $r->revendeur;\r
+        $demande->administrateur = $r->administrateur;\r
+\r
+        $demande->utilisateur_nom = $r->utilisateur_nom;\r
+        $demande->revendeur_nom = $r->revendeur_nom;\r
+        $demande->entreprise = $r->entreprise;\r
+        $demande->administrateur_nom = $r->administrateur_nom;\r
+        $demande->origin = $r->origin;\r
+        $demande->fluidbooks = $r->fluidbooks;\r
+\r
+        return $demande;\r
+    }\r
+\r
+    protected function getNextId()\r
+    {\r
+        $r = $this->con->select('SELECT MAX(demande_id) AS demande_id FROM demandes');\r
+        return $r->demande_id + 1;\r
+    }\r
+\r
+    public function selectById($demande_id = null)\r
+    {\r
+        $r = $this->con->select('SELECT * FROM demandes_vue WHERE demande_id=\'' . $this->con->escape($demande_id) . '\' LIMIT 1');\r
+        return $this->singleton($r);\r
+    }\r
+\r
+    public function getListe($orderby = null, $sens = null, $limit = null)\r
+    {\r
+        global $core;\r
+        if (!is_null($this->q)) {\r
+            $where = '';\r
+            $where .= 'demande_id=\'' . $this->con->escape($this->q) . '\' OR ';\r
+            $where .= 'utilisateur_nom LIKE \'%' . $this->con->escape($this->q) . '%\' OR ';\r
+            $where .= 'revendeur_nom LIKE \'%' . $this->con->escape($this->q) . '%\' OR ';\r
+            $limit = null;\r
+        } else {\r
+            $where = $this->makeWhereFromFiltres();\r
+        }\r
+\r
+        $orderby = is_null($orderby) ? 'demande_id' : $orderby;\r
+        $sens = is_null($sens) ? 'DESC' : $sens;\r
+        $limit = is_null($limit) ? '' : $this->con->limit($limit[0], $limit[1]);\r
+\r
+        $sql = 'SELECT * FROM demandes_vue WHERE ' . $where . ' ORDER BY ' . $orderby . ' ' . $sens . ' ' . $limit;\r
+        $r = $this->con->select($sql);\r
+        return $this->factory($r);\r
+    }\r
+\r
+    public function sauve($data)\r
+    {\r
+        global $core;\r
+\r
+        $c = $this->con->openCursor('demandes');\r
+        $c->type = $data['type'];\r
+        $c->pages = $data['pages'];\r
+        $c->liens = $data['liens'];\r
+        $c->langues = $data['langues'];\r
+        $c->details = $data['details'];\r
+        $c->utilisateur = $data['utilisateur'];\r
+        $c->revendeur = $data['revendeur'];\r
+        $c->administrateur = $data['administrateur'];\r
+        $c->status = $data['status'];\r
+        $c->gclid = $data['gclid'];\r
+\r
+        if ($data['demande_id'] == 'new' || $data['demande_id'] == '') {\r
+            $c->date = TIME;\r
+            $demande_id = $c->demande_id = $this->getNextId();\r
+            $c->insert();\r
+        } else {\r
+            $demande_id = $data['demande_id'];\r
+            $c->update('WHERE demande_id=\'' . $this->con->escape($data['demande_id']) . '\'');\r
+        }\r
+\r
+        return $this->selectById($demande_id);\r
+    }\r
+\r
+    public function getMailto($demande_id)\r
+    {\r
+\r
+        $demande = $this->selectById($demande_id);\r
+\r
+        $daoUtilisateur = new commonDAOClient($this->con);\r
+        $user = $daoUtilisateur->selectById($demande->utilisateur);\r
+\r
+        $res = 'mailto:';\r
+        $res .= rawurlencode($user->prenom . ' ' . $user->nom . '<' . $user->email . '>');\r
+        $res .= '?subject=' . rawurlencode('Re: [Fluidbook] ' . __('Demande de devis'));\r
+        $res .= '&body=' . rawurlencode(wsDemande::asMailBody($demande, $user));\r
+        return $res;\r
+    }\r
+\r
+    public function setAdministrateur($demande_id, $administrateur)\r
+    {\r
+        $c = $this->con->openCursor('demandes');\r
+        $c->administrateur = $administrateur;\r
+        $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
+    }\r
+\r
+    public function reinitDemande($demande_id)\r
+    {\r
+        $c = $this->con->openCursor('demandes');\r
+        $c->administrateur = 0;\r
+        $c->revendeur = 0;\r
+        $c->status = 0;\r
+        $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
+    }\r
+\r
+    public function accepteDemande($demande_id, $revendeur)\r
+    {\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 setRevendeur($demande_id, $revendeur)\r
+    {\r
+        // Mets à jour l'entreprise\r
+        $c = $this->con->openCursor('demandes');\r
+        $c->revendeur = $revendeur;\r
+        $c->status = 1;\r
+        $c->update('WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
+\r
+        $demande = $this->selectById($demande_id);\r
+        return $demande;\r
+    }\r
+\r
+    public function count()\r
+    {\r
+        $r = $this->con->select('SELECT COUNT(*) AS nb FROM demandes WHERE ' . $this->makeWhereFromFiltres());\r
+        return $r->nb;\r
+    }\r
+\r
+    public function supprime($demande_id)\r
+    {\r
+        $this->con->execute('DELETE FROM demandes WHERE demande_id=\'' . $this->con->escape($demande_id) . '\'');\r
+    }\r
+\r
+    protected function makeWhereFromFiltres()\r
+    {\r
+        global $core;\r
+        if (!is_null($this->filtres)) {\r
+            $w = array('1=1');\r
+            if (commonFiltre::test('status_demande', $this->filtres)) {\r
+                $w[] = 'status IN(' . implode(',', array_keys($this->filtres['status_demande'])) . ')';\r
+            }\r
+            if (commonFiltre::test('demande_moi', $this->filtres)) {\r
+                $keys = array_keys($this->filtres['demande_moi']);\r
+\r
+                foreach ($keys as $k) {\r
+                    if ($k == 'moi') {\r
+                        $w[] = 'revendeur=' . $core->user->utilisateur_id;\r
+                    } elseif ($k == 'autres') {\r
+                        $w[] = 'revendeur!=' . $core->user->utilisateur_id;\r
+                    }\r
+                }\r
+            }\r
+            return implode(' AND ', $w);\r
+        } else {\r
+            return '1=1';\r
+        }\r
+    }\r
 \r
 }\r
 \r
index d6eb470965b7279471d8bac8c28d2faa02bc3724..a9ddd1fb64d8110d76f650416afdad2e3c422249 100644 (file)
@@ -18,6 +18,9 @@ class wsDemande extends cubeMetier {
        protected $revendeur_nom;\r
        protected $entreprise;\r
        protected $administrateur_nom;\r
+       protected $gclid;\r
+       protected $origin;\r
+       protected $fluidbooks;\r
 \r
        public static function asMailBody($demande, $utilisateur) {\r
                $body = "\r\n---- " . __('Demande') . ' ----' . "\r\n";\r
@@ -54,5 +57,3 @@ class wsDemande extends cubeMetier {
        }\r
 \r
 }\r
-\r
-?>
\ No newline at end of file