Skip to content
Extraits de code Groupes Projets
Controller.php 10,4 ko
Newer Older
  • Learn to ignore specific revisions
  • <?php
    /**
     * Piwik - Open source web analytics
    
    robocoder's avatar
    robocoder a validé
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
    
    robocoder's avatar
    robocoder a validé
     * @category Piwik_Plugins
    
    namespace Piwik\Plugins\CoreAdminHome;
    
    use Exception;
    
    use Piwik\API\Request;
    
    mattab's avatar
    mattab a validé
    use Piwik\Common;
    
    use Piwik\DataTable\Renderer\Json;
    
    use Piwik\Menu\MenuTop;
    
    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;
    
    use Piwik\UrlHelper;
    
    robocoder's avatar
    robocoder a validé
     *
    
    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');
    
                $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;
            }
    
    
            $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'));
    
                $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');
    
                    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();
    
            $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();
    
            $view = new View('@CoreAdminHome/optOut');
    
            $view->trackVisits = $trackVisits;
    
            $view->nonce = Nonce::getNonce('Piwik_OptOut', 3600);
    
            $view->language = APILanguagesManager::getInstance()->isLanguageAvailable($language)
    
                : LanguagesManager::getLanguageCodeForCurrentUser();
    
            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);