Major overhaul of caching system (work in progress)
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / cronjob / CronjobEditor.class.php
... / ...
CommitLineData
1<?php
2namespace wcf\data\cronjob;
3use wcf\data\language\LanguageList;
4use wcf\data\DatabaseObjectEditor;
5use wcf\data\IEditableCachedObject;
6use wcf\system\cache\builder\CronjobCacheBuilder;
7use wcf\system\language\LanguageFactory;
8use 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 */
20class 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}