diff --git a/src/mibew/libs/classes/Mibew/Controller/Settings/FeaturesController.php b/src/mibew/libs/classes/Mibew/Controller/Settings/FeaturesController.php new file mode 100644 index 00000000..7093bc97 --- /dev/null +++ b/src/mibew/libs/classes/Mibew/Controller/Settings/FeaturesController.php @@ -0,0 +1,120 @@ +attributes->get('_operator'); + $page = array( + 'agentId' => '', + 'errors' => array(), + ); + + if (Settings::get('featuresversion') != FEATURES_VERSION) { + Settings::set('featuresversion', FEATURES_VERSION); + Settings::update(); + } + + // Load all needed options and fill form with them. + $options = $this->getOptionsList(); + foreach ($options as $opt) { + $page['form' . $opt] = (Settings::get($opt) == '1'); + } + + $page['canmodify'] = is_capable(CAN_ADMINISTRATE, $operator); + $page['stored'] = $request->query->get('stored'); + $page['title'] = getlocal('settings.title'); + $page['menuid'] = 'settings'; + $page = array_merge($page, prepare_menu($operator)); + $page['tabs'] = setup_settings_tabs(1); + + return $this->render('settings_features', $page); + } + + /** + * Processes submitting of the form which is generated in + * {@link \Mibew\Controller\Settings\FeaturesController::showFormAction()} + * method. + * + * @param Request $request Incoming request. + * @return string Rendered page content. + */ + public function submitFormAction(Request $request) + { + csrf_check_token($request); + + // Update options in the database. + $options = $this->getOptionsList(); + foreach ($options as $opt) { + $value = $request->request->get($opt) == 'on' ? '1' : '0'; + Settings::set($opt, $value); + } + Settings::update(); + + // Redirect the current operator to the same page using GET method. + $redirect_to = $this->generateUrl( + 'settings_features', + array('stored' => true) + ); + + return $this->redirect($redirect_to); + } + + /** + * Returns list with names of all features options. + * + * @return array Features options names. + */ + protected function getOptionsList() + { + return array( + 'enableban', + 'usercanchangename', + 'enablegroups', + 'enablegroupsisolation', + 'enablestatistics', + 'enabletracking', + 'enablessl', + 'forcessl', + 'enablepresurvey', + 'surveyaskmail', + 'surveyaskgroup', + 'surveyaskmessage', + 'enablepopupnotification', + 'showonlineoperators', + 'enablecaptcha', + ); + } +} diff --git a/src/mibew/libs/routing.yml b/src/mibew/libs/routing.yml index 9c97bcba..aa7a522b 100644 --- a/src/mibew/libs/routing.yml +++ b/src/mibew/libs/routing.yml @@ -377,6 +377,22 @@ settings_common_save: _access_permissions: [CAN_ADMINISTRATE] methods: [POST] +settings_features: + path: /operator/settings/features + defaults: + _controller: Mibew\Controller\Settings\FeaturesController::showFormAction + _access_check: Mibew\AccessControl\Check\PermissionsCheck + _access_permissions: [CAN_ADMINISTRATE] + methods: [GET] + +settings_features_save: + path: /operator/settings/features + defaults: + _controller: Mibew\Controller\Settings\FeaturesController::submitFormAction + _access_check: Mibew\AccessControl\Check\PermissionsCheck + _access_permissions: [CAN_ADMINISTRATE] + methods: [POST] + settings_performance: path: /operator/settings/performance defaults: diff --git a/src/mibew/libs/settings.php b/src/mibew/libs/settings.php index 411f3b91..5b23bf26 100644 --- a/src/mibew/libs/settings.php +++ b/src/mibew/libs/settings.php @@ -32,7 +32,7 @@ function setup_settings_tabs($active) ? (MIBEW_WEB_ROOT . "/operator/settings") : ""), getlocal("page_settings.tab.features") => ($active != 1 - ? (MIBEW_WEB_ROOT . "/operator/features.php") + ? (MIBEW_WEB_ROOT . "/operator/settings/features") : ""), getlocal("page_settings.tab.performance") => ($active != 2 ? (MIBEW_WEB_ROOT . "/operator/settings/performance") diff --git a/src/mibew/operator/features.php b/src/mibew/operator/features.php deleted file mode 100644 index 4b901fed..00000000 --- a/src/mibew/operator/features.php +++ /dev/null @@ -1,87 +0,0 @@ - '', - 'errors' => array(), -); - -$options = array( - 'enableban', - 'usercanchangename', - 'enablegroups', - 'enablegroupsisolation', - 'enablestatistics', - 'enabletracking', - 'enablessl', - 'forcessl', - 'enablepresurvey', - 'surveyaskmail', - 'surveyaskgroup', - 'surveyaskmessage', - 'enablepopupnotification', - 'showonlineoperators', - 'enablecaptcha', -); - -if (Settings::get('featuresversion') != FEATURES_VERSION) { - Settings::set('featuresversion', FEATURES_VERSION); - Settings::update(); -} -$params = array(); -foreach ($options as $opt) { - $params[$opt] = Settings::get($opt); -} - -if (isset($_POST['sent'])) { - if (is_capable(CAN_ADMINISTRATE, $operator)) { - foreach ($options as $opt) { - Settings::set($opt, (verify_param($opt, "/^on$/", "") == "on" ? "1" : "0")); - } - Settings::update(); - header("Location: " . MIBEW_WEB_ROOT . "/operator/features.php?stored"); - exit; - } else { - $page['errors'][] = "Not an administrator"; - } -} - -$page['canmodify'] = is_capable(CAN_ADMINISTRATE, $operator); -$page['stored'] = isset($_GET['stored']); -foreach ($options as $opt) { - $page["form$opt"] = $params[$opt] == "1"; -} - -$page['title'] = getlocal("settings.title"); -$page['menuid'] = "settings"; - -$page = array_merge($page, prepare_menu($operator)); - -$page['tabs'] = setup_settings_tabs(1); - -$page_style = new PageStyle(PageStyle::getCurrentStyle()); -$page_style->render('features', $page); diff --git a/src/mibew/operator/index.php b/src/mibew/operator/index.php index b26a0649..e4c4867a 100644 --- a/src/mibew/operator/index.php +++ b/src/mibew/operator/index.php @@ -35,7 +35,7 @@ $page = array( 'profilePage' => MIBEW_WEB_ROOT . "/operator/operator/" . $operator['operatorid'] . '/edit', 'updateWizard' => MIBEW_WEB_ROOT . "/install/", 'newFeatures' => Settings::get('featuresversion') != FEATURES_VERSION, - 'featuresPage' => MIBEW_WEB_ROOT . "/operator/features.php", + 'featuresPage' => MIBEW_WEB_ROOT . "/operator/settings/features", 'isOnline' => $is_online, 'warnOffline' => true, 'title' => getlocal("topMenu.admin"), diff --git a/src/mibew/styles/pages/default/templates_src/server_side/features.handlebars b/src/mibew/styles/pages/default/templates_src/server_side/settings_features.handlebars similarity index 99% rename from src/mibew/styles/pages/default/templates_src/server_side/features.handlebars rename to src/mibew/styles/pages/default/templates_src/server_side/settings_features.handlebars index e1604c5c..f7d0a7cc 100644 --- a/src/mibew/styles/pages/default/templates_src/server_side/features.handlebars +++ b/src/mibew/styles/pages/default/templates_src/server_side/settings_features.handlebars @@ -18,7 +18,7 @@
{{l10n "features.saved"}}
{{/if}} -
+ {{csrfTokenInput}}