paid_ads-8.x-1.x-dev/src/PaidService.php
src/PaidService.php
<?php
namespace Drupal\paid_ads;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\paid_ads\Plugin\PaidGatewaysPluginManager;
/**
* Class PaidService.
*/
class PaidService {
use StringTranslationTrait;
/**
* PaidGatewaysPluginManager injection.
*
* @var \Drupal\paid_ads\Plugin\PaidGatewaysPluginManager
*/
private $pluginManager;
/**
* Drupal logger.
*
* @var \Drupal\Core\Logger\LoggerChannel
*/
protected $logger;
/**
* PaidService constructor.
*
* @param \Drupal\paid_ads\Plugin\PaidGatewaysPluginManager $pluginManager
* PluginManager instance.
* @param \Drupal\Core\Logger\LoggerChannelInterface $logger
* Injected Drupal logger channel factory.
*/
public function __construct(PaidGatewaysPluginManager $pluginManager, LoggerChannelInterface $logger) {
$this->pluginManager = $pluginManager;
$this->logger = $logger;
}
/**
* Gets list of PaidGateways plugins.
*
* @return array
* Return list of plugins.
*/
public function getPluginsList(): iterable {
$plugins = [];
foreach ($this->pluginManager->getDefinitions() as $plugin) {
$plugins[$plugin['id']] = $plugin['label']->render();
}
return $plugins;
}
/**
* Request display form from plugin.
*
* @param string $pluginId
* Id of plugin.
* @param array $options
* Options for form.
*
* @return array
* Render form array.
*/
public function buildFormByPluginId($pluginId, array $options) {
$plugin = $this->getInstance($pluginId);
if ($plugin) {
return $plugin->getForm($options);
}
return [];
}
/**
* Request configuration form from plugin.
*
* @param string $pluginId
* Id of plugin.
* @param array $form
* Form array.
* @param \Drupal\Core\Form\FormStateInterface $formState
* FormState instance.
*
* @return array
* Render form array.
*/
public function buildConfigFormByPluginId($pluginId, array $form, FormStateInterface $formState) {
$plugin = $this->getInstance($pluginId);
if ($plugin) {
return $plugin->getConfigForm($form, $formState);
}
return [];
}
/**
* Gets PaidGatewaysPlugin instance by plugin id.
*
* @param string $pluginId
* Id of plugin.
*
* @return \Drupal\paid_ads\Plugin\PaidGatewaysPluginBase|null
* PaidGatewaysPlugin instance.
*/
public function getInstance($pluginId) {
try {
if ($this->pluginManager->hasDefinition($pluginId)) {
/* @var $plugin \Drupal\paid_ads\Plugin\PaidGatewaysPluginBase */
$plugin = $this->pluginManager->createInstance($pluginId);
return $plugin;
}
else {
$this->logger->warning($this->t('Could not find a plugin with id: @id', ['@id' => $pluginId]));
return NULL;
}
}
catch (PluginException $e) {
$this->logger->error($this->t('Plugin exception raised with message: @msg on retrieving plugin @name', [
'@msg' => $e->getMessage(),
'@name' => $pluginId,
]));
return NULL;
}
}
/**
* Get amount by field type class.
*
* @param string $class
* Class namespace.
* @param array $options
* Options for callback.
*
* @return string
* Amount.
*/
public function getAmountByFieldClass($class, array $options) {
return call_user_func([$class, 'getAmounts'], $options);
}
}
