public function getQueryInfo() {
$tables = array( 'logging', 'user' );
$this->mConds[] = 'user_id = log_user';
+ $groupBy = false;
$index = array();
# Add log_search table if there are conditions on it
if( array_key_exists('ls_field',$this->mConds) ) {
$tables[] = 'log_search';
$index = array( 'log_search' => 'PRIMARY', 'logging' => 'PRIMARY' );
+ $groupBy = 'ls_log_id';
# Don't use the wrong logging index
} else if( $this->title || $this->pattern || $this->user ) {
$index = array( 'logging' => array('page_time','user_time') );
} else {
$index = array( 'logging' => 'times' );
}
+ $options = array( 'USE INDEX' => $index );
+ # Don't show duplicate rows when using log_search
+ if( $groupBy ) $options['GROUP BY'] = $groupBy;
$info = array(
- 'tables' => $tables,
- 'fields' => array( 'log_type', 'log_action', 'log_user', 'log_namespace', 'log_title', 'log_params',
- 'log_comment', 'log_id', 'log_deleted', 'log_timestamp', 'user_name', 'user_editcount' ),
- 'conds' => $this->mConds,
- 'options' => array( 'USE INDEX' => $index ),
- 'join_conds' => array( 'user' => array( 'INNER JOIN', 'user_id=log_user' ),
- 'log_search' => array( 'INNER JOIN', 'ls_log_id=log_id' ) ),
+ 'tables' => $tables,
+ 'fields' => array( 'log_type', 'log_action', 'log_user', 'log_namespace',
+ 'log_title', 'log_params', 'log_comment', 'log_id', 'log_deleted',
+ 'log_timestamp', 'user_name', 'user_editcount' ),
+ 'conds' => $this->mConds,
+ 'options' => $options,
+ 'join_conds' => array(
+ 'user' => array( 'INNER JOIN', 'user_id=log_user' ),
+ 'log_search' => array( 'INNER JOIN', 'ls_log_id=log_id' )
+ )
);
-
+ # Add ChangeTags filter query
ChangeTags::modifyDisplayQuery( $info['tables'], $info['fields'], $info['conds'],
$info['join_conds'], $info['options'], $this->mTagFilter );
* @static
*/
public function addRelations( $field, $values, $logid ) {
- if( empty($values) )
+ if( !strlen($field) || empty($values) )
return false; // nothing
$data = array();
foreach( $values as $value ) {
}
private function getLogQueryCond() {
+ $conds = array();
$logAction = 'revision';
switch( $this->deleteKey ) {
case 'oldid':
return array();
}
// Revision delete logs for these item
- $conds = array( 'log_action' => $logAction );
+ $conds['log_type'] = array('delete','suppress');
+ $conds['log_action'] = $logAction;
$conds['ls_field'] = RevisionDeleter::getRelationType( $this->deleteKey );
$conds['ls_value'] = $ids;
- $conds[] = 'log_id = ls_log_id';
return $conds;
}
* @param string $param, URL param
* @param Array $items
*/
- function updateLog( $title, $count, $nbitfield, $obitfield, $comment, $target,
+ protected function updateLog( $title, $count, $nbitfield, $obitfield, $comment, $target,
$param, $items = array() )
{
+ // Get the URL param's corresponding DB field
+ if( !($field = self::getRelationType($param)) )
+ throw new MWException( "Bad log URL param type!" );
// Put things hidden from sysops in the oversight log
$logType = ( ($nbitfield | $obitfield) & Revision::DELETED_RESTRICTED ) ?
'suppress' : 'delete';
$log = new LogPage( $logType );
$logid = $log->addEntry( $logAction, $title, $comment, $params );
// Allow for easy searching of deletion log items for revision/log items
- $log->addRelations( self::getRelationType($param), $items, $logid );
+ $log->addRelations( $field, $items, $logid );
}
// Get DB field name for URL param...
case 'logid':
return 'log_id';
}
- throw new MWException( "Bad log URL param type!" );
+ return null; // bad URL type
}
}
\ No newline at end of file
// Param format: <urlparam> <item CSV> [<ofield> <nfield>]
if( count($params) >= 2 ) {
$field = RevisionDeleter::getRelationType($params[0]);
+ // B/C, the params may start with a title key
+ if( $field == null ) {
+ array_shift($params);
+ $field = RevisionDeleter::getRelationType($params[0]);
+ }
+ if( $field == null ) {
+ echo "Invalid param type for $row->log_id";
+ continue; // skip this row
+ }
$items = explode(',',$params[1]);
$log = new LogPage( $row->log_type );
$log->addRelations( $field, $items, $row->log_id );