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

Change subject: FlexiSkin: Fixed compat. to MW 1.30
......................................................................


FlexiSkin: Fixed compat. to MW 1.30

Current MW versions do not allow access to session data in 'load.php' context

Change-Id: I771f9d28d436336cd6c5499ffd8652ca2f452a9a
---
A Flexiskin/.gitignore
M Flexiskin/Flexiskin.class.php
A Flexiskin/composer.json
M Flexiskin/extension.json
M Flexiskin/includes/FlexiskinFormatter.class.php
M Flexiskin/includes/api/BSApiFlexiskinStore.php
M Flexiskin/includes/resourceloader/ResourceLoaderFlexiskinPreviewModule.php
A Flexiskin/src/Data/AvailableConfigs.php
A Flexiskin/src/PreviewResourceModuleRegistrant.php
9 files changed, 140 insertions(+), 44 deletions(-)

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



diff --git a/Flexiskin/.gitignore b/Flexiskin/.gitignore
new file mode 100644
index 0000000..48b8bf9
--- /dev/null
+++ b/Flexiskin/.gitignore
@@ -0,0 +1 @@
+vendor/
diff --git a/Flexiskin/Flexiskin.class.php b/Flexiskin/Flexiskin.class.php
index 9c5f8aa..158d709 100755
--- a/Flexiskin/Flexiskin.class.php
+++ b/Flexiskin/Flexiskin.class.php
@@ -31,6 +31,9 @@
  * @filesource
  */
 
