Esempio n. 1
0
 function run()
 {
     // load CSS
     $this->head($this->getCssSrcComponent(self::CSS_FILENAME));
     //initialize filters
     list($asAllLangs, $asDisplayLangs) = $this->filterLangs(array("view"));
     list($asAllClasses, $asDisplayClasses) = $this->filterContentClasses();
     $this->setTitle($this->t_("title"));
     $aoPageGroups = AnwStorage::getPageGroups(true, $asDisplayLangs, $asDisplayClasses);
     $sFilters = $this->tpl()->filterStart($this->linkMe()) . $this->tpl()->filterLangs($asAllLangs, $asDisplayLangs) . $this->tpl()->filterClass($asAllClasses, $asDisplayClasses) . $this->tpl()->filterEnd();
     $this->out .= $this->tpl()->begin($sFilters);
     foreach ($aoPageGroups as $oPageGroup) {
         $tmpOut = "";
         $aoTranslations = $oPageGroup->getPages();
         foreach ($aoTranslations as $oPage) {
             if ($oPage->isActionAllowed('view')) {
                 $tmpOut .= $this->tpl()->rowTranslation($oPage, self::getPageNavEntriesAllowed($oPage));
             }
         }
         if ($tmpOut != "") {
             $this->out .= $this->tpl()->rowGroupOpen();
             $this->out .= $tmpOut;
             $this->out .= $this->tpl()->rowGroupClose();
         }
     }
     $this->out .= $this->tpl()->end();
 }
Esempio n. 2
0
 function run()
 {
     //initialize filters - user can see all languages with view permission
     list($asAllLangs, $asDisplayLangs) = $this->filterLangs(array("view"), true);
     // did we already choose langs?
     if (count($asDisplayLangs) == 0) {
         // initialize default langs based on translate permission...
         //is user allowed to translate something?
         list($asLangsAllowedForTranslation, $null) = $this->filterLangs(array("translate"));
         if (count($asLangsAllowedForTranslation) > 0) {
             // user has translate permission on some languages, pre-select this languages by default
             $asDisplayLangs = $asLangsAllowedForTranslation;
         }
     }
     // if user has no translate permission, all languages with view permission will be pre-selected
     list($asAllClasses, $asDisplayClasses) = $this->filterContentClasses();
     //get untranslated pages
     $aoPages = AnwStorage::getUntranslatedPages($asDisplayLangs, $asDisplayClasses);
     foreach ($aoPages as $i => $oPage) {
         // FS#138 only check for view permission here (important for anonymous RSS)
         if (!$oPage->isActionAllowed('view')) {
             unset($aoPages[$i]);
         }
     }
     if (AnwEnv::_GET("feed")) {
         $this->showFeed($aoPages);
     } else {
         $this->showHtml($aoPages, $asAllLangs, $asDisplayLangs, $asAllClasses, $asDisplayClasses);
     }
 }
Esempio n. 3
0
 static function tag_anwloop($sMatch, $sContentClass, $asLangs, $nLimit, $sSortUser, $sOrder, $asFilters)
 {
     AnwDebug::startBench("anwloop", true);
     $oContentClass = AnwContentClasses::getContentClass($sContentClass);
     $aoPages = AnwStorage::fetchPagesByClass(array($sMatch), $oContentClass, $asLangs, $nLimit, $sSortUser, $sOrder, $asFilters);
     AnwDebug::stopBench("anwloop");
     return $aoPages;
 }
Esempio n. 4
0
 function create()
 {
     if ($this->nChangeId) {
         throw new AnwUnexpectedException("Change already existing");
     }
     $this->nChangeId = AnwStorage::createChange($this);
     $this->oPage->_change_cbk_setchange($this);
     return $this->nChangeId;
 }
