. * * @file * @ingroup Skins */ declare( strict_types=1 ); namespace MediaWiki\Skins\Citizen\Partials; use MediaWiki\MediaWikiServices; use MWTimestamp; use SpecialPage; use Title; use User; use Wikimedia\IPUtils; /** * Tagline partial of Skin Citizen */ final class Tagline extends Partial { /** * Get tagline message * * @return string */ public function getTagline() { $skin = $this->skin; $out = $this->out; $title = $this->title; $shortdesc = $out->getProperty( 'shortdesc' ); $tagline = ''; if ( $title ) { // Use short description if there is any // from Extension:ShortDescription if ( $shortdesc ) { $tagline = $shortdesc; } else { $namespaceText = $title->getNsText(); // Check if namespaceText exists // Return null if main namespace or not defined if ( $namespaceText ) { $msg = $skin->msg( 'citizen-tagline-ns-' . strtolower( $namespaceText ) ); // Use custom message if exists if ( !$msg->isDisabled() ) { $tagline = $msg->parse(); } else { if ( $title->isSpecialPage() ) { // No tagline if special page $tagline = ''; } elseif ( $title->isTalkPage() ) { // Use generic talk page message if talk page $tagline = $skin->msg( 'citizen-tagline-ns-talk' )->parse(); } elseif ( ( $title->inNamespace( NS_USER ) || ( defined( 'NS_USER_WIKI' ) && $title->inNamespace( NS_USER_WIKI ) ) || ( defined( 'NS_USER_WIKI' ) && $title->inNamespace( NS_USER_PROFILE ) ) ) && !$title->isSubpage() ) { // Build user tagline if it is a top-level user page $tagline = $this->buildUserTagline( $title ); } elseif ( !$skin->msg( 'citizen-tagline' )->isDisabled() ) { $tagline = $skin->msg( 'citizen-tagline' )->parse(); } else { // Fallback to site tagline $tagline = $skin->msg( 'tagline' )->text(); } } } elseif ( !$skin->msg( 'citizen-tagline' )->isDisabled() ) { $tagline = $skin->msg( 'citizen-tagline' )->parse(); } else { $tagline = $skin->msg( 'tagline' )->text(); } } } // Apply language variant conversion if ( !empty( $tagline ) ) { $services = MediaWikiServices::getInstance(); $langConv = $services ->getLanguageConverterFactory() ->getLanguageConverter( $services->getContentLanguage() ); $tagline = $langConv->convert( $tagline ); } return $tagline; } /** * Return user tagline message * * @param Title $title * @return string */ private function buildUserTagline( $title ) { $user = $this->buildPageUserObject( $title ); if ( $user ) { $skin = $this->skin; $tagline = '
'; $editCount = $user->getEditCount(); $regDate = $user->getRegistration(); $gender = MediaWikiServices::getInstance()->getGenderCache()->getGenderOf( $user, __METHOD__ ); if ( $gender === 'male' ) { $msgGender = '♂'; } elseif ( $gender === 'female' ) { $msgGender = '♀'; } if ( isset( $msgGender ) ) { $tagline .= "$msgGender"; } if ( $editCount ) { $msgEditCount = $skin->msg( 'usereditcount' )->numParams( sprintf( '%s', number_format( $editCount, 0 ) ) ); $editCountHref = SpecialPage::getTitleFor( 'Contributions', $user )->getLocalURL(); $tagline .= "$msgEditCount"; } if ( is_string( $regDate ) ) { $regDateTs = wfTimestamp( TS_UNIX, $regDate ); $msgRegDate = $skin->msg( 'citizen-tagline-user-regdate', $skin->getLanguage()->userDate( new MWTimestamp( $regDate ), $skin->getUser() ), $user ); $tagline .= "$msgRegDate"; } $tagline .= '
'; return $tagline; } return null; } /** * Return new User object based on username or IP address. * Based on MinervaNeue * * @param Title $title * @return User|null */ private function buildPageUserObject( $title ) { $titleText = $title->getText(); $user = $this->user; if ( IPUtils::isIPAddress( $titleText ) ) { return $user->newFromAnyId( null, $titleText, null ); } $userIdentity = MediaWikiServices::getInstance()->getUserIdentityLookup()->getUserIdentityByName( $titleText ); if ( $userIdentity && $userIdentity->isRegistered() ) { return $user->newFromId( $userIdentity->getId() ); } return null; } }