/** * Constructor. * * @param array/object The base content's attributes * @param array The base values. * */ public function __construct($baseContentAttributes, $contentValues = array()) { $this->contentValues = $contentValues; if (is_array($baseContentAttributes)) { $defaultParams = array("Id" => '0', "PageId" => '0', "SlotId" => '0', "LanguageId" => '0', "GroupId" => '0', "Content" => '', "ContentTypeId" => '0', "ContentPosition" => '0', "Edited" => '1'); if ($diff = array_diff(array_keys($baseContentAttributes), array_keys($defaultParams))) { throw new InvalidArgumentException(sprintf('%s does not support the following options: \'%s\'.', get_class($this), implode('\', \'', $diff))); } $this->baseContentAttributes = $baseContentAttributes; } elseif ($baseContentAttributes instanceof w3sContentManager) { $this->baseContentAttributes = W3sContentPeer::contentToArray($baseContentAttributes->getContent(), true); } else { throw new InvalidArgumentException(sprintf('%s requires a w3sContentManager object or an array that represents a w3sContent object.', get_class($this))); } }
/** * Executes openEditor action * */ public function executeOpenEditor($request) { // The parameters passed to the forwarded action are already setted in the javascript if ($request->hasParameter('idContent') && $this->getRequestParameter('idContent') > 0) { $content = W3sContentPeer::retrieveByPk($this->getRequestParameter('idContent')); if ($content != null) { $this->editor = w3sEditorFactory::create($content); return $this->renderPartial('showEditor'); } } $this->getResponse()->setStatusCode(404); return $this->renderText(w3sCommonFunctions::toI18n('The content you are trying to edit does not exists anymore.')); }
/** * Deletes a content. The content will be marked for deletion but it will be really * deleted from the database when the pages will be published * * @param int optional the operation to do. * 0 Marks the content for undeletion * 1 [Default] Marks the content for deletion * * @return int 1 success / xx The error message number * */ public function delete($op = 1) { try { $bRollBack = false; $con = Propel::getConnection(); $con = w3sPropelWorkaround::beginTransaction($con); // Marks for deletion $this->content->setToDelete($op); $result = $this->content->save(); if ($this->content->isModified() && $result == 0) { $bRollBack = true; } else { $contentAttributes = W3sContentPeer::contentToArray($this->content); // Moves the contents placed below the adding content one position up if ($this->makeSpace($contentAttributes, 'del')) { // The content has been added: checks if it must be repeated on related pages if ($this->updateForeigns) { $repeatedContent = new w3sRepeatedForeignContentsDelete($contentAttributes); if (!$repeatedContent->update()) { $bRollBack = true; } } } else { $bRollBack = true; } } if (!$bRollBack) { // Everything was fine so W3StudioCMS commits to database $con->commit(); $result = 1; } else { // Something was wrong so W3StudioCMS aborts the operation and restores to previous status w3sPropelWorkaround::rollBack($con); $result = 8; } } catch (Exception $e) { w3sPropelWorkaround::rollBack($con); $result = 0; $this->setExceptionError($e->getMessage()); sfContext::getInstance()->getLogger()->info('W3StudioCMS - ' . $this->setExceptionError($e->getMessage())); } return $result; }
/** * Adds a page and inserts default contents where content is available * * @param string The name of the page to save * @param int The id of the related group * * @return int 0 - The save operation failed * 1 - Success * 2 - Page already exists */ public function add($pageName, $idGroup) { try { $pageName = trim($pageName); if ($pageName != '') { // Checks if page already exists $pageName = w3sCommonFunctions::slugify($pageName); $oPage = W3sPagePeer::getFromPageName($pageName); if ($oPage == null) { if ($idGroup != null) { if (DbFinder::from('W3sGroup')->findPK($idGroup) != null) { $con = Propel::getConnection(); // We assure that all the operations W3StudioCMS makes will be successfully done $rollBack = false; $con = w3sPropelWorkaround::beginTransaction($con); // Save page $this->page->setGroupId($idGroup); $this->page->setPageName($pageName); $result = $this->page->save(); if ($this->page->isModified() && $result == 0) { $rollBack = true; } else { // Getting the page's id inserted yet $idPage = $this->page->getId(); $attributes = w3sTemplateEngine::retrieveTemplateAttributesFromPage($this->page); $templateContents = w3sCommonFunctions::readFileContents(sprintf("%1\$s%2\$s%3\$s%2\$sdata%2\$s%4\$s.yml", sfConfig::get('app_w3s_web_themes_dir'), DIRECTORY_SEPARATOR, $attributes["projectName"], $attributes["templateName"])); $defaultContents = sfYaml::load($templateContents); $defaultContents = $defaultContents["W3sContent"]; // Inserts the contents for every language $oLanguages = DbFinder::from('W3sLanguage')->where('ToDelete', '0')->find(); foreach ($oLanguages as $language) { $idLanguage = $language->getId(); // Cycles the slot's three repeated contents status for ($i = 0; $i <= 2; $i++) { // Retrieve the slots with the $i status for the page's template $slots = W3sSlotPeer::getTemplateSlots($attributes["idTemplate"], $i); foreach ($slots as $slot) { // Retrieves a content that belongs to the current slot $baseContent = DbFinder::from('W3sContent')->where('SlotId', $slot->getId())->where('LanguageId', $idLanguage)->findOne(); // When no repeated content, the content is simply copied if ($slot->getRepeatedContents() == 0 || $baseContent == null) { $slotName = $slot->getSlotName(); foreach ($defaultContents as $defaultContent) { if ($defaultContent['slotId'] == $slotName) { $content = w3sContentManagerFactory::create($defaultContent["contentTypeId"]); $contentValue = array("PageId" => $idPage, "SlotId" => $slot->getId(), "LanguageId" => $idLanguage, "GroupId" => $idGroup, "Content" => $defaultContent["content"], "ContentTypeId" => $defaultContent["contentTypeId"], "ContentPosition" => $defaultContent["contentPosition"], "Edited" => 1); $content->setUpdateForeigns(false); $content->add($contentValue); } } } else { // Retrive base page, if any, but NOT current one $pageFinder = DbFinder::from('W3sPage')->whereToDelete(0)->whereIdNot($idPage); if ($basePage = $pageFinder->findOne()) { // Retrieve a content that belongs to the current slot $baseContents = DbFinder::from('W3sContent')->whereToDelete(0)->relatedTo($basePage)->relatedTo($slot)->whereLanguageId($idLanguage)->find(); foreach ($baseContents as $baseContent) { // Creates a new content from the base content $newContent = w3sContentManagerFactory::create($baseContent->getContentTypeId(), $baseContent); // Converts the content in array and changes the page's id and the group's id $contentValue = W3sContentPeer::contentToArray($newContent->getContent()); $contentValue["PageId"] = $idPage; $contentValue["GroupId"] = $idGroup; // Updates the content and copies the related elements $newContent->setUpdateForeigns(false); $newContent->add($contentValue); w3sContentManagerMenuPeer::copyRelatedElements($baseContent->getId(), $newContent->getContent()->getId()); } } } } } } } if (!$rollBack) { // Everything was fine so W3StudioCMS commits to database $con->commit(); $result = 1; } else { // Something was wrong so W3StudioCMS aborts the operation and restores to previous status w3sPropelWorkaround::rollBack($con); $result = 0; } } else { $result = 16; } } else { $result = 8; } } else { $result = 2; } } else { $result = 4; } } catch (Exception $e) { w3sPropelWorkaround::rollBack($con); $result = 0; sfContext::getInstance()->getLogger()->info("W3StudioCMS - An Error occoured while addin a language. The exception message is:\n" . $e->getMessage() . "\n"); } return $result; }
* intact this copyright notice. * * (c) 2007-2008 Giansimon Diblas <*****@*****.**> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * * For extra documentation and help please visit http://www.w3studiocms.com */ $result = '<ul>'; foreach ($menu as $menuRow) { $result .= '<li>'; if ($menuRow->getImage() != '') { $rollover = $menuRow->getRolloverImage() != '' ? 'onmouseover="this.src=\'' . $menuRow->getRolloverImage() . '\'" onmouseout="this.src=\'' . $menuRow->getImage() . '\'"' : ''; $linkText = '<img src="' . $menuRow->getImage() . '" ' . $rollover . ' />'; } else { $linkText = $menuRow->getLink(); } $link = $menuRow->getExternalLink() == '' ? url_for('webSite/index?language=' . $language . '&page=' . $menuRow->getW3sPage()->getPageName()) : $menuRow->getExternalLink(); $result .= '<a href="' . $link . '">' . $linkText . '</a>'; $result .= '</li>'; } $result .= '</ul>'; /* */ $content = W3sContentPeer::retrieveByPK($idContent); $content->setContent($result); if ($content->save() > 0) { echo $result; } else { $this->getResponse()->setStatusCode(404); }
/** * Deletes from the database all the deleted languages, pages and contents * during the edit phase * * @return bool The operation result */ private function updateDb() { try { $con = Propel::getConnection(); $con = w3sPropelWorkaround::beginTransaction($con); // Deletes the languages $c = new Criteria(); $c->add(W3sLanguagePeer::TO_DELETE, 1); W3sLanguagePeer::doDelete($c); // Deletes the groups $c = new Criteria(); $c->add(W3sGroupPeer::TO_DELETE, 1); W3sGroupPeer::doDelete($c); // Deletes the pages $c = new Criteria(); $c->add(W3sPagePeer::TO_DELETE, 1); W3sPagePeer::doDelete($c); // Deletes the contents $c = new Criteria(); $c->add(W3sContentPeer::TO_DELETE, 1); W3sContentPeer::doDelete($c); $con->commit(); return true; } catch (Exception $e) { w3sPropelWorkaround::rollBack($con); sfContext::getInstance()->getLogger()->info('W3StudioCMS - ' . $this->setExceptionError($e->getMessage())); return false; } }