/** * 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)); }