Fixed time zone calculation issue
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / smiley / SmileyAction.class.php
1 <?php
2 namespace wcf\data\smiley;
3 use wcf\data\AbstractDatabaseObjectAction;
4 use wcf\data\ISortableAction;
5 use wcf\system\exception\PermissionDeniedException;
6 use wcf\system\exception\UserInputException;
7 use wcf\system\WCF;
8
9 /**
10 * Executes smiley-related actions.
11 *
12 * @author Alexander Ebert
13 * @copyright 2001-2014 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
15 * @package com.woltlab.wcf
16 * @subpackage data.smiley
17 * @category Community Framework
18 */
19 class SmileyAction extends AbstractDatabaseObjectAction implements ISortableAction {
20 /**
21 * @see \wcf\data\AbstractDatabaseObjectAction::$className
22 */
23 protected $className = 'wcf\data\smiley\SmileyEditor';
24
25 /**
26 * @see \wcf\data\AbstractDatabaseObjectAction::$permissionsDelete
27 */
28 protected $permissionsDelete = array('admin.content.smiley.canManageSmiley');
29
30 /**
31 * @see \wcf\data\AbstractDatabaseObjectAction::$permissionsUpdate
32 */
33 protected $permissionsUpdate = array('admin.content.smiley.canManageSmiley');
34
35 /**
36 * @see \wcf\data\AbstractDatabaseObjectAction::$requireACP
37 */
38 protected $requireACP = array('delete', 'update', 'updatePosition');
39
40 /**
41 * @see \wcf\data\ISortableAction::validateUpdatePosition()
42 */
43 public function validateUpdatePosition() {
44 // validate permissions
45 if (is_array($this->permissionsUpdate) && count($this->permissionsUpdate)) {
46 WCF::getSession()->checkPermissions($this->permissionsUpdate);
47 }
48 else {
49 throw new PermissionDeniedException();
50 }
51
52 if (!isset($this->parameters['data']['structure'])) {
53 throw new UserInputException('structure');
54 }
55
56 $this->readInteger('offset', true, 'data');
57 }
58
59 /**
60 * @see \wcf\data\ISortableAction::updatePosition()
61 */
62 public function updatePosition() {
63 $smileyList = new SmileyList();
64 $smileyList->readObjects();
65
66 $i = $this->parameters['data']['offset'];
67 WCF::getDB()->beginTransaction();
68 foreach ($this->parameters['data']['structure'][0] as $smileyID) {
69 $smiley = $smileyList->search($smileyID);
70 if ($smiley === null) continue;
71
72 $editor = new SmileyEditor($smiley);
73 $editor->update(array('showOrder' => $i++));
74 }
75 WCF::getDB()->commitTransaction();
76 }
77 }