PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 1.3.1
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v1.3.1
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / Settings / Measurable / MeasurableProperty.php
matomo / app / core / Settings / Measurable Last commit date
MeasurableProperty.php 6 years ago MeasurableSetting.php 6 years ago MeasurableSettings.php 6 years ago
MeasurableProperty.php
90 lines
1 <?php
2 /**
3 * Piwik - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 *
8 */
9
10 namespace Piwik\Settings\Measurable;
11
12 use Piwik\Container\StaticContainer;
13 use Piwik\Piwik;
14 use Piwik\Settings\Storage;
15 use Exception;
16
17 /**
18 * Describes a Measurable property for a measurable type such as a website, a mobile app, ....
19 *
20 * The difference to {@link MeasurableSetting} is that these fields will be stored in the actual site table whereas
21 * MeasurableSetting will be stored in a site_settings table. For this reasons MeasurableProperty can be used only
22 * for some specific fields that already exist in site table such as "ecommerce", "sitesearch" etc.
23 *
24 * See {@link \Piwik\Settings\Setting}.
25 */
26 class MeasurableProperty extends \Piwik\Settings\Setting
27 {
28 /**
29 * @var int
30 */
31 private $idSite = 0;
32
33 private $allowedNames = array(
34 'ecommerce', 'sitesearch', 'sitesearch_keyword_parameters',
35 'sitesearch_category_parameters',
36 'exclude_unknown_urls', 'excluded_ips', 'excluded_parameters',
37 'excluded_user_agents', 'keep_url_fragment', 'urls', 'group'
38 );
39
40 /**
41 * Constructor.
42 *
43 * @param string $name The persisted name of the setting.
44 * @param mixed $defaultValue Default value for this setting if no value was specified.
45 * @param string $type Eg an array, int, ... see TYPE_* constants
46 * @param string $pluginName The name of the plugin the setting belongs to.
47 * @param int $idSite The idSite this property belongs to.
48 * @throws Exception
49 */
50 public function __construct($name, $defaultValue, $type, $pluginName, $idSite)
51 {
52 if (!in_array($name, $this->allowedNames)) {
53 throw new Exception(sprintf('Name "%s" is not allowed to be used with a MeasurableProperty, use a MeasurableSetting instead.', $name));
54 }
55
56 parent::__construct($name, $defaultValue, $type, $pluginName);
57
58 $this->idSite = $idSite;
59
60 $storageFactory = StaticContainer::get('Piwik\Settings\Storage\Factory');
61 $this->storage = $storageFactory->getSitesTable($idSite);
62 }
63
64 /**
65 * Returns `true` if this setting can be displayed for the current user, `false` if otherwise.
66 *
67 * @return bool
68 */
69 public function isWritableByCurrentUser()
70 {
71 if (isset($this->hasWritePermission)) {
72 return $this->hasWritePermission;
73 }
74
75 // performance improvement, do not detect this in __construct otherwise likely rather "big" query to DB.
76 if ($this->hasSiteBeenCreated()) {
77 $this->hasWritePermission = Piwik::isUserHasAdminAccess($this->idSite);
78 } else {
79 $this->hasWritePermission = Piwik::hasUserSuperUserAccess();
80 }
81
82 return $this->hasWritePermission;
83 }
84
85 private function hasSiteBeenCreated()
86 {
87 return !empty($this->idSite);
88 }
89 }
90