Newer
Older
<?php
/**
* Piwik - Open source web analytics
* @link http://piwik.org
mattab
a validé
* @package CoreAdminHome
*/
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;
use Piwik\Settings\Manager as SettingsManager;
use Piwik\Plugin\Manager;
use Piwik\Plugins\LanguagesManager\API as APILanguagesManager;
use Piwik\Plugins\LanguagesManager\LanguagesManager;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Site;
use Piwik\Tracker\IgnoreCookie;
use Piwik\Url;
/**
mattab
a validé
* @package CoreAdminHome
*/
class Controller extends \Piwik\Plugin\ControllerAdmin
{
const LOGO_HEIGHT = 300;
const LOGO_SMALL_HEIGHT = 100;
public function index()
{
$this->redirectToIndex('UsersManager', 'userSettings');
return;
}
public function generalSettings()
{
Piwik::checkUserHasSomeAdminAccess();
$view = new View('@CoreAdminHome/generalSettings');
if (Piwik::isUserIsSuperUser()) {
$enableBrowserTriggerArchiving = Rules::isBrowserTriggerEnabled();
$todayArchiveTimeToLive = Rules::getTodayArchiveTimeToLive();
$showWarningCron = false;
if (!$enableBrowserTriggerArchiving
&& $todayArchiveTimeToLive < 3600
) {
$showWarningCron = true;
}
$view->showWarningCron = $showWarningCron;
$view->todayArchiveTimeToLive = $todayArchiveTimeToLive;
$view->enableBrowserTriggerArchiving = $enableBrowserTriggerArchiving;
$this->displayWarningIfConfigFileNotWritable($view);
$config = Config::getInstance();
$debug = $config->Debug;
$view->enableBetaReleaseCheck = $debug['allow_upgrades_to_beta'];
$view->mail = $config->mail;
$view->branding = $config->branding;
$directoryWritable = is_writable(PIWIK_DOCUMENT_ROOT . '/misc/user/');
$logoFilesWriteable = is_writeable(PIWIK_DOCUMENT_ROOT . '/misc/user/logo.png')
&& is_writeable(PIWIK_DOCUMENT_ROOT . '/misc/user/logo.svg')
&& is_writeable(PIWIK_DOCUMENT_ROOT . '/misc/user/logo-header.png');;
$view->logosWriteable = ($logoFilesWriteable || $directoryWritable) && ini_get('file_uploads') == 1;
$trustedHosts = array();
if (isset($config->General['trusted_hosts'])) {
$trustedHosts = $config->General['trusted_hosts'];
}
$view->trustedHosts = $trustedHosts;
}
mattab
a validé
$view->language = LanguagesManager::getLanguageCodeForCurrentUser();
$this->setBasicVariablesView($view);
echo $view->render();
}
public function pluginSettings()
{
Piwik::checkUserIsNotAnonymous();
$view = new View('@CoreAdminHome/pluginSettings');
$view->pluginSettings = SettingsManager::getAllPluginSettings();
$this->setBasicVariablesView($view);
echo $view->render();
}
public function setPluginSettings()
{
Piwik::checkUserIsNotAnonymous();
Json::sendHeaderJSON();
$changedPluginSettings = Common::getRequestVar('settings', null, 'array');
$pluginSettings = SettingsManager::getAllPluginSettings();
try {
foreach ($changedPluginSettings as $pluginName => $changedPluginSetting) {
if (!array_key_exists($pluginName, $pluginSettings)) {
// this plugin is not using settings, skip it
continue;
}
$pluginSetting = $pluginSettings[$pluginName];
foreach ($changedPluginSetting as $changedSetting) {
$pluginSetting->setSettingValue($changedSetting['name'], $changedSetting['value']);
}
}
foreach ($pluginSettings as $pluginSetting) {
$pluginSetting->save();
}
} catch (Exception $e) {
echo json_encode(array('result' => 'error', 'message' => $e->getMessage()));
return;
}
echo json_encode(array('result' => 'success'));
}
public function setGeneralSettings()
{
Piwik::checkUserIsSuperUser();
$response = new ResponseBuilder(Common::getRequestVar('format'));
try {
$this->checkTokenInUrl();
$enableBrowserTriggerArchiving = Common::getRequestVar('enableBrowserTriggerArchiving');
$todayArchiveTimeToLive = Common::getRequestVar('todayArchiveTimeToLive');
Rules::setBrowserTriggerArchiving((bool)$enableBrowserTriggerArchiving);
Rules::setTodayArchiveTimeToLive($todayArchiveTimeToLive);
// 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 = Config::getInstance();
$config->mail = $mail;
// update branding settings
$branding = $config->branding;
$branding['use_custom_logo'] = Common::getRequestVar('useCustomLogo', '0');
$config->branding = $branding;
// update beta channel setting
$debug = $config->Debug;
$debug['allow_upgrades_to_beta'] = Common::getRequestVar('enableBetaReleaseCheck', '0', 'int');
$config->Debug = $debug;
// update trusted host settings
$trustedHosts = Common::getRequestVar('trustedHosts', false, 'json');
if ($trustedHosts !== false) {
Url::saveTrustedHostnameInConfig($trustedHosts);
}
$config->forceSave();
$toReturn = $response->getResponse();
} catch (Exception $e) {
$toReturn = $response->getResponseException($e);
}
echo $toReturn;
}
/**
* 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();
$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);
$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();
mattab
a validé
$view->serverSideDoNotTrackEnabled = \Piwik\Plugins\PrivacyManager\Controller::isDntSupported();
echo $view->render();
}
/**
* 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;
}
$view = new View('@CoreAdminHome/optOut');
$view->trackVisits = $trackVisits;
$view->nonce = Nonce::getNonce('Piwik_OptOut', 3600);
$view->language = APILanguagesManager::getInstance()->isLanguageAvailable($language)
? $language
mattab
a validé
: LanguagesManager::getLanguageCodeForCurrentUser();
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
echo $view->render();
}
public function uploadCustomLogo()
{
Piwik::checkUserIsSuperUser();
if (empty($_FILES['customLogo'])
|| !empty($_FILES['customLogo']['error'])
) {
echo '0';
return;
}
$file = $_FILES['customLogo']['tmp_name'];
if (!file_exists($file)) {
echo '0';
return;
}
list($width, $height) = getimagesize($file);
switch ($_FILES['customLogo']['type']) {
case 'image/jpeg':
$image = imagecreatefromjpeg($file);
break;
case 'image/png':
$image = imagecreatefrompng($file);
break;
case 'image/gif':
$image = imagecreatefromgif($file);
break;
default:
echo '0';
return;
}
$widthExpected = round($width * self::LOGO_HEIGHT / $height);
$smallWidthExpected = round($width * self::LOGO_SMALL_HEIGHT / $height);
$logo = imagecreatetruecolor($widthExpected, self::LOGO_HEIGHT);
$logoSmall = imagecreatetruecolor($smallWidthExpected, self::LOGO_SMALL_HEIGHT);
imagecopyresized($logo, $image, 0, 0, 0, 0, $widthExpected, self::LOGO_HEIGHT, $width, $height);
imagecopyresized($logoSmall, $image, 0, 0, 0, 0, $smallWidthExpected, self::LOGO_SMALL_HEIGHT, $width, $height);
imagepng($logo, PIWIK_DOCUMENT_ROOT . '/misc/user/logo.png', 3);
imagepng($logoSmall, PIWIK_DOCUMENT_ROOT . '/misc/user/logo-header.png', 3);
echo '1';
return;
}