Commit | Line | Data |
---|---|---|
dcc2332d MW |
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 | |
ca4ba303 | 13 | * @copyright 2001-2014 WoltLab GmbH |
dcc2332d | 14 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
f4f05aa5 | 15 | * @package com.woltlab.wcf |
dcc2332d MW |
16 | * @subpackage data.smiley |
17 | * @category Community Framework | |
18 | */ | |
19 | class SmileyAction extends AbstractDatabaseObjectAction implements ISortableAction { | |
20 | /** | |
0ad90fc3 | 21 | * @see \wcf\data\AbstractDatabaseObjectAction::$className |
dcc2332d MW |
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 | ||
bae8dd1e | 35 | /** |
0ad90fc3 | 36 | * @see \wcf\data\AbstractDatabaseObjectAction::$requireACP |
bae8dd1e AE |
37 | */ |
38 | protected $requireACP = array('delete', 'update', 'updatePosition'); | |
39 | ||
2935bc94 MS |
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 | ||
dcc2332d | 80 | /** |
0ad90fc3 | 81 | * @see \wcf\data\ISortableAction::validateUpdatePosition() |
dcc2332d MW |
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 | /** | |
0ad90fc3 | 100 | * @see \wcf\data\ISortableAction::updatePosition() |
dcc2332d MW |
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; | |
2935bc94 | 111 | |
dcc2332d MW |
112 | $editor = new SmileyEditor($smiley); |
113 | $editor->update(array('showOrder' => $i++)); | |
114 | } | |
115 | WCF::getDB()->commitTransaction(); | |
116 | } | |
117 | } |