mobile_device_detection-8.x-3.2/src/Plugin/Condition/MobileDeviceDetectionConditionPlugin.php

src/Plugin/Condition/MobileDeviceDetectionConditionPlugin.php
<?php

namespace Drupal\mobile_device_detection\Plugin\Condition;

use Drupal\Core\Condition\ConditionPluginBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * This main class which add ability to determine device.
 *
 * @Condition(
 *   id = "mobile_device_detection_condition_plugin",
 *   label = @Translation("Show it on special devices"),
 * )
 */
class MobileDeviceDetectionConditionPlugin extends ConditionPluginBase {

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);
    $form['negate'] = [];
    $form['devices'] = [
      '#type' => 'checkboxes',
      '#title' => $this->t('When the device is determined'),
      '#default_value' => $this->configuration['devices'],
      '#options' => [
        'mobile' => $this->t('Mobile'),
        'tablet' => $this->t('Tablet'),
        'desktop' => $this->t('Desktop'),
      ],
      '#description' => $this->t('If you select no devices, the condition will evaluate to TRUE for all devices.'),
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'devices' => [],
    ] + parent::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    $this->configuration['devices'] = array_filter($form_state->getValue('devices'));
    parent::submitConfigurationForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function summary() {
    $devices = $this->configuration['devices'];

    if (count($devices) > 1) {
      $devices = implode(', ', $devices);
    }
    else {
      $devices = reset($devices);
    }

    if (!empty($this->configuration['negate'])) {
      return $this->t('The device is not @devices', ['@devices' => $devices]);
    }
    else {
      return $this->t('The device is @devices', ['@devices' => $devices]);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function evaluate() {
    if (empty($this->configuration['devices']) && !$this->isNegated()) {
      return TRUE;
    }

    \Drupal::service('page_cache_kill_switch')->trigger();
    $entity = \Drupal::service('mobile_device_detection.object');

    foreach ($this->configuration['devices'] as $key => $value) {
      if ($key != 'desktop') {
        $func = 'is' . ucfirst($value);

        if (is_callable([$entity, $func]) && $entity->$func()) {
          return TRUE;
        }
      }
      else {
        if (!$entity->isMobile() && !$entity->isTablet()) {
          return TRUE;
        }
      }
    }
    return FALSE;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc