You are here

class FilterAmazon in Amazon Product Advertisement API 8.2

Provides a filter to easily be links to Amazon using an Associate ID.

Plugin annotation


@Filter(
  id = "filter_amazon",
  title = @Translation("Amazon Associates filter"),
  type = Drupal\filter\Plugin\FilterInterface::TYPE_MARKUP_LANGUAGE,
  weight = -10
)

Hierarchy

Expanded class hierarchy of FilterAmazon

File

modules/amazon_filter/src/Plugin/Filter/FilterAmazon.php, line 24
Contains \Drupal\amazon_filter\Plugin\Filter\FilterAmazon.

Namespace

Drupal\amazon_filter\Plugin\Filter
View source
class FilterAmazon extends FilterBase {

  /**
   * The default max-age cache value as stored by the Amazon settings form.
   *
   * @var string
   */
  protected $defaultMaxAge;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    if (!empty($configuration['default_max_age'])) {

      // Allows for easier unit testing.
      $this->defaultMaxAge = $configuration['default_max_age'];
    }
    else {
      $this->defaultMaxAge = \Drupal::config('amazon.settings')
        ->get('default_max_age');
      if (is_null($this->defaultMaxAge)) {
        throw new \InvalidArgumentException('Missing Amazon settings: default max age.');
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $matches = [];
    $replacements = [];
    if (preg_match_all('`\\[amazon(.*?)\\]`', $text, $matches)) {

      /** @var  \Drupal\Core\Render $renderer */
      $renderer = \Drupal::service('renderer');
      foreach ($matches[1] as $index => $match) {
        $completeToken = $matches[0][$index];
        if (isset($replacements[$completeToken])) {

          // We've already built this replacement, do not do it again.
          continue;
        }

        // Preferred format.
        $params = explode(':', trim($match));
        if (count($params) == 1) {

          // Backwards-compatible format.
          $params = explode(' ', trim($match));
        }
        if (count($params) == 1) {
          continue;
        }
        $asin = $params[0];
        $type = $params[1];
        $maxAge = $this->defaultMaxAge;
        if (!empty($params[2])) {
          $maxAge = $params[2];
        }

        // @TODO: quick fix to get this working. Needs to be injected!
        $associatesId = \Drupal::config('amazon.settings')
          ->get('associates_id');
        $amazon = new Amazon($associatesId);
        $results = $amazon
          ->lookup($asin);
        if (empty($results[0])) {
          continue;
        }

        // Build a render array for this element. This allows us to easily
        // override the layout by simply overriding the Twig template. It also
        // lets us set custom caching for each filter link.
        $build = [
          '#results' => $results,
          '#max_age' => $maxAge,
        ];

        // Use the correct Twig template based on the "type" specified.
        switch (strtolower($type)) {
          case 'inline':
            $build['#theme'] = 'amazon_inline';
            break;
          case 'small':
          case 'thumbnail':
            $build['#theme'] = 'amazon_image';
            $build['#size'] = 'small';
            break;
          case 'medium':
            $build['#theme'] = 'amazon_image';
            $build['#size'] = 'medium';
            break;
          case 'large':
          case 'full':
            $build['#theme'] = 'amazon_image';
            $build['#size'] = 'large';
            break;
          default:
            continue;
        }
        $replacements[$completeToken] = $renderer
          ->render($build);
      }
    }
    $text = strtr($text, $replacements);
    return new FilterProcessResult($text);
  }
  public function tips($long = FALSE) {
    $output = $this
      ->t('Link to Amazon products with [amazon:ASIN:display_type(:cache_max_age_in_seconds)]. Example: [amazon:1590597559:thumbnail:900] or [amazon:1590597559:author]. Details are <a href=":url" target="_blank">on the Amazon module handbook page</a>.', [
      ':url' => 'http://drupal.org/node/595464#filters',
    ]);
    if (!$long) {
      return $output;
    }
    $output = '<p>' . $output . '</p>';
    $output .= '<p>' . $this
      ->t('Currently supported options for display_typ:') . '</p>';
    $output .= '<ul><li>' . $this
      ->t('inline: Creates a text link to Amazon using the product title') . '</li>';
    $output .= '<li>' . $this
      ->t('thumbnail|small: Creates a link to Amazon using the small image size') . '</li>';
    $output .= '<li>' . $this
      ->t('medium: Creates a link to Amazon using the medium image size') . '</li>';
    $output .= '<li>' . $this
      ->t('full|large: Creates a link to Amazon using the large image size') . '</li>';

    //$output .= '<li>' . $this->t() . '</li>';

    //$output .= '<li>' . $this->t() . '</li>';

    //$output .= '<li>' . $this->t() . '</li>';

    //$output .= '<li>' . $this->t() . '</li>';
    $output .= '<li>' . $this
      ->t() . '</li></ul>';
    return $output;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FilterAmazon::$defaultMaxAge protected property The default max-age cache value as stored by the Amazon settings form.
FilterAmazon::process public function Performs the filter processing. Overrides FilterInterface::process
FilterAmazon::tips public function Generates a filter's tip. Overrides FilterBase::tips
FilterAmazon::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides FilterBase::__construct
FilterBase::$provider public property The name of the provider that owns this filter.
FilterBase::$settings public property An associative array containing the configured settings of this filter.
FilterBase::$status public property A Boolean indicating whether this filter is enabled.
FilterBase::$weight public property The weight of this filter compared to others in a filter collection.
FilterBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies 1
FilterBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration
FilterBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
FilterBase::getDescription public function Returns the administrative description for this filter plugin. Overrides FilterInterface::getDescription
FilterBase::getHTMLRestrictions public function Returns HTML allowed by this filter's configuration. Overrides FilterInterface::getHTMLRestrictions 4
FilterBase::getLabel public function Returns the administrative label for this filter plugin. Overrides FilterInterface::getLabel
FilterBase::getType public function Returns the processing type of this filter plugin. Overrides FilterInterface::getType
FilterBase::prepare public function Prepares the text for processing. Overrides FilterInterface::prepare
FilterBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration 1
FilterBase::settingsForm public function Generates a filter's settings form. Overrides FilterInterface::settingsForm 3
FilterInterface::TYPE_HTML_RESTRICTOR constant HTML tag and attribute restricting filters to prevent XSS attacks.
FilterInterface::TYPE_MARKUP_LANGUAGE constant Non-HTML markup language filters that generate HTML.
FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE constant Irreversible transformation filters.
FilterInterface::TYPE_TRANSFORM_REVERSIBLE constant Reversible transformation filters.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.