Moved LinksDeletionUpdate to a separate file
[lhc/web/wiklou.git] / includes / deferred / LinksUpdate.php
index 36cc865..be5aff3 100644 (file)
@@ -61,12 +61,6 @@ class LinksUpdate extends SqlDataUpdate {
        /** @var bool Whether to queue jobs for recursive updates */
        public $mRecursive;
 
-       /** @var bool Whether this job was triggered by a recursive update job */
-       private $mTriggeredRecursive;
-
-       /** @var Revision Revision for which this update has been triggered */
-       private $mRevision;
-
        /**
         * @var null|array Added links if calculated.
         */
@@ -153,6 +147,7 @@ class LinksUpdate extends SqlDataUpdate {
        }
 
        protected function doIncrementalUpdate() {
+
                # Page links
                $existing = $this->getExistingLinks();
                $this->linkDeletions = $this->getLinkDeletions( $existing );
@@ -204,27 +199,6 @@ class LinksUpdate extends SqlDataUpdate {
                $this->invalidateCategories( $categoryUpdates );
                $this->updateCategoryCounts( $categoryInserts, $categoryDeletes );
 
-               # Category membership changes
-               if ( !$this->mTriggeredRecursive && ( $categoryInserts || $categoryDeletes ) ) {
-                       try {
-                               $catMembChange = new CategoryMembershipChange( $this->mTitle, $this->mRevision );
-
-                               if ( $this->mRecursive ) {
-                                       $catMembChange->setRecursive();
-                               }
-
-                               foreach ( $categoryInserts as $categoryName => $value ) {
-                                       $catMembChange->pageAddedToCategory( $categoryName );
-                               }
-
-                               foreach ( $categoryDeletes as $categoryName => $value ) {
-                                       $catMembChange->pageRemovedFromCategory( $categoryName );
-                               }
-                       } catch ( MWException $e ) {
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-
                # Page properties
                $existing = $this->getExistingProperties();
 
@@ -889,21 +863,6 @@ class LinksUpdate extends SqlDataUpdate {
                return $this->mImages;
        }
 
-       /**
-        * Set this object as being triggered by a recursive LinksUpdate
-        */
-       public function setTriggeredRecursive() {
-               $this->mTriggeredRecursive = true;
-       }
-
-       /**
-        * Set the revision corresponding to this LinksUpdate
-        * @param Revision $revision
-        */
-       public function setRevision( Revision $revision ) {
-               $this->mRevision = $revision;
-       }
-
        /**
         * Invalidate any necessary link lists related to page property changes
         * @param array $changed
@@ -976,99 +935,3 @@ class LinksUpdate extends SqlDataUpdate {
                }
        }
 }
-
-/**
- * Update object handling the cleanup of links tables after a page was deleted.
- **/
-class LinksDeletionUpdate extends SqlDataUpdate {
-       /** @var WikiPage The WikiPage that was deleted */
-       protected $mPage;
-
-       /**
-        * Constructor
-        *
-        * @param WikiPage $page Page we are updating
-        * @throws MWException
-        */
-       function __construct( WikiPage $page ) {
-               parent::__construct( false ); // no implicit transaction
-
-               $this->mPage = $page;
-
-               if ( !$page->exists() ) {
-                       throw new MWException( "Page ID not known, perhaps the page doesn't exist?" );
-               }
-       }
-
-       /**
-        * Do some database updates after deletion
-        */
-       public function doUpdate() {
-               $title = $this->mPage->getTitle();
-               $id = $this->mPage->getId();
-
-               # Delete restrictions for it
-               $this->mDb->delete( 'page_restrictions', array( 'pr_page' => $id ), __METHOD__ );
-
-               # Fix category table counts
-               $cats = array();
-               $res = $this->mDb->select( 'categorylinks', 'cl_to', array( 'cl_from' => $id ), __METHOD__ );
-
-               foreach ( $res as $row ) {
-                       $cats[] = $row->cl_to;
-               }
-
-               $this->mPage->updateCategoryCounts( array(), $cats );
-
-               # If using cascading deletes, we can skip some explicit deletes
-               if ( !$this->mDb->cascadingDeletes() ) {
-                       # Delete outgoing links
-                       $this->mDb->delete( 'pagelinks', array( 'pl_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'imagelinks', array( 'il_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'categorylinks', array( 'cl_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'templatelinks', array( 'tl_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'externallinks', array( 'el_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'langlinks', array( 'll_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'iwlinks', array( 'iwl_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ );
-                       $this->mDb->delete( 'page_props', array( 'pp_page' => $id ), __METHOD__ );
-               }
-
-               # If using cleanup triggers, we can skip some manual deletes
-               if ( !$this->mDb->cleanupTriggers() ) {
-                       # Find recentchanges entries to clean up...
-                       $rcIdsForTitle = $this->mDb->selectFieldValues( 'recentchanges',
-                               'rc_id',
-                               array(
-                                       'rc_type != ' . RC_LOG,
-                                       'rc_namespace' => $title->getNamespace(),
-                                       'rc_title' => $title->getDBkey()
-                               ),
-                               __METHOD__
-                       );
-                       $rcIdsForPage = $this->mDb->selectFieldValues( 'recentchanges',
-                               'rc_id',
-                               array( 'rc_type != ' . RC_LOG, 'rc_cur_id' => $id ),
-                               __METHOD__
-                       );
-
-                       # T98706: delete PK to avoid lock contention with RC delete log insertions
-                       $rcIds = array_merge( $rcIdsForTitle, $rcIdsForPage );
-                       if ( $rcIds ) {
-                               $this->mDb->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
-                       }
-               }
-       }
-
-       /**
-        * Update all the appropriate counts in the category table.
-        * @param array $added Associative array of category name => sort key
-        * @param array $deleted Associative array of category name => sort key
-        */
-       function updateCategoryCounts( $added, $deleted ) {
-               $a = WikiPage::factory( $this->mTitle );
-               $a->updateCategoryCounts(
-                       array_keys( $added ), array_keys( $deleted )
-               );
-       }
-}