Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
AdminController
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 3
156
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 pageSiteSettings
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
6
 siteSettings
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
90
1<?php
2
3namespace BuyerKiosk\Core\Controllers;
4
5/*******
6
7/config/*
8
9*******/
10
11// Handles admin-related activities, including site settings, user management, etc
12#[AllowDynamicProperties]
13class AdminController extends BaseController {
14
15    public function __construct($app){
16        $this->_app = $app;
17    }
18
19    public function pageSiteSettings(){
20        // Access-controlled page
21        if (!$this->_app->user->checkAccess('uri_site_settings')){
22            $this->_app->notFound();
23        }
24
25        // Hook for core and plugins to register their settings
26        $this->_app->applyHook("settings.register");
27
28        $this->_app->render('site-settings.html', [
29            'page' => [
30                'author' =>         $this->_app->site->author,
31                'title' =>          "Site Settings",
32                'description' =>    "Global settings for the site, including registration and activation settings, site title, admin emails, and default languages.",
33                'alerts' =>         $this->_app->alerts->getAndClearMessages()
34            ],
35            'settings' => $this->_app->site->getRegisteredSettings(),
36            'info'     => $this->_app->site->getSystemInfo(),
37            'error_log'=> $this->_app->site->getLog(50)
38        ]);
39    }
40
41    public function siteSettings(){
42        // Get the alert message stream
43        $ms = $this->_app->alerts;
44
45        $post = $this->_app->request->post();
46
47        // Remove CSRF token
48        if (isset($post['csrf_token']))
49            unset($post['csrf_token']);
50
51        // Access-controlled page
52        if (!$this->_app->user->checkAccess('update_site_settings')){
53            $ms->addMessageTranslated("danger", "ACCESS_DENIED");
54            $this->_app->halt(403);
55        }
56
57        // Hook for core and plugins to register their settings
58        $this->_app->applyHook("settings.register");
59
60        // Get registered settings
61        $registered_settings = $this->_app->site->getRegisteredSettings();
62
63        // Ok, check that all posted settings are registered
64        foreach ($post as $plugin => $settings){
65            if (!isset($registered_settings[$plugin])){
66                $ms->addMessageTranslated("danger", "CONFIG_PLUGIN_INVALID", ["plugin" => $plugin]);
67                $this->_app->halt(400);
68            }
69            foreach ($settings as $name => $value){
70                if (!isset($registered_settings[$plugin][$name])){
71                    $ms->addMessageTranslated("danger", "CONFIG_SETTING_INVALID", ["plugin" => $plugin, "name" => $name]);
72                    $this->_app->halt(400);
73                }
74            }
75        }
76
77        // TODO: validate setting syntax
78
79        // If validation passed, then update
80        foreach ($post as $plugin => $settings){
81            foreach ($settings as $name => $value){
82                $this->_app->site->set($plugin, $name, $value);
83            }
84        }
85        $this->_app->site->store();
86    }
87
88}
89?>