/** * Return the title for the given id * * @param mixed $mixedId * @param boolean $boolChilds * @return string */ public function getTitle($mixedId) { $arrTitle = array(); $booClGroup = FALSE; if (is_array($mixedId)) { $booClGroup = TRUE; } switch ($this->_objHelper->getPageType()) { case 'page': if ($booClGroup) { $mixedId = $mixedId[0]; } $objElem = $this->_objDatabase->getPageObject($mixedId); $arrTitle = array('title' => $objElem->title); break; case 'article': $arrTitle = array('title' => call_user_func_array(array($this->_objDatabase, 'get' . $this->_objHelper->getPageType() . 'Object'), array($mixedId))->title); break; case 'content': if (!$booClGroup) { $mixedTitle = $this->_objHelper->createContentTitle($mixedId, $booClGroup); if (!is_object($mixedTitle) && is_array($mixedTitle)) { $arrTitle = $mixedTitle; } else { $arrTitle = array('title' => $GLOBALS['TL_LANG']['MSC']['noClipboardTitle'], 'attribute' => $GLOBALS['TL_LANG']['CTE'][$mixedTitle->type][0]); } } else { $strTitle = ''; foreach ($mixedId as $intId) { $mixedTitle = $this->_objHelper->createContentTitle($intId, $booClGroup); if (!is_object($mixedTitle) && is_array($mixedTitle)) { $strTitle = $mixedTitle['title']; break; } } if (strlen($strTitle) > 0) { $arrTitle = array('title' => $strTitle); } else { $arrTitle = array('title' => $GLOBALS['TL_LANG']['MSC']['noClipboardTitle']); } } break; case 'module': $objElem = $this->_objDatabase->getModuleObject($mixedId); $arrTitle = array('title' => $objElem->name); break; default: $arrTitle = array('title' => $GLOBALS['TL_LANG']['MSC']['noClipboardTitle']); } $arrTitle['title'] = $this->_objString->substr($arrTitle['title'], '24'); return $arrTitle; }
/** * Create page elements * * @param XMLReader $objXml * @param string $strTable * @param string $strPastePos * @param integer $intElemId * @param boolean $boolIsChild * @param boolean $isGrouped */ public function createPage(&$objXml, $strTable, $strPastePos, $intElemId, $boolIsChild = FALSE, $isGrouped = FALSE) { $intLastInsertId = 0; if ($boolIsChild == TRUE) { $intId = $intElemId; } else { if ($strPastePos == 'pasteAfter') { $objElem = $this->_objDatabase->getPageObject($intElemId); $intId = $objElem->pid; } } while ($objXml->read()) { switch ($objXml->nodeType) { case XMLReader::ELEMENT: switch ($objXml->localName) { case 'article': $this->createArticle($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; $this->loadDataContainer($strTable); $dataContainer = 'DC_' . $GLOBALS['TL_DCA'][$strTable]['config']['dataContainer']; $dc = new $dataContainer($strTable); $dc->setNewActiveRecord($this->_objDatabase->getPageObject($intLastInsertId)); $dc->setNewId($intLastInsertId); if ($isGrouped) { $intElemId = $intLastInsertId; $strPastePos = 'pasteAfter'; $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); break; case 'subpage': $this->createPage($objXml, $objXml->getAttribute("table"), $strPastePos, $intLastInsertId, TRUE); } break; case XMLReader::END_ELEMENT: switch ($objXml->localName) { case 'page': case 'subpage': 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)); }
/** * Create page elements * * @param XMLReader $objXml * @param string $strTable * @param string $strPastePos * @param integer $intElemId * @param boolean $boolIsChild * @param boolean $isGrouped */ public function createPage(&$objXml, $strTable, $strPastePos, $intElemId, $boolIsChild = FALSE, $isGrouped = FALSE) { $intLastInsertId = 0; if ($boolIsChild == TRUE) { $intId = $intElemId; } else { if ($strPastePos == 'pasteAfter') { $objElem = $this->_objDatabase->getPageObject($intElemId); $intId = $objElem->pid; } } while ($objXml->read()) { switch ($objXml->nodeType) { case XMLReader::ELEMENT: switch ($objXml->localName) { case 'article': $this->createArticle($objXml, $objXml->getAttribute("table"), $strPastePos, $intLastInsertId, TRUE); break; case 'row': $arrSet = $this->createArrSetForRow($objXml, $intId, $strTable, $strPastePos, $intElemId, $boolIsChild); $objDb = $this->_objDatabase->insertInto($strTable, $arrSet); $intLastInsertId = $objDb->insertId; $this->loadDataContainer($strTable); $dataContainer = 'DC_' . $GLOBALS['TL_DCA'][$strTable]['config']['dataContainer']; $dc = new $dataContainer($strTable); $dc->setNewActiveRecord($this->_objDatabase->getPageObject($intLastInsertId)); $dc->setNewId($intLastInsertId); if ($isGrouped) { $intElemId = $intLastInsertId; $strPastePos = 'pasteAfter'; $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 = ''; if (version_compare(VERSION, '3.0', '<') && preg_match('/^0x/', $arrSet['alias'])) { $arrSet['alias'] = pack('H*', substr($arrSet['alias'], 2)); } // Check if we have a hook for the alias generating. if (is_array($GLOBALS['TL_HOOKS']['clipboard_alias'])) { foreach ($GLOBALS['TL_HOOKS']['clipboard_alias'] as $callback) { $this->import($callback[0]); $varValue = $this->{$callback}[0]->{$callback}[1]($dc, $arrSet, $varValue, $this->_objDatabase, $strTable, $intLastInsertId); } } // Trigger the save_callback as fallback. if ($varValue == '' && $varValue != null) { 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); } } } // Only update on empty string or a value. if ($varValue != null) { $this->_objDatabase->updateAlias($strTable, $varValue, $intLastInsertId); } break; case 'subpage': $this->createPage($objXml, $objXml->getAttribute("table"), $strPastePos, $intLastInsertId, TRUE); } break; case XMLReader::END_ELEMENT: switch ($objXml->localName) { case 'page': case 'subpage': return; break; } break; } } }