/** @var string */
private $typeCGI = '';
+ /** @var string */
+ private $action = '';
+
/** @var LogEventsList */
public $mLogEventsList;
* @param int|bool $year The year to start from. Default: false
* @param int|bool $month The month to start from. Default: false
* @param string $tagFilter Tag
+ * @param string $action Specific action (subtype) requested
*/
- public function __construct( $list, $types = [], $performer = '', $title = '', $pattern = '',
- $conds = [], $year = false, $month = false, $tagFilter = '' ) {
+ public function __construct( $list, $types = [], $performer = '', $title = '',
+ $pattern = '', $conds = [], $year = false, $month = false, $tagFilter = '',
+ $action = ''
+ ) {
parent::__construct( $list->getContext() );
$this->mConds = $conds;
$this->limitType( $types ); // also excludes hidden types
$this->limitPerformer( $performer );
$this->limitTitle( $title, $pattern );
+ $this->limitAction( $action );
$this->getDateCond( $year, $month );
$this->mTagFilter = $tagFilter;
- $this->mDb = wfGetDB( DB_SLAVE, 'logpager' );
+ $this->mDb = wfGetDB( DB_REPLICA, 'logpager' );
}
public function getDefaultQuery() {
if ( is_null( $usertitle ) ) {
return;
}
+ // Normalize username first so that non-existent users used
+ // in maintenance scripts work
+ $name = $usertitle->getText();
/* Fetch userid at first, if known, provides awesome query plan afterwards */
$userid = User::idFromName( $name );
if ( !$userid ) {
' != ' . LogPage::SUPPRESSED_USER;
}
- $this->performer = $usertitle->getText();
+ $this->performer = $name;
}
/**
}
}
+ /**
+ * Set the log_action field to a specified value (or values)
+ *
+ * @param string $action
+ */
+ private function limitAction( $action ) {
+ global $wgActionFilteredLogs;
+ // Allow to filter the log by actions
+ $type = $this->typeCGI;
+ if ( $type === '' ) {
+ // nothing to do
+ return;
+ }
+ $actions = $wgActionFilteredLogs;
+ if ( isset( $actions[$type] ) ) {
+ // log type can be filtered by actions
+ $this->mLogEventsList->setAllowedActions( array_keys( $actions[$type] ) );
+ if ( $action !== '' && isset( $actions[$type][$action] ) ) {
+ // add condition to query
+ $this->mConds['log_action'] = $actions[$type][$action];
+ $this->action = $action;
+ }
+ }
+ }
+
/**
* Constructs the most part of the query. Extra conditions are sprinkled in
* all over this class.
}
/**
+ * Guaranteed to either return a valid title string or a Zero-Length String
+ *
* @return string
*/
public function getPerformer() {
return $this->mTagFilter;
}
+ public function getAction() {
+ return $this->action;
+ }
+
public function doQuery() {
// Workaround MySQL optimizer bug
$this->mDb->setBigSelects();