56 parent::__construct( $imagePage->getContext() );
57 $this->mImagePage = $imagePage;
58 $this->mTitle = $imagePage->getTitle()->createFragmentTarget(
'filehistory' );
61 $this->mRange = [ 0, 0 ];
64 $this->mLimitsShown = array_merge( [ 10 ], $this->mLimitsShown );
65 $this->mDefaultLimit = 10;
66 list( $this->mLimit, ) =
67 $this->mRequest->getLimitOffset( $this->mDefaultLimit,
'' );
102 if (
count( $this->mHist ) ) {
103 if ( $this->mImg->isLocal() ) {
106 for ( $i = $this->mRange[0]; $i <= $this->mRange[1]; $i++ ) {
107 $file = $this->mHist[$i];
108 $user = $file->getUser(
'text' );
112 $linkBatch->execute();
116 # Generate prev/next links
118 $s = $list->beginImageHistoryList( $navLink );
120 for ( $i = $this->mRange[0]; $i <= $this->mRange[1]; $i++ ) {
121 $file = $this->mHist[$i];
122 $s .= $list->imageHistoryLine( !$file->isOld(), $file );
124 $s .= $list->endImageHistoryList( $navLink );
126 if ( $list->getPreventClickjacking() ) {
134 if ( $this->mQueryDone ) {
137 $this->mImg = $this->mImagePage->getPage()->getFile();
138 if ( !$this->mImg->exists() ) {
141 $queryLimit = $this->mLimit + 1;
142 if ( $this->mIsBackwards ) {
144 $this->mHist = $this->mImg->getHistory( $queryLimit,
null, $this->mOffset,
false );
146 $numRows =
count( $this->mHist );
147 if ( $numRows <= $this->mLimit && $this->mImg->getTimestamp() >
$this->mOffset ) {
148 $this->mHist = array_merge( [ $this->mImg ], $this->mHist );
152 if ( !$this->mOffset || $this->mImg->getTimestamp() <
$this->mOffset ) {
156 $oiLimit =
count( $this->mHist ) ? $this->mLimit : $this->mLimit + 1;
158 $this->mHist = array_merge( $this->mHist,
159 $this->mImg->getHistory( $oiLimit, $this->mOffset,
null,
false ) );
161 $numRows =
count( $this->mHist );
163 # Index value of top item in the list
164 $firstIndex = $this->mIsBackwards ?
165 $this->mHist[$numRows - 1]->getTimestamp() : $this->mHist[0]->getTimestamp();
166 # Discard the extra result row if there is one
167 if ( $numRows > $this->mLimit && $numRows > 1 ) {
168 if ( $this->mIsBackwards ) {
169 # Index value of item past the index
170 $this->mPastTheEndIndex = $this->mHist[0]->getTimestamp();
171 # Index value of bottom item in the list
172 $lastIndex = $this->mHist[1]->getTimestamp();
174 $this->mRange = [ 1, $numRows - 1 ];
176 # Index value of item past the index
177 $this->mPastTheEndIndex = $this->mHist[$numRows - 1]->getTimestamp();
178 # Index value of bottom item in the list
179 $lastIndex = $this->mHist[$numRows - 2]->getTimestamp();
181 $this->mRange = [ 0, $numRows - 2 ];
184 # Setting indexes to an empty string means that they will be
185 # omitted if they would otherwise appear in URLs. It just so
186 # happens that this is the right thing to do in the standard
187 # UI, in all the relevant cases.
188 $this->mPastTheEndIndex =
'';
189 # Index value of bottom item in the list
190 $lastIndex = $this->mIsBackwards ?
191 $this->mHist[0]->getTimestamp() : $this->mHist[$numRows - 1]->getTimestamp();
193 $this->mRange = [ 0, $numRows - 1 ];
198 $this->mPastTheEndIndex =
'';
200 if ( $this->mIsBackwards ) {
201 $this->mIsFirst = ( $numRows < $queryLimit );
202 $this->mIsLast = ( $this->mOffset ==
'' );
203 $this->mLastShown = $firstIndex;
204 $this->mFirstShown = $lastIndex;
206 $this->mIsFirst = ( $this->mOffset ==
'' );
207 $this->mIsLast = ( $numRows < $queryLimit );
208 $this->mLastShown = $lastIndex;
209 $this->mFirstShown = $firstIndex;
211 $this->mQueryDone =
true;