Add missing changes for object type pip gui
authorMatthias Schmidt <gravatronics@live.com>
Sun, 24 Jun 2018 08:46:05 +0000 (10:46 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Sun, 24 Jun 2018 08:46:05 +0000 (10:46 +0200)
See 48e11cf5250e155c15f79c9998d872572c01df16
See #2545

16 files changed:
wcfsetup/install/files/acp/templates/__objectTypePipGui.tpl
wcfsetup/install/files/lib/system/devtools/pip/TXmlGuiPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/ACLOptionPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/ACPMenuPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/ACPSearchProviderPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/AbstractMenuPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/CoreObjectPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/CronjobPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/MediaProviderPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/ObjectTypeDefinitionPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/ObjectTypePackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/PIPPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/TemplateListenerPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/UserMenuPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/UserNotificationEventPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/UserProfileMenuPackageInstallationPlugin.class.php

index 7640dc3ca98b50728417e8aa068b58f922feea98..79e6e5cbfb870546bc072ea0f9879d4c0e321c02 100644 (file)
@@ -7,29 +7,29 @@
                        {/implode}
                });
                
-               var definitionNamesWithInterface = {
-                       {implode from=$definitionNamesWithInterface key=definitionName item=interfaceName}
-                               '{@$definitionName}': '{@$interfaceName|encodeJS}'
+               var definitionInterfaces = {
+                       {implode from=$definitionInterfaces key=definitionID item=interfaceName}
+                               {@$definitionID}: '{@$interfaceName|encodeJS}'
                        {/implode}
                };
                
                var classNameDescription = elById('className').nextElementSibling;
-               var definitionName = elById('definitionName');
-               var definitionNameDescription = definitionName.nextElementSibling;
+               var definitionID = elById('definitionID');
+               var definitionIDDescription = definitionID.nextElementSibling;
                
                function update() {
                        // update description of `definitionName` field
-                       definitionNameDescription.innerHTML = Language.get('wcf.acp.pip.objectType.definitionName.' + definitionName.value + '.description');
+                       definitionIDDescription.innerHTML = Language.get('wcf.acp.pip.objectType.definitionName.' + definitionID.options.item(definitionID.selectedIndex).textContent + '.description');
                        
                        // update description of `className` field with new interface
-                       if (definitionNamesWithInterface[definitionName.value]) {
+                       if (definitionInterfaces[definitionID.value]) {
                                classNameDescription.innerHTML = Language.get('wcf.form.field.className.description.interface', {
-                                       interface: definitionNamesWithInterface[definitionName.value]
+                                       interface: definitionInterfaces[definitionID.value]
                                });
                        }
                }
                
-               definitionName.addEventListener('change', update);
+               definitionID.addEventListener('change', update);
                
                update();
        });
