Implement admin functions for FCM and APNs configuration

This commit is contained in:
Kijin Sung 2020-06-16 15:47:42 +09:00
parent 3c15c34aa1
commit e49c77926a
7 changed files with 135 additions and 1 deletions

View file

@ -569,7 +569,7 @@ class adminAdminController extends admin
$conf_value = $vars->{'sms_' . $sms_driver . '_' . $conf_name} ?: null;
if (!$conf_value)
{
throw new Rhymix\Framework\Exception('msg_advanced_mailer_smtp_host_is_invalid');
throw new Rhymix\Framework\Exception('msg_advanced_mailer_sms_config_invalid');
}
$sms_driver_config[$conf_name] = $conf_value;
}
@ -579,6 +579,61 @@ class adminAdminController extends admin
$sms_driver_config[$conf_name] = $conf_value;
}
// Validate the selected Push drivers.
$push_config = array('types' => array());
$push_drivers = Rhymix\Framework\Push::getSupportedDrivers();
$push_driver_list = $vars->push_driver ?: [];
foreach ($push_driver_list as $driver_name)
{
if (array_key_exists($driver_name, $push_drivers))
{
$push_config['types'][$driver_name] = true;
}
else
{
throw new Rhymix\Framework\Exception('msg_advanced_mailer_sending_method_is_invalid');
}
}
// Validate the Push driver settings.
foreach ($push_drivers as $driver_name => $driver_definition)
{
foreach ($push_drivers[$driver_name]['required'] as $conf_name)
{
$conf_value = utf8_trim($vars->{'push_' . $driver_name . '_' . $conf_name}) ?: null;
if (!$conf_value && in_array($driver_name, $push_driver_list))
{
throw new Rhymix\Framework\Exception('msg_advanced_mailer_push_config_invalid');
}
$push_config[$driver_name][$conf_name] = $conf_value;
// Save certificates in a separate file and only store the filename in config.php.
if ($conf_name === 'certificate')
{
$filename = Rhymix\Framework\Config::get('push.' . $driver_name . '.certificate');
if (!$filename)
{
$filename = './files/config/' . $driver_name . '/cert-' . Rhymix\Framework\Security::getRandom(32) . '.pem';
}
if ($conf_value !== null)
{
Rhymix\Framework\Storage::write($filename, $conf_value);
$push_config[$driver_name][$conf_name] = $filename;
}
elseif (Rhymix\Framework\Storage::exists($filename))
{
Rhymix\Framework\Storage::delete($filename);
}
}
}
foreach ($push_drivers[$driver_name]['optional'] as $conf_name)
{
$conf_value = utf8_trim($vars->{'push_' . $driver_name . '_' . $conf_name}) ?: null;
$push_config[$driver_name][$conf_name] = $conf_value;
}
}
// Save advanced mailer config.
getController('module')->updateModuleConfig('advanced_mailer', (object)array(
'sender_name' => trim($vars->mail_default_name),
@ -606,6 +661,7 @@ class adminAdminController extends admin
Rhymix\Framework\Config::set("sms.$sms_driver", $sms_driver_config);
Rhymix\Framework\Config::set("sms.allow_split.sms", toBool($vars->allow_split_sms));
Rhymix\Framework\Config::set("sms.allow_split.lms", toBool($vars->allow_split_lms));
Rhymix\Framework\Config::set("push", $push_config);
if (!Rhymix\Framework\Config::save())
{
throw new Rhymix\Framework\Exception('msg_failed_to_save_config');

View file

@ -424,6 +424,18 @@ class adminAdminView extends admin
Context::set('sms_drivers', $sms_drivers);
Context::set('sms_driver', config('sms.type') ?: 'dummy');
// Load Push drivers.
$push_drivers = Rhymix\Framework\Push::getSupportedDrivers();
uasort($push_drivers, function($a, $b) { return strcmp($a['name'], $b['name']); });
Context::set('push_drivers', $push_drivers);
Context::set('push_config', config('push') ?: []);
$apns_certificate = false;
if ($apns_certificate_filename = config('push.apns.certificate'))
{
$apns_certificate = Rhymix\Framework\Storage::read($apns_certificate_filename);
}
Context::set('apns_certificate', $apns_certificate);
// Workaround for compatibility with older version of Amazon SES driver.
config('mail.ses.api_key', config('mail.ses.api_user'));
config('mail.ses.api_secret', config('mail.ses.api_pass'));

View file

@ -337,6 +337,60 @@
</div>
</section>
<section class="section">
<h2>{$lang->push_notification}</h2>
<div class="x_control-group">
<label class="x_control-label">{$lang->cmd_admin_sending_method}</label>
<div class="x_controls">
<!--@foreach($push_drivers as $driver_name => $driver_definition)-->
<label for="push_driver_{$driver_name}" class="x_inline"><input type="checkbox" name="push_driver[]" id="push_driver_{$driver_name}" value="{$driver_name}" checked="checked"|cond="isset($push_config['types'][$driver_name])" /> {$driver_definition['name']}</label>
<!--@end-->
</div>
</div>
<!--@foreach($push_drivers as $driver_name => $driver_definition)-->
{@ $conf_names = array_merge($driver_definition['required'], $driver_definition['optional'])}
<!--@foreach($conf_names as $conf_name)-->
{@ $conf_value = escape(config("push.$driver_name.$conf_name"))}
<!--@if($conf_name === 'api_key')-->
<div class="x_control-group hidden-by-default show-for-{$driver_name}">
<label class="x_control-label" for="push_{$driver_name}_api_key">{$lang->cmd_advanced_mailer_fcm_api_key}</label>
<div class="x_controls">
<input type="password" name="push_{$driver_name}_api_key" id="push_{$driver_name}_api_key" value="{$conf_value|escape}" />
</div>
</div>
<!--@end-->
<!--@if($conf_name === 'certificate')-->
<div class="x_control-group hidden-by-default show-for-{$driver_name}">
<label class="x_control-label" for="push_{$driver_name}_certificate">{$lang->cmd_advanced_mailer_apns_certificate}</label>
<div class="x_controls full-width">
<textarea name="push_{$driver_name}_certificate" id="push_{$driver_name}_certificate">{$apns_certificate|escape}</textarea>
</div>
</div>
<!--@end-->
<!--@if($conf_name === 'passphrase')-->
<div class="x_control-group hidden-by-default show-for-{$driver_name}">
<label class="x_control-label" for="push_{$driver_name}_passphrase">{$lang->cmd_advanced_mailer_apns_passphrase}</label>
<div class="x_controls">
<input type="password" name="push_{$driver_name}_passphrase" id="push_{$driver_name}_passphrase" value="{$conf_value|escape}" />
</div>
</div>
<!--@end-->
<!--@end-->
<!--@end-->
</section>
<div class="x_clearfix btnArea">
<div class="x_pull-right">