settingsProvider = $settingsProvider; $this->settingsMetadata = $settingsMetadata; } /** * @internal * @param array> $settingValues * @param string|false $passwordConfirmation */ public function setSystemSettings( $settingValues, #[\SensitiveParameter] $passwordConfirmation = false ): void { Piwik::checkUserHasSuperUserAccess(); $this->confirmCurrentUserPassword($passwordConfirmation); $pluginsSettings = $this->settingsProvider->getAllSystemSettings(); $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); } } /** * @internal * @param array> $settingValues */ public function setUserSettings($settingValues): void { Piwik::checkUserIsNotAnonymous(); $pluginsSettings = $this->settingsProvider->getAllUserSettings(); $this->settingsMetadata->setPluginSettings($pluginsSettings, $settingValues); try { foreach ($pluginsSettings as $pluginSetting) { if (!empty($settingValues[$pluginSetting->getPluginName()])) { $pluginSetting->save(); } } } catch (Exception $e) { throw new Exception(Piwik::translate('CoreAdminHome_PluginSettingsSaveFailed')); } } /** * @internal * @return array> */ public function getSystemSettings() { Piwik::checkUserHasSuperUserAccess(); $systemSettings = $this->settingsProvider->getAllSystemSettings(); return $this->settingsMetadata->formatSettings($systemSettings); } /** * @internal * @return array> */ public function getUserSettings() { Piwik::checkUserIsNotAnonymous(); $userSettings = $this->settingsProvider->getAllUserSettings(); return $this->settingsMetadata->formatSettings($userSettings); } /** * @internal */ public function getNumberOfPluginUpdates(): int { try { Piwik::checkUserHasSuperUserAccess(); if (!Marketplace::isMarketplaceEnabled()) { return 0; } $cacheKey = 'CorePluginsAdmin_NumberOfPluginUpdates'; $cache = Cache::getLazyCache(); if ($cache->contains($cacheKey)) { return $cache->fetch($cacheKey); } $marketplacePlugins = StaticContainer::get('Piwik\Plugins\Marketplace\Plugins'); $updatesCount = count($marketplacePlugins->getPluginsHavingUpdate()); $cache->save($cacheKey, $updatesCount, 300); return $updatesCount; } catch (Exception $e) { return 0; } } /** * @param string[] $sendSettingsChangedNotificationEmailPlugins */ private function sendNotificationEmails(array $sendSettingsChangedNotificationEmailPlugins): void { $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(); } } }