MediaWiki  master
NewFilesPager.php
Go to the documentation of this file.
1 <?php
27 
29 
33  protected $gallery;
34 
38  protected $opts;
39 
47  ) {
48  parent::__construct( $context, $linkRenderer );
49 
50  $this->opts = $opts;
51  $this->setLimit( $opts->getValue( 'limit' ) );
52 
53  $startTimestamp = '';
54  $endTimestamp = '';
55  if ( $opts->getValue( 'start' ) ) {
56  $startTimestamp = $opts->getValue( 'start' ) . ' 00:00:00';
57  }
58  if ( $opts->getValue( 'end' ) ) {
59  $endTimestamp = $opts->getValue( 'end' ) . ' 23:59:59';
60  }
61  $this->getDateRangeCond( $startTimestamp, $endTimestamp );
62  }
63 
64  public function getQueryInfo() {
66  $conds = [];
67  $actorQuery = ActorMigration::newMigration()->getJoin( 'img_user' );
68  $tables = [ 'image' ] + $actorQuery['tables'];
69  $fields = [ 'img_name', 'img_timestamp' ] + $actorQuery['fields'];
70  $options = [];
71  $jconds = $actorQuery['joins'];
72 
73  $user = $opts->getValue( 'user' );
74  if ( $user !== '' ) {
75  $conds[] = ActorMigration::newMigration()
76  ->getWhere( wfGetDB( DB_REPLICA ), 'img_user', User::newFromName( $user, false ) )['conds'];
77  }
78 
79  if ( !$opts->getValue( 'showbots' ) ) {
80  $groupsWithBotPermission = MediaWikiServices::getInstance()
81  ->getPermissionManager()
82  ->getGroupsWithPermission( 'bot' );
83 
84  if ( count( $groupsWithBotPermission ) ) {
85  $dbr = wfGetDB( DB_REPLICA );
86  $tables[] = 'user_groups';
87  $conds[] = 'ug_group IS NULL';
88  $jconds['user_groups'] = [
89  'LEFT JOIN',
90  [
91  'ug_group' => $groupsWithBotPermission,
92  'ug_user = ' . $actorQuery['fields']['img_user'],
93  'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() )
94  ]
95  ];
96  }
97  }
98 
99  if ( $opts->getValue( 'hidepatrolled' ) ) {
100  $tables[] = 'recentchanges';
101  $conds['rc_type'] = RC_LOG;
102  $conds['rc_log_type'] = 'upload';
103  $conds['rc_patrolled'] = RecentChange::PRC_UNPATROLLED;
104  $conds['rc_namespace'] = NS_FILE;
105 
106  $jconds['recentchanges'] = [
107  'JOIN',
108  [
109  'rc_title = img_name',
110  'rc_actor = ' . $actorQuery['fields']['img_actor'],
111  'rc_timestamp = img_timestamp'
112  ]
113  ];
114  }
115 
116  if ( $opts->getValue( 'mediatype' ) ) {
117  $conds['img_media_type'] = $opts->getValue( 'mediatype' );
118  }
119 
120  $likeVal = $opts->getValue( 'like' );
121  if ( !$this->getConfig()->get( 'MiserMode' ) && $likeVal !== '' ) {
122  $dbr = wfGetDB( DB_REPLICA );
123  $likeObj = Title::newFromText( $likeVal );
124  if ( $likeObj instanceof Title ) {
125  $like = $dbr->buildLike(
126  $dbr->anyString(),
127  strtolower( $likeObj->getDBkey() ),
128  $dbr->anyString()
129  );
130  $conds[] = "LOWER(img_name) $like";
131  }
132  }
133 
134  // We're ordering by img_timestamp, but MariaDB sometimes likes to query other tables first
135  // and filesort the result set later.
136  // See T124205 / https://mariadb.atlassian.net/browse/MDEV-8880, and T244533
137  $options[] = 'STRAIGHT_JOIN';
138 
139  $query = [
140  'tables' => $tables,
141  'fields' => $fields,
142  'join_conds' => $jconds,
143  'conds' => $conds,
144  'options' => $options,
145  ];
146 
147  return $query;
148  }
149 
150  public function getIndexField() {
151  return 'img_timestamp';
152  }
153 
154  protected function getStartBody() {
155  if ( !$this->gallery ) {
156  // Note that null for mode is taken to mean use default.
157  $mode = $this->getRequest()->getVal( 'gallerymode', null );
158  try {
159  $this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() );
160  } catch ( Exception $e ) {
161  // User specified something invalid, fallback to default.
162  $this->gallery = ImageGalleryBase::factory( false, $this->getContext() );
163  }
164  }
165 
166  return '';
167  }
168 
169  protected function getEndBody() {
170  return $this->gallery->toHTML();
171  }
172 
173  public function formatRow( $row ) {
174  $name = $row->img_name;
175  $user = User::newFromId( $row->img_user );
176 
177  $title = Title::makeTitle( NS_FILE, $name );
178  $ul = $this->getLinkRenderer()->makeLink(
179  $user->getUserPage(),
180  $user->getName()
181  );
182  $time = $this->getLanguage()->userTimeAndDate( $row->img_timestamp, $this->getUser() );
183 
184  $this->gallery->add(
185  $title,
186  "$ul<br />\n<i>"
187  . htmlspecialchars( $time )
188  . "</i><br />\n",
189  '',
190  '',
191  [],
193  );
194  return '';
195  }
196 }
ContextSource\$context
IContextSource $context
Definition: ContextSource.php:33
ContextSource\getConfig
getConfig()
Definition: ContextSource.php:63
User\newFromId
static newFromId( $id)
Static factory method for creation from a given user ID.
Definition: User.php:559
Title\newFromText
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:332
ContextSource\getContext
getContext()
Get the base IContextSource object.
Definition: ContextSource.php:40
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:146
FormOptions\getValue
getValue( $name)
Get the value for the given option name.
Definition: FormOptions.php:182
ImageGalleryBase
Image gallery.
Definition: ImageGalleryBase.php:32
MediaWiki\Linker\LinkRenderer
Class that generates HTML links for pages.
Definition: LinkRenderer.php:43
RC_LOG
const RC_LOG
Definition: Defines.php:133
ImageGalleryBase\LOADING_LAZY
const LOADING_LAZY
Definition: ImageGalleryBase.php:34
NS_FILE
const NS_FILE
Definition: Defines.php:75
User\newFromName
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:535
IndexPager\$linkRenderer
LinkRenderer $linkRenderer
Definition: IndexPager.php:166
NewFilesPager\$gallery
ImageGalleryBase $gallery
Definition: NewFilesPager.php:33
ContextSource\getRequest
getRequest()
Definition: ContextSource.php:71
ActorMigration\newMigration
static newMigration()
Static constructor.
Definition: ActorMigration.php:139
$dbr
$dbr
Definition: testCompression.php:54
NewFilesPager\formatRow
formatRow( $row)
Returns an HTML string representing the result row $row.
Definition: NewFilesPager.php:173
ContextSource\getLanguage
getLanguage()
Definition: ContextSource.php:128
IndexPager\setLimit
setLimit( $limit)
Set the limit from an other source than the request.
Definition: IndexPager.php:314
wfGetDB
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
Definition: GlobalFunctions.php:2463
RangeChronologicalPager\getDateRangeCond
getDateRangeCond( $startStamp, $endStamp)
Set and return a date range condition using timestamps provided by the user.
Definition: RangeChronologicalPager.php:43
$title
$title
Definition: testCompression.php:38
NewFilesPager\getStartBody
getStartBody()
Hook into getBody(), allows text to be inserted at the start.
Definition: NewFilesPager.php:154
Title\makeTitle
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:595
DB_REPLICA
const DB_REPLICA
Definition: defines.php:25
RangeChronologicalPager
Pager for filtering by a range of dates.
Definition: RangeChronologicalPager.php:27
$ul
$ul
Definition: upgradeLogging.php:220
NewFilesPager\$opts
FormOptions $opts
Definition: NewFilesPager.php:38
NewFilesPager\__construct
__construct(IContextSource $context, FormOptions $opts, LinkRenderer $linkRenderer)
Definition: NewFilesPager.php:45
IndexPager\getLinkRenderer
getLinkRenderer()
Definition: IndexPager.php:932
IContextSource
Interface for objects which can provide a MediaWiki context on request.
Definition: IContextSource.php:53
NewFilesPager\getQueryInfo
getQueryInfo()
Provides all parameters needed for the main paged query.
Definition: NewFilesPager.php:64
Title
Represents a title within MediaWiki.
Definition: Title.php:42
RecentChange\PRC_UNPATROLLED
const PRC_UNPATROLLED
Definition: RecentChange.php:80
NewFilesPager\getEndBody
getEndBody()
Hook into getBody() for the end of the list.
Definition: NewFilesPager.php:169
NewFilesPager\getIndexField
getIndexField()
Returns the name of the index field.
Definition: NewFilesPager.php:150
ImageGalleryBase\factory
static factory( $mode=false, IContextSource $context=null)
Get a new image gallery.
Definition: ImageGalleryBase.php:116
FormOptions
Helper class to keep track of options when mixing links and form elements.
Definition: FormOptions.php:35
NewFilesPager
Definition: NewFilesPager.php:28