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
;
10 * Executes smiley-related actions.
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
19 class SmileyAction
extends AbstractDatabaseObjectAction
implements ISortableAction
{
21 * @see \wcf\data\AbstractDatabaseObjectAction::$className
23 protected $className = 'wcf\data\smiley\SmileyEditor';
26 * @see \wcf\data\AbstractDatabaseObjectAction::$permissionsDelete
28 protected $permissionsDelete = array('admin.content.smiley.canManageSmiley');
31 * @see \wcf\data\AbstractDatabaseObjectAction::$permissionsUpdate
33 protected $permissionsUpdate = array('admin.content.smiley.canManageSmiley');
36 * @see \wcf\data\AbstractDatabaseObjectAction::$requireACP
38 protected $requireACP = array('delete', 'update', 'updatePosition');
41 * @see \wcf\data\AbstractDatabaseObjectAction::create()
43 public function create() {
44 $smiley = parent
::create();
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);
50 $smileyEditor = new SmileyEditor($smiley);
51 $smileyEditor->update(array(
52 'smileyPath' => 'images/smilies/'.$smileyFilename
55 $smiley = new Smiley($smiley->smileyID
);
62 * @see \wcf\data\AbstractDatabaseObjectAction::update()
64 public function update() {
65 if (empty($this->objects
)) {
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);
74 $this->parameters
['data']['smileyPath'] = 'images/smilies/'.$smileyFilename;
81 * @see \wcf\data\ISortableAction::validateUpdatePosition()
83 public function validateUpdatePosition() {
84 // validate permissions
85 if (is_array($this->permissionsUpdate
) && count($this->permissionsUpdate
)) {
86 WCF
::getSession()->checkPermissions($this->permissionsUpdate
);
89 throw new PermissionDeniedException();
92 if (!isset($this->parameters
['data']['structure'])) {
93 throw new UserInputException('structure');
96 $this->readInteger('offset', true, 'data');
100 * @see \wcf\data\ISortableAction::updatePosition()
102 public function updatePosition() {
103 $smileyList = new SmileyList();
104 $smileyList->readObjects();
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;
112 $editor = new SmileyEditor($smiley);
113 $editor->update(array('showOrder' => $i++
));
115 WCF
::getDB()->commitTransaction();