$db->document_links_versions->document_id('integer', 0, false);\r
$db->document_links_versions->links('text', 0, false);\r
$db->document_links_versions->rulers('text', 0, false);\r
- $db->document_links_versions->comments('varchar', 32, false);\r
+ $db->document_links_versions->comments('varchar', 64, false);\r
$db->document_links_versions->user('integer', 0, false);\r
$db->document_links_versions->update('integer', 0, false);\r
// .\r
$dbi = new CubeDbStruct($this->con);\r
$dbi->synchronize($db);\r
} catch (Exception $e) {\r
- fb($e);\r
return;\r
}\r
\r
global $core;\r
\r
$book_id = $args[1];\r
- $date = $args[2];\r
+ $time = $args[2];\r
\r
$dao = new wsDAODocument($core->con);\r
- $dao->restoreLinksVersion($book_id, $date, $core->user->utilisateur_id);\r
- }\r
+ $dao->getLinksAndRulers($book_id, $links, $rulers, $time);\r
+ $xls = $dao->getLinksAsExcel($links, $rulers);\r
+\r
+ self::getLinksFromExcel($xls, $links, $rulers);\r
\r
- public static function importLinksAsExcel($args) {\r
- global $core;\r
- $book_id = $args[1];\r
\r
- $xls = new PHPExcel();\r
- $reader = new PHPExcel_Reader_Excel2007();\r
- $xls = $reader->load($_FILES['file']['tmp_name']);\r
\r
+ $dao = new wsDAODocument($core->con);\r
+ $dao->setLinksAndRulers($book_id, json_encode($links), json_encode($rulers), 'Restore links from ' . date('Y-m-d H:i:s', $time), $core->user->utilisateur_id);\r
+ }\r
+\r
+ private static function getLinksFromExcel($xls, &$links, &$rulers) {\r
$s = $xls->setActiveSheetIndexByName('Links');\r
$i = 0;\r
$links = array();\r
}\r
$i++;\r
}\r
+ }\r
\r
+ public static function importLinksAsExcel($args) {\r
+ global $core;\r
+ $book_id = $args[1];\r
+\r
+ $xls = new PHPExcel();\r
+ $reader = new PHPExcel_Reader_Excel2007();\r
+ $xls = $reader->load($_FILES['file']['tmp_name']);\r
\r
+ self::getLinksFromExcel($xls, $links, $rulers);\r
\r
$dao = new wsDAODocument($core->con);\r
$dao->setLinksAndRulers($book_id, json_encode($links), json_encode($rulers), 'Import from excel', $core->user->utilisateur_id);\r
}\r
}\r
\r
+ public static function initCompositionVersions($args) {\r
+ global $core;\r
+ $dao = new wsDAOBook($core->con);\r
+\r
+ $r = $core->con->select('SELECT * FROM books ORDER by book_id');\r
+ while ($r->fetch()) {\r
+ $dao->saveCompositionVersion($r->book_id,$r->composition_update);\r
+ }\r
+ }\r
+\r
public static function resetLinks($args) {\r
global $core;\r
$book_id = $args[0];\r
}\r
// Import des pages\r
$core->con->execute('INSERT INTO book_pages (book_id,book_page,document_id,document_page) SELECT bid,bpid,did,dpid FROM ws.book_pages WHERE bid ' . self::_sqlIn($oldBooks));\r
+\r
+ $dao = new wsDAOBook($core->con);\r
+ foreach ($oldBooks as $book_id) {\r
+ $dao->saveCompositionVersion($book_id);\r
+ }\r
}\r
\r
protected static function _oldIconesToColor($iid, &$parametres) {\r
\r
public static function publications($args) {\r
global $core;\r
- \r
- if(isset($args[1])){\r
- $_SESSION['q']=$args[1];\r
+\r
+ if (isset($args[1])) {\r
+ $_SESSION['q'] = $args[1];\r
}\r
\r
$settings = $core->user->getSettings('books');\r
$book_id = $args[1];\r
$time = $args[2];\r
\r
- $daoBook = new wsDAOBook($core->con);\r
- $pages = $daoBook->getPagesOfBook($book_id);\r
-\r
$dao = new wsDAODocument($core->con);\r
$dao->getLinksAndRulers($book_id, $links, $rulers, $time);\r
-\r
- $cols = array('document_id' => __('Document'), 'document_page' => __('Page du document'),\r
- 'page' => __('Page de la publication'), 'left' => __('x'), 'top' => __('y'), 'width' => __('Largeur'), 'height' => __('Hauteur'),\r
- 'type' => __('Type'), 'to' => __('Destination'), 'target' => __('Cible'),\r
- 'infobulle' => __('Infobulle'), 'numerotation' => __('Numérotation'),\r
- 'display_area' => __('Activer la surbrillance'),\r
- 'video_loop' => __('Video : boucle'), 'video_auto_start' => __('Video : démarrage automatique'), 'video_controls' => __('Vidéo : afficher les contrôles'), 'video_sound_on' => __('Vidéo : activer le son'),\r
- 'inline' => __('Vidéo : afficher dans la page'), 'video_width' => __('Vidéo : Largeur du popup'), 'video_height' => __('Vidéo : Hauteur du popup'),\r
- 'interactive' => __('Interactivité'), 'video_service' => __('Webvideo : service'),\r
- 'display_area' => __('Afficher le lien au rollover')\r
- );\r
-\r
- $xls = new PHPExcel();\r
- $s = $xls->setActiveSheetIndex(0);\r
- $s->setTitle('Links');\r
-\r
-\r
-\r
- // Labels\r
- $i = 0;\r
- foreach ($cols as $id => $label) {\r
- $s->setCellValueByColumnAndRow($i, 1, $id);\r
- $s->getColumnDimensionByColumn($i)->setAutoSize(true);\r
- $s->getStyleByColumnAndRow($i, 1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);\r
- $i++;\r
- }\r
- // Links\r
- $j = 2;\r
- foreach ($links as $l) {\r
- $i = 0;\r
- foreach ($cols as $id => $label) {\r
- if ($id == 'document_id' || $id == 'document_page') {\r
- $infos = $pages[$l['page']];\r
- $value = $infos[$id];\r
- } else {\r
- if (is_bool($l[$id])) {\r
- $l[$id] = $l[$id] ? 1 : 0;\r
- }\r
- if ($id == 'numerotation') {\r
- if ($l[$id] == 'false') {\r
- $l[$id] = 'physical';\r
- }\r
- } else if ($id == 'display_area') {\r
- if ($l[$id] == '') {\r
- $l[$id] = '1';\r
- }\r
- }\r
- $value = $l[$id];\r
- }\r
-\r
- $s->setCellValueByColumnAndRow($i, $j, $value);\r
- $s->getStyleByColumnAndRow($i, $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);\r
- $i++;\r
- }\r
- $j++;\r
- }\r
- // Rulers\r
- $s = $xls->createSheet();\r
- $s->setTitle('Rulers');\r
-\r
- $rcols = array('document_id', 'document_page', 'page', 'type', 'pos');\r
- $i = 0;\r
- // Labels\r
- foreach ($rcols as $id) {\r
- $s->setCellValueByColumnAndRow($i, 1, $id);\r
- $s->getColumnDimensionByColumn($i)->setAutoSize(true);\r
- $s->getStyleByColumnAndRow($i, 1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);\r
- $i++;\r
- }\r
-\r
- // Contents\r
- $j = 2;\r
- foreach ($rulers as $r) {\r
- $i = 0;\r
- foreach ($rcols as $id) {\r
- if ($id == 'document_id' || $id == 'document_page') {\r
- $infos = $pages[$r['page']];\r
- $value = $infos[$id];\r
- } else {\r
- $value = $r[$id];\r
- }\r
- $s->setCellValueByColumnAndRow($i, $j, $value);\r
- $s->getStyleByColumnAndRow($i, $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);\r
- $i++;\r
- }\r
- $j++;\r
- }\r
-\r
- $xls->setActiveSheetIndex(0);\r
+ $xls = $dao->getLinksAsExcel($links, $rulers);\r
\r
ob_end_clean();\r
files::registerMimeTypes(array('xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'));\r
return $r->nb;\r
}\r
\r
+ public function getPagesOfBookAt($book_id, $time) {\r
+ $r = $this->con->select('SELECT * FROM book_pages_versions WHERE book_id=\'' . $this->con->escape($book_id) . '\' ORDER BY `update`');\r
+ if (!$r->count()) {\r
+ return $this->getPagesOfBook($book_id);\r
+ }\r
+ if ($r->count() == 1) {\r
+ $pages = unserialize($r->composition);\r
+ if (!count($pages)) {\r
+ return $this->getPagesOfBook($book_id);\r
+ }\r
+ return $pages;\r
+ }\r
+ $pages = null;\r
+ while ($r->fetch()) {\r
+ if ($r->update > $time) {\r
+ if (is_null($pages)) {\r
+ return $this->getPagesOfBook($book_id);\r
+ }\r
+ return unserialize($pages);\r
+ }\r
+ $pages = $r->composition;\r
+ }\r
+ return unserialize($pages);\r
+ }\r
+\r
public function getPagesOfBook($book_id) {\r
$pages = array();\r
$r = $this->con->select('SELECT b.*,d.numberSections AS num,d.conversionInfos AS conversion,d.pages AS doc_pages,d.version AS version FROM book_pages b JOIN documents d ON d.document_id=b.document_id WHERE b.book_id=\'' . $this->con->escape($book_id) . '\' ORDER BY book_page');\r
+ $update = $r->composition_update;\r
while ($r->fetch()) {\r
$n = explode(',', $r->num);\r
if ($r->conversion != '') {\r
$c->update('WHERE book_id=\'' . $this->con->escape($book_id) . '\'');\r
}\r
\r
- public function saveCompositionVersion($book_id) {\r
+ public function saveCompositionVersion($book_id, $time=null) {\r
+\r
+ $time = is_null($time) ? TIME : $time;\r
+\r
$pages = $this->getPagesOfBook($book_id);\r
\r
$c = $this->con->openCursor('book_pages_versions');\r
- $c->update = TIME;\r
+ $c->update = $time;\r
$c->book_id = $book_id;\r
$c->composition = serialize($pages);\r
$c->insert();\r
}\r
\r
public function restoreLinksVersion($book_id, $update, $user=0) {\r
- $sql = 'INSERT INTO document_links_versions (document_id,links,rulers,`update`,comments,user) SELECT document_id,links,rulers,' . TIME . ',\'Links from a previous version\',' . $user . ' FROM document_links_versions WHERE `update`=' . $update . ' AND document_id IN (SELECT document_id FROM book_pages WHERE book_id=' . $book_id . ')';\r
+\r
+ $daoBook = new wsDAOBook($this->con);\r
+ $pages = $daoBook->getPagesOfBookAt($book_id, $update);\r
+\r
+ $docs = array();\r
+ foreach ($pages as $infos) {\r
+ $docs[] = $infos['document_id'];\r
+ }\r
+\r
+ $sql = 'INSERT INTO document_links_versions (document_id,links,rulers,`update`,comments,user) SELECT document_id,links,rulers,' . TIME . ',\'Links from a previous version\',' . $user . ' FROM document_links_versions WHERE `update`=' . $update . ' AND document_id IN (' . implode(',', $docs) . ')';\r
$this->con->execute($sql);\r
}\r
\r
\r
$log[] = 'Links file of page ' . $page . ' found';\r
\r
- \r
+\r
$fp = fopen($csv, 'rb');\r
\r
while (true) {\r
}\r
\r
$daoBook = new wsDAOBook($this->con);\r
- $pages = $daoBook->getPagesOfBook($book_id);\r
+ $pages = $daoBook->getPagesOfBookAt($book_id,$time);\r
\r
foreach ($pages as $p => $infos) {\r
$documents[] = $infos['document_id'];\r
}\r
\r
public function getLinksVersions($book_id) {\r
+ // Get composition versions\r
+ $r = $this->con->select('SELECT * FROM book_pages_versions WHERE book_id=\'' . $this->con->escape($book_id) . '\'');\r
+ $docs = array();\r
+ while ($r->fetch()) {\r
+ $c = unserialize($r->composition);\r
+ foreach ($c as $infos) {\r
+ $docs[] = $infos['document_id'];\r
+ }\r
+ }\r
+\r
$res = array();\r
- $r = $this->con->select('SELECT l.*,u.prenom,u.nom FROM document_links_versions l LEFT JOIN utilisateurs u ON l.user=u.utilisateur_id WHERE document_id IN(SELECT document_id FROM book_pages WHERE book_id=\'' . $this->con->escape($book_id) . '\')');\r
+ $r = $this->con->select('SELECT l.*,u.prenom,u.nom FROM document_links_versions l LEFT JOIN utilisateurs u ON l.user=u.utilisateur_id WHERE document_id IN(' . implode(',', $docs) . ')');\r
while ($r->fetch()) {\r
if (!isset($res[$r->update])) {\r
$res[$r->update] = array('links' => 0, 'rulers' => 0);\r
return $this->sauve($data);\r
}\r
\r
+ public function getLinksAsExcel($links, $rulers) {\r
+ $cols = array('document_id' => __('Document'), 'document_page' => __('Page du document'),\r
+ 'page' => __('Page de la publication'), 'left' => __('x'), 'top' => __('y'), 'width' => __('Largeur'), 'height' => __('Hauteur'),\r
+ 'type' => __('Type'), 'to' => __('Destination'), 'target' => __('Cible'),\r
+ 'infobulle' => __('Infobulle'), 'numerotation' => __('Numérotation'),\r
+ 'display_area' => __('Activer la surbrillance'),\r
+ 'video_loop' => __('Video : boucle'), 'video_auto_start' => __('Video : démarrage automatique'), 'video_controls' => __('Vidéo : afficher les contrôles'), 'video_sound_on' => __('Vidéo : activer le son'),\r
+ 'inline' => __('Vidéo : afficher dans la page'), 'video_width' => __('Vidéo : Largeur du popup'), 'video_height' => __('Vidéo : Hauteur du popup'),\r
+ 'interactive' => __('Interactivité'), 'video_service' => __('Webvideo : service'),\r
+ 'display_area' => __('Afficher le lien au rollover')\r
+ );\r
+\r
+ $xls = new PHPExcel();\r
+ $s = $xls->setActiveSheetIndex(0);\r
+ $s->setTitle('Links');\r
+\r
+ // Labels\r
+ $i = 0;\r
+ foreach ($cols as $id => $label) {\r
+ $s->setCellValueByColumnAndRow($i, 1, $id);\r
+ $s->getColumnDimensionByColumn($i)->setAutoSize(true);\r
+ $s->getStyleByColumnAndRow($i, 1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);\r
+ $i++;\r
+ }\r
+ // Links\r
+ $j = 2;\r
+ foreach ($links as $l) {\r
+ $i = 0;\r
+ foreach ($cols as $id => $label) {\r
+ if ($id == 'document_id' || $id == 'document_page') {\r
+ $infos = $pages[$l['page']];\r
+ $value = $infos[$id];\r
+ } else {\r
+ if (is_bool($l[$id])) {\r
+ $l[$id] = $l[$id] ? 1 : 0;\r
+ }\r
+ if ($id == 'numerotation') {\r
+ if ($l[$id] == 'false') {\r
+ $l[$id] = 'physical';\r
+ }\r
+ } else if ($id == 'display_area') {\r
+ if ($l[$id] == '') {\r
+ $l[$id] = '1';\r
+ }\r
+ }\r
+ $value = $l[$id];\r
+ }\r
+\r
+ $s->setCellValueByColumnAndRow($i, $j, $value);\r
+ $s->getStyleByColumnAndRow($i, $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);\r
+ $i++;\r
+ }\r
+ $j++;\r
+ }\r
+ // Rulers\r
+ $s = $xls->createSheet();\r
+ $s->setTitle('Rulers');\r
+\r
+ $rcols = array('document_id', 'document_page', 'page', 'type', 'pos');\r
+ $i = 0;\r
+ // Labels\r
+ foreach ($rcols as $id) {\r
+ $s->setCellValueByColumnAndRow($i, 1, $id);\r
+ $s->getColumnDimensionByColumn($i)->setAutoSize(true);\r
+ $s->getStyleByColumnAndRow($i, 1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);\r
+ $i++;\r
+ }\r
+\r
+ // Contents\r
+ $j = 2;\r
+ foreach ($rulers as $r) {\r
+ $i = 0;\r
+ foreach ($rcols as $id) {\r
+ if ($id == 'document_id' || $id == 'document_page') {\r
+ $infos = $pages[$r['page']];\r
+ $value = $infos[$id];\r
+ } else {\r
+ $value = $r[$id];\r
+ }\r
+ $s->setCellValueByColumnAndRow($i, $j, $value);\r
+ $s->getStyleByColumnAndRow($i, $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);\r
+ $i++;\r
+ }\r
+ $j++;\r
+ }\r
+\r
+ $xls->setActiveSheetIndex(0);\r
+ return $xls;\r
+ }\r
+\r
}\r
\r
?>
\ No newline at end of file