Esempio n. 5
0
 private function exportProcess($anExportPages)
 {
     //prepare an array of pages to be exported
     $aaExportPageGroups = array();
     $aoPageGroups = AnwStorage::getPageGroups();
     foreach ($aoPageGroups as $oPageGroup) {
         $bPageExported = false;
         $aoExportPages = array();
         $aoTranslations = $oPageGroup->getPages();
         foreach ($aoTranslations as $oPage) {
             $bExportDisabled = false;
             //check that page has been checked for export
             if (in_array($oPage->getId(), $anExportPages)) {
                 //check PHP permission
                 if ($oPage->hasPhpCode() && !AnwCurrentSession::getUser()->isPhpEditionAllowed()) {
                     $bExportDisabled = true;
                 }
                 //check ACL permission
                 if (!AnwCurrentSession::isActionAllowed($oPage->getName(), "export", $oPage->getLang())) {
                     $bExportDisabled = true;
                 }
                 //add page to pagegroup export array
                 if (!$bExportDisabled) {
                     $aoExportPages[] = $oPage;
                     $bPageExported = true;
                 }
             }
         }
         //add pagegroup to export array
         if ($bPageExported) {
             $aaExportPageGroups[] = array("GROUP" => $oPageGroup, "PAGES" => $aoExportPages);
         }
     }
     //export now
     $sExportData = $this->exportData($aaExportPageGroups);
     //output as a file
     $this->out = $sExportData;
     $sBackupDate = str_replace('/', '-', Anwi18n::date(time()));
     $sBackupDate .= '-' . date("H") . date("i") . date("s");
     $this->printOutputDownload("wiki-" . $sBackupDate . ".xml");
 }
Esempio n. 6
0
 private function saveDuplication()
 {
     $this->out .= $this->tpl()->beginProcessDuplication($this->getoPage()->getName(), $this->getoPage()->getLang());
     $aoTranslations = $this->getoPage()->getPageGroup()->getPages($this->getoPage());
     //which pages should we duplicate?
     $aaPagesForDuplication = array();
     $oPage = $this->getoPage();
     $aaPagesForDuplication[] = array('LANG' => $oPage->getLang(), 'NAME' => AnwEnv::_POST($this->getInputName($oPage), ""), 'CONTENT' => $oPage->getContent()->toXmlString());
     foreach ($aoTranslations as $oTranslation) {
         if (AnwEnv::_POST($this->getChkName($oTranslation))) {
             $aaPagesForDuplication[] = array('LANG' => $oTranslation->getLang(), 'NAME' => AnwEnv::_POST($this->getInputName($oTranslation), ""), 'CONTENT' => $oTranslation->getContent()->toXmlString());
         }
     }
     AnwStorage::transactionStart();
     try {
         $oFirstPage = null;
         $oContentClass = $this->getoPage()->getPageGroup()->getContentClass();
         //duplicate each page
         foreach ($aaPagesForDuplication as $asPageForDuplication) {
             $asNotices = array();
             $sPageName = $asPageForDuplication['NAME'];
             $sPageLang = $asPageForDuplication['LANG'];
             $sPageContent = $asPageForDuplication['CONTENT'];
             $asNotices = $this->checkPermissions($sPageName, $sPageLang, $sPageContent);
             if (count($asNotices) == 0) {
                 $oContent = $oContentClass->rebuildContentFromXml($sPageContent);
                 if (!$oFirstPage) {
                     $oPage = AnwPage::createNewPage($oContentClass, $sPageName, $sPageLang, "", $oContent);
                     $oFirstPage = $oPage;
                 } else {
                     $oPage = $oFirstPage->createNewTranslation($sPageName, $sPageLang, "", $oContent);
                 }
                 $this->out .= $this->tpl()->rowProcessDuplication_success($oPage->link());
             } else {
                 $this->out .= $this->tpl()->rowProcessDuplication_failed($sPageName, $sPageLang, $asNotices);
             }
         }
         AnwStorage::transactionCommit();
     } catch (AnwException $e) {
         AnwStorage::transactionRollback();
         throw $e;
     }
     $this->out .= $this->tpl()->endProcessDuplication();
 }
