Update language PIP GUI to new file structure
authorMatthias Schmidt <gravatronics@live.com>
Mon, 14 Jun 2021 05:16:40 +0000 (07:16 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Mon, 14 Jun 2021 05:16:40 +0000 (07:16 +0200)
wcfsetup/install/files/lib/system/devtools/pip/TXmlGuiPackageInstallationPlugin.class.php
wcfsetup/install/files/lib/system/package/plugin/LanguagePackageInstallationPlugin.class.php

index 2542e7229c2c98f1450da030751a342070fa97c8..9ed0952041cbd3a8de2c475187fdce9484f4ab84 100644 (file)
@@ -54,12 +54,11 @@ trait TXmlGuiPackageInstallationPlugin
     {
         $document = $element->ownerDocument;
 
-        $data = $document->getElementsByTagName('data')->item(0);
-        $delete = $data->getElementsByTagName('delete')->item(0);
+        $delete = $document->documentElement->getElementsByTagName('delete')->item(0);
 
         if ($delete === null) {
             $delete = $document->createElement('delete');
-            $data->appendChild($delete);
+            $document->documentElement->appendChild($delete);
         }
 
         $delete->appendChild($document->importNode($this->prepareDeleteXmlElement($element)));
index 6b2bd45347cf1ce16804d39a244cad6124908446..3870da6b82193f308eece18e368d7e5ae1a52319 100644 (file)
@@ -628,7 +628,7 @@ class LanguagePackageInstallationPlugin extends AbstractXMLPackageInstallationPl
      */
     protected function getImportElements(\DOMXPath $xpath)
     {
-        return $xpath->query('/ns:language/ns:category/ns:item');
+        return $xpath->query('/ns:language/ns:import/ns:category/ns:item');
     }
 
     /**
@@ -720,6 +720,9 @@ XML;
             ]);
 
             $existingRow = $statement->fetchArray();
+            if (!$existingRow) {
+                $existingRow = [];
+            }
         }
 
         if (!isset($newElementData['languageCategoryID']) && isset($newElementData['languageCategory'])) {
@@ -817,8 +820,15 @@ XML;
                 throw new \LogicException("Unknown language category mode '{$data['languageCategoryIDMode']}'.");
         }
 
+        /** @var \DOMElement $import */
+        $import = $document->getElementsByTagName('import')->item(0);
+        if ($import === null) {
+            $import = $document->createElement('import');
+            DOMUtil::prepend($import, $document->documentElement);
+        }
+
         /** @var \DOMElement $languageCategory */
-        foreach ($document->documentElement->childNodes as $languageCategory) {
+        foreach ($import->getElementsByTagName('category') as $languageCategory) {
             if ($languageCategory instanceof \DOMElement && $languageCategory->getAttribute('name') === $languageCategoryName) {
                 $languageCategory->appendChild($languageItem);
                 break;
@@ -830,7 +840,7 @@ XML;
             $languageCategory->setAttribute('name', $languageCategoryName);
             $languageCategory->appendChild($languageItem);
 
-            $document->documentElement->appendChild($languageCategory);
+            $import->appendChild($languageCategory);
         }
 
         return $languageItem;
@@ -882,15 +892,6 @@ XML;
         ]);
     }
 
-    /**
-     * @inheritDoc
-     * @since   5.2
-     */
-    public function supportsDeleteInstruction()
-    {
-        return false;
-    }
-
     /**
      * @inheritDoc
      * @since   5.2