Пример #1
0
 /**
  * Fetch informations about the user uploading, prepare prefixes list content, and
  * set the default item to select. It also updates the special page DestFileName 
  * attribute. Attached to hooks:
  * <ul>
  * <li>$wgHooks['UploadForm:initial']</li>
  * <li>$wgHooks['UploadForm:BeforeProcessing']</li>
  * </ul>
  * @param SpecialPage $specialUploadObj current SpecialUpload page object
  * @todo if the user cannot upload a new file, maybe this function should
  * however return true, as seen in SpecialUpload page code comments (but if
  * true returned, the form is displayed with our error message on top)
  */
 public static function fetchRequestInformations($specialUploadObj)
 {
     $user = $specialUploadObj->getUser();
     self::$USER_IS_WP_ADMIN = $user->isAllowed(WP_ADMIN_RIGHT);
     if (self::$USER_IS_WP_ADMIN || !self::$DISPLAY_UPLOAD_MOD) {
         return true;
         // no informations to fetch and nothing to prepare, using standard form
     }
     $full_title = $specialUploadObj->getFullTitle();
     $request = $specialUploadObj->getRequest();
     // update special page DestFileName attribute
     $final_wp_filename = self::getDestinationFileName($request);
     if ($final_wp_filename != null) {
         $specialUploadObj->mDesiredDestName = $final_wp_filename;
         wfDebugLog('wikiplaces-debug', 'fetchRequestInformations, mDesiredDestName set to "' . $final_wp_filename . '"');
     }
     $final_wp_file_title = Title::newFromText($final_wp_filename, NS_FILE);
     // is the user re uploading a new version of an existing file or followed a "upload a file with this name" link ?
     if ($request->getText('wpDestFile') && !$request->getText('wpDestFileMainPart')) {
         $result = true;
         wfRunHooks('userCan', array(&$final_wp_file_title, &$user, 'upload', &$result));
         if ($result !== true) {
             wfDebugLog('wikiplaces-debug', 'WikiplaceUpload::fetchRequestInformations userCan returned ' . print_r($result, true));
             $specialUploadObj->getOutput()->showErrorPage('sorry', wfMessage('badaccess-group0'));
             // not allowed
             return false;
             // break SpecialUpload page init/processing
         }
         // Check getUserPermissionsErrors hook (this behavior is suitable for nonessential UI
         // controls because it skips potentially expensive cascading permission checks, but may
         // provide false positives)
         wfRunHooks('getUserPermissionsErrors', array(&$final_wp_file_title, &$user, 'upload', &$result));
         if ($result !== true) {
             wfDebugLog('wikiplaces-debug', print_r($result, true));
             // WikiplacesHooks::getUserPermissionsErrors($final_wp_file_title, $user, 'upload', $result);
             if (is_array($result) && !empty($result)) {
                 $key = array_shift($result);
                 $specialUploadObj->getOutput()->showErrorPage('sorry', wfMessage($key, $result));
                 return false;
                 // break SpecialUpload page init/processing
             } else {
                 $specialUploadObj->getOutput()->showErrorPage('sorry', wfMessage('badaccess-group0'));
                 // not allowed
                 return false;
                 // break SpecialUpload page init/processing
             }
         }
         // she is reuploading or has followed a "upload a file with this name" link
         wfDebugLog('wikiplaces-debug', 'fetchRequestInformations: reuploading, so disabling mod');
         self::$WPDESTFILE_READONLY = true;
         // ensure that the filename field is readonly when create link followed
         self::$DISPLAY_UPLOAD_MOD = false;
         return true;
         // no informations to fetch and nothing to prepare
     }
     // ( if we arrive here, we are uploading a new file )
     // is there a wikiplace specified in the url ?
     // search a GET parameter, as seen in SpecialPageFactory around line 408
     $db_key = $full_title->getDBkey();
     $bits = explode('/', $db_key, 2);
     $param = null;
     if (isset($bits[1])) {
         $param = $bits[1];
     }
     // is the user trying to upload a public file ?
     if ($param === WP_PUBLIC_FILE_PREFIX || $final_wp_file_title instanceof Title && WpPage::isPublic(NS_FILE, $final_wp_file_title->getDBkey())) {
         // there is a "Public" param, there will be only one choice in the listbox
         wfDebugLog('wikiplaces-debug', 'fetchRequestInformations: only public prefix will be visible');
         self::$FILE_PREFIXES[$param] = WP_PUBLIC_FILE_PREFIX;
         self::$FILE_PREFIXES_DEFAULT = $param;
     } else {
         // get all wikiplaces the user has access to
         $wikiplacesOwner = WpWikiplace::factoryAllOwnedByUserId($user->getId());
         $wikiplacesMember = WpWikiplace::factoryAllWhereUserIsMember($user->getId());
         // check if the user has access to at least one wikiplace
         if (count($wikiplacesOwner) + count($wikiplacesMember) == 0) {
             $specialUploadObj->getOutput()->showErrorPage('sorry', wfMessage('wp-create-wp-first'));
             return false;
             // break SpecialUpload page init/processing
         }
         // multiple choice: prepare full prefixes list
         foreach ($wikiplacesOwner as $wikiplace) {
             $wpw_name = $wikiplace->getName();
             self::$FILE_PREFIXES[$wpw_name] = $wpw_name;
         }
         foreach ($wikiplacesMember as $wikiplace) {
             $wpw_name = $wikiplace->getName();
             self::$FILE_PREFIXES[$wpw_name] = $wpw_name;
         }
         // do we have to set a default value ?
         if ($param != null && array_key_exists($param, self::$FILE_PREFIXES)) {
             if (!self::$FILE_PREFIXES_DEFAULT) {
                 self::$FILE_PREFIXES_DEFAULT = $param;
             }
         }
     }
     return true;
     // continue hook processing
 }
 /**
  * Hook: SpecialContributionsBeforeMainOutput
  * @param int $id
  * @param User $user
  * @param SpecialPage $page
  */
 public static function addNewContributionButton($id, User $user, SpecialPage $page)
 {
     global $wgContentTranslationEventLogging;
     if ($user->getId() === $page->getUser()->getId() && ContentTranslationHooks::isEnabledForUser($user)) {
         // If EventLogging integration is enabled, load the event logging functions module
         if ($wgContentTranslationEventLogging) {
             $page->getOutput()->addModules('ext.cx.eventlogging');
         }
         $page->getOutput()->addModules('ext.cx.contributions.init');
     }
 }