Esempio n. 7
0
 private function doRevert($oPageGroup, $aaRevertPlan)
 {
     $nTime = time();
     // simulation
     $aoAllFutureContents = array();
     foreach ($aaRevertPlan['REVERT'] as $aoRevertPages) {
         $oPageCurrent = $aoRevertPages[0];
         $oPageForRevert = $aoRevertPages[1];
         if (isset($aoAllFutureContents[$oPageForRevert->getLang()])) {
             throw new AnwUnexpectedException("already have a content for this lang");
         }
         $aoAllFutureContents[$oPageForRevert->getLang()] = $oPageForRevert->getContent();
     }
     foreach ($aaRevertPlan['RESTORE'] as $oPageForRestore) {
         if (isset($aoAllFutureContents[$oPageForRestore->getLang()])) {
             throw new AnwUnexpectedException("already have a content for this lang");
         }
         $aoAllFutureContents[$oPageForRestore->getLang()] = $oPageForRestore->getContent();
     }
     foreach ($aaRevertPlan['KEEP'] as $oPageKept) {
         if (isset($aoAllFutureContents[$oPageKept->getLang()])) {
             throw new AnwUnexpectedException("already have a content for this lang");
         }
         $aoAllFutureContents[$oPageKept->getLang()] = $oPageKept->getContent();
     }
     // make sure that everything is in order... (or throws an exception)
     AnwPage::checkSimilarContents($aoAllFutureContents);
     // now, apply changes
     AnwStorage::transactionStart();
     try {
         //important, firstly delete pages which needs it, to avoid conflicts when reverting or creating pages
         foreach ($aaRevertPlan['DELETE'] as $oPageForDelete) {
             $sChangeComment = "delete for revert";
             $oPageForDelete->delete($nTime, $sChangeComment);
         }
         foreach ($aaRevertPlan['REVERT'] as $aoRevertPages) {
             $oPageCurrent = $aoRevertPages[0];
             $oPageForRevert = $aoRevertPages[1];
             $sChangeComment = "revert to old revision";
             $oPageCurrent->revertToRevision($oPageForRevert, $nTime, $sChangeComment);
         }
         foreach ($aaRevertPlan['RESTORE'] as $oPageForRestore) {
             $sChangeComment = "restore for revert";
             $oPageForRestore->restoreArchive($nTime, $sChangeComment);
         }
         AnwStorage::transactionCommit();
     } catch (AnwException $e) {
         AnwStorage::transactionRollback();
         throw $e;
     }
     // redirect to reverted page if possible
     $oPageGroup->refresh();
     if (count($oPageGroup->getPages()) > 0) {
         $oPageRedirect = $oPageGroup->getPreferedPage();
         AnwUtils::redirect(AnwUtils::link($oPageRedirect));
     } else {
         // no page available, go home
         AnwUtils::redirect();
     }
 }
 private function saveTranslation()
 {
     try {
         $asAvailableLangs = $this->getoPage()->getPageGroup()->getAvailableLangs();
         //check permissions : translate
         foreach ($asAvailableLangs as $sLang) {
             if (AnwEnv::_POST($this->getChkName($sLang))) {
                 $sTranslationName = AnwEnv::_POST($this->getInputName($sLang), "");
                 if (!AnwCurrentSession::isActionAllowed($sTranslationName, 'translate', $sLang)) {
                     throw new AnwAclException("permission translate denied");
                 }
             }
         }
         $oPageTranslation = null;
         AnwStorage::transactionStart();
         try {
             foreach ($asAvailableLangs as $sLang) {
                 if (AnwEnv::_POST($this->getChkName($sLang))) {
                     $sTranslationName = AnwEnv::_POST($this->getInputName($sLang), "");
                     //create translation
                     $oPageTranslation = $this->getoPage()->createNewTranslation($sTranslationName, $sLang);
                 }
             }
             AnwStorage::transactionCommit();
         } catch (AnwException $e) {
             AnwStorage::transactionRollback();
             throw $e;
         }
         if ($oPageTranslation) {
             // redirect to last created translation
             AnwUtils::redirect(AnwUtils::link($oPageTranslation));
         } else {
             // no translation was created, show form again
             $this->showForm();
         }
     } catch (AnwBadPageNameException $e) {
         $this->showForm($this->g_("err_badpagename"));
     } catch (AnwBadLangException $e) {
         $this->showForm($this->g_("err_badlang"));
     } catch (AnwPageAlreadyExistsException $e) {
         $this->showForm($this->g_("err_pagealreadyexists"));
     } catch (AnwAclException $e) {
         $this->showForm($this->g_("err_nopermission"));
     } catch (AnwLangExistsForPageGroupException $e) {
         $this->showForm($this->g_("err_langexistsforpagegroup"));
     }
 }
