mirror of
https://github.com/octfx/mediawiki-extensions-TemplateStylesExtender.git
synced 2024-11-23 15:57:11 +00:00
feat: Allow to specify a custom permission for css unscoping
This commit is contained in:
parent
75eda85afa
commit
1a71b2c664
|
@ -38,6 +38,10 @@ Example:
|
|||
|
||||
**Note**: Including such a call in a page essentially limits editing to users with the `editinterface` right. You can alternatively include a call to a template that includes the styles.
|
||||
|
||||
`$wgTemplateStylesExtenderUnscopingPermission`
|
||||
Default: `editinterface`
|
||||
Specify a permission group that is allowed to unscope css.
|
||||
|
||||
## Notes on CSS vars
|
||||
Currently using `:root` selectors won't work due to template styles prepending `.mw-parser-output`.
|
||||
|
||||
|
|
|
@ -29,8 +29,15 @@
|
|||
"TemplateStylesExtenderEnableUnscopingSupport": {
|
||||
"description": "Allow to unscope css by changing '.mw-parser-output' to a custom class",
|
||||
"value": false
|
||||
},
|
||||
"TemplateStylesExtenderUnscopingPermission": {
|
||||
"description": "Speficy the permission a user must have to use unscoping. Defaults to 'editinterface'.",
|
||||
"value": "editinterface"
|
||||
}
|
||||
},
|
||||
"ConfigRegistry": {
|
||||
"TemplateStylesExtender": "GlobalVarConfig::newInstance"
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"TemplateStylesExtender": [
|
||||
"i18n"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"ext-templatestylesextender-desc": "Extends [https://www.mediawiki.org/wiki/Extension:TemplateStyles TemplateStyles] with new selectors and matchers.",
|
||||
"templatestylesextender-unscope-no-permisson": "Only users with 'editinterface' permissions can unscope css."
|
||||
"templatestylesextender-unscope-no-permisson": "Only users with 'editinterface' permissions (or a permission set in $wgTemplateStylesExtenderUnscopingPermission) can unscope css."
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace MediaWiki\Extension\TemplateStylesExtender\Hooks;
|
||||
|
||||
use MediaWiki\Extension\TemplateStyles\Hooks;
|
||||
use MediaWiki\Extension\TemplateStylesExtender\TemplateStylesExtender;
|
||||
use MediaWiki\Hook\EditPage__attemptSaveHook;
|
||||
use MediaWiki\Hook\ParserFirstCallInitHook;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
@ -24,7 +25,10 @@ class MainHooks implements ParserFirstCallInitHook, EditPage__attemptSaveHook {
|
|||
* @see Hooks::handleTag()
|
||||
*/
|
||||
public static function handleTag( $text, $params, $parser, $frame ): string {
|
||||
if ( $parser->getOptions() === null || !MediaWikiServices::getInstance()->getMainConfig()->get( 'TemplateStylesExtenderEnableUnscopingSupport' ) ) {
|
||||
if (
|
||||
$parser->getOptions() === null ||
|
||||
!TemplateStylesExtender::getConfigValue( 'TemplateStylesExtenderEnableUnscopingSupport' )
|
||||
) {
|
||||
return Hooks::handleTag( $text, $params, $parser, $frame );
|
||||
}
|
||||
|
||||
|
@ -50,7 +54,11 @@ class MainHooks implements ParserFirstCallInitHook, EditPage__attemptSaveHook {
|
|||
*/
|
||||
public function onEditPage__attemptSave( $editpage_Obj ): bool {
|
||||
$revision = $editpage_Obj->getExpectedParentRevision();
|
||||
if ( $revision === null || !MediaWikiServices::getInstance()->getMainConfig()->get( 'TemplateStylesExtenderEnableUnscopingSupport' ) ) {
|
||||
|
||||
if (
|
||||
$revision === null ||
|
||||
!TemplateStylesExtender::getConfigValue( 'TemplateStylesExtenderEnableUnscopingSupport' )
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -59,13 +67,18 @@ class MainHooks implements ParserFirstCallInitHook, EditPage__attemptSaveHook {
|
|||
return true;
|
||||
}
|
||||
|
||||
$permManager = MediaWikiServices::getInstance()->getPermissionManager();
|
||||
$user = MediaWikiServices::getInstance()->getUserFactory()->newFromUserIdentity( $editpage_Obj->getContext()->getUser() );
|
||||
$permission = TemplateStylesExtender::getConfigValue( 'TemplateStylesExtenderUnscopingPermission' );
|
||||
|
||||
$userCan = $permManager->userHasRight( $user, 'editinterface' ) || $permManager->userCan( 'editinterface', $user, $editpage_Obj->getTitle() );
|
||||
$permManager = MediaWikiServices::getInstance()->getPermissionManager();
|
||||
$user = MediaWikiServices::getInstance()
|
||||
->getUserFactory()
|
||||
->newFromUserIdentity( $editpage_Obj->getContext()->getUser() );
|
||||
|
||||
$userCan = $permManager->userHasRight( $user, $permission ) ||
|
||||
$permManager->userCan( $permission, $user, $editpage_Obj->getTitle() );
|
||||
|
||||
if ( strpos( $content->getText(), 'wrapclass' ) !== false && !$userCan ) {
|
||||
throw new PermissionsError( 'editinterface', [ 'templatestylesextender-unscope-no-permisson' ] );
|
||||
throw new PermissionsError( $permission, [ 'templatestylesextender-unscope-no-permisson' ] );
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -21,6 +21,7 @@ declare( strict_types=1 );
|
|||
|
||||
namespace MediaWiki\Extension\TemplateStylesExtender;
|
||||
|
||||
use Config;
|
||||
use ConfigException;
|
||||
use InvalidArgumentException;
|
||||
use MediaWiki\Extension\TemplateStylesExtender\Matcher\VarNameMatcher;
|
||||
|
@ -37,6 +38,11 @@ use Wikimedia\CSS\Sanitizer\StylePropertySanitizer;
|
|||
|
||||
class TemplateStylesExtender {
|
||||
|
||||
/**
|
||||
* @var Config
|
||||
*/
|
||||
private static $config;
|
||||
|
||||
/**
|
||||
* Adds a css wide keyword matcher for css variables
|
||||
* Matches 0-INF preceding css declarations at least one var( --content ) and 0-INF following declarations
|
||||
|
@ -264,8 +270,14 @@ class TemplateStylesExtender {
|
|||
* @return mixed|null
|
||||
*/
|
||||
public static function getConfigValue( string $key, $default = null ) {
|
||||
if ( self::$config === null ) {
|
||||
self::$config = MediaWikiServices::getInstance()
|
||||
->getConfigFactory()
|
||||
->makeConfig( 'TemplateStylesExtender' );
|
||||
}
|
||||
|
||||
try {
|
||||
$value = MediaWikiServices::getInstance()->getMainConfig()->get( $key );
|
||||
$value = self::$config->get( $key );
|
||||
} catch ( ConfigException $e ) {
|
||||
wfLogWarning(
|
||||
sprintf(
|
||||
|
|
Loading…
Reference in a new issue