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