From: Brad Jorsch Date: Wed, 6 Nov 2013 17:51:23 +0000 (-0500) Subject: Add a RefreshLinks job when a template is deleted X-Git-Tag: 1.31.0-rc.0~18270^2 X-Git-Url: http://git.cyclocoop.org/%24href?a=commitdiff_plain;h=6f25ee40f13d3c299d26db8be1bac55a39fef7c7;p=lhc%2Fweb%2Fwiklou.git Add a RefreshLinks job when a template is deleted When a template is deleted, all pages transcluding it need to be reparsed so that entries for transcluding pages in the various links tables due to the transcluded content are properly removed. Bug: 5382 Change-Id: I838b546caa3f5887e6bd312017c1fa71d3c3463a --- diff --git a/includes/WikiPage.php b/includes/WikiPage.php index 6d2d80c6bf..576979c32f 100644 --- a/includes/WikiPage.php +++ b/includes/WikiPage.php @@ -2747,6 +2747,9 @@ class WikiPage implements Page, IDBAccessObject { $updates = $this->getDeletionUpdates( $content ); DataUpdate::runUpdates( $updates ); + // Reparse any pages transcluding this page + LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' ); + // Clear caches WikiPage::onArticleDelete( $this->mTitle ); diff --git a/tests/phpunit/includes/TemplateCategoriesTest.php b/tests/phpunit/includes/TemplateCategoriesTest.php index fb63a564db..b0d17267a0 100644 --- a/tests/phpunit/includes/TemplateCategoriesTest.php +++ b/tests/phpunit/includes/TemplateCategoriesTest.php @@ -11,11 +11,11 @@ class TemplateCategoriesTest extends MediaWikiLangTestCase { * @covers Title::getParentCategories */ public function testTemplateCategories() { - $title = Title::newFromText( "Categorized from template" ); - $page = WikiPage::factory( $title ); $user = new User(); - $user->mRights = array( 'createpage', 'edit', 'purge' ); + $user->mRights = array( 'createpage', 'edit', 'purge', 'delete' ); + $title = Title::newFromText( "Categorized from template" ); + $page = WikiPage::factory( $title ); $page->doEditContent( new WikitextContent( '{{Categorising template}}' ), 'Create a page with a template', @@ -25,12 +25,13 @@ class TemplateCategoriesTest extends MediaWikiLangTestCase { ); $this->assertEquals( - array() - , $title->getParentCategories() + array(), + $title->getParentCategories(), + 'Verify that the category doesn\'t contain the page before the template is created' ); + // Create template $template = WikiPage::factory( Title::newFromText( 'Template:Categorising template' ) ); - $template->doEditContent( new WikitextContent( '[[Category:Solved bugs]]' ), 'Add a category through a template', @@ -45,9 +46,51 @@ class TemplateCategoriesTest extends MediaWikiLangTestCase { $jobs->loadParamsAndArgs( null, array( 'quiet' => true ), null ); $jobs->execute(); + // Make sure page is in the category $this->assertEquals( - array( 'Category:Solved_bugs' => $title->getPrefixedText() ) - , $title->getParentCategories() + array( 'Category:Solved_bugs' => $title->getPrefixedText() ), + $title->getParentCategories(), + 'Verify that the page is in the category after the template is created' + ); + + // Edit the template + $template->doEditContent( + new WikitextContent( '[[Category:Solved bugs 2]]' ), + 'Change the category added by the template', + 0, + false, + $user ); + + // Run the job queue + JobQueueGroup::destroySingletons(); + $jobs = new RunJobs; + $jobs->loadParamsAndArgs( null, array( 'quiet' => true ), null ); + $jobs->execute(); + + // Make sure page is in the right category + $this->assertEquals( + array( 'Category:Solved_bugs_2' => $title->getPrefixedText() ), + $title->getParentCategories(), + 'Verify that the page is in the right category after the template is edited' + ); + + // Now delete the template + $error = ''; + $template->doDeleteArticleReal( 'Delete the template', false, 0, true, $error, $user ); + + // Run the job queue + JobQueueGroup::destroySingletons(); + $jobs = new RunJobs; + $jobs->loadParamsAndArgs( null, array( 'quiet' => true ), null ); + $jobs->execute(); + + // Make sure the page is no longer in the category + $this->assertEquals( + array(), + $title->getParentCategories(), + 'Verify that the page is no longer in the category after template deletion' + ); + } }