diff options
| -rw-r--r-- | db/migrations/5.5.35_cleanup_wiki_page_parent_id.php | 18 | ||||
| -rw-r--r-- | lib/models/WikiPage.php | 10 |
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]; |
