20use MediaWiki\SpecialPage\ContributionsRangeTrait;
27use Wikimedia\Timestamp\TimestampFormat as TS;
40 use ContributionsRangeTrait;
61 $linkRenderer ?? $services->getLinkRenderer(),
62 $linkBatchFactory ?? $services->getLinkBatchFactory(),
63 $hookContainer ?? $services->getHookContainer(),
66 $commentFormatter ?? $services->getCommentFormatter(),
67 $services->getUserFactory(),
83 private function getTargetTable() {
85 $ipRangeConds = $this->targetUser->isRegistered()
86 ? null : $this->getIpRangeConds( $dbr, $this->target );
87 if ( $ipRangeConds ) {
96 $revQuery = $this->revisionStore->getQueryInfo( [
'page',
'user' ] );
98 'tables' => $revQuery[
'tables'],
99 'fields' => array_merge( $revQuery[
'fields'], [
'page_is_new' ] ),
102 'join_conds' => $revQuery[
'joins'],
106 $ipRangeConds = !$this->targetUser->isRegistered() ?
107 $this->getIpRangeConds( $this->
getDatabase(), $this->target ) :
109 if ( $ipRangeConds ) {
111 array_unshift( $queryInfo[
'tables'],
'ip_changes' );
112 $queryInfo[
'join_conds'][
'revision'] = [
113 'JOIN', [
'rev_id = ipc_rev_id' ]
115 $queryInfo[
'conds'][] = $ipRangeConds;
117 $queryInfo[
'conds'][
'actor_name'] = $this->targetUser->getName();
119 $queryInfo[
'options'][
'USE INDEX'][
'revision'] =
'rev_actor_timestamp';
131 private function getIpRangeConds( $db, $ip ) {
133 if ( !$this->isQueryableRange( $ip, $this->
getConfig() ) ) {
137 [ $start, $end ] = IPUtils::parseRange( $ip );
139 return $db->expr(
'ipc_hex',
'>=', $start )->and(
'ipc_hex',
'<=', $end );
150 $target = $this->getTargetTable();
153 return 'rev_timestamp';
155 return 'ipc_rev_timestamp';
158 __METHOD__ .
": Unknown value '$target' from " . static::class .
'::getTargetTable()', 0
160 return 'rev_timestamp';
172 $target = $this->getTargetTable();
177 return [
'ipc_rev_id' ];
180 __METHOD__ .
": Unknown value '$target' from " . static::class .
'::getTargetTable()', 0
193 $start = $opts[
'start'] ??
'';
194 $end = $opts[
'end'] ??
'';
195 $year = $opts[
'year'] ??
'';
196 $month = $opts[
'month'] ??
'';
198 if ( $start !==
'' && $end !==
'' && $start > $end ) {
205 if ( $year !==
'' || $month !==
'' ) {
209 $legacyTimestamp = ReverseChronologicalPager::getOffsetDate( $year, $month );
210 $legacyDateTime =
new DateTime( $legacyTimestamp->getTimestamp( TS::ISO_8601 ) );
211 $legacyDateTime = $legacyDateTime->modify(
'-1 day' );
216 $end = $legacyDateTime->format(
'Y-m-d' );
219 $opts[
'start'] = $start;
230class_alias( ContribsPager::class,
'ContribsPager' );
233class_alias( ContribsPager::class,
'MediaWiki\\Pager\\ContribsPager' );
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
Factory for LinkBatch objects to batch query page metadata.
Interface for objects which can provide a MediaWiki context on request.