function init() { // news title $oContentField = new AnwContentFieldPage_string(self::FIELD_TITLE); $oContentField->indexAs(self::PUB_TITLE); $this->addContentField($oContentField); // news intro $oContentField = new AnwContentFieldPage_xhtml(self::FIELD_INTRO); $this->addContentField($oContentField); // news body $oContentField = new AnwContentFieldPage_xhtml(self::FIELD_BODY); $oContentField->setDynamicParsingAllowed(true); $oContentField->setDynamicPhpAllowed(true); $this->addContentField($oContentField); // news date $oContentField = new AnwContentFieldPage_date(self::FIELD_DATE); $oContentField->setTranslatable(false); $oContentField->indexAs(self::PUB_DATE); $this->addContentField($oContentField); // news categories $oFetchingContentClass = AnwContentClasses::getContentClass(self::NEWSCATEGORY_CLASS); $oContentField = new AnwContentFieldPage_pageGroup(self::FIELD_CATEGORIES, $oFetchingContentClass); $oContentField->setTranslatable(false); $oContentMultiplicity = new AnwContentMultiplicity_multiple(); $oContentField->setMultiplicity($oContentMultiplicity); $oContentField->indexAs(self::PUB_CATEGORIES); $this->addContentField($oContentField); }
static function getContentClasses() { if (!self::$bAllContentClassesLoaded) { self::loadContentClasses(); self::$bAllContentClassesLoaded = true; } return self::$osContentClasses; }
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; }
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; }
protected function initializeAdditional() { $sInitLog = ""; //----------------------------- // create default home page //----------------------------- $oContentClass = AnwContentClasses::getContentClass('page'); $sPageName = AnwComponent::globalCfgHomePage(); $sPageLang = AnwComponent::globalCfgLangDefault(); $sChangeComment = "Installation assistant"; $oContent = new AnwContentPage($oContentClass); $sHomeTitle = $this->t_("local_homepage_title", array(), $sPageLang); $sHomeHead = $this->tpl()->homePageHead($sPageLang); $sHomeBody = $this->tpl()->homePageBody($sPageLang, ANWIKI_WEBSITE); $oContent->setContentFieldValues(AnwIContentClassPageDefault_page::FIELD_TITLE, array($sHomeTitle)); $oContent->setContentFieldValues(AnwIContentClassPageDefault_page::FIELD_HEAD, array($sHomeHead)); $oContent->setContentFieldValues(AnwIContentClassPageDefault_page::FIELD_BODY, array($sHomeBody)); $oPage = AnwPage::createNewPage($oContentClass, $sPageName, $sPageLang, $sChangeComment, $oContent); $sInitLog .= $this->t_("initlog_pagecreated", array('pagename' => $sPageName)) . '<br/>'; //----------------------------- // create default menu //----------------------------- $oContentClass = AnwContentClasses::getContentClass('menu'); $sPageName = 'en/_include/menu'; //TODO $sPageLang = Anwi18n::langExists('en') ? 'en' : AnwComponent::globalCfgLangDefault(); //TODO $sChangeComment = "Installation assistant"; $oContent = new AnwContentPage($oContentClass); //menu title $sMenuTitle = $this->t_("local_menu_title", array(), $sPageLang); $oContent->setContentFieldValues(AnwIContentClassPageDefault_menu::FIELD_TITLE, array($sMenuTitle)); //items $oContentFieldItems = $oContentClass->getContentField(AnwIContentClassPageDefault_menu::FIELD_ITEMS); $oSubContentItem = new AnwContentPage($oContentFieldItems); //main link $oContentFieldMainLink = $oContentFieldItems->getContentField(AnwIContentFieldPage_menu_menuItem::FIELD_MAINLINK); $oSubContentMainLink = new AnwContentPage($oContentFieldMainLink); $sMainLinkTitle = $this->t_("local_menu_mainlink_title", array(), $sPageLang); $oSubContentMainLink->setContentFieldValues(AnwIPage_link::FIELD_TITLE, array($sMainLinkTitle)); $oSubContentMainLink->setContentFieldValues(AnwIPage_link::FIELD_URL, array(AnwComponent::globalCfgHomePage())); $oSubContentMainLink->setContentFieldValues(AnwIPage_link::FIELD_TARGET, array(AnwIPage_link::TARGET_SELF)); $oSubContentItem->setSubContents(AnwIContentFieldPage_menu_menuItem::FIELD_MAINLINK, array($oSubContentMainLink)); $oContent->setSubContents(AnwIContentClassPageDefault_menu::FIELD_ITEMS, array($oSubContentItem)); $oPage = AnwPage::createNewPage($oContentClass, $sPageName, $sPageLang, $sChangeComment, $oContent); $sInitLog .= $this->t_("initlog_pagecreated", array('pagename' => $sPageName)) . '<br/>'; return $sInitLog; }
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")); }
function getContentClass() { $oContentClass = AnwContentClasses::getContentClass($this->getContentClassName()); return $oContentClass; }
/** * 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); }
function anwiki__autoload($sClassName) { static $asClasses; if (!$asClasses) { $asClasses = array(); $asClasses['AnwMysql'] = ANWPATH_CLASSES_ABSTRACTION . "class_mysql.php"; $asClasses['AnwOutput'] = ANWPATH_CLASSES . "class_output.php"; $asClasses['AnwOutputHtml'] = ANWPATH_CLASSES . "class_output.php"; $asClasses['AnwParser'] = ANWPATH_CLASSES . "class_parser.php"; $asClasses['AnwAutoSync'] = ANWPATH_CLASSES . "diff/class_autosync.php"; $asClasses['AnwXml'] = ANWPATH_CLASSES . "class_xml.php"; $asClasses['AnwDiffAdded'] = ANWPATH_CLASSES . "diff/class_diffadded.php"; $asClasses['AnwDiffDeleted'] = ANWPATH_CLASSES . "diff/class_diffdeleted.php"; $asClasses['AnwDiffEdited'] = ANWPATH_CLASSES . "diff/class_diffedited.php"; $asClasses['AnwDiffKept'] = ANWPATH_CLASSES . "diff/class_diffkept.php"; $asClasses['AnwDiffMoved'] = ANWPATH_CLASSES . "diff/class_diffmoved.php"; $asClasses['AnwDiff'] = ANWPATH_CLASSES . "diff/class_diffs.php"; $asClasses['AnwDiffs'] = ANWPATH_CLASSES . "diff/class_diffs.php"; $asClasses['AnwFeed'] = ANWPATH_CLASSES . "class_feed.php"; $asClasses['AnwFeedItem'] = ANWPATH_CLASSES . "class_feed.php"; $asClasses['AnwActionGlobal'] = ANWPATH_CLASSES . "class_actionglobal.php"; $asClasses['AnwActionPage'] = ANWPATH_CLASSES . "class_actionpage.php"; $asClasses['AnwActionMinimal'] = ANWPATH_CLASSES . "class_actionminimal.php"; $asClasses['AnwChange'] = ANWPATH_CLASSES . "class_change.php"; $asClasses['AnwLock'] = ANWPATH_CLASSES . "class_lock.php"; $asClasses['AnWiki'] = ANWPATH_CLASSES . "class_anwiki.php"; $asClasses['AnwDependancy'] = ANWPATH_CLASSES . "dependancy/class_dependancy.php"; $asClasses['AnwDependancyConflict'] = ANWPATH_CLASSES . "dependancy/class_dependancy.php"; $asClasses['AnwDependancyRequirement'] = ANWPATH_CLASSES . "dependancy/class_dependancy.php"; $asClasses['AnwGoogleMap'] = ANWPATH_CLASSES . "external/google/maps/class_googlemap.php"; } if (class_exists('AnwDebug')) { AnwDebug::log("***AUTOLOAD***: " . $sClassName); } /*if ($sClassName == "AnwContentClasses") { try{ throw new Exception(); } catch(Exception $e){ print_r($e->getTrace()); } }*/ if (isset($asClasses[$sClassName])) { loadApp($asClasses[$sClassName]); } else { //interface of contentclass $sPattern = '!AnwIContentFieldPage_([^_]*?)_(.*?)$!i'; //ie: AnwIContentFieldPage_menu_menuSubItem belongs to "menu" if (preg_match($sPattern, $sClassName, $asMatches)) { $sContentClassName = $asMatches[1]; //AnwContentClasses::loadContentClassInterface($sContentClassName); AnwUtils::loadContentClassInterfaceFaster($sContentClassName); } else { $sPattern = '!AnwIContentClassPageDefault_(.*?)$!i'; //ie: AnwIContentClassPageDefault_menu belongs to "menu" if (preg_match($sPattern, $sClassName, $asMatches)) { $sContentClassName = $asMatches[1]; //AnwContentClasses::loadContentClassInterface($sContentClassName); AnwUtils::loadContentClassInterfaceFaster($sContentClassName); } else { //contentclass: default $sPattern = '!AnwContentClassPageDefault_(.*)$!i'; if (preg_match($sPattern, $sClassName, $asMatches)) { $sContentClassName = $asMatches[1]; AnwContentClasses::loadContentClass($sContentClassName); } else { //contentclass: override $sPattern = '!AnwContentClassPageOverride_(.*)$!i'; if (preg_match($sPattern, $sClassName, $asMatches)) { $sContentClassName = $asMatches[1]; AnwContentClasses::loadContentClass($sContentClassName); } else { $sPattern = '!AnwDatatype(.*)$!i'; if (preg_match($sPattern, $sClassName)) { loadApp(ANWPATH_CLASSES . "class_datatype.php"); } else { //__autoload is called for {AnwContentField, AnwContentMultiplicity...} althought we don't really need it $sPattern = '!(AnwStructuredContentFieldsContainer|AnwContent|AnwContentPage|AnwSettingsContent|AnwContentClasses|AnwStructuredContent(.*)|AnwContentSettings)$!i'; if (preg_match($sPattern, $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentclasses.php"); loadApp(ANWPATH_CLASSES . "contentclass/class_contentclass.php"); loadApp(ANWPATH_CLASSES . "contentclass/class_content.php"); loadApp(ANWPATH_CLASSES . "contentclass/class_contentfield.php"); loadApp(ANWPATH_CLASSES . "contentclass/class_contentmultiplicity.php"); } else { if (preg_match('!(AnwStructuredContentFieldsContainerPage|AnwContentClassPage)$!i', $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentclass_page.php"); } else { if (preg_match('!(AnwStructuredContentFieldsContainerSettings|AnwContentClassSettings)$!i', $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentclass_settings.php"); } else { if (preg_match('!(AnwContentFieldPage(.*)|AnwContentFieldPage_(.*))$!i', $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentfield_page.php"); } else { if (preg_match('!(AnwContentFieldSettings(.*))$!i', $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentfield_settings.php"); } else { if (preg_match('!(AnwISettings_(.*))$!i', $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentfield_settings_interface.php"); } else { if (preg_match('!(AnwIPage_(.*))$!i', $sClassName)) { loadApp(ANWPATH_CLASSES . "contentclass/class_contentfield_page_interface.php"); } else { if (class_exists('AnwDebug')) { AnwDebug::log('***AUTOLOAD*** failed'); } } } } } } } } } } } } } } }
function filterClass($asAllClasses, $asDisplayClasses = array()) { $HTML = <<<EOF \t<div class="anwfilter" id="filter_classes"> \t<fieldset> \t\t<legend>{$this->g_('filter_classes')} \t\t\t<a href="#" onclick="AnwUtils.chkall('chkfilterclass',\$('filter_classes')); return false;">{$this->g_('in_chkall')}</a> \t\t\t<a href="#" onclick="AnwUtils.chknone('chkfilterclass',\$('filter_classes')); return false;">{$this->g_('in_chknone')}</a> \t\t</legend> EOF; foreach ($asAllClasses as $sClass) { $bSelected = in_array($sClass, $asDisplayClasses) || count($asDisplayClasses) == 0; $sSelected = $bSelected ? ' checked="checked"' : ''; $sClassName = AnwContentClasses::getContentClass($sClass)->getLabel(); $sInputName = "cc_" . $sClass; $HTML .= <<<EOF \t\t<input type="checkbox" id="{$this->xQuote($sInputName)}" class="chkfilterclass" name="{$this->xQuote($sInputName)}"{$sSelected}/><label for="{$this->xQuote($sInputName)}">{$this->xText($sClassName)}</label> EOF; } $HTML .= <<<EOF \t</fieldset> \t</div> EOF; return $HTML; }
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; }