MediaWiki
REL1_37
NewFilesPager.php
Go to the documentation of this file.
1
<?php
22
use
MediaWiki\Cache\LinkBatchFactory
;
23
use
MediaWiki\Linker\LinkRenderer
;
24
use
MediaWiki\Permissions\GroupPermissionsLookup
;
25
use
Wikimedia\Rdbms\ILoadBalancer
;
26
30
class
NewFilesPager
extends
RangeChronologicalPager
{
31
35
protected
$gallery
;
36
40
protected
$opts
;
41
43
private
$groupPermissionsLookup
;
44
46
private
$linkBatchFactory
;
47
56
public
function
__construct
(
57
IContextSource
$context
,
58
FormOptions
$opts
,
59
LinkRenderer
$linkRenderer
,
60
GroupPermissionsLookup
$groupPermissionsLookup
,
61
ILoadBalancer
$loadBalancer,
62
LinkBatchFactory
$linkBatchFactory
63
) {
64
// Set database before parent constructor to avoid setting it there with wfGetDB
65
$this->mDb = $loadBalancer->
getConnectionRef
( ILoadBalancer::DB_REPLICA );
66
67
parent::__construct(
$context
,
$linkRenderer
);
68
69
$this->opts =
$opts
;
70
$this->groupPermissionsLookup =
$groupPermissionsLookup
;
71
$this->linkBatchFactory =
$linkBatchFactory
;
72
$this->
setLimit
( $opts->
getValue
(
'limit'
) );
73
74
$startTimestamp =
''
;
75
$endTimestamp =
''
;
76
if
(
$opts
->
getValue
(
'start'
) ) {
77
$startTimestamp =
$opts
->
getValue
(
'start'
) .
' 00:00:00'
;
78
}
79
if
(
$opts
->
getValue
(
'end'
) ) {
80
$endTimestamp =
$opts
->
getValue
(
'end'
) .
' 23:59:59'
;
81
}
82
$this->
getDateRangeCond
( $startTimestamp, $endTimestamp );
83
}
84
85
public
function
getQueryInfo
() {
86
$opts
=
$this->opts
;
87
$conds = [];
88
$dbr
= $this->
getDatabase
();
89
$tables = [
'image'
,
'actor'
];
90
$fields = [
'img_name'
,
'img_timestamp'
,
'actor_user'
,
'actor_name'
];
91
$options = [];
92
$jconds = [
'actor'
=> [
'JOIN'
,
'actor_id=img_actor'
] ];
93
94
$user =
$opts
->
getValue
(
'user'
);
95
if
( $user !==
''
) {
96
$conds[
'actor_name'
] = $user;
97
}
98
99
if
( !
$opts
->
getValue
(
'showbots'
) ) {
100
$groupsWithBotPermission = $this->groupPermissionsLookup->getGroupsWithPermission(
'bot'
);
101
102
if
( count( $groupsWithBotPermission ) ) {
103
$tables[] =
'user_groups'
;
104
$conds[] =
'ug_group IS NULL'
;
105
$jconds[
'user_groups'
] = [
106
'LEFT JOIN'
,
107
[
108
'ug_group'
=> $groupsWithBotPermission,
109
'ug_user = actor_user'
,
110
'ug_expiry IS NULL OR ug_expiry >= '
.
$dbr
->addQuotes(
$dbr
->timestamp() )
111
]
112
];
113
}
114
}
115
116
if
(
$opts
->
getValue
(
'hidepatrolled'
) ) {
117
$tables[] =
'recentchanges'
;
118
$conds[
'rc_type'
] =
RC_LOG
;
119
$conds[
'rc_log_type'
] =
'upload'
;
120
$conds[
'rc_patrolled'
] = RecentChange::PRC_UNPATROLLED;
121
$conds[
'rc_namespace'
] =
NS_FILE
;
122
123
$jconds[
'recentchanges'
] = [
124
'JOIN'
,
125
[
126
'rc_title = img_name'
,
127
'rc_actor = img_actor'
,
128
'rc_timestamp = img_timestamp'
129
]
130
];
131
}
132
133
if
(
$opts
->
getValue
(
'mediatype'
) ) {
134
$conds[
'img_media_type'
] =
$opts
->
getValue
(
'mediatype'
);
135
}
136
137
$likeVal =
$opts
->
getValue
(
'like'
);
138
if
( !$this->
getConfig
()->
get
(
'MiserMode'
) && $likeVal !==
''
) {
139
$likeObj = Title::newFromText( $likeVal );
140
if
( $likeObj instanceof
Title
) {
141
$like =
$dbr
->buildLike(
142
$dbr
->anyString(),
143
strtolower( $likeObj->getDBkey() ),
144
$dbr
->anyString()
145
);
146
$conds[] =
"LOWER(img_name) $like"
;
147
}
148
}
149
150
// We're ordering by img_timestamp, but MariaDB sometimes likes to query other tables first
151
// and filesort the result set later.
152
// See T124205 / https://mariadb.atlassian.net/browse/MDEV-8880, and T244533
153
// Twist: This would cause issues if the user is set and we need to check user existence first
154
if
( $user ===
''
) {
155
$options[] =
'STRAIGHT_JOIN'
;
156
}
157
158
$query = [
159
'tables'
=> $tables,
160
'fields'
=> $fields,
161
'join_conds'
=> $jconds,
162
'conds'
=> $conds,
163
'options'
=> $options,
164
];
165
166
return
$query;
167
}
168
169
public
function
getIndexField
() {
170
return
'img_timestamp'
;
171
}
172
173
protected
function
getStartBody
() {
174
if
( !$this->gallery ) {
175
// Note that null for mode is taken to mean use default.
176
$mode = $this->
getRequest
()->getVal(
'gallerymode'
,
null
);
177
try
{
178
$this->gallery = ImageGalleryBase::factory( $mode, $this->
getContext
() );
179
}
catch
( Exception $e ) {
180
// User specified something invalid, fallback to default.
181
$this->gallery = ImageGalleryBase::factory(
false
, $this->
getContext
() );
182
}
183
}
184
185
return
''
;
186
}
187
188
protected
function
getEndBody
() {
189
return
$this->gallery->toHTML();
190
}
191
192
protected
function
doBatchLookups
() {
193
$this->mResult->seek( 0 );
194
$lb = $this->linkBatchFactory->newLinkBatch();
195
foreach
( $this->mResult as $row ) {
196
if
( $row->actor_user ) {
197
$lb->add(
NS_USER
, $row->actor_name );
198
}
199
}
200
$lb->execute();
201
}
202
203
public
function
formatRow
( $row ) {
204
$username = $row->actor_name;
205
206
if
( ExternalUserNames::isExternal( $username ) ) {
207
$ul = htmlspecialchars( $username );
208
}
else
{
209
$ul = $this->
getLinkRenderer
()->makeLink(
210
new
TitleValue
(
NS_USER
, $username ),
211
$username
212
);
213
}
214
$time = $this->
getLanguage
()->userTimeAndDate( $row->img_timestamp, $this->getUser() );
215
216
$this->gallery->add(
217
Title::makeTitle(
NS_FILE
, $row->img_name ),
218
"$ul<br />\n<i>"
219
. htmlspecialchars( $time )
220
.
"</i><br />\n"
,
221
''
,
222
''
,
223
[],
224
ImageGalleryBase::LOADING_LAZY
225
);
226
227
return
''
;
228
}
229
}
NS_USER
const NS_USER
Definition
Defines.php:66
NS_FILE
const NS_FILE
Definition
Defines.php:70
RC_LOG
const RC_LOG
Definition
Defines.php:117
getContext
getContext()
ContextSource\getRequest
getRequest()
Definition
ContextSource.php:81
ContextSource\getConfig
getConfig()
Definition
ContextSource.php:72
ContextSource\$context
IContextSource $context
Definition
ContextSource.php:39
ContextSource\getLanguage
getLanguage()
Definition
ContextSource.php:153
FormOptions
Helper class to keep track of options when mixing links and form elements.
Definition
FormOptions.php:35
FormOptions\getValue
getValue( $name)
Get the value for the given option name.
Definition
FormOptions.php:182
ImageGalleryBase
Image gallery.
Definition
ImageGalleryBase.php:32
IndexPager\getLinkRenderer
getLinkRenderer()
Definition
IndexPager.php:982
IndexPager\getDatabase
getDatabase()
Get the Database object in use.
Definition
IndexPager.php:246
IndexPager\$linkRenderer
LinkRenderer $linkRenderer
Definition
IndexPager.php:167
IndexPager\setLimit
setLimit( $limit)
Set the limit from an other source than the request.
Definition
IndexPager.php:327
MediaWiki\Cache\LinkBatchFactory
Definition
LinkBatchFactory.php:39
MediaWiki\Linker\LinkRenderer
Class that generates HTML links for pages.
Definition
LinkRenderer.php:43
MediaWiki\Permissions\GroupPermissionsLookup
Definition
GroupPermissionsLookup.php:30
NewFilesPager
Definition
NewFilesPager.php:30
NewFilesPager\getIndexField
getIndexField()
Returns the name of the index field.
Definition
NewFilesPager.php:169
NewFilesPager\getQueryInfo
getQueryInfo()
Provides all parameters needed for the main paged query.
Definition
NewFilesPager.php:85
NewFilesPager\getEndBody
getEndBody()
Hook into getBody() for the end of the list.
Definition
NewFilesPager.php:188
NewFilesPager\$linkBatchFactory
LinkBatchFactory $linkBatchFactory
Definition
NewFilesPager.php:46
NewFilesPager\$groupPermissionsLookup
GroupPermissionsLookup $groupPermissionsLookup
Definition
NewFilesPager.php:43
NewFilesPager\formatRow
formatRow( $row)
Returns an HTML string representing the result row $row.
Definition
NewFilesPager.php:203
NewFilesPager\getStartBody
getStartBody()
Hook into getBody(), allows text to be inserted at the start.
Definition
NewFilesPager.php:173
NewFilesPager\__construct
__construct(IContextSource $context, FormOptions $opts, LinkRenderer $linkRenderer, GroupPermissionsLookup $groupPermissionsLookup, ILoadBalancer $loadBalancer, LinkBatchFactory $linkBatchFactory)
Definition
NewFilesPager.php:56
NewFilesPager\doBatchLookups
doBatchLookups()
Called from getBody(), before getStartBody() is called and after doQuery() was called.
Definition
NewFilesPager.php:192
NewFilesPager\$opts
FormOptions $opts
Definition
NewFilesPager.php:40
NewFilesPager\$gallery
ImageGalleryBase $gallery
Definition
NewFilesPager.php:35
RangeChronologicalPager
Pager for filtering by a range of dates.
Definition
RangeChronologicalPager.php:28
RangeChronologicalPager\getDateRangeCond
getDateRangeCond( $startStamp, $endStamp)
Set and return a date range condition using timestamps provided by the user.
Definition
RangeChronologicalPager.php:46
TitleValue
Represents a page (or page fragment) title within MediaWiki.
Definition
TitleValue.php:40
Title
Represents a title within MediaWiki.
Definition
Title.php:48
IContextSource
Interface for objects which can provide a MediaWiki context on request.
Definition
IContextSource.php:58
Wikimedia\Rdbms\ILoadBalancer
Database cluster connection, tracking, load balancing, and transaction manager interface.
Definition
ILoadBalancer.php:81
Wikimedia\Rdbms\ILoadBalancer\getConnectionRef
getConnectionRef( $i, $groups=[], $domain=false, $flags=0)
Get a live database handle reference for a server index.
$dbr
$dbr
Definition
testCompression.php:54
includes
specials
pagers
NewFilesPager.php
Generated on Fri Apr 5 2024 23:40:57 for MediaWiki by
1.9.8