Welcome to mirror list, hosted at ThFree Co, Russian Federation.

SystemSettings.php « Plugin « Settings « core - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9dafa19af127bb9fa611dc8f6b5e9331eeb92c29 (plain)
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
/**
 * Piwik - free/libre analytics platform
 *
 * @link https://matomo.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 *
 */
namespace Piwik\Settings\Plugin;

use Piwik\Db;
use Piwik\Piwik;
use Piwik\Settings\Settings;
use Piwik\Settings\Storage;

/**
 * Base class of all system settings providers. Plugins that define their own configuration settings
 * can extend this class to easily make their system settings available to Piwik users.
 *
 * Descendants of this class should implement the {@link init()} method and call the
 * {@link makeSetting()} method to create a system setting for this plugin.
 *
 * For an example, see {@link Piwik\Plugins\ExampleSettingsPlugin\SystemSettings}.
 *
 * $systemSettings = new Piwik\Plugins\ExampleSettingsPlugin\SystemSettings(); // get instance via dependency injection
 * $systemSettings->yourSetting->getValue();
 *
 * @api
 */
abstract class SystemSettings extends Settings
{
    /**
     * Constructor.
     */
    public function __construct()
    {
        parent::__construct();

        $this->init();
    }

    /**
     * Creates a new system setting.
     *
     * Settings will be displayed in the UI depending on the order of `makeSetting` calls. This means you can define
     * the order of the displayed settings by calling makeSetting first for more important settings.
     *
     * @param string $name         The name of the setting that shall be created
     * @param mixed  $defaultValue The default value for this setting. Note the value will not be converted to the
     *                             specified type.
     * @param string $type         The PHP internal type the value of this setting should have.
     *                             Use one of FieldConfig::TYPE_* constancts
     * @param \Closure $fieldConfigCallback   A callback method to configure the field that shall be displayed in the
     *                             UI to define the value for this setting
     * @return SystemSetting   Returns an instance of the created measurable setting.
     */
    protected function makeSetting($name, $defaultValue, $type, $fieldConfigCallback)
    {
        $setting = new SystemSetting($name, $defaultValue, $type, $this->pluginName);
        $setting->setConfigureCallback($fieldConfigCallback);
        $this->addSetting($setting);
        return $setting;
    }

    /**
     * This is only meant for some core features used by some core plugins that are shipped with Piwik
     * @internal
     * @ignore
     * @param string $configSectionName
     * @param $name
     * @param $defaultValue
     * @param $type
     * @param $fieldConfigCallback
     * @return SystemSetting
     * @throws \Exception
     */
    protected function makeSettingManagedInConfigOnly($configSectionName, $name, $defaultValue, $type, $fieldConfigCallback)
    {
        $setting = new SystemConfigSetting($name, $defaultValue, $type, $this->pluginName, $configSectionName);
        $setting->setConfigureCallback($fieldConfigCallback);
        $this->addSetting($setting);
        return $setting;
    }

    /**
     * Saves (persists) the current setting values in the database.
     *
     * Will trigger an event to notify plugins that a value has been changed.
     */
    public function save()
    {
        parent::save();

        /**
         * Triggered after system settings have been updated.
         *
         * **Example**
         *
         *     Piwik::addAction('SystemSettings.updated', function (SystemSettings $settings) {
         *         if ($settings->getPluginName() === 'PluginName') {
         *             $value = $settings->someSetting->getValue();
         *             // Do something with the new setting value
         *         }
         *     });
         *
         * @param Settings $settings The plugin settings object.
         */
        Piwik::postEvent('SystemSettings.updated', array($this));
    }
}