setka-8.x-1.0/setka_editor.module

setka_editor.module
<?php

/**
 * @file
 * Main Setka Editor module file.
 */

use Drupal\Core\Cache\Cache;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\file\Entity\File;
use Drupal\setka_editor\Form\SettingsForm;
use Drupal\setka_editor\SetkaEditorHelper;

/**
 * Implements hook_cron().
 */
function setka_editor_cron() {
  $config = \Drupal::config('setka_editor.settings');
  $setkaUseCdn = $config->get('setka_use_cdn');
  $setkaEditorLicense = $config->get('setka_license_key');

  if ($setkaEditorLicense && !$setkaUseCdn) {
    $editorApi = \Drupal::service('setka_editor.api');

    try {
      if (!SetkaEditorHelper::checkSetkaFolderPermissions(\Drupal::service('file_system'))) {
        throw new \Exception('Setka files directory is not writable!');
      }

      if ($currentBuild = $editorApi->getCurrentBuild($setkaEditorLicense)) {
        $values = SetkaEditorHelper::parseStyleManagerData($currentBuild);

        $editorJsCdn = !empty($values['setka_editor_js_cdn']);
        $editorCssCdn = !empty($values['setka_editor_css_cdn']);
        $companyCssCdn = !empty($values['setka_company_css_cdn']);
        $companyJsonCdn = !empty($values['setka_company_json_cdn']);
        $publicJsCdn = !empty($values['setka_public_js_cdn']);
        if (!($editorJsCdn && $editorCssCdn && $companyCssCdn && $companyJsonCdn && $publicJsCdn)) {
          throw new \Exception('Setka Editor config update by cron error: required response data does not exist!');
        }

        $queue = \Drupal::queue('update_setke_editor');
        if (!$queue->numberOfItems()) {
          $queue->createQueue();
        }
        $queue->createItem(['newSettings' => $values]);

        $lock = \Drupal::lock();
        if ($lock->acquire('setka_editor_files_update')) {
          $configFactory = \Drupal::configFactory();
          $state = \Drupal::state();

          while ($newSettingsItem = $queue->claimItem()) {
            $newSettingsData = $newSettingsItem->data['newSettings'];
            SetkaEditorHelper::buildSetkaFilesUpdateTask($config, $state, $newSettingsData);
            $configFactory->getEditable('setka_editor.settings')
              ->set('setka_editor_version', $newSettingsData['setka_editor_version'])
              ->set('setka_editor_public_token', $newSettingsData['setka_editor_public_token'])
              ->set('setka_company_meta_data', $newSettingsData['setka_company_meta_data'])
              ->set('setka_editor_js_cdn', $newSettingsData['setka_editor_js_cdn'])
              ->set('setka_editor_css_cdn', $newSettingsData['setka_editor_css_cdn'])
              ->set('setka_company_css_cdn', $newSettingsData['setka_company_css_cdn'])
              ->set('setka_company_json_cdn', $newSettingsData['setka_company_json_cdn'])
              ->set('setka_public_js_cdn', $newSettingsData['setka_public_js_cdn'])
              ->save();
            \Drupal::service('library.discovery')->clearCachedDefinitions();
            $configFactory->reset('setka_editor.settings');
            SetkaEditorHelper::runSetkaFilesUpdateTask($state);
            $queue->deleteItem($newSettingsItem);
          }

          foreach (Cache::getBins() as $cache_backend) {
            $cache_backend->deleteAll();
          }
          \Drupal::service('library.discovery')->clearCachedDefinitions();
          $configFactory->reset('setka_editor.settings');
          \Drupal::service('cache.discovery')->deleteAll();
          \Drupal::service('asset.css.collection_optimizer')->deleteAll();
          \Drupal::service('asset.js.collection_optimizer')->deleteAll();
          _drupal_flush_css_js();

          $lock->release('setka_editor_files_update');
        }
      }
    }
    catch (\Exception $e) {
      watchdog_exception('setka_editor', $e);
    }
  }
}

/**
 * Implements hook_theme().
 */
function setka_editor_theme($existing, $type, $theme, $path) {
  return [
    'setka_editor_formatter' => [
      'variables' => [
        'editor_content' => '',
        'typekit_id' => '',
      ],
    ],
  ];
}

/**
 * Implements hook_library_info_build().
 */
function setka_editor_library_info_build() {
  $libraries = [];
  $config = \Drupal::config('setka_editor.settings');
  $logger = \Drupal::logger('setka_editor');
  $state = \Drupal::state();
  $messenger = \Drupal::messenger();

  $setka_editor_license = $config->get('setka_license_key');
  if (!empty($setka_editor_license)) {
    $setka_editor_js = SettingsForm::getConfigValue($config, $state, 'setka_editor_js', TRUE);
    $setka_editor_css = SettingsForm::getConfigValue($config, $state, 'setka_editor_css', TRUE);
    if (!empty($setka_editor_js) && !empty($setka_editor_css)) {
      $libraries['setka-editor'] = [
        'js' => $setka_editor_js,
        'css' => [
          'base' => $setka_editor_css,
        ],
      ];
    }
    else {
      $logger->warning("Can't add 'setka-editor' library. Please check your Setka editor license key.");
      $messenger->addWarning("Can't add 'setka-editor' library. Please check your Setka editor license key.");
    }

    $setka_styles_css = SettingsForm::getConfigValue($config, $state, 'setka_company_css', TRUE);
    if (!empty($setka_styles_css)) {
      $libraries['setka-styles'] = [
        'css' => [
          'base' => $setka_styles_css,
        ],
      ];
    }
    else {
      $logger->warning("Can't add 'setka-styles' library. Please check your Setka editor license key.");
      $messenger->addWarning("Can't add 'setka-styles' library. Please check your Setka editor license key.");
    }

    $setka_public_js = SettingsForm::getConfigValue($config, $state, 'setka_public_js', TRUE, TRUE);
    if (!empty($setka_public_js)) {
      $libraries['setka-public-js'] = [
        'js' => $setka_public_js,
      ];
    }
    else {
      $logger->warning("Can't add 'setka-public-js' library. Please check your Setka editor license key.");
      $messenger->addWarning("Can't add 'setka-public-js' library. Please check your Setka editor license key.");
    }
  }

  return $libraries;
}

