Merge branch '2.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / smiley / SmileyAction.class.php
CommitLineData
dcc2332d
MW
1<?php
2namespace wcf\data\smiley;
3use wcf\data\AbstractDatabaseObjectAction;
4use wcf\data\ISortableAction;
5use wcf\system\exception\PermissionDeniedException;
6use wcf\system\exception\UserInputException;
7use 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 */
19class 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}