Merge branch '2.0'
[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\AbstractDatabaseObjectAction::create()
42 */
43 public function create() {
44 $smiley = parent::create();
45
46 if (!empty($this->parameters['fileLocation'])) {
47 $smileyFilename = 'smiley'.$smiley->smileyID.'.'.mb_strtolower(mb_substr($this->parameters['fileLocation'], mb_strrpos($this->parameters['fileLocation'], '.') + 1));
48 @rename($this->parameters['fileLocation'], WCF_DIR.'images/smilies/'.$smileyFilename);
49
50 $smileyEditor = new SmileyEditor($smiley);
51 $smileyEditor->update(array(
52 'smileyPath' => 'images/smilies/'.$smileyFilename
53 ));
54
55 $smiley = new Smiley($smiley->smileyID);
56 }
57
58 return $smiley;
59 }
60
61 /**
62 * @see \wcf\data\AbstractDatabaseObjectAction::update()
63 */
64 public function update() {
65 if (empty($this->objects)) {
66 $this->readObjects();
67 }
68
69 if (count($this->objects) == 1 && !empty($this->parameters['fileLocation'])) {
70 $smiley = reset($this->objects);
71 $smileyFilename = 'smiley'.$smiley->smileyID.'.'.mb_strtolower(mb_substr($this->parameters['fileLocation'], mb_strrpos($this->parameters['fileLocation'], '.') + 1));
72 @rename($this->parameters['fileLocation'], WCF_DIR.'images/smilies/'.$smileyFilename);
73
74 $this->parameters['data']['smileyPath'] = 'images/smilies/'.$smileyFilename;
75 }
76
77 parent::update();
78 }
79
80 /**
81 * @see \wcf\data\ISortableAction::validateUpdatePosition()
82 */
83 public function validateUpdatePosition() {
84 // validate permissions
85 if (is_array($this->permissionsUpdate) && count($this->permissionsUpdate)) {
86 WCF::getSession()->checkPermissions($this->permissionsUpdate);
87 }
88 else {
89 throw new PermissionDeniedException();
90 }
91
92 if (!isset($this->parameters['data']['structure'])) {
93 throw new UserInputException('structure');
94 }
95
96 $this->readInteger('offset', true, 'data');
97 }
98
99 /**
100 * @see \wcf\data\ISortableAction::updatePosition()
101 */
102 public function updatePosition() {
103 $smileyList = new SmileyList();
104 $smileyList->readObjects();
105
106 $i = $this->parameters['data']['offset'];
107 WCF::getDB()->beginTransaction();
108 foreach ($this->parameters['data']['structure'][0] as $smileyID) {
109 $smiley = $smileyList->search($smileyID);
110 if ($smiley === null) continue;
111
112 $editor = new SmileyEditor($smiley);
113 $editor->update(array('showOrder' => $i++));
114 }
115 WCF::getDB()->commitTransaction();
116 }
117 }