opensupports/server/controllers/system/edit-settings.php

124 lines
3.7 KiB
PHP
Raw Normal View History

<?php
use Respect\Validation\Validator as DataValidator;
DataValidator::with('CustomValidations', true);
2017-04-18 02:09:16 +02:00
/**
* @api {post} /system/edit-settings Edit settings
* @apiVersion 4.10.0
2017-04-18 02:09:16 +02:00
*
* @apiName Edit settings
*
* @apiGroup System
2017-04-18 02:09:16 +02:00
*
* @apiDescription This path edit the settings of the system.
*
* @apiPermission staff3
2017-04-18 02:09:16 +02:00
*
2017-04-21 08:09:24 +02:00
* @apiParam {String} allowedLanguages The list of languages allowed.
* @apiParam {String} supportedLanguages The list of languages supported.
* @apiParam {Setting} setting A setting can be any of the following: language, recaptcha-public, recaptcha-private, server-email, smtp-host, smtp-port, smtp-user, smtp-pass, maintenance-mode, layout, allow-attachments, max-size, title, url.
2017-04-18 02:09:16 +02:00
*
2017-04-21 08:09:24 +02:00
* @apiUse NO_PERMISSION
2017-04-18 02:09:16 +02:00
*
2017-04-21 08:09:24 +02:00
* @apiSuccess {Object} data Empty object
2017-04-18 02:09:16 +02:00
*
*/
class EditSettingsController extends Controller {
const PATH = '/edit-settings';
const METHOD = 'POST';
public function validations() {
return [
'permission' => 'staff_3',
'requestData' => [
'default-department-id' => [
'validation' => DataValidator::oneOf(DataValidator::dataStoreId('department'),DataValidator::nullType()),
'error' => ERRORS::INVALID_DEFAULT_DEPARTMENT
],
]
];
}
public function handler() {
$settings = [
'language',
'recaptcha-public',
'recaptcha-private',
2018-12-24 01:44:59 +01:00
'server-email',
'imap-host',
'imap-user',
'imap-pass',
2019-01-19 00:58:30 +01:00
'imap-token',
'smtp-host',
'smtp-user',
'smtp-pass',
'maintenance-mode',
'layout',
'allow-attachments',
'max-size',
'title',
'url',
'mail-template-header-image',
'default-is-locked',
'default-department-id'
];
$this->checkDefaultDepartmentValid();
foreach($settings as $setting) {
2017-12-29 21:50:46 +01:00
if(Controller::request($setting)!==null) {
$settingInstance = Setting::getSetting($setting);
$settingInstance->value = Controller::request($setting);
$settingInstance->store();
}
}
if(Controller::request('allowedLanguages') || Controller::request('supportedLanguages')) {
$this->handleLanguages();
}
Log::createLog('EDIT_SETTINGS', null);
Response::respondSuccess();
}
2017-12-29 21:50:46 +01:00
public function handleLanguages() {
$allowed = json_decode(Controller::request('allowedLanguages'));
$supported = json_decode(Controller::request('supportedLanguages'));
2018-03-09 19:17:28 +01:00
if (array_diff($supported, $allowed)) {
2018-11-20 23:41:00 +01:00
throw new RequestException(ERRORS::INVALID_SUPPORTED_LANGUAGES);
2018-03-09 19:17:28 +01:00
}
foreach(Language::LANGUAGES as $languageCode) {
$language = Language::getDataStore($languageCode, 'code');
$language->allowed = in_array($languageCode, $allowed);
$language->supported = in_array($languageCode, $supported);
$language->store();
}
}
public function checkDefaultDepartmentValid() {
$departmentId = Controller::request('default-department-id');
if($departmentId){
$Publicdepartments = Department::getPublicDepartmentNames();
$isValid = false;
foreach($Publicdepartments as $department) {
if($department['id'] == $departmentId){
$isValid = true;
}
}
if(!$isValid) throw new Exception(ERRORS::INVALID_DEFAULT_DEPARTMENT);
}
}
2017-12-29 21:50:46 +01:00
}