Exemplo n.º 1
0
 protected function doDBUpdates()
 {
     $db = $this->getDB(DB_MASTER);
     if (!$db->tableExists('log_search')) {
         $this->error("log_search does not exist");
         return false;
     }
     $start = $db->selectField('logging', 'MIN(log_id)', false, __FUNCTION__);
     if (!$start) {
         $this->output("Nothing to do.\n");
         return true;
     }
     $end = $db->selectField('logging', 'MAX(log_id)', false, __FUNCTION__);
     # Do remaining chunk
     $end += $this->mBatchSize - 1;
     $blockStart = $start;
     $blockEnd = $start + $this->mBatchSize - 1;
     $delTypes = array('delete', 'suppress');
     // revisiondelete types
     while ($blockEnd <= $end) {
         $this->output("...doing log_id from {$blockStart} to {$blockEnd}\n");
         $cond = "log_id BETWEEN {$blockStart} AND {$blockEnd}";
         $res = $db->select('logging', '*', $cond, __FUNCTION__);
         foreach ($res as $row) {
             // RevisionDelete logs - revisions
             if (LogEventsList::typeAction($row, $delTypes, 'revision')) {
                 $params = LogPage::extractParams($row->log_params);
                 // Param format: <urlparam> <item CSV> [<ofield> <nfield>]
                 if (count($params) < 2) {
                     continue;
                     // bad row?
                 }
                 $field = RevisionDeleter::getRelationType($params[0]);
                 // B/C, the params may start with a title key (<title> <urlparam> <CSV>)
                 if ($field == null) {
                     array_shift($params);
                     // remove title param
                     $field = RevisionDeleter::getRelationType($params[0]);
                     if ($field == null) {
                         $this->output("Invalid param type for {$row->log_id}\n");
                         continue;
                         // skip this row
                     } else {
                         // Clean up the row...
                         $db->update('logging', array('log_params' => implode(',', $params)), array('log_id' => $row->log_id));
                     }
                 }
                 $items = explode(',', $params[1]);
                 $log = new LogPage($row->log_type);
                 // Add item relations...
                 $log->addRelations($field, $items, $row->log_id);
                 // Determine what table to query...
                 $prefix = substr($field, 0, strpos($field, '_'));
                 // db prefix
                 if (!isset(self::$tableMap[$prefix])) {
                     continue;
                     // bad row?
                 }
                 $table = self::$tableMap[$prefix];
                 $userField = $prefix . '_user';
                 $userTextField = $prefix . '_user_text';
                 // Add item author relations...
                 $userIds = $userIPs = array();
                 $sres = $db->select($table, array($userField, $userTextField), array($field => $items));
                 foreach ($sres as $srow) {
                     if ($srow->{$userField} > 0) {
                         $userIds[] = intval($srow->{$userField});
                     } elseif ($srow->{$userTextField} != '') {
                         $userIPs[] = $srow->{$userTextField};
                     }
                 }
                 // Add item author relations...
                 $log->addRelations('target_author_id', $userIds, $row->log_id);
                 $log->addRelations('target_author_ip', $userIPs, $row->log_id);
             } elseif (LogEventsList::typeAction($row, $delTypes, 'event')) {
                 // RevisionDelete logs - log events
                 $params = LogPage::extractParams($row->log_params);
                 // Param format: <item CSV> [<ofield> <nfield>]
                 if (count($params) < 1) {
                     continue;
                     // bad row
                 }
                 $items = explode(',', $params[0]);
                 $log = new LogPage($row->log_type);
                 // Add item relations...
                 $log->addRelations('log_id', $items, $row->log_id);
                 // Add item author relations...
                 $userIds = $userIPs = array();
                 $sres = $db->select('logging', array('log_user', 'log_user_text'), array('log_id' => $items));
                 foreach ($sres as $srow) {
                     if ($srow->log_user > 0) {
                         $userIds[] = intval($srow->log_user);
                     } elseif (IP::isIPAddress($srow->log_user_text)) {
                         $userIPs[] = $srow->log_user_text;
                     }
                 }
                 $log->addRelations('target_author_id', $userIds, $row->log_id);
                 $log->addRelations('target_author_ip', $userIPs, $row->log_id);
             }
         }
         $blockStart += $this->mBatchSize;
         $blockEnd += $this->mBatchSize;
         wfWaitForSlaves();
     }
     $this->output("Done populating log_search table.\n");
     return true;
 }
 /**
  * Get the condition used for fetching log snippets
  * @return array
  */
 protected function getLogQueryCond()
 {
     $conds = array();
     // Revision delete logs for these item
     $conds['log_type'] = array('delete', 'suppress');
     $conds['log_action'] = $this->getList()->getLogAction();
     $conds['ls_field'] = RevisionDeleter::getRelationType($this->typeName);
     $conds['ls_value'] = $this->ids;
     return $conds;
 }
