FilterAmazon.php in Amazon Product Advertisement API 8.2
File
modules/amazon_filter/src/Plugin/Filter/FilterAmazon.php
View source
<?php
namespace Drupal\amazon_filter\Plugin\Filter;
use Drupal\amazon\Amazon;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;
class FilterAmazon extends FilterBase {
protected $defaultMaxAge;
public function __construct(array $configuration, $plugin_id, $plugin_definition) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
if (!empty($configuration['default_max_age'])) {
$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.');
}
}
}
public function process($text, $langcode) {
$matches = [];
$replacements = [];
if (preg_match_all('`\\[amazon(.*?)\\]`', $text, $matches)) {
$renderer = \Drupal::service('renderer');
foreach ($matches[1] as $index => $match) {
$completeToken = $matches[0][$index];
if (isset($replacements[$completeToken])) {
continue;
}
$params = explode(':', trim($match));
if (count($params) == 1) {
$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];
}
$associatesId = \Drupal::config('amazon.settings')
->get('associates_id');
$amazon = new Amazon($associatesId);
$results = $amazon
->lookup($asin);
if (empty($results[0])) {
continue;
}
$build = [
'#results' => $results,
'#max_age' => $maxAge,
];
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></ul>';
return $output;
}
}
Classes
Name |
Description |
FilterAmazon |
Provides a filter to easily be links to Amazon using an Associate ID. |