MediaWiki  master
CreditsAction.php
Go to the documentation of this file.
1 <?php
27 
32 
33  public function getName() {
34  return 'credits';
35  }
36 
37  protected function getDescription() {
38  return $this->msg( 'creditspage' )->escaped();
39  }
40 
46  public function onView() {
47  if ( $this->page->getID() == 0 ) {
48  $s = $this->msg( 'nocredits' )->parse();
49  } else {
50  $s = $this->getCredits( -1 );
51  }
52 
53  return Html::rawElement( 'div', [ 'id' => 'mw-credits' ], $s );
54  }
55 
63  public function getCredits( $cnt, $showIfMax = true ) {
64  $s = '';
65 
66  if ( $cnt != 0 ) {
67  $s = $this->getAuthor( $this->page );
68  if ( $cnt > 1 || $cnt < 0 ) {
69  $s .= ' ' . $this->getContributors( $cnt - 1, $showIfMax );
70  }
71  }
72 
73  return $s;
74  }
75 
81  protected function getAuthor( Page $page ) {
82  $user = User::newFromName( $page->getUserText(), false );
83 
84  $timestamp = $page->getTimestamp();
85  if ( $timestamp ) {
86  $lang = $this->getLanguage();
87  $d = $lang->date( $page->getTimestamp(), true );
88  $t = $lang->time( $page->getTimestamp(), true );
89  } else {
90  $d = '';
91  $t = '';
92  }
93 
94  return $this->msg( 'lastmodifiedatby', $d, $t )->rawParams(
95  $this->userLink( $user ) )->params( $user->getName() )->escaped();
96  }
97 
104  protected function canShowRealUserName() {
105  $hiddenPrefs = $this->context->getConfig()->get( 'HiddenPrefs' );
106  return !in_array( 'realname', $hiddenPrefs );
107  }
108 
115  protected function getContributors( $cnt, $showIfMax ) {
116  $contributors = $this->page->getContributors();
117 
118  $others_link = false;
119 
120  # Hmm... too many to fit!
121  if ( $cnt > 0 && $contributors->count() > $cnt ) {
122  $others_link = $this->othersLink();
123  if ( !$showIfMax ) {
124  return $this->msg( 'othercontribs' )->rawParams(
125  $others_link )->params( $contributors->count() )->escaped();
126  }
127  }
128 
129  $real_names = [];
130  $user_names = [];
131  $anon_ips = [];
132 
133  # Sift for real versus user names
134 
135  foreach ( $contributors as $user ) {
136  $cnt--;
137  if ( $user->isLoggedIn() ) {
138  $link = $this->link( $user );
139  if ( $this->canShowRealUserName() && $user->getRealName() ) {
140  $real_names[] = $link;
141  } else {
142  $user_names[] = $link;
143  }
144  } else {
145  $anon_ips[] = $this->link( $user );
146  }
147 
148  if ( $cnt == 0 ) {
149  break;
150  }
151  }
152 
153  $lang = $this->getLanguage();
154 
155  if ( count( $real_names ) ) {
156  $real = $lang->listToText( $real_names );
157  } else {
158  $real = false;
159  }
160 
161  # "ThisSite user(s) A, B and C"
162  if ( count( $user_names ) ) {
163  $user = $this->msg( 'siteusers' )->rawParams( $lang->listToText( $user_names ) )->params(
164  count( $user_names ) )->escaped();
165  } else {
166  $user = false;
167  }
168 
169  if ( count( $anon_ips ) ) {
170  $anon = $this->msg( 'anonusers' )->rawParams( $lang->listToText( $anon_ips ) )->params(
171  count( $anon_ips ) )->escaped();
172  } else {
173  $anon = false;
174  }
175 
176  # This is the big list, all mooshed together. We sift for blank strings
177  $fulllist = [];
178  foreach ( [ $real, $user, $anon, $others_link ] as $s ) {
179  if ( $s !== false ) {
180  array_push( $fulllist, $s );
181  }
182  }
183 
184  $count = count( $fulllist );
185 
186  # "Based on work by ..."
187  return $count
188  ? $this->msg( 'othercontribs' )->rawParams(
189  $lang->listToText( $fulllist ) )->params( $count )->escaped()
190  : '';
191  }
192 
198  protected function link( User $user ) {
199  if ( $this->canShowRealUserName() && !$user->isAnon() ) {
200  $real = $user->getRealName();
201  if ( $real === '' ) {
202  $real = $user->getName();
203  }
204  } else {
205  $real = $user->getName();
206  }
207 
208  $page = $user->isAnon()
209  ? SpecialPage::getTitleFor( 'Contributions', $user->getName() )
210  : $user->getUserPage();
211 
212  return MediaWikiServices::getInstance()
213  ->getLinkRenderer()->makeLink( $page, $real );
214  }
215 
221  protected function userLink( User $user ) {
222  $link = $this->link( $user );
223  if ( $user->isAnon() ) {
224  return $this->msg( 'anonuser' )->rawParams( $link )->parse();
225  } elseif ( $this->canShowRealUserName() && $user->getRealName() ) {
226  return $link;
227  } else {
228  return $this->msg( 'siteuser' )->rawParams( $link )->params( $user->getName() )->escaped();
229  }
230  }
231 
236  protected function othersLink() {
237  return MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink(
238  $this->getTitle(),
239  $this->msg( 'others' )->text(),
240  [],
241  [ 'action' => 'credits' ]
242  );
243  }
244 }
CreditsAction\canShowRealUserName
canShowRealUserName()
Whether we can display the user's real name (not a hidden pref)
Definition: CreditsAction.php:104
Page
Interface for type hinting (accepts WikiPage, Article, ImagePage, CategoryPage)
Definition: Page.php:29
User\isAnon
isAnon()
Get whether the user is anonymous.
Definition: User.php:3582
FormlessAction
An action which just does something, without showing a form first.
Definition: FormlessAction.php:28
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:129
$lang
if(!isset( $args[0])) $lang
Definition: testCompression.php:35
true
return true
Definition: router.php:92
CreditsAction\getName
getName()
Return the name of the action this object responds to.
Definition: CreditsAction.php:33
User\newFromName
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:536
User\getUserPage
getUserPage()
Get this user's personal page title.
Definition: User.php:4344
$s
$s
Definition: mergeMessageFileList.php:185
SpecialPage\getTitleFor
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
Definition: SpecialPage.php:83
WikiPage\getUserText
getUserText( $audience=RevisionRecord::FOR_PUBLIC, User $user=null)
Definition: WikiPage.php:894
CreditsAction\getAuthor
getAuthor(Page $page)
Get the last author with the last modification time.
Definition: CreditsAction.php:81
CreditsAction\othersLink
othersLink()
Get a link to action=credits of $article page.
Definition: CreditsAction.php:236
$contributors
$contributors
Definition: updateCredits.php:42
CreditsAction\getCredits
getCredits( $cnt, $showIfMax=true)
Get a list of contributors.
Definition: CreditsAction.php:63
CreditsAction\link
link(User $user)
Get a link to $user's user page.
Definition: CreditsAction.php:198
CreditsAction\getDescription
getDescription()
Returns the description that goes below the <h1> tag.
Definition: CreditsAction.php:37
User\getRealName
getRealName()
Get the user's real name.
Definition: User.php:2941
Action\getTitle
getTitle()
Shortcut to get the Title object from the page.
Definition: Action.php:247
CreditsAction\onView
onView()
This is largely cadged from PageHistory::history.
Definition: CreditsAction.php:46
Action\$page
WikiPage Article ImagePage CategoryPage Page $page
Page on which we're performing the action.
Definition: Action.php:46
Action\msg
msg( $key,... $params)
Get a Message object with context set Parameters are the same as wfMessage()
Definition: Action.php:259
Action\getLanguage
getLanguage()
Shortcut to get the user Language being used for this instance.
Definition: Action.php:237
CreditsAction\getContributors
getContributors( $cnt, $showIfMax)
Get a list of contributors of $article.
Definition: CreditsAction.php:115
CreditsAction
Definition: CreditsAction.php:31
$t
$t
Definition: testCompression.php:71
WikiPage\getTimestamp
getTimestamp()
Definition: WikiPage.php:829
User
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition: User.php:51
User\getName
getName()
Get the user name, or the IP of an anonymous user.
Definition: User.php:2282
CreditsAction\userLink
userLink(User $user)
Get a link to $user's user page.
Definition: CreditsAction.php:221