forked from vergnet/site-accueil-insa
134 lines
5.2 KiB
PHP
134 lines
5.2 KiB
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;
|
||
|
||
use Piwik\Db\Settings;
|
||
use Piwik\DbHelper;
|
||
use Piwik\Piwik;
|
||
use Piwik\Plugin\ReleaseChannels;
|
||
use Piwik\Plugins\CoreAdminHome\Controller as CoreAdminController;
|
||
use Piwik\Plugins\Marketplace\UpdateCommunication as PluginUpdateCommunication;
|
||
use Piwik\Settings\Setting;
|
||
use Piwik\Settings\FieldConfig;
|
||
use Piwik\SettingsPiwik;
|
||
|
||
/**
|
||
* Defines Settings for CoreUpdater.
|
||
*
|
||
* Usage like this:
|
||
* $settings = new SystemSettings();
|
||
* $settings->metric->getValue();
|
||
* $settings->description->getValue();
|
||
*/
|
||
class SystemSettings extends \Piwik\Settings\Plugin\SystemSettings
|
||
{
|
||
/** @var Setting */
|
||
public $releaseChannel;
|
||
|
||
/** @var Setting */
|
||
public $sendPluginUpdateEmail;
|
||
|
||
/** @var Setting */
|
||
public $updateToUtf8mb4;
|
||
|
||
/**
|
||
* @var ReleaseChannels
|
||
*/
|
||
private $releaseChannels;
|
||
|
||
public function __construct(ReleaseChannels $releaseChannels)
|
||
{
|
||
$this->releaseChannels = $releaseChannels;
|
||
|
||
parent::__construct();
|
||
}
|
||
|
||
protected function init()
|
||
{
|
||
$this->title = Piwik::translate('CoreAdminHome_UpdateSettings');
|
||
|
||
$isWritable = Piwik::hasUserSuperUserAccess() && CoreAdminController::isGeneralSettingsAdminEnabled();
|
||
$this->releaseChannel = $this->createReleaseChannel();
|
||
$this->releaseChannel->setIsWritableByCurrentUser($isWritable
|
||
&& SettingsPiwik::isMultiServerEnvironment() === false);
|
||
|
||
$this->sendPluginUpdateEmail = $this->createSendPluginUpdateEmail();
|
||
$this->sendPluginUpdateEmail->setIsWritableByCurrentUser($isWritable
|
||
&& PluginUpdateCommunication::canBeEnabled());
|
||
|
||
$dbSettings = new Settings();
|
||
if ($isWritable && $dbSettings->getUsedCharset() !== 'utf8mb4' && DbHelper::getDefaultCharset() === 'utf8mb4') {
|
||
$this->updateToUtf8mb4 = $this->createUpdateToUtf8mb4();
|
||
}
|
||
}
|
||
|
||
private function createReleaseChannel()
|
||
{
|
||
$releaseChannels = $this->releaseChannels;
|
||
$default = 'latest_stable';
|
||
|
||
return $this->makeSettingManagedInConfigOnly('General', 'release_channel', $default, FieldConfig::TYPE_STRING, function (FieldConfig $field) use ($releaseChannels) {
|
||
|
||
$field->introduction = Piwik::translate('CoreAdminHome_ReleaseChannel');
|
||
$field->uiControl = FieldConfig::UI_CONTROL_RADIO;
|
||
|
||
$field->availableValues = array();
|
||
foreach ($releaseChannels->getAllReleaseChannels() as $channel) {
|
||
$name = $channel->getName();
|
||
$description = $channel->getDescription();
|
||
if (!empty($description)) {
|
||
$name .= ' (' . $description . ')';
|
||
}
|
||
|
||
$field->availableValues[$channel->getId()] = $name;
|
||
}
|
||
|
||
$field->validate = function ($channel) use ($releaseChannels) {
|
||
if (!$releaseChannels->isValidReleaseChannelId($channel)) {
|
||
throw new \Exception('Release channel is not valid');
|
||
}
|
||
};
|
||
|
||
$field->inlineHelp = Piwik::translate('CoreAdminHome_DevelopmentProcess')
|
||
. '<br/>'
|
||
. Piwik::translate('CoreAdminHome_StableReleases',
|
||
array("<a target='_blank' rel='noreferrer noopener' href='https://developer.matomo.org/guides/core-team-workflow#influencing-piwik-development'>",
|
||
"</a>"))
|
||
. '<br/>'
|
||
. Piwik::translate('CoreAdminHome_LtsReleases');
|
||
});
|
||
}
|
||
|
||
private function createSendPluginUpdateEmail()
|
||
{
|
||
return $this->makeSetting('enable_plugin_update_communication', $default = true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) {
|
||
$field->introduction = Piwik::translate('CoreAdminHome_SendPluginUpdateCommunication');
|
||
$field->uiControl = FieldConfig::UI_CONTROL_RADIO;
|
||
$field->availableValues = array('1' => sprintf('%s (%s)', Piwik::translate('General_Yes'), Piwik::translate('General_Default')),
|
||
'0' => Piwik::translate('General_No'));
|
||
$field->inlineHelp = Piwik::translate('CoreAdminHome_SendPluginUpdateCommunicationHelp');
|
||
});
|
||
}
|
||
|
||
private function createUpdateToUtf8mb4()
|
||
{
|
||
return $this->makeSetting('update_to_utf8mb4', $default = false, FieldConfig::TYPE_BOOL, function (FieldConfig $field) {
|
||
$field->introduction = Piwik::translate('CoreUpdater_ConvertToUtf8mb4');
|
||
$field->title = Piwik::translate('CoreUpdater_TriggerDatabaseConversion');
|
||
$field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX;
|
||
$field->inlineHelp = Piwik::translate('CoreUpdater_Utf8mb4ConversionHelp', [
|
||
'<27>',
|
||
'<code>' . PIWIK_INCLUDE_PATH . '/console core:convert-to-utf8mb4</code>',
|
||
'<a href="https://matomo.org/faq/how-to-update/how-to-convert-the-database-to-utf8mb4-charset/" rel="noreferrer noopener" target="_blank">',
|
||
'</a>'
|
||
]);
|
||
});
|
||
}
|
||
|
||
}
|