-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathWikiSettingController.php
More file actions
65 lines (56 loc) · 3.03 KB
/
WikiSettingController.php
File metadata and controls
65 lines (56 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace App\Http\Controllers;
use App\Rules\SettingCaptchaQuestions;
use App\Rules\SettingWikibaseManifestEquivEntities;
use App\WikiSetting;
use Illuminate\Http\Request;
class WikiSettingController extends Controller
{
/**
* @return (SettingWikibaseManifestEquivEntities|string)[][]
*
* @psalm-return array{wgDefaultSkin: array{0: 'required', 1: 'string', 2: 'in:vector,modern,timeless'}, wwExtEnableConfirmAccount: array{0: 'required', 1: 'boolean'}, wwExtEnableWikibaseLexeme: array{0: 'required', 1: 'boolean'}, wwWikibaseStringLengthString: array{0: 'required', 1: 'integer', 2: 'between:400,2500'}, wwWikibaseStringLengthMonolingualText: array{0: 'required', 1: 'integer', 2: 'between:400,2500'}, wwWikibaseStringLengthMultilang: array{0: 'required', 1: 'integer', 2: 'between:250,2500'}, wikibaseFedPropsEnable: array{0: 'required', 1: 'boolean'}, wikibaseManifestEquivEntities: array{0: 'required', 1: 'json', 2: SettingWikibaseManifestEquivEntities}, wwUseQuestyCaptcha: array{0: 'required, 1: 'boolean}, wwCaptchaQuestions: array:{0: 'required', 1: 'json', 2: SettingCaptchaQuestions}}
*/
private function getSettingValidations(): array
{
// FIXME: this list is evil and should be kept in sync with the model in Wiki.php?! (mostly)
return [
'wgDefaultSkin' => ['required', 'string', 'in:vector,modern,timeless'],
'wwExtEnableConfirmAccount' => ['required', 'boolean'],
'wwExtEnableWikibaseLexeme' => ['required', 'boolean'],
'wwWikibaseStringLengthString' => ['required', 'integer', 'between:400,2500'],
'wwWikibaseStringLengthMonolingualText' => ['required', 'integer', 'between:400,2500'],
'wwWikibaseStringLengthMultilang' => ['required', 'integer', 'between:250,2500'],
'wikibaseFedPropsEnable' => ['required', 'boolean'],
'wikibaseManifestEquivEntities' => ['required', 'json', new SettingWikibaseManifestEquivEntities()],
'wwUseQuestyCaptcha' => ['required', 'boolean'],
'wwCaptchaQuestions' => [ 'required', 'json', new SettingCaptchaQuestions()]
];
}
/**
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
*/
public function update($setting, Request $request)
{
$settingValidations = $this->getSettingValidations();
$request->validate([
// Allow both internal and external setting names, see normalizeSetting
'setting' => 'required|string|in:'.implode(',', array_keys($settingValidations)),
]);
$settingName = $request->input('setting');
$request->validate(['value' => $settingValidations[$settingName]]);
$value = $request->input('value');
$wiki = $request->attributes->get('wiki');
WikiSetting::updateOrCreate(
[
'wiki_id' => $wiki->id,
'name' => $settingName,
],
[
'value' => $value,
]
);
$res['success'] = true;
return response($res);
}
}