Esempio n. 9
0
 function deletePages($nTime = null)
 {
     if (!$nTime) {
         $nTime = time();
     }
     $aoPages = $this->getPages();
     AnwStorage::transactionStart();
     try {
         foreach ($aoPages as $oPage) {
             $oPage->delete($nTime);
         }
         AnwStorage::transactionCommit();
     } catch (AnwException $e) {
         AnwStorage::transactionRollback();
         throw $e;
     }
 }
Esempio n. 10
0
 protected function runInitialization()
 {
     AnwStorage::transactionStart();
     try {
         $sInitializationLog = $this->getComponentToInitialize()->initializeComponent();
         if (!$this->getComponentToInitialize()->isComponentInitialized()) {
             throw new AnwUnexpectedException("Component is still not initialized!");
         }
         //run additional initialization
         $sInitializationLog .= $this->initializeAdditional();
         $this->out .= $this->tpl()->showInitResult($this->linkStepNext(), $sInitializationLog);
         AnwStorage::transactionCommit();
         //update step status
         $this->getActionInstall()->updateStepStatusNext();
     } catch (AnwComponentInitializeException $e) {
         $this->showInitializationConfirm($e->getMessage());
     } catch (AnwException $e) {
         AnwStorage::transactionRollback();
         throw $e;
     }
 }
Esempio n. 11
0
 private function createPageProcess($sLang, $sContentClass)
 {
     $sPageName = $this->getPageName();
     if (!AnwCurrentSession::isActionAllowed($sPageName, 'create', $sLang)) {
         throw new AnwAclException("permission create denied");
     }
     $oContentClass = AnwContentClasses::getContentClass($sContentClass);
     AnwStorage::transactionStart();
     try {
         //create page
         $oPage = AnwPage::createNewPage($oContentClass, $sPageName, $sLang);
         //should we create translations for this new page?
         $asAvailableLangs = $oPage->getPageGroup()->getAvailableLangs();
         //check permissions : translate
         foreach ($asAvailableLangs as $sLang) {
             if (AnwEnv::_POST($this->getChkName($sLang))) {
                 $sTranslationName = AnwEnv::_POST($this->getInputName($sLang), "");
                 if (!AnwCurrentSession::isActionAllowed($sTranslationName, 'translate', $sLang)) {
                     throw new AnwAclException("permission translate denied");
                 }
             }
         }
         foreach ($asAvailableLangs as $sLang) {
             if (AnwEnv::_POST($this->getChkName($sLang))) {
                 $sTranslationName = AnwEnv::_POST($this->getInputName($sLang), "");
                 //create translation
                 $oPageTranslation = $oPage->createNewTranslation($sTranslationName, $sLang);
             }
         }
         AnwStorage::transactionCommit();
     } catch (AnwException $e) {
         AnwStorage::transactionRollback();
         throw $e;
     }
     AnwUtils::redirect(AnwUtils::link($oPage, "edit"));
 }
