Files
2024-07-15 11:28:08 +02:00

296 lines
6.8 KiB
PHP

<?php
/**
* @package akeebabackupwp
* @copyright Copyright (c)2014-2019 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU GPL version 3 or later
*/
namespace Akeeba\WPCLI\Command;
use Akeeba\Engine\Factory;
use Akeeba\Engine\Platform;
use Akeeba\Engine\Util\ParseIni;
use Awf\Mvc\Model;
use Exception;
use Solo\Application;
use WP_CLI;
use WP_CLI\Utils as CliUtils;
/**
* View or change the plugin-wide configuration options for Akeeba Backup.
*
* @package Akeeba\WPCLI\Command
*
* @since 3.0.0
*/
class Sysconfig
{
private $defaultOptions = [
'darkmode' => 0,
'useencryption' => 1,
'timezone' => '',
'localtime' => 1,
'timezonetext' => 'T',
'forced_backup_timezone' => 'AKEEBA/DEFAULT',
'dateformat' => '',
'stats_enabled' => 1,
'fs.driver' => 'file',
'fs.host' => '',
'fs.port' => '',
'fs.username' => '',
'fs.password' => '',
'fs.directory' => '',
'options.failure_timeout' => 180,
'options.failure_email_address' => '',
'options.failure_email_subject' => '',
'options.failure_email_body' => '',
'mail.online' => 1,
'mail.mailer' => 'mail',
'mail.mailfrom' => '',
'mail.fromname' => '',
'mail.smtpauth' => 1,
'mail.smtpsecure' => 0,
'mail.smtpport' => 25,
'mail.smtpuser' => '',
'mail.smtppass' => '',
'mail.smtphost' => 'localhost',
'options.frontend_enable' => 1,
'options.frontend_secret_word' => '', // THIS IS ALWAYS STORED ENCRYPTED
'options.frontend_email_on_finish' => 1,
'options.frontend_email_address' => '',
'options.frontend_email_subject' => '',
'options.frontend_email_body' => '',
'options.desktop_notifications' => 0,
'options.push_preference' => 0,
'options.push_apikey' => '',
];
/**
* Lists the system (global) configuration options for Akeeba Backup
*
* ## OPTIONS
*
* [--format=<format>]
* : The format for the returned list
* ---
* default: table
* options:
* - table
* - json
* - csv
* - yaml
* - count
* ---
*
* ## EXAMPLES
*
* wp akeeba sysconfig list
*
* wp akeeba sysconfig list --format=json
*
* @when after_wp_load
* @subcommand list
*
* @param array $args Positional arguments (literal arguments)
* @param array $assoc_args Associative arguments (--flag, --no-flag, --key=value)
*
* @return void
*
* @throws WP_CLI\ExitException
*
* @since 3.0.0
*/
public function _list($args, $assoc_args)
{
/** @var Application $akeebaBackupApplication */
global $akeebaBackupApplication;
$container = $akeebaBackupApplication->getContainer();
$platform = Platform::getInstance();
$config = $container->appConfig;
$output = [];
foreach ($this->defaultOptions as $key => $default)
{
switch ($key)
{
case 'options.frontend_secret_word':
$value = $platform->get_platform_configuration_option(substr($key, 8), '');
break;
default:
$value = $config->get($key, $default);
break;
}
$output[] = [
'key' => $key,
'value' => $value,
];
}
$format = isset($assoc_args['format']) ? $assoc_args['format'] : 'table';
CliUtils\format_items($format, $output, ['key', 'value']);
}
/**
* Gets the value of a system (global) configuration option for Akeeba Backup
*
* ## OPTIONS
*
* <key>
* : The option key to retrieve
*
* [--format=<format>]
* : The format for the returned value
* ---
* default: text
* options:
* - text
* - json
* - print_r
* - var_dump
* - var_export
* ---
*
* ## EXAMPLES
*
* wp akeeba sysconfig get options.frontend_enable
*
* wp akeeba sysconfig get options.frontend_enable --format=var_export
*
* @when after_wp_load
*
* @param array $args Positional arguments (literal arguments)
* @param array $assoc_args Associative arguments (--flag, --no-flag, --key=value)
*
* @return void
*
* @throws WP_CLI\ExitException
*
* @since 3.0.0
*/
public function get($args, $assoc_args)
{
$key = isset($args[0]) ? $args[0] : null;
if (empty($key))
{
WP_CLI::error("You must specify the option key to retrieve.");
}
if (!array_key_exists($key, $this->defaultOptions))
{
WP_CLI::error("Unknown option '$key'.");
}
/** @var Application $akeebaBackupApplication */
global $akeebaBackupApplication;
$container = $akeebaBackupApplication->getContainer();
$platform = Platform::getInstance();
$config = $container->appConfig;
switch ($key)
{
case 'options.frontend_secret_word':
$value = $platform->get_platform_configuration_option(substr($key, 8), '');
break;
default:
$value = $config->get($key, $this->defaultOptions[$key]);
break;
}
switch ($assoc_args['format'])
{
case 'text':
default:
echo $value;
break;
case 'json':
echo json_encode($value);
break;
case 'print_r':
print_r($value);
break;
case 'var_dump':
var_dump($value);
break;
case 'var_export':
var_export($value);
break;
}
}
/**
* Sets the value of a system (global) configuration option for Akeeba Backup
*
* ## OPTIONS
*
* <key>
* : The option key to set
*
* <value>
* : The value to set
*
* ## EXAMPLES
*
* wp akeeba sysconfig set options.frontend_enable 1
*
* @when after_wp_load
*
* @param array $args Positional arguments (literal arguments)
* @param array $assoc_args Associative arguments (--flag, --no-flag, --key=value)
*
* @return void
*
* @throws WP_CLI\ExitException
*
* @since 3.0.0
*/
public function set($args, $assoc_args)
{
$key = isset($args[0]) ? $args[0] : null;
$value = isset($args[1]) ? $args[1] : null;
if (empty($key))
{
WP_CLI::error("You must specify the option key to set.");
}
if (is_null($value))
{
WP_CLI::error("You must specify the option value to set.");
}
if (!array_key_exists($key, $this->defaultOptions))
{
WP_CLI::error("Unknown option '$key'.");
}
global $akeebaBackupApplication;
$container = $akeebaBackupApplication->getContainer();
$config = $container->appConfig;
$config->set($key, $value);
try
{
$config->saveConfiguration();
}
catch (\RuntimeException $e)
{
WP_CLI::error("Could not set option '$key'.");
}
WP_CLI::success("Successfully set option '$key' to '$value'");
}
}