forked from matomo-org/matomo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSystemSettings.php
86 lines (73 loc) · 3.38 KB
/
SystemSettings.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
<?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\Plugins\UsersManager;
use Piwik\Piwik;
use Piwik\Plugins\UsersManager\Validators\AllowedEmailDomain;
use Piwik\Settings\Setting;
use Piwik\Settings\FieldConfig;
/**
* Defines Settings for UsersManager.
*/
class SystemSettings extends \Piwik\Settings\Plugin\SystemSettings
{
/** @var Setting */
public $allowedEmailDomains;
protected function init()
{
$this->allowedEmailDomains = $this->createAllowedEmailDomains();
}
private function createAllowedEmailDomains()
{
return $this->makeSetting('allowedEmailDomains', array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) {
$field->title = Piwik::translate('UsersManager_SettingRestrictLoginEmailDomains');
$field->uiControl = FieldConfig::UI_CONTROL_FIELD_ARRAY;
$title = Piwik::translate('UsersManager_SettingFieldAllowedEmailDomain');
$arrayField = new FieldConfig\ArrayField($title, FieldConfig::UI_CONTROL_TEXT);
$field->uiControlAttributes['field'] = $arrayField->toArray();
$field->description = Piwik::translate('UsersManager_SettingRestrictLoginEmailDomainsHelp');
$allowedEmailDomains = new AllowedEmailDomain($this);
$domainsInUse = $allowedEmailDomains->getEmailDomainsInUse();
$field->inlineHelp .= '<br><strong>'.Piwik::translate('UsersManager_SettingRestrictLoginEmailDomainsHelpInUse').'</strong>';
$field->inlineHelp .= '<br>' . implode('<br>', $domainsInUse);
$field->validate = function ($value) use ($field, $allowedEmailDomains) {
$value = call_user_func($field->transform, $value, $this);
if (empty($value)) {
return;
}
$domainsInUse = $allowedEmailDomains->getEmailDomainsInUse();
$notMatchingDomains = array_diff($domainsInUse, $value);
if (!empty($notMatchingDomains)) {
$notMatchingDomains = implode(', ', array_unique($notMatchingDomains));
$message = Piwik::translate('UsersManager_SettingRestrictLoginEmailDomainsErrorOtherDomainsInUse', $notMatchingDomains);
throw new \Exception($message);
}
};
$field->transform = function ($domains) {
if (empty($domains)) {
return array();
}
if (!is_array($domains)){
$domains = [$domains];
}
$domains = array_map(function ($domain) {
$domain = trim($domain);
if (mb_strpos($domain, '@') !== false) {
// handle incorrect user input such as leading @ or entered email address
$allowedEmailDomains = new AllowedEmailDomain($this);
$domain = $allowedEmailDomains->getDomainFromEmail($domain);
}
return mb_strtolower($domain);
}, $domains);
$domains = array_filter($domains, 'strlen');
$domains = array_unique($domains);
$domains = array_values($domains);
return $domains;
};
});
}
}