Fix HTMLForm noData logic in trySubmit
[lhc/web/wiklou.git] / includes / logging / LogEntry.php
index e76aa29..20d0217 100644 (file)
@@ -419,12 +419,18 @@ class ManualLogEntry extends LogEntryBase {
        /** @var int A rev id associated to the log entry */
        protected $revId = 0;
 
+       /** @var array Change tags add to the log entry */
+       protected $tags = null;
+
        /** @var int Deletion state of the log entry */
        protected $deleted;
 
        /** @var int ID of the log entry */
        protected $id;
 
+       /** @var Can this log entry be patrolled? */
+       protected $isPatrollable = false;
+
        /** @var bool Whether this is a legacy log entry */
        protected $legacy = false;
 
@@ -529,6 +535,32 @@ class ManualLogEntry extends LogEntryBase {
                $this->revId = $revId;
        }
 
+       /**
+        * Set change tags for the log entry.
+        *
+        * @since 1.27
+        * @param string|string[] $tags
+        */
+       public function setTags( $tags ) {
+               if ( is_string( $tags ) ) {
+                       $tags = [ $tags ];
+               }
+               $this->tags = $tags;
+       }
+
+       /**
+        * Set whether this log entry should be made patrollable
+        * This shouldn't depend on config, only on whether there is full support
+        * in the software for patrolling this log entry.
+        * False by default
+        *
+        * @since 1.27
+        * @param bool $patrollable
+        */
+       public function setIsPatrollable( $patrollable ) {
+               $this->isPatrollable = (bool)$patrollable;
+       }
+
        /**
         * Set the 'legacy' flag
         *
@@ -663,7 +695,8 @@ class ManualLogEntry extends LogEntryBase {
                        LogEntryBase::makeParamBlob( $this->getParameters() ),
                        $newId,
                        $formatter->getIRCActionComment(), // Used for IRC feeds
-                       $this->getAssociatedRevId() // Used for e.g. moves and uploads
+                       $this->getAssociatedRevId(), // Used for e.g. moves and uploads
+                       $this->getIsPatrollable()
                );
        }
 
@@ -690,12 +723,20 @@ class ManualLogEntry extends LogEntryBase {
                        $rc->notifyRCFeeds();
                }
 
-               // Log the autopatrol if an associated rev id was passed
-               if ( $this->getAssociatedRevId() > 0 &&
+               // Log the autopatrol if the log entry is patrollable
+               if ( $this->getIsPatrollable() &&
                        $rc->getAttribute( 'rc_patrolled' ) === 1 ) {
                        PatrolLog::record( $rc, true, $this->getPerformer() );
                }
 
+               // Add change tags to the log entry and (if applicable) the associated revision
+               $tags = $this->getTags();
+               if ( !is_null( $tags ) ) {
+                       $rcId = $rc->getAttribute( 'rc_id' );
+                       $revId = $this->getAssociatedRevId(); // Use null if $revId is 0
+                       ChangeTags::addTags( $tags, $rcId, $revId > 0 ? $revId : null, $newId );
+               }
+
                return $rc;
        }
 
@@ -743,6 +784,24 @@ class ManualLogEntry extends LogEntryBase {
                return $this->revId;
        }
 
+       /**
+        * @since 1.27
+        * @return array
+        */
+       public function getTags() {
+               return $this->tags;
+       }
+
+       /**
+        * Whether this log entry is patrollable
+        *
+        * @since 1.27
+        * @return bool
+        */
+       public function getIsPatrollable() {
+               return $this->isPatrollable;
+       }
+
        /**
         * @since 1.25
         * @return bool