You are here

class Disqus in Disqus 8

Provides Disqus render element.

Plugin annotation

@RenderElement("disqus");

Hierarchy

Expanded class hierarchy of Disqus

5 string references to 'Disqus'
d7_disqus_field.yml in migrations/d7_disqus_field.yml
migrations/d7_disqus_field.yml
disqus.config_translation.yml in ./disqus.config_translation.yml
disqus.config_translation.yml
disqus.info.yml in ./disqus.info.yml
disqus.info.yml
disqus.links.menu.yml in ./disqus.links.menu.yml
disqus.links.menu.yml
disqus.routing.yml in ./disqus.routing.yml
disqus.routing.yml
1 #type use of Disqus
DisqusFormatter::viewElements in src/Plugin/Field/FieldFormatter/DisqusFormatter.php
Builds a renderable array for a field value.

File

src/Element/Disqus.php, line 12

Namespace

Drupal\disqus\Element
View source
class Disqus extends RenderElement {

  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    return [
      '#title' => '',
      '#url' => '',
      '#identifier' => '',
      '#callbacks' => [],
      '#attributes' => [
        'id' => 'disqus_thread',
      ],
      '#pre_render' => [
        get_class() . '::generatePlaceholder',
      ],
    ];
  }

  /**
   * Pre_render callback to generate a placeholder.
   *
   * @param array $element
   *   A renderable array.
   *
   * @return array
   *   The updated renderable array containing the placeholder.
   */
  public static function generatePlaceholder(array $element) {
    if (\Drupal::currentUser()
      ->hasPermission('view disqus comments')) {
      $element[] = [
        '#lazy_builder' => [
          get_class() . '::displayDisqusComments',
          [
            $element['#title'],
            $element['#url'],
            $element['#identifier'],
            serialize($element['#callbacks']),
          ],
        ],
        '#create_placeholder' => TRUE,
      ];
    }
    return $element;
  }

  /**
   * Post render function of the Disqus element to inject the Disqus JavaScript.
   */
  public static function displayDisqusComments($title, $url, $identifier, $callbacks) {
    $disqus_settings = \Drupal::config('disqus.settings');

    /** @var \Drupal\Core\Render\RendererInterface $renderer */
    $renderer = \Drupal::service('renderer');
    $element = [
      '#theme_wrappers' => [
        'disqus_noscript',
        'container',
      ],
      '#attributes' => [
        'id' => 'disqus_thread',
      ],
    ];
    $renderer
      ->addCacheableDependency($element, $disqus_settings);
    $disqus = [
      'domain' => $disqus_settings
        ->get('disqus_domain'),
      'url' => $url,
      'title' => $title,
      'identifier' => $identifier,
    ];

    // If the user is logged in, we can inject the username and email for
    // Disqus.
    $account = \Drupal::currentUser();
    if ($disqus_settings
      ->get('behavior.disqus_inherit_login') && !$account
      ->isAnonymous()) {
      $renderer
        ->addCacheableDependency($element, $account);
      $disqus['name'] = $account
        ->getAccountName();
      $disqus['email'] = $account
        ->getEmail();
    }

    // Provide alternate language support if desired.
    if ($disqus_settings
      ->get('behavior.disqus_localization')) {
      $disqus['language'] = \Drupal::languageManager()
        ->getCurrentLanguage()
        ->getId();
    }

    // Check if we are to provide Single Sign-On access.
    if ($disqus_settings
      ->get('advanced.sso.disqus_sso')) {
      $disqus += \Drupal::service('disqus.manager')
        ->ssoSettings();
    }

    // Pass callbacks on if needed. Callbacks array is two dimensional array
    // with callback type as key on first level and array of JS callbacks on the
    // second level.
    // Example:
    // @code
    // $element = [
    //   '#type' => 'disqus',
    //   '#callbacks' = [
    //     'onNewComment' => [
    //       'myCallbackThatFiresOnCommentPost',
    //       'Drupal.mymodule.anotherCallbInsideDrupalObj',
    //     ],
    //   ],
    // ];
    // @endcode
    $callbacks = unserialize($callbacks);
    if (!empty($callbacks)) {
      $disqus['callbacks'] = $callbacks;
    }

    // Check if we want to track new comments in Google Analytics.
    if ($disqus_settings
      ->get('behavior.disqus_track_newcomment_ga')) {

      // Add a callback when a new comment is posted.
      $disqus['callbacks']['onNewComment'][] = 'Drupal.disqus.disqusTrackNewComment';

      // Attach the js with the callback implementation.
      $element['#attached']['library'][] = 'disqus/ga';
    }

    // Add the disqus.js and all the settings to process the JavaScript and load
    // Disqus.
    $element['#attached']['library'][] = 'disqus/disqus';
    $element['#attached']['drupalSettings']['disqus'] = $disqus;
    return $element;
  }

}

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
Disqus::displayDisqusComments public static function Post render function of the Disqus element to inject the Disqus JavaScript.
Disqus::generatePlaceholder public static function Pre_render callback to generate a placeholder.
Disqus::getInfo public function Returns the element properties for this element. Overrides ElementInterface::getInfo
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.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 92
RenderElement::preRenderAjaxForm public static function Adds Ajax information about an element to communicate with JavaScript.
RenderElement::preRenderGroup public static function Adds members of this group as actual elements for rendering.
RenderElement::processAjaxForm public static function Form element processing handler for the #ajax form property. 1
RenderElement::processGroup public static function Arranges elements into groups.
RenderElement::setAttributes public static function Sets a form element's class attribute. Overrides ElementInterface::setAttributes
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.