]> _ Git - cubeextranet.git/commitdiff
done #2034 @1.5
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Mon, 18 Jun 2018 16:22:37 +0000 (16:22 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Mon, 18 Jun 2018 16:22:37 +0000 (16:22 +0000)
composer.json
inc/ws/Controlleur/class.ws.url.php
inc/ws/Metier/class.ws.book.parametres.php
style/ws/style.css

index 024757558a2525bb60724ef4a60030fa17751977..6abd43841c26b30599fa1368e8a124f90be89f71 100644 (file)
@@ -1,5 +1,6 @@
 {\r
   "require": {\r
+    "php": ">=7.2",\r
     "php-mime-mail-parser/php-mime-mail-parser": "2.11.1"\r
   }\r
 }\r
index 8dbef6cec9731ed2499508ad7e212dabcbbc438f..121a7b341c498f569353372e3a00f0be916b33e8 100644 (file)
@@ -1,8 +1,10 @@
 <?php
 
-class wsUrl {
+class wsUrl
+{
 
-       public static function publications($args) {
+       public static function publications($args)
+       {
                global $core;
 
                if (isset($args[1])) {
@@ -35,7 +37,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function listeBooks($dashboard = null, $settings = null) {
+       public static function listeBooks($dashboard = null, $settings = null)
+       {
                global $core;
                cubePage::truePopup();
                cubePage::autocomplete();
@@ -59,7 +62,7 @@ class wsUrl {
 
                $res = '';
 
-               $res .= self::contextBookDownload($context_download_id, $droits);
+
                $res .= self::contextBookStatus($context_status_id);
                $res .= self::contextBookView($context_view_id);
 
@@ -141,7 +144,8 @@ class wsUrl {
                                if ($droits->admin) {
                                        $res .= '<td class="bouton"><a href="#" rel="exportbook/' . $book->book_id . '" class="popup download btbook">' . $btDownload . '</a></td>';
                                } else {
-                                       $res .= '<td class="bouton"><a href="#" class="openContextMenu download btbook" rel="' . $context_download_id . '" rev="' . $book->book_id . '">' . $btDownload . '</a></td>';
+                                       $res .= self::contextBookDownload($context_download_id, $droits, $book);
+                                       $res .= '<td class="bouton"><a href="#" class="openContextMenu download btbook" rel="' . $context_download_id . '_' . $book->book_id . '" rev="' . $book->book_id . '">' . $btDownload . '</a></td>';
                                }
                        } else {
                                $res .= '<td></td>';
@@ -166,7 +170,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function collections() {
+       public static function collections()
+       {
                global $core;
 
                if (isset($args[1])) {
@@ -192,7 +197,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function collection($args) {
+       public static function collection($args)
+       {
                global $core;
                commonDroits::min(1);
                cubePage::ui('Sortable');
@@ -214,7 +220,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function collectionEdit($collection) {
+       public static function collectionEdit($collection)
+       {
                global $core;
 
                $res = '<h1>Gestion de la collection &laquo; ' . $collection->nom . ' &raquo; <em># ' . $collection->collection_id . '</em></h1>';
@@ -390,14 +397,16 @@ class wsUrl {
                return $res;
        }
 
-       public static function viewCollectionFile($file, $collection_id) {
+       public static function viewCollectionFile($file, $collection_id)
+       {
                $res = '<a href="/fluidbook/collections/working/' . $collection_id . '/' . $file . '" target="_blank">';
                $res .= cubeMedia::tango('actions/document-save.png');
                $res .= '</a>';
                return $res;
        }
 
-       public static function getSelectVersions($versions) {
+       public static function getSelectVersions($versions)
+       {
                fb($versions);
                $res = array('-----' => '');
                $e = explode(',', $versions);
@@ -409,7 +418,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function listeCollections($dashboard = null, $settings = null) {
+       public static function listeCollections($dashboard = null, $settings = null)
+       {
                global $core;
 
                cubePage::truePopup();
@@ -478,7 +488,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function getFluidbookVersions($select = false) {
+       public static function getFluidbookVersions($select = false)
+       {
                $droits = wsDroits::getDroits();
 
                $chooseVersion = wsDroits::admin();
@@ -531,16 +542,33 @@ class wsUrl {
                return $res;
        }
 
-       public static function contextBookDownload($id, $droits) {
+       public static function contextBookDownload($id, $droits, $book = null)
+       {
                global $core;
 
                $versions = self::getFluidbookVersions();
 
+               if (null !== $book) {
+                       $id .= '_' . $book->book_id;
+               }
+
                $res = '<div class="contextMenu downbookContextMenu" id="' . $id . '">';
                $res .= '<ul>';
                $res .= '<li class="head">' . __("Sélectionnez une version") . '</li>';
                foreach ($versions as $k => $v) {
-                       $res .= '<li><a href="#" rel="downbook/$1/' . $k . '" class="ajax">' . $v['icon'] . $v['title'] . '</a></li>';
+                       $disabled = '';
+                       if (null !== $book) {
+                               $tk = 'download_' . $k;
+                               if (!$book->parametres->{$tk}) {
+                                       if ($core->user->rs == 'Kadreo') {
+                                               $disabled = ' class="disabled"';
+                                       } else {
+                                               continue;
+                                       }
+
+                               }
+                       }
+                       $res .= '<li' . $disabled . '><a href="#" rel="downbook/$1/' . $k . '" class="ajax">' . $v['icon'] . $v['title'] . '</a></li>';
                }
                if ($droits->admin) {
                        $res .= '<li class="head">' . __("Installer sur ...") . '</li>';
@@ -559,7 +587,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function contextBookStatus($id) {
+       public static function contextBookStatus($id)
+       {
                global $core;
 
                if (wsDroits::admin()) {
@@ -581,20 +610,21 @@ class wsUrl {
                return $res;
        }
 
-       public static function contextBookView($id) {
+       public static function contextBookView($id)
+       {
                global $core;
 
                if (wsDroits::admin()) {
                        $viewers = array(array('version' => 'viewer', 'title' => __('Version Flash'), 'icon' => cubeMedia::image(IMG . '/flash.png')),
-                                        array('version' => 'viewerh', 'title' => __('Version HTML5'), 'icon' => cubeMedia::image(IMG . '/html5.png')),
-                                        array('version' => 'vieweru', 'title' => __('Version Flash') . ' (' . __('debuggage') . ')', 'icon' => cubeMedia::image(IMG . '/flashbug.png')),
-                                        array('version' => 'viewerhu', 'title' => __('Version HTML5') . ' (' . __('debuggage') . ')', 'icon' => cubeMedia::image(IMG . '/html5bug.png')),
-                                        //array('version' => 'viewerhu', 'title' => __('Widget HTML5'), 'icon' => cubeMedia::image(IMG . '/html5bug.png'), 'file' => 'widget.html', 'pattern' => '$1_$2_$3'),
-                                        array('version' => 'viewer1', 'title' => __('Version 1'), 'icon' => cubeMedia::image(IMG . '/flash.png'))
+                               array('version' => 'viewerh', 'title' => __('Version HTML5'), 'icon' => cubeMedia::image(IMG . '/html5.png')),
+                               array('version' => 'vieweru', 'title' => __('Version Flash') . ' (' . __('debuggage') . ')', 'icon' => cubeMedia::image(IMG . '/flashbug.png')),
+                               array('version' => 'viewerhu', 'title' => __('Version HTML5') . ' (' . __('debuggage') . ')', 'icon' => cubeMedia::image(IMG . '/html5bug.png')),
+                               //array('version' => 'viewerhu', 'title' => __('Widget HTML5'), 'icon' => cubeMedia::image(IMG . '/html5bug.png'), 'file' => 'widget.html', 'pattern' => '$1_$2_$3'),
+                               array('version' => 'viewer1', 'title' => __('Version 1'), 'icon' => cubeMedia::image(IMG . '/flash.png'))
                        );
                } else {
                        $viewers = array(array('version' => 'viewer', 'title' => __('Version Flash'), 'icon' => cubeMedia::image(IMG . '/flash.png')),
-                                        array('version' => 'viewerh', 'title' => __('Version HTML5'), 'icon' => cubeMedia::image(IMG . '/html5.png'))
+                               array('version' => 'viewerh', 'title' => __('Version HTML5'), 'icon' => cubeMedia::image(IMG . '/html5.png'))
                        );
 
                }
@@ -617,7 +647,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function traductions($args) {
+       public static function traductions($args)
+       {
                global $core;
 
                commonDroits::min(5);
@@ -662,7 +693,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function formLang($lang_id) {
+       public static function formLang($lang_id)
+       {
                commonDroits::min(5);
                global $core;
                $dao = new wsDAOLang($core->con);
@@ -694,7 +726,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function exportLangAsExcel($args) {
+       public static function exportLangAsExcel($args)
+       {
                global $core;
 
                $lang_id = $args[1];
@@ -716,7 +749,8 @@ class wsUrl {
                exit;
        }
 
-       public static function exportAllLangsAsExcel($args) {
+       public static function exportAllLangsAsExcel($args)
+       {
                global $core;
 
                $xls = new PHPExcel();
@@ -745,7 +779,8 @@ class wsUrl {
                $writer->save('php://output');
        }
 
-       public static function exportLangAsSheet($s, $lang_id, $ref_id = 'en') {
+       public static function exportLangAsSheet($s, $lang_id, $ref_id = 'en')
+       {
                global $core;
                $dao = new wsDAOLang($core->con);
 
@@ -784,7 +819,8 @@ class wsUrl {
                return $lang_name;
        }
 
-       public static function getFonts() {
+       public static function getFonts()
+       {
                $formats = array('ttf', 'otf', 'TTF', 'OTF');
 
                $dr = opendir(FONT_PATH);
@@ -798,7 +834,8 @@ class wsUrl {
                return $fonts;
        }
 
-       protected static function getCharsets() {
+       protected static function getCharsets()
+       {
                $sets = cubeFlexFontAsset::getSets();
                $res = array();
                foreach ($sets as $k => $v) {
@@ -807,7 +844,8 @@ class wsUrl {
                return $res;
        }
 
-       protected static function getNSISLangs() {
+       protected static function getNSISLangs()
+       {
                $res = array();
                $dir = WS_FILES . '/nsislangs';
                $dr = opendir($dir);
@@ -823,7 +861,8 @@ class wsUrl {
                return $res;
        }
 
-       public static function editor($args) {
+       public static function editor($args)
+       {
                commonDroits::min(1);
 
                global $core;
@@ -862,7 +901,8 @@ html{height:100%}' . "\n";
         * @param mixed $args
         * @return
         */
-       public static function restoreLinks($args) {
+       public static function restoreLinks($args)
+       {
                commonDroits::min(1);
 
                global $core;
@@ -940,7 +980,8 @@ html{height:100%}' . "\n";
                echo $res;
        }
 
-       public static function exportLinksAsExcel($args) {
+       public static function exportLinksAsExcel($args)
+       {
                global $core;
 
                cubePHP::neverStop();
@@ -962,18 +1003,20 @@ html{height:100%}' . "\n";
                exit;
        }
 
-       public static function editComposition($book_id, $hash) {
+       public static function editComposition($book_id, $hash)
+       {
 
                $fv = array(session_name() => session_id(),
-                           'book_id' => $book_id,
-                           'hash' => $hash,
-                           'url' => '/');
+                       'book_id' => $book_id,
+                       'hash' => $hash,
+                       'url' => '/');
 
                $mtime = filemtime(ROOT . '/swf/composer.swf');
                return cubeMedia::flash2(WEBROOT . '/swf/composer.swf?junk=' . $mtime, '100%', '100%', $fv, 'composerSwf', 'swfPanel', 10, '#d2d3c7', '', 'false', 'noscale', 'normal', array(), false, true, false);
        }
 
-       public static function stats($args) {
+       public static function stats($args)
+       {
                global $core;
                $bid = (isset($args[1])) ? $args[1] : null;
 
@@ -989,7 +1032,8 @@ html{height:100%}' . "\n";
                return wsStats::display($bid . '_' . $hash, $annee, $mois);
        }
 
-       public static function viewerp($args) {
+       public static function viewerp($args)
+       {
                commonDroits::min(5);
 
                $args = cubePage::getArgs($args);
@@ -1009,7 +1053,8 @@ html{height:100%}' . "\n";
                echo self::commonViewer($book_id, $e[1], true);
        }
 
-       public static function vieweru($args) {
+       public static function vieweru($args)
+       {
                commonDroits::min(5);
 
                $args = cubePage::getArgs($args);
@@ -1033,7 +1078,8 @@ html{height:100%}' . "\n";
                echo self::commonViewer($book_id, $e[1], false, 'default', true);
        }
 
-       public static function viewerh($args) {
+       public static function viewerh($args)
+       {
                global $core;
 
                $args = cubePage::getArgs($args);
@@ -1074,7 +1120,8 @@ html{height:100%}' . "\n";
                self::commonHTML5Viewer($book_id, $hash);
        }
 
-       public static function getHTML5CacheTime($book_id) {
+       public static function getHTML5CacheTime($book_id)
+       {
                $cacheFile = WS_BOOKS . '/html5/' . $book_id . '/cache.appcache';
                if (file_exists($cacheFile)) {
                        return filemtime($cacheFile);
@@ -1082,7 +1129,8 @@ html{height:100%}' . "\n";
                return TIME;
        }
 
-       public static function viewerhu($args) {
+       public static function viewerhu($args)
+       {
                global $core;
 
                commonDroits::min(5);
@@ -1106,7 +1154,8 @@ html{height:100%}' . "\n";
                self::commonHTML5Viewer($book_id, $hash, 'u');
        }
 
-       public static function viewerha($args) {
+       public static function viewerha($args)
+       {
                global $core;
 
 
@@ -1131,7 +1180,8 @@ html{height:100%}' . "\n";
                self::commonHTML5Viewer($book_id, $hash, 'a');
        }
 
-       public static function viewerht($args) {
+       public static function viewerht($args)
+       {
                commonDroits::min(5);
                $args = cubePage::getArgs($args);
 
@@ -1150,7 +1200,8 @@ html{height:100%}' . "\n";
                self::commonHTML5Viewer($book_id, $hash, 't');
        }
 
-       public static function commonHTML5Viewer($book_id, $hash, $version = '') {
+       public static function commonHTML5Viewer($book_id, $hash, $version = '')
+       {
                global $core;
                self::checkDocumentVersionOfBook($book_id);
 
@@ -1184,7 +1235,8 @@ html{height:100%}' . "\n";
                exit;
        }
 
-       public static function viewer1($args) {
+       public static function viewer1($args)
+       {
                $args = cubePage::getArgs($args);
 
                $wmode = isset($args[1]) ? $args[1] : '';
@@ -1208,7 +1260,8 @@ html{height:100%}' . "\n";
                echo self::commonViewer($book_id, $e[1], false, $wmode, $newurl, '1');
        }
 
-       public static function viewer($args) {
+       public static function viewer($args)
+       {
                $args = cubePage::getArgs($args);
 
 
@@ -1235,7 +1288,8 @@ html{height:100%}' . "\n";
                echo self::commonViewer($book_id, $e[1], false, $wmode, $newurl);
        }
 
-       public static function commonViewer($book_id, $hash, $standalone = false, $wmode = 'default', $fps = false, $version = 2) {
+       public static function commonViewer($book_id, $hash, $standalone = false, $wmode = 'default', $fps = false, $version = 2)
+       {
                if (!defined('MINIMIZE_JS')) {
                        define('MINIMIZE_JS', false);
                }
@@ -1362,7 +1416,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function logReferer($id) {
+       public static function logReferer($id)
+       {
 
                if (!isset($_SERVER['HTTP_REFERER']) || !$_SERVER['HTTP_REFERER']) {
                        $r = '';
@@ -1387,14 +1442,16 @@ html{height:100%}' . "\n";
                }
        }
 
-       public static function statsxls($args) {
+       public static function statsxls($args)
+       {
                $bid = (isset($args[1])) ? $args[1] : null;
                $annee = (isset($args[2])) ? $args[2] : null;
                $mois = (isset($args[3])) ? $args[3] : null;
                wsStats::exportXLS($bid, $annee, $mois);
        }
 
-       public static function chooseExistingBook() {
+       public static function chooseExistingBook()
+       {
                wsDroits::creation(true);
                $res = '<tr><td colspan="2"><p style="width:600px;text-align:justify;"><em>a' . __("Si votre nouvelle publication a des paramètres en commun avec une publication existante, veuillez rechercher cette publication afin d'attribuer par défaut Ã  votre nouvelle publication les paramètres de l'existante") . '</em></p></td></tr>';
                $res .= '<tr><td>' . __('Rechercher une publication') . ' : </td><td>' . form::field('book_nom', 64, 1024) . form::hidden('book', '') . '</td></tr>';
@@ -1404,7 +1461,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function changeBookProprietaire($book_id) {
+       public static function changeBookProprietaire($book_id)
+       {
                global $core;
                commonDroits::min(3);
 
@@ -1414,7 +1472,8 @@ html{height:100%}' . "\n";
                return self::_changeProprietaire($book->proprietaire);
        }
 
-       public static function changeCollectionProprietaire($collection_id) {
+       public static function changeCollectionProprietaire($collection_id)
+       {
                global $core;
                commonDroits::min(3);
 
@@ -1424,13 +1483,15 @@ html{height:100%}' . "\n";
                return self::_changeProprietaire($collection->proprietaire_nom);
        }
 
-       protected static function _changeProprietaire($proprietaire) {
+       protected static function _changeProprietaire($proprietaire)
+       {
                $res = '<tr><td>' . __('Propriétaire actuel') . ' : </td><td>' . $proprietaire . '</td></tr>';
                $res .= '<tr><td>' . __('Rechercher un utilisateur') . ' : </td><td>' . form::field('book_proprietaire', 64, 1024) . form::hidden('proprietaire', '') . '</td></tr>';
                return $res;
        }
 
-       public static function chooseBookProject($book_id) {
+       public static function chooseBookProject($book_id)
+       {
                global $core;
 
                wsDroits::admin(true);
@@ -1454,7 +1515,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function chooseBookTache($book_id, $projet_id) {
+       public static function chooseBookTache($book_id, $projet_id)
+       {
                global $core;
                wsDroits::admin(true);
 
@@ -1485,7 +1547,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function valideDownload() {
+       public static function valideDownload()
+       {
                global $core;
 
                $res = '<tr><td>' . __("Le téléchargement du fluidbook implique qu'il a Ã©té testé et définitivement validé.") . '<br />' . __("Si vous le téléchargez, il vous sera facturé selon les conditions stipulées dans votre contrat.") . '</td></tr>';
@@ -1494,7 +1557,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function formInstall($book, $server) {
+       public static function formInstall($book, $server)
+       {
                if ($server == 'references') {
                        $s = __('Espace des références');
                        $dir = $book->dir_references;
@@ -1521,7 +1585,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function testAS($args) {
+       public static function testAS($args)
+       {
                global $core;
                commonDroits::min(5);
                if (!isset($args[1])) {
@@ -1538,7 +1603,8 @@ html{height:100%}' . "\n";
                exit;
        }
 
-       public static function testAIR($args) {
+       public static function testAIR($args)
+       {
                global $core;
                commonDroits::min(5);
                if (!isset($args[1])) {
@@ -1554,7 +1620,8 @@ html{height:100%}' . "\n";
                exit;
        }
 
-       public static function testLinksCSV($args) {
+       public static function testLinksCSV($args)
+       {
                global $core;
                commonDroits::min(5);
 
@@ -1564,7 +1631,8 @@ html{height:100%}' . "\n";
                echo $dao->putLinksFromCSV($args[1]);
        }
 
-       protected static function checkDocumentVersionOfBook($book_id) {
+       protected static function checkDocumentVersionOfBook($book_id)
+       {
                global $core;
                cubePHP::neverStop();
                $daoBook = new wsDAOBook($core->con);
@@ -1584,13 +1652,15 @@ html{height:100%}' . "\n";
                $daoBook->setVersion($book_id, 2);
        }
 
-       public static function testOldLink($args) {
+       public static function testOldLink($args)
+       {
                global $core;
                $daoDoc = new wsDAODocument($core->con);
                $daoDoc->setLinksFromOldFluidbook($args[1]);
        }
 
-       protected static function updateDocument($document_id) {
+       protected static function updateDocument($document_id)
+       {
                global $core;
 
                $dao = new wsDAODocument($core->con);
@@ -1607,7 +1677,8 @@ html{height:100%}' . "\n";
                $dao->updateFromObject($doc);
        }
 
-       public static function testFontExtraction($args) {
+       public static function testFontExtraction($args)
+       {
                $documentId = $args[1];
 
                header('Content-type: text/plain');
@@ -1620,7 +1691,8 @@ html{height:100%}' . "\n";
                exit;
        }
 
-       public static function getParamsHelp($args) {
+       public static function getParamsHelp($args)
+       {
                commonDroits::min(5);
                global $core;
 
@@ -1657,7 +1729,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function formatHelp($rubriques) {
+       public static function formatHelp($rubriques)
+       {
                commonDroits::min(5);
 
                $res = '';
@@ -1678,7 +1751,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function clients($args) {
+       public static function clients($args)
+       {
                global $core;
                cubePage::truePopup();
                cubePage::autoComplete();
@@ -1706,7 +1780,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function listeClients($dashboard = null, $settings = null) {
+       public static function listeClients($dashboard = null, $settings = null)
+       {
                global $core;
                commonDroits::min(3);
                $settings = is_null($settings) ? $core->user->getSettings('clients_ws') : $settings;
@@ -1787,7 +1862,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function formClient($entreprise_id = 'new') {
+       public static function formClient($entreprise_id = 'new')
+       {
                global $core;
                commonDroits::min(3);
                $dao = new commonDAOEntreprise($core->con);
@@ -1858,7 +1934,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function listeContacts($entreprise_id) {
+       public static function listeContacts($entreprise_id)
+       {
                global $core;
                commonDroits::min(3);
                $dao = new commonDAOEntreprise($core->con);
@@ -1880,7 +1957,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function formCollection($collection_id = 'new') {
+       public static function formCollection($collection_id = 'new')
+       {
                global $core;
                commonDroits::min(3);
                $dao = new wsDAOCollection($core->con);
@@ -1895,7 +1973,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function formContact($client_id = 'new', $entreprise_id = null) {
+       public static function formContact($client_id = 'new', $entreprise_id = null)
+       {
                global $core;
                commonDroits::min(3);
 
@@ -1930,7 +2009,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function demandes() {
+       public static function demandes()
+       {
                global $core;
                cubePage::truePopup();
                cubePage::autoComplete();
@@ -1955,7 +2035,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function listeDemandes($dashboard = null, $settings = null) {
+       public static function listeDemandes($dashboard = null, $settings = null)
+       {
                global $core;
                commonDroits::min(5);
                $settings = is_null($settings) ? $core->user->getSettings('demandes') : $settings;
@@ -2025,7 +2106,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function formDemande($demande_id = 'new') {
+       public static function formDemande($demande_id = 'new')
+       {
                global $core;
                commonDroits::min(5);
                $dao = new wsDAODemande($core->con);
@@ -2053,7 +2135,8 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function reponseDemande($args) {
+       public static function reponseDemande($args)
+       {
                global $core;
 
                commonDroits::min(3);
@@ -2105,13 +2188,14 @@ html{height:100%}' . "\n";
                return $res;
        }
 
-       public static function orpiref($args) {
+       public static function orpiref($args)
+       {
                $ref = $args[1];
 
                #######
-        # TEMPORARY: this was broken because the cURL extension is not loaded for PHP
-        # The code in this function has been extracted and moved to hosting.fluidbook.com/orpiref/?ref=xxxxx
-        header('Location: https://hosting.fluidbook.com/orpiref/?ref='. $ref);
+               # TEMPORARY: this was broken because the cURL extension is not loaded for PHP
+               # The code in this function has been extracted and moved to hosting.fluidbook.com/orpiref/?ref=xxxxx
+               header('Location: https://hosting.fluidbook.com/orpiref/?ref=' . $ref);
                exit;
                #######
 
index 4e3566b399e435673c3e6ca38e4dd3de06a62293..ee9ac8cf520f325448e6b3f650d1f4d997379831 100644 (file)
@@ -547,6 +547,22 @@ class wsBookParametres extends wsParametres
 
                $this->forms['scorm'] = array('label' => __('SCORM'),
                        'fieldsnames' => array('scorm_enable', 'scorm_version', 'scorm_id', 'scorm_org', 'scorm_title', 'scorm_variables', 'scorm_quizdata'));
+
+               $versions = wsUrl::getFluidbookVersions(false);
+               $ignore = ['v1', 'v2', 'phonegap'];
+               $fields = [];
+               foreach ($versions as $k => $version) {
+                       if (in_array($k, $ignore)) {
+                               continue;
+                       }
+                       $this->fields['download_' . $k] = ['type' => 'boolean', 'editable' => true, 'default' => false, 'label' => $version['title'], 'grade' => 3];
+                       $fields[] = 'download_' . $k;
+               }
+               $this->fields['download_online']['default'] = true;
+
+               $this->forms['downloads'] = array('label' => __('Versions disponibles au téléchargement'),
+                       'fieldsnames' => $fields);
+
        }
 
 }
index 0f6f31d37b543dd46b18efc3a847a0d9a2be312c..a2a6efe612a8a9c58c28459c9ed47fd5a7dbc62d 100644 (file)
-body{\r
-       height:auto;\r
-       background:#fff;\r
+body {\r
+       height: auto;\r
+       background: #fff;\r
 }\r
 \r
-body,table{\r
-       font-family:Verdana;\r
-       font-size:12px;\r
-       color:#797d62;\r
+body, table {\r
+       font-family: Verdana;\r
+       font-size: 12px;\r
+       color: #797d62;\r
 }\r
 \r
-a{\r
-       color:#f54d00;\r
-       text-decoration:underline;\r
+a {\r
+       color: #f54d00;\r
+       text-decoration: underline;\r
 }\r
 \r
-a:hover{\r
-       text-decoration:none;\r
+a:hover {\r
+       text-decoration: none;\r
+}\r
+\r
+abbr {\r
+       cursor: help;\r
+       border-bottom: 1px dotted #797D62;\r
 }\r
 \r
-abbr{cursor:help;border-bottom:1px dotted #797D62;}\r
+td {\r
+       height: 30px;\r
+}\r
 \r
-td{height:30px;}\r
+h1 {\r
+       color: #989b85;\r
+}\r
 \r
-h1{\r
-       color:#989b85;\r
+input[type="text"], input[type="password"], input[type="email"], input[type="search"], select, textarea {\r
+       color: #797D62;\r
 }\r
 \r
-input[type="text"],input[type="password"],input[type="email"],input[type="search"],select,textarea{\r
-       color:#797D62;\r
+.message {\r
+       text-align: center;\r
+       font-size: 11px;\r
+       color: #da4f24;\r
+       background: #fff;\r
 }\r
 \r
-.message{text-align:center;font-size:11px;color:#da4f24;background:#fff;}\r
-.closePopup img{margin-top:4px;}\r
+.closePopup img {\r
+       margin-top: 4px;\r
+}\r
 \r
-.login h1{\r
+.login h1 {\r
        padding: 10px 10px 5px;\r
 }\r
 \r
-.content{\r
-       width:990px;\r
-       margin:0 auto;\r
-       position:relative;\r
+.content {\r
+       width: 990px;\r
+       margin: 0 auto;\r
+       position: relative;\r
 }\r
 \r
-.content .swfPanel{height:100%;}\r
+.content .swfPanel {\r
+       height: 100%;\r
+}\r
+\r
+.big .liste td {\r
+       font-size: 11px !important;\r
+       padding-left: 5px;\r
+       padding-right: 5px;\r
+}\r
 \r
-.big .liste td{font-size:11px !important;padding-left:5px;padding-right:5px;}\r
-.big .liste th{padding-left:5px;padding-right:5px;}\r
-.big .content{width:1210px;}\r
+.big .liste th {\r
+       padding-left: 5px;\r
+       padding-right: 5px;\r
+}\r
+\r
+.big .content {\r
+       width: 1210px;\r
+}\r
 \r
-.liste .bouton a{\r
-       height:16px;\r
+.liste .bouton a {\r
+       height: 16px;\r
 }\r
 \r
-#header{\r
-       height:94px;\r
-       background:url(bg-header.png) repeat-x;\r
-       position:relative;\r
+#header {\r
+       height: 94px;\r
+       background: url(bg-header.png) repeat-x;\r
+       position: relative;\r
 }\r
 \r
-#logo{\r
-       position:absolute;\r
-       top:11px;\r
+#logo {\r
+       position: absolute;\r
+       top: 11px;\r
 }\r
 \r
-#welcome{\r
-       position:absolute;\r
-       top:25px;\r
-       right:10px;\r
-       font-size:11px;\r
-       color:#fff;\r
+#welcome {\r
+       position: absolute;\r
+       top: 25px;\r
+       right: 10px;\r
+       font-size: 11px;\r
+       color: #fff;\r
 }\r
 \r
-#welcome.with-search{\r
-       right:250px;\r
+#welcome.with-search {\r
+       right: 250px;\r
 }\r
 \r
-#search{\r
-       background:url(search.png) no-repeat;\r
-       width:229px;\r
-       height:28px;\r
-       position:absolute;\r
-       right:10px;\r
-       top:20px;\r
+#search {\r
+       background: url(search.png) no-repeat;\r
+       width: 229px;\r
+       height: 28px;\r
+       position: absolute;\r
+       right: 10px;\r
+       top: 20px;\r
 }\r
 \r
-#search input{\r
-       background:none;\r
-       border:none;\r
-       width:180px;\r
-       position:absolute;\r
-       top:7px;\r
-       left:10px;\r
-       color:#fff;\r
+#search input {\r
+       background: none;\r
+       border: none;\r
+       width: 180px;\r
+       position: absolute;\r
+       top: 7px;\r
+       left: 10px;\r
+       color: #fff;\r
 }\r
 \r
-#search a{\r
-       margin-left:5px;\r
-       position:absolute;\r
-       top:2px;\r
-       right:3px;\r
+#search a {\r
+       margin-left: 5px;\r
+       position: absolute;\r
+       top: 2px;\r
+       right: 3px;\r
 }\r
 \r
-#footer{\r
-       display:none;\r
+#footer {\r
+       display: none;\r
 }\r
 \r
-#main{\r
-       background:url(bg-page.png) repeat-x #fff;\r
-       position:relative;\r
-       height:439px;\r
-       padding-top:13px;\r
-       padding-bottom:30px;\r
+#main {\r
+       background: url(bg-page.png) repeat-x #fff;\r
+       position: relative;\r
+       height: 439px;\r
+       padding-top: 13px;\r
+       padding-bottom: 30px;\r
 }\r
 \r
-#logo-main{\r
+#logo-main {\r
        /*position:fixed;\r
        background:url(bg-logo.png) no-repeat;\r
        top:180px;\r
@@ -123,559 +149,880 @@ input[type="text"],input[type="password"],input[type="email"],input[type="search
        height:419px;*/\r
 }\r
 \r
-#nav{\r
-       height:31px;\r
-       position:absolute;\r
-       top:63px;\r
-       width:960px;\r
+#nav {\r
+       height: 31px;\r
+       position: absolute;\r
+       top: 63px;\r
+       width: 960px;\r
+}\r
+\r
+.popupOverlay {\r
+       background: #a8aa95;\r
+       opacity: 0;\r
+       position: fixed;\r
+       display: none;\r
+       top: 0px;\r
+       left: 0px;\r
+       width: 100%;\r
+       height: 100%;\r
+}\r
+\r
+.popupWindow {\r
+       display: none;\r
+       opacity: 1;\r
+       position: fixed;\r
 }\r
 \r
-.popupOverlay{background:#a8aa95;opacity:0;position:fixed;display:none;top:0px;left:0px;width:100%;height:100%;}\r
-.popupWindow{display:none;opacity:1;position:fixed;}\r
 /*.popupWindow>table{width:600px;}*/\r
-.popupWindow .close{position:absolute;top:15px;right:15px;}\r
+.popupWindow .close {\r
+       position: absolute;\r
+       top: 15px;\r
+       right: 15px;\r
+}\r
 \r
 /* Tableaux */\r
-.liste{width:100% !important;min-width:960px;}\r
-.liste.light{width:100% !important;min-width:0px !important;}\r
-.liste.form{width:auto !important;min-width:0px !important;}\r
-.form h2,.form th,.form td,.liste th, .liste td{text-align:left;border-bottom:1px solid #fff;font-weight:normal;padding-left:10px;padding-right:10px;font-size:12px;min-height:50px;height:38px;}\r
-.form th,.liste th,.liste h1{font-size:12px;height:31px;font-weight:bold;vertical-align:middle;background:#fff;padding-left:10px;}\r
-.form tr.big th{height:40px;}\r
-.form h2{padding-top:6px;height:26px;}\r
-.form td{background:#fff;}\r
-.form h2,.liste td{background:#eaeaea;vertical-align:middle;}\r
-.form tr.odd td,.liste tr.odd td{background:#f4f4f4;}\r
-.liste td.bouton{padding-left:0px;padding-right:5px;}\r
-\r
-.form tr.light th,.liste tr.light th{\r
-       font-size:12px;background:#fff;height:22px;\r
-       border-bottom:1px solid #707070;\r
-       margin-bottom:1px;\r
-       padding-left:3px;\r
-}\r
-\r
-\r
-.liste tr.bold td{font-weight:bold;}\r
-.liste td.we{background:#e3e3e3 !important;}\r
-.liste td.filled,.liste td.highlight, .liste th.highlight{background:#9abf0c !important;}\r
-.liste .action{width:1px;}\r
-.liste th a{color:#797D62;text-decoration:none;font-weight:bold;}\r
-.liste th a:hover{text-decoration:underline;}\r
-.liste td a.icon img{vertical-align:middle;margin-top:0px;}\r
-\r
-.form td a img, .liste td a img{margin-top:4px;}\r
-\r
-.listeTimereport input[type="text"]{width:12px;text-align:center;font-size:10px;margin:2px;}\r
-.listeTimereport td, .listeTimereport th{padding-left:4px;padding-right:4px;width:16px;}\r
-.listeTimereport th .spacer{float:left;}\r
-.listeTimereport .normal{text-align:left;vertical-align:middle;padding-left:10px;padding-right:10px;width:auto;}\r
-.listeTimereport .info{width:30px;}\r
-.listeTimereport tr.bold td{border-top:1px solid #4e555c;}\r
-\r
-#devisTop{background:url(../images/devis.png) top left;width:960px;height:500px;}\r
-#devisMiddle{background:url(bg-document.png);width:960px;padding-bottom:20px;}\r
-#devisBottom{background:url(../images/devis.png) bottom left;width:960px;height:300px;}\r
-#factureAdresse,#devisAdresse{position:absolute;top:180px;left:520px;height:165px;width:360px;padding:0px;}\r
-#factureAdresse input[type="text"],#devisAdresse input[type="text"]{width:100%;}\r
-#factureAdresseDisplay,#devisAdresseDisplay{font-size:20px;padding:20px;position:relative;min-height:150px;}\r
-#factureAdresseDisplay .tva{font-size:12px;}\r
-#factureAdresse .edit,#devisAdresse .edit{position:absolute;top:20px;right:20px;}\r
-#devisTitre{position:absolute;left:56px;top:231px;width:411px;height:184px;}\r
-#devisLignes{padding-top:20px;}\r
-.devisLigne{border:1px #9aa2ae dashed;cursor:move;margin-top:20px;margin-left:20px;margin-right:20px;}\r
-.devisLigneLeft{width:700px;padding:20px;}\r
-.devisLigneRight{width:120px;float:right;text-align:center;padding:20px;}\r
-\r
-#devisMail{padding:30px;margin-top:30px;border-top:2px solid #000;}\r
-#devisMail td{color:#000 !important;}\r
+.liste {\r
+       width: 100% !important;\r
+       min-width: 960px;\r
+}\r
+\r
+.liste.light {\r
+       width: 100% !important;\r
+       min-width: 0px !important;\r
+}\r
+\r
+.liste.form {\r
+       width: auto !important;\r
+       min-width: 0px !important;\r
+}\r
+\r
+.form h2, .form th, .form td, .liste th, .liste td {\r
+       text-align: left;\r
+       border-bottom: 1px solid #fff;\r
+       font-weight: normal;\r
+       padding-left: 10px;\r
+       padding-right: 10px;\r
+       font-size: 12px;\r
+       min-height: 50px;\r
+       height: 38px;\r
+}\r
+\r
+.form th, .liste th, .liste h1 {\r
+       font-size: 12px;\r
+       height: 31px;\r
+       font-weight: bold;\r
+       vertical-align: middle;\r
+       background: #fff;\r
+       padding-left: 10px;\r
+}\r
+\r
+.form tr.big th {\r
+       height: 40px;\r
+}\r
+\r
+.form h2 {\r
+       padding-top: 6px;\r
+       height: 26px;\r
+}\r
+\r
+.form td {\r
+       background: #fff;\r
+}\r
+\r
+.form h2, .liste td {\r
+       background: #eaeaea;\r
+       vertical-align: middle;\r
+}\r
+\r
+.form tr.odd td, .liste tr.odd td {\r
+       background: #f4f4f4;\r
+}\r
+\r
+.liste td.bouton {\r
+       padding-left: 0px;\r
+       padding-right: 5px;\r
+}\r
+\r
+.form tr.light th, .liste tr.light th {\r
+       font-size: 12px;\r
+       background: #fff;\r
+       height: 22px;\r
+       border-bottom: 1px solid #707070;\r
+       margin-bottom: 1px;\r
+       padding-left: 3px;\r
+}\r
+\r
+.liste tr.bold td {\r
+       font-weight: bold;\r
+}\r
+\r
+.liste td.we {\r
+       background: #e3e3e3 !important;\r
+}\r
+\r
+.liste td.filled, .liste td.highlight, .liste th.highlight {\r
+       background: #9abf0c !important;\r
+}\r
+\r
+.liste .action {\r
+       width: 1px;\r
+}\r
+\r
+.liste th a {\r
+       color: #797D62;\r
+       text-decoration: none;\r
+       font-weight: bold;\r
+}\r
+\r
+.liste th a:hover {\r
+       text-decoration: underline;\r
+}\r
+\r
+.liste td a.icon img {\r
+       vertical-align: middle;\r
+       margin-top: 0px;\r
+}\r
+\r
+.form td a img, .liste td a img {\r
+       margin-top: 4px;\r
+}\r
+\r
+.listeTimereport input[type="text"] {\r
+       width: 12px;\r
+       text-align: center;\r
+       font-size: 10px;\r
+       margin: 2px;\r
+}\r
+\r
+.listeTimereport td, .listeTimereport th {\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       width: 16px;\r
+}\r
+\r
+.listeTimereport th .spacer {\r
+       float: left;\r
+}\r
+\r
+.listeTimereport .normal {\r
+       text-align: left;\r
+       vertical-align: middle;\r
+       padding-left: 10px;\r
+       padding-right: 10px;\r
+       width: auto;\r
+}\r
+\r
+.listeTimereport .info {\r
+       width: 30px;\r
+}\r
+\r
+.listeTimereport tr.bold td {\r
+       border-top: 1px solid #4e555c;\r
+}\r
+\r
+#devisTop {\r
+       background: url(../images/devis.png) top left;\r
+       width: 960px;\r
+       height: 500px;\r
+}\r
+\r
+#devisMiddle {\r
+       background: url(bg-document.png);\r
+       width: 960px;\r
+       padding-bottom: 20px;\r
+}\r
+\r
+#devisBottom {\r
+       background: url(../images/devis.png) bottom left;\r
+       width: 960px;\r
+       height: 300px;\r
+}\r
+\r
+#factureAdresse, #devisAdresse {\r
+       position: absolute;\r
+       top: 180px;\r
+       left: 520px;\r
+       height: 165px;\r
+       width: 360px;\r
+       padding: 0px;\r
+}\r
+\r
+#factureAdresse input[type="text"], #devisAdresse input[type="text"] {\r
+       width: 100%;\r
+}\r
+\r
+#factureAdresseDisplay, #devisAdresseDisplay {\r
+       font-size: 20px;\r
+       padding: 20px;\r
+       position: relative;\r
+       min-height: 150px;\r
+}\r
+\r
+#factureAdresseDisplay .tva {\r
+       font-size: 12px;\r
+}\r
+\r
+#factureAdresse .edit, #devisAdresse .edit {\r
+       position: absolute;\r
+       top: 20px;\r
+       right: 20px;\r
+}\r
+\r
+#devisTitre {\r
+       position: absolute;\r
+       left: 56px;\r
+       top: 231px;\r
+       width: 411px;\r
+       height: 184px;\r
+}\r
+\r
+#devisLignes {\r
+       padding-top: 20px;\r
+}\r
+\r
+.devisLigne {\r
+       border: 1px #9aa2ae dashed;\r
+       cursor: move;\r
+       margin-top: 20px;\r
+       margin-left: 20px;\r
+       margin-right: 20px;\r
+}\r
+\r
+.devisLigneLeft {\r
+       width: 700px;\r
+       padding: 20px;\r
+}\r
+\r
+.devisLigneRight {\r
+       width: 120px;\r
+       float: right;\r
+       text-align: center;\r
+       padding: 20px;\r
+}\r
+\r
+#devisMail {\r
+       padding: 30px;\r
+       margin-top: 30px;\r
+       border-top: 2px solid #000;\r
+}\r
+\r
+#devisMail td {\r
+       color: #000 !important;\r
+}\r
 \r
 /* Pagers */\r
 \r
-.pager-holder{\r
-       padding:10px;\r
-       padding-bottom:0px;\r
-       float:none;\r
+.pager-holder {\r
+       padding: 10px;\r
+       padding-bottom: 0px;\r
+       float: none;\r
+}\r
+\r
+.pager {\r
+       text-align: center;\r
+}\r
+\r
+.pager a, .pager strong {\r
+       padding: 2px;\r
+       height: 10px;\r
+       font-weight: bold;\r
 }\r
-.pager{\r
-       text-align:center;\r
+\r
+.pager a {\r
+       text-decoration: none;\r
 }\r
-.pager a, .pager strong{\r
-       padding:2px;\r
-       height:10px;\r
-       font-weight:bold;\r
+\r
+.pager a:hover {\r
+       text-decoration: none;\r
 }\r
-.pager a{text-decoration:none;}\r
-.pager a:hover{text-decoration:none;}\r
 \r
 /* Pager Left */\r
-.pager.pgleft a{\r
-       background:transparent;\r
-       border:1px solid #9abf0c;\r
-       color:#9abf0c;\r
+.pager.pgleft a {\r
+       background: transparent;\r
+       border: 1px solid #9abf0c;\r
+       color: #9abf0c;\r
 }\r
+\r
 .pager.pgleft a:hover,\r
-.pager.pgleft strong{\r
-       background:#cce56c url(pager-left-active.png) repeat-x bottom left;\r
-       border:1px solid #9abf0c;\r
-       color:#797d62;\r
+.pager.pgleft strong {\r
+       background: #cce56c url(pager-left-active.png) repeat-x bottom left;\r
+       border: 1px solid #9abf0c;\r
+       color: #797d62;\r
 }\r
 \r
-.formParPage{\r
-       padding:5px;\r
-       float:right;\r
+.formParPage {\r
+       padding: 5px;\r
+       float: right;\r
 }\r
 \r
-\r
 /* Barre de raccourcis */\r
-#bar{\r
-       background:url(bg-bar.png) repeat-x #fff bottom left;\r
+#bar {\r
+       background: url(bg-bar.png) repeat-x #fff bottom left;\r
+}\r
+\r
+#bar.vide {\r
+       height: 16px;\r
+       background: url(bg-bar-vide.png) repeat-x #fff bottom left;\r
+}\r
+\r
+#bar .content {\r
+       height: 60px;\r
 }\r
 \r
-#bar.vide{\r
-       height:16px;\r
-       background:url(bg-bar-vide.png) repeat-x #fff bottom left;\r
+.shortcut .note {\r
+       color: #333;\r
+       padding: 10px;\r
 }\r
 \r
-#bar .content{\r
-       height:60px;\r
+.shortcut {\r
+       float: left;\r
+       margin-left: 5px;\r
+       margin-top: 3px;\r
 }\r
 \r
-.shortcut .note{color:#333;padding:10px;}\r
-.shortcut{float:left;margin-left:5px;margin-top:3px;}\r
-.shortcut .step{margin-top:5px;}\r
+.shortcut .step {\r
+       margin-top: 5px;\r
+}\r
 \r
-.shortcut .label{\r
-       margin:15px 20px 0 5px;\r
+.shortcut .label {\r
+       margin: 15px 20px 0 5px;\r
        font-size: 16px;\r
-       font-family:UniversCondensedBold;\r
+       font-family: UniversCondensedBold;\r
        text-transform: uppercase;\r
 }\r
 \r
 /* Filtres */\r
-.filtre{\r
-       color:#5f6162;\r
-       width:160px;\r
-       float:left;\r
-       margin-left:10px;\r
-       padding-top:1px;\r
-       position:relative;\r
-}\r
-.filtre span{\r
-       font-size:9px;\r
-       color:#5f6162;\r
-       margin-left:5px;\r
-       cursor:pointer;\r
-}\r
-.filtre .bt{\r
-       position:absolute;\r
-       top:2px;\r
-       right:3px;\r
-       width:155px;\r
-       height:18px;\r
-}\r
-.filtre .input{\r
-       width:135px;\r
-       height:23px;\r
-       background-image:url(filtres.png);\r
-       background-repeat:no-repeat;\r
-       padding:5px;\r
-       padding-right:20px;\r
-       margin-left:5px;\r
-       position:relative;\r
-}\r
-.filtre .input.active{\r
-       font-weight:bold;\r
-}\r
-.filtre a{\r
-       color:#5f6162;\r
-       text-decoration:none;\r
-       height:23px;\r
-}\r
-\r
-.filtre ul{\r
-       display:none;\r
-       position:absolute;\r
-       top:36px;\r
-       left:5px;\r
-       z-index:20;\r
-       width:160px;\r
-       cursor:pointer;\r
-}\r
-\r
-.filtre .input span{\r
-       font-size:12px;\r
-}\r
-.filtre ul li.first{\r
-       padding-top:2px;\r
-}\r
-.filtre ul li{\r
-       list-style-type:none;\r
-       padding-left:20px;\r
-       background-image:url(filtre-list-m.png);\r
-}\r
-.filtre ul li.last{\r
-       background-image:url(filtre-list-b.png);\r
-       background-position:0 100%;\r
-       padding-bottom:5px;\r
-}\r
-.filtre ul li.all{\r
-       display:none;\r
-}\r
-.efface_filtres{padding-right:20px;padding-top:10px;float:right;}\r
+.filtre {\r
+       color: #5f6162;\r
+       width: 160px;\r
+       float: left;\r
+       margin-left: 10px;\r
+       padding-top: 1px;\r
+       position: relative;\r
+}\r
+\r
+.filtre span {\r
+       font-size: 9px;\r
+       color: #5f6162;\r
+       margin-left: 5px;\r
+       cursor: pointer;\r
+}\r
+\r
+.filtre .bt {\r
+       position: absolute;\r
+       top: 2px;\r
+       right: 3px;\r
+       width: 155px;\r
+       height: 18px;\r
+}\r
+\r
+.filtre .input {\r
+       width: 135px;\r
+       height: 23px;\r
+       background-image: url(filtres.png);\r
+       background-repeat: no-repeat;\r
+       padding: 5px;\r
+       padding-right: 20px;\r
+       margin-left: 5px;\r
+       position: relative;\r
+}\r
+\r
+.filtre .input.active {\r
+       font-weight: bold;\r
+}\r
+\r
+.filtre a {\r
+       color: #5f6162;\r
+       text-decoration: none;\r
+       height: 23px;\r
+}\r
+\r
+.filtre ul {\r
+       display: none;\r
+       position: absolute;\r
+       top: 36px;\r
+       left: 5px;\r
+       z-index: 20;\r
+       width: 160px;\r
+       cursor: pointer;\r
+}\r
+\r
+.filtre .input span {\r
+       font-size: 12px;\r
+}\r
+\r
+.filtre ul li.first {\r
+       padding-top: 2px;\r
+}\r
+\r
+.filtre ul li {\r
+       list-style-type: none;\r
+       padding-left: 20px;\r
+       background-image: url(filtre-list-m.png);\r
+}\r
+\r
+.filtre ul li.last {\r
+       background-image: url(filtre-list-b.png);\r
+       background-position: 0 100%;\r
+       padding-bottom: 5px;\r
+}\r
+\r
+.filtre ul li.all {\r
+       display: none;\r
+}\r
+\r
+.efface_filtres {\r
+       padding-right: 20px;\r
+       padding-top: 10px;\r
+       float: right;\r
+}\r
 \r
 /* Dashboard */\r
-.dashboard{\r
-       position:relative;\r
-       margin-bottom:10px;\r
+.dashboard {\r
+       position: relative;\r
+       margin-bottom: 10px;\r
 }\r
-.dashboard .caption{\r
-       position:relative;\r
-       left:20px;\r
-       display:inline;\r
-       cursor:move;\r
+\r
+.dashboard .caption {\r
+       position: relative;\r
+       left: 20px;\r
+       display: inline;\r
+       cursor: move;\r
 }\r
 \r
-.dashboard .edit{\r
-       position:absolute;\r
-       right:40px;\r
-       top:-17px;\r
+.dashboard .edit {\r
+       position: absolute;\r
+       right: 40px;\r
+       top: -17px;\r
 }\r
 \r
-.dashboard .delete{\r
-       position:absolute;\r
-       right:10px;\r
-       top:-17px;\r
+.dashboard .delete {\r
+       position: absolute;\r
+       right: 10px;\r
+       top: -17px;\r
 }\r
 \r
-.dashboard .toggle{\r
-       position:absolute;\r
-       left:12px;\r
-       top:-10px;\r
-       background-image:url(arrows.png);\r
-       background-position:0 0;\r
-       width:18px;\r
-       height:10px;\r
+.dashboard .toggle {\r
+       position: absolute;\r
+       left: 12px;\r
+       top: -10px;\r
+       background-image: url(arrows.png);\r
+       background-position: 0 0;\r
+       width: 18px;\r
+       height: 10px;\r
 }\r
 \r
-.dashboard .toggle.close{\r
-       background-position:0 100%;\r
+.dashboard .toggle.close {\r
+       background-position: 0 100%;\r
 }\r
 \r
-.dashboard div.close .liste{\r
-       display:none;\r
+.dashboard div.close .liste {\r
+       display: none;\r
 }\r
 \r
-.dashboard .b-c{\r
-       width:960px !important;\r
-       height:auto !important;\r
+.dashboard .b-c {\r
+       width: 960px !important;\r
+       height: auto !important;\r
 }\r
 \r
 /* Menu Contextuel */\r
-.contextMenu{border:1px solid #000;float:left;position:absolute;display:none;z-index:100000;}\r
-.contextMenu li a{\r
-       border-bottom:1px solid #ccc;\r
-       padding:12px;\r
-       padding-left:20px;\r
-       padding-right:20px;\r
-       background:#fff;\r
-       min-height:12px;\r
-       text-decoration:none;\r
-       display:inline-block;\r
-}\r
-.contextMenu li a:hover{background:#ccc;}\r
-.contextMenu li img{margin:5px;margin-right:7px;vertical-align:middle;float:none;}\r
-.contextMenu li.head{background:#666b74;font-weight:bold;color:#fff;text-align:center;border-bottom:1px solid #000;}\r
+.contextMenu {\r
+       border: 1px solid #000;\r
+       float: left;\r
+       position: absolute;\r
+       display: none;\r
+       z-index: 100000;\r
+}\r
+\r
+.contextMenu li.disabled a {\r
+       color: #ccc;\r
+       text-decoration: line-through;\r
+}\r
+\r
+.contextMenu li.disabled a:hover {\r
+       color: #fff;\r
+       text-decoration: line-through;\r
+}\r
+\r
+.contextMenu li a {\r
+       border-bottom: 1px solid #ccc;\r
+       padding: 12px;\r
+       padding-left: 20px;\r
+       padding-right: 20px;\r
+       background: #fff;\r
+       min-height: 12px;\r
+       text-decoration: none;\r
+       display: inline-block;\r
+}\r
+\r
+.contextMenu li a:hover {\r
+       background: #ccc;\r
+}\r
+\r
+.contextMenu li img {\r
+       margin: 5px;\r
+       margin-right: 7px;\r
+       vertical-align: middle;\r
+       float: none;\r
+}\r
+\r
+.contextMenu li.head {\r
+       background: #666b74;\r
+       font-weight: bold;\r
+       color: #fff;\r
+       text-align: center;\r
+       border-bottom: 1px solid #000;\r
+}\r
 \r
 /* Autocomplete */\r
-.ac_results{\r
-       background:#fff;\r
-       border:1px solid #acacac;\r
-       color:#666;\r
-       padding:2px;\r
-       z-index:100000 !important;\r
+.ac_results {\r
+       background: #fff;\r
+       border: 1px solid #acacac;\r
+       color: #666;\r
+       padding: 2px;\r
+       z-index: 100000 !important;\r
 }\r
 \r
-.ac_results li{\r
-       cursor:pointer;\r
-       padding:2px;\r
-       margin:1px;\r
-       list-style-type:none;\r
+.ac_results li {\r
+       cursor: pointer;\r
+       padding: 2px;\r
+       margin: 1px;\r
+       list-style-type: none;\r
 }\r
 \r
-.ac_results li:hover, .ac_over{\r
-       background:#4e535e;\r
-       color:#fff;\r
+.ac_results li:hover, .ac_over {\r
+       background: #4e535e;\r
+       color: #fff;\r
 }\r
 \r
-.ac_results iframe{\r
-       display:none;\r
+.ac_results iframe {\r
+       display: none;\r
 }\r
 \r
 /* Traduction */\r
-#traduction div table td{padding:5px;background:#dbdde2;color:#333;vertical-align:top;}\r
-#traduction div table .odd td{background:#ecedf0;}\r
-#traduction div table .save td{background-color:#4e535b;background-image:url(b-h.png);background-repeat:repeat-x;}\r
+#traduction div table td {\r
+       padding: 5px;\r
+       background: #dbdde2;\r
+       color: #333;\r
+       vertical-align: top;\r
+}\r
+\r
+#traduction div table .odd td {\r
+       background: #ecedf0;\r
+}\r
+\r
+#traduction div table .save td {\r
+       background-color: #4e535b;\r
+       background-image: url(b-h.png);\r
+       background-repeat: repeat-x;\r
+}\r
 \r
 /* Erreur */\r
-.error{border:1px solid #f00;}\r
+.error {\r
+       border: 1px solid #f00;\r
+}\r
 \r
-#uploaderContainer{width:970px;height:50px;}\r
+#uploaderContainer {\r
+       width: 970px;\r
+       height: 50px;\r
+}\r
 \r
-.gris{background-color:#ecedf0;}\r
+.gris {\r
+       background-color: #ecedf0;\r
+}\r
 \r
-#listeBooks{width:100%;height:auto;}\r
+#listeBooks {\r
+       width: 100%;\r
+       height: auto;\r
+}\r
 \r
 /* Stats */\r
-.graphStats table{\r
-       width:auto !important;\r
+.graphStats table {\r
+       width: auto !important;\r
 }\r
-.graphStats td,.graphStats th{\r
-       padding:0px;\r
-       background:none transparent;\r
-       height:auto;\r
+\r
+.graphStats td, .graphStats th {\r
+       padding: 0px;\r
+       background: none transparent;\r
+       height: auto;\r
 }\r
-.graphStats .echelle td{\r
-       text-align:center;\r
+\r
+.graphStats .echelle td {\r
+       text-align: center;\r
 }\r
 \r
-.graphStats .graph-note{\r
-       position:absolute;\r
-       left:900px;\r
-       color:#f54d00;\r
-       padding-left:2px;\r
-       padding-right:2px;\r
-       background:#fff;\r
+.graphStats .graph-note {\r
+       position: absolute;\r
+       left: 900px;\r
+       color: #f54d00;\r
+       padding-left: 2px;\r
+       padding-right: 2px;\r
+       background: #fff;\r
 }\r
 \r
-.graphStats .legende{\r
-       margin-top:10px;\r
-       margin-bottom:10px;\r
+.graphStats .legende {\r
+       margin-top: 10px;\r
+       margin-bottom: 10px;\r
 }\r
 \r
-.graphStats .legende td{\r
-       margin-top:10px;\r
-       margin-bottom:10px;\r
+.graphStats .legende td {\r
+       margin-top: 10px;\r
+       margin-bottom: 10px;\r
 }\r
 \r
-.graphStats .graph-container{\r
-       width:944px;\r
-       height:306px;\r
+.graphStats .graph-container {\r
+       width: 944px;\r
+       height: 306px;\r
 }\r
 \r
-th.stats_col,td.stats_col{\r
-       text-align:center;\r
+th.stats_col, td.stats_col {\r
+       text-align: center;\r
 }\r
 \r
-th.stats_col{\r
-       width:130px;\r
+th.stats_col {\r
+       width: 130px;\r
 }\r
-.stats_col.max{\r
-       width:600px;\r
-       text-align:left;\r
+\r
+.stats_col.max {\r
+       width: 600px;\r
+       text-align: left;\r
 }\r
 \r
-.stats_links .liste,.stats_country .liste,.stats_search .liste{\r
-       min-width:315px;width:315px;max-width: 315px;max-height:400px;\r
+.stats_links .liste, .stats_country .liste, .stats_search .liste {\r
+       min-width: 315px;\r
+       width: 315px;\r
+       max-width: 315px;\r
+       max-height: 400px;\r
 }\r
 \r
-.stats_links,.stats_country,.stats_search{\r
-       float:left;\r
-       margin-left:0px;\r
+.stats_links, .stats_country, .stats_search {\r
+       float: left;\r
+       margin-left: 0px;\r
 }\r
 \r
-.stats_country,.stats_search{\r
-       margin-left:13px;\r
+.stats_country, .stats_search {\r
+       margin-left: 13px;\r
 }\r
 \r
 /* Download book contextMenu */\r
-.downbookContextMenu li{\r
-       height:auto;\r
+.downbookContextMenu li {\r
+       height: auto;\r
 }\r
 \r
-.downbookContextMenu a{\r
-       text-decoration:none;\r
+.downbookContextMenu a {\r
+       text-decoration: none;\r
 }\r
 \r
-.onglet:hover, .onglet.active{\r
-       color:#797D62;\r
+.onglet:hover, .onglet.active {\r
+       color: #797D62;\r
 }\r
 \r
-#accepteDemandes{\r
-       padding:10px;\r
+#accepteDemandes {\r
+       padding: 10px;\r
 }\r
 \r
-#restoreLinks{\r
-       margin:10px;\r
+#restoreLinks {\r
+       margin: 10px;\r
 }\r
 \r
-#restoreLinks hr{\r
-       margin:10px 0;\r
+#restoreLinks hr {\r
+       margin: 10px 0;\r
 }\r
 \r
-#restoreLinks h2{\r
-       margin:5px 0 10px 0;\r
+#restoreLinks h2 {\r
+       margin: 5px 0 10px 0;\r
 }\r
 \r
-a.btbook{\r
-       display:inline-block;\r
-       height:16px;\r
-       padding:2px 6px 2px 2px;\r
-       border:1px solid #fff;\r
-       border-radius:5px;\r
-       background-color: rgb(251,251,251);\r
+a.btbook {\r
+       display: inline-block;\r
+       height: 16px;\r
+       padding: 2px 6px 2px 2px;\r
+       border: 1px solid #fff;\r
+       border-radius: 5px;\r
+       background-color: rgb(251, 251, 251);\r
        background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSI2OCUiIHN0b3AtY29sb3I9IiNmYmZiZmIiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZTVlNmU2IiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==");\r
-       background-image: -moz-linear-gradient(top, rgba(251,251,251,1) 68%, rgba(229,230,230,1) 100%);\r
-       background-image: -webkit-gradient(linear, left top, left bottom, color-stop(68%,rgba(251,251,251,1)), color-stop(100%,rgba(229,230,230,1)));\r
-       background-image: -webkit-linear-gradient(top, rgba(251,251,251,1) 68%,rgba(229,230,230,1) 100%);\r
-       background-image: -o-linear-gradient(top, rgba(251,251,251,1) 68%,rgba(229,230,230,1) 100%);\r
-       background-image: -ms-linear-gradient(top, rgba(251,251,251,1) 68%,rgba(229,230,230,1) 100%);\r
-       background-image: linear-gradient(to bottom, rgba(251,251,251,1) 68%,rgba(229,230,230,1) 100%);\r
+       background-image: -moz-linear-gradient(top, rgba(251, 251, 251, 1) 68%, rgba(229, 230, 230, 1) 100%);\r
+       background-image: -webkit-gradient(linear, left top, left bottom, color-stop(68%, rgba(251, 251, 251, 1)), color-stop(100%, rgba(229, 230, 230, 1)));\r
+       background-image: -webkit-linear-gradient(top, rgba(251, 251, 251, 1) 68%, rgba(229, 230, 230, 1) 100%);\r
+       background-image: -o-linear-gradient(top, rgba(251, 251, 251, 1) 68%, rgba(229, 230, 230, 1) 100%);\r
+       background-image: -ms-linear-gradient(top, rgba(251, 251, 251, 1) 68%, rgba(229, 230, 230, 1) 100%);\r
+       background-image: linear-gradient(to bottom, rgba(251, 251, 251, 1) 68%, rgba(229, 230, 230, 1) 100%);\r
        line-height: 16px;\r
-       font-size:13px;\r
-       color:#b1b5a0;\r
+       font-size: 13px;\r
+       color: #b1b5a0;\r
        font-family: UniversCondensedBold;\r
        text-decoration: none;\r
        text-transform: uppercase;\r
        white-space: nowrap;\r
 \r
-\r
-       -moz-box-shadow: 0px 0px 2px rgba(0,0,0,0.25);\r
-       -webkit-box-shadow: 0px 0px 2px rgba(0,0,0,0.25);\r
-       -ms-box-shadow: 0px 0px 2px rgba(0,0,0,0.25);\r
-       -o-box-shadow: 0px 0px 2px rgba(0,0,0,0.25);\r
-       box-shadow: 0px 0px 2px rgba(0,0,0,0.25);\r
+       -moz-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25);\r
+       -webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25);\r
+       -ms-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25);\r
+       -o-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25);\r
+       box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25);\r
 }\r
 \r
-a.btbook>div{\r
-       display:inline-block;\r
-       width:16px;\r
-       height:16px !important;\r
+a.btbook > div {\r
+       display: inline-block;\r
+       width: 16px;\r
+       height: 16px !important;\r
        background-position: 0 0;\r
 }\r
 \r
-a.btbook>span{\r
-       display:inline-block;\r
+a.btbook > span {\r
+       display: inline-block;\r
        vertical-align: top;\r
-       margin:0 0 0 5px;\r
+       margin: 0 0 0 5px;\r
 }\r
 \r
-a.btbook:hover>div{\r
+a.btbook:hover > div {\r
        background-position: 0 100%;\r
 }\r
 \r
-a.btbook.suppr>div{\r
+a.btbook.suppr > div {\r
        background-image: url("../../images/ws/btdel.png");\r
 }\r
 \r
-a.btbook.voir>div{\r
+a.btbook.voir > div {\r
        background-image: url("../../images/ws/btview.png");\r
 }\r
 \r
-a.btbook.download>div{\r
+a.btbook.download > div {\r
        background-image: url("../../images/ws/btdownload.png");\r
 }\r
 \r
-a.btbook.stats>div{\r
+a.btbook.stats > div {\r
        background-image: url("../../images/ws/btstats.png");\r
 }\r
-a.btbook.edit>div{\r
+\r
+a.btbook.edit > div {\r
        background-image: url("../../images/ws/btedit.png");\r
 }\r
 \r
-\r
-\r
-\r
 /* Page tree */\r
 \r
-#collection{\r
-       padding:5px;\r
+#collection {\r
+       padding: 5px;\r
+}\r
+\r
+#collection td.pad {\r
+       padding: 15px 0;\r
 }\r
 \r
-#collection td.pad{\r
-       padding:15px 0; \r
+#collection .min.nowrap {\r
+       padding: 0 15px 0 0;\r
 }\r
 \r
-#collection .min.nowrap{\r
-       padding:0 15px 0 0;\r
+#collection h1 {\r
+       margin: 5px 0 10px;\r
+       padding: 0;\r
 }\r
 \r
-#collection h1{\r
-       margin:5px 0 10px;\r
-       padding:0;\r
+#collection .group.empty {\r
+       display: none;\r
 }\r
 \r
-#collection .group.empty{\r
-       display:none;\r
+#collection .g {\r
+       padding: 2px 6px;\r
 }\r
 \r
-#collection .g{\r
-       padding:2px 6px;\r
+#collection h3 {\r
+       margin: 10px 0 10px 0 !important;\r
+       border-top: 2px solid #BEBFB1;\r
+       padding: 10px 0 0 0;\r
 }\r
 \r
-#collection h3{margin:10px 0 10px 0 !important;border-top:2px solid #BEBFB1;padding:10px 0 0 0;}\r
 #collection .group,\r
-#collection .publication{\r
-       padding:5px;border:1px solid #ccc;margin:2px 0;background-color:#eee;\r
+#collection .publication {\r
+       padding: 5px;\r
+       border: 1px solid #ccc;\r
+       margin: 2px 0;\r
+       background-color: #eee;\r
 }\r
 \r
-#collection .publication{\r
-       background-color:#fff;\r
+#collection .publication {\r
+       background-color: #fff;\r
 }\r
 \r
-#collection ul{\r
+#collection ul {\r
        list-style: none;\r
 }\r
 \r
-#collection div{\r
-       height:20px;\r
+#collection div {\r
+       height: 20px;\r
 }\r
 \r
 #collection div span,\r
-#collection div a{\r
-       display:block;\r
-       height:16px;\r
-       float:left;\r
+#collection div a {\r
+       display: block;\r
+       height: 16px;\r
+       float: left;\r
 }\r
 \r
 #collection div .move,\r
 #collection div .add,\r
-#collection div .delete\r
-{\r
-       width:16px;\r
+#collection div .delete {\r
+       width: 16px;\r
 }\r
 \r
+#collection div img {\r
+       vertical-align: bottom;\r
+}\r
 \r
-#collection div img{vertical-align:bottom;}\r
-#collection div .move{margin-right:10px;background-image: url("/images/ws/tango16/actions/mail-send-receive.png")}\r
-#collection div .add{float:right;margin-right:10px;background-image: url("/images/ws/tango16/actions/list-add.png")}\r
-#collection div .online{float:right;margin-right:10px;}\r
-#collection div .online .checkbox{\r
-       background-image:url("/CubeIT/images/online-offline.png");\r
+#collection div .move {\r
+       margin-right: 10px;\r
+       background-image: url("/images/ws/tango16/actions/mail-send-receive.png")\r
+}\r
+\r
+#collection div .add {\r
+       float: right;\r
+       margin-right: 10px;\r
+       background-image: url("/images/ws/tango16/actions/list-add.png")\r
+}\r
+\r
+#collection div .online {\r
+       float: right;\r
+       margin-right: 10px;\r
+}\r
+\r
+#collection div .online .checkbox {\r
+       background-image: url("/CubeIT/images/online-offline.png");\r
        background-repeat: no-repeat;\r
        background-position: 0 100%;\r
-       width:16px;\r
-       height:16px;\r
-       cursor:pointer;\r
+       width: 16px;\r
+       height: 16px;\r
+       cursor: pointer;\r
 }\r
-#collection div .online .checkbox[checked]{\r
+\r
+#collection div .online .checkbox[checked] {\r
        background-position: 0 0;\r
 }\r
 \r
-#collection div .delete{float:right;margin-right:10px;background-image: url("/images/ws/tango16/actions/list-remove.png")}\r
-#collection div .id{font-weight:bold;margin-right:10px;}\r
-#collection div .name{margin-right:10px;}\r
+#collection div .delete {\r
+       float: right;\r
+       margin-right: 10px;\r
+       background-image: url("/images/ws/tango16/actions/list-remove.png")\r
+}\r
+\r
+#collection div .id {\r
+       font-weight: bold;\r
+       margin-right: 10px;\r
+}\r
+\r
+#collection div .name {\r
+       margin-right: 10px;\r
+}\r
 \r
 #collection input,\r
-#collection select{\r
-       width:auto;\r
+#collection select {\r
+       width: auto;\r
 }\r
 \r
-#collection .submit{\r
-       float:right;\r
+#collection .submit {\r
+       float: right;\r
 }\r
 \r
-.b{\r
+.b {\r
 \r
        -moz-box-shadow: none;\r
        -ms-box-shadow: none;\r