Add tags for undo edits
[lhc/web/wiklou.git] / includes / page / WikiPage.php
index 95b7be2..67e4d0d 100644 (file)
@@ -1305,7 +1305,7 @@ class WikiPage implements Page, IDBAccessObject {
         * Add row to the redirect table if this is a redirect, remove otherwise.
         *
         * @param IDatabase $dbw
-        * @param Title $redirectTitle Title object pointing to the redirect target,
+        * @param Title|null $redirectTitle Title object pointing to the redirect target,
         *   or NULL if this is not a redirect
         * @param null|bool $lastRevIsRedirect If given, will optimize adding and
         *   removing rows in redirect table.
@@ -1617,13 +1617,20 @@ class WikiPage implements Page, IDBAccessObject {
                $old_revision = $this->getRevision(); // current revision
                $old_content = $this->getContent( Revision::RAW ); // current revision's content
 
-               if ( $old_content && $old_content->getModel() !== $content->getModel() ) {
-                       $tags[] = 'mw-contentmodelchange';
+               $handler = $content->getContentHandler();
+               $tag = $handler->getChangeTag( $old_content, $content, $flags );
+               // If there is no applicable tag, null is returned, so we need to check
+               if ( $tag ) {
+                       $tags[] = $tag;
                }
 
-               // Provide autosummaries if one is not provided and autosummaries are enabled
+               // Check for undo tag
+               if ( $undidRevId !== 0 && in_array( 'mw-undo', ChangeTags::getSoftwareTags() ) ) {
+                       $tags[] = 'mw-undo';
+               }
+
+               // Provide autosummaries if summary is not provided and autosummaries are enabled
                if ( $wgUseAutomaticEditSummaries && ( $flags & EDIT_AUTOSUMMARY ) && $summary == '' ) {
-                       $handler = $content->getContentHandler();
                        $summary = $handler->getAutosummary( $old_content, $content, $flags );
                }
 
@@ -3211,6 +3218,10 @@ class WikiPage implements Page, IDBAccessObject {
                $targetContent = $target->getContent();
                $changingContentModel = $targetContent->getModel() !== $current->getContentModel();
 
+               if ( in_array( 'mw-rollback', ChangeTags::getSoftwareTags() ) ) {
+                       $tags[] = 'mw-rollback';
+               }
+
                // Actually store the edit
                $status = $this->doEditContent(
                        $targetContent,
@@ -3287,7 +3298,8 @@ class WikiPage implements Page, IDBAccessObject {
                        'summary' => $summary,
                        'current' => $current,
                        'target' => $target,
-                       'newid' => $revId
+                       'newid' => $revId,
+                       'tags' => $tags
                ];
 
                return [];
@@ -3317,7 +3329,9 @@ class WikiPage implements Page, IDBAccessObject {
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );
 
                // Invalidate caches of articles which include this page
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $title, 'templatelinks', 'page-create' )
+               );
 
                if ( $title->getNamespace() == NS_CATEGORY ) {
                        // Load the Category object, which will schedule a job to create
@@ -3355,7 +3369,9 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Images
                if ( $title->getNamespace() == NS_FILE ) {
-                       DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'imagelinks' ) );
+                       DeferredUpdates::addUpdate(
+                               new HTMLCacheUpdate( $title, 'imagelinks', 'page-delete' )
+                       );
                }
 
                // User talk pages
@@ -3378,10 +3394,14 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public static function onArticleEdit( Title $title, Revision $revision = null ) {
                // Invalidate caches of articles which include this page
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $title, 'templatelinks', 'page-edit' )
+               );
 
                // Invalidate the caches of all pages which redirect here
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'redirect' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $title, 'redirect', 'page-edit' )
+               );
 
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );