11use MediaWiki\Cache\LinkBatchFactory;
20use MediaWiki\SpecialPage\ContributionsRangeTrait;
27use Wikimedia\Timestamp\TimestampFormat as TS;
40 use ContributionsRangeTrait;
59 $dbProvider ??= $services->getConnectionProvider();
62 $linkRenderer ?? $services->getLinkRenderer(),
63 $linkBatchFactory ?? $services->getLinkBatchFactory(),
64 $hookContainer ?? $services->getHookContainer(),
67 $commentFormatter ?? $services->getCommentFormatter(),
68 $services->getUserFactory(),
84 private function getTargetTable() {
86 $ipRangeConds = $this->targetUser->isRegistered()
87 ? null : $this->getIpRangeConds( $dbr, $this->target );
88 if ( $ipRangeConds ) {
97 $revQuery = $this->revisionStore->getQueryInfo( [
'page',
'user' ] );
99 'tables' => $revQuery[
'tables'],
100 'fields' => array_merge( $revQuery[
'fields'], [
'page_is_new' ] ),
103 'join_conds' => $revQuery[
'joins'],
107 $ipRangeConds = !$this->targetUser->isRegistered() ?
108 $this->getIpRangeConds( $this->
getDatabase(), $this->target ) :
110 if ( $ipRangeConds ) {
112 array_unshift( $queryInfo[
'tables'],
'ip_changes' );
113 $queryInfo[
'join_conds'][
'revision'] = [
114 'JOIN', [
'rev_id = ipc_rev_id' ]
116 $queryInfo[
'conds'][] = $ipRangeConds;
118 $queryInfo[
'conds'][
'actor_name'] = $this->targetUser->getName();
120 $queryInfo[
'options'][
'USE INDEX'][
'revision'] =
'rev_actor_timestamp';
132 private function getIpRangeConds( $db, $ip ) {
134 if ( !$this->isQueryableRange( $ip, $this->
getConfig() ) ) {
138 [ $start, $end ] = IPUtils::parseRange( $ip );
140 return $db->expr(
'ipc_hex',
'>=', $start )->and(
'ipc_hex',
'<=', $end );
151 $target = $this->getTargetTable();
154 return 'rev_timestamp';
156 return 'ipc_rev_timestamp';
159 __METHOD__ .
": Unknown value '$target' from " . static::class .
'::getTargetTable()', 0
161 return 'rev_timestamp';
173 $target = $this->getTargetTable();
178 return [
'ipc_rev_id' ];
181 __METHOD__ .
": Unknown value '$target' from " . static::class .
'::getTargetTable()', 0
194 $start = $opts[
'start'] ??
'';
195 $end = $opts[
'end'] ??
'';
196 $year = $opts[
'year'] ??
'';
197 $month = $opts[
'month'] ??
'';
199 if ( $start !==
'' && $end !==
'' && $start > $end ) {
206 if ( $year !==
'' || $month !==
'' ) {
210 $legacyTimestamp = ReverseChronologicalPager::getOffsetDate( $year, $month );
211 $legacyDateTime =
new DateTime( $legacyTimestamp->getTimestamp( TS::ISO_8601 ) );
212 $legacyDateTime = $legacyDateTime->modify(
'-1 day' );
217 $end = $legacyDateTime->format(
'Y-m-d' );
220 $opts[
'start'] = $start;
231class_alias( ContribsPager::class,
'ContribsPager' );
234class_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.