deepseek-1.x-dev/src/Plugin/CKEditor5Plugin/InsertPromptSettings.php

src/Plugin/CKEditor5Plugin/InsertPromptSettings.php
<?php

namespace Drupal\deepseek\Plugin\CKEditor5Plugin;

use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
use Drupal\Component\Serialization\Yaml;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Url;
use Drupal\editor\EditorInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * CKEditor 5 Url get content prompt plugin.
 */
class InsertPromptSettings extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface, ContainerFactoryPluginInterface {

  use CKEditor5PluginConfigurableTrait;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, protected ConfigFactoryInterface $configFactory) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
  }

  /**
   * {@inheritDoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    // Swap config with a values from config object.
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('config.factory'),
    );
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'prompts' => [],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $config = $this->getConfiguration();
    $prompts = $this->listPrompt($this->configFactory->get('deepseek.settings'));
    $options = [];
    foreach ($prompts as $id => $prompt) {
      $options[$id] = $prompt['title'];
    }
    $form['prompts'] = [
      '#type' => 'checkboxes',
      '#title' => $this->t('Available prompts'),
      '#options' => $options,
      '#description' => $this->t('The selected prompts will appear in the ckeditor list.'),
      '#default_value' => $config['prompts'],
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
    // @todo Implement validateConfigurationForm() method.
  }

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

  /**
   * {@inheritdoc}
   *
   * Get list of block in editor config.
   */
  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
    $config = $this->configFactory->get('deepseek.settings');
    $listPrompts = $prompts = $this->listPrompt($config);
    $voice = $config->get('voice');
    $configBlocks = array_filter($this->configuration['prompts']);
    if (!empty($configBlocks)) {
      $prompts = [];
      foreach ($this->configuration['prompts'] as $promptId) {
        if ($promptId) {
          $prompts[$promptId] = $listPrompts[$promptId];
        }
      }
    }
    return [
      'prompts' => $prompts,
      'voice' => $voice,
      'ai_connect' => Url::fromRoute('deepseek.ai_connect')->toString(),
    ];
  }

  /**
   * Shows a list of blocks that can be added to a theme's layout.
   *
   * @inheritDoc
   */
  public function listPrompt($config) {
    $definitions = is_string($config->get('prompts')) ? Yaml::decode($config->get('prompts')) : $config->get('prompts');
    $prompts = [];
    foreach ($definitions as $plugin_definition) {
      if (!isset($plugin_definition['title']) || !isset($plugin_definition['prompt'])) {
        continue;
      }
      $plugin_id = $plugin_definition['id'] ?? substr(bin2hex(random_bytes(3)), 0, 5);
      $prompts[$plugin_id] = $plugin_definition;
    }
    return $prompts;
  }

}

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

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