Sh3ll
OdayForums


Server : LiteSpeed
System : Linux premium84.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
User : claqxcrl ( 523)
PHP Version : 8.1.32
Disable Function : NONE
Directory :  /home/claqxcrl/anfangola.com/wp-content/plugins/matomo/app/plugins/CoreUpdater/Commands/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/claqxcrl/anfangola.com/wp-content/plugins/matomo/app/plugins/CoreUpdater/Commands/Update.php
<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link https://matomo.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 *
 */
namespace Piwik\Plugins\CoreUpdater\Commands;

use Piwik\Filechecks;
use Piwik\SettingsServer;
use Piwik\Version;
use Piwik\Config;
use Piwik\DbHelper;
use Piwik\Filesystem;
use Piwik\Piwik;
use Piwik\Plugin\ConsoleCommand;
use Piwik\Plugins\CoreUpdater\Commands\Update\CliUpdateObserver;
use Piwik\Plugins\CoreUpdater\NoUpdatesFoundException;
use Piwik\Updater;
/**
 * @package CoreUpdater
 */
class Update extends ConsoleCommand
{
    /**
     * @var string[]
     */
    private $migrationQueries;
    protected function configure()
    {
        $this->setName('core:update');
        $this->setDescription(Piwik::translate('CoreUpdater_ConsoleCommandDescription'));
        $this->addNoValueOption('yes', null, Piwik::translate('CoreUpdater_ConsoleParameterDescription'));
        $this->addNoValueOption('skip-cache-clear', null, Piwik::translate('CoreUpdater_SkipCacheClearDesc'));
    }
    /**
     * Execute command like: ./console core:update --yes
     */
    protected function doExecute() : int
    {
        $input = $this->getInput();
        $output = $this->getOutput();
        $skipCacheClear = $input->getOption('skip-cache-clear');
        try {
            if ($skipCacheClear) {
                $output->writeln(Piwik::translate('CoreUpdater_SkipCacheClear'));
                Filesystem::$skipCacheClearOnUpdate = true;
            }
            $this->executeClearCaches();
            $yes = $input->getOption('yes');
            try {
                $this->makeUpdate(true);
                if (!$yes) {
                    $yes = $this->askForConfirmation('<comment>' . Piwik::translate('CoreUpdater_ExecuteDbUpgrade') . ' (y/N) </comment>', false);
                }
                if ($yes) {
                    $output->writeln("\n" . Piwik::translate('CoreUpdater_ConsoleStartingDbUpgrade'));
                    $this->makeUpdate(false);
                    $this->writeSuccessMessage(array(Piwik::translate('CoreUpdater_PiwikHasBeenSuccessfullyUpgraded')));
                } else {
                    $this->writeSuccessMessage(array(Piwik::translate('CoreUpdater_DbUpgradeNotExecuted')));
                }
                $this->writeAlertMessageWhenCommandExecutedWithUnexpectedUser();
            } catch (NoUpdatesFoundException $e) {
                // Do not fail if no updates were found
                $this->writeSuccessMessage(array($e->getMessage()));
            }
        } finally {
            Filesystem::$skipCacheClearOnUpdate = false;
        }
        return self::SUCCESS;
    }
    protected function executeClearCaches()
    {
        Filesystem::deleteAllCacheOnUpdate();
    }
    protected function makeUpdate($doDryRun)
    {
        $output = $this->getOutput();
        $this->checkAllRequiredOptionsAreNotEmpty();
        $updater = $this->makeUpdaterInstance();
        $componentsWithUpdateFile = $updater->getComponentUpdates();
        if (empty($componentsWithUpdateFile)) {
            throw new NoUpdatesFoundException(Piwik::translate('CoreUpdater_AlreadyUpToDate'));
        }
        $output->writeln(array("", "    *** " . Piwik::translate('CoreUpdater_UpdateTitle') . " ***"));
        // handle case of existing database with no tables
        if (!DbHelper::isInstalled()) {
            $this->handleCoreError(Piwik::translate('CoreUpdater_EmptyDatabaseError', Config::getInstance()->database['dbname']));
            return;
        }
        $output->writeln(array("", "    " . Piwik::translate('CoreUpdater_DatabaseUpgradeRequired'), "", "    " . Piwik::translate('CoreUpdater_YourDatabaseIsOutOfDate')));
        if ($this->isUpdatingCore($componentsWithUpdateFile)) {
            $currentVersion = $this->getCurrentVersionForCore($updater);
            $output->writeln(array("", "    " . Piwik::translate('CoreUpdater_PiwikWillBeUpgradedFromVersionXToVersionY', array($currentVersion, Version::VERSION))));
        }
        $pluginsToUpdate = $this->getPluginsToUpdate($componentsWithUpdateFile);
        if (!empty($pluginsToUpdate)) {
            $output->writeln(array("", "    " . Piwik::translate('CoreUpdater_TheFollowingPluginsWillBeUpgradedX', implode(', ', $pluginsToUpdate))));
        }
        $dimensionsToUpdate = $this->getDimensionsToUpdate($componentsWithUpdateFile);
        if (!empty($dimensionsToUpdate)) {
            $output->writeln(array("", "    " . Piwik::translate('CoreUpdater_TheFollowingDimensionsWillBeUpgradedX', implode(', ', $dimensionsToUpdate))));
        }
        $output->writeln("");
        if ($doDryRun) {
            $this->doDryRun($updater);
        } else {
            $this->doRealUpdate($updater, $componentsWithUpdateFile);
        }
    }
    private function doDryRun(Updater $updater)
    {
        $output = $this->getOutput();
        $migrationQueries = $this->getMigrationQueriesToExecute($updater);
        if (empty($migrationQueries)) {
            $output->writeln(array("    *** " . Piwik::translate('CoreUpdater_ConsoleUpdateNoSqlQueries') . " ***", ""));
            return;
        }
        if ($updater->hasMajorDbUpdate()) {
            $output->writeln(array("", sprintf("<comment>%s \n</comment>", Piwik::translate('CoreUpdater_MajorUpdateWarning1'))));
        }
        $output->writeln(array("    *** " . Piwik::translate('CoreUpdater_DryRun') . " ***", ""));
        foreach ($migrationQueries as $query) {
            $result = $query->__toString();
            if (!empty($result)) {
                $output->writeln("    " . $result);
            }
        }
        $output->writeln(array("", "    *** " . Piwik::translate('CoreUpdater_DryRunEnd') . " ***", ""));
    }
    private function doRealUpdate(Updater $updater, $componentsWithUpdateFile)
    {
        $output = $this->getOutput();
        $output->writeln(array("    " . Piwik::translate('CoreUpdater_TheUpgradeProcessMayTakeAWhilePleaseBePatient'), ""));
        $updaterResult = $updater->updateComponents($componentsWithUpdateFile);
        if (@$updaterResult['coreError']) {
            $this->handleCoreError($updaterResult['errors'], $includeDiyHelp = true);
            return;
        }
        if (!empty($updaterResult['warnings'])) {
            $this->outputUpdaterWarnings($updaterResult['warnings']);
        }
        if (!empty($updaterResult['errors'])) {
            $this->outputUpdaterErrors($updaterResult['errors'], $updaterResult['deactivatedPlugins']);
        }
        if (!empty($updaterResult['warnings']) || !empty($updaterResult['errors'])) {
            $output->writeln(array("    " . Piwik::translate('CoreUpdater_HelpMessageIntroductionWhenWarning'), "", "    * " . $this->getUpdateHelpMessage()));
        }
    }
    private function handleCoreError($errors, $includeDiyHelp = false)
    {
        if (!is_array($errors)) {
            $errors = array($errors);
        }
        $output = $this->getOutput();
        $output->writeln(array("", "    [X] " . Piwik::translate('CoreUpdater_CriticalErrorDuringTheUpgradeProcess'), ""));
        foreach ($errors as $errorMessage) {
            $errorMessage = trim($errorMessage);
            $errorMessage = str_replace("\n", "\n    ", $errorMessage);
            $output->writeln("    * {$errorMessage}");
        }
        $output->writeln(array("", "    " . Piwik::translate('CoreUpdater_HelpMessageIntroductionWhenError'), "", "    * " . $this->getUpdateHelpMessage()));
        if ($includeDiyHelp) {
            $output->writeln(array("", "    " . Piwik::translate('CoreUpdater_ErrorDIYHelp'), "", "    * " . Piwik::translate('CoreUpdater_ErrorDIYHelp_1'), "    * " . Piwik::translate('CoreUpdater_ErrorDIYHelp_2'), "    * " . Piwik::translate('CoreUpdater_ErrorDIYHelp_3'), "    * " . Piwik::translate('CoreUpdater_ErrorDIYHelp_4'), "    * " . Piwik::translate('CoreUpdater_ErrorDIYHelp_5')));
        }
        throw new \RuntimeException(Piwik::translate('CoreUpdater_ConsoleUpdateFailure'));
    }
    private function outputUpdaterWarnings($warnings)
    {
        $output = $this->getOutput();
        $output->writeln(array("", "    [!] " . Piwik::translate('CoreUpdater_WarningMessages'), ""));
        foreach ($warnings as $message) {
            $output->writeln("    * {$message}");
        }
    }
    private function outputUpdaterErrors($errors, $deactivatedPlugins)
    {
        $output = $this->getOutput();
        $output->writeln(array("", "    [X] " . Piwik::translate('CoreUpdater_ErrorDuringPluginsUpdates'), ""));
        foreach ($errors as $message) {
            $output->writeln("    * {$message}");
        }
        if (!empty($deactivatedPlugins)) {
            $output->writeln(array("", "    [!] " . Piwik::translate('CoreUpdater_WeAutomaticallyDeactivatedTheFollowingPlugins', implode(', ', $deactivatedPlugins))));
        }
    }
    private function getUpdateHelpMessage()
    {
        return Piwik::translate('CoreUpdater_HelpMessageContent', array('[', ']', "\n    *"));
    }
    private function isUpdatingCore($componentsWithUpdateFile)
    {
        foreach ($componentsWithUpdateFile as $componentName => $updates) {
            if ($componentName == 'core') {
                return true;
            }
        }
        return false;
    }
    private function getCurrentVersionForCore(Updater $updater)
    {
        $currentVersion = $updater->getCurrentComponentVersion('core');
        if ($currentVersion === false) {
            $currentVersion = "<= 0.2.9";
        }
        return $currentVersion;
    }
    private function getPluginsToUpdate($componentsWithUpdateFile)
    {
        $plugins = array();
        foreach ($componentsWithUpdateFile as $componentName => $updates) {
            if ($componentName !== 'core' && 0 !== strpos($componentName, 'log_')) {
                $plugins[] = $componentName;
            }
        }
        return $plugins;
    }
    private function getDimensionsToUpdate($componentsWithUpdateFile)
    {
        $dimensions = array();
        foreach ($componentsWithUpdateFile as $componentName => $updates) {
            if (0 === strpos($componentName, 'log_')) {
                $dimensions[] = $componentName;
            }
        }
        sort($dimensions);
        return $dimensions;
    }
    private function getMigrationQueriesToExecute(Updater $updater)
    {
        if (empty($this->migrationQueries)) {
            $this->migrationQueries = $updater->getSqlQueriesToExecute();
        }
        return $this->migrationQueries;
    }
    private function makeUpdaterInstance()
    {
        $updater = new Updater();
        $migrationQueryCount = count($this->getMigrationQueriesToExecute($updater));
        $updater->addUpdateObserver(new CliUpdateObserver($this->getOutput(), $migrationQueryCount));
        return $updater;
    }
    /**
     */
    protected function writeAlertMessageWhenCommandExecutedWithUnexpectedUser()
    {
        if (SettingsServer::isWindows()) {
            // does not work on windows
            return;
        }
        $processUserAndGroup = Filechecks::getUserAndGroup();
        $fileOwnerUserAndGroup = Filechecks::getOwnerOfPiwikFiles();
        if (!$fileOwnerUserAndGroup || $processUserAndGroup == $fileOwnerUserAndGroup) {
            // current process user/group appear to be same as the Matomo filesystem user/group -> OK
            return;
        }
        $this->getOutput()->writeln(sprintf("<comment>%s</comment>", Piwik::translate('CoreUpdater_ConsoleUpdateUnexpectedUserWarning', [$processUserAndGroup, $fileOwnerUserAndGroup, Filechecks::getCommandToChangeOwnerOfPiwikFiles()])));
    }
}

ZeroDay Forums Mini