MediaWiki  master
SpecialActiveUsers.php
Go to the documentation of this file.
1 <?php
30 
31  public function __construct() {
32  parent::__construct( 'Activeusers' );
33  }
34 
38  public function execute( $par ) {
39  $out = $this->getOutput();
40 
41  $this->setHeaders();
42  $this->outputHeader();
43 
44  $opts = new FormOptions();
45 
46  $opts->add( 'username', '' );
47  $opts->add( 'groups', [] );
48  $opts->add( 'excludegroups', [] );
49  // Backwards-compatibility with old URLs
50  $opts->add( 'hidebots', false, FormOptions::BOOL );
51  $opts->add( 'hidesysops', false, FormOptions::BOOL );
52 
53  $opts->fetchValuesFromRequest( $this->getRequest() );
54 
55  if ( $par !== null ) {
56  $opts->setValue( 'username', $par );
57  }
58 
59  $pager = new ActiveUsersPager( $this->getContext(), $opts );
60  $usersBody = $pager->getBody();
61 
62  $this->buildForm();
63 
64  if ( $usersBody ) {
65  $out->addHTML(
66  $pager->getNavigationBar() .
67  Html::rawElement( 'ul', [], $usersBody ) .
68  $pager->getNavigationBar()
69  );
70  $out->addModuleStyles( 'mediawiki.interface.helpers.styles' );
71  } else {
72  $out->addWikiMsg( 'activeusers-noresult' );
73  }
74  }
75 
79  protected function buildForm() {
80  $groups = User::getAllGroups();
81 
82  $options = [];
83  foreach ( $groups as $group ) {
84  $msg = htmlspecialchars( UserGroupMembership::getGroupName( $group ) );
85  $options[$msg] = $group;
86  }
87  asort( $options );
88 
89  // Backwards-compatibility with old URLs
90  $req = $this->getRequest();
91  $excludeDefault = [];
92  if ( $req->getCheck( 'hidebots' ) ) {
93  $excludeDefault[] = 'bot';
94  }
95  if ( $req->getCheck( 'hidesysops' ) ) {
96  $excludeDefault[] = 'sysop';
97  }
98 
99  $formDescriptor = [
100  'username' => [
101  'type' => 'user',
102  'name' => 'username',
103  'label-message' => 'activeusers-from',
104  ],
105  'groups' => [
106  'type' => 'multiselect',
107  'dropdown' => true,
108  'flatlist' => true,
109  'name' => 'groups',
110  'label-message' => 'activeusers-groups',
111  'options' => $options,
112  ],
113  'excludegroups' => [
114  'type' => 'multiselect',
115  'dropdown' => true,
116  'flatlist' => true,
117  'name' => 'excludegroups',
118  'label-message' => 'activeusers-excludegroups',
119  'options' => $options,
120  'default' => $excludeDefault,
121  ],
122  ];
123 
124  HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
125  // For the 'multiselect' field values to be preserved on submit
126  ->setFormIdentifier( 'specialactiveusers' )
127  ->setIntro( $this->getIntroText() )
128  ->setWrapperLegendMsg( 'activeusers' )
129  ->setSubmitTextMsg( 'activeusers-submit' )
130  // prevent setting subpage and 'username' parameter at the same time
131  ->setAction( $this->getPageTitle()->getLocalURL() )
132  ->setMethod( 'get' )
133  ->prepareForm()
134  ->displayForm( false );
135  }
136 
141  protected function getIntroText() {
142  $days = $this->getConfig()->get( 'ActiveUserDays' );
143 
144  $intro = $this->msg( 'activeusers-intro' )->numParams( $days )->parse();
145 
146  // Mention the level of cache staleness...
147  $dbr = wfGetDB( DB_REPLICA, 'recentchanges' );
148  $rcMax = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)', '', __METHOD__ );
149  if ( $rcMax ) {
150  $cTime = $dbr->selectField( 'querycache_info',
151  'qci_timestamp',
152  [ 'qci_type' => 'activeusers' ],
153  __METHOD__
154  );
155  if ( $cTime ) {
156  $secondsOld = wfTimestamp( TS_UNIX, $rcMax ) - wfTimestamp( TS_UNIX, $cTime );
157  } else {
158  $rcMin = $dbr->selectField( 'recentchanges', 'MIN(rc_timestamp)' );
159  $secondsOld = time() - wfTimestamp( TS_UNIX, $rcMin );
160  }
161  if ( $secondsOld > 0 ) {
162  $intro .= $this->msg( 'cachedspecial-viewing-cached-ttl' )
163  ->durationParams( $secondsOld )->parseAsBlock();
164  }
165  }
166 
167  return $intro;
168  }
169 
170  protected function getGroupName() {
171  return 'users';
172  }
173 }
SpecialPage\getPageTitle
getPageTitle( $subpage=false)
Get a self-referential title object.
Definition: SpecialPage.php:672
SpecialPage\msg
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
Definition: SpecialPage.php:792
SpecialActiveUsers\execute
execute( $par)
Definition: SpecialActiveUsers.php:38
SpecialActiveUsers\getGroupName
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Definition: SpecialActiveUsers.php:170
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:719
UserGroupMembership\getGroupName
static getGroupName( $group)
Gets the localized friendly name for a group, if it exists.
Definition: UserGroupMembership.php:435
wfTimestamp
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
Definition: GlobalFunctions.php:1871
SpecialActiveUsers\buildForm
buildForm()
Generate and output the form.
Definition: SpecialActiveUsers.php:79
SpecialActiveUsers\__construct
__construct()
Definition: SpecialActiveUsers.php:31
$dbr
$dbr
Definition: testCompression.php:52
ActiveUsersPager
This class is used to get a list of active users.
Definition: ActiveUsersPager.php:31
SpecialPage\getConfig
getConfig()
Shortcut to get main config object.
Definition: SpecialPage.php:758
wfGetDB
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
Definition: GlobalFunctions.php:2579
SpecialPage\setHeaders
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
Definition: SpecialPage.php:537
DB_REPLICA
const DB_REPLICA
Definition: defines.php:25
SpecialActiveUsers\getIntroText
getIntroText()
Return introductory message.
Definition: SpecialActiveUsers.php:141
SpecialPage\getContext
getContext()
Gets the context this SpecialPage is executed in.
Definition: SpecialPage.php:692
SpecialPage
Parent class for all special pages.
Definition: SpecialPage.php:37
SpecialPage\getRequest
getRequest()
Get the WebRequest being used for this instance.
Definition: SpecialPage.php:709
User\getAllGroups
static getAllGroups()
Return the set of defined explicit groups.
Definition: User.php:4877
SpecialActiveUsers
Implements Special:Activeusers.
Definition: SpecialActiveUsers.php:29
FormOptions
Helper class to keep track of options when mixing links and form elements.
Definition: FormOptions.php:35
HTMLForm\factory
static factory( $displayFormat,... $arguments)
Construct a HTMLForm object for given display type.
Definition: HTMLForm.php:307
SpecialPage\outputHeader
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
Definition: SpecialPage.php:639
FormOptions\BOOL
const BOOL
Boolean type, maps guessType() to WebRequest::getBool()
Definition: FormOptions.php:51