forked from gjb2048/moodle-theme_essential
-
Notifications
You must be signed in to change notification settings - Fork 0
/
essential_admin_setting_putprops.php
110 lines (97 loc) · 3.99 KB
/
essential_admin_setting_putprops.php
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Put properties with validation setting.
*
* @package theme
* @subpackage essential
* @copyright © 2017-onwards G J Barnard.
* @author G J Barnard - {@link http://moodle.org/user/profile.php?id=442195}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
class essential_admin_setting_putprops extends admin_setting_configtextarea {
/** @var string Name of the theme. */
private $themename;
/** @var string Name of the 'callable' function to call with the name of the theme and the properties as an array. */
private $callme;
/** @var string Report back from the parsing 'callable' to inform the user in the text area. */
private $report = '';
/**
* Not a setting, just putting properties.
*
* @param string $name unique ascii name, either 'mysetting' for settings that in config, or 'myplugin/mysetting' for ones in
* config_plugins.
* @param string $visiblename localised
* @param string $description long localised info
* @param string $defaultsetting
* @param string $themename Name of the theme.
* @param string $callme Name of the 'callable' function to call with the name of the theme and the properties as an array.
*/
public function __construct($name, $visiblename, $description, $themename, $callme) {
$this->themename = $themename;
$this->callme = $callme;
parent::__construct($name, $visiblename, $description, ''); // Last parameter is default.
}
public function get_defaultsetting() {
return '';
}
public function write_setting($data) {
$validated = $this->validate($data);
if ($validated !== true) {
return $validated;
}
return ($this->config_write($this->name, $this->report) ? '' : get_string('errorsetting', 'admin'));
}
/**
* Validate data before storage.
* @param string data.
* @return mixed true if alright, string if error found.
*/
public function validate($data) {
$validated = parent::validate($data); // Pass parent validation first.
if ($validated == true) {
if (!empty($data)) {
// Only attempt decode if we have the start of a JSON string, otherwise will certainly be the saved report.
if ($data[0] == '{') {
$props = json_decode($data, true);
if ($props === null) {
if (function_exists('json_last_error_msg')) {
$validated = json_last_error_msg();
} else {
// Fall back to numeric error for older PHP version.
$validated = json_last_error();
}
} else {
$this->report = call_user_func($this->callme, $this->themename, $props);
}
} else {
// Keep what we have.
$this->report = $data;
}
}
}
return $validated;
}
/**
* Returns an HTML string
* @return string Returns an HTML string
*/
public function output_html($data, $query='') {
$return = parent::output_html($data, $query);
return $return;
}
}