Esempio n. 12
0
 function run()
 {
     //get a page history ?
     $oPage = null;
     $oPageGroup = null;
     $oPageGroup = $this->getPageGroupForHistory();
     if (!$oPageGroup) {
         // did we requested a page history?
         $oPage = $this->getPageForHistory();
     }
     //page title
     if ($oPage) {
         $sTitle = $this->t_("history_t", array("pagename" => $oPage->getName()));
     } else {
         if ($oPageGroup) {
             $sTitle = $this->t_("history_pagegroup_t", array("pagegroupid" => $oPageGroup->getId()));
         } else {
             $sTitle = $this->t_("title");
         }
     }
     $this->setTitle($sTitle);
     //filter change types
     $amAllChangeTypes = AnwChange::getChangeTypes();
     $amDisplayChangeTypes = array();
     foreach ($amAllChangeTypes as $mChangeType) {
         if (AnwEnv::_GET("ct_" . $mChangeType)) {
             $amDisplayChangeTypes[] = $mChangeType;
         }
     }
     if (count($amDisplayChangeTypes) == 0) {
         $amDisplayChangeTypes = $amAllChangeTypes;
         if (!$oPage) {
             $amDisplayChangeTypes = AnwUtils::array_remove($amDisplayChangeTypes, AnwChange::TYPE_PAGE_EDITION_DEPLOY);
             $amDisplayChangeTypes = AnwUtils::array_remove($amDisplayChangeTypes, AnwChange::TYPE_PAGE_UPDATELINKS);
         }
     }
     //initialize filters
     list($asAllLangs, $asDisplayLangs) = $this->filterLangs(array("view"), true);
     list($asAllClasses, $asDisplayClasses) = $this->filterContentClasses();
     $nDefaultDisplayModeGrouped = 1;
     //disable filters if a page is selected
     if ($oPage || $oPageGroup) {
         $asDisplayLangs = $asAllLangs;
         $asDisplayClasses = $asAllClasses;
         $nDefaultDisplayModeGrouped = 0;
         //show in detailled mode by default
     }
     //display mode
     $bGrouped = AnwEnv::_GET("fg", $nDefaultDisplayModeGrouped);
     //limit
     $nLimit = $this->cfg(self::CFG_LIMIT);
     if ($bGrouped) {
         $nLimit *= 2;
     }
     //TODO
     $nStart = (int) AnwEnv::_GET("s", 0);
     $nStartPrev = $nStart - $nLimit;
     $nStartNext = $nStart + $nLimit;
     //get last changes
     $aoChanges = AnwStorage::getLastChanges($nLimit, $nStart, $asDisplayLangs, $asDisplayClasses, $amDisplayChangeTypes, $oPage, $oPageGroup);
     if ($bGrouped) {
         $aoChanges = AnwSimilarChanges::groupSimilarChanges($aoChanges);
     }
     //check permissions
     foreach ($aoChanges as $i => $oChange) {
         if ($oChange->getPage() && !$oChange->getPage()->isActionAllowed("view") || !AnwCurrentSession::isActionAllowed($oChange->getPageName(), "view", $oChange->getPageLang())) {
             unset($aoChanges[$i]);
         }
     }
     if (AnwEnv::_GET("feed")) {
         $this->showFeed($aoChanges);
     } else {
         $this->showHtml($aoChanges, $amAllChangeTypes, $amDisplayChangeTypes, $asAllLangs, $asDisplayLangs, $asAllClasses, $asDisplayClasses, $nStartPrev, $nStartNext, $sTitle, $bGrouped, $oPage, $oPageGroup);
     }
 }
Esempio n. 13
0
 function loadInfo()
 {
     if ($this->bInfoLoaded) {
         return;
     }
     try {
         $this->debug("Loading page info..." . ($this->bSkipLoadingTranslationsContent ? "(boost)" : "") . ($this->bSkipLoadingContent ? "(superboost)" : ""));
         if (!$this->isArchive()) {
             $oPage = AnwStorage::getPageByName($this->sName, $this->bSkipLoadingTranslationsContent, $this->bSkipLoadingContent);
         } else {
             $oPage = AnwStorage::getPageArchiveByName($this->sName, $this->nChangeId, $this->bSkipLoadingTranslationsContent, $this->bSkipLoadingContent);
         }
         $this->nId = $oPage->getId();
         parent::doLoadInfo($oPage);
     } catch (AnwPageNotFoundException $e) {
         //page doesn't exist
         $this->bExists = false;
     }
     $this->bInfoLoaded = true;
 }
