entry->getTarget(); if ( substr( $title->getText(), 0, 1 ) === '#' ) { // autoblock - no user link possible $params[2] = $title->getText(); $params[3] = ''; // no user name for gender use } else { // Create a user link for the blocked $username = $title->getText(); // @todo Store the user identifier in the parameters // to make this faster for future log entries $targetUser = User::newFromName( $username, false ); $params[2] = Message::rawParam( $this->makeUserLink( $targetUser, Linker::TOOL_LINKS_NOBLOCK ) ); $params[3] = $username; // plain user name for gender use } $subtype = $this->entry->getSubtype(); if ( $subtype === 'block' || $subtype === 'reblock' ) { if ( !isset( $params[4] ) ) { // Very old log entry without duration: means infinite $params[4] = 'infinite'; } // Localize the duration, and add a tooltip // in English to help visitors from other wikis. // The lrm is needed to make sure that the number // is shown on the correct side of the tooltip text. $durationTooltip = '‎' . htmlspecialchars( $params[4] ); $params[4] = Message::rawParam( "" . $this->context->getLanguage()->translateBlockExpiry( $params[4] ) . '' ); $params[5] = isset( $params[5] ) ? self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : ''; } return $params; } protected function extractParameters() { $params = parent::extractParameters(); // Legacy log params returning the params in index 3 and 4, moved to 4 and 5 if ( $this->entry->isLegacy() && isset( $params[3] ) ) { if ( isset( $params[4] ) ) { $params[5] = $params[4]; } $params[4] = $params[3]; $params[3] = ''; } return $params; } public function getPreloadTitles() { $title = $this->entry->getTarget(); // Preload user page for non-autoblocks if ( substr( $title->getText(), 0, 1 ) !== '#' ) { return array( $title->getTalkPage() ); } return array(); } public function getActionLinks() { $subtype = $this->entry->getSubtype(); if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden || !( $subtype === 'block' || $subtype === 'reblock' ) || !$this->context->getUser()->isAllowed( 'block' ) ) { return ''; } // Show unblock/change block link $title = $this->entry->getTarget(); $links = array( Linker::linkKnown( SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ), $this->msg( 'unblocklink' )->escaped() ), Linker::linkKnown( SpecialPage::getTitleFor( 'Block', $title->getDBkey() ), $this->msg( 'change-blocklink' )->escaped() ) ); return $this->msg( 'parentheses' )->rawParams( $this->context->getLanguage()->pipeList( $links ) )->escaped(); } /** * Convert a comma-delimited list of block log flags * into a more readable (and translated) form * * @param string $flags Flags to format * @param Language $lang * @return string */ public static function formatBlockFlags( $flags, $lang ) { $flags = trim( $flags ); if ( $flags === '' ) { return ''; //nothing to do } $flags = explode( ',', $flags ); $flagsCount = count( $flags ); for ( $i = 0; $i < $flagsCount; $i++ ) { $flags[$i] = self::formatBlockFlag( $flags[$i], $lang ); } return wfMessage( 'parentheses' )->inLanguage( $lang ) ->rawParams( $lang->commaList( $flags ) )->escaped(); } /** * Translate a block log flag if possible * * @param int $flag Flag to translate * @param Language $lang Language object to use * @return string */ public static function formatBlockFlag( $flag, $lang ) { static $messages = array(); if ( !isset( $messages[$flag] ) ) { $messages[$flag] = htmlspecialchars( $flag ); // Fallback // For grepping. The following core messages can be used here: // * block-log-flags-angry-autoblock // * block-log-flags-anononly // * block-log-flags-hiddenname // * block-log-flags-noautoblock // * block-log-flags-nocreate // * block-log-flags-noemail // * block-log-flags-nousertalk $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang ); if ( $msg->exists() ) { $messages[$flag] = $msg->escaped(); } } return $messages[$flag]; } }