Major overhaul of caching system (work in progress)
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / cronjob / CronjobEditor.class.php
CommitLineData
11ade432
AE
1<?php
2namespace wcf\data\cronjob;
099c2fd2 3use wcf\data\language\LanguageList;
11ade432 4use wcf\data\DatabaseObjectEditor;
b522d4f1 5use wcf\data\IEditableCachedObject;
b401cd0d 6use wcf\system\cache\builder\CronjobCacheBuilder;
099c2fd2
MS
7use wcf\system\language\LanguageFactory;
8use wcf\system\WCF;
11ade432
AE
9
10/**
11 * Provides functions to edit cronjobs.
12 *
099c2fd2 13 * @author Alexander Ebert, Matthias Schmidt
b401cd0d 14 * @copyright 2001-2013 WoltLab GmbH
11ade432
AE
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package com.woltlab.wcf
17 * @subpackage data.cronjob
9f959ced 18 * @category Community Framework
11ade432 19 */
b522d4f1 20class CronjobEditor extends DatabaseObjectEditor implements IEditableCachedObject {
11ade432 21 /**
b522d4f1 22 * @see wcf\data\DatabaseObjectDecorator::$baseClass
11ade432
AE
23 */
24 protected static $baseClass = 'wcf\data\cronjob\Cronjob';
25
099c2fd2
MS
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();
099c2fd2
MS
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
11ade432 109 /**
9f959ced 110 * @see wcf\data\IEditableCachedObject::resetCache()
11ade432
AE
111 */
112 public static function resetCache() {
b401cd0d 113 CronjobCacheBuilder::getInstance()->reset();
11ade432
AE
114 }
115}