2declare( strict_types = 1 );
4namespace MediaWiki\Extension\Translate\TranslatorSandbox;
6use MediaWiki\Api\ApiLogout;
7use MediaWiki\Api\ApiMessage;
8use MediaWiki\Api\ApiOptions;
9use MediaWiki\Api\Hook\ApiCheckCanExecuteHook;
10use MediaWiki\Config\Config;
11use MediaWiki\Permissions\Hook\TitleQuickPermissionsHook;
12use MediaWiki\Permissions\Hook\UserGetRightsHook;
13use MediaWiki\Preferences\Hook\GetPreferencesHook;
23 ApiCheckCanExecuteHook,
25 TitleQuickPermissionsHook
27 private bool $isTranslateSandboxEnabled;
29 private const ALLOWED_RIGHTS = [
34 'translate-sandboxaction',
38 public function __construct( Config $config ) {
39 $this->isTranslateSandboxEnabled = $config->get(
'TranslateUseSandbox' );
44 if ( !$this->isTranslateSandboxEnabled ) {
52 $rights = self::ALLOWED_RIGHTS;
60 if ( !$this->isTranslateSandboxEnabled ) {
68 if ( !in_array( $action, self::ALLOWED_RIGHTS ) ) {
71 $errors = [
'tsb-other-actions' ];
80 if ( !$this->isTranslateSandboxEnabled ) {
84 $preferences[
'translate-sandbox'] = $preferences[
'translate-sandbox-reminders'] =
93 if ( !$this->isTranslateSandboxEnabled ) {
99 TranslationStashActionApi::class,
105 \MediaWiki\Extension\Notifications\Api\ApiEchoMarkRead::class,
108 if ( TranslateSandbox::isSandboxed( $user ) ) {
109 $class = get_class( $module );
110 if ( $module->isWriteMode() && !in_array( $class, $inclusionList,
true ) ) {
111 $message = ApiMessage::create(
'apierror-writeapidenied' );