MediaWiki  1.34.4
NewPagesPager.php
Go to the documentation of this file.
1 <?php
26 
28 
32  protected $opts;
33 
37  protected $mForm;
38 
43  public function __construct( $form, FormOptions $opts ) {
44  parent::__construct( $form->getContext() );
45  $this->mForm = $form;
46  $this->opts = $opts;
47  }
48 
49  function getQueryInfo() {
50  $rcQuery = RecentChange::getQueryInfo();
51 
52  $conds = [];
53  $conds['rc_new'] = 1;
54 
55  $username = $this->opts->getValue( 'username' );
56  $user = Title::makeTitleSafe( NS_USER, $username );
57 
58  $size = abs( intval( $this->opts->getValue( 'size' ) ) );
59  if ( $size > 0 ) {
60  if ( $this->opts->getValue( 'size-mode' ) === 'max' ) {
61  $conds[] = 'page_len <= ' . $size;
62  } else {
63  $conds[] = 'page_len >= ' . $size;
64  }
65  }
66 
67  if ( $user ) {
68  $conds[] = ActorMigration::newMigration()->getWhere(
69  $this->mDb, 'rc_user', User::newFromName( $user->getText(), false ), false
70  )['conds'];
71  } elseif ( $this->canAnonymousUsersCreatePages() && $this->opts->getValue( 'hideliu' ) ) {
72  # If anons cannot make new pages, don't "exclude logged in users"!
73  $conds[] = ActorMigration::newMigration()->isAnon( $rcQuery['fields']['rc_user'] );
74  }
75 
76  $conds = array_merge( $conds, $this->getNamespaceCond() );
77 
78  # If this user cannot see patrolled edits or they are off, don't do dumb queries!
79  if ( $this->opts->getValue( 'hidepatrolled' ) && $this->getUser()->useNPPatrol() ) {
80  $conds['rc_patrolled'] = RecentChange::PRC_UNPATROLLED;
81  }
82 
83  if ( $this->opts->getValue( 'hidebots' ) ) {
84  $conds['rc_bot'] = 0;
85  }
86 
87  if ( $this->opts->getValue( 'hideredirs' ) ) {
88  $conds['page_is_redirect'] = 0;
89  }
90 
91  // Allow changes to the New Pages query
92  $tables = array_merge( $rcQuery['tables'], [ 'page' ] );
93  $fields = array_merge( $rcQuery['fields'], [
94  'length' => 'page_len', 'rev_id' => 'page_latest', 'page_namespace', 'page_title'
95  ] );
96  $join_conds = [ 'page' => [ 'JOIN', 'page_id=rc_cur_id' ] ] + $rcQuery['joins'];
97 
98  // Avoid PHP 7.1 warning from passing $this by reference
99  $pager = $this;
100  Hooks::run( 'SpecialNewpagesConditions',
101  [ &$pager, $this->opts, &$conds, &$tables, &$fields, &$join_conds ] );
102 
103  $info = [
104  'tables' => $tables,
105  'fields' => $fields,
106  'conds' => $conds,
107  'options' => [],
108  'join_conds' => $join_conds
109  ];
110 
111  // Modify query for tags
113  $info['tables'],
114  $info['fields'],
115  $info['conds'],
116  $info['join_conds'],
117  $info['options'],
118  $this->opts['tagfilter']
119  );
120 
121  return $info;
122  }
123 
124  private function canAnonymousUsersCreatePages() {
125  $pm = MediaWikiServices::getInstance()->getPermissionManager();
126  return ( $pm->groupHasPermission( '*', 'createpage' ) ||
127  $pm->groupHasPermission( '*', 'createtalk' )
128  );
129  }
130 
131  // Based on ContribsPager.php
132  function getNamespaceCond() {
133  $namespace = $this->opts->getValue( 'namespace' );
134  if ( $namespace === 'all' || $namespace === '' ) {
135  return [];
136  }
137 
138  $namespace = intval( $namespace );
139  $invert = $this->opts->getValue( 'invert' );
140  $associated = $this->opts->getValue( 'associated' );
141 
142  $eq_op = $invert ? '!=' : '=';
143  $bool_op = $invert ? 'AND' : 'OR';
144 
145  $selectedNS = $this->mDb->addQuotes( $namespace );
146  if ( !$associated ) {
147  return [ "rc_namespace $eq_op $selectedNS" ];
148  }
149 
150  $associatedNS = $this->mDb->addQuotes(
151  MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociated( $namespace )
152  );
153  return [
154  "rc_namespace $eq_op $selectedNS " .
155  $bool_op .
156  " rc_namespace $eq_op $associatedNS"
157  ];
158  }
159 
160  function getIndexField() {
161  return 'rc_timestamp';
162  }
163 
164  function formatRow( $row ) {
165  return $this->mForm->formatRow( $row );
166  }
167 
168  protected function getStartBody() {
169  # Do a batch existence check on pages
170  $linkBatch = new LinkBatch();
171  foreach ( $this->mResult as $row ) {
172  $linkBatch->add( NS_USER, $row->rc_user_text );
173  $linkBatch->add( NS_USER_TALK, $row->rc_user_text );
174  $linkBatch->add( $row->page_namespace, $row->page_title );
175  }
176  $linkBatch->execute();
177 
178  return '<ul>';
179  }
180 
181  protected function getEndBody() {
182  return '</ul>';
183  }
184 }
RecentChange\getQueryInfo
static getQueryInfo()
Return the tables, fields, and join conditions to be selected to create a new recentchanges object.
Definition: RecentChange.php:233
NewPagesPager\getIndexField
getIndexField()
This function should be overridden to return the name of the index fi- eld.
Definition: NewPagesPager.php:160
NewPagesPager\$opts
FormOptions $opts
Definition: NewPagesPager.php:32
LinkBatch
Class representing a list of titles The execute() method checks them all for existence and adds them ...
Definition: LinkBatch.php:34
NewPagesPager\canAnonymousUsersCreatePages
canAnonymousUsersCreatePages()
Definition: NewPagesPager.php:124
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:117
NewPagesPager\getStartBody
getStartBody()
Hook into getBody(), allows text to be inserted at the start.
Definition: NewPagesPager.php:168
NewPagesPager\getNamespaceCond
getNamespaceCond()
Definition: NewPagesPager.php:132
User\newFromName
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:518
NewPagesPager\getEndBody
getEndBody()
Hook into getBody() for the end of the list.
Definition: NewPagesPager.php:181
ActorMigration\newMigration
static newMigration()
Static constructor.
Definition: ActorMigration.php:136
ChangeTags\modifyDisplayQuery
static modifyDisplayQuery(&$tables, &$fields, &$conds, &$join_conds, &$options, $filter_tag='')
Applies all tags-related changes to a query.
Definition: ChangeTags.php:772
NewPagesPager\getQueryInfo
getQueryInfo()
This function should be overridden to provide all parameters needed for the main paged query.
Definition: NewPagesPager.php:49
Title\makeTitleSafe
static makeTitleSafe( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:613
NS_USER_TALK
const NS_USER_TALK
Definition: Defines.php:72
NewPagesPager\formatRow
formatRow( $row)
Abstract formatting function.
Definition: NewPagesPager.php:164
NewPagesPager
Definition: NewPagesPager.php:27
SpecialNewpages
A special page that list newly created pages.
Definition: SpecialNewpages.php:31
RecentChange\PRC_UNPATROLLED
const PRC_UNPATROLLED
Definition: RecentChange.php:79
NewPagesPager\__construct
__construct( $form, FormOptions $opts)
Definition: NewPagesPager.php:43
NS_USER
const NS_USER
Definition: Defines.php:71
ReverseChronologicalPager
Efficient paging for SQL queries.
Definition: ReverseChronologicalPager.php:28
FormOptions
Helper class to keep track of options when mixing links and form elements.
Definition: FormOptions.php:35
Hooks\run
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
Definition: Hooks.php:200
NewPagesPager\$mForm
SpecialNewpages $mForm
Definition: NewPagesPager.php:37