diff options
author | Zoltan Flamis <zoltan@innocraft.com> | 2021-05-27 01:28:59 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-27 01:28:59 +0300 |
commit | 70b05de003487a31495bb9927017606a2faab7dd (patch) | |
tree | 3dcdcf0d6dc2298f356248f88d8f2e51e214afb2 /plugins/CorePluginsAdmin | |
parent | 30583c72fbb57469ee953536f69af2859fef61db (diff) |
Email notifications for critical actions (#17531)
* wip email notifications
* use Mail class
* token and login settings notification emails
* more notification emails
* user created/deleted notification
* use an abstract class
* import class
* catch email ex
* wip
* change settings changed emails
* import loggerinterface
* simpler email bodies
* some small tweaks to the translations
Co-authored-by: diosmosis <diosmosis@users.noreply.github.com>
Diffstat (limited to 'plugins/CorePluginsAdmin')
-rw-r--r-- | plugins/CorePluginsAdmin/API.php | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/plugins/CorePluginsAdmin/API.php b/plugins/CorePluginsAdmin/API.php index 5b4450b52e..32ba59a75e 100644 --- a/plugins/CorePluginsAdmin/API.php +++ b/plugins/CorePluginsAdmin/API.php @@ -13,6 +13,9 @@ use Piwik\Plugin\SettingsProvider; use Exception; use Piwik\Plugins\Login\PasswordVerifier; use Piwik\Version; +use Piwik\Container\StaticContainer; +use Piwik\Plugins\CoreAdminHome\Emails\SettingsChangedEmail; +use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail; /** * API for plugin CorePluginsAdmin @@ -61,15 +64,26 @@ class API extends \Piwik\Plugin\API $this->settingsMetadata->setPluginSettings($pluginsSettings, $settingValues); + $sendSettingsChangedNotificationEmailPlugins = []; + try { foreach ($pluginsSettings as $pluginSetting) { if (!empty($settingValues[$pluginSetting->getPluginName()])) { $pluginSetting->save(); + + $pluginName = $pluginSetting->getPluginName(); + if (in_array($pluginName, array_keys(SecurityNotificationEmail::$notifyPluginList))) { + $sendSettingsChangedNotificationEmailPlugins[] = $pluginName; + } } } } catch (Exception $e) { throw new Exception(Piwik::translate('CoreAdminHome_PluginSettingsSaveFailed')); } + + if (count($sendSettingsChangedNotificationEmailPlugins) > 0) { + $this->sendNotificationEmails($sendSettingsChangedNotificationEmailPlugins); + } } /** @@ -137,4 +151,40 @@ class API extends \Piwik\Plugin\API throw new Exception(Piwik::translate('UsersManager_CurrentPasswordNotCorrect')); } } + + private function sendNotificationEmails($sendSettingsChangedNotificationEmailPlugins) + { + $pluginNames = []; + foreach ($sendSettingsChangedNotificationEmailPlugins as $plugin) { + $pluginNames[] = Piwik::translate(SettingsChangedEmail::$notifyPluginList[$plugin]); + } + $pluginNames = implode(', ', $pluginNames); + + $container = StaticContainer::getContainer(); + + $email = $container->make(SettingsChangedEmail::class, array( + 'login' => Piwik::getCurrentUserLogin(), + 'emailAddress' => Piwik::getCurrentUserEmail(), + 'pluginNames' => $pluginNames + )); + $email->safeSend(); + + $superuserEmailAddresses = Piwik::getAllSuperUserAccessEmailAddresses(); + unset($superuserEmailAddresses[Piwik::getCurrentUserLogin()]); + $superUserEmail = false; + + foreach ($superuserEmailAddresses as $address) { + $superUserEmail = $superUserEmail ?: $container->make(SettingsChangedEmail::class, array( + 'login' => Piwik::translate('Installation_SuperUser'), + 'emailAddress' => $address, + 'pluginNames' => $pluginNames, + 'superuser' => Piwik::getCurrentUserLogin() + )); + $superUserEmail->addTo($address); + } + + if ($superUserEmail) { + $superUserEmail->safeSend(); + } + } } |