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
111
112
113
114
115
116
117
118
119
120
121
122
|
<?php
/**
* Matomo - 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\Storage\Backend;
use Piwik\Plugins\SitesManager\Model;
use Piwik\Site;
use Exception;
/**
* Backend for an existing site. Stores all settings in the "site" database table.
*/
class SitesTable implements BackendInterface
{
/**
* @var int
*/
private $idSite;
private $commaSeparatedArrayFields = array(
'sitesearch_keyword_parameters',
'sitesearch_category_parameters',
'excluded_user_agents',
'excluded_parameters',
'excluded_ips'
);
// these fields are standard fields of a site and cannot be adjusted via a setting
private $allowedNames = array(
'ecommerce', 'sitesearch', 'sitesearch_keyword_parameters',
'sitesearch_category_parameters', 'exclude_unknown_urls',
'excluded_ips', 'excluded_parameters',
'excluded_user_agents', 'keep_url_fragment', 'urls'
);
public function __construct($idSite)
{
if (empty($idSite)) {
throw new Exception('No idSite given for Measurable backend');
}
$this->idSite = (int) $idSite;
}
/**
* @inheritdoc
*/
public function getStorageId()
{
return 'SitesTable_' . $this->idSite;
}
/**
* Saves (persists) the current setting values in the database.
*/
public function save($values)
{
$model = $this->getModel();
foreach ($values as $key => $value) {
if (!in_array($key, $this->allowedNames)) {
unset($values[$key]);
continue;
}
if (is_array($value) && in_array($key, $this->commaSeparatedArrayFields)) {
$values[$key] = implode(',', $value);
} elseif (is_bool($value)) {
$values[$key] = (int) $value;
}
}
if (!empty($values['urls'])) {
$urls = array_unique($values['urls']);
$values['main_url'] = array_shift($urls);
$model->deleteSiteAliasUrls($this->idSite);
foreach ($urls as $url) {
$model->insertSiteUrl($this->idSite, $url);
}
}
unset($values['urls']);
$model->updateSite($values, $this->idSite);
Site::clearCacheForSite($this->idSite);
}
public function load()
{
if (!empty($this->idSite)) {
$site = Site::getSite($this->idSite);
$urls = $this->getModel();
$site['urls'] = $urls->getSiteUrlsFromId($this->idSite);
foreach ($this->commaSeparatedArrayFields as $field) {
if (!empty($site[$field]) && is_string($site[$field])) {
$site[$field] = explode(',', $site[$field]);
}
}
return $site;
}
}
private function getModel()
{
return new Model();
}
public function delete()
{
}
}
|