Fix installation of other plugins when using versionable database objects
authorray176 <ray176@me.com>
Tue, 13 Aug 2013 19:56:21 +0000 (21:56 +0200)
committerray176 <ray176@me.com>
Tue, 13 Aug 2013 19:56:21 +0000 (21:56 +0200)
wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php

index 2c0e8a03705c92f70d94ba6940c1afbb70327bc6..852bd35cf7bb0cd5f41b19cd0f25407d3277dc84 100644 (file)
@@ -1075,9 +1075,20 @@ class PackageInstallationDispatcher {
                                ));
                        }
                        else {
+                               $baseTableColumnNames = $versionTableColumnNames = $versionTableBaseColumnNames = array();
+                               foreach ($baseTableColumns as $column) {
+                                       $baseTableColumnNames[] = $column['name'];
+                               }
+                               foreach ($versionTableColumns as $column) {
+                                       $versionTableColumnNames[] = $column['name'];
+                               }
+                               foreach ($versionTableBaseColumns as $column) {
+                                       $versionTableBaseColumnNames[] = $column['name'];
+                               }
+
                                // check garbage columns in versioned table
                                foreach ($versionTableColumns as $columnData) {
-                                       if (!array_search($columnData['name'], $baseTableColumns, true)) {
+                                       if (!in_array($columnData['name'], $baseTableColumnNames) && !in_array($columnData['name'], $versionTableBaseColumnNames)) {
                                                // delete column
                                                WCF::getDB()->getEditor()->dropColumn(call_user_func(array($objectType->className, 'getDatabaseVersionTableName')), $columnData['name']);
                                        }
@@ -1085,7 +1096,7 @@ class PackageInstallationDispatcher {
                                
                                // check new columns for versioned table
                                foreach ($baseTableColumns as $columnData) {
-                                       if (!array_search($columnData['name'], $versionTableColumns, true)) {
+                                       if (!in_array($columnData['name'], $versionTableColumnNames)) {
                                                // add colum
                                                WCF::getDB()->getEditor()->addColumn(call_user_func(array($objectType->className, 'getDatabaseVersionTableName')), $columnData['name'], $columnData['data']);
                                        }