index 18c9b4abb456a6341f8f00a7344ff3644bcfaf0e..4af4710271af2b8c1af93719dfd7aff7f6e0bf73 100644 (file)
@@ -137,10 +137,11 @@ trait TXmlGuiPackageInstallationPlugin {
        /**
         * Extracts the PIP object data from the given XML element.
         *
-        * @param       \DOMElement     $element
+        * @param       \DOMElement     $element        element whose data is returned
+        * @param       bool            $saveData       is `true` if data is intended to be saved and otherwise `false`
         * @return      array
         */
-       abstract protected function getElementData(\DOMElement $element): array;
+       abstract protected function getElementData(\DOMElement $element, bool $saveData = false): array;
        
        /**
         * Returns the identifier of the given `import` element.
@@ -274,13 +275,13 @@ XML;
         * @param       \DOMElement|null        $oldElement     XML element with old data
         */
        protected function saveObject(\DOMElement $newElement, \DOMElement $oldElement = null) {
-               $newElementData = $this->getElementData($newElement);
+               $newElementData = $this->getElementData($newElement, true);
                
                if ($oldElement === null) {
                        call_user_func([$this->className, 'create'], $newElementData);
                }
                else {
-                       $sqlData = $this->findExistingItem($this->getElementData($oldElement));
+                       $sqlData = $this->findExistingItem($this->getElementData($oldElement, true));
                        
                        $statement = WCF::getDB()->prepareStatement($sqlData['sql']);
                        $statement->execute($sqlData['parameters']);
index 567a4dbc24759107bcd0b8aed180243b39a2c819..1113d20b62feeb087c07589431923aef7a21659b 100644 (file)
@@ -473,7 +473,7 @@ class ACLOptionPackageInstallationPlugin extends AbstractOptionPackageInstallati
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'name' => $element->getAttribute('name'),
                        'packageID' => $this->installation->getPackage()->packageID,
index cdfc2526d9c68d22ea75e7370fedfa82be2dbbb0..63ea0a9cdab3990664e7a43ca2f0712a53c16cc4 100644 (file)
@@ -130,7 +130,7 @@ class ACPMenuPackageInstallationPlugin extends AbstractMenuPackageInstallationPl
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = parent::getElementData($element);
                
                $icon = $element->getElementsByTagName('icon')->item(0);
index f51212d5c0eaa051b25d04b7ee748d6446f28ed9..1ed2ff7d8a45e7da2db1c5dcb3da9aa71ceca5dc 100644 (file)
@@ -114,7 +114,7 @@ class ACPSearchProviderPackageInstallationPlugin extends AbstractXMLPackageInsta
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
                        'packageID' => $this->installation->getPackage()->packageID,
index 7da7c0c57a8f4a9481c42f8e66068e556917f450..36740590146c5218a05741f9aad5b5a82b1a925b 100644 (file)
@@ -264,7 +264,7 @@ abstract class AbstractMenuPackageInstallationPlugin extends AbstractXMLPackageI
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'menuItem' => $element->getAttribute('name'),
                        'packageID' => $this->installation->getPackage()->packageID
index 8df69bdb875445ad06cf0766363f5879890a3ec6..d13512128d0094bfd19188588dfe31837b1c014c 100644 (file)
@@ -128,7 +128,7 @@ class CoreObjectPackageInstallationPlugin extends AbstractXMLPackageInstallation
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                return [
                        'objectName' => $element->getElementsByTagName('objectname')->item(0)->nodeValue,
                        'packageID' => $this->installation->getPackage()->packageID
index 957d44cfe0c99a3d17f11275f84dc51bca9f9b97..48b959ffd56411965075a67c114d8cfea385732b 100644 (file)
@@ -250,7 +250,7 @@ class CronjobPackageInstallationPlugin extends AbstractXMLPackageInstallationPlu
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
                        'cronjobName' => $element->getAttribute('name'),
index cd3cf9a30cf41ab1920b668fbedfc2aacce01dbf..bb8ab37279b06515e90a2cc129810b52429b9bfd 100644 (file)
@@ -175,7 +175,7 @@ class MediaProviderPackageInstallationPlugin extends AbstractXMLPackageInstallat
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'name' => $element->getAttribute('name'),
                        'packageID' => $this->installation->getPackage()->packageID,
index df9c504a999d606fabe7c1a2005e61aa3dbcf2a0..d8404f7d4c386fa8bb48ce47868f08ffb7196775 100644 (file)
@@ -169,7 +169,7 @@ class ObjectTypeDefinitionPackageInstallationPlugin extends AbstractXMLPackageIn
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'definitionName' => $element->getElementsByTagName('name')->item(0)->nodeValue,
                        'packageID' => $this->installation->getPackage()->packageID
index 19463ffbf2858671a584e5acef3e7e9137b870e7..1e5970e401f6330e644067498a28e685946be905 100644 (file)
@@ -70,7 +70,7 @@ class ObjectTypePackageInstallationPlugin extends AbstractXMLPackageInstallation
        /**
         * @var string[]
         */
-       public $definitionNamesWithInterface = [];
+       public $definitionInterfaces = [];
        
        /**
         * Returns the id of the object type definition with the given name.
@@ -161,7 +161,7 @@ class ObjectTypePackageInstallationPlugin extends AbstractXMLPackageInstallation
        public function getAdditionalTemplateCode(): string {
                return WCF::getTPL()->fetch('__objectTypePipGui', 'wcf', [
                        'definitionNames' => $this->definitionNames,
-                       'definitionNamesWithInterface' => $this->definitionNamesWithInterface
+                       'definitionInterfaces' => $this->definitionInterfaces
                ], true);
        }
        
@@ -169,7 +169,7 @@ class ObjectTypePackageInstallationPlugin extends AbstractXMLPackageInstallation
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'definitionID' => $this->getDefinitionID($element->getElementsByTagName('definitionname')->item(0)->nodeValue),
                        'objectType' => $element->getElementsByTagName('name')->item(0)->nodeValue,
@@ -190,7 +190,12 @@ class ObjectTypePackageInstallationPlugin extends AbstractXMLPackageInstallation
                        }
                }
                
-               $data['additionalData'] = serialize($additionalData);
+               if ($saveData) {
+                       $data['additionalData'] = serialize($additionalData);
+               }
+               else {
+                       $data = array_merge($additionalData, $data);
+               }
                
                return $data;
        }
@@ -209,7 +214,7 @@ class ObjectTypePackageInstallationPlugin extends AbstractXMLPackageInstallation
                        $this->definitionNames[$definition->definitionID] = $definition->definitionName;
                        
                        if ($definition->interfaceName) {
-                               $this->definitionNamesWithInterface[$definition->definitionID] = $definition->interfaceName;
+                               $this->definitionInterfaces[$definition->definitionID] = $definition->interfaceName;
                        }
                }
                
@@ -284,7 +289,7 @@ class ObjectTypePackageInstallationPlugin extends AbstractXMLPackageInstallation
                $form->getNodeById('className')->addDependency(
                        ValueFormFieldDependency::create('definitionID')
                                ->field($definitionID)
-                               ->values(array_keys($this->definitionNamesWithInterface))
+                               ->values(array_keys($this->definitionInterfaces))
                );
                
                // add object type-specific fields
@@ -656,7 +661,7 @@ XML;
                        ->addDependency(
                                ValueFormFieldDependency::create('definitionID')
                                        ->field($definitionIDField)
-                                       ->values([$definitionName])
+                                       ->values([ObjectTypeCache::getInstance()->getDefinitionByName($definitionName)->definitionID])
                        );
                
                $form->appendChild($formContainer);
index 45bdc07d6e1b0c87713e7165da6cfce22f0be4d0..e9f53ff73c3f3f1ab40cfc7470e78cb190f37b7d 100644 (file)
@@ -145,7 +145,7 @@ class PIPPackageInstallationPlugin extends AbstractXMLPackageInstallationPlugin
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                return [
                        'className' => $element->nodeValue,
                        'pluginName' => $element->getAttribute('name'),
index f37381b79916ee0a58946419c912bbebea4c7760..0b7ab8e977ded62a29b5ae5922a78d4b32264b5c 100644 (file)
@@ -309,7 +309,7 @@ class TemplateListenerPackageInstallationPlugin extends AbstractXMLPackageInstal
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                return [
                        'environment' => $element->getElementsByTagName('environment')->item(0)->nodeValue,
                        'eventName' => $element->getElementsByTagName('eventname')->item(0)->nodeValue,
index 7a25cba24749b08c9ea1ba67fe375c32594eda8f..e43a0ae0abbc0d8cab3cd7a38aecc88ea73b9de3 100644 (file)
@@ -126,7 +126,7 @@ class UserMenuPackageInstallationPlugin extends AbstractMenuPackageInstallationP
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = parent::getElementData($element);
                
                $className = $element->getElementsByTagName('classname')->item(0);
index f2a05d622cfe6c1f96ba98b919d22987ceea02ce..f9356f3de94576061351df68e3b655c3b451ec60 100644 (file)
@@ -277,7 +277,7 @@ class UserNotificationEventPackageInstallationPlugin extends AbstractXMLPackageI
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
                        'objectTypeID' => $this->getObjectTypeID($element->getElementsByTagName('objecttype')->item(0)->nodeValue),
index 28084cb983e3d1e1f731e5a6fa3a646df9d082cc..891d9fc2472623656004e3053ba7b3b301c274d2 100644 (file)
@@ -175,7 +175,7 @@ class UserProfileMenuPackageInstallationPlugin extends AbstractXMLPackageInstall
         * @inheritDoc
         * @since       3.2
         */
-       protected function getElementData(\DOMElement $element): array {
+       protected function getElementData(\DOMElement $element, bool $saveData = false): array {
                $data = [
                        'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
                        'menuItem' => $element->getAttribute('name'),