mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-03 16:51:40 +09:00
135 lines
3.6 KiB
PHP
135 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace Rhymix\Modules\Admin\Controllers\SystemConfig;
|
|
|
|
use Context;
|
|
use Rhymix\Framework\Config;
|
|
use Rhymix\Framework\Exception;
|
|
use Rhymix\Framework\Queue as RFQueue;
|
|
use Rhymix\Framework\Security;
|
|
use Rhymix\Modules\Admin\Controllers\Base;
|
|
|
|
class Queue extends Base
|
|
{
|
|
/**
|
|
* Display Notification Settings page
|
|
*/
|
|
public function dispAdminConfigQueue()
|
|
{
|
|
// Load queue drivers.
|
|
$queue_drivers = RFQueue::getSupportedDrivers();
|
|
uasort($queue_drivers, function($a, $b) {
|
|
if ($a['name'] === 'Dummy') return -1;
|
|
if ($b['name'] === 'Dummy') return 1;
|
|
return strnatcasecmp($a['name'], $b['name']);
|
|
});
|
|
Context::set('queue_drivers', $queue_drivers);
|
|
Context::set('queue_driver', config('queue.driver') ?: 'dummy');
|
|
|
|
// Set the default auth key.
|
|
if (!config('queue.key'))
|
|
{
|
|
config('queue.key', Security::getRandom(32));
|
|
}
|
|
|
|
// Set defaults for Redis.
|
|
if (!config('queue.redis'))
|
|
{
|
|
config('queue.redis', [
|
|
'host' => '127.0.0.1',
|
|
'port' => '6379',
|
|
'dbnum' => 0,
|
|
]);
|
|
}
|
|
|
|
$this->setTemplateFile('config_queue');
|
|
}
|
|
|
|
/**
|
|
* Update notification configuration.
|
|
*/
|
|
public function procAdminUpdateQueue()
|
|
{
|
|
$vars = Context::getRequestVars();
|
|
|
|
// Enabled?
|
|
$enabled = $vars->queue_enabled === 'Y';
|
|
|
|
// Validate the driver.
|
|
$drivers = RFQueue::getSupportedDrivers();
|
|
$driver = trim($vars->queue_driver);
|
|
if (!array_key_exists($driver, $drivers))
|
|
{
|
|
throw new Exception('msg_queue_driver_not_found');
|
|
}
|
|
if ($enabled && (!$driver || $driver === 'dummy'))
|
|
{
|
|
throw new Exception('msg_queue_driver_cannot_be_dummy');
|
|
}
|
|
|
|
// Validate required and optional driver settings.
|
|
$driver_config = [];
|
|
foreach ($drivers[$driver]['required'] as $conf_name)
|
|
{
|
|
$conf_value = trim($vars->{'queue_' . $driver . '_' . $conf_name} ?? '');
|
|
if ($conf_value === '')
|
|
{
|
|
throw new Exception('msg_queue_invalid_config');
|
|
}
|
|
$driver_config[$conf_name] = $conf_value === '' ? null : $conf_value;
|
|
}
|
|
foreach ($drivers[$driver]['optional'] as $conf_name)
|
|
{
|
|
$conf_value = trim($vars->{'queue_' . $driver . '_' . $conf_name} ?? '');
|
|
$driver_config[$conf_name] = $conf_value === '' ? null : $conf_value;
|
|
}
|
|
|
|
// Validate the interval.
|
|
$interval = intval($vars->queue_interval ?? 1);
|
|
if ($interval < 1 || $interval > 10)
|
|
{
|
|
throw new Exception('msg_queue_invalid_interval');
|
|
}
|
|
|
|
// Validate the process count.
|
|
$process_count = intval($vars->queue_process_count ?? 1);
|
|
if ($process_count < 1 || $process_count > 10)
|
|
{
|
|
throw new Exception('msg_queue_invalid_process_count');
|
|
}
|
|
|
|
// Validate the key.
|
|
$key = trim($vars->queue_key ?? '');
|
|
if (strlen($key) < 16 || !ctype_alnum($key))
|
|
{
|
|
throw new Exception('msg_queue_invalid_key');
|
|
}
|
|
|
|
// Validate actual operation of the driver.
|
|
$driver_class = '\\Rhymix\\Framework\\Drivers\\Queue\\' . $driver;
|
|
if (!class_exists($driver_class) || !$driver_class::isSupported())
|
|
{
|
|
throw new Exception('msg_queue_driver_not_found');
|
|
}
|
|
if (!$driver_class::validateConfig($driver_config))
|
|
{
|
|
throw new Exception('msg_queue_driver_not_usable');
|
|
}
|
|
|
|
|
|
// Save system config.
|
|
Config::set("queue.enabled", $enabled);
|
|
Config::set("queue.driver", $driver);
|
|
Config::set("queue.interval", $interval);
|
|
Config::set("queue.process_count", $process_count);
|
|
Config::set("queue.key", $key);
|
|
Config::set("queue.$driver", $driver_config);
|
|
if (!Config::save())
|
|
{
|
|
throw new Exception('msg_failed_to_save_config');
|
|
}
|
|
|
|
$this->setMessage('success_updated');
|
|
$this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminConfigQueue'));
|
|
}
|
|
}
|