public function __construct() { parent::__construct(); // accessible news categories $accessibleCategoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (!empty($accessibleCategoryIDs)) { $this->getConditionBuilder()->add('news.newsID IN (SELECT newsID FROM cms' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($accessibleCategoryIDs)); } else { $this->getConditionBuilder()->add('1=0'); } //get default settings if (!WCF::getSession()->getPermission('mod.cms.news.canModerateNews')) { $this->getConditionBuilder()->add('news.isDisabled = 0'); } if (!WCF::getSession()->getPermission('mod.cms.news.canModerateNews')) { $this->getConditionBuilder()->add('news.isDeleted = 0'); } //can view delayed news if (!WCF::getSession()->getPermission('user.cms.news.canViewDelayedNews')) { $this->getConditionBuilder()->add('news.isDisabled = ?', array(0)); } // language Filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $this->getConditionBuilder()->add('(news.languageID IN (?) OR news.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } }
/** * Creates the AccessibleNewsList object. */ public function __construct() { parent::__construct(); // accessible news categories $accessibleCategoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (!empty($accessibleCategoryIDs)) { $this->getConditionBuilder()->add('news.newsID IN (SELECT newsID FROM news' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($accessibleCategoryIDs)); } else { $this->getConditionBuilder()->add('1=0'); } // default conditions if (!WCF::getSession()->getPermission('mod.news.canReadDeactivatedNews')) { $this->getConditionBuilder()->add('news.isActive = 1'); } if (!WCF::getSession()->getPermission('mod.news.canReadDeletedNews')) { $this->getConditionBuilder()->add('news.isDeleted = 0'); } if (!WCF::getSession()->getPermission('mod.news.canReadFutureNews')) { if (WCF::getUser()->userID) { $this->getConditionBuilder()->add('(news.isPublished = 1 OR news.userID = ?)', array(WCF::getUser()->userID)); } else { $this->getConditionBuilder()->add('news.isPublished = 1'); } } // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $this->getConditionBuilder()->add('(news.languageID IN (?) OR news.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } }
/** * Loads the compiled language file. * Compiles the language file before if necessary. */ public function loadLanguage() { $filename = TMP_DIR . 'setup/lang/cache/' . $this->languageCode . '_wcf.setup.php'; if (!file_exists($filename)) { $xml = new XML(); $xml->load(TMP_DIR . 'setup/lang/setup_' . $this->languageCode . '.xml'); // get language items $categoriesToCache = array(); $items = $xml->xpath()->query('/ns:language/ns:category/ns:item'); foreach ($items as $item) { $categoriesToCache[] = array('name' => $item->getAttribute('name'), 'cdata' => $item->nodeValue); } // update language files here if (count($categoriesToCache) > 0) { $file = new File($filename); $file->write("<?php\n/**\n* WoltLab Community Framework\n* language: " . $this->languageCode . "\n* encoding: UTF-8\n* category: WCF Setup\n* generated at " . gmdate("r") . "\n* \n* DO NOT EDIT THIS FILE\n*/\n"); foreach ($categoriesToCache as $name) { $file->write("\$this->items['" . $name['name'] . "'] = '" . str_replace("'", "\\'", $name['cdata']) . "';\n"); // compile dynamic language variables if (strpos($name['cdata'], '{') !== false) { $compiledString = LanguageFactory::getInstance()->getScriptingCompiler()->compileString($name['name'], $name['cdata']); $file->write("\$this->dynamicItems['" . $name['name'] . "'] = '" . str_replace("'", "\\'", $compiledString['template']) . "';\n"); } } $file->write("?>"); $file->close(); } } include_once $filename; $this->setLocale(); }
/** * {@inheritdoc} */ public function update() { //get classes $baseClass = $this->className; $articleClass = $baseClass::getBaseClass(); //count attachments if (isset($this->parameters['attachmentHandler']) && $this->parameters['attachementHandler'] !== null) { $data['attachments'] = count($this->parameters['attachmentHandler']); } parent::update(); foreach ($this->objects as $article) { $this->objectIDs[] = $article->{$baseClass::getDatabaseTableIndexName()}; } foreach ($this->objects as $news) { if (isset($this->parameters['categoryIDs'])) { $news->updateCategoryIDs($this->parameters['categoryIDs']); } // update tags $tags = array(); if (isset($this->parameters['tags'])) { $tags = $this->parameters['tags']; unset($this->parameters['tags']); } if (!empty($tags)) { $languageID = !isset($this->parameters['data']['languageID']) || $this->parameters['data']['languageID'] === null ? LanguageFactory::getInstance()->getDefaultLanguageID() : $this->parameters['data']['languageID']; TagEngine::getInstance()->addObjectTags($articleClass::$objectType, $article->{$baseClass::getDatabaseTableIndexName()}, $tags, $languageID); } } }
/** * Creates a new ViewableUserActivityEventList object. */ public function __construct() { parent::__construct(); if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $this->getConditionBuilder()->add('(user_activity_event.languageID IN (?) OR user_activity_event.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } }
/** * Creates a new NewsCategoryList object. * * @param array<integer> $categoryIDs */ public function __construct(array $categoryIDs) { ViewableEntryList::__construct(); // accessible news categories if (!empty($categoryIDs)) { $this->getConditionBuilder()->add('news_entry_to_category.categoryID IN (?)', array($categoryIDs)); $this->getConditionBuilder()->add('news_entry.entryID = news_entry_to_category.entryID'); } else { $this->getConditionBuilder()->add('1=0'); } // default conditions if (!WCF::getSession()->getPermission('mod.news.canModerateEntry')) { $this->getConditionBuilder()->add('news_entry.isDisabled = 0'); } if (!WCF::getSession()->getPermission('mod.news.canViewDeletedEntry')) { $this->getConditionBuilder()->add('news_entry.isDeleted = 0'); } if (WCF::getUser()->userID) { $this->getConditionBuilder()->add('(news_entry.isPublished = 1 OR news_entry.userID = ?)', array(WCF::getUser()->userID)); } else { $this->getConditionBuilder()->add('news_entry.isPublished = 1'); } // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $this->getConditionBuilder()->add('(news_entry.languageID IN (?) OR news_entry.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } }
/** * @see \wcf\system\importer\IImporter::import() */ public function import($oldID, array $data, array $additionalData = array()) { $data['packageID'] = 1; // set temporary option name $data['optionName'] = StringUtil::getRandomID(); if ($data['optionType'] == 'boolean' || $data['optionType'] == 'integer') { if (isset($data['defaultValue'])) { $data['defaultValue'] = intval($data['defaultValue']); } } // create category $this->createCategory($data['categoryName']); // save option $action = new UserOptionAction(array(), 'create', array('data' => $data)); $returnValues = $action->executeAction(); $userOption = $returnValues['returnValues']; // update generic option name $editor = new UserOptionEditor($userOption); $editor->update(array('optionName' => 'option' . $userOption->optionID)); // save name $sql = "INSERT IGNORE INTO\twcf" . WCF_N . "_language_item\n\t\t\t\t\t\t(languageID, languageItem, languageItemValue, languageItemOriginIsSystem, languageCategoryID, packageID)\n\t\t\tVALUES\t\t\t(?, ?, ?, ?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(LanguageFactory::getInstance()->getDefaultLanguageID(), 'wcf.user.option.option' . $userOption->optionID, $additionalData['name'], 0, $this->languageCategoryID, 1)); ImportHandler::getInstance()->saveNewID('com.woltlab.wcf.user.option', $oldID, $userOption->optionID); return $userOption->optionID; }
/** * @see \wcf\data\IEditableObject::create() */ public static function create(array $parameters = array()) { $descriptions = array(); if (isset($parameters['description']) && is_array($parameters['description'])) { if (count($parameters['description']) > 1) { $descriptions = $parameters['description']; $parameters['description'] = ''; } else { $parameters['description'] = reset($parameters['description']); } } $cronjob = parent::create($parameters); // save cronjob description if (!empty($descriptions)) { // set default value if (isset($descriptions[''])) { $defaultValue = $descriptions['']; } else { if (isset($descriptions['en'])) { // fallback to English $defaultValue = $descriptions['en']; } else { if (isset($descriptions[WCF::getLanguage()->getFixedLanguageCode()])) { // fallback to the language of the current user $defaultValue = $descriptions[WCF::getLanguage()->getFixedLanguageCode()]; } else { // fallback to first description $defaultValue = reset($descriptions); } } } // fetch data directly from database during framework installation if (!PACKAGE_ID) { $sql = "SELECT\t*\n\t\t\t\t\tFROM\twcf" . WCF_N . "_language_category\n\t\t\t\t\tWHERE\tlanguageCategory = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array('wcf.acp.cronjob')); $languageCategory = $statement->fetchObject('wcf\\data\\language\\category\\LanguageCategory'); $languages = new LanguageList(); $languages->readObjects(); } else { $languages = LanguageFactory::getInstance()->getLanguages(); $languageCategory = LanguageFactory::getInstance()->getCategory('wcf.acp.cronjob'); } $sql = "INSERT INTO\twcf" . WCF_N . "_language_item\n\t\t\t\t\t\t(languageID, languageItem, languageItemValue, languageCategoryID, packageID)\n\t\t\t\tVALUES\t\t(?, ?, ?, ?, ?)\n\t\t\t\tON DUPLICATE KEY UPDATE languageItemValue = VALUES(languageItemValue)"; $statement = WCF::getDB()->prepareStatement($sql); foreach ($languages as $language) { $value = $defaultValue; if (isset($descriptions[$language->languageCode])) { $value = $descriptions[$language->languageCode]; } $statement->execute(array($language->languageID, 'wcf.acp.cronjob.description.cronjob' . $cronjob->cronjobID, $value, $languageCategory->languageCategoryID, $cronjob->packageID)); } // update cronjob $cronjobEditor = new CronjobEditor($cronjob); $cronjobEditor->update(array('description' => 'wcf.acp.cronjob.description.cronjob' . $cronjob->cronjobID)); } return $cronjob; }
/** * Contructs a new TagCloud object. * * @param array<integer> $languageIDs */ public function __construct(array $languageIDs = array()) { $this->languageIDs = $languageIDs; if (empty($this->languageIDs)) { $this->languageIDs = array_keys(LanguageFactory::getInstance()->getLanguages()); } // init cache $this->loadCache(); }
/** * @see \wcf\page\IPage::assignVariables() */ public function readData() { parent::readData(); foreach (static::$providerLocales as $locale) { $languageCode = substr($locale, 0, 2); if (\wcf\system\language\LanguageFactory::getInstance()->getLanguageByCode($languageCode)) { $this->availableLocales[$locale] = \wcf\system\WCF::getLanguage()->get('wcf.acp.faker.locale.' . $locale); } } }
/** * @see \wcf\form\IForm::save() */ public function save() { AbstractForm::save(); $editor = new LanguageEditor($this->language); $editor->update(array('countryCode' => mb_strtolower($this->countryCode), 'languageName' => $this->languageName, 'languageCode' => mb_strtolower($this->languageCode))); LanguageFactory::getInstance()->clearCache(); $this->saved(); // show success message WCF::getTPL()->assign('success', true); }
/** * @see \cms\system\content\type\ISearchableContentType::getSearchableData() */ public function getSearchableData(Content $content) { foreach (LanguageFactory::getInstance()->getLanguages() as $language) { $this->searchIndexData[$language->languageID] = array(); foreach ($this->searchableFields as $field) { $this->searchIndexData[$language->languageID][] = $language->get($content->{$field}); } $this->searchIndexData[$language->languageID] = implode("\n", $this->searchIndexData[$language->languageID]); } return $this->searchIndexData; }
/** * @see \wcf\system\dashboard\box\IDashboardBox::init() */ public function init(DashboardBox $box, IPage $page) { parent::init($box, $page); if (MODULE_TAGGING && WCF::getSession()->getPermission('user.tag.canViewTag') && WCF::getSession()->getPermission('user.news.canReadEntry')) { $languageIDs = array(); if (LanguageFactory::getInstance()->multilingualismEnabled()) { $languageIDs = WCF::getUser()->getLanguageIDs(); } $this->tagCloud = new TypedTagCloud('de.incendium.cms.news.entry', $languageIDs); } $this->fetched(); }
/** * @see \wcf\system\dashboard\box\IDashboardBox::init() */ public function init(DashboardBox $box, IPage $page) { parent::init($box, $page); if (MODULE_TAGGING) { $languageIDs = array(); if (LanguageFactory::getInstance()->multilingualismEnabled()) { $languageIDs = WCF::getUser()->getLanguageIDs(); } // get tag cloud for news entries $this->tagCloud = new TypedTagCloud('de.voolia.news.entry', $languageIDs); } $this->fetched(); }
/** * @inheritDoc */ protected function loadContent() { if (MODULE_TAGGING && WCF::getSession()->getPermission('user.tag.canViewTag') && WCF::getSession()->getPermission('user.filebase.canViewEntry')) { $languageIDs = []; if (LanguageFactory::getInstance()->multilingualismEnabled()) { $languageIDs = WCF::getUser()->getLanguageIDs(); } $tagCloud = new TypedTagCloud('de.incendium.filebase.entry', $languageIDs); $tags = $tagCloud->getTags(); if (!empty($tags)) { $this->content = WCF::getTPL()->fetch('tagCloudBox', 'wcf', ['tags' => $tags, 'taggableObjectType' => 'de.incendium.filebase.entry']); } } }
/** * @see \wcf\action\IAction::execute() */ public function execute() { parent::execute(); // reset stylesheets StyleHandler::resetStylesheets(); // delete language cache and compiled templates as well LanguageFactory::getInstance()->deleteLanguageCache(); // get package dirs CacheHandler::getInstance()->flushAll(); $this->executed(); if (!isset($_POST['noRedirect'])) { HeaderUtil::redirect(LinkHandler::getInstance()->getLink('CacheList')); } exit; }
/** * Uninstalls node components and returns next node. * * @param string $node * @return string */ public function uninstall($node) { $nodes = $this->nodeBuilder->getNodeData($node); // invoke node-specific actions foreach ($nodes as $data) { $nodeData = unserialize($data['nodeData']); switch ($data['nodeType']) { case 'package': $this->uninstallPackage($nodeData); break; case 'pip': $this->executePIP($nodeData); break; } } // mark node as completed $this->nodeBuilder->completeNode($node); $node = $this->nodeBuilder->getNextNode($node); // perform post-uninstall actions if ($node == '') { // update options.inc.php if uninstallation is completed OptionEditor::resetCache(); // clear cache CacheHandler::getInstance()->flushAll(); // reset language cache LanguageFactory::getInstance()->clearCache(); LanguageFactory::getInstance()->deleteLanguageCache(); // reset stylesheets StyleHandler::resetStylesheets(); // rebuild application paths ApplicationHandler::rebuild(); } if ($this->requireRestructureVersionTables) { $this->restructureVersionTables(); } // return next node return $node; }
/** * Calculates the number of entries. */ protected function initEntries() { $this->entries = array(); $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add('entry.isDisabled = ?', array(0)); $conditionBuilder->add('entry.isDeleted = ?', array(0)); // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(entry.languageID IN (?) OR entry.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } $sql = "SELECT\t\tCOUNT(*) AS count, entry_to_category.categoryID\n\t\t\tFROM\t\tlinklist" . WCF_N . "_entry entry\n\t\t\tLEFT JOIN\tlinklist" . WCF_N . "_entry_to_category entry_to_category\n\t\t\tON\t\t(entry_to_category.entryID = entry.entryID)\n\t\t\t" . $conditionBuilder . "\n\t\t\tGROUP BY\tentry_to_category.categoryID"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); while ($row = $statement->fetchArray()) { $this->entries[$row['categoryID']] = $row['count']; } }
public function getConditions(IForm $form = null) { $conditionBuilder = new PreparedStatementConditionBuilder(); // accessible category ids $categoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (empty($categoryIDs)) { throw new PermissionDeniedException(); } $conditionBuilder->add($this->getTableName() . '.newsID IN (SELECT newsID FROM cms' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($categoryIDs)); // default conditions $conditionBuilder->add($this->getTableName() . '.isDisabled = 0'); $conditionBuilder->add($this->getTableName() . '.isDeleted = 0'); // language if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(' . $this->getTableName() . '.languageID IN (?) OR ' . $this->getTableName() . '.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } return $conditionBuilder; }
/** * @see \wcf\system\importer\IImporter::import() */ public function import($oldID, array $data, array $additionalData = array()) { // get user id $data['userID'] = ImportHandler::getInstance()->getNewID('com.woltlab.wcf.user', $data['userID']); // get news id if (is_numeric($oldID)) { $news = new News($oldID); if (!$news->newsID) { $data['newsID'] = $oldID; } } // get news categories $categoryIDs = array(); if (!empty($additionalData['categories'])) { foreach ($additionalData['categories'] as $oldCategoryID) { $newCategoryID = ImportHandler::getInstance()->getNewID('de.voolia.news.category', $oldCategoryID); if ($newCategoryID) { $categoryIDs[] = $newCategoryID; } } } // work-around for unknown username if (empty($data['username'])) { $user = new User($data['userID']); $data['username'] = $user->username; } // get language by languageCode if (!empty($additionalData['languageCode'])) { if (($language = LanguageFactory::getInstance()->getLanguageByCode($additionalData['languageCode'])) !== null) { $data['languageID'] = $language->languageID; } } // create news $news = NewsEditor::create($data); $newsEditor = new NewsEditor($news); // save the tags from news entry if (!empty($additionalData['tags'])) { TagEngine::getInstance()->addObjectTags('de.voolia.news.entry', $news->newsID, $additionalData['tags'], $news->languageID ?: LanguageFactory::getInstance()->getDefaultLanguageID()); } // update news categories $newsEditor->updateCategoryIDs($categoryIDs); ImportHandler::getInstance()->saveNewID('de.voolia.news.entry', $oldID, $news->newsID); return $news->newsID; }
public function getNotifications() { if ($this->notifications === null) { $this->notifications = 0; if (WCF::getUser()->userID) { // load storage data UserStorageHandler::getInstance()->loadStorage(array(WCF::getUser()->userID)); // get ids $data = UserStorageHandler::getInstance()->getStorage(array(WCF::getUser()->userID), 'cmsUnreadNews'); // cache does not exist or is outdated if ($data[WCF::getUser()->userID] === null) { $categoryIDs = NewsCategory::getAccessibleCategoryIDs(); // removed ignored boards foreach ($categoryIDs as $key => $categoryID) { $category = CategoryHandler::getInstance()->getCategory($categoryID); } if (!empty($categoryIDs)) { $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add("news.lastChangeTime > ?", array(VisitTracker::getInstance()->getVisitTime('de.codequake.cms.news'))); $conditionBuilder->add("news.newsID IN (SELECT newsID FROM cms" . WCF_N . "_news_to_category WHERE categoryID IN (?))", array($categoryIDs)); $conditionBuilder->add("news.isDeleted = 0 AND news.isDisabled = 0"); $conditionBuilder->add("tracked_visit.visitTime IS NULL"); // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(news.languageID IN (?) OR news.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } $sql = "SELECT\t\tCOUNT(*) AS count\n\t\t\t\t\t\t\tFROM\t\tcms" . WCF_N . "_news news\n\t\t\t\t\t\t\tLEFT JOIN\twcf" . WCF_N . "_tracked_visit tracked_visit\n\t\t\t\t\t\t\tON\t\t(tracked_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('de.codequake.cms.news') . " AND tracked_visit.objectID = news.newsID AND tracked_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\t\t\t\t" . $conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); $row = $statement->fetchArray(); $this->notifications = $row['count']; } // update storage data UserStorageHandler::getInstance()->update(WCF::getUser()->userID, 'cmsUnreadNews', $this->notifications); } else { $this->notifications = $data[WCF::getUser()->userID]; } } } return $this->notifications; }
/** * Creates a new AccessibleFileList object. */ public function __construct() { parent::__construct(); if ($this->applyCategoryFilter) { $accessibleCategoryIDs = LinklistCategory::getAccessibleCategoryIDs(); if (!empty($accessibleCategoryIDs)) { $this->getConditionBuilder()->add('entry.entryID IN (SELECT entryID FROM linklist' . WCF_N . '_entry_to_category WHERE categoryID IN (?))', array($accessibleCategoryIDs)); } else { $this->getConditionBuilder()->add('1=0'); } } if (!WCF::getSession()->getPermission('mod.linklist.canModerateEntry')) { $this->getConditionBuilder()->add('entry.isDisabled = 0'); } if (!WCF::getSession()->getPermission('mod.linklist.canViewDeletedEntry')) { $this->getConditionBuilder()->add('entry.isDeleted = 0'); } // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $this->getConditionBuilder()->add('(entry.languageID IN (?) OR entry.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } }
public function import($oldID, array $data, array $additionalData = array()) { $data['userID'] = ImportHandler::getInstance()->getNewID('com.woltlab.wcf.user', $data['userID']); if (!empty($additionalData['languageCode'])) { if (($language = LanguageFactory::getInstance()->getLanguageByCode($additionalData['languageCode'])) !== null) { $data['languageID'] = $language->languageID; } } if (is_numeric($oldID)) { $news = new News($oldID); if (!$news->newsID) { $data['newsID'] = $oldID; } } // save categories $categoryIDs = array(); if (!empty($additionalData['categories'])) { foreach ($additionalData['categories'] as $oldCategoryID) { $newCategoryID = ImportHandler::getInstance()->getNewID('de.codequake.cms.category.news', $oldCategoryID); if ($newCategoryID) { $categoryIDs[] = $newCategoryID; } } } if (empty($categoryIDs)) { $categoryIDs[] = $this->getImportCategoryID(); } $action = new NewsAction(array(), 'create', array('data' => $data, 'categoryIDs' => $categoryIDs)); $returnValues = $action->executeAction(); $newID = $returnValues['returnValues']->newsID; $news = new News($newID); // save tags if (!empty($additionalData['tags'])) { TagEngine::getInstance()->addObjectTags('de.codequake.cms.news', $news->newsID, $additionalData['tags'], $news->languageID ?: LanguageFactory::getInstance()->getDefaultLanguageID()); } ImportHandler::getInstance()->saveNewID('de.codequake.cms.news', $oldID, $news->newsID); return $news->newsID; }
/** * @see wcf\action\IAction::execute() */ public function execute() { parent::execute(); // delete language cache and compiled templates as well LanguageFactory::getInstance()->deleteLanguageCache(); $conditions = new PreparedStatementConditionBuilder(); $conditions->add("packageID IN (?)", array(PackageDependencyHandler::getInstance()->getDependencies())); $conditions->add("isApplication = ?", array(1)); // get package dirs $sql = "SELECT\tpackageDir\n\t\t\tFROM\twcf" . WCF_N . "_package\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); while ($row = $statement->fetchArray()) { $packageDir = FileUtil::getRealPath(WCF_DIR . $row['packageDir']); try { CacheHandler::getInstance()->clear($packageDir . 'cache', '*.php'); } catch (SystemException $e) { } } $this->executed(); HeaderUtil::redirect(LinkHandler::getInstance()->getLink('CacheList')); exit; }
/** * Calculates the number of unread news. */ protected function initUnreadNews() { $this->unreadNews = array(); if (WCF::getUser()->userID) { // add default conditions $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add('news.time > ?', array(VisitTracker::getInstance()->getVisitTime('de.voolia.news.entry'))); $conditionBuilder->add('news.isActive = 1'); $conditionBuilder->add('news.isDeleted = 0'); $conditionBuilder->add('news.isPublished = 1'); $conditionBuilder->add('tracked_visit.visitTime IS NULL'); // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(news.languageID IN (?) OR news.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } $sql = "SELECT \t\tCOUNT(*) AS count, news_to_category.categoryID\n\t\t\t\tFROM \t\tnews" . WCF_N . "_news news\n\t\t\t\tLEFT JOIN \twcf" . WCF_N . "_tracked_visit tracked_visit ON (tracked_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('de.voolia.news.entry') . " AND tracked_visit.objectID = news.newsID AND tracked_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\tLEFT JOIN \tnews" . WCF_N . "_news_to_category news_to_category ON (news_to_category.newsID = news.newsID)\n\t\t\t\t" . $conditionBuilder . "\n\t\t\t\tGROUP BY\tnews_to_category.categoryID"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); while ($row = $statement->fetchArray()) { $this->unreadNews[$row['categoryID']] = $row['count']; } } }
/** * @see wcf\action\IAction::execute() */ public function execute() { //parent::execute(); //!!! $this->readParameters(); //!!! // set active menu item (for error messages) //PageMenu::getInstance()->setActiveMenuItem('wbb.header.menu.board'); // build conditions $sql = ''; $conditionBuilder = new PreparedStatementConditionBuilder(); switch ($this->mode) { case 'unreadPosts': $conditionBuilder->add('thread.boardID IN (?)', array($this->boardIDs)); $conditionBuilder->add('thread.lastPostTime > ?', array(VisitTracker::getInstance()->getVisitTime('com.woltlab.wbb.thread'))); $conditionBuilder->add('thread.isDeleted = 0'); $conditionBuilder->add('thread.isDisabled = 0'); $conditionBuilder->add('thread.movedThreadID IS NULL'); $conditionBuilder->add('(thread.lastPostTime > tracked_thread_visit.visitTime OR tracked_thread_visit.visitTime IS NULL)'); $conditionBuilder->add('(thread.lastPostTime > tracked_board_visit.visitTime OR tracked_board_visit.visitTime IS NULL)'); if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(thread.languageID IN (?) OR thread.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } $conditionBuilder->add('thread.isAnnouncement = 0'); //!!! $sql = "SELECT\t\tthread.threadID\n\t\t\t\t\tFROM\t\twbb" . WCF_N . "_thread thread\n\t\t\t\t\tLEFT JOIN\twcf" . WCF_N . "_tracked_visit tracked_thread_visit\n\t\t\t\t\tON\t\t(tracked_thread_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('com.woltlab.wbb.thread') . " AND tracked_thread_visit.objectID = thread.threadID AND tracked_thread_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\t\tLEFT JOIN\twcf" . WCF_N . "_tracked_visit tracked_board_visit\n\t\t\t\t\tON\t\t(tracked_board_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('com.woltlab.wbb.board') . " AND tracked_board_visit.objectID = thread.boardID AND tracked_board_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\t\t" . $conditionBuilder . "\n\t\t\t\t\tORDER BY\tthread.lastPostTime DESC"; $exttMbqSqlCount = "SELECT\t\tcount(thread.threadID) as totalNum\n\t\t\t\t\tFROM\t\twbb" . WCF_N . "_thread thread\n\t\t\t\t\tLEFT JOIN\twcf" . WCF_N . "_tracked_visit tracked_thread_visit\n\t\t\t\t\tON\t\t(tracked_thread_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('com.woltlab.wbb.thread') . " AND tracked_thread_visit.objectID = thread.threadID AND tracked_thread_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\t\tLEFT JOIN\twcf" . WCF_N . "_tracked_visit tracked_board_visit\n\t\t\t\t\tON\t\t(tracked_board_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('com.woltlab.wbb.board') . " AND tracked_board_visit.objectID = thread.boardID AND tracked_board_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\t\t" . $conditionBuilder; break; /* case 'undoneThreads': $boardIDs = array(); foreach ($this->boardIDs as $boardID) { if (BoardCache::getInstance()->getBoard($boardID)->enableMarkingAsDone) $boardIDs[] = $boardID; } if (empty($boardIDs)) { throw new NamedUserException(WCF::getLanguage()->getDynamicVariable('wcf.search.error.noMatches', array('query' => ''))); } $conditionBuilder->add('thread.boardID IN (?)', array($boardIDs)); $conditionBuilder->add('thread.isDone = 0'); $conditionBuilder->add('thread.isDeleted = 0'); $conditionBuilder->add('thread.isDisabled = 0'); $conditionBuilder->add('thread.movedThreadID IS NULL'); if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(thread.languageID IN (?) OR thread.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } $sql = "SELECT thread.threadID FROM wbb".WCF_N."_thread thread ".$conditionBuilder." ORDER BY thread.lastPostTime DESC"; break; */ } // build search hash $searchHash = StringUtil::getHash($sql); // execute query $matches = array(); $statement = WCF::getDB()->prepareStatement($sql, $this->exttMbqNumPerPage, $this->exttMbqStartNum); $statement->execute($conditionBuilder->getParameters()); while ($row = $statement->fetchArray()) { $matches[] = array('objectID' => $row['threadID'], 'objectType' => 'com.woltlab.wbb.post'); } //get total count $exttMbqStatementCount = WCF::getDB()->prepareStatement($exttMbqSqlCount); $exttMbqStatementCount->execute($conditionBuilder->getParameters()); while ($exttMbqRecord = $exttMbqStatementCount->fetchArray()) { $exttMbqTotal = $exttMbqRecord['totalNum']; } // check result /* if (!count($matches)) { throw new NamedUserException(WCF::getLanguage()->getDynamicVariable('wcf.search.error.noMatches', array('query' => ''))); } */ // save result in database $searchData = array('packageID' => PACKAGE_ID, 'query' => '', 'results' => $matches, 'additionalData' => array('com.woltlab.wbb.post' => array('findThreads' => 1)), 'sortOrder' => 'DESC', 'sortField' => 'time', 'objectTypes' => array('com.woltlab.wbb.post')); $searchData = serialize($searchData); $search = SearchEditor::create(array('userID' => WCF::getUser()->userID ?: null, 'searchData' => $searchData, 'searchTime' => TIME_NOW, 'searchType' => 'messages', 'searchHash' => $searchHash)); // forward to result page //HeaderUtil::redirect(LinkHandler::getInstance()->getLink('SearchResult', array('id' => $search->searchID))); //exit; $exttMbqRetIds = array(); foreach ($matches as $exttMbqTopicId) { $exttMbqRetIds[] = $exttMbqTopicId['objectID']; } return array('total' => $exttMbqTotal, 'topicIds' => $exttMbqRetIds); }
/** * @see wcf\page\IPage::assignVariables() */ public function assignVariables() { parent::assignVariables(); WCF::getTPL()->assign(array( 'username' => $this->username, 'email' => $this->email, 'groupIDArray' => $this->groupIDArray, 'languageIDArray' => $this->languageIDArray, 'invertGroupIDs' => $this->invertGroupIDs, 'availableGroups' => $this->availableGroups, 'availableLanguages' => LanguageFactory::getInstance()->getLanguages(), 'options' => $this->options, 'availableActions' => $this->availableActions, // assign to group 'assignToGroupIDArray' => $this->assignToGroupIDArray, // export mail address 'separator' => $this->separator, 'textSeparator' => $this->textSeparator, 'fileType' => $this->fileType, // send mail 'subject' => $this->subject, 'text' => $this->text, 'from' => $this->from, 'enableHTML' => $this->enableHTML )); }
/** * Assigns element values to template. Using request data once reading * initial database data is explicitly disallowed. * * @param boolean $useRequestData */ public function assignVariables($useRequestData = true) { $elementValues = array(); $elementValuesI18n = array(); foreach ($this->elementIDs as $elementID) { $value = ''; $i18nValues = array(); // use POST values instead of querying database if ($useRequestData) { if ($this->isPlainValue($elementID)) { $value = $this->getValue($elementID); } else { if ($this->hasI18nValues($elementID)) { $i18nValues = $this->i18nValues[$elementID]; // encoding the entries for javascript foreach ($i18nValues as $languageID => $value) { $i18nValues[$languageID] = StringUtil::encodeJS(StringUtil::unifyNewlines($value)); } } else { $i18nValues = array(); } } } else { $isI18n = Regex::compile('^' . $this->elementOptions[$elementID]['pattern'] . '$')->match($this->elementOptions[$elementID]['value']); if (!$isI18n) { // check if it's a regular language variable $isI18n = Regex::compile('^([a-zA-Z0-9-_]+\\.)+[a-zA-Z0-9-_]+$')->match($this->elementOptions[$elementID]['value']); } if ($isI18n) { // use i18n values from language items $sql = "SELECT\tlanguageID, languageItemValue\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_language_item\n\t\t\t\t\t\tWHERE\tlanguageItem = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->elementOptions[$elementID]['value'])); while ($row = $statement->fetchArray()) { $languageItemValue = StringUtil::unifyNewlines($row['languageItemValue']); $i18nValues[$row['languageID']] = StringUtil::encodeJS($languageItemValue); if ($row['languageID'] == LanguageFactory::getInstance()->getDefaultLanguageID()) { $value = $languageItemValue; } } // item appeared to be a language item but either is not or does not exist if (empty($i18nValues) && empty($value)) { $value = $this->elementOptions[$elementID]['value']; } } else { // use data provided by setOptions() $value = $this->elementOptions[$elementID]['value']; } } $elementValues[$elementID] = $value; $elementValuesI18n[$elementID] = $i18nValues; } WCF::getTPL()->assign(array('availableLanguages' => $this->availableLanguages, 'i18nPlainValues' => $elementValues, 'i18nValues' => $elementValuesI18n)); }
/** * Saves the localized package infos. * * @todo license and readme */ protected function saveLocalizedPackageInfos() { $package = new Package($this->queue->packageID); // localize package information $sql = "INSERT INTO wcf".WCF_N."_language_item (languageID, languageItem, languageItemValue, languageCategoryID, packageID) VALUES (?, ?, ?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); // get language list $languageList = new LanguageList(); $languageList->readObjects(); // workaround for WCFSetup if (!PACKAGE_ID) { $sql = "SELECT * FROM wcf".WCF_N."_language_category WHERE languageCategory = ?"; $statement2 = WCF::getDB()->prepareStatement($sql); $statement2->execute(array('wcf.acp.package')); $languageCategory = $statement2->fetchObject('wcf\data\language\category\LanguageCategory'); } else { $languageCategory = LanguageFactory::getInstance()->getCategory('wcf.acp.package'); } // save package name $this->saveLocalizedPackageInfo($statement, $languageList, $languageCategory, $package, 'packageName'); // save package description $this->saveLocalizedPackageInfo($statement, $languageList, $languageCategory, $package, 'packageDescription'); // update description and name $packageEditor = new PackageEditor($package); $packageEditor->update(array( 'packageDescription' => 'wcf.acp.package.packageDescription.package'.$this->queue->packageID, 'packageName' => 'wcf.acp.package.packageName.package'.$this->queue->packageID )); }
/** * @see \wcf\system\condition\ICondition::validate() */ public function validate() { foreach ($this->languageIDs as $languageID) { if (LanguageFactory::getInstance()->getLanguage($languageID) === null) { $this->errorMessage = 'wcf.global.form.error.noValidSelection'; throw new UserInputException('languageIDs', 'noValidSelection'); } } }