window.open('index.html#/' + page, 'fbpopupfs_' + date, 'width=' + screen.width + ',height=' + screen.height + ',resizable=yes');\r
}\r
\r
-function popupFocus(url,target){\r
- var opened=window.open(url,target,'width=' + screen.width + ',height=' + screen.height + ',resizable=yes'); \r
+function popupFocus(url, target) {\r
+ var opened = window.open(url, target, 'width=' + screen.width + ',height=' + screen.height + ',resizable=yes');\r
opened.focus();\r
}\r
\r
}\r
function handleWheel(delta) {\r
try {\r
+ fb(delta);\r
document.getElementById('fluidbook').mouseWheel(delta);\r
} catch (e) {\r
\r
pageNr = pnr;\r
}\r
}\r
- \r
- var page='';\r
- if(pageNr>0){\r
- page='#/page/'+pageNr;\r
+\r
+ var page = '';\r
+ if (pageNr > 0) {\r
+ page = '#/page/' + pageNr;\r
}\r
\r
window.location = 'm/' + html + page;\r
}\r
\r
+function fb(e) {\r
+ try {\r
+ console.log(e);\r
+ } catch (err) {\r
+\r
+ }\r
+}\r
+\r
\r
function wheel(event) {\r
var delta = 0;\r
$db->books->dir_phonegap_android('varchar', 256, false);\r
$db->books->dir_external('varchar', 256, false);\r
$db->books->lucene_time('integer', 0, false);\r
+ $db->books->demo_counter('integer', 0, false);\r
// Clés\r
$db->books->primary('pk_books', 'book_id');\r
$db->books->index('index_books_nom', 'BTREE', 'nom');\r
$db->books->index('index_books_tache', 'BTREE', 'tache');\r
$db->books->index('index_books_status', 'BTREE', 'status');\r
$db->books->index('index_books_theme', 'BTREE', 'theme');\r
+ $db->books->index('index_books_demo_counter', 'BTREE', 'demo_counter');\r
$db->books->index('index_books_lang', 'BTREE', 'lang');\r
// .\r
// Table pages des publications\r
$args = cubePage::getArgs($args);\r
// Si l'utilisateur n'est pas connecté, on affiche le formulaire\r
// de login\r
- \r
- $bypass=array('stats','telecharger','telechargerr');\r
- \r
- if ((!isset($args[0]) || !in_array($args[0],$bypass)) && (is_null($core->user) || !$core->user)) {\r
+\r
+ $bypass = array('stats', 'telecharger', 'telechargerr');\r
+\r
+ if ((!isset($args[0]) || !in_array($args[0], $bypass)) && (is_null($core->user) || !$core->user)) {\r
$args = array('login');\r
} else {\r
if (isset($args[0]) && $args[0] == 'login') {\r
return $res;\r
}\r
\r
- public static function orderby($label, $field, $settings, $function) {\r
- $res = '<a href="#" class="ajax" rel="' . $function . '/' . $field . '">';\r
+ public static function orderby($label, $field, $settings, $function, $title = '') {\r
+ $res = '<a href="#" class="nowrap ajax" title="' . $title . '" rel="' . $function . '/' . $field . '">';\r
$res .= $label;\r
if ($settings['orderby'] == $field) {\r
$puce = ($settings['sens'] == 'DESC') ? 'down' : 'up';\r
$res .= '<th>' . commonUrl::orderby(__('Date'), 'date', $settings, 'sort' . $change) . '</th>';\r
$res .= '<th>' . commonUrl::orderby(__(''), 'lang', $settings, 'sort' . $change) . '</th>';\r
$res .= '<th>' . __('Pages') . '</th>';\r
+ if ($droits->admin) {\r
+ $res .= '<th>' . commonUrl::orderby('C', 'demo_counter', $settings, 'sort' . $change, __('Compteur de démos')) . '</th>';\r
+ }\r
if ($droits->revendeur) {\r
$res .= '<th>' . commonUrl::orderby(__('Proprietaire'), 'proprietaire_nom', $settings, 'sort' . $change) . '</th>';\r
} else {\r
$res .= '<td>' . date('Y-m-d', $book->date) . '</td>';\r
$res .= '<td>' . mb_strtoupper($book->lang) . '</td>';\r
$res .= '<td>' . $book->parametres->pages . '</td>';\r
+ if ($droits->revendeur) {\r
+ $res.='<td>' . $book->demo_counter . '</td>';\r
+ }\r
\r
if ($droits->revendeur) {\r
$p = str_replace(" (", '<br /><em>', html::escapeHTML($book->proprietaire));\r
}\r
if ($book->version > 1 || $droits->admin) {\r
if ($droits->admin) {\r
- $res .= '<td class="bouton"><a href="#" class="openContextMenu" rel="' . $context_view_id . '" rev="' . $book->book_id . '§' . $book->hash . '§' . TIME . '">' . $btVoir . '</a></td>';\r
+ $res .= '<td class="bouton"><a href="/viewer/' . $book->book_id . '_' . $book->hash . '/" class="openContextMenu" rel="' . $context_view_id . '" rev="' . $book->book_id . '§' . $book->hash . '§' . TIME . '">' . $btVoir . '</a></td>';\r
} else {\r
$viewURL = SITE_PATH . 'viewer/' . $book->book_id . '_' . $book->hash;\r
if ($book->parametres->version == 1) {\r
\r
if (!isset($settings['search']) || is_null($settings['search'])) {\r
$odd = cubeMath::isOdd($i) ? ' class="odd"' : '';\r
- $res .= '<tr' . $odd . '><td colspan="14">';\r
+ $res .= '<tr' . $odd . '><td colspan="15">';\r
$res .= commonPage::pager($settings['page'], $dao->count($core->user), $settings['par_page'], 'page' . $change . '/%d');\r
$res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('publications'), false);\r
$res .= '</td></tr>';\r
commonDroits::error();\r
}\r
\r
- fb($version);\r
+\r
+ if (is_null($core->user)) {\r
+ $dao->addDemoCount($book_id);\r
+ }\r
+\r
$dao->compile($book_id, (string) $version);\r
\r
$daoTheme = new wsDAOTheme($core->con);\r
$book->dir_macbook_phonegap_ios = $r->dir_macbook_phonegap_ios;\r
$book->dir_phonegap_android = $r->dir_phonegap_android;\r
$book->dir_external = $r->dir_external;\r
+ $book->demo_counter = $r->demo_counter;\r
\r
return $book;\r
}\r
return $r->book_id + 1;\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->from = 'contact@fluidbook.com';\r
+ $mail->to = 'tech@fluidbook.com';\r
+ $mail->subject = '[Fluidbook Workshop] Fluidbook consulté via l\'url publique';\r
+ $mail->body = 'Le fluidbook suivant a été consulté ' . $m . ' fois (et ' . $r->demo_counter . ' au total) via l\'url publique : ' . "\r\n" .\r
+ 'Fluidbook # ' . $book_id . ' - ' . $r->nom;\r
+ $mail->send();\r
+ }\r
+\r
+ $this->con->select('UPDATE books SET demo_counter=demo_counter+1 WHERE book_id=\'' . $book_id . '\'');\r
+ }\r
+\r
public function selectById($book_id = null, $simple = false) {\r
if (is_null($book_id)) {\r
return $this->cree();\r
protected $dir_macbook_phonegap_ios;\r
protected $dir_phonegap_android;\r
protected $dir_external;\r
+ protected $demo_counter;\r
\r
public function __get($varname) {\r
if (!property_exists($this, $varname)) {\r
\r
protected static function protectFiles()\r
{\r
- $secureSWF = new cubeCommandLine('sudo secureSWF', null, true);\r
+ $secureSWF = new cubeCommandLine('secureSWF', null, true);\r
+ $secureSWF->setSudo();\r
$secureSWF->setPath(CONVERTER_PATH);\r
$secureSWF->setManualArg(self::$configLocal);\r
$secureSWF->setManualArg(self::$protected);\r