Merge "Maintenance: detect missing parent::__construct()"
[lhc/web/wiklou.git] / includes / logging / LogEntry.php
index 92a0abe..b2a8e50 100644 (file)
@@ -165,7 +165,7 @@ class DatabaseLogEntry extends LogEntryBase {
         */
        public static function newFromRow( $row ) {
                if ( is_array( $row ) && isset( $row['rc_logid'] ) ) {
-                       return new RCDatabaseLogEntry( (object) $row );
+                       return new RCDatabaseLogEntry( (object)$row );
                } else {
                        return new self( $row );
                }
@@ -234,7 +234,7 @@ class DatabaseLogEntry extends LogEntryBase {
 
        public function getPerformer() {
                if ( !$this->performer ) {
-                       $userId = (int) $this->row->log_user;
+                       $userId = (int)$this->row->log_user;
                        if ( $userId !== 0 ) { // logged-in users
                                if ( isset( $this->row->user_name ) ) {
                                        $this->performer = User::newFromRow( $this->row );
@@ -292,7 +292,7 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
 
        public function getPerformer() {
                if ( !$this->performer ) {
-                       $userId = (int) $this->row->rc_user;
+                       $userId = (int)$this->row->rc_user;
                        if ( $userId !== 0 ) {
                                $this->performer = User::newFromId( $userId );
                        } else {
@@ -334,6 +334,7 @@ class ManualLogEntry extends LogEntryBase {
        protected $type; ///!< @var string
        protected $subtype; ///!< @var string
        protected $parameters = array(); ///!< @var array
+       protected $relations = array(); ///!< @var array
        protected $performer; ///!< @var User
        protected $target; ///!< @var Title
        protected $timestamp; ///!< @var string
@@ -373,6 +374,17 @@ class ManualLogEntry extends LogEntryBase {
                $this->parameters = $parameters;
        }
 
+       /**
+        * Declare arbitrary tag/value relations to this log entry.
+        * These can be used to filter log entries later on.
+        *
+        * @param array Map of (tag => (list of values))
+        * @since 1.22
+        */
+       public function setRelations( array $relations ) {
+               $this->relations = $relations;
+       }
+
        /**
         * Set the user that performed the action being logged.
         *
@@ -430,10 +442,10 @@ class ManualLogEntry extends LogEntryBase {
 
        /**
         * Inserts the entry into the logging table.
-        * @param DatabaseBase $dbw
+        * @param IDatabase $dbw
         * @return int If of the log entry
         */
-       public function insert( DatabaseBase $dbw = null ) {
+       public function insert( IDatabase $dbw = null ) {
                global $wgContLang;
 
                $dbw = $dbw ?: wfGetDB( DB_MASTER );
@@ -460,10 +472,28 @@ class ManualLogEntry extends LogEntryBase {
                        'log_title' => $this->getTarget()->getDBkey(),
                        'log_page' => $this->getTarget()->getArticleID(),
                        'log_comment' => $comment,
-                       'log_params' => serialize( (array) $this->getParameters() ),
+                       'log_params' => serialize( (array)$this->getParameters() ),
                );
                $dbw->insert( 'logging', $data, __METHOD__ );
                $this->id = !is_null( $id ) ? $id : $dbw->insertId();
+
+               $rows = array();
+               foreach ( $this->relations as $tag => $values ) {
+                       if ( !strlen( $tag ) ) {
+                               throw new MWException( "Got empty log search tag." );
+                       }
+                       foreach ( $values as $value ) {
+                               $rows[] = array(
+                                       'ls_field'  => $tag,
+                                       'ls_value'  => $value,
+                                       'ls_log_id' => $this->id
+                               );
+                       }
+               }
+               if ( count( $rows ) ) {
+                       $dbw->insert( 'log_search', $rows, __METHOD__, 'IGNORE' );
+               }
+
                return $this->id;
        }
 
@@ -504,7 +534,7 @@ class ManualLogEntry extends LogEntryBase {
                        $this->getSubtype(),
                        $this->getTarget(),
                        $this->getComment(),
-                       serialize( (array) $this->getParameters() ),
+                       serialize( (array)$this->getParameters() ),
                        $newId,
                        $formatter->getIRCActionComment() // Used for IRC feeds
                );
@@ -514,7 +544,7 @@ class ManualLogEntry extends LogEntryBase {
                }
 
                if ( $to === 'udp' || $to === 'rcandudp' ) {
-                       $rc->notifyRC2UDP();
+                       $rc->notifyRCFeeds();
                }
        }
 
@@ -556,7 +586,7 @@ class ManualLogEntry extends LogEntryBase {
        }
 
        public function getDeleted() {
-               return (int) $this->deleted;
+               return (int)$this->deleted;
        }
 
 }