jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/356192 )

Change subject: BSFoundation: Fixes/Improvements for UserMiniProfile
......................................................................


BSFoundation: Fixes/Improvements for UserMiniProfile

* external/internal link to an image works again
* removed usage of deprecated BsCore::getUserDisplayName
* imrpoved error handling
* added TODO's and descriptions
* removed $this->mOptions['userimagesrc'] = $this->mOptions['userimagesrc']; :D
* used wfParseUrl instead of parse_url
* removed image extension check, as it was only checked, when it was
awaylable and MW::ImageExtensions should only be used for uploads
* added check if the given url is valid
* mw default way File:<username> works again

=> #6473
=> Needs cherry-pick to REL1_27

Change-Id: I7e00493f67c3b984412c6beafab2793cd1d8674b
---
M includes/outputhandler/views/view.UserMiniProfile.php
1 file changed, 75 insertions(+), 39 deletions(-)

Approvals:
  Robert Vogel: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/outputhandler/views/view.UserMiniProfile.php 
b/includes/outputhandler/views/view.UserMiniProfile.php
index 9a794ca..6c38167 100644
--- a/includes/outputhandler/views/view.UserMiniProfile.php
+++ b/includes/outputhandler/views/view.UserMiniProfile.php
@@ -50,63 +50,99 @@
        }
 
        /**
+        * TODO: Rewrite and separate all this into single methods
         * Initializes the views members with the information from given 
options.
         * @param bool $bReInit
         * @return null
         */
        public function init( $bReInit = false ) {
                global $wgUrlProtocols;
-               if ( $this->bIsInit == true && $bReInit == false ) return;
+               if ( $this->bIsInit == true && $bReInit == false ) {
+                       return;
+               }
 
                $oUser = $this->mOptions['user'];
-
-               if ( !isset( $this->mOptions['width'] ) ) 
$this->mOptions['width']  = 32;
-               if( !isset( $this->mOptions['height'] ) ) 
$this->mOptions['height'] = 32;
-
-               if ( !isset( $this->mOptions['userdisplayname'] ) ) {
-                       $this->mOptions['userdisplayname'] = 
BsCore::getUserDisplayName( $oUser );
+               if( !$oUser instanceof User ) {
+                       throw new BsException( "No User Given. ".__CLASS__." 
".__METHOD__ );
                }
 
+               if ( !isset( $this->mOptions['width'] ) ) {
+                       $this->mOptions['width'] = 32;
+               }
+               if( !isset( $this->mOptions['height'] ) ) {
+                       $this->mOptions['height'] = 32;
+               }
+
+               if ( empty($this->mOptions['userdisplayname'] ) ) {
+                       $this->mOptions['userdisplayname'] = empty( 
$oUser->getRealName() )
+                               ? $oUser->getName()
+                               : $oUser->getRealName()
+                       ;
+               }
+
+               //link can be empty for an anon user
                if ( !isset( $this->mOptions['linktargethref'] ) ) {
-                       $this->mOptions['linktargethref'] = htmlspecialchars( 
$oUser->getUserPage()->getLinkURL(), ENT_QUOTES, 'UTF-8' );
+                       $this->mOptions['linktargethref'] = htmlspecialchars(
+                               $oUser->getUserPage()->getLinkURL(),
+                               ENT_QUOTES,
+                               'UTF-8'
+                       );
                }
 
-               if ( isset ( $this->mOptions['userimagesrc'] ) ) {
-                       $this->mOptions['userimagesrc'] = 
$this->mOptions['userimagesrc'];
-               } elseif ( $oUser->isAnon() ){
+               if( empty( $this->mOptions['userimagesrc'] ) ) {
+                       $this->mOptions['userimagesrc'] = BsConfig::get( 
'MW::DefaultUserImage' );
+               }
+
+               if ( $oUser->isAnon() ) {
                        $this->mOptions['userimagesrc'] = BsConfig::get( 
'MW::AnonUserImage' );
                        $this->mOptions['linktargethref'] = '';
                } else {
-                       $sUserImageName = 
BsConfig::getVarForUser('MW::UserImage', $oUser);
-                       $this->mOptions['userimagesrc'] = BsConfig::get( 
'MW::DefaultUserImage' );
-                       if ( !empty( $sUserImageName ) ) {
-                               $aParsedUrl = parse_url( $sUserImageName );
-                               if ( $sUserImageName{0} == '/' ) {
-                                       $this->mOptions['userimagesrc'] = 
$sUserImageName;
-                               } elseif ( isset( $aParsedUrl['scheme'] ) && 
in_array( $aParsedUrl['scheme'], $wgUrlProtocols ) ) {
-                                       $aPathInfo = pathinfo( 
$aParsedUrl['path'] );
-                                       $aFileExtWhitelist = BsConfig::get( 
'MW::ImageExtensions' );
-                                       $this->mOptions['userimagesrc'] = 
$aParsedUrl['scheme'].'://'.$aParsedUrl['host'].$aParsedUrl['path'];
+                       $sUserImageName = BsConfig::getVarForUser( 
'MW::UserImage', $oUser );
+                       if ( !empty( $sUserImageName ) ) { //Image given as a 
url
 
-                                       if ( isset( $aPathInfo['extension'] ) 
&& !in_array( strtolower( $aPathInfo['extension'] ), $aFileExtWhitelist ) ){
-                                               $this->mOptions['userimagesrc'] 
= BsConfig::get( 'MW::AnonUserImage' );
+                               if ( $sUserImageName{0} == '/' ) {
+                                       //relative url from own system given
+                                       $this->mOptions['userimagesrc'] = 
$sUserImageName;
+                               } elseif ( $aParsedUrl = wfParseUrl( 
$sUserImageName ) ) {
+                                       //external url
+                                       //TODO: Fix, when system is call via 
https:// and the given
+                                       //url is http:// the browser will block 
the image
+                                       $bAllowedProtocoll = in_array(
+                                               
$aParsedUrl['scheme'].$aParsedUrl['delimiter'],
+                                               $wgUrlProtocols
+                                       );
+                                       if( $bAllowedProtocoll ) {
+                                               $sQuery = isset( 
$aParsedUrl['query'] ) ?
+                                                       
"?{$aParsedUrl['query']}"
+                                                       : ''
+                                               ;
+                                               $this->mOptions['userimagesrc'] 
=
+                                                       $aParsedUrl['scheme']
+                                                       
.$aParsedUrl['delimiter']
+                                                       .$aParsedUrl['host']
+                                                       .$aParsedUrl['path']
+                                                       .$sQuery
+                                               ;
                                        }
-                               } else {
-                                       $oUserImageFile = 
RepoGroup::singleton()->findFile( Title::newFromText( $sUserImageName, NS_FILE 
) );
-                                       $oUserThumbnail = false;
-                                       if ( $oUserImageFile !== false ) {
-                                               $oUserThumbnail = 
$oUserImageFile->transform(
-                                                       array(
-                                                               'width' => 
$this->mOptions['width'],
-                                                               'height' => 
$this->mOptions['height']
-                                                       )
-                                               );
-                                       }
-                                       if ( $oUserThumbnail !== false ) {
-                                               $this->mOptions['userimagesrc'] 
= $oUserThumbnail->getUrl();
-                                               $this->mOptions['width'] = 
$oUserThumbnail->getWidth();
-                                               $this->mOptions['height'] = 
$oUserThumbnail->getHeight();
-                                       }
+                               }
+                       } else {
+                               //MW default File:<username>
+                               $oUserImageFile = 
RepoGroup::singleton()->findFile(
+                                       Title::newFromText( $sUserImageName, 
NS_FILE )
+                               );
+                               $oUserThumbnail = false;
+                               if ( $oUserImageFile !== false ) {
+                                       $oUserThumbnail = 
$oUserImageFile->transform(
+                                               array(
+                                                       'width' => 
$this->mOptions['width'],
+                                                       'height' => 
$this->mOptions['height']
+                                               )
+                                       );
+                               }
+                               if ( $oUserThumbnail !== false ) {
+                                       $this->mOptions['userimagesrc'] = 
$oUserThumbnail->getUrl();
+                                       $this->mOptions['width'] = 
$oUserThumbnail->getWidth();
+                                       $this->mOptions['height'] = 
$oUserThumbnail->getHeight();
                                }
                        }
                }

-- 
To view, visit https://gerrit.wikimedia.org/r/356192
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I7e00493f67c3b984412c6beafab2793cd1d8674b
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation
Gerrit-Branch: master
Gerrit-Owner: Pwirth <[email protected]>
Gerrit-Reviewer: Ljonka <[email protected]>
Gerrit-Reviewer: Mglaser <[email protected]>
Gerrit-Reviewer: Robert Vogel <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to