Exemplo n.º 3
0
 /**
  * Record a log entry on the action
  * @param array $params Associative array of parameters:
  *     newBits:         The new value of the *_deleted bitfield
  *     oldBits:         The old value of the *_deleted bitfield.
  *     title:           The target title
  *     ids:             The ID list
  *     comment:         The log comment
  *     authorsIds:      The array of the user IDs of the offenders
  *     authorsIPs:      The array of the IP/anon user offenders
  * @throws MWException
  */
 protected function updateLog($params)
 {
     // Get the URL param's corresponding DB field
     $field = RevisionDeleter::getRelationType($this->getType());
     if (!$field) {
         throw new MWException("Bad log URL param type!");
     }
     // Put things hidden from sysops in the suppression log
     if (($params['newBits'] | $params['oldBits']) & $this->getSuppressBit()) {
         $logType = 'suppress';
     } else {
         $logType = 'delete';
     }
     // Add params for affected page and ids
     $logParams = $this->getLogParams($params);
     // Actually add the deletion log entry
     $logEntry = new ManualLogEntry($logType, $this->getLogAction());
     $logEntry->setTarget($params['title']);
     $logEntry->setComment($params['comment']);
     $logEntry->setParameters($logParams);
     $logEntry->setPerformer($this->getUser());
     // Allow for easy searching of deletion log items for revision/log items
     $logEntry->setRelations(array($field => $params['ids'], 'target_author_id' => $params['authorIds'], 'target_author_ip' => $params['authorIPs']));
     $logId = $logEntry->insert();
     $logEntry->publish($logId);
 }
Exemplo n.º 4
0
 /**
  * Record a log entry on the action
  * @param $params array Associative array of parameters:
  *     newBits:         The new value of the *_deleted bitfield
  *     oldBits:         The old value of the *_deleted bitfield.
  *     title:           The target title
  *     ids:             The ID list
  *     comment:         The log comment
  *     authorsIds:      The array of the user IDs of the offenders
  *     authorsIPs:      The array of the IP/anon user offenders
  */
 protected function updateLog($params)
 {
     // Get the URL param's corresponding DB field
     $field = RevisionDeleter::getRelationType($this->getType());
     if (!$field) {
         throw new MWException("Bad log URL param type!");
     }
     // Put things hidden from sysops in the oversight log
     if (($params['newBits'] | $params['oldBits']) & $this->getSuppressBit()) {
         $logType = 'suppress';
     } else {
         $logType = 'delete';
     }
     // Add params for effected page and ids
     $logParams = $this->getLogParams($params);
     // Actually add the deletion log entry
     $log = new LogPage($logType);
     $logid = $log->addEntry($this->getLogAction(), $params['title'], $params['comment'], $logParams);
     // Allow for easy searching of deletion log items for revision/log items
     $log->addRelations($field, $params['ids'], $logid);
     $log->addRelations('target_author_id', $params['authorIds'], $logid);
     $log->addRelations('target_author_ip', $params['authorIPs'], $logid);
 }
Exemplo n.º 5
0
 /**
  * Record a log entry on the action
  * @param string $logType One of (delete,suppress)
  * @param array $params Associative array of parameters:
  *     newBits:         The new value of the *_deleted bitfield
  *     oldBits:         The old value of the *_deleted bitfield.
  *     title:           The target title
  *     ids:             The ID list
  *     comment:         The log comment
  *     authorsIds:      The array of the user IDs of the offenders
  *     authorsIPs:      The array of the IP/anon user offenders
  * @throws MWException
  */
 private function updateLog($logType, $params)
 {
     // Get the URL param's corresponding DB field
     $field = RevisionDeleter::getRelationType($this->getType());
     if (!$field) {
         throw new MWException("Bad log URL param type!");
     }
     // Add params for affected page and ids
     $logParams = $this->getLogParams($params);
     // Actually add the deletion log entry
     $logEntry = new ManualLogEntry($logType, $this->getLogAction());
     $logEntry->setTarget($params['title']);
     $logEntry->setComment($params['comment']);
     $logEntry->setParameters($logParams);
     $logEntry->setPerformer($this->getUser());
     // Allow for easy searching of deletion log items for revision/log items
     $logEntry->setRelations([$field => $params['ids'], 'target_author_id' => $params['authorIds'], 'target_author_ip' => $params['authorIPs']]);
     $logId = $logEntry->insert();
     $logEntry->publish($logId);
 }