public function testShouldMoveToRevision() { //GIVEN $revisionData = array("id" => 2, "title" => "test_revision2", "state" => 1, "issue" => 2, "user" => 2); $revisionTo = new AM_Model_Db_Revision(); $revisionTo->setFromArray($revisionData); //WHEN $this->page->moveToRevision($revisionTo); //THEN $this->assertEquals(2, $this->page->user, "User id should change"); $this->assertEquals(2, $this->page->revision, "Revision id should change"); $queryTable = $this->getConnection()->createQueryTable("page", "SELECT id, user, revision FROM page ORDER BY id"); $expectedTable = $this->createFlatXMLDataSet(dirname(__FILE__) . "/_dataset/move2revision.xml")->getTable("page"); $this->assertTablesEqual($expectedTable, $queryTable); }
public function testShouldCopyToRevision() { //GIVEN $aRevisionData = array('id' => 2, 'title' => 'test_revision2', 'state' => 1, 'issue' => 2, 'user' => 2); $oRevisionTo = new AM_Model_Db_Revision(); $oRevisionTo->setFromArray($aRevisionData); $oRevisionTo->save(); //THEN $this->_oElementsMock->expects($this->once())->method('copyToPage'); $this->_oPageBackgroundMock->expects($this->once())->method('copyToPage'); $this->_oTermMock->expects($this->once())->method('saveToPage'); //WHEN $this->_oPage->copyToRevision($oRevisionTo); //THEN $this->assertEquals(2, $this->_oPage->user, 'User id should change'); $this->assertEquals(2, $this->_oPage->revision, 'Revision id should change'); $oGivenDataSet = $this->getConnection()->createQueryTable('page', 'SELECT id, user, revision FROM page ORDER BY id'); $oExpectedDataSet = $this->createFlatXMLDataSet(dirname(__FILE__) . '/_dataset/copy2revision.xml')->getTable('page'); $this->assertTablesEqual($oExpectedDataSet, $oGivenDataSet); }
/** * Create revision from simple pdf * @param AM_Model_Db_IssueSimplePdf $oSimplePdf * @return AM_Model_Db_Revision * @throws AM_Handler_Issue_Exception */ public function createRevisionFromSimplePdf(AM_Model_Db_IssueSimplePdf $oSimplePdf) { $aImages = $oSimplePdf->getAllPagesThumbnails(); //Create revision $oRevision = new AM_Model_Db_Revision(); $oRevision->state = AM_Model_Db_Issue::STATUS_WIP; $oRevision->user = $this->getIssue()->user; $oRevision->issue = $this->getIssue()->id; $oRevision->save(); $oRevision->title = 'Revision #' . $oRevision->id; $oRevision->save(); //Create cover page $oPage = new AM_Model_Db_Page(); $oPage->title = 'Root page'; $oPage->template = AM_Model_Db_Template::TPL_COVER_PAGE; $oPage->revision = $oRevision->id; $oPage->user = $this->getIssue()->user; $oPage->root_page = true; $oPage->save(); //Find field record for type 'Body' $oFieldBody = AM_Model_Db_Table_Abstract::factory('field')->findOneBy(array('field_type' => 1, 'template' => AM_Model_Db_Template::TPL_COVER_PAGE)); if (is_null($oFieldBody)) { throw new AM_Handler_Issue_Exception('Field "Body" not found'); } //Create element for cover page $oElement = new AM_Model_Db_Element(); $oElement->field = $oFieldBody->id; $oElement->page = $oPage->id; $oElement->save(); AM_Tools::clearContent(AM_Model_Db_Element::RESOURCE_TYPE, $oElement->id); AM_Tools::clearResizerCache(AM_Model_Db_Element::RESOURCE_TYPE, $oElement->getResources()->getThumbnailPresetName(), $oElement->id); //Prepare resources for the element $sImage = array_shift($aImages); $oElement->getResources()->setData(array(AM_Model_Db_Element_Data_Resource::DATA_KEY_RESOURCE => $sImage))->save(); //Set page background $oElement->getResources()->setPageBackground(); //Create childs $oFieldBody = AM_Model_Db_Table_Abstract::factory('field')->findOneBy(array('field_type' => 1, 'template' => AM_Model_Db_Template::TPL_SIMPLE_PAGE)); if (is_null($oFieldBody)) { throw new AM_Handler_Issue_Exception('Field "Body" not found'); } $oPageRoot = clone $oPage; foreach ($aImages as $sImage) { $oPage = new AM_Model_Db_Page(); $oPage->title = 'Right connected to page ' . $oPageRoot->id; $oPage->template = AM_Model_Db_Template::TPL_SIMPLE_PAGE; $oPage->revision = $oRevision->id; $oPage->user = $this->getIssue()->user; $oPage->setConnectionBit(AM_Model_Db_page::LINK_LEFT); $oPage->save(); $oPageRoot->setConnectionBit(AM_Model_Db_page::LINK_RIGHT); $oPageRoot->save(); $oPage->setParent($oPageRoot); $oPage->setLinkType(AM_Model_Db_page::LINK_RIGHT)->savePageImposition(); //Create element for cover page $oElement = new AM_Model_Db_Element(); $oElement->field = $oFieldBody->id; $oElement->page = $oPage->id; $oElement->save(); AM_Tools::clearContent(AM_Model_Db_Element::RESOURCE_TYPE, $oElement->id); AM_Tools::clearResizerCache(AM_Model_Db_Element::RESOURCE_TYPE, $oElement->getResources()->getThumbnailPresetName(), $oElement->id); //Prepare resources for the element $oElement->getResources()->setData(array(AM_Model_Db_Element_Data_Resource::DATA_KEY_RESOURCE => $sImage))->save(); //Set page background $oElement->getResources()->setPageBackground(); $oPageRoot = clone $oPage; } $oRevision->exportRevision(); return $oRevision; }
/** * Returns tree structure as array - each root element contains 2 childs * [ * [id1, id2, id3, title1, title2, title3] * ] * * @param AM_Model_Db_Revision $oRevision * @return array */ protected function _getTree(AM_Model_Db_Revision $oRevision) { $oVocabulary = $oRevision->getVocabularyToc(); $oQuery = $this->getAdapter()->select()->from(array('t1' => 'term'), null)->joinLeft(array('t2' => 'term'), 't2.parent_term = t1.id AND t2.deleted = "no"' . $this->getAdapter()->quoteInto(' AND (t2.revision = ? OR t2.revision IS NULL)', $oRevision->id), null)->joinLeft(array('t3' => 'term'), 't3.parent_term = t2.id AND t3.deleted = "no"' . $this->getAdapter()->quoteInto(' AND (t3.revision = ? OR t3.revision IS NULL)', $oRevision->id), null)->where('t1.vocabulary = ?', $oVocabulary->id)->where('t1.revision = ? OR t1.revision IS NULL', $oRevision->id)->where('t1.parent_term is null')->where('t1.deleted = ?', 'no')->order(array('t1.position', 't2.position', 't3.position', 't1.id', 't2.id', 't3.id'))->columns(array('id1' => 't1.id', 'id2' => 't2.id', 'id3' => 't3.id', 'title1' => 't1.title', 'title2' => 't2.title', 'title3' => 't3.title')); $aResult = $this->getAdapter()->fetchAll($oQuery); return $aResult; }
/** * Export horisontal pages * * @param AM_Model_Db_Revision $oRevision * @return AM_Handler_Export_Sqlite */ protected function _exportPagesHorisontal(AM_Model_Db_Revision $oRevision) { $oPagesHorisontal = AM_Model_Db_Table_Abstract::factory('page_horisontal')->findAllBy(array('id_issue' => $oRevision->getIssue()->id), null, 'weight'); foreach ($oPagesHorisontal as $oPageHorisontal) { $oMapper = $this->_getMapper($oPageHorisontal); /* @var $oMapper AM_Mapper_Sqlite_PageHorisontal */ $oMapper->unmap(); } return $this; }
/** * Copy all revision data (page map, elemtnts) from one to other * @param AM_Model_Db_Revision $oRevisionFrom * @return AM_Model_Db_Revision */ public function copyFromRevision(AM_Model_Db_Revision $oRevisionFrom) { $oVocabularyToc = $oRevisionFrom->getVocabularyToc(); $oVocabularyTag = $oRevisionFrom->getVocabularyTag(); $aPages = $oRevisionFrom->getPages(); if (!empty($oVocabularyToc)) { $oVocabularyToc->copyToRevision($this, $oRevisionFrom); } if (!empty($oVocabularyTag)) { $oVocabularyTag->copyToRevision($this, $oRevisionFrom); } foreach ($aPages as $oPage) { /* @var $oPage AM_Model_Db_Page */ $oPage->copyToRevision($this); } foreach ($aPages as $oPage) { /* @var $oPage AM_Model_Db_Page */ $oPage->savePageImposition(); } return $this; }
/** * Copy term data from one revision to other * @param AM_Model_Db_Revision $oRevisionTo * @return AM_Model_Db_Term */ public function copyToRevision(AM_Model_Db_Revision $oRevisionTo, AM_Model_Db_Revision $oRevisionFrom) { $oTocVocabulary = $oRevisionTo->getVocabularyToc(); if ($this->_isToc() && !empty($this->revision) && $oRevisionFrom->id == $this->revision) { $oResources = $this->getResources(); $this->vocabulary = $oTocVocabulary->id; $this->revision = $oRevisionTo->id; $aData = array(); $aData['updated'] = null; $aData['vocabulary'] = $this->vocabulary; $aData['revision'] = $this->revision; $this->copy($aData); $oResources->copy(); } return $this; }