示例#1
0
 /**
  * Create article elements
  * 
  * @param XMLReader $objXml
  * @param string $strTable
  * @param string $strPastePos
  * @param integer $intElemId     
  * @param boolean $boolIsChild
  * @param boolean $isGrouped
  */
 public function createArticle(&$objXml, $strTable, $strPastePos, $intElemId, $boolIsChild = FALSE, $isGrouped = FALSE)
 {
     $intLastInsertId = 0;
     $objDb = NULL;
     if ($boolIsChild == TRUE) {
         $intId = $intElemId;
     } else {
         if ($strPastePos == 'pasteAfter') {
             $objElem = $this->_objDatabase->getContentObject($intElemId);
             $intId = $objElem->pid;
         }
     }
     while ($objXml->read()) {
         switch ($objXml->nodeType) {
             case XMLReader::ELEMENT:
                 switch ($objXml->localName) {
                     case 'content':
                         $this->createContent($objXml, $objXml->getAttribute("table"), $strPastePos, $intLastInsertId, TRUE);
                         break;
                     case 'row':
                         $objDb = $this->_objDatabase->insertInto($strTable, $this->createArrSetForRow($objXml, $intId, $strTable, $strPastePos, $intElemId, $boolIsChild));
                         $intLastInsertId = $objDb->insertId;
                         if ($isGrouped) {
                             $intElemId = $intLastInsertId;
                             $strPastePos = 'pasteAfter';
                         }
                         break;
                 }
                 break;
             case XMLReader::END_ELEMENT:
                 switch ($objXml->localName) {
                     case 'article':
                         $this->loadDataContainer($strTable);
                         $dataContainer = 'DC_' . $GLOBALS['TL_DCA'][$strTable]['config']['dataContainer'];
                         $dc = new $dataContainer($strTable);
                         $dc->setNewActiveRecord($this->_objDatabase->getArticleObject($intLastInsertId));
                         $dc->setNewId($intLastInsertId);
                         if ($isGrouped) {
                             $this->Input->setGet('act', 'copyAll');
                         } else {
                             $this->Input->setGet('act', 'copy');
                         }
                         if (is_array($GLOBALS['TL_DCA'][$strTable]['config']['oncopy_callback'])) {
                             foreach ($GLOBALS['TL_DCA'][$strTable]['config']['oncopy_callback'] as $callback) {
                                 $this->import($callback[0]);
                                 $this->{$callback}[0]->{$callback}[1]($intLastInsertId, $dc);
                             }
                         }
                         $this->Input->setGet('act', NULL);
                         $varValue = '';
                         // Trigger the save_callback
                         if (is_array($GLOBALS['TL_DCA'][$strTable]['fields']['alias']['save_callback'])) {
                             foreach ($GLOBALS['TL_DCA'][$strTable]['fields']['alias']['save_callback'] as $callback) {
                                 $this->import($callback[0]);
                                 $varValue = $this->{$callback}[0]->{$callback}[1]($varValue, $dc);
                             }
                         }
                         $this->_objDatabase->updateAlias($strTable, $varValue, $intLastInsertId);
                         return;
                         break;
                 }
                 break;
         }
     }
 }
 /**
  * Get checksum as md5 hash from all page, article and content elements 
  * that need to save in xml
  * 
  * @param array $arrSet
  * @return string 
  */
 protected function _createChecksum($arrSet)
 {
     $arrChecksum = array();
     switch ($arrSet['table']) {
         case 'tl_page':
             $arrPages = $this->_objDatabase->getPageObject($arrSet['elem_id'])->fetchAllAssoc();
             if ($arrSet['childs']) {
                 $arrTmp = array($arrPages[0]['id']);
                 $arrChecksum['page'][] = $arrPages[0];
                 for ($i = 0; TRUE; $i++) {
                     if (!isset($arrTmp[$i])) {
                         break;
                     }
                     $arrSubPages = $this->_objDatabase->getSubpagesObject($arrTmp[$i])->fetchAllAssoc();
                     foreach ($arrSubPages as $arrSubPage) {
                         $arrTmp[] = $arrSubPage['id'];
                         $arrChecksum['page'][] = $arrSubPage;
                     }
                 }
             } else {
                 foreach ($arrPages as $arrPage) {
                     $arrChecksum['page'][] = $arrPage;
                 }
             }
         case 'tl_article':
             if (is_array($arrChecksum['page'])) {
                 foreach ($arrChecksum['page'] as $arrPage) {
                     $arrArticles = $this->_objDatabase->getArticleObjectFromPid($arrPage['id'])->fetchAllAssoc();
                     foreach ($arrArticles as $arrArticle) {
                         $arrChecksum['article'][] = $arrArticle;
                     }
                 }
             } else {
                 $arrArticles = $this->_objDatabase->getArticleObject($arrSet['elem_id'])->fetchAllAssoc();
                 foreach ($arrArticles as $arrArticle) {
                     $arrChecksum['article'][] = $arrArticle;
                 }
             }
         case 'tl_content':
             if (is_array($arrChecksum['article'])) {
                 foreach ($arrChecksum['article'] as $arrArticle) {
                     $arrContents = $this->_objDatabase->getContentObjectFromPid($arrArticle['id'])->fetchAllAssoc();
                     foreach ($arrContents as $arrContent) {
                         $arrChecksum['content'][] = $arrContent;
                     }
                 }
             } else {
                 $arrContents = $this->_objDatabase->getContentObject($arrSet['elem_id'])->fetchAllAssoc();
                 foreach ($arrContents as $arrContent) {
                     $arrChecksum['content'][] = $arrContent;
                 }
             }
             break;
         case 'tl_module':
             $arrModules = $this->_objDatabase->getModuleObject($arrSet['elem_id'])->fetchAllAssoc();
             foreach ($arrModules as $arrModule) {
                 $arrChecksum['module'][] = $arrModule;
             }
             break;
     }
     return md5(serialize($arrChecksum));
 }