]> _ Git - cubeextranet.git/commitdiff
(no commit message)
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Mon, 4 Feb 2013 11:36:02 +0000 (11:36 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Mon, 4 Feb 2013 11:36:02 +0000 (11:36 +0000)
15 files changed:
images/extranet/loader.gif [new file with mode: 0644]
images/ws/loader.gif [new file with mode: 0644]
inc/commons/class.common.ajax.php
inc/commons/class.common.core.php
inc/commons/class.common.page.php
inc/ws/Controlleur/class.ws.ajax.php
inc/ws/Controlleur/class.ws.url.php
inc/ws/DAO/class.ws.dao.book.php
inc/ws/Metier/class.ws.book.php
inc/ws/Util/_common.php
inc/ws/Util/class.ws.exporter.php [new file with mode: 0644]
js/common.js
js/ws.js
style/common.css
style/extranet/style.css

diff --git a/images/extranet/loader.gif b/images/extranet/loader.gif
new file mode 100644 (file)
index 0000000..70bdc92
Binary files /dev/null and b/images/extranet/loader.gif differ
diff --git a/images/ws/loader.gif b/images/ws/loader.gif
new file mode 100644 (file)
index 0000000..70bdc92
Binary files /dev/null and b/images/ws/loader.gif differ
index 8fb73cc990b442146ed728e162cee7d6f5860bda..4db036e23dd393b9f259ba86e1820fab3fec282c 100644 (file)
@@ -21,6 +21,7 @@ class commonAjax {
                $res .= $extra;\r
                $res .= '</form>';\r
                $res .= commonPage::bf();\r
+\r
                if (!$return) {\r
                        echo $res;\r
                        exit;\r
index cfcc6119d3acf895c141dfd380425ed269dabdf8..b6d4eca48da23c1c998ce0515909f2bb7391069f 100644 (file)
@@ -385,6 +385,7 @@ class commonCore extends cubeCore {
                $db->books->dir_external('varchar', 256, false);\r
                $db->books->lucene_time('integer', 0, false);\r
                $db->books->demo_counter('integer', 0, false);\r
+               $db->books->exportdatas('text', 0, false);\r
                // Clés\r
                $db->books->primary('pk_books', 'book_id');\r
                $db->books->index('index_books_nom', 'BTREE', 'nom');\r
index 7f2eb9a8bb5f36df08f4413ef9862577ee561889..5483c3c1c4fcb62fd761e3507f1f36ea038320b6 100644 (file)
@@ -41,13 +41,13 @@ class commonPage {
        public static function search($args) {\r
                global $core;\r
 \r
-               if(!isset($args[0])){\r
+               if (!isset($args[0])) {\r
                        return;\r
                }\r
                if (!commonDroits::recherche($args[0])) {\r
                        return;\r
                }\r
-               \r
+\r
                cubePage::emptyfield();\r
                $settings = $core->user->getSettings($args[0]);\r
                $action = 'search' . ucfirst($args[0]);\r
@@ -82,24 +82,24 @@ class commonPage {
                foreach ($onglets as $titre => $url) {\r
 \r
                        // Si cet onglet correspond à la page active, on le place actif\r
-                       $active =isset($args[0]) && ($args[0] == $url || (isset($supp[$args[0]]) && $supp[$args[0]] == $url)) ? ' active' : '';\r
+                       $active = isset($args[0]) && ($args[0] == $url || (isset($supp[$args[0]]) && $supp[$args[0]] == $url)) ? ' active' : '';\r
                        $res .= '<a href="' . SITE_PATH . $url . '" class="onglet ' . $active . '">' . $titre . '</a>';\r
                }\r
                $res .= '</div>';\r
                return $res;\r
        }\r
 \r
-       public static function barre($filtres = null, $action = null, $dashboard = null, $shortcuts = null,$big=false) {\r
+       public static function barre($filtres = null, $action = null, $dashboard = null, $shortcuts = null, $big = false) {\r
                if (is_null($shortcuts) && is_null($filtres)) {\r
                        return '<div id="bar" class="vide"></div>';\r
                }\r
-               \r
-               $class='';\r
-               if($big){\r
-                       $class=' class="big"';\r
+\r
+               $class = '';\r
+               if ($big) {\r
+                       $class = ' class="big"';\r
                }\r
 \r
-               $res = '<div id="bar"'.$class.'>';\r
+               $res = '<div id="bar"' . $class . '>';\r
                $res .= '<div class="content">';\r
 \r
                if (!is_null($shortcuts)) {\r
@@ -186,11 +186,16 @@ class commonPage {
        public static function footer() {\r
                $res = '<div id="footer"></div>';\r
                $res .= cubePage::googleAnalytics(GA);\r
+               $res.='<div id="ajaxLoader">';\r
+               $res.='<div class="c">';\r
+               $res.= cubeMedia::image(IMG . '/loader.gif', 32, 32, __('Chargement'));\r
+               $res.='<p>' . __('Chargement en cours. Veuillez patienter ...') . '</p>';\r
+               $res.='</div>';\r
+               $res.='</div>';\r
                $res .= '</body>';\r
                $res .= '</html>';\r
                return $res;\r
        }\r
 \r
 }\r
-\r
 ?>
\ No newline at end of file
index 9d47c58587e0391b01a75b78ffc1907c16b8262b..639d14c8191081bc881724127c7caa18d875b39f 100644 (file)
@@ -209,16 +209,6 @@ class wsAjax extends cubeAjax {
                        $book = $dao->setStatus($book_id, 1);\r
                }\r
 \r
-               if ($version == 'v2') {\r
-                       $version = 'html';\r
-               } else if ($version == 'online') {\r
-                       if ($book->parametres->version == '1') {\r
-                               $version = 'v1';\r
-                       } elseif ($book->parametres->version == '2') {\r
-                               $version = 'html';\r
-                       }\r
-               }\r
-\r
                if (!wsDroits::admin()) {\r
                        if ($book->status < 1) {\r
                                $popup = commonAjax::form('downbook/' . $book_id . '/' . $version, __('Téléchargement du Fluidbook'), wsUrl::valideDownload($book_id, $version), __('Télécharger'), 2, '', '', true);\r
@@ -228,8 +218,8 @@ class wsAjax extends cubeAjax {
                        }\r
                }\r
 \r
-               $url = wsPackager::package($book_id, $version);\r
-               $x->addRedirection($url);\r
+               $exporter = new wsExporter();\r
+               $exporter->export($book_id, $x, 'download', $version);\r
        }\r
 \r
        public static function instbook($args, &$x) {\r
@@ -248,8 +238,6 @@ class wsAjax extends cubeAjax {
                        $x->addOpenPopup($popup);\r
                        return;\r
                }\r
-\r
-               fb(time(), 'start making package');\r
                $version = 'html';\r
                if ($book->parametres->version == 1) {\r
                        $version = 'v1';\r
@@ -266,7 +254,6 @@ class wsAjax extends cubeAjax {
                        $package = wsPackager::package($book_id, $version, false);\r
                }\r
 \r
-               fb(time(), 'start transfert');\r
                if ($server == 'references') {\r
                        $root = '/home/fluidbook/www/references';\r
                        $url = 'http://www.fluidbook.com/references/';\r
@@ -325,11 +312,6 @@ class wsAjax extends cubeAjax {
                        $cp->setArg(null, $package . '*');\r
                        $cp->setArg(null, $finalDir);\r
                        $cp->execute();\r
-\r
-                       fb($cp->commande);\r
-                       fb($cp->output);\r
-\r
-                       fb(time(), 'end transfert');\r
                } elseif ($protocol == 'ftp') {\r
 \r
                        $u = parse_url($root . ltrim($dir, '/'));\r
@@ -352,8 +334,6 @@ class wsAjax extends cubeAjax {
                        $lftp->setArg('e', implode(';', $commandes));\r
                        $lftp->setArg(null, $u['host']);\r
                        $lftp->execute();\r
-                       fb($lftp->commande);\r
-                       fb($lftp->output);\r
                }\r
 \r
                $x->addClosePopup();\r
@@ -946,6 +926,112 @@ class wsAjax extends cubeAjax {
                $x->addReload();\r
        }\r
 \r
+       public static function exportbook($args, &$x) {\r
+               if (isset($_POST['action'])) {\r
+                       $x->addChangePopup(commonAjax::form('exportbookExe', __("Exporter une publication"), self::formExportBook($_POST['book_id']), '', 2, '', '', true));\r
+                       return;\r
+               }\r
+               commonAjax::form('exportbookExe', __("Exporter une publication"), self::formExportBook($args[1]), '', 2);\r
+       }\r
+\r
+       public static function exportbookExe($args, &$x) {\r
+               $exporter = new wsExporter();\r
+               $exporter->export($_POST['book_id'], $x, $_POST['action'], $_POST['version'], $_POST['destination']);\r
+\r
+               $x->addClosePopup();\r
+       }\r
+\r
+       public static function formExportBook($book_id) {\r
+               global $core;\r
+               $choices = array(__('Télécharger') => 'download',\r
+                       __("Installer sur le serveur d'hébergement") => 'install_hosting',\r
+                       __("Installer sur l'espace de références") => 'install_references',\r
+                       __('Installer sur un serveur distant') => 'install_ftp',\r
+                       __('Envoyer vers un projet Phonegap Android') => 'phonegap_android',\r
+                       __('Envoyer vers un projet Phonegap iOS') => 'phonegap_ios'\r
+               );\r
+\r
+               $formatInstall = array('online' => false,\r
+                       'v1' => false,\r
+                       'html' => false,\r
+                       'v2' => false,\r
+                       'win-exe' => 'zip',\r
+                       'win-ins' => 'exe',\r
+                       'mac-exe' => 'zip',\r
+                       'win-cd' => 'zip',\r
+                       'phonegap' => 'zip');\r
+\r
+               $defaultVersion = isset($_POST['version']) ? $_POST['version'] : 'online';\r
+               $version = '<tr><td class="right">' . __('Version') . '</td><td>' . form::combo('version', wsUrl::getFluidbookVersions(true), $defaultVersion) . '</td></tr>';\r
+\r
+               $defaultAction = isset($_POST['action']) ? $_POST['action'] : 'download';\r
+               $res = '<tr><td class="right">' . __('Action') . '</td><td>' . form::combo('action', $choices, $defaultAction) . form::hidden('book_id', $book_id) . '</td></tr>';\r
+\r
+               $ae = explode('_', $defaultAction, 2);\r
+               if ($ae[0] == 'phonegap') {\r
+                       $version = '';\r
+                       $defaultVersion = '';\r
+               }\r
+\r
+               if ($defaultAction != 'download') {\r
+                       $daoBook = new wsDAOBook($core->con);\r
+                       $book = $daoBook->selectById($book_id);\r
+                       if ($book->exportdatas == '') {\r
+                               $datas = array();\r
+                       } else {\r
+                               $datas = json_decode($book->exportdatas, true);\r
+                       }\r
+\r
+                       $res.=$version;\r
+\r
+                       if (!isset($datas[$defaultAction][$defaultVersion])) {\r
+                               $datas[$defaultAction][$defaultVersion] = array('dir' => '', 'file' => '');\r
+                       }\r
+                       $defaultDestination = $datas[$defaultAction][$defaultVersion];\r
+                       if ($defaultDestination == '' && isset($_POST['destination']) && $_POST['changed'] != 'version' && $_POST['changed'] != 'action') {\r
+                               $defaultDestination = $_POST['destination'];\r
+                       }\r
+\r
+                       if ($defaultDestination['dir'] == '' && ($defaultAction == 'install_hosting' || $defaultAction == 'install_references')) {\r
+                               $defaultDestination['dir'] = cubeText::str2URL($book->nom);\r
+                       }\r
+\r
+\r
+                       switch ($defaultAction) {\r
+                               case 'install_hosting':\r
+                                       $s = __("Serveur d'hébergement") . ' /';\r
+                                       break;\r
+                               case 'install_references':\r
+                                       $s = __('Espace des références') . ' /';\r
+                                       break;\r
+                               case 'install_ftp':\r
+                                       $s = __('Serveur FTP externe') . ' : ftp://';\r
+                                       break;\r
+                               case 'phonegap_android':\r
+                                       $s = __("Projet Phonegap Android") . ' /';\r
+                                       break;\r
+                               case 'phonegap_ios':\r
+                                       $s = __("Projet Phonegap iOS") . ' /';\r
+                                       break;\r
+                               default:\r
+                                       break;\r
+                       }\r
+\r
+                       $destinationFile = '';\r
+                       if ($displayFile) {\r
+                               $destinationFile = form::field(array('destination[file]', 'destination'), 30, 128, $defaultDestination['file']);\r
+                       }\r
+\r
+                       $res .= '<tr><td class="right"><em>' . $s . '</em></td><td>' . form::field(array('destination[dir]', 'destination'), 40, 128, $defaultDestination['dir']) . ' / ' . $destinationFile . '</td></tr>';\r
+               } else {\r
+                       $res.=$version;\r
+               }\r
+\r
+               $res .= '<tr><td colspan="2" class="right">' . form::hidden('changed', '') . '<a href="#" class="submit">' . $core->typo->BoutonOK(__('Exporter')) . '</a></td></tr>';\r
+\r
+               return $res;\r
+       }\r
+\r
 }\r
 \r
 ?>
\ No newline at end of file
index fe2a8b26431e332cc961ef403ef526f84e0464d2..25f65d022f75b2411782ad1757fdad0fc5c90820 100644 (file)
@@ -147,7 +147,11 @@ class wsUrl {
                        }\r
                        $res .= '<td class="bouton"><a href="' . SITE_PATH . 'stats/' . $book->book_id . '_' . $book->hash . '" class="normallink">' . $btStats . '</a></td>';\r
                        if ($book->version > 1) {\r
-                               $res .= '<td class="bouton"><a href="#" class="openContextMenu" rel="' . $context_download_id . '" rev="' . $book->book_id . '">' . $btDownload . '</a></td>';\r
+                               if ($core->user->utilisateur_id == 5) {\r
+                                       $res .= '<td class="bouton"><a href="#" rel="exportbook/' . $book->book_id . '" class="popup">' . $btDownload . '</a></td>';\r
+                               } else {\r
+                                       $res .= '<td class="bouton"><a href="#" class="openContextMenu" rel="' . $context_download_id . '" rev="' . $book->book_id . '">' . $btDownload . '</a></td>';\r
+                               }\r
                        } else {\r
                                $res.='<td></td>';\r
                        }\r
@@ -171,13 +175,13 @@ class wsUrl {
                return $res;\r
        }\r
 \r
-       public static function contextBookDownload($id, $droits) {\r
-               global $core;\r
+       public static function getFluidbookVersions($select = false) {\r
+               $droits = wsDroits::getDroits();\r
 \r
                $chooseVersion = wsDroits::admin();\r
 \r
                if ($chooseVersion) {\r
-                       $default = ' (' . __('Default') . ')';\r
+                       $default = ' - ' . __('Version par défaut');\r
                } else {\r
                        $default = '';\r
                }\r
@@ -196,6 +200,33 @@ class wsUrl {
                        $versions['phonegap'] = array('title' => __('Version offline') . ' - ' . __('Application mobile'), 'icon' => cubeMedia::image(IMG . '/phonegap.png'));\r
                }\r
 \r
+               if (!$select) {\r
+                       return $versions;\r
+               }\r
+\r
+               $res = array();\r
+               foreach ($versions as $id => $d) {\r
+                       $t = explode('-', $d['title'], 2);\r
+                       $meta = trim($t[0]);\r
+                       if (isset($t[1])) {\r
+                               $title = trim($t[1]);\r
+                       } else {\r
+                               $title = $meta;\r
+                       }\r
+\r
+                       if (!isset($res[$meta])) {\r
+                               $res[$meta] = array();\r
+                       }\r
+                       $res[$meta][$title] = $id;\r
+               }\r
+               return $res;\r
+       }\r
+\r
+       public static function contextBookDownload($id, $droits) {\r
+               global $core;\r
+\r
+               $versions = self::getFluidbookVersions();\r
+\r
                $res = '<div class="contextMenu downbookContextMenu" id="' . $id . '">';\r
                $res .= '<ul>';\r
                $res .= '<li class="head">' . __("Sélectionnez une version") . '</li>';\r
index 1543068d81cb45cdfa3545e5872b17052f273095..9f1dd5e7869cb925967fabc2088d303b2e97f0ec 100644 (file)
@@ -48,6 +48,7 @@ class wsDAOBook extends commonDAO {
                $book->dir_phonegap_android = $r->dir_phonegap_android;\r
                $book->dir_external = $r->dir_external;\r
                $book->demo_counter = $r->demo_counter;\r
+               $book->exportdatas = $r->exportdatas;\r
 \r
                return $book;\r
        }\r
@@ -82,13 +83,19 @@ class wsDAOBook extends commonDAO {
                return $r->book_id + 1;\r
        }\r
 \r
+       public function saveExportDatas($book_id, $datas) {\r
+               $c = $this->con->openCursor('books');\r
+               $c->exportdatas = json_encode($datas);\r
+               $c->update('WHERE book_id=\'' . $this->con->escape($book_id) . '\'');\r
+       }\r
+\r
        public function addDemoCount($book_id) {\r
 \r
                $r = $this->con->select('SELECT demo_counter,nom FROM books WHERE book_id=\'' . $book_id . '\'');\r
                $m = 20;\r
                if ($r->demo_counter > 0 && $r->demo_counter % $m == 0) {\r
                        $mail = new cubeMail();\r
-                       $mail->charset='UTF-8';\r
+                       $mail->charset = 'UTF-8';\r
                        $mail->from = 'contact@fluidbook.com';\r
                        $mail->to = 'tech@fluidbook.com';\r
                        $mail->subject = '[Fluidbook Workshop] Fluidbook consulté via l\'url publique';\r
@@ -1028,7 +1035,7 @@ class wsDAOBook extends commonDAO {
                $hash .= 'kjgl!az4.';\r
                $hash .= count($pages);\r
                $hash .= round($size[0], 4);\r
-               \r
+\r
                $hash = sha1($hash);\r
 \r
                $this->makeTextsIndexes($book, $pages, $index, $textes);\r
index c052162f5d59c8bfe41d2f0c39827862a452d223..909d4977cc2caf8fae25f0ddaa9cb3746115da02 100644 (file)
@@ -38,6 +38,7 @@ class wsBook extends cubeMetier {
        protected $dir_phonegap_android;\r
        protected $dir_external;\r
        protected $demo_counter;\r
+       protected $exportdatas;\r
 \r
        public function __get($varname) {\r
                if (!property_exists($this, $varname)) {\r
index eb6cca4538d2d34a1d97eedc0ccaa941a2081cbc..78d7cbb5e28e7e49eb40bd46aed947e7b6418c92 100644 (file)
@@ -16,4 +16,5 @@ $__autoload['wsPDFFontExtractor'] = dirname(__FILE__) . '/fontextractor/class.ws
 $__autoload['wsPDFFont'] = dirname(__FILE__) . '/fontextractor/class.ws.pdf.font.php';\r
 $__autoload['wsSVN'] = dirname(__FILE__) . '/class.ws.svn.php';\r
 $__autoload['wsLinks'] = dirname(__FILE__) . '/class.ws.links.php';\r
+$__autoload['wsExporter'] = dirname(__FILE__) . '/class.ws.exporter.php';\r
 ?>
\ No newline at end of file
diff --git a/inc/ws/Util/class.ws.exporter.php b/inc/ws/Util/class.ws.exporter.php
new file mode 100644 (file)
index 0000000..8264af5
--- /dev/null
@@ -0,0 +1,228 @@
+<?php
+
+class wsExporter {
+
+       public $book_id;
+       public $dao;
+       public $book;
+       public $action;
+       public $metaAction;
+       public $origVersion;
+       public $origAction;
+       public $version;
+       public $destinationDir;
+       public $destinationFile;
+       public $x;
+
+       public function export($book_id, &$x, $action = 'download', $version = 'online', $destinationDir = null, $destinationFile = null) {
+               global $core;
+
+               if (is_null($destinationDir)) {
+                       $destinationDir = '';
+               }
+               if (is_null($destinationFile)) {
+                       $destinationFile = '';
+               }
+
+               $this->origVersion = $version;
+               $this->origAction = $action;
+
+               $this->book_id = $book_id;
+               $this->x = $x;
+
+               $this->dao = new wsDAOBook($core->con);
+               $this->book = $this->dao->selectById($this->book_id);
+
+               $this->action = $action;
+               $e = explode('_', $this->action, 2);
+               $this->metaAction = $e[0];
+               if (count($e) > 1) {
+                       $this->action = $e[1];
+               }
+
+               $this->version = $this->_getVersion($version);
+               $this->destinationDir = ltrim(trim($destinationDir), '/');
+               $this->destinationFile = str_replace('/', '-', trim($destinationFile));
+
+               $this->_saveDestination();
+
+               if ($this->metaAction == 'download') {
+                       $this->_download();
+               } else if ($this->metaAction == 'phonegap') {
+                       $this->_phonegap();
+               } else if ($this->metaAction == 'install') {
+                       $this->_install();
+               }
+       }
+
+       protected function _haveToZip() {
+               $yes = array('win-exe', 'mac-exe');
+               return in_array($this->version, $yes);
+       }
+
+       protected function _install() {
+               $package = wsPackager::package($this->book_id, $this->version, $this->_haveToZip());
+
+               if ($this->action == 'references') {
+                       $root = '/home/fluidbook/www/references/';
+                       $rootURL = 'http://www.fluidbook.com/references/';
+               } else if ($this->action == 'hosting') {
+                       $root = '/home/fluidbook/hosting/';
+                       $rootURL = 'http://hosting.fluidbook.com/';
+               } else if ($this->action == 'ftp') {
+                       $root = 'ftp://';
+                       $rootURL = null;
+               }
+
+               if ($this->destinationFile) {
+                       $pathd = $root . $this->destinationDir;
+                       $path = $pathd . '/' . $this->destinationFile;
+               } else {
+                       $path = $root . $this->destinationDir;
+               }
+
+               if (stristr($path, 'ftp://')) {
+                       $this->_lftp($package, $path, true);
+               } else {
+                       $this->_rsync($package, $path);
+               }
+
+               if (!is_null($rootURL)) {
+                       $url = $rootURL . $this->destinationDir;
+                       $this->x->addTruePopup($url . '/');
+               }
+       }
+
+       protected function _phonegap() {
+               $os = $this->action;
+
+               if ($this->destinationDir == '') {
+                       return;
+               }
+
+               $packager = new wsPackagerPhonegap($this->book_id, null, true, false, $os);
+               $package = $packager->makePackage(false);
+
+               $this->_transfertPhonegap($os, $package, $this->destinationDir);
+       }
+
+       protected function _transfertPhonegap($os, $package, $destination) {
+               if ($os == 'android') {
+                       $this->_lftp($package, 'ftp://android:DlSa1LGw@paris.cubedesigners.com:22122/' . $destination, false, true);
+               } else if ($os == 'ios') {
+                       $this->_rsync($package, '/mnt/macbook/Phonegap/Projects/' . $destination, true);
+               }
+       }
+
+       protected function _lftp($src, $dest, $passive = true, $erase = false) {
+               $u = parse_url($dest);
+
+               $file = is_file($src);
+               if ($file) {
+                       $e = explode('/', $u['path']);
+                       $u['file'] = array_pop($e);
+                       $u['dir'] = implode('/', $e);
+               } else {
+                       $u['dir'] = $u['path'];
+               }
+
+               $passive = $passive ? 'on' : 'off';
+
+               if (!isset($u['port'])) {
+                       $u['port'] = '21';
+               }
+
+               $commandes = array(
+                       'set ftp:passive-mode ' . $passive,
+                       'mkdir -p ' . $u['dir']
+               );
+
+               if ($file) {
+                       $commandes[] = 'put -O ' . $u['dir'] . ' ' . $src . ' -o ' . $u['file'];
+               } else {
+                       $commandes[] = 'lcd ' . $src;
+                       $commandes[] = 'cd ' . $u['dir'];
+                       if ($erase) {
+                               $commandes[] = 'mirror -Rve --parallel=5';
+                       } else {
+                               $commandes[] = 'mirror -Rv --parallel=5';
+                       }
+               }
+
+               $lftp = new cubeCommandLine('lftp');
+               $lftp->setArg('u', $u['user'] . ',' . $u['pass']);
+               $lftp->setArg('p', $u['port']);
+               $lftp->setArg('e', implode(';', $commandes));
+               $lftp->setArg(null, $u['host']);
+               $lftp->execute();
+       }
+
+       protected function _rsync($src, $dest, $erase = false) {
+               if (!file_exists($dest)) {
+                       mkdir($dest, 0777, true);
+               }
+
+               if (is_file($src)) {
+                       copy($src, $dest);
+                       return;
+               }
+
+               if ($erase) {
+                       /**  --del -r -z -v * */
+                       $cp = new cubeCommandLine('rsync');
+                       $cp->setPath(CONVERTER_PATH);
+                       $cp->setArg('del');
+               }
+               $cp->setArg('t');
+               $cp->setArg('r');
+               $cp->setArg('z');
+               $cp->setArg('v');
+               $cp->setArg(null, $src . '*');
+               $cp->setArg(null, $dest);
+               $cp->execute();
+       }
+
+       protected function _download() {
+               $this->x->addRedirection(wsPackager::package($this->book_id, $this->version));
+       }
+
+       protected function _getVersion($version) {
+               if ($version == 'v2') {
+                       return 'html';
+               } else if ($version == 'online') {
+                       if ($this->book->parametres->version == '1') {
+                               return 'v1';
+                       } elseif ($this->book->parametres->version == '2') {
+                               return 'html';
+                       }
+               }
+               return $version;
+       }
+
+       protected function _saveDestination() {
+               $datas = $this->book->exportdatas;
+               if ($datas == '') {
+                       $datas = array();
+               } else {
+                       $datas = json_decode($datas, true);
+               }
+               if (!isset($datas[$this->origAction])) {
+                       $datas[$this->origAction] = array();
+               }
+
+               $d = array();
+               if ($this->destinationDir) {
+                       $d['dir'] = $this->destinationDir;
+               }
+               if ($this->destinationFile) {
+                       $d['file'] = $this->destinationFile;
+               }
+
+               $datas[$this->origAction][$this->origVersion] = $d;
+
+               $this->dao->saveExportDatas($this->book_id, $datas);
+       }
+
+}
+
+?>
index a7a6107a26b7995a5339e70a7a365140c627a8f6..9fafe7fc2b91177bebeb59b221fbc256a1443642 100644 (file)
-TO_LOAD[TO_LOAD.length]='load_common_extranet();';\r
-FIRST_LOAD=true;\r
+TO_LOAD[TO_LOAD.length] = 'load_common_extranet();';\r
+FIRST_LOAD = true;\r
+var DEFAULT_WAIT_MESSAGE = "";\r
 \r
-function load_common_extranet(){\r
-       var viewportWidth=1030;\r
-       if($("#main.big").length>0){\r
+function load_common_extranet() {\r
+       DEFAULT_WAIT_MESSAGE = $("#ajaxLoader .c p").text();\r
+\r
+       var viewportWidth = 1030;\r
+       if ($("#main.big").length > 0) {\r
                $("#header").addClass('big');\r
-               viewportWidth=1250;\r
+               viewportWidth = 1250;\r
        }\r
-       \r
-       var is=screen.width/viewportWidth;\r
-       $('meta[name="viewport"]').attr('content','width='+viewportWidth+'px,initial-scale='+is+',maximum-scale:2.0');\r
-       \r
-       if($(".dashboard").length>=1 && $("#dash").length>=1){\r
+\r
+       var is = screen.width / viewportWidth;\r
+       $('meta[name="viewport"]').attr('content', 'width=' + viewportWidth + 'px,initial-scale=' + is + ',maximum-scale:2.0');\r
+\r
+       if ($(".dashboard").length >= 1 && $("#dash").length >= 1) {\r
                $("#dash").sortable('destroy');\r
-               if(FIRST_LOAD){\r
-                       FIRST_LOAD=false;\r
-               }else{\r
-                       FIRST_LOAD=true;\r
+               if (FIRST_LOAD) {\r
+                       FIRST_LOAD = false;\r
+               } else {\r
+                       FIRST_LOAD = true;\r
                        $.ajax({\r
-                               url             :       SITE_PATH+'ajax/reloadDashboards',\r
-                               success :       function(data){\r
+                               url: SITE_PATH + 'ajax/reloadDashboards',\r
+                               success: function(data) {\r
                                        MyAjax(data);\r
                                }\r
                        });\r
                }\r
 \r
                $("#dash").sortable({\r
-                       opacity :       0.6,\r
-                       axis    :       "y",\r
-                       handle  :       ".caption",\r
-                       stop    :       function(e,ui){\r
+                       opacity: 0.6,\r
+                       axis: "y",\r
+                       handle: ".caption",\r
+                       stop: function(e, ui) {\r
                                $.ajax({\r
-                                       url             :       SITE_PATH+'ajax/orderDashboards?'+$("#dash").sortable('serialize')\r
+                                       url: SITE_PATH + 'ajax/orderDashboards?' + $("#dash").sortable('serialize')\r
                                });\r
                                resize();\r
                        }\r
                });\r
        }\r
 \r
-       $(".timereport_field").change(function(){\r
-               var val=parseInt($(this).val());\r
-               if(isNaN(val)){\r
-                       val=0;\r
+       $(".timereport_field").change(function() {\r
+               var val = parseInt($(this).val());\r
+               if (isNaN(val)) {\r
+                       val = 0;\r
                }\r
-               var f=this;\r
-               var id=$(this).attr('id');\r
-               var a=id.split('_');\r
+               var f = this;\r
+               var id = $(this).attr('id');\r
+               var a = id.split('_');\r
                $.ajax({\r
-                       url             :       SITE_PATH+'ajax/saveTimereport/'+a[1]+'/'+a[2]+'/'+val,\r
-                       success :       function(data){\r
-                               FIRST_LOAD=true;\r
+                       url: SITE_PATH + 'ajax/saveTimereport/' + a[1] + '/' + a[2] + '/' + val,\r
+                       success: function(data) {\r
+                               FIRST_LOAD = true;\r
                                MyAjax(data);\r
-                               var td=$(f).parents('td').get(0);\r
-                               if(parseFloat($(f).val())>0){\r
+                               var td = $(f).parents('td').get(0);\r
+                               if (parseFloat($(f).val()) > 0) {\r
                                        $(td).addClass('filled');\r
-                               }else{\r
+                               } else {\r
                                        $(td).removeClass('filled');\r
                                }\r
                        }\r
                });\r
        });\r
 \r
-       $("#dash .toggle").click(function(){\r
-               var rel=$(this).attr('rel');\r
-               var div=$(this).parents('.dashboard').get(0);\r
-               var liste=$(div).find('.liste');\r
+       $("#dash .toggle").click(function() {\r
+               var rel = $(this).attr('rel');\r
+               var div = $(this).parents('.dashboard').get(0);\r
+               var liste = $(div).find('.liste');\r
 \r
-               $(liste).slideToggle('fast',function(){\r
+               $(liste).slideToggle('fast', function() {\r
                        resize();\r
                });\r
                $(this).toggleClass('close');\r
 \r
                $.ajax({\r
-                       url             :       SITE_PATH+'ajax/toggleDashboard/'+rel\r
+                       url: SITE_PATH + 'ajax/toggleDashboard/' + rel\r
                });\r
                return false;\r
        });\r
 \r
-       $(".filtre .bt").click(function(){\r
-               var ul=$(this).parent().parent().children('ul');\r
+       $(".filtre .bt").click(function() {\r
+               var ul = $(this).parent().parent().children('ul');\r
                $(ul).slideToggle('fast');\r
                return false;\r
        });\r
 \r
-       $(".filtre ul").click(function(e){\r
-               if(e.target.nodeName=='INPUT' || e.target.nodeName=='LABEL'){\r
+       $(".filtre ul").click(function(e) {\r
+               if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'LABEL') {\r
                        return true;\r
                }\r
                $(this).slideToggle('fast');\r
        });\r
-       $(".filtre span").click(function(){\r
-               var ul=$(this).parent().children('ul');\r
+       $(".filtre span").click(function() {\r
+               var ul = $(this).parent().children('ul');\r
                $(ul).slideToggle('fast');\r
        });\r
 \r
-       $(".filtre input").change(function(){\r
-               var form=$(this).parents('form').get(0);\r
-               var uls=$(form).find("ul");\r
-               var divs=$(form).find(".input");\r
-               var spans=$(form).find("span");\r
-               var i,j,k,ul,lis,li,input,label,checked,div,titre,t,t1,allc,inputs;\r
-               for(i=0;i<uls.length;i++){\r
-                       div=divs[i];\r
-                       titre=Array();\r
-                       ul=uls[i];\r
-                       lis=$(ul).children("li");\r
-                       allc=$(lis).get(0);\r
-                       checked=0;\r
-                       for(j=1;j<lis.length;j++){\r
-                               li=lis[j];\r
-                               input=$(li).find('input').get(0);\r
-                               label=$(li).find('label').get(0);\r
-                               if(input.checked){\r
+       $(".filtre input").change(function() {\r
+               var form = $(this).parents('form').get(0);\r
+               var uls = $(form).find("ul");\r
+               var divs = $(form).find(".input");\r
+               var spans = $(form).find("span");\r
+               var i, j, k, ul, lis, li, input, label, checked, div, titre, t, t1, allc, inputs;\r
+               for (i = 0; i < uls.length; i++) {\r
+                       div = divs[i];\r
+                       titre = Array();\r
+                       ul = uls[i];\r
+                       lis = $(ul).children("li");\r
+                       allc = $(lis).get(0);\r
+                       checked = 0;\r
+                       for (j = 1; j < lis.length; j++) {\r
+                               li = lis[j];\r
+                               input = $(li).find('input').get(0);\r
+                               label = $(li).find('label').get(0);\r
+                               if (input.checked) {\r
                                        checked++;\r
                                        titre.push($(label).text());\r
                                }\r
                        }\r
-                       if(checked==0){\r
+                       if (checked == 0) {\r
                                $(div).find('span').text($(allc).text());\r
-                               $(div).find('a').attr('title',$(allc).text());\r
+                               $(div).find('a').attr('title', $(allc).text());\r
                                $(div).removeClass('active');\r
-                               inputs=$(ul).find('input');\r
-                               for(k=0;k<inputs.length;k++){\r
-                                       inputs[k].checked=true;\r
+                               inputs = $(ul).find('input');\r
+                               for (k = 0; k < inputs.length; k++) {\r
+                                       inputs[k].checked = true;\r
                                }\r
-                       }else if(checked==lis.length-1){\r
+                       } else if (checked == lis.length - 1) {\r
                                $(div).find('span').text($(allc).text());\r
-                               $(div).find('a').attr('title',$(allc).text());\r
+                               $(div).find('a').attr('title', $(allc).text());\r
                                $(div).removeClass('active');\r
-                       }else{\r
-                               t=titre.join(', ');\r
-                               if(t.length>20){\r
-                                       t1=t.substr(0,16)+'...';\r
-                               }else{\r
-                                       t1=t;\r
+                       } else {\r
+                               t = titre.join(', ');\r
+                               if (t.length > 20) {\r
+                                       t1 = t.substr(0, 16) + '...';\r
+                               } else {\r
+                                       t1 = t;\r
                                }\r
                                $(div).find('span').text(t1);\r
-                               $(div).find('a').attr('title',t);\r
+                               $(div).find('a').attr('title', t);\r
                                $(div).addClass('active');\r
                        }\r
                }\r
                return true;\r
        });\r
 \r
-       $(window).resize(function(){\r
+       $(window).resize(function() {\r
                resize();\r
        });\r
        resize();\r
 \r
 }\r
 \r
-function resize(){\r
-       var allh=$("#header").height()+$("#footer").height()+$("#bar").height()+$("#main .content").height()+13+30;\r
-       var h=Math.max($(window).height(),allh);\r
+function resize() {\r
+       var allh = $("#header").height() + $("#footer").height() + $("#bar").height() + $("#main .content").height() + 13 + 30;\r
+       var h = Math.max($(window).height(), allh);\r
 \r
-       var mh=h-$("#header").height()-$("#footer").height()-$("#bar").height()-30-13;\r
-       mh=Math.max(mh,450);\r
-       $("#main").css('height',mh);\r
+       var mh = h - $("#header").height() - $("#footer").height() - $("#bar").height() - 30 - 13;\r
+       mh = Math.max(mh, 450);\r
+       $("#main").css('height', mh);\r
 }\r
 \r
 \r
-function refreshFiles(){\r
+function refreshFiles() {\r
        $.ajax({\r
-               url             :       SITE_PATH+'ajax/refreshFichiers',\r
-               success :       function(data){\r
+               url: SITE_PATH + 'ajax/refreshFichiers',\r
+               success: function(data) {\r
                        MyAjax(data);\r
                }\r
        });\r
 }\r
 \r
 \r
-function findWSAdmin(li){\r
-       var p=li.selectValue.split(' - ');\r
-       if(p.length<=1){\r
+function findWSAdmin(li) {\r
+       var p = li.selectValue.split(' - ');\r
+       if (p.length <= 1) {\r
                return;\r
        }\r
-       var user_id=parseInt(p[0]);\r
+       var user_id = parseInt(p[0]);\r
        $("#ws_admin").val(user_id);\r
+}\r
+\r
+function resizeLoader() {\r
+       $("#ajaxLoader").css('height', $(window).height());\r
+       $("#ajaxLoader").css('width', $(window).width());\r
+}\r
+\r
+function displayLoader(message) {\r
+       if (message != undefined) {\r
+               $("#ajaxLoader .c p").html(message);\r
+       }\r
+\r
+       resizeLoader();\r
+       $("#ajaxLoader").show();\r
+       var h = $("#ajaxLoader .c").outerHeight();\r
+       $("#ajaxLoader").css('top', -h);\r
+       $("#ajaxLoader").animate({\r
+               top: 0\r
+       }, 400);\r
+}\r
+\r
+function hideLoader() {\r
+       resizeLoader();\r
+\r
+       var h = $("#ajaxLoader .c").outerHeight();\r
+       $("#ajaxLoader").animate({\r
+               top: -h\r
+       }, 400, null, function() {\r
+               $(this).hide();\r
+               $("#ajaxLoader .c p").html(DEFAULT_WAIT_MESSAGE);\r
+       });\r
 }
\ No newline at end of file
index ebb157af4e0d4a853dab157fe02dd84c2441f846..e11bb427146adb330302f358923d768b6e055d30 100644 (file)
--- a/js/ws.js
+++ b/js/ws.js
@@ -1,41 +1,50 @@
-TO_LOAD[TO_LOAD.length]='load_ws();';\r
-FIRST_LOAD=true;\r
+TO_LOAD[TO_LOAD.length] = 'load_ws();';\r
+TO_LOAD_ONCE[TO_LOAD_ONCE.length] = 'load_ws_once();';\r
+FIRST_LOAD = true;\r
 \r
-function load_ws(){\r
-       if($("#book_nom").length){\r
-               $("#book_nom").autocomplete(SITE_PATH+'autocomplete/book',{\r
-                       cacheLength             :       0,\r
-                       maxItemsToShow  :       15,\r
-                       onFindValue             :       findBook,\r
-                       onItemSelect    :       findBook\r
+function load_ws_once() {\r
+       $('form[action="exportbook"] select, form[action="exportbookExe"] select').live('change', function() {\r
+               var form = $(this).parents('form');\r
+               $(form).find('#changed').val($(this).attr('name'));\r
+               $(form).attr('action', 'exportbook').submit().attr('action', 'exportbookExe');\r
+       });\r
+}\r
+\r
+function load_ws() {\r
+       if ($("#book_nom").length) {\r
+               $("#book_nom").autocomplete(SITE_PATH + 'autocomplete/book', {\r
+                       cacheLength: 0,\r
+                       maxItemsToShow: 15,\r
+                       onFindValue: findBook,\r
+                       onItemSelect: findBook\r
                });\r
        }\r
 \r
-       if($("#book_proprietaire").length){\r
-               $("#book_proprietaire").autocomplete(SITE_PATH+'autocomplete/wsuser',{\r
-                       cacheLength             :       0,\r
-                       maxItemsToShow  :       15,\r
-                       onFindValue             :       findProprietaire,\r
-                       onItemSelect    :       findProprietaire\r
+       if ($("#book_proprietaire").length) {\r
+               $("#book_proprietaire").autocomplete(SITE_PATH + 'autocomplete/wsuser', {\r
+                       cacheLength: 0,\r
+                       maxItemsToShow: 15,\r
+                       onFindValue: findProprietaire,\r
+                       onItemSelect: findProprietaire\r
                });\r
        }\r
 \r
 \r
-       if($("#ws_admin_nom").length>0){\r
-               $("#ws_admin_nom").autocomplete(SITE_PATH+'autocomplete/wsadmin',{\r
-                       cacheLength:0,\r
-                       maxItemsToShow:15,\r
-                       onFindValue:findWSAdmin,\r
-                       onItemSelect:findWSAdmin\r
+       if ($("#ws_admin_nom").length > 0) {\r
+               $("#ws_admin_nom").autocomplete(SITE_PATH + 'autocomplete/wsadmin', {\r
+                       cacheLength: 0,\r
+                       maxItemsToShow: 15,\r
+                       onFindValue: findWSAdmin,\r
+                       onItemSelect: findWSAdmin\r
                });\r
        }\r
-       \r
-       $("#importLinksAsExcel,#offsetLinks").submit(function(){\r
+\r
+       $("#importLinksAsExcel,#offsetLinks").submit(function() {\r
                $(this).ajaxSubmit({\r
-                       url             :       SITE_PATH+'ajax/'+$(this).attr('action'),\r
-                       success :       function(data){\r
+                       url: SITE_PATH + 'ajax/' + $(this).attr('action'),\r
+                       success: function(data) {\r
                                window.opener.document.getElementById("composerSwf").reloadLinks();\r
-                               window.close(); \r
+                               window.close();\r
                        }\r
                });\r
                return false;\r
@@ -43,21 +52,23 @@ function load_ws(){
 \r
 \r
 \r
+\r
+\r
        $(".restoreLink").click(restoreLink);\r
-       \r
-       $(".hide_new_value").change(function(){\r
-               if($(this).val()==0){\r
+\r
+       $(".hide_new_value").change(function() {\r
+               if ($(this).val() == 0) {\r
                        $(".new").show();\r
-               }else{\r
+               } else {\r
                        $(".new").hide();\r
                }\r
        });\r
 }\r
 \r
-function restoreLink(){\r
+function restoreLink() {\r
        $.ajax({\r
-               url             :       SITE_PATH+'ajax/restoreLinksVersion/'+$(this).attr('rel'),\r
-               success :       function(data){\r
+               url: SITE_PATH + 'ajax/restoreLinksVersion/' + $(this).attr('rel'),\r
+               success: function(data) {\r
                        window.opener.document.getElementById("composerSwf").reloadLinks();\r
                        window.close();\r
                }\r
@@ -65,20 +76,20 @@ function restoreLink(){
        return false;\r
 }\r
 \r
-function findProprietaire(li){\r
-       var p=li.selectValue.split(' - ');\r
-       if(p.length<=1){\r
+function findProprietaire(li) {\r
+       var p = li.selectValue.split(' - ');\r
+       if (p.length <= 1) {\r
                return;\r
        }\r
-       var user_id=parseInt(p[0]);\r
+       var user_id = parseInt(p[0]);\r
        $("#proprietaire").val(user_id);\r
 }\r
 \r
-function findBook(li){\r
-       var book=li.selectValue.split(' - ');\r
-       if(book.length<=1){\r
+function findBook(li) {\r
+       var book = li.selectValue.split(' - ');\r
+       if (book.length <= 1) {\r
                return;\r
        }\r
-       var book_id=parseInt(book[0]);\r
+       var book_id = parseInt(book[0]);\r
        $("#book").val(book_id);\r
 }
\ No newline at end of file
index 807bf34588fa4b1754c2b3de386830080b00b783..bc7f4ae42ace10c6b023dddd487728f86e9b8eda 100644 (file)
@@ -15,9 +15,9 @@ select{
     font-family: 'UniversCondensedBold';
     src: url('univers-condensedbold-webfont.eot');
     src: url('univers-condensedbold-webfont.eot?#iefix') format('embedded-opentype'),
-         url('univers-condensedbold-webfont.woff') format('woff'),
-         url('univers-condensedbold-webfont.ttf') format('truetype'),
-         url('univers-condensedbold-webfont.svg#UniversCondensedBold') format('svg');
+               url('univers-condensedbold-webfont.woff') format('woff'),
+               url('univers-condensedbold-webfont.ttf') format('truetype'),
+               url('univers-condensedbold-webfont.svg#UniversCondensedBold') format('svg');
     font-weight: normal;
     font-style: normal;
 }
@@ -87,5 +87,43 @@ select{
 
 .onglet.active, .onglet:hover{
        background-position:bottom left;
-       
+
+}
+
+#ajaxLoader{
+       position:fixed;
+       display:none;
+       top:0px;
+       left:0px;
+       width:100%;
+       height:100%;
+       z-index: 10000000;
+}
+
+#ajaxLoader .c{
+       background:#fff;
+       font-size:16px;
+       padding:20px;
+       width:300px;
+       height:50px;
+       margin:0 auto;
+       border-radius: 0 0 10px 10px;
+       box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
+       -moz-box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
+       -webkit-box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
+       -ms-box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
+       -o-box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
+}
+
+#ajaxLoader .c img{
+       vertical-align: middle;
+       display: block;
+       float:left;
+} 
+
+#ajaxLoader .c p{
+       width:240px;
+       float:left;
+       margin-left:20px;
+       text-align: center;
 }
\ No newline at end of file
index 413ee08b9fef4201a5454e212649e96ed3b50125..33fbf2d33d9062d21f2f861193a89c28e32ef8d4 100644 (file)
@@ -372,7 +372,7 @@ input[type="text"],input[type="password"],input[type="email"],input[type="search
 }\r
 \r
 .ac_results iframe{\r
-display:none;\r
+       display:none;\r
 }\r
 \r
 /* Traduction */\r
@@ -393,4 +393,8 @@ display:none;
 \r
 #urlDecoder textarea{\r
        width:100%;\r
+}\r
+\r
+#ajaxLoader{\r
+       color:#333333;\r
 }
\ No newline at end of file