/**
  * Render the special page
  * @param string|null $par Username to get uploads from
  */
 public function executeWhenAvailable($par = '')
 {
     if (($par === '' || $par === null) && $this->getUser()->isAnon()) {
         // Anons don't get to see Special:Uploads
         $this->requireLogin('mobile-frontend-donate-image-anon');
     } else {
         // uploads by a particular user, i.e Special:Uploads/username, are shown even to anons
         $this->setHeaders();
         $output = $this->getOutput();
         $output->addJsConfigVars('wgMFPhotoUploadEndpoint', $this->getMFConfig()->get('MFPhotoUploadEndpoint'));
         if ($par !== '' && $par !== null) {
             $user = User::newFromName($par);
             if (!$user || $user->isAnon()) {
                 $output->setPageTitle($this->msg('mobile-frontend-donate-image-title-username', $par));
                 $output->setStatusCode(404);
                 $html = MobileUI::contentElement(MobileUI::errorBox($this->msg('mobile-frontend-photo-upload-invalid-user', $par)));
             } else {
                 if ($user->equals($this->getUser())) {
                     $output->setPageTitle($this->msg('mobile-frontend-donate-image-title-you'));
                 } else {
                     $output->setPageTitle($this->msg('mobile-frontend-donate-image-title-username', $par));
                 }
                 $html = $this->getUserUploadsPageHtml($user);
             }
         } else {
             $user = $this->getUser();
             $output->setPageTitle($this->msg('mobile-frontend-donate-image-title-you'));
             // TODO: what if the user cannot upload to the destination wiki in $wgMFPhotoUploadEndpoint?
             $html = $this->getUserUploadsPageHtml($user);
         }
         $output->addHTML($html);
     }
 }
 /**
  * Show error page, that the user does not exist, or no user provided
  * @param string $msgKey Message key to use as error message body
  * @return string
  */
 protected function displayNoUserError($msgKey)
 {
     $out = $this->getOutput();
     // generate a user friendly error with a meaningful message
     $html = MobileUI::contentElement(MobileUI::errorBox(Html::element('h2', array(), $this->msg('mobile-frontend-profile-error')) . Html::element('p', array(), $this->msg($msgKey))));
     // return page with status code 404, instead of 200 and output the error page
     $out->setStatusCode(404);
     $out->addHtml($html);
 }
 /**
  * Render Special Page Nearby
  * @param string $par Parameter submitted as subpage
  */
 public function executeWhenAvailable($par = '')
 {
     $this->setHeaders();
     $output = $this->getOutput();
     // set config
     $output->addJsConfigVars('wgMFNearbyRange', $this->getMFConfig()->get('MFNearbyRange'));
     $output->setPageTitle(wfMessage('mobile-frontend-nearby-title')->escaped());
     $html = Html::openElement('div', array('class' => 'content-unstyled', 'id' => 'mw-mf-nearby')) . MobileUI::contentElement(MobileUI::errorBox(Html::element('h2', array(), wfMessage('mobile-frontend-nearby-requirements')) . Html::element('p', array(), wfMessage('mobile-frontend-nearby-requirements-guidance'))), 'noscript') . Html::closeElement('div');
     // #mw-mf-nearby
     $output->addHTML($html);
 }
 /**
  * Render the page with a list of languages the page is available in
  * @param string $pagename The name of the page
  */
 public function executeWhenAvailable($pagename)
 {
     if (!is_string($pagename) || $pagename === '') {
         wfHttpError(404, $this->msg('mobile-frontend-languages-404-title')->text(), $this->msg('mobile-frontend-languages-404-desc')->text());
         return;
     }
     $this->title = Title::newFromText($pagename);
     $output = $this->getOutput();
     $html = '';
     if ($this->title && $this->title->exists()) {
         $titlename = $this->title->getPrefixedText();
         $pageTitle = $this->msg('mobile-frontend-languages-header-page', $titlename)->text();
         $languages = $this->getLanguages();
         $variants = $this->getLanguageVariants();
         $languagesCount = count($languages);
         $variantsCount = count($variants);
         $html .= Html::element('p', array(), $this->msg('mobile-frontend-languages-text')->params($titlename)->numParams($languagesCount)->text());
         $html .= Html::openElement('p');
         $html .= Html::element('a', array('href' => $this->title->getLocalUrl()), $this->msg('returnto', $titlename)->text());
         $html .= Html::closeElement('p');
         if ($languagesCount > 0 || $variantsCount > 1) {
             // Language variants first
             if ($variantsCount > 1) {
                 $variantHeader = $variantsCount > 1 ? $this->msg('mobile-frontend-languages-variant-header')->text() : '';
                 $html .= Html::element('h2', array('id' => 'mw-mf-language-variant-header'), $variantHeader);
                 $html .= Html::openElement('ul', array('id' => 'mw-mf-language-variant-selection'));
                 foreach ($variants as $val) {
                     $html .= $this->makeLangListItem($val);
                 }
                 $html .= Html::closeElement('ul');
             }
             // Then other languages
             if ($languagesCount > 0) {
                 $languageHeader = $this->msg('mobile-frontend-languages-header')->text();
                 $html .= Html::element('h2', array('id' => 'mw-mf-language-header'), $languageHeader) . Html::openElement('ul', array('id' => 'mw-mf-language-selection'));
                 foreach ($languages as $val) {
                     $html .= $this->makeLangListItem($val);
                 }
                 $html .= Html::closeElement('ul');
             }
         }
     } else {
         $pageTitle = $this->msg('mobile-frontend-languages-header')->text();
         $html .= Html::element('p', array(), $this->msg('mobile-frontend-languages-nonexistent-title')->params($pagename)->text());
     }
     $html = MobileUI::contentElement($html);
     $output->setPageTitle($pageTitle);
     $output->addHTML($html);
 }