Robert Vogel has uploaded a new change for review. (
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(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceExtensions
refs/changes/59/375959/1
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..8f01110 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..c4eca2e 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 ( isset( $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..12917e3
--- /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: newchange
Gerrit-Change-Id: I771f9d28d436336cd6c5499ffd8652ca2f452a9a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions
Gerrit-Branch: master
Gerrit-Owner: Robert Vogel <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits