]> _ Git - cubeextranet.git/commitdiff
(no commit message)
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 8 Jan 2013 13:27:47 +0000 (13:27 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 8 Jan 2013 13:27:47 +0000 (13:27 +0000)
inc/ws/Controlleur/class.ws.maintenance.php
inc/ws/DAO/class.ws.dao.book.php
inc/ws/Metier/class.ws.book.parametres.php

index c09769bd583bd4f05b447a9f0ad1c3857c5391ff..820c89a5058a1b0b6c03809627603662081cbfd3 100644 (file)
@@ -745,15 +745,12 @@ class wsMaintenance {
                $svn->setArg('r', file_get_contents(WS_COMPILE_ASSETS . '/_html5/PROD'));\r
                $svn->setArg(null, WS_COMPILE_ASSETS . '/_html5prod');\r
                $svn->execute();\r
-\r
-               fb($svn->commande);\r
-               fb($svn->output);\r
        }\r
 \r
        public static function cleanDownload($args) {\r
                $root = ROOT . '/cache/download/';\r
                cubeFiles::scanRecursiveDir($root, $files);\r
-               $limit = TIME - 7200;\r
+               $limit = TIME - 14400;\r
                foreach ($files as $f) {\r
                        if (filemtime($f) < $limit) {\r
                                unlink($f);\r
index 16092c2287e55b66b8b90ebcf7a8ee1d802e4769..4dba61203d5e32392d5ca663083e698c260aa104 100644 (file)
@@ -1345,149 +1345,170 @@ class wsDAOBook extends commonDAO {
        }\r
 \r
        public function compilePDF($book, $pages) {\r
-               $pdfName = 'document.pdf';\r
+\r
                if (isset($book->parametres->pdfName) && $book->parametres->pdfName != '') {\r
                        $pdfName = $book->parametres->pdfName;\r
                }\r
 \r
-               $finalPDF = WS_BOOKS . '/final/' . $book->book_id . '/data/' . $pdfName;\r
-\r
-               if (!$book->parametres->pdf && $book->parametres->mobileVersion != 'pdf') {\r
-                       // Si l'export PDF n'est pas activé on supprime le fichier si il existe\r
-                       if (file_exists($finalPDF)) {\r
-                               unlink($finalPDF);\r
-                       }\r
-                       return;\r
+               $cacheDir = WS_BOOKS . '/pdf/' . $book->book_id;\r
+               if (!file_exists($cacheDir)) {\r
+                       mkdir($cacheDir);\r
                }\r
 \r
+               $normalPDF = $cacheDir . '/normal.pdf';\r
+               $compressedPDF = $cacheDir . '/compressed.pdf';\r
+\r
                if ($book->parametres->pdfReplace) {\r
                        $replace = WS_BOOKS . '/working/' . $book->book_id . '/' . $book->parametres->pdfReplace;\r
                        if (file_exists($replace)) {\r
-                               if (!file_exists($finalPDF) || filemtime($finalPDF) < filemtime($replace) || filesize($finalPDF) != filesize($replace)) {\r
-                                       $this->copy($replace, $finalPDF);\r
+                               if (!file_exists($normalPDF) || filemtime($normalPDF) < filemtime($replace) || filesize($normalPDF) != filesize($replace)) {\r
+                                       $this->copy($replace, $normalPDF);\r
                                }\r
-                               return;\r
                        }\r
-               }\r
+               } else {\r
+                       if (file_exists($normalPDF)) {\r
+                               $fmtime = filemtime($normalPDF);\r
+                               if ($fmtime >= $book->composition_update) {\r
+                                       $invalid = false;\r
+                                       foreach ($pages as $i => $infos) {\r
+                                               $doc = WS_DOCS . '/' . $infos['document_id'] . '/crop.pdf';\r
+                                               if (filemtime($doc) > $fmtime) {\r
+                                                       $invalid = true;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       } else {\r
+                               $invalid = true;\r
+                       }\r
+\r
+                       if ($invalid) {\r
+                               $pdfList = array();\r
+                               $pagesList = array();\r
+                               $nb_pages = array();\r
+                               $j = 0;\r
+                               $k = 0;\r
+                               $original = true;\r
 \r
-               if (file_exists($finalPDF)) {\r
-                       $fmtime = filemtime($finalPDF);\r
-                       if ($fmtime >= $book->composition_update) {\r
-                               $invalid = false;\r
                                foreach ($pages as $i => $infos) {\r
+                                       if (!isset($firstDoc)) {\r
+                                               $firstDoc = $infos['document_id'];\r
+                                       }\r
+\r
                                        $doc = WS_DOCS . '/' . $infos['document_id'] . '/crop.pdf';\r
-                                       if (filemtime($doc) > $fmtime) {\r
-                                               $invalid = true;\r
+                                       if (!isset($pdfList[$doc])) {\r
+                                               $pdfList[$doc] = $j;\r
+                                               $nb_pages[$doc] = $infos['nb_pages'];\r
+                                               $k = $j;\r
+                                               $j++;\r
+                                       } else {\r
+                                               $k = $pdfList[$doc];\r
+                                       }\r
+                                       $pagesList[$i] = array($k, $infos['document_page']);\r
+\r
+                                       if ($i != $infos['document_page'] || $infos['document_id'] != $firstDoc) {\r
+                                               $original = false;\r
                                        }\r
                                }\r
-                               if (!$invalid) {\r
-                                       return;\r
-                               }\r
-                       }\r
-               }\r
 \r
-               $pdfList = array();\r
-               $pagesList = array();\r
-               $nb_pages = array();\r
-               $j = 0;\r
-               $k = 0;\r
-               $original = true;\r
+                               if ($original) {\r
+                                       $this->copy(WS_DOCS . '/' . $firstDoc . '/crop.pdf', $normalPDF);\r
+                               } else {\r
+                                       $args = '';\r
+                                       foreach ($pdfList as $doc => $index) {\r
+                                               $lettre = cubeMath::toPDFLetter($index, true);\r
+                                               $args .= $lettre . '=' . $doc . ' ';\r
+                                       }\r
 \r
-               foreach ($pages as $i => $infos) {\r
-                       if (!isset($firstDoc)) {\r
-                               $firstDoc = $infos['document_id'];\r
-                       }\r
+                                       $args .= ' cat ';\r
 \r
-                       $doc = WS_DOCS . '/' . $infos['document_id'] . '/crop.pdf';\r
-                       if (!isset($pdfList[$doc])) {\r
-                               $pdfList[$doc] = $j;\r
-                               $nb_pages[$doc] = $infos['nb_pages'];\r
-                               $k = $j;\r
-                               $j++;\r
-                       } else {\r
-                               $k = $pdfList[$doc];\r
-                       }\r
-                       $pagesList[$i] = array($k, $infos['document_page']);\r
+                                       $ranges = array();\r
+                                       $currentRange = null;\r
 \r
-                       if ($i != $infos['document_page'] || $infos['document_id'] != $firstDoc) {\r
-                               $original = false;\r
-                       }\r
-               }\r
-\r
-               if ($original) {\r
-                       $this->copy(WS_DOCS . '/' . $firstDoc . '/crop.pdf', $finalPDF);\r
-                       return;\r
-               }\r
+                                       foreach ($pagesList as $p) {\r
+                                               $lettre = cubeMath::toPDFLetter($p[0], true);\r
+                                               $page = $p[1];\r
 \r
-               $args = '';\r
-               foreach ($pdfList as $doc => $index) {\r
-                       $lettre = cubeMath::toPDFLetter($index, true);\r
-                       $args .= $lettre . '=' . $doc . ' ';\r
-               }\r
+                                               // Initialise l'intervale\r
+                                               if (is_null($currentRange)) {\r
+                                                       $currentRange = array('lettre' => $lettre, 'start' => $page, 'end' => $page);\r
+                                                       continue;\r
+                                               }\r
 \r
-               $args .= ' cat ';\r
+                                               // Poursuit le remplissage si la lettre est identique et si la page suivante est bien la page suivante dans le document\r
+                                               if ($currentRange['lettre'] == $lettre && $currentRange['end'] + 1 == $page) {\r
+                                                       $currentRange['end'] = $page;\r
+                                                       continue;\r
+                                               }\r
 \r
-               $ranges = array();\r
-               $currentRange = null;\r
+                                               // Ajoute l'intervale à la liste finale\r
+                                               $ranges[] = $currentRange;\r
 \r
-               foreach ($pagesList as $p) {\r
-                       $lettre = cubeMath::toPDFLetter($p[0], true);\r
-                       $page = $p[1];\r
+                                               // Réinitialise l'intervale suivant\r
+                                               $currentRange = array('lettre' => $lettre, 'start' => $page, 'end' => $page);\r
+                                       }\r
 \r
-                       // Initialise l'intervale\r
-                       if (is_null($currentRange)) {\r
-                               $currentRange = array('lettre' => $lettre, 'start' => $page, 'end' => $page);\r
-                               continue;\r
-                       }\r
+                                       // Ajoute la dernière\r
+                                       if (!is_null($currentRange)) {\r
+                                               $ranges[] = $currentRange;\r
+                                       }\r
+                                       // Si le pdf final est constitué du document complet d'un document\r
+                                       if (count($ranges) == 1 && $ranges[0]['start'] == 1) {\r
+                                               $alldocs = array_keys($pdfList);\r
+                                               $doc = array_pop($alldocs);\r
+                                               if ($nb_pages[$doc] == $ranges[0]['end']) {\r
+                                                       $this->copy($doc, $normalPDF);\r
+                                                       return;\r
+                                               }\r
+                                       }\r
 \r
-                       // Poursuit le remplissage si la lettre est identique et si la page suivante est bien la page suivante dans le document\r
-                       if ($currentRange['lettre'] == $lettre && $currentRange['end'] + 1 == $page) {\r
-                               $currentRange['end'] = $page;\r
-                               continue;\r
-                       }\r
+                                       foreach ($ranges as $range) {\r
+                                               $args .= ' ' . $range['lettre'] . $range['start'];\r
+                                               if ($range['start'] == $range['end']) {\r
+                                                       continue;\r
+                                               }\r
+                                               $args .= '-' . $range['end'];\r
+                                       }\r
 \r
-                       // Ajoute l'intervale à la liste finale\r
-                       $ranges[] = $currentRange;\r
+                                       $hash = sha1($args);\r
 \r
-                       // Réinitialise l'intervale suivant\r
-                       $currentRange = array('lettre' => $lettre, 'start' => $page, 'end' => $page);\r
-               }\r
+                                       $args .= ' output ' . $normalPDF;\r
 \r
-               // Ajoute la dernière\r
-               if (!is_null($currentRange)) {\r
-                       $ranges[] = $currentRange;\r
-               }\r
-               // Si le pdf final est constitué du document complet d'un document\r
-               if (count($ranges) == 1 && $ranges[0]['start'] == 1) {\r
-                       $alldocs = array_keys($pdfList);\r
-                       $doc = array_pop($alldocs);\r
-                       if ($nb_pages[$doc] == $ranges[0]['end']) {\r
-                               $this->copy($doc, $finalPDF);\r
-                               return;\r
+                                       $cached = WS_BOOKS . '/pdf/' . $hash . '.pdf';\r
+                                       if (file_exists($cached)) {\r
+                                               $this->copy($cached, $normalPDF);\r
+                                       } else {\r
+                                               $pdftk = new cubeCommandLine('pdftk');\r
+                                               $pdftk->setPath(CONVERTER_PATH);\r
+                                               $pdftk->setManualArg($args);\r
+                                               $pdftk->execute();\r
+                                               $this->copy($normalPDF, $cached);\r
+                                       }\r
+                               }\r
                        }\r
                }\r
 \r
-               foreach ($ranges as $range) {\r
-                       $args .= ' ' . $range['lettre'] . $range['start'];\r
-                       if ($range['start'] == $range['end']) {\r
-                               continue;\r
+               $finalPDF = WS_BOOKS . '/final/' . $book->book_id . '/data/' . $book->parametres->pdfName;\r
+\r
+               if ($book->parametres->pdfCompress) {\r
+                       if (!file_exists($compressedPDF) || filemtime($compressedPDF) < filemtime($normalPDF)) {\r
+                               $gs = new cubeCommandLine('gs', null, true);\r
+                               $gs->setPath(CONVERTER_PATH);\r
+                               $gs->setEnv('GS_FONTPATH', '/home/ws/fonts');\r
+                               $gs->setArg('-dBATCH');\r
+                               $gs->setArg('-dNOPAUSE');\r
+                               $gs->setArg('-dNOPROMPT');\r
+                               $gs->setArg('-sOutputFile=' . $compressedPDF);\r
+                               $gs->setArg('-sDEVICE=pdfwrite');\r
+                               $gs->setArg('-dPDFSETTINGS=/ebook');\r
+                               $gs->setArg('-dColorImageResolution=96');\r
+                               $gs->setArg('-dColorConversionStrategy=/LeaveColorUnchanged');\r
+                               $gs->setArg('-dAutoRotatePages=/None');\r
+                               $gs->setArg(null, $normalPDF);\r
+                               $gs->execute();\r
                        }\r
-                       $args .= '-' . $range['end'];\r
-               }\r
-\r
-               $hash = sha1($args);\r
-\r
-               $args .= ' output ' . $finalPDF;\r
-\r
-               $cached = WS_BOOKS . '/pdf/' . $hash . '.pdf';\r
-               if (file_exists($cached)) {\r
-                       $this->copy($cached, $finalPDF);\r
+                       copy($compressedPDF, $finalPDF);\r
                } else {\r
-                       $pdftk = new cubeCommandLine('pdftk');\r
-                       $pdftk->setPath(CONVERTER_PATH);\r
-                       $pdftk->setManualArg($args);\r
-                       $pdftk->execute();\r
-                       $this->copy($finalPDF, $cached);\r
+                       copy($normalPDF, $finalPDF);\r
                }\r
        }\r
 \r
index b2908402c61b1c44d0d0f189ecddf4da530450de..f1c50082e6cad84fc0b2b5eb421c64ba50835146 100644 (file)
@@ -152,11 +152,12 @@ class wsBookParametres extends wsParametres {
                $this->fields['pdf'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer les fonctions de téléchargement"));\r
                $this->fields['pdfName'] = array('type' => 'text', 'default' => 'document.pdf', 'editable' => true, 'label' => __("Nom du fichier PDF"));\r
                $this->fields['pdfComplex'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Téchargement de PDF avancé'), "hint" => __("Permet à l'utilisateur de sélectionner les pages qu'il souhaite télécharger"), 'grade' => 3);\r
+               $this->fields['pdfCompress'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Compression du fichier PDF'));\r
                $this->fields['pdfReplace'] = array('type' => 'freefile', 'default' => '', 'editable' => true,\r
                        'label' => __('PDF de remplacement'), 'grade' => 3, 'fileFilter' => $pdfFilter);\r
                $this->fields['offlineExport'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Téléchargement des versions offline'), "hint" => __('Valable si le téléchargement avancé est activé'), 'grade' => 3);\r
                $this->forms['pdf'] = array('label' => __('Fonction de téléchargement'),\r
-                       'fieldsnames' => array('pdf', 'pdfName', 'pdfReplace', 'pdfComplex', 'offlineExport'));\r
+                       'fieldsnames' => array('pdf', 'pdfName', 'pdfReplace','pdfCompress', 'pdfComplex', 'offlineExport'));\r
                // .\r
                $this->fields['zoomMode'] = array('type' => 'combo', 'default' => '0', 'editable' => true, 'label' => __("Mode de zoom"), 'grade' => 3,\r
                        'datas' => array(__('Normal') => '0',\r