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()));
     }
 }
Ejemplo n.º 3
0
 /**
  * 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()));
     }
 }
Ejemplo n.º 7
0
 /**
  * @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;
 }
Ejemplo n.º 8
0
 /**
  * @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;
 }
Ejemplo n.º 9
0
 /**
  * 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);
         }
     }
 }
Ejemplo n.º 11
0
 /**
  * @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']);
         }
     }
 }
Ejemplo n.º 16
0
 /**
  * @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'];
     }
 }
Ejemplo n.º 19
0
 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()));
     }
 }
Ejemplo n.º 23
0
 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;
 }
Ejemplo n.º 24
0
 /**
  * @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);
 }
Ejemplo n.º 27
0
	/**
	 * @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
		));
	}
Ejemplo n.º 28
0
 /**
  * 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
		));
	}
Ejemplo n.º 30
0
 /**
  * @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');
         }
     }
 }