/** * @see wcf\system\clipboard\action\IClipboardAction::execute() */ public function execute(array $objects, $actionName, $typeData = array()) { $item = new ClipboardEditorItem(); // handle actions switch ($actionName) { case 'assignToGroup': $item->setName('user.assignToGroup'); $item->setURL(LinkHandler::getInstance()->getLink('UserAssignToGroup')); break; case 'delete': $userIDs = $this->validateDelete($objects); if (!count($userIDs)) { return null; } $item->addInternalData('confirmMessage', WCF::getLanguage()->getDynamicVariable('wcf.clipboard.item.user.delete.confirmMessage', array('count' => count($userIDs)))); $item->addParameter('actionName', 'delete'); $item->addParameter('className', 'wcf\\data\\user\\UserAction'); $item->addParameter('objectIDs', $userIDs); $item->setName('user.delete'); break; case 'exportMailAddress': $item->setName('user.exportMailAddress'); $item->setURL(LinkHandler::getInstance()->getLink('UserEmailAddressExport')); break; case 'sendMail': $item->setName('user.sendMail'); $item->setURL(LinkHandler::getInstance()->getLink('UserMail')); break; default: throw new SystemException("action '" . $actionName . "' is invalid"); break; } return $item; }
/** * @see wcf\system\clipboard\action\IClipboardAction::execute() */ public function execute(array $objects, $actionName) { if (!in_array($actionName, $this->supportedActions)) { throw new SystemException("Unknown clipboard action '".$actionName."'"); } $this->objects = $objects; $item = new ClipboardEditorItem(); $item->setName($this->getTypeName().'.'.$actionName); // set action class-related data if (in_array($actionName, $this->actionClassActions)) { $item->addParameter('actionName', $actionName); $item->addParameter('className', $this->getClassName()); } // validate objects if relevant method exists and set valid object ids $methodName = 'validate'.ucfirst($actionName); if (method_exists($this, $methodName)) { $objectIDs = $this->$methodName(); if (empty($objectIDs)) { return null; } $item->addParameter('objectIDs', $objectIDs); } return $item; }
/** * Returns items for clipboard editor. * * @param string $page * @param array $containerData * @return array<array> */ public function getEditorItems($page, $containerData) { // ignore unknown pages if (!isset($this->pageCache[$page])) return null; // get objects $this->loadMarkedItems(); if (empty($this->markedItems)) return null; // fetch action ids $this->loadActionCache(); $actionIDs = array(); foreach ($this->pageCache[$page] as $actionID) { if (isset($this->actionCache[$actionID])) { $actionIDs[] = $actionID; } } $actionIDs = array_unique($actionIDs); // load actions $actions = array(); foreach ($actionIDs as $actionID) { $actionClassName = $this->actionCache[$actionID]->actionClassName; $actionName = $this->actionCache[$actionID]->actionName; if (!isset($actions[$actionClassName])) { // validate class if (!ClassUtil::isInstanceOf($actionClassName, 'wcf\system\clipboard\action\IClipboardAction')) { throw new SystemException("'".$actionClassName."' does not implement 'wcf\system\clipboard\action\IClipboardAction'"); } $actions[$actionClassName] = array( 'actions' => array(), 'object' => new $actionClassName() ); } $actions[$actionClassName]['actions'][] = $actionName; } // execute actions $editorData = array(); foreach ($actions as $actionData) { // get accepted objects $typeName = $actionData['object']->getTypeName(); if (!isset($this->markedItems[$typeName]) || empty($this->markedItems[$typeName])) continue; $typeData = array(); if (isset($containerData[$typeName])) { $typeData = $containerData[$typeName]; } // filter objects by type data $objects = $actionData['object']->filterObjects($this->markedItems[$typeName], $typeData); if (empty($objects)) continue; $editorData[$typeName] = array( 'label' => $actionData['object']->getEditorLabel($objects), 'items' => array() ); foreach ($actionData['actions'] as $action) { $data = $actionData['object']->execute($objects, $action); if ($data === null) { continue; } $editorData[$typeName]['items'][$action] = $data; } // append 'unmark all' item if (!ClassUtil::isInstanceOf($actionData['object']->getClassName(), 'wcf\data\IClipboardAction')) { throw new SystemException("'".$actionData['object']->getClassName()."' does not implement 'wcf\data\IClipboardAction'"); } $unmarkAll = new ClipboardEditorItem(); $unmarkAll->setName('unmarkAll'); $unmarkAll->addParameter('actionName', 'unmarkAll'); $unmarkAll->addParameter('className', $actionData['object']->getClassName()); $editorData[$typeName]['items'][] = $unmarkAll; } return $editorData; }