tracardi-1.0.x-dev/src/Plugin/Personalization/Segments.php

src/Plugin/Personalization/Segments.php
<?php

namespace Drupal\tracardi\Plugin\Personalization;

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\tracardi\CookieManager;
use Drupal\tracardi\PersonalizationBase;
use Drupal\tracardi\Services\TracardiApi;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Tracardi\TracardiPhpSdk\Model\Profile\Profile;
use Tracardi\TracardiPhpSdk\Model\Segment\Segment;

/**
 * @Personalization(
 *   id = "segments",
 *   label = "Segment(s)",
 *   description = @Translation("Sets a cookie based on segmentation of the Tracardi profile"),
 *   configurable = TRUE
 * )
 */
class Segments extends PersonalizationBase implements ContainerFactoryPluginInterface {

  /**
   * @var \Drupal\tracardi\Services\TracardiApi
   */
  private TracardiApi $tracardiApi;

  /**
   * @param array $configuration
   * @param $plugin_id
   * @param $plugin_definition
   * @param \Drupal\tracardi\CookieManager $cookieManager
   * @param \Drupal\Core\Session\AccountProxyInterface $accountProxy
   * @param \Drupal\tracardi\Services\TracardiApi $tracardiApi
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, CookieManager $cookieManager, AccountProxyInterface $accountProxy, TracardiApi $tracardiApi) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $cookieManager, $accountProxy);

    $this->tracardiApi = $tracardiApi;
  }

  /**
   * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
   * @param array $configuration
   * @param $plugin_id
   * @param $plugin_definition
   *
   * @return \Drupal\tracardi\Plugin\Personalization\Segments
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): Segments {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('tracardi.cookie_manager'),
      $container->get('current_user'),
      $container->get('tracardi_api')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getOptionsList(): ?array {
    $segments = [
      '_unknown' => t('- Unknown -'),
    ];

    /** @var \Tracardi\TracardiPhpSdk\Model\Segment\Group $segmentGroup */
    foreach ($this->tracardiApi->getSegments() as $segmentGroup) {
      $groupName = $segmentGroup->getName();
      $segments[$groupName] = $segments[$groupName] ?? [];

      /** @var Segment $segment */
      foreach ($segmentGroup->getSegments() as $segment) {
        $segments[$groupName][$segment->getMachineName()] = $segment->getName();
      }
    }

    return $segments;
  }

  /**
   * {@inheritdoc}
   */
  public function getCookieName(): ?string {
    return $this->configuration['cookie_name'];
  }

  /**
   * {@inheritdoc}
   */
  public function calculate(Profile $profile): array {
    return $profile->getSegments();
  }

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

  /**
   * @inheritDoc
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state): array {
    return parent::buildConfigurationForm($form, $form_state) + [
      'cookie_name' => [
        '#type' => 'textfield',
        '#title' => $this->t('Cookie name'),
        '#default_value' => $this->configuration['cookie_name'],
        '#required' => TRUE,
      ],
    ];
  }

}

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

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