2 namespace wcf\acp\form
;
3 use wcf\data\
object\type\ObjectTypeCache
;
4 use wcf\data\notice\NoticeAction
;
5 use wcf\data\notice\NoticeEditor
;
6 use wcf\form\AbstractForm
;
7 use wcf\system\condition\ConditionHandler
;
8 use wcf\system\exception\UserInputException
;
9 use wcf\system\language\I18nHandler
;
12 use wcf\util\StringUtil
;
15 * Shows the form to create a new notice.
17 * @author Matthias Schmidt
18 * @copyright 2001-2014 WoltLab GmbH
19 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
20 * @package com.woltlab.wcf
21 * @subpackage acp.form
22 * @category Community Framework
24 class NoticeAddForm
extends AbstractForm
{
26 * @see \wcf\page\AbstractPage::$activeMenuItem
28 public $activeMenuItem = 'wcf.acp.menu.link.notice.add';
31 * list pf pre-defined CSS class names
34 public $availableCssClassNames = array(
43 * name of the chosen CSS class name
46 public $cssClassName = '';
49 * custom CSS class name
52 public $customCssClassName = '';
55 * grouped notice condition object types
58 public $groupedConditionObjectTypes = array();
61 * 1 if the notice is disabled
64 public $isDisabled = 0;
67 * 1 if the notice is dismissible
70 public $isDismissible = 0;
73 * @see \wcf\page\AbstractPage::$neededPermissions
75 public $neededPermissions = array('admin.content.notice.canManageNotice');
81 public $noticeName = '';
84 * 1 if html is used in the notice text
87 public $noticeUseHtml = 0;
90 * order used to the show the notices
93 public $showOrder = 0;
96 * @see \wcf\page\IPage::assignVariables()
98 public function assignVariables() {
99 parent
::assignVariables();
101 I18nHandler
::getInstance()->assignVariables();
103 WCF
::getTPL()->assign(array(
105 'availableCssClassNames' => $this->availableCssClassNames
,
106 'cssClassName' => $this->cssClassName
,
107 'customCssClassName' => $this->customCssClassName
,
108 'isDisabled' => $this->isDisabled
,
109 'isDismissible' => $this->isDismissible
,
110 'groupedConditionObjectTypes' => $this->groupedConditionObjectTypes
,
111 'noticeName' => $this->noticeName
,
112 'noticeUseHtml' => $this->noticeUseHtml
,
113 'showOrder' => $this->showOrder
118 * @see \wcf\page\IPage::readData()
120 public function readData() {
121 $objectTypes = ObjectTypeCache
::getInstance()->getObjectTypes('com.woltlab.wcf.condition.notice');
122 foreach ($objectTypes as $objectType) {
123 if (!$objectType->conditionobject
) continue;
125 if (!isset($this->groupedConditionObjectTypes
[$objectType->conditionobject
])) {
126 $this->groupedConditionObjectTypes
[$objectType->conditionobject
] = array();
129 if ($objectType->conditiongroup
) {
130 if (!isset($this->groupedConditionObjectTypes
[$objectType->conditionobject
][$objectType->conditiongroup
])) {
131 $this->groupedConditionObjectTypes
[$objectType->conditionobject
][$objectType->conditiongroup
] = array();
134 $this->groupedConditionObjectTypes
[$objectType->conditionobject
][$objectType->conditiongroup
][$objectType->objectTypeID
] = $objectType;
137 $this->groupedConditionObjectTypes
[$objectType->conditionobject
][$objectType->objectTypeID
] = $objectType;
145 * @see \wcf\form\IForm::readFormParameters()
147 public function readFormParameters() {
148 parent
::readFormParameters();
150 I18nHandler
::getInstance()->readValues();
152 if (isset($_POST['cssClassName'])) $this->cssClassName
= StringUtil
::trim($_POST['cssClassName']);
153 if (isset($_POST['customCssClassName'])) $this->customCssClassName
= StringUtil
::trim($_POST['customCssClassName']);
154 if (isset($_POST['isDisabled'])) $this->isDisabled
= 1;
155 if (isset($_POST['isDismissible'])) $this->isDismissible
= 1;
156 if (isset($_POST['noticeName'])) $this->noticeName
= StringUtil
::trim($_POST['noticeName']);
157 if (isset($_POST['noticeUseHtml'])) $this->noticeUseHtml
= 1;
158 if (isset($_POST['showOrder'])) $this->showOrder
= intval($_POST['showOrder']);
160 foreach ($this->groupedConditionObjectTypes
as $groupedObjectTypes) {
161 foreach ($groupedObjectTypes as $objectTypes) {
162 if (is_array($objectTypes)) {
163 foreach ($objectTypes as $objectType) {
164 $objectType->getProcessor()->readFormParameters();
168 $objectTypes->getProcessor()->readFormParameters();
175 * @see \wcf\page\IPage::readParameters()
177 public function readParameters() {
178 parent
::readParameters();
180 I18nHandler
::getInstance()->register('notice');
184 * @see \wcf\form\IForm::save()
186 public function save() {
189 $this->objectAction
= new NoticeAction(array(), 'create', array(
190 'data' => array_merge($this->additionalFields
, array(
191 'cssClassName' => $this->cssClassName
== 'custom' ?
$this->customCssClassName
: $this->cssClassName
,
192 'isDisabled' => $this->isDisabled
,
193 'isDismissible' => $this->isDismissible
,
194 'notice' => I18nHandler
::getInstance()->isPlainValue('notice') ? I18nHandler
::getInstance()->getValue('notice') : '',
195 'noticeName' => $this->noticeName
,
196 'noticeUseHtml' => $this->noticeUseHtml
,
197 'showOrder' => $this->showOrder
200 $returnValues = $this->objectAction
->executeAction();
202 if (!I18nHandler
::getInstance()->isPlainValue('notice')) {
203 I18nHandler
::getInstance()->save('notice', 'wcf.notice.notice.notice'.$returnValues['returnValues']->noticeID
, 'wcf.notice', 1);
205 // update notice name
206 $noticeEditor = new NoticeEditor($returnValues['returnValues']);
207 $noticeEditor->update(array(
208 'notice' => 'wcf.notice.notice.notice'.$returnValues['returnValues']->noticeID
212 // transform conditions array into one-dimensional array
213 $conditions = array();
214 foreach ($this->groupedConditionObjectTypes
as $groupedObjectTypes) {
215 foreach ($groupedObjectTypes as $objectTypes) {
216 if (is_array($objectTypes)) {
217 $conditions = array_merge($conditions, $objectTypes);
220 $conditions[] = $objectTypes;
225 ConditionHandler
::getInstance()->createConditions($returnValues['returnValues']->noticeID
, $conditions);
230 $this->cssClassName
= '';
231 $this->customCssClassName
= '';
232 $this->isDisabled
= 0;
233 $this->isDismissible
= 0;
234 $this->noticeName
= '';
235 $this->noticeUseHtml
= 0;
236 $this->showOrder
= 0;
237 I18nHandler
::getInstance()->reset();
239 foreach ($conditions as $condition) {
240 $condition->getProcessor()->reset();
243 WCF
::getTPL()->assign('success', true);
247 * @see \wcf\form\IForm::validate()
249 public function validate() {
252 if (empty($this->noticeName
)) {
253 throw new UserInputException('noticeName');
256 if (!I18nHandler
::getInstance()->validateValue('notice')) {
257 if (I18nHandler
::getInstance()->isPlainValue('notice')) {
258 throw new UserInputException('notice');
261 throw new UserInputException('notice', 'multilingual');
265 // validate class name
266 if (empty($this->cssClassName
)) {
267 throw new UserInputException('cssClassName');
269 else if (!in_array($this->cssClassName
, $this->availableCssClassNames
)) {
270 throw new UserInputException('cssClassName', 'notValid');
272 else if ($this->cssClassName
== 'custom') {
273 if (empty($this->cssClassName
)) {
274 throw new UserInputException('cssClassName');
276 if (!Regex
::compile('^-?[_a-zA-Z]+[_a-zA-Z0-9-]+$')->match($this->customCssClassName
)) {
277 throw new UserInputException('cssClassName', 'notValid');
281 foreach ($this->groupedConditionObjectTypes
as $groupedObjectTypes) {
282 foreach ($groupedObjectTypes as $objectTypes) {
283 if (is_array($objectTypes)) {
284 foreach ($objectTypes as $objectType) {
285 $objectType->getProcessor()->validate();
289 $objectTypes->getProcessor()->validate();