/**
 * Implements hook_library_info_alter().
 */
function setka_editor_library_info_alter(&$libraries, $extension) {
  if ($extension == 'setka_editor') {
    $state = \Drupal::getContainer()->get('state');
    $setkaEditorFilesUpdate = !\Drupal::lock()->lockMayBeAvailable('setka_editor_files_update');
    $config = \Drupal::config('setka_editor.settings');

    if ($setkaEditorFilesUpdate) {
      if (!empty($libraries['setka-editor']['js'])) {
        $url = key($libraries['setka-editor']['js']);
        $options = $libraries['setka-editor']['js'][$url];
        if ($cdnUrl = $config->get('setka_editor_js_cdn')) {
          $libraries['setka-editor']['js'] = [
            $cdnUrl => $options,
          ];
        }
      }
      if (!empty($libraries['setka-editor']['css']['base'])) {
        $url = key($libraries['setka-editor']['css']['base']);
        $options = $libraries['setka-editor']['css']['base'][$url];
        if ($cdnUrl = $config->get('setka_editor_css_cdn')) {
          $libraries['setka-editor']['css']['base'] = [
            $cdnUrl => $options,
          ];
        }
      }
      if (!empty($libraries['setka-styles']['css']['base'])) {
        $url = key($libraries['setka-styles']['css']['base']);
        $options = $libraries['setka-styles']['css']['base'][$url];
        if ($cdnUrl = $config->get('setka_company_css_cdn')) {
          $libraries['setka-styles']['css']['base'] = [
            $cdnUrl => $options,
          ];
        }
      }
      if (!empty($libraries['setka-public-js']['js'])) {
        $url = key($libraries['setka-public-js']['js']);
        $options = $libraries['setka-public-js']['js'][$url];
        if ($cdnUrl = $config->get('setka_public_js_cdn')) {
          $libraries['setka-public-js']['js'] = [
            $cdnUrl => $options,
          ];
        }
      }
    }
    else {
      if (!empty($libraries['setka-editor'])) {
        $setka_editor_js = SettingsForm::getConfigValue($config, $state, 'setka_editor_js', TRUE);
        $setka_editor_css = SettingsForm::getConfigValue($config, $state, 'setka_editor_css', TRUE);
        if (!empty($setka_editor_js) && !empty($setka_editor_css)) {
          $libraries['setka-editor'] = [
            'js' => $setka_editor_js,
            'css' => [
              'base' => $setka_editor_css,
            ],
          ];
        }
      }
      if (!empty($libraries['setka-styles'])) {
        $setka_styles_css = SettingsForm::getConfigValue($config, $state, 'setka_company_css', TRUE);
        if (!empty($setka_styles_css)) {
          $libraries['setka-styles'] = [
            'css' => [
              'base' => $setka_styles_css,
            ],
          ];
        }
      }
      if (!empty($libraries['setka-public-js'])) {
        $setka_public_js = SettingsForm::getConfigValue($config, $state, 'setka_public_js', TRUE, TRUE);
        if (!empty($setka_public_js)) {
          $libraries['setka-public-js'] = [
            'js' => $setka_public_js,
          ];
        }
      }
    }
  }
}

/**
 * Implements hook_entity_insert().
 */
function setka_editor_entity_insert(EntityInterface $entity) {
  $entityType = $entity->getEntityType()->id();
  $entityId = $entity->id();
  // $setkaEditorUuid needs to put session entity uuid from setka editor field
  // to know which images to attach to entity.
  // See \Drupal\setka_Editor\Validate\SetkaEditorValidate::validate method.
  $setkaEditorUuid = &drupal_static('setkaEditorUuid');
  /** @var \Drupal\Core\TempStore\PrivateTempStore $store */
  $store = \Drupal::service('user.private_tempstore')->get('setka_editor');
  $setkaEditorImages = $store->get('setka_editor_images') ?? [];
  if ($setkaEditorUuid && !empty($setkaEditorImages[$setkaEditorUuid])) {
    /** @var \Drupal\file\FileUsage\DatabaseFileUsageBackend $file_usage */
    $file_usage = \Drupal::service('file.usage');
    $entityImages = File::loadMultiple($setkaEditorImages[$setkaEditorUuid]);
    foreach ($entityImages as $imageFile) {
      $file_usage->add($imageFile, 'setka_editor', $entityType, $entityId);
    }
    unset($setkaEditorImages[$setkaEditorUuid]);
    $store->set('setka_editor_images', $setkaEditorImages);
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function setka_editor_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form['default_value']['widget'][0]['#setka_editor_widget']) {
    $form['default_value']['widget'][0]['#type'] = 'hidden';
    $form['default_value']['widget'][0]['#default_value'] = '';
    $link = Link::fromTextAndUrl('Setka Editor Style Manager', Url::fromUri(SetkaEditorHelper::SETKA_EDITOR_DOMAIN))->toString();
    $form['default_value']['widget'][0]['#suffix'] = '<b>' . t('The default settings of Setka Editor must be managed on the @link pages.',
        ['@link' => $link]) . '</b>';
  }
}

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

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