Esempio n. 14
0
 /**
  * Import selected files.
  *
  */
 private function doImport($sUploadedFile, $asSelectedPages, $bContinueOnErrors)
 {
     // we will display the import result after running the whole import
     // that's why we save the output in a temporary buffer during this process
     $sOutBuffer = "";
     //load XML from file
     $aaData = $this->getDataFromXmlFile(self::tmpFilename($sUploadedFile));
     //delete tmp file
     AnwUtils::unlink(self::tmpFilename($sUploadedFile), ANWPATH_TMP);
     $nCountImportErrors = 0;
     $nCountImportSuccess = 0;
     $bMustRollback = false;
     // only when $bContinueOnErrors = false
     // MAIN TRANSACTION - only when $bContinueOnErrors = false
     if ($bContinueOnErrors) {
         // won't revert whole import if errors
         $bMainTransaction = false;
         // will commit immediately each imported content
         $bSubTransaction = true;
     } else {
         // will revert whole import if errors
         $bMainTransaction = true;
         // won't commit immediately each imported content
         $bSubTransaction = false;
     }
     if ($bMainTransaction) {
         AnwStorage::transactionStart();
     }
     try {
         foreach ($aaData['PAGEGROUPS'] as $aaDataGroup) {
             $sOutBuffer .= $this->tpl()->rowGroupOpen();
             $oFirstPage = null;
             $oContentClass = AnwContentClasses::getContentClass($aaDataGroup['CONTENTCLASS']);
             foreach ($aaDataGroup['PAGES'] as $aaDataPage) {
                 $asNotices = array();
                 $sOriginalPageName = $aaDataPage['NAME'];
                 $sPageName = AnwEnv::_POST($this->getInputPageName($sOriginalPageName));
                 $sPageLang = AnwEnv::_POST($this->getInputPageLang($sOriginalPageName));
                 if (!$sPageName || !$sPageLang) {
                     throw new AnwUnexpectedException("PageName or PageLang not found for imported content: " . $sOriginalPageName);
                 }
                 $sPageContent = $aaDataPage['CONTENT'];
                 //do we want to import this page?
                 if (in_array($sOriginalPageName, $asSelectedPages) && $sPageName && $sPageLang) {
                     //check pagename and content
                     $asNotices = $this->checkPermissions($sPageName, $sPageLang, $sPageContent);
                     if (count($asNotices) == 0) {
                         // SUB TRANSACTION - only when $bContinueOnErrors = true
                         if ($bSubTransaction) {
                             AnwStorage::transactionStart();
                         }
                         try {
                             // create the new page
                             $oContent = $oContentClass->rebuildContentFromXml($sPageContent);
                             if (!$oFirstPage) {
                                 $oPage = AnwPage::createNewPage($oContentClass, $sPageName, $sPageLang, "", $oContent);
                             } else {
                                 $oPage = $oFirstPage->createNewTranslation($sPageName, $sPageLang, "", $oContent);
                             }
                             if ($bSubTransaction) {
                                 AnwStorage::transactionCommit();
                             }
                             // wait for everything to be completed before affecting $oFirstPage, in case of it fails
                             if (!$oFirstPage) {
                                 $oFirstPage = $oPage;
                             }
                         } catch (AnwException $e) {
                             // special errors management, see FS#62
                             $asNotices[] = $this->t_("notice_unknown") . " (" . $e->getMessage() . ")";
                             //print $e->getFile().'!'.$e->getLine();print_r($e->getTrace());
                             if ($bMainTransaction) {
                                 // we will have to rollback, but we still continue to get the whole report
                                 $bMustRollback = true;
                             }
                             if ($bSubTransaction) {
                                 AnwStorage::transactionRollback();
                             }
                             AnwDebug::reportError($e);
                         }
                     }
                     // import result
                     if (count($asNotices) == 0) {
                         $nCountImportSuccess++;
                         // at least we got a success!
                         $sOutBuffer .= $this->tpl()->rowTranslationProcess_success($oPage->link());
                     } else {
                         $nCountImportErrors++;
                         $sOutBuffer .= $this->tpl()->rowTranslationProcess_failed($sPageName, $sPageLang, $asNotices);
                     }
                 } else {
                     $sOutBuffer .= $this->tpl()->rowTranslationProcess_skipped($sPageName, $sPageLang);
                 }
             }
             $sOutBuffer .= $this->tpl()->rowGroupClose();
         }
         if ($bMainTransaction) {
             if (!$bMustRollback) {
                 AnwStorage::transactionCommit();
             } else {
                 AnwStorage::transactionRollback();
             }
         }
     } catch (AnwException $e) {
         AnwStorage::transactionRollback();
         throw $e;
     }
     // output, with import results before the detailled report
     $this->out .= $this->tpl()->beginProcess();
     if ($nCountImportErrors > 0) {
         if ($nCountImportSuccess > 0) {
             if ($bContinueOnErrors) {
                 $this->out .= $this->tpl()->importResultErrorsContinued($nCountImportSuccess, $nCountImportErrors);
             } else {
                 $this->out .= $this->tpl()->importResultErrorsCancelled($nCountImportSuccess, $nCountImportErrors);
             }
         } else {
             $this->out .= $this->tpl()->importResultFailed($nCountImportErrors);
         }
     } else {
         $this->out .= $this->tpl()->importResultSuccess($nCountImportSuccess);
     }
     $this->out .= $this->tpl()->importDetails($sOutBuffer);
 }
