Skip to content
Snippets Groups Projects

Issue #3195197: Use a factory service to create Mailchimp library

4 files
+ 184
37
Compare changes
  • Side-by-side
  • Inline
Files
4
+ 8
37
@@ -9,7 +9,6 @@ use Drupal\Component\Utility\Crypt;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Markup;
use Drupal\Core\Site\Settings;
use Drupal\mailchimp\Autoload;
use Mailchimp\MailchimpLists;
define('MAILCHIMP_QUEUE_CRON', 'mailchimp');
@@ -22,6 +21,9 @@ define('MAILCHIMP_STATUS_SENDING', 'sending');
/**
* Access callback for mailchimp submodule menu items.
*
* @return bool
* TRUE if the mailchimp api is available and accessible by the user.
*/
function mailchimp_apikey_ready_access($permission) {
if (mailchimp_get_api_object() && \Drupal::currentUser()->hasPermission($permission)) {
@@ -33,49 +35,18 @@ function mailchimp_apikey_ready_access($permission) {
/**
* Instantiates a Mailchimp library object.
*
* @return \Mailchimp
* @return \Mailchimp\Mailchimp
* Drupal Mailchimp library object.
*/
function mailchimp_get_api_object($classname = 'Mailchimp') {
$mailchimp = &drupal_static(__FUNCTION__);
if (isset($mailchimp) && $mailchimp instanceof $classname) {
return $mailchimp;
}
$config = \Drupal::config('mailchimp.settings');
$object = \Drupal::service('mailchimp.client_factory')->getByClassNameOrNull($classname);
if ($config->get('test_mode')) {
// Register autoloader for loading test classes.
Autoload::register();
$classname = '\Mailchimp\Tests\\' . $classname;
}
else {
$classname = '\Mailchimp\\' . $classname;
}
if (!class_exists($classname)) {
$msg = t('Failed to load Mailchimp PHP library. Please refer to the installation requirements.');
\Drupal::logger('mailchimp')->error($msg);
\Drupal::messenger()->addError($msg);
return NULL;
}
$api_key = $config->get('api_key');
if (!strlen($api_key)) {
\Drupal::logger('mailchimp')->error('Mailchimp Error: API Key cannot be blank.');
if (!$object) {
\Drupal::messenger()->addError('Failed to load Mailchimp PHP library. Please refer to the installation requirements.');
return NULL;
}
$http_options = [
'timeout' => $config->get('api_timeout'),
'headers' => [
'User-Agent' => _mailchimp_get_user_agent(),
],
];
$mailchimp = new $classname($api_key, 'apikey', $http_options);
return $mailchimp;
return $object;
}
/**
Loading