Fixes ClipboardActionPackageInstallationPlugin
authorMatthias Schmidt <gravatronics@live.com>
Mon, 19 Mar 2012 16:55:34 +0000 (17:55 +0100)
committerMatthias Schmidt <gravatronics@live.com>
Mon, 19 Mar 2012 16:55:34 +0000 (17:55 +0100)
Previously, an actionName has to be unique within a package, now the combination of actionName and actionClassName has to be unique within a package.

Without this fix, you can't install two actions named "delete" within one file - even if they are for a completely different actionClass and page(s).

wcfsetup/install/files/lib/system/package/plugin/ClipboardActionPackageInstallationPlugin.class.php
wcfsetup/setup/db/install.sql

index 90f1cefd9be8d53318c56012cdec8c4ce6aadd73..21aabe7af72b8ff6b46696c6700681d20becf9da 100644 (file)
@@ -40,11 +40,13 @@ class ClipboardActionPackageInstallationPlugin extends AbstractXMLPackageInstall
        protected function handleDelete(array $items) {
                $sql = "DELETE FROM     wcf".WCF_N."_".$this->tableName."
                        WHERE           actionName = ?
+                                       AND actionClassName = ?
                                        AND packageID = ?";
                $statement = WCF::getDB()->prepareStatement($sql);
                foreach ($items as $item) {
                        $statement->execute(array(
                                $item['attributes']['name'],
+                               $item['elements']['actionclassname'],
                                $this->installation->getPackageID()
                        ));
                }
@@ -91,9 +93,11 @@ class ClipboardActionPackageInstallationPlugin extends AbstractXMLPackageInstall
                $sql = "SELECT  *
                        FROM    wcf".WCF_N."_".$this->tableName."
                        WHERE   actionName = ?
+                               AND actionClassName = ?
                                AND packageID = ?";
                $parameters = array(
                        $data['actionName'],
+                       $data['actionClassName'],
                        $this->installation->getPackageID()
                );
                
index a78f3c67d08357440ab7cee7e7c34b141ade3508..0850825fde8578f2a4ab7db49444fae4c01d0d5d 100644 (file)
@@ -107,7 +107,7 @@ CREATE TABLE wcf1_clipboard_action (
        actionName VARCHAR(50) NOT NULL DEFAULT '',
        actionClassName VARCHAR(200) NOT NULL DEFAULT '',
        showOrder INT(10) NOT NULL DEFAULT 0,
-       UNIQUE KEY actionName (packageID, actionName)
+       UNIQUE KEY actionName (packageID, actionName, actionClassName)
 );
 
 DROP TABLE IF EXISTS wcf1_clipboard_item;