aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2025-09-23 11:21:22 +0200
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2025-09-23 11:21:22 +0200
commit7c79dab1970770fc69deabb17ac108c82e7d6f3b (patch)
treebcb45373d13bc39226ce58ba41df2cb15efc3b8d
parent349521e801bea9a07f1b8ec1b3261cf9077e3788 (diff)
set parent_id to null when deleting wiki pages and add migration that fixes invalid entries, fixes #5832
Closes #5832 Merge request studip/studip!4447
-rw-r--r--db/migrations/5.5.35_cleanup_wiki_page_parent_id.php18
-rw-r--r--lib/models/WikiPage.php10
2 files changed, 25 insertions, 3 deletions
diff --git a/db/migrations/5.5.35_cleanup_wiki_page_parent_id.php b/db/migrations/5.5.35_cleanup_wiki_page_parent_id.php
new file mode 100644
index 0000000..a374429
--- /dev/null
+++ b/db/migrations/5.5.35_cleanup_wiki_page_parent_id.php
@@ -0,0 +1,18 @@
+<?php
+final class CleanupWikiPageParentId extends Migration
+{
+ public function description()
+ {
+ return 'Remove invalid parent_id from wiki_pages';
+ }
+
+ protected function up()
+ {
+ $query = "UPDATE `wiki_pages` AS w0
+ LEFT JOIN `wiki_pages` AS w1
+ ON (w0.`parent_id` = w1.`page_id`)
+ SET w0.`parent_id` = NULL
+ WHERE w1.`page_id` IS NULL";
+ DBManager::get()->execute($query);
+ }
+}
diff --git a/lib/models/WikiPage.php b/lib/models/WikiPage.php
index b8982d8..57d9899 100644
--- a/lib/models/WikiPage.php
+++ b/lib/models/WikiPage.php
@@ -24,8 +24,8 @@
* @property string|null $locked_by_user_id database column
* @property int $chdate database column
* @property int $mkdate database column
- * @property SimpleORMapCollection<WikiVersion> $versions
- * @property SimpleORMapCollection<WikiOnlineEditingUser> $onlineeditingusers
+ * @property SimpleORMapCollection<WikiVersion> $versions
+ * @property SimpleORMapCollection<WikiOnlineEditingUser> $onlineeditingusers
* @property User $user belongs_to User
* @property Course $course belongs_to Course
* @property-read (WikiPage | null) $parent additional field
@@ -88,12 +88,16 @@ class WikiPage extends SimpleORMap implements PrivacyObject
];
$config['registered_callbacks']['before_store'][] = 'createVersion';
+ $config['registered_callbacks']['after_delete'][] = function (WikiPage $page) {
+ $query = "UPDATE `wiki_pages` SET `parent_id` = NULL WHERE `parent_id` = ?";
+ DBManager::get()->execute($query, [$page->id]);
+ };
+
$config['default_values']['last_author'] = 'nobody';
parent::configure($config);
}
-
protected function createVersion()
{
$last_version = $this->versions[0];