You are here

class AdsenseFilter in Google AdSense integration 8

Provides a filter for AdSense input tags.

Plugin annotation


@Filter(
  id = "filter_adsense",
  title = @Translation("AdSense tag"),
  description = @Translation("Substitutes an AdSense special tag with an ad. Add this below 'Limit allowed HTML tags'."),
  type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_REVERSIBLE
)

Hierarchy

Expanded class hierarchy of AdsenseFilter

File

src/Plugin/Filter/AdsenseFilter.php, line 26

Namespace

Drupal\adsense\Plugin\Filter
View source
class AdsenseFilter extends FilterBase implements ContainerFactoryPluginInterface {

  /**
   * The block storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $blockStorage;

  /**
   * The renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * Configuration.
   *
   * @var \Drupal\Core\Config\ImmutableConfig
   */
  protected $config;

  /**
   * Creates a new AdsenseAdBase instance.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
   *   The block storage.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The renderer.
   * @param \Drupal\Core\Config\ImmutableConfig $config
   *   The configuration.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityStorageInterface $entity_storage, RendererInterface $renderer, ImmutableConfig $config) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->blockStorage = $entity_storage;
    $this->renderer = $renderer;
    $this->config = $config;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('entity_type.manager')
      ->getStorage('block'), $container
      ->get('renderer'), $container
      ->get('config.factory')
      ->get('adsense.settings'));
  }

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $patterns = [
      'block' => '/\\[adsense:block:([^\\]]+)\\]/x',
      'oldtag' => '/\\[adsense:([^:]+):(\\d*):(\\d*):?(\\w*)\\]/x',
      'tag' => '/\\[adsense:([^:]+):([^:\\]]+)\\]/x',
    ];
    $modified = FALSE;
    foreach ($patterns as $mode => $pattern) {
      if (preg_match_all($pattern, $text, $matches, PREG_SET_ORDER)) {
        foreach ($matches as $match) {
          $ad = NULL;
          switch ($mode) {
            case 'block':

              // adsense:block:name.
              // Get the block with the same machine name as the tag.
              try {
                $module_blocks = $this->blockStorage
                  ->loadByProperties([
                  'id' => $match[1],
                ]);
              } catch (\Exception $e) {
                $module_blocks = [];
              }

              /** @var \Drupal\block\Entity\Block $block */
              foreach ($module_blocks as $block) {
                if ($block
                  ->getPlugin() instanceof AdBlockInterface) {
                  $ad = $block
                    ->getPlugin()
                    ->createAd();
                }
              }
              break;
            case 'oldtag':

              // adsense:format:group:channel:slot.
              try {
                $ad = AdsenseAdBase::createAd([
                  'format' => $match[1],
                  'group' => $match[2],
                  'channel' => $match[3],
                  'slot' => $match[4],
                ]);
              } catch (PluginException $e) {

                // Do nothing.
              }
              break;
            case 'tag':

              // adsense:format:slot.
              try {
                $ad = AdsenseAdBase::createAd([
                  'format' => $match[1],
                  'slot' => $match[2],
                ]);
              } catch (PluginException $e) {

                // Do nothing.
              }
              break;
          }

          // Replace the first occurrence of the tag, in case we have the same
          // tag more than once.
          if (isset($ad)) {
            $modified = TRUE;
            $ad_array = $ad
              ->display();
            try {
              $ad_text = $this->renderer
                ->render($ad_array);
              $text = preg_replace('/\\' . $match[0] . '/', $ad_text, $text);
            } catch (\Exception $e) {

              // Do nothing.
            }
          }
        }
      }
    }
    $result = new FilterProcessResult($text);
    if ($modified) {
      $result
        ->addAttachments([
        'library' => [
          'adsense/adsense.css',
        ],
      ]);
      if ($this->config
        ->get('adsense_unblock_ads')) {
        $result
          ->addAttachments([
          'library' => [
            'adsense/adsense.unblock',
          ],
        ]);
      }
    }
    return $result;
  }

  /**
   * {@inheritdoc}
   */
  public function tips($long = FALSE) {
    if ($long) {
      return $this
        ->t('
        <p>Use tags to define AdSense ads. Examples:</p>
        <ul>
          <li><code>[adsense:<em>format</em>:<em>slot</em>]</code></li>
          <li><code>[adsense:<em>format</em>:<em>[group]</em>:<em>[channel]</em><em>[:slot]</em>]</code></li>
          <li><code>[adsense:block:<em>location</em>]</code></li>
        </ul>');
    }
    else {
      return $this
        ->t('Use the special tag [adsense:<em>format</em>:<em>slot</em>] to display Google AdSense ads.');
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AdsenseFilter::$blockStorage protected property The block storage.
AdsenseFilter::$config protected property Configuration.
AdsenseFilter::$renderer protected property The renderer.
AdsenseFilter::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
AdsenseFilter::process public function Performs the filter processing. Overrides FilterInterface::process
AdsenseFilter::tips public function Generates a filter's tip. Overrides FilterBase::tips
AdsenseFilter::__construct public function Creates a new AdsenseAdBase instance. Overrides FilterBase::__construct
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
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.