Selaa lähdekoodia

Merge branch 'hotfix/v8-4040_undeletion_restore_deleted_by_user_contents'

Olivier Massot 2 vuotta sitten
vanhempi
commit
e8db4a5323
2 muutettua tiedostoa jossa 51 lisäystä ja 4 poistoa
  1. 36 4
      ot_admin/Classes/Controller/SiteController.php
  2. 15 0
      ot_admin/ext_tables.sql

+ 36 - 4
ot_admin/Classes/Controller/SiteController.php

@@ -981,6 +981,18 @@ class SiteController extends ActionController
     {
         $queryBuilder = $this->connectionPool->getQueryBuilderForTable($table);
         if (!$hard) {
+            if ($table === 'pages' || $table === 'tt_content') {
+                // Keep track of the manually deleted pages and content, so that these won't be restored if the site
+                //    is undeleted
+                $cnn = $this->connectionPool->getConnectionForTable($table);
+                $cnn->executeStatement("
+                    UPDATE " . $table . " t
+                    SET t.manually_deleted = t.deleted
+                    WHERE " . $whereKey . "=?;",
+                    [$whereValue]
+                );
+            }
+
             $queryBuilder
                 ->update($table)
                 ->set('deleted', 1)
@@ -1031,28 +1043,48 @@ class SiteController extends ActionController
                 $queryBuilder
                     ->update('tt_content')
                     ->set('deleted', 0)
-                    ->where($queryBuilder->expr()->eq('pid', $page['uid']))
+                    ->where(
+                        $queryBuilder->expr()->andX(
+                            $queryBuilder->expr()->eq('pid', $page['uid']),
+                            $queryBuilder->expr()->eq('manually_deleted', 0)
+                        )
+                    )
                     ->execute();
 
                 $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
                 $queryBuilder
                     ->update('pages')
                     ->set('deleted', 0)
-                    ->where($queryBuilder->expr()->eq('uid', $page['uid']))
+                    ->where(
+                        $queryBuilder->expr()->andX(
+                            $queryBuilder->expr()->eq('uid', $page['uid']),
+                            $queryBuilder->expr()->eq('manually_deleted', 0)
+                        )
+                    )
                     ->execute();
             }
             $queryBuilder = $this->connectionPool->getQueryBuilderForTable('tt_content');
             $queryBuilder
                 ->update('tt_content')
                 ->set('deleted', 0)
-                ->where($queryBuilder->expr()->eq('pid', $rootUid))
+                ->where(
+                    $queryBuilder->expr()->andX(
+                        $queryBuilder->expr()->eq('pid', $rootUid),
+                        $queryBuilder->expr()->eq('manually_deleted', 0)
+                    )
+                )
                 ->execute();
 
             $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
             $queryBuilder
                 ->update('pages')
                 ->set('deleted', 0)
-                ->where($queryBuilder->expr()->eq('uid', $rootUid))
+                ->where(
+                    $queryBuilder->expr()->andX(
+                        $queryBuilder->expr()->eq('uid', $rootUid),
+                        $queryBuilder->expr()->eq('manually_deleted', 0)
+                    )
+                )
                 ->execute();
 
             $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_template');

+ 15 - 0
ot_admin/ext_tables.sql

@@ -0,0 +1,15 @@
+# ext_tables.sql contient les directives permettant d ajouter des tables et champs à la DB
+
+#
+# Table structure for table 'pages'
+#
+CREATE TABLE pages (
+   manually_deleted smallint(5) unsigned NOT NULL DEFAULT 0
+);
+
+#
+# Table structure for table 'pages'
+#
+CREATE TABLE tt_content (
+   manually_deleted smallint(5) unsigned NOT NULL DEFAULT 0
+);