/** * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ public function rebuild(array $parameters) { $data = array('codes' => array(), 'countryCodes' => array(), 'languages' => array(), 'default' => 0, 'categories' => array(), 'categoryIDs' => array(), 'multilingualismEnabled' => false); // get languages $languageList = new LanguageList(); $languageList->readObjects(); $data['languages'] = $languageList->getObjects(); foreach ($languageList->getObjects() as $language) { // default language if ($language->isDefault) { $data['default'] = $language->languageID; } // multilingualism if ($language->hasContent) { $data['multilingualismEnabled'] = true; } // language code to language id $data['codes'][$language->languageCode] = $language->languageID; // country code to language id $data['countryCode'][$language->languageID] = $language->countryCode; } DatabaseObject::sort($data['languages'], 'languageName'); // get language categories $languageCategoryList = new LanguageCategoryList(); $languageCategoryList->readObjects(); foreach ($languageCategoryList->getObjects() as $languageCategory) { $data['categories'][$languageCategory->languageCategory] = $languageCategory; $data['categoryIDs'][$languageCategory->languageCategoryID] = $languageCategory->languageCategory; } return $data; }
/** * @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; }
/** * @see wcf\system\cache\ICacheBuilder::getData() */ public function getData(array $cacheResource) { $data = array('codes' => array(), 'countryCodes' => array(), 'languages' => array(), 'packages' => array(), 'default' => 0, 'categories' => array()); // get language to packages $sql = "SELECT \t\tpackage.languageID, package.packageID\n\t\t\tFROM\t\twcf" . WCF_N . "_language_to_package package\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_language language\n\t\t\tON\t\t(language.languageID = package.languageID)\n\t\t\tORDER BY\tlanguage.isDefault DESC,\n\t\t\t\t\tlanguage.languageCode ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); while ($row = $statement->fetchArray()) { // package to languages if (!isset($data['packages'][$row['packageID']])) { $data['packages'][$row['packageID']] = array(); } $data['packages'][$row['packageID']][] = $row['languageID']; } // get languages $languageList = new LanguageList(); $languageList->sqlLimit = 0; $languageList->readObjects(); $data['languages'] = $languageList->getObjects(); foreach ($languageList->getObjects() as $language) { // default language if ($language->isDefault) { $data['default'] = $language->languageID; } // language code to language id $data['codes'][$language->languageCode] = $language->languageID; // country code to language id $data['countryCode'][$language->languageID] = $language->countryCode; } // get language categories $languageCategoryList = new LanguageCategoryList(); $languageCategoryList->sqlLimit = 0; $languageCategoryList->readObjects(); foreach ($languageCategoryList->getObjects() as $languageCategory) { $data['categories'][$languageCategory->languageCategory] = $languageCategory; } return $data; }
/** * 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 )); }
/** * Saves localized style descriptions. * * @param \wcf\data\style\StyleEditor $styleEditor * @param array<string> $descriptions */ protected static function saveLocalizedDescriptions(StyleEditor $styleEditor, array $descriptions) { // localize package information $sql = "REPLACE INTO\twcf" . WCF_N . "_language_item\n\t\t\t\t\t(languageID, languageItem, languageItemValue, languageCategoryID, packageID)\n\t\t\tVALUES\t\t(?, ?, ?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); // get language list $languageList = new LanguageList(); $languageList->readObjects(); // workaround for WCFSetup if (!PACKAGE_ID) { $sql = "SELECT\t*\n\t\t\t\tFROM\twcf" . WCF_N . "_language_category\n\t\t\t\tWHERE\tlanguageCategory = ?"; $statement2 = WCF::getDB()->prepareStatement($sql); $statement2->execute(array('wcf.style')); $languageCategory = $statement2->fetchObject('wcf\\data\\language\\category\\LanguageCategory'); } else { $languageCategory = LanguageFactory::getInstance()->getCategory('wcf.style'); } foreach ($languageList as $language) { if (isset($descriptions[$language->languageCode])) { $statement->execute(array($language->languageID, 'wcf.style.styleDescription' . $styleEditor->styleID, $descriptions[$language->languageCode], $languageCategory->languageCategoryID, $styleEditor->packageID)); } } $styleEditor->update(array('styleDescription' => 'wcf.style.styleDescription' . $styleEditor->styleID)); }