/** * @see \wcf\page\IPage::readData() */ public function readData() { parent::readData(); // get languages $this->availableLanguages = LanguageFactory::getInstance()->getLanguages(); // get categories $languageCategoryList = new LanguageCategoryList(); $languageCategoryList->readObjects(); $this->availableLanguageCategories = $languageCategoryList->getObjects(); // check parameters if (!isset($this->availableLanguages[$this->languageID])) { $this->languageID = key($this->availableLanguages); } if ($this->languageCategoryID && !isset($this->availableLanguageCategories[$this->languageCategoryID])) { $this->languageCategoryID = 0; } // get items $this->languageItemList = new LanguageItemList(); $this->languageItemList->getConditionBuilder()->add('languageID = ?', array($this->languageID)); if ($this->languageCategoryID) { $this->languageItemList->getConditionBuilder()->add('languageCategoryID = ?', array($this->languageCategoryID)); } if ($this->languageItem) { $this->languageItemList->getConditionBuilder()->add('languageItem LIKE ?', array('%' . $this->languageItem . '%')); } if ($this->languageItemValue) { $this->languageItemList->getConditionBuilder()->add('((languageUseCustomValue = 0 AND languageItemValue LIKE ?) OR languageCustomItemValue LIKE ?)', array('%' . $this->languageItemValue . '%', '%' . $this->languageItemValue . '%')); } if ($this->hasCustomValue) { $this->languageItemList->getConditionBuilder()->add("languageCustomItemValue IS NOT NULL"); } $this->languageItemList->sqlLimit = 100; if (!empty($_POST)) { $this->count = $this->languageItemList->countObjects(); $maxPages = ceil($this->count / 100); $this->pageNo = max(min($this->pageNo, $maxPages), 1); if ($this->pageNo > 1) { $this->languageItemList->sqlOffset = ($this->pageNo - 1) * 100; } } $this->languageItemList->readObjects(); }
/** * Updates the language items of a language category. * * @param array $items * @param \wcf\data\language\category\LanguageCategory $category * @param integer $packageID * @param array $useCustom */ public function updateItems(array $items, LanguageCategory $category, $packageID = PACKAGE_ID, array $useCustom = array()) { if (empty($items)) { return; } // find existing language items $languageItemList = new LanguageItemList(); $languageItemList->getConditionBuilder()->add("language_item.languageItem IN (?)", array(array_keys($items))); $languageItemList->getConditionBuilder()->add("languageID = ?", array($this->languageID)); $languageItemList->readObjects(); foreach ($languageItemList->getObjects() as $languageItem) { $languageItemEditor = new LanguageItemEditor($languageItem); $languageItemEditor->update(array('languageCustomItemValue' => $items[$languageItem->languageItem], 'languageUseCustomValue' => isset($useCustom[$languageItem->languageItem]) ? 1 : 0)); // remove updated items, leaving items to be created within unset($items[$languageItem->languageItem]); } // create remaining items if (!empty($items)) { // bypass LanguageItemEditor::create() for performance reasons $sql = "INSERT INTO\twcf" . WCF_N . "_language_item\n\t\t\t\t(languageID, languageItem, languageItemValue, languageItemOriginIsSystem, languageCategoryID, packageID)\n\t\t\t\tVALUES\t\t(?, ?, ?, ?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); foreach ($items as $itemName => $itemValue) { $statement->execute(array($this->languageID, $itemName, $itemValue, 0, $category->languageCategoryID, $packageID)); } } // update the relevant language files self::deleteLanguageFiles($this->languageID, $category->languageCategory, $packageID); // delete relevant template compilations $this->deleteCompiledTemplates(); }