| 1 | <?php |
| 2 | namespace wcf\data\cronjob; |
| 3 | use wcf\data\language\LanguageList; |
| 4 | use wcf\data\DatabaseObjectEditor; |
| 5 | use wcf\data\IEditableCachedObject; |
| 6 | use wcf\system\cache\builder\CronjobCacheBuilder; |
| 7 | use wcf\system\language\LanguageFactory; |
| 8 | use wcf\system\WCF; |
| 9 | |
| 10 | /** |
| 11 | * Provides functions to edit cronjobs. |
| 12 | * |
| 13 | * @author Alexander Ebert, Matthias Schmidt |
| 14 | * @copyright 2001-2013 WoltLab GmbH |
| 15 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
| 16 | * @package com.woltlab.wcf |
| 17 | * @subpackage data.cronjob |
| 18 | * @category Community Framework |
| 19 | */ |
| 20 | class CronjobEditor extends DatabaseObjectEditor implements IEditableCachedObject { |
| 21 | /** |
| 22 | * @see wcf\data\DatabaseObjectDecorator::$baseClass |
| 23 | */ |
| 24 | protected static $baseClass = 'wcf\data\cronjob\Cronjob'; |
| 25 | |
| 26 | /** |
| 27 | * @see wcf\data\IEditableObject::create() |
| 28 | */ |
| 29 | public static function create(array $parameters = array()) { |
| 30 | $descriptions = array(); |
| 31 | if (isset($parameters['description']) && is_array($parameters['description'])) { |
| 32 | if (count($parameters['description']) > 1) { |
| 33 | $descriptions = $parameters['description']; |
| 34 | $parameters['description'] = ''; |
| 35 | } |
| 36 | else { |
| 37 | $parameters['description'] = reset($parameters['description']); |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | $cronjob = parent::create($parameters); |
| 42 | |
| 43 | // save cronjob description |
| 44 | if (!empty($descriptions)) { |
| 45 | // set default value |
| 46 | if (isset($descriptions[''])) { |
| 47 | $defaultValue = $descriptions['']; |
| 48 | } |
| 49 | else if (isset($descriptions['en'])) { |
| 50 | // fallback to English |
| 51 | $defaultValue = $descriptions['en']; |
| 52 | } |
| 53 | else if (isset($descriptions[WCF::getLanguage()->getFixedLanguageCode()])) { |
| 54 | // fallback to the language of the current user |
| 55 | $defaultValue = $descriptions[WCF::getLanguage()->getFixedLanguageCode()]; |
| 56 | } |
| 57 | else { |
| 58 | // fallback to first description |
| 59 | $defaultValue = reset($descriptions); |
| 60 | } |
| 61 | |
| 62 | // fetch data directly from database during framework installation |
| 63 | if (!PACKAGE_ID) { |
| 64 | $sql = "SELECT * |
| 65 | FROM wcf".WCF_N."_language_category |
| 66 | WHERE languageCategory = ?"; |
| 67 | $statement = WCF::getDB()->prepareStatement($sql); |
| 68 | $statement->execute(array('wcf.acp.cronjob')); |
| 69 | $languageCategory = $statement->fetchObject('wcf\data\language\category\LanguageCategory'); |
| 70 | |
| 71 | $languages = new LanguageList(); |
| 72 | $languages->readObjects(); |
| 73 | } |
| 74 | else { |
| 75 | $languages = LanguageFactory::getInstance()->getLanguages(); |
| 76 | $languageCategory = LanguageFactory::getInstance()->getCategory('wcf.acp.cronjob'); |
| 77 | } |
| 78 | |
| 79 | $sql = "INSERT INTO wcf".WCF_N."_language_item |
| 80 | (languageID, languageItem, languageItemValue, languageCategoryID, packageID) |
| 81 | VALUES (?, ?, ?, ?, ?)"; |
| 82 | $statement = WCF::getDB()->prepareStatement($sql); |
| 83 | |
| 84 | foreach ($languages as $language) { |
| 85 | $value = $defaultValue; |
| 86 | if (isset($descriptions[$language->languageCode])) { |
| 87 | $value = $descriptions[$language->languageCode]; |
| 88 | } |
| 89 | |
| 90 | $statement->execute(array( |
| 91 | $language->languageID, |
| 92 | 'wcf.acp.cronjob.description.cronjob'.$cronjob->cronjobID, |
| 93 | $value, |
| 94 | $languageCategory->languageCategoryID, |
| 95 | $cronjob->packageID |
| 96 | )); |
| 97 | } |
| 98 | |
| 99 | // update cronjob |
| 100 | $cronjobEditor = new CronjobEditor($cronjob); |
| 101 | $cronjobEditor->update(array( |
| 102 | 'description' => 'wcf.acp.cronjob.description.cronjob'.$cronjob->cronjobID |
| 103 | )); |
| 104 | } |
| 105 | |
| 106 | return $cronjob; |
| 107 | } |
| 108 | |
| 109 | /** |
| 110 | * @see wcf\data\IEditableCachedObject::resetCache() |
| 111 | */ |
| 112 | public static function resetCache() { |
| 113 | CronjobCacheBuilder::getInstance()->reset(); |
| 114 | } |
| 115 | } |