2 namespace wcf\system\clipboard\action
;
3 use wcf\data\clipboard\action\ClipboardAction
;
4 use wcf\data\user\group\UserGroup
;
5 use wcf\system\database\util\PreparedStatementConditionBuilder
;
6 use wcf\system\request\LinkHandler
;
10 * Prepares clipboard editor items for user objects.
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 system.clipboard.action
17 * @category Community Framework
19 class UserClipboardAction
extends AbstractClipboardAction
{
21 * @see \wcf\system\clipboard\action\AbstractClipboardAction::$actionClassActions
23 protected $actionClassActions = array('delete');
26 * @see \wcf\system\clipboard\action\AbstractClipboardAction::$supportedActions
28 protected $supportedActions = array('assignToGroup', 'ban', 'delete', 'exportMailAddress', 'sendMail');
31 * @see \wcf\system\clipboard\action\IClipboardAction::execute()
33 public function execute(array $objects, ClipboardAction
$action) {
34 $item = parent
::execute($objects, $action);
41 switch ($action->actionName
) {
43 $item->setURL(LinkHandler
::getInstance()->getLink('UserAssignToGroup'));
47 $item->addInternalData('confirmMessage', WCF
::getLanguage()->getDynamicVariable('wcf.clipboard.item.com.woltlab.wcf.user.delete.confirmMessage', array(
48 'count' => $item->getCount()
52 case 'exportMailAddress':
53 $item->setURL(LinkHandler
::getInstance()->getLink('UserEmailAddressExport'));
57 $item->setURL(LinkHandler
::getInstance()->getLink('UserMail'));
65 * @see \wcf\system\clipboard\action\IClipboardAction::getClassName()
67 public function getClassName() {
68 return 'wcf\data\user\UserAction';
72 * @see \wcf\system\clipboard\action\IClipboardAction::getTypeName()
74 public function getTypeName() {
75 return 'com.woltlab.wcf.user';
79 * Returns the ids of the users which can be deleted.
81 * @return array<integer>
83 protected function validateDelete() {
85 if (!WCF
::getSession()->getPermission('admin.user.canDeleteUser')) {
89 return $this->__validateAccessibleGroups(array_keys($this->objects
));
93 * Returns the ids of the users which can be banned.
95 * @return array<integer>
97 protected function validateBan() {
99 if (!WCF
::getSession()->getPermission('admin.user.canBanUser')) {
103 return $this->__validateAccessibleGroups(array_keys($this->objects
));
107 * Validates accessible groups.
109 * @return array<integer>
111 protected function __validateAccessibleGroups(array $userIDs, $ignoreOwnUser = true) {
112 if ($ignoreOwnUser) {
113 foreach ($userIDs as $index => $userID) {
114 if ($userID == WCF
::getUser()->userID
) {
115 unset($userIDs[$index]);
120 // no valid users found
121 if (empty($userIDs)) return array();
123 // fetch user to group associations
124 $conditions = new PreparedStatementConditionBuilder();
125 $conditions->add("userID IN (?)", array($userIDs));
127 $sql = "SELECT userID, groupID
128 FROM wcf".WCF_N
."_user_to_group
130 $statement = WCF
::getDB()->prepareStatement($sql);
131 $statement->execute($conditions->getParameters());
133 $userToGroup = array();
134 while ($row = $statement->fetchArray()) {
135 if (!isset($userToGroup[$row['userID']])) {
136 $userToGroup[$row['userID']] = array();
139 $userToGroup[$row['userID']][] = $row['groupID'];
142 // validate if user's group is accessible for current user
143 foreach ($userIDs as $userID) {
144 if (!isset($userToGroup[$userID]) ||
!UserGroup
::isAccessibleGroup($userToGroup[$userID])) {
145 unset($userIDs[$userID]);