Пример #3
0
 /**
  * Links to different places.
  *
  * @note This function is also called in DeletedContributionsPage
  * @param SpecialPage $sp SpecialPage instance, for context
  * @param User $target Target user object
  * @return array
  */
 public static function getUserLinks(SpecialPage $sp, User $target)
 {
     $id = $target->getId();
     $username = $target->getName();
     $userpage = $target->getUserPage();
     $talkpage = $target->getTalkPage();
     $linkRenderer = $sp->getLinkRenderer();
     $tools['user-talk'] = $linkRenderer->makeLink($talkpage, $sp->msg('sp-contributions-talk')->text());
     if ($id !== null || $id === null && IP::isIPAddress($username)) {
         if ($sp->getUser()->isAllowed('block')) {
             # Block / Change block / Unblock links
             if ($target->isBlocked() && $target->getBlock()->getType() != Block::TYPE_AUTO) {
                 $tools['block'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Block', $username), $sp->msg('change-blocklink')->text());
                 $tools['unblock'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Unblock', $username), $sp->msg('unblocklink')->text());
             } else {
                 # User is not blocked
                 $tools['block'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Block', $username), $sp->msg('blocklink')->text());
             }
         }
         # Block log link
         $tools['log-block'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Log', 'block'), $sp->msg('sp-contributions-blocklog')->text(), [], ['page' => $userpage->getPrefixedText()]);
         # Suppression log link (bug 59120)
         if ($sp->getUser()->isAllowed('suppressionlog')) {
             $tools['log-suppression'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Log', 'suppress'), $sp->msg('sp-contributions-suppresslog', $username)->text(), [], ['offender' => $username]);
         }
     }
     # Uploads
     $tools['uploads'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Listfiles', $username), $sp->msg('sp-contributions-uploads')->text());
     # Other logs link
     $tools['logs'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Log', $username), $sp->msg('sp-contributions-logs')->text());
     # Add link to deleted user contributions for priviledged users
     if ($sp->getUser()->isAllowed('deletedhistory')) {
         $tools['deletedcontribs'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('DeletedContributions', $username), $sp->msg('sp-contributions-deleted', $username)->text());
     }
     # Add a link to change user rights for privileged users
     $userrightsPage = new UserrightsPage();
     $userrightsPage->setContext($sp->getContext());
     if ($userrightsPage->userCanChangeRights($target)) {
         $tools['userrights'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Userrights', $username), $sp->msg('sp-contributions-userrights')->text());
     }
     Hooks::run('ContributionsToolLinks', [$id, $userpage, &$tools, $sp]);
     return $tools;
 }
Пример #4
0
 /**
  * Get the User being used for this instance.
  * SpecialPage extends ContextSource as of 1.18.
  *
  * @since 0.1
  *
  * @return User
  */
 public function getUser()
 {
     return version_compare($GLOBALS['wgVersion'], '1.18', '>') ? parent::getUser() : $GLOBALS['wgUser'];
 }