Esempio n. 15
0
 /**
  * @throws AnwUnexpectedException
  */
 static function loadDriver()
 {
     AnwDebug::startbench("Storage driver init");
     self::$oDriver = AnwStorageDriver::loadComponent(AnwComponent::globalCfgDriverStorage());
     AnwDebug::stopbench("Storage driver init");
 }
 protected static function getNewsList($oPage)
 {
     //fetch news linked to this category
     $asPatterns = array();
     $oContentClass = AnwContentClasses::getContentClass(self::NEWS_CLASS);
     $asLangs = array($oPage->getLang());
     $nLimit = 0;
     $sSortUser = AnwContentClassPageDefault_news::PUB_DATE;
     $sOrder = AnwUtils::SORTORDER_ASC;
     $asFilters = array();
     $asFilters[] = array('FIELD' => AnwContentClassPageDefault_news::PUB_CATEGORIES, 'OPERATOR' => AnwUtils::FILTER_OP_EQUALS, 'VALUE' => $oPage->getPageGroup()->getId());
     $aoNewsPages = AnwStorage::fetchPagesByClass($asPatterns, $oContentClass, $asLangs, $nLimit, $sSortUser, $sOrder, $asFilters);
     return $aoNewsPages;
 }
Esempio n. 17
0
 protected function getMenuPage()
 {
     $oPage = null;
     try {
         $sMenuPageName = $this->getMenuPageName();
         $sActionLang = AnwAction::getActionLang();
         $oPage = AnwStorage::getPageByName($sMenuPageName, false, false, $sActionLang);
         // we don't check ACLs for better performances...
         // load translation if available
         if ($oPage->getLang() != $sActionLang) {
             $oPage = $oPage->getPageGroup()->getPreferedPage($sActionLang);
         }
     } catch (AnwException $e) {
     }
     return $oPage;
 }
 private function saveTranslations($sAddLang)
 {
     try {
         if (!Anwi18n::langExists($sAddLang)) {
             throw new AnwBadLangException();
         }
         $this->out .= $this->tpl()->startProcess();
         $bSomethingDone = false;
         $aoPageGroups = AnwStorage::getPageGroups(false, null, null);
         AnwStorage::transactionStart();
         try {
             foreach ($aoPageGroups as $oPageGroup) {
                 $aoPages = $oPageGroup->getPages();
                 $bChecked = AnwEnv::_POST($this->getChkName($oPageGroup));
                 if (!isset($aoPages[$sAddLang]) && $bChecked) {
                     $sTranslationName = AnwEnv::_POST($this->getInputName($oPageGroup));
                     //check permissions : translate
                     if (!AnwCurrentSession::isActionAllowed($sTranslationName, 'translate', $sAddLang)) {
                         throw new AnwAclException("permission translate denied");
                     }
                     //find PageRef
                     $nPageRefId = (int) AnwEnv::_POST($this->getInputRef($oPageGroup));
                     $oPageRef = new AnwPageById($nPageRefId);
                     if (isset($aoPages[$oPageRef->getLang()]) && $oPageRef->getId() == $aoPages[$oPageRef->getLang()]->getId()) {
                         //create translation
                         $oPageTranslation = $oPageRef->createNewTranslation($sTranslationName, $sAddLang);
                         $this->out .= $this->tpl()->newTranslationCreated($sAddLang, $oPageTranslation->link());
                         $bSomethingDone = true;
                     }
                 }
             }
             AnwStorage::transactionCommit();
         } catch (AnwException $e) {
             AnwStorage::transactionRollback();
             throw $e;
         }
         $sUrlContinue = $this->linkMe(array("addlang" => $sAddLang));
         if (!$bSomethingDone) {
             AnwUtils::redirect($sUrlContinue);
         }
         $this->out .= $this->tpl()->endProcess($sUrlContinue);
     } catch (AnwBadPageNameException $e) {
         $this->showForm($sAddLang, $this->g_("err_badpagename"));
     } catch (AnwBadLangException $e) {
         $this->showForm($sAddLang, $this->g_("err_badlang"));
     } catch (AnwPageAlreadyExistsException $e) {
         $this->showForm($sAddLang, $this->g_("err_pagealreadyexists"));
     } catch (AnwAclException $e) {
         $this->showForm($sAddLang, $this->g_("err_nopermission"));
     } catch (AnwLangExistsForPageGroupException $e) {
         $this->showForm($sAddLang, $this->g_("err_langexistsforpagegroup"));
     }
 }
