MediaWiki  1.34.0
RangeChronologicalPager.php
Go to the documentation of this file.
1 <?php
21 use Wikimedia\Timestamp\TimestampException;
22 
28 
30  protected $rangeConds = [];
31 
43  public function getDateRangeCond( $startStamp, $endStamp ) {
44  $this->rangeConds = [];
45 
46  try {
47  if ( $startStamp !== '' ) {
48  $startTimestamp = MWTimestamp::getInstance( $startStamp );
49  $startOffset = $this->mDb->timestamp( $startTimestamp->getTimestamp() );
50  $this->rangeConds[] = $this->mIndexField . '>=' . $this->mDb->addQuotes( $startOffset );
51  }
52 
53  if ( $endStamp !== '' ) {
54  $endTimestamp = MWTimestamp::getInstance( $endStamp );
55  $endOffset = $this->mDb->timestamp( $endTimestamp->getTimestamp() );
56  $this->rangeConds[] = $this->mIndexField . '<=' . $this->mDb->addQuotes( $endOffset );
57 
58  // populate existing variables for compatibility with parent
59  $this->mYear = (int)$endTimestamp->format( 'Y' );
60  $this->mMonth = (int)$endTimestamp->format( 'm' );
61  $this->mDay = (int)$endTimestamp->format( 'd' );
62  $this->mOffset = $endOffset;
63  }
64  } catch ( TimestampException $ex ) {
65  return null;
66  }
67 
68  return $this->rangeConds;
69  }
70 
80  public function getDateCond( $year, $month, $day = -1 ) {
81  // run through getDateRangeCond so rangeConds, mOffset, ... are set
82  $legacyTimestamp = self::getOffsetDate( $year, $month, $day );
83  // ReverseChronologicalPager uses strict inequality for the end date ('<'),
84  // but this class uses '<=' and expects extending classes to handle modifying the end date.
85  // Therefore, we need to subtract one second from the output of getOffsetDate to make it
86  // work with the '<=' inequality used in this class.
87  $legacyTimestamp->timestamp = $legacyTimestamp->timestamp->modify( '-1 second' );
88  $this->getDateRangeCond( '', $legacyTimestamp->getTimestamp( TS_MW ) );
89  return $this->mOffset;
90  }
91 
100  protected function buildQueryInfo( $offset, $limit, $order ) {
101  list( $tables, $fields, $conds, $fname, $options, $join_conds ) = parent::buildQueryInfo(
102  $offset,
103  $limit,
104  $order
105  );
106 
107  if ( $this->rangeConds ) {
108  $conds = array_merge( $conds, $this->rangeConds );
109  }
110 
111  return [ $tables, $fields, $conds, $fname, $options, $join_conds ];
112  }
113 }
ReverseChronologicalPager\getOffsetDate
static getOffsetDate( $year, $month, $day=-1)
Core logic of determining the mOffset timestamp such that we can get all items with a timestamp up to...
Definition: ReverseChronologicalPager.php:122
RangeChronologicalPager\getDateRangeCond
getDateRangeCond( $startStamp, $endStamp)
Set and return a date range condition using timestamps provided by the user.
Definition: RangeChronologicalPager.php:43
MWTimestamp\getInstance
static getInstance( $ts=false)
Get a timestamp instance in GMT.
Definition: MWTimestamp.php:39
RangeChronologicalPager
Pager for filtering by a range of dates.
Definition: RangeChronologicalPager.php:27
RangeChronologicalPager\getDateCond
getDateCond( $year, $month, $day=-1)
Takes ReverseChronologicalPager::getDateCond parameters and repurposes them to work with timestamp-ba...
Definition: RangeChronologicalPager.php:80
RangeChronologicalPager\$rangeConds
string[] $rangeConds
Definition: RangeChronologicalPager.php:30
RangeChronologicalPager\buildQueryInfo
buildQueryInfo( $offset, $limit, $order)
Build variables to use by the database wrapper.
Definition: RangeChronologicalPager.php:100
ReverseChronologicalPager
Efficient paging for SQL queries.
Definition: ReverseChronologicalPager.php:28
IndexPager\$mOffset
mixed $mOffset
The starting point to enumerate entries.
Definition: IndexPager.php:90