Move Mailchimp plugin business logic

- Remove business logic from Config controller
- Add business logic to MailchimpPlugin.php
- Add config view for mailchimp plugin
- gutted integrations_config.php
- Added parameter type to getConfig() function parameter to remove warning in override

Signed-off-by: objec <objecttothis@gmail.com>
This commit is contained in:
objec committed 2026-04-08 14:47:47 +04:00
1 parent e94e5e634c
commit f842be50b3
5 files changed
+48 -148

No files matched your search

-41
View File
@@ -3,7 +3,6 @@
namespace App\Controllers;
use App\Libraries\Barcode_lib;
use App\Libraries\Mailchimp_lib;
use App\Libraries\Receiving_lib;
use App\Libraries\Sale_lib;
use App\Libraries\Tax_lib;
@@ -287,7 +286,6 @@ class Config extends Secure_Controller
return $this->response->setJSON(['success' => $success, 'message' => $message]);
}
/**
* @return array
*/
@@ -536,45 +534,6 @@ class Config extends Secure_Controller
return $this->response->setJSON(['success' => $success, 'message' => lang('Config.saved_' . ($success ? '' : 'un') . 'successfully')]);
}
/**
* This function fetches all the available lists from Mailchimp for the given API key
*/
private function _mailchimp(string $api_key = ''): array // TODO: Hungarian notation
{
$mailchimp_lib = new Mailchimp_lib(['api_key' => $api_key]);
$result = [];
$lists = $mailchimp_lib->getLists();
if ($lists !== false) {
if (is_array($lists) && !empty($lists['lists']) && is_array($lists['lists'])) {
foreach ($lists['lists'] as $list) {
$result[$list['id']] = $list['name'] . ' [' . $list['stats']['member_count'] . ']';
}
}
}
return $result;
}
/**
* Gets Mailchimp lists when a valid API key is inserted. Used in app/Views/configs/integrations_config.php
*
* @return ResponseInterface
* @noinspection PhpUnused
*/
public function postCheckMailchimpApiKey(): ResponseInterface
{
$lists = $this->_mailchimp($this->request->getPost('mailchimp_api_key'));
$success = count($lists) > 0;
return $this->response->setJSON([
'success' => $success,
'message' => lang('Config.mailchimp_key_' . ($success ? '' : 'un') . 'successfully'),
'mailchimp_lists' => $lists
]);
}
/**
* Gets all stock locations. Used in app/Views/configs/stock_config.php
*
+2 -2
View File
@@ -99,10 +99,10 @@ class Secure_Controller extends BaseController
}
/**
* @param $key
* @param string $key
* @return mixed|void
*/
public function getConfig($key)
public function getConfig(string $key)
{
if (isset($config[$key])) {
return $config[$key];
+40
View File
@@ -5,6 +5,7 @@ namespace App\Plugins;
use App\Libraries\Plugins\BasePlugin;
use App\Libraries\Mailchimp_lib;
use CodeIgniter\Events\Events;
use CodeIgniter\HTTP\ResponseInterface;
use Config\Services;
use Exception;
@@ -163,6 +164,45 @@ class MailchimpPlugin extends BasePlugin
return $this->mailchimpLib;
}
/**
* Gets Mailchimp lists when a valid API key is inserted. Used in app/Views/configs/integrations_config.php
*
* @return ResponseInterface
* @noinspection PhpUnused
*/
public function postCheckMailchimpApiKey(): ResponseInterface
{
$lists = $this->_mailchimp($this->request->getPost('mailchimp_api_key'));
$success = count($lists) > 0;
return $this->response->setJSON([
'success' => $success,
'message' => lang('Config.mailchimp_key_' . ($success ? '' : 'un') . 'successfully'),
'mailchimp_lists' => $lists
]);
}
/**
* This function fetches all the available lists from Mailchimp for the given API key
*/
private function _mailchimp(string $api_key = ''): array // TODO: Hungarian notation
{
$mailchimp_lib = new Mailchimp_lib(['api_key' => $api_key]);
$result = [];
$lists = $mailchimp_lib->getLists();
if ($lists !== false) {
if (is_array($lists) && !empty($lists['lists']) && is_array($lists['lists'])) {
foreach ($lists['lists'] as $list) {
$result[$list['id']] = $list['name'] . ' [' . $list['stats']['member_count'] . ']';
}
}
}
return $result;
}
public function testConnection(): array
{
$apiKey = $this->getSetting('api_key');
+4 -4
View File
@@ -1,6 +1,6 @@
<?php
/**
* @var array $mailchimp
* @var array $settings
* @var string $controller_name
*/
?>
@@ -24,7 +24,7 @@
'name' => 'mailchimp_api_key',
'id' => 'mailchimp_api_key',
'class' => 'form-control input-sm',
'value' => $mailchimp['api_key']
'value' => esc($settings['api_key'] ?? '')
]) ?>
</div>
</div>
@@ -46,8 +46,8 @@
</span>
<?= form_dropdown(
'mailchimp_list_id',
$mailchimp['lists'],
$mailchimp['list_id'],
esc($settings['lists'] ?? ''),
esc($settings['list_id'] ?? ''),
'id="mailchimp_list_id" class="form-control input-sm"'
) ?>
</div>
+2 -101
View File
@@ -1,108 +1,9 @@
<?php
/**
* @var array $mailchimp
* @var string $controller_name
*
*/
?>
<?= form_open('config/saveMailchimp/', ['id' => 'mailchimp_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
<div id="config_wrapper">
<fieldset id="config_info">
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
<div id="integrations_header"><?= lang('Config.mailchimp_configuration') ?></div>
<ul id="mailchimp_error_message_box" class="error_message_box"></ul>
<div class="form-group form-group-sm">
<?= form_label(lang('Config.mailchimp_api_key'), 'mailchimp_api_key', ['class' => 'control-label col-xs-2']) ?>
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon input-sm">
<span class="glyphicon glyphicon-cloud"></span>
</span>
<?= form_input([
'name' => 'mailchimp_api_key',
'id' => 'mailchimp_api_key',
'class' => 'form-control input-sm',
'value' => $mailchimp['api_key']
]) ?>
</div>
</div>
<div class="col-xs-1">
<label class="control-label">
<a href="https://eepurl.com/b9a05b" target="_blank">
<span class="glyphicon glyphicon-info-sign" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.mailchimp_tooltip') ?>"></span>
</a>
</label>
</div>
</div>
<div class="form-group form-group-sm">
<?= form_label(lang('Config.mailchimp_lists'), 'mailchimp_list_id', ['class' => 'control-label col-xs-2']) ?>
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon input-sm">
<span class="glyphicon glyphicon-user"></span>
</span>
<?= form_dropdown(
'mailchimp_list_id',
$mailchimp['lists'],
$mailchimp['list_id'],
'id="mailchimp_list_id" class="form-control input-sm"'
) ?>
</div>
</div>
</div>
<?= form_submit([
'name' => 'submit_mailchimp',
'id' => 'submit_mailchimp',
'value' => lang('Common.submit'),
'class' => 'btn btn-primary btn-sm pull-right'
]) ?>
</fieldset>
</div>
<!-- Add plugin hooks here? -->
<?= form_close() ?>
<script type="text/javascript">
// Validation and submit handling
$(document).ready(function() {
$('#mailchimp_api_key').change(function() {
$.post("<?= "$controller_name/checkMailchimpApiKey" ?>", {
'mailchimp_api_key': $('#mailchimp_api_key').val()
},
function(response) {
$.notify({
message: response.message
}, {
type: response.success ? 'success' : 'danger'
});
$('#mailchimp_list_id').empty();
$.each(response.mailchimp_lists, function(val, text) {
$('#mailchimp_list_id').append(new Option(text, val));
});
$('#mailchimp_list_id').prop('selectedIndex', 0);
},
'json'
);
});
$('#mailchimp_config_form').validate($.extend(form_support.handler, {
submitHandler: function(form) {
$(form).ajaxSubmit({
success: function(response) {
$.notify({
message: response.message
}, {
type: response.success ? 'success' : 'danger'
})
},
dataType: 'json'
});
},
errorLabelContainer: '#mailchimp_error_message_box'
}));
});
</script>