Esempio n. 19
0
 function toHtml($oContent, $oPage)
 {
     $aoContentClasses = array();
     $asContentClassNames = $oContent->getContentFieldValues(self::FIELD_CONTENTCLASS);
     foreach ($asContentClassNames as $sContentClassName) {
         $oContentClass = AnwContentClasses::getContentClass($sContentClassName);
         $aoContentClasses[] = $oContentClass;
     }
     unset($asContentClassNames);
     //get feed items
     $aoMatchingPages = AnwStorage::fetchPages($oContent->getContentFieldValues(self::FIELD_MATCH, true), $aoContentClasses, array($oPage->getLang()), $oContent->getContentFieldValue(self::FIELD_LIMIT), AnwUtils::SORT_BY_TIME, AnwUtils::SORTORDER_DESC);
     $aoFeedItems = array();
     foreach ($aoMatchingPages as $oMatchingPage) {
         $oFeedItem = $oMatchingPage->toFeedItem();
         $aoFeedItems[] = $oFeedItem;
     }
     if (AnwEnv::_GET(self::GET_FEED) != AnwFeed::TYPE_RSS2) {
         $sUrlRss = AnwUtils::link($oPage, "view", array(self::GET_FEED => AnwFeed::TYPE_RSS2));
         //show feed info
         $oOutputHtml = new AnwOutputHtml($oPage);
         $oOutputHtml->setTitle($oContent->getContentFieldValue(self::FIELD_TITLE));
         $sHtmlItems = "";
         foreach ($aoFeedItems as $oFeedItem) {
             $sHtmlItems .= $this->tpl()->feedItem($oFeedItem->getTitle(), $oFeedItem->getLink());
         }
         $sHtmlBody = $this->tpl()->feedInfo($oContent->getContentFieldValue(self::FIELD_TITLE), $oContent->getContentFieldValue(self::FIELD_DESCRIPTION), $sUrlRss, $sHtmlItems, $oPage->getLang());
         $oOutputHtml->setBody($sHtmlBody);
         // load contentclass CSS
         $sHtmlHead = $this->getCssSrcComponent(self::CSS_FILE);
         $sHtmlHead .= $this->tpl()->headRss($sUrlRss, $oContent->getContentFieldValue(self::FIELD_TITLE));
         $oOutputHtml->setHead($sHtmlHead);
     } else {
         $sUrlRss = AnwUtils::linkAbsolute($oPage, "view", array(self::GET_FEED => AnwFeed::TYPE_RSS2));
         //export to rss
         $oFeed = new AnwFeed(AnwFeed::TYPE_RSS2, $oContent->getContentFieldValue(self::FIELD_TITLE), $sUrlRss, $oContent->getContentFieldValue(self::FIELD_DESCRIPTION));
         foreach ($aoFeedItems as $oFeedItem) {
             $oFeed->addItem($oFeedItem);
         }
         $oFeed->output();
     }
     return $oOutputHtml;
 }
Esempio n. 20
0
 protected function unlockPageForEdition()
 {
     AnwStorage::unlockPage($this->getoPage(), AnwCurrentSession::getSession());
 }
 function initDatatype()
 {
     $oDatatype = parent::initDatatype();
     //set enum values
     $nFetchingLimit = 0;
     $aoPages = AnwStorage::fetchPagesByClass($this->asFetchingPatterns, $this->oFetchingContentClass, $this->asFetchingLangs, $nFetchingLimit, $this->sFetchingSort, $this->sFetchingSortOrder, $this->asFetchingFilters);
     $asEnumValues = array();
     foreach ($aoPages as $oPage) {
         //use pageId as field value, so that pages can be renamed without loosing enum values
         $asEnumValues[$oPage->getPageGroup()->getId()] = $oPage->getName();
     }
     $oDatatype->setEnumValues($asEnumValues);
     return $oDatatype;
 }