Newer
Older
<?php
/**
* Piwik - free/libre analytics platform
* @link http://piwik.org
*/
mattab
a validé
namespace Piwik\Plugins\CoreAdminHome;
use Exception;
use Piwik\API\ResponseBuilder;
use Piwik\ArchiveProcessor\Rules;
use Piwik\DataTable\Renderer\Json;
use Piwik\Nonce;
Thomas Steur
a validé
use Piwik\Plugins\CorePluginsAdmin\UpdateCommunication;
use Piwik\Plugins\LanguagesManager\API as APILanguagesManager;
use Piwik\Plugins\LanguagesManager\LanguagesManager;
use Piwik\Plugins\PrivacyManager\DoNotTrackHeaderChecker;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Site;
use Piwik\Tracker\IgnoreCookie;
use Piwik\Url;
use Piwik\View;
/**
*/
class Controller extends \Piwik\Plugin\ControllerAdmin
{
const SET_PLUGIN_SETTINGS_NONCE = 'CoreAdminHome.setPluginSettings';
public function index()
{
$this->redirectToIndex('UsersManager', 'userSettings');
return;
}
public function generalSettings()
{
Piwik::checkUserHasSomeAdminAccess();
$view = new View('@CoreAdminHome/generalSettings');
Thomas Steur
a validé
if (Piwik::hasUserSuperUserAccess()) {
$this->handleGeneralSettingsAdmin($view);
$logo = new CustomLogo();
$view->branding = array('use_custom_logo' => $logo->isEnabled());
$view->fileUploadEnabled = $logo->isFileUploadEnabled();
$view->logosWriteable = $logo->isCustomLogoWritable();
$view->pathUserLogo = CustomLogo::getPathUserLogo();
$view->pathUserFavicon = CustomLogo::getPathUserFavicon();
$view->pathUserLogoSmall = CustomLogo::getPathUserLogoSmall();
$view->pathUserLogoSVG = CustomLogo::getPathUserSvgLogo();
$view->pathUserLogoDirectory = realpath(dirname($view->pathUserLogo) . '/');
mattab
a validé
$view->language = LanguagesManager::getLanguageCodeForCurrentUser();
$this->setBasicVariablesView($view);
public function pluginSettings()
{
Piwik::checkUserIsNotAnonymous();
$settings = $this->getPluginSettings();
Thomas Steur
a validé
$vars = array(
'nonce' => Nonce::getNonce(static::SET_PLUGIN_SETTINGS_NONCE),
'pluginSettings' => $settings,
'firstSuperUserSettingNames' => $this->getFirstSuperUserSettingNames($settings)
);
return $this->renderTemplate('pluginSettings', $vars);
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
private function getPluginSettings()
{
$pluginsSettings = SettingsManager::getPluginSettingsForCurrentUser();
ksort($pluginsSettings);
return $pluginsSettings;
}
/**
* @param \Piwik\Plugin\Settings[] $pluginsSettings
* @return array array([pluginName] => [])
*/
private function getFirstSuperUserSettingNames($pluginsSettings)
{
$names = array();
foreach ($pluginsSettings as $pluginName => $pluginSettings) {
foreach ($pluginSettings->getSettingsForCurrentUser() as $setting) {
if ($setting instanceof \Piwik\Settings\SystemSetting) {
$names[$pluginName] = $setting->getName();
break;
}
}
}
return $names;
}
public function setPluginSettings()
{
Piwik::checkUserIsNotAnonymous();
Json::sendHeaderJSON();
$nonce = Common::getRequestVar('nonce', null, 'string');
if (!Nonce::verifyNonce(static::SET_PLUGIN_SETTINGS_NONCE, $nonce)) {
'result' => 'error',
'message' => Piwik::translate('General_ExceptionNonceMismatch')
));
}
$pluginsSettings = SettingsManager::getPluginSettingsForCurrentUser();
foreach ($pluginsSettings as $pluginName => $pluginSetting) {
foreach ($pluginSetting->getSettingsForCurrentUser() as $setting) {
$value = $this->findSettingValueFromRequest($pluginName, $setting->getKey());
if (!is_null($value)) {
}
foreach ($pluginsSettings as $pluginSetting) {
$pluginSetting->save();
}
} catch (Exception $e) {
$message = html_entity_decode($e->getMessage(), ENT_QUOTES, 'UTF-8');
return json_encode(array('result' => 'error', 'message' => $message));
Nonce::discardNonce(static::SET_PLUGIN_SETTINGS_NONCE);
return json_encode(array('result' => 'success'));
private function findSettingValueFromRequest($pluginName, $settingKey)
{
$changedPluginSettings = Common::getRequestVar('settings', null, 'array');
if (!array_key_exists($pluginName, $changedPluginSettings)) {
return;
}
$settings = $changedPluginSettings[$pluginName];
foreach ($settings as $setting) {
if ($setting['name'] == $settingKey) {
$value = $setting['value'];
if (is_string($value)) {
return Common::unsanitizeInputValue($value);
}
return $value;
}
}
}
public function setGeneralSettings()
{
Thomas Steur
a validé
Piwik::checkUserHasSuperUserAccess();
$response = new ResponseBuilder(Common::getRequestVar('format'));
try {
$this->checkTokenInUrl();
$this->saveGeneralSettings();
$customLogo = new CustomLogo();
if (Common::getRequestVar('useCustomLogo', '0')) {
$customLogo->enable();
} else {
$customLogo->disable();
}
$toReturn = $response->getResponse();
} catch (Exception $e) {
$toReturn = $response->getResponseException($e);
}
}
/**
* Renders and echo's an admin page that lets users generate custom JavaScript
* tracking code and custom image tracker links.
*/
public function trackingCodeGenerator()
{
$view = new View('@CoreAdminHome/trackingCodeGenerator');
$this->setBasicVariablesView($view);
$view->topMenu = MenuTop::getInstance()->getMenu();
$view->userMenu = MenuUser::getInstance()->getMenu();
$viewableIdSites = APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess();
$defaultIdSite = reset($viewableIdSites);
$view->idSite = Common::getRequestVar('idSite', $defaultIdSite, 'int');
$view->defaultReportSiteName = Site::getNameFor($view->idSite);
$view->defaultSiteRevenue = \Piwik\MetricsFormatter::getCurrencySymbol($view->idSite);
$view->maxCustomVariables = CustomVariables::getMaxCustomVariables();
$allUrls = APISitesManager::getInstance()->getSiteUrlsFromId($view->idSite);
if (isset($allUrls[1])) {
$aliasUrl = $allUrls[1];
} else {
$aliasUrl = 'x.domain.com';
}
$view->defaultReportSiteAlias = $aliasUrl;
$mainUrl = Site::getMainUrlFor($view->idSite);
$view->defaultReportSiteDomain = @parse_url($mainUrl, PHP_URL_HOST);
// get currencies for each viewable site
$view->currencySymbols = APISitesManager::getInstance()->getCurrencySymbols();
$dntChecker = new DoNotTrackHeaderChecker();
$view->serverSideDoNotTrackEnabled = $dntChecker->isActive();
}
/**
* Shows the "Track Visits" checkbox.
*/
public function optOut()
{
$trackVisits = !IgnoreCookie::isIgnoreCookieFound();
$nonce = Common::getRequestVar('nonce', false);
$language = Common::getRequestVar('language', '');
if ($nonce !== false && Nonce::verifyNonce('Piwik_OptOut', $nonce)) {
Nonce::discardNonce('Piwik_OptOut');
IgnoreCookie::setIgnoreCookie();
$trackVisits = !$trackVisits;
}
$lang = APILanguagesManager::getInstance()->isLanguageAvailable($language)
? $language
mattab
a validé
: LanguagesManager::getLanguageCodeForCurrentUser();
diosmosis
a validé
// should not use self::renderTemplate since that uses setBasicVariablesView. this will cause
// an error when setBasicVariablesAdminView is called, and MenuTop is requested (the idSite query
// parameter is required)
$view = new View("@CoreAdminHome/optOut");
$view->setXFrameOptions('allow');
diosmosis
a validé
$view->trackVisits = $trackVisits;
$view->nonce = Nonce::getNonce('Piwik_OptOut', 3600);
$view->language = $lang;
return $view->render();
}
public function uploadCustomLogo()
{
Thomas Steur
a validé
Piwik::checkUserHasSuperUserAccess();
$logo = new CustomLogo();
$successLogo = $logo->copyUploadedLogoToFilesystem();
$successFavicon = $logo->copyUploadedFaviconToFilesystem();
Thomas Steur
a validé
if ($successLogo || $successFavicon) {
public static function isGeneralSettingsAdminEnabled()
{
return (bool) Config::getInstance()->General['enable_general_settings_admin'];
}
private function saveGeneralSettings()
{
Thomas Steur
a validé
if (!self::isGeneralSettingsAdminEnabled()) {
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
// General settings + Beta channel + SMTP settings is disabled
return;
}
// General Setting
$enableBrowserTriggerArchiving = Common::getRequestVar('enableBrowserTriggerArchiving');
$todayArchiveTimeToLive = Common::getRequestVar('todayArchiveTimeToLive');
Rules::setBrowserTriggerArchiving((bool)$enableBrowserTriggerArchiving);
Rules::setTodayArchiveTimeToLive($todayArchiveTimeToLive);
// update beta channel setting
$debug = Config::getInstance()->Debug;
$debug['allow_upgrades_to_beta'] = Common::getRequestVar('enableBetaReleaseCheck', '0', 'int');
Config::getInstance()->Debug = $debug;
// Update email settings
$mail = array();
$mail['transport'] = (Common::getRequestVar('mailUseSmtp') == '1') ? 'smtp' : '';
$mail['port'] = Common::getRequestVar('mailPort', '');
$mail['host'] = Common::unsanitizeInputValue(Common::getRequestVar('mailHost', ''));
$mail['type'] = Common::getRequestVar('mailType', '');
$mail['username'] = Common::unsanitizeInputValue(Common::getRequestVar('mailUsername', ''));
$mail['password'] = Common::unsanitizeInputValue(Common::getRequestVar('mailPassword', ''));
$mail['encryption'] = Common::getRequestVar('mailEncryption', '');
Config::getInstance()->mail = $mail;
// update trusted host settings
$trustedHosts = Common::getRequestVar('trustedHosts', false, 'json');
if ($trustedHosts !== false) {
Url::saveTrustedHostnameInConfig($trustedHosts);
}
Marcin Czołnowski
a validé
Thomas Steur
a validé
$pluginUpdateCommunication = new UpdateCommunication();
if (Common::getRequestVar('enablePluginUpdateCommunication', '0', 'int')) {
$pluginUpdateCommunication->enable();
} else {
$pluginUpdateCommunication->disable();
}
}
private function handleGeneralSettingsAdmin($view)
{
// Whether to display or not the general settings (cron, beta, smtp)
$view->isGeneralSettingsAdminEnabled = self::isGeneralSettingsAdminEnabled();
Thomas Steur
a validé
if ($view->isGeneralSettingsAdminEnabled) {
$this->displayWarningIfConfigFileNotWritable();
}
$enableBrowserTriggerArchiving = Rules::isBrowserTriggerEnabled();
$todayArchiveTimeToLive = Rules::getTodayArchiveTimeToLive();
$showWarningCron = false;
if (!$enableBrowserTriggerArchiving
&& $todayArchiveTimeToLive < 3600
) {
$showWarningCron = true;
}
$view->showWarningCron = $showWarningCron;
$view->todayArchiveTimeToLive = $todayArchiveTimeToLive;
$view->todayArchiveTimeToLiveDefault = Rules::getTodayArchiveTimeToLiveDefault();
$view->enableBrowserTriggerArchiving = $enableBrowserTriggerArchiving;
$view->enableBetaReleaseCheck = Config::getInstance()->Debug['allow_upgrades_to_beta'];
$view->mail = Config::getInstance()->mail;
Thomas Steur
a validé
$pluginUpdateCommunication = new UpdateCommunication();
$view->canUpdateCommunication = $pluginUpdateCommunication->canBeEnabled();
$view->enableSendPluginUpdateCommunication = $pluginUpdateCommunication->isEnabled();
}