+use BlueSpice\Flexiskin\PreviewResourceModuleRegistrant;
+use BlueSpice\Flexiskin\Data\AvailableConfigs;
+
 /**
  * Base class for Flexiskin extension
  * @package BlueSpice_Extensions
@@ -180,13 +183,21 @@
         */
        public static function onBeforePageDisplay( &$out ) {
                $inPreviewMode = $out->getRequest()->getBool( 'preview' );
+               $flexiSkinId = $out->getRequest()->getVal( 'flexiskin' );
 
-               if( $inPreviewMode && $out->getRequest()->getVal( 'flexiskin' ) 
!== null ) {
-                       $out->getRequest()->setSessionData( 'flexiskin', 
$out->getRequest()->getVal( 'flexiskin' ) );
-                       $out->addModuleStyles( 
'ext.bluespice.flexiskin.skin.preview' );
+               if( $inPreviewMode &&  $flexiSkinId !== null ) {
+                       $out->addModuleStyles(
+                               Flexiskin::generateDynamicModuleStyleName(
+                                       "preview.$flexiSkinId"
+                               )
+                       );
                }
                else {
-                       $out->addModuleStyles( 
Flexiskin::generateDynamicModuleStyleName() );
+                       $out->addModuleStyles(
+                               Flexiskin::generateDynamicModuleStyleName(
+                                       BsConfig::get( 'MW::Flexiskin::Active' )
+                               )
+                       );
                }
 
                return true;
@@ -199,16 +210,31 @@
         */
        public static function onResourceLoaderRegisterModules( 
&$resourceLoader ) {
                $resourceLoader->register(
-                       Flexiskin::generateDynamicModuleStyleName(),
+                       Flexiskin::generateDynamicModuleStyleName(
+                               BsConfig::get( 'MW::Flexiskin::Active' )
+                       ),
                        array(
                                'class' => 'ResourceLoaderFlexiskinModule'
                        )
                );
+
+               $registrant = new PreviewResourceModuleRegistrant(
+                       $resourceLoader,
+                       new AvailableConfigs()
+               );
+
+               $registrant->register();
+
                return true;
        }
 
-       public static function generateDynamicModuleStyleName(){
-               return 'ext.bluespice.flexiskin.skin.' . BsConfig::get( 
'MW::Flexiskin::Active' );
+       /**
+        *
+        * @param string $flexiskinId
+        * @return string
+        */
+       public static function generateDynamicModuleStyleName( $flexiskinId ){
+               return 'ext.bluespice.flexiskin.skin.' . $flexiskinId;
        }
 
        /**
diff --git a/Flexiskin/composer.json b/Flexiskin/composer.json
new file mode 100644
index 0000000..aee5f57
--- /dev/null
+++ b/Flexiskin/composer.json
@@ -0,0 +1,8 @@
+{
+       "autoload" : {
+               "psr-4": {
+                       "BlueSpice\\Flexiskin\\Tests\\" : "tests/phpunit",
+                       "BlueSpice\\Flexiskin\\" : "src"
+               }
+       }
+}
diff --git a/Flexiskin/extension.json b/Flexiskin/extension.json
index 63cd644..409bd2a 100644
--- a/Flexiskin/extension.json
+++ b/Flexiskin/extension.json
@@ -47,9 +47,6 @@
                "remoteExtPath": "BlueSpiceExtensions/Flexiskin/resources"
        },
        "ResourceModules": {
-               "ext.bluespice.flexiskin.skin.preview": {
-                       "class": "ResourceLoaderFlexiskinPreviewModule"
-               },
                "ext.bluespice.flexiskin": {
                        "scripts": [
                                "bluespice.flexiskin.js"
@@ -110,5 +107,6 @@
        "config": {
                "EditPageFrameOptions": "SAMEORIGIN"
        },
+       "load_composer_autoloader": true,
        "manifest_version": 1
 }
\ No newline at end of file
diff --git a/Flexiskin/includes/FlexiskinFormatter.class.php 
b/Flexiskin/includes/FlexiskinFormatter.class.php
index cbf054f..543fde6 100644
--- a/Flexiskin/includes/FlexiskinFormatter.class.php
+++ b/Flexiskin/includes/FlexiskinFormatter.class.php
@@ -10,7 +10,7 @@
                else{
                        $aReturn[] = "body{background-color:#" . 
$aConfig->customBackgroundColor . " !important;}";
                }
-               if ( isset( $aConfig->backgroundImage ) && 
$aConfig->backgroundImage != "" ) {
+               if ( !empty( $aConfig->backgroundImage ) && 
$aConfig->backgroundImage !== "none" ) {
                        $oStatus = BsFileSystemHelper::getFileContent( 
$aConfig->backgroundImage, 'flexiskin' . DS . $sNewId . DS . 'images' );
                        if( $oStatus->isGood() ){
                                $oFileInfo = new SplFileInfo( 
$aConfig->backgroundImage );
diff --git a/Flexiskin/includes/api/BSApiFlexiskinStore.php 
b/Flexiskin/includes/api/BSApiFlexiskinStore.php
index e53f091..aa4aec7 100644
--- a/Flexiskin/includes/api/BSApiFlexiskinStore.php
+++ b/Flexiskin/includes/api/BSApiFlexiskinStore.php
@@ -26,38 +26,11 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License v2 or 
later
  */
 
+use BlueSpice\Flexiskin\Data\AvailableConfigs;
+
 class BSApiFlexiskinStore extends BSApiExtJSStoreBase {
        protected function makeData( $sQuery = '' ) {
-
-               $sActiveSkin = BsConfig::get( 'MW::Flexiskin::Active' );
-               $oStatus = BsFileSystemHelper::ensureDataDirectory( "flexiskin" 
. DS );
-               if ( !$oStatus->isGood() ){
-                       return array();
-               }
-               $aData = array ();
-               if ( $handle = opendir( $oStatus->getValue() ) ) {
-                       while ( false !== ( $entry = readdir( $handle ) ) ) {
-                               if ( $entry != "." && $entry != ".." ) {
-                                       $oStatus = 
BsFileSystemHelper::getFileContent( "conf.json", "flexiskin" . DS . $entry );
-                                       if ( !$oStatus->isGood() ) {
-                                               continue;
-                                       }
-                                       $aFile = FormatJson::decode( 
$oStatus->getValue() );
-                                       //PW(27.11.2013) TODO: this should not 
be needed!
-                                       if ( !isset( $aFile[0] ) || !is_object( 
$aFile[0] ) ) {
-                                               continue;
-                                       }
-                                       $aData[] = ( object )array(
-                                               'flexiskin_id' => $entry,
-                                               'flexiskin_name' => 
$aFile[0]->name,
-                                               'flexiskin_desc' => 
$aFile[0]->desc,
-                                               'flexiskin_active' => 
$sActiveSkin == $entry ? true : false,
-                                               'flexiskin_config' => 
Flexiskin::getFlexiskinConfig( $entry )
-                                       );
-                               }
-                       }
-                       closedir( $handle );
-               }
-               return $aData;
+               $availableConfigs = new AvailableConfigs();
+               return $availableConfigs->read();
        }
 }
\ No newline at end of file
diff --git 
a/Flexiskin/includes/resourceloader/ResourceLoaderFlexiskinPreviewModule.php 
b/Flexiskin/includes/resourceloader/ResourceLoaderFlexiskinPreviewModule.php
index c479136..d92da05 100644
--- a/Flexiskin/includes/resourceloader/ResourceLoaderFlexiskinPreviewModule.php
+++ b/Flexiskin/includes/resourceloader/ResourceLoaderFlexiskinPreviewModule.php
@@ -6,10 +6,13 @@
        /**
         *
         * @param ResourceLoaderContext $context
-        * @return type
+        * @return string
         */
        public function makeFlexiSkinID( $context ) {
-               return $context->getRequest()->getSessionData( 'flexiskin' );
+               //E.g. $modulename 
"ext.bluespice.flexiskin.skin.preview.467...543"
+               $modulename =  $this->getName();
+               $parts = explode( '.', $modulename );
+               return array_pop( $parts );
        }
 
        public function makeSourceFileName() {
diff --git a/Flexiskin/src/Data/AvailableConfigs.php 
b/Flexiskin/src/Data/AvailableConfigs.php
new file mode 100644
index 0000000..03b6eb7
--- /dev/null
+++ b/Flexiskin/src/Data/AvailableConfigs.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace BlueSpice\Flexiskin\Data;
+
+class AvailableConfigs {
+
+       /**
+        * ATTENTION: This code was copied from BSApiFlexiskinStore and probably
+        * needs some refactoring
+        * @return array
+        */
+       public function read() {
+               $activeSkinId = \BsConfig::get( 'MW::Flexiskin::Active' );
+               $status = \BsFileSystemHelper::ensureDataDirectory( "flexiskin" 
. DS );
+               if ( !$status->isGood() ){
+                       return [];
+               }
+               $data = [];
+               if ( $handle = opendir( $status->getValue() ) ) {
+                       while ( false !== ( $skinId = readdir( $handle ) ) ) {
+                               if ( $skinId != "." && $skinId != ".." ) {
+                                       $status = 
\BsFileSystemHelper::getFileContent( "conf.json", "flexiskin" . DS . $skinId );
+                                       if ( !$status->isGood() ) {
+                                               continue;
+                                       }
+                                       $file = \FormatJson::decode( 
$status->getValue() );
+                                       //PW(27.11.2013) TODO: this should not 
be needed!
+                                       if ( !isset( $file[0] ) || !is_object( 
$file[0] ) ) {
+                                               continue;
+                                       }
+                                       $data[] = ( object )array(
+                                               'flexiskin_id' => $skinId,
+                                               'flexiskin_name' => 
$file[0]->name,
+                                               'flexiskin_desc' => 
$file[0]->desc,
+                                               'flexiskin_active' => 
$activeSkinId == $skinId ? true : false,
+                                               'flexiskin_config' => 
\Flexiskin::getFlexiskinConfig( $skinId )
+                                       );
+                               }
+                       }
+                       closedir( $handle );
+               }
+               return $data;
+       }
+}
\ No newline at end of file
diff --git a/Flexiskin/src/PreviewResourceModuleRegistrant.php 
b/Flexiskin/src/PreviewResourceModuleRegistrant.php
new file mode 100644
index 0000000..11e687e
--- /dev/null
+++ b/Flexiskin/src/PreviewResourceModuleRegistrant.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace BlueSpice\Flexiskin;
+
+class PreviewResourceModuleRegistrant {
+
+       /**
+        *
+        * @var \ResourceLoader
+        */
+       protected $resourceLoader = null;
+
+       /**
+        *
+        * @var Data\AvailableConfigs
+        */
+       protected $reader = null;
+
+       /**
+        *
+        * @param \ResourceLoader $resourceLoader
+        * @param Data\AvailableConfigs $reader
+        */
+       public function __construct( $resourceLoader, $reader ) {
+               $this->resourceLoader = $resourceLoader;
+               $this->reader = $reader;
+       }
+
+       public function register() {
+               $dataSets = $this->reader->read();
+               foreach( $dataSets as $dataSet ) {
+                       $flexiskinId = $dataSet->flexiskin_id;
+                       $this->resourceLoader->register(
+                               \Flexiskin::generateDynamicModuleStyleName(
+                                       "preview.$flexiskinId"
+                               ),
+                               [
+                                       'class' => 
'ResourceLoaderFlexiskinPreviewModule'
+                               ]
+                       );
+               }
+       }
+}

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

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

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

Reply via email to