dfm-8.x-1.16/dfm.module

dfm.module
<?php

/**
 * @file
 * Defines Drupal hooks for dfm module.
 */

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\WidgetInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\dfm\Dfm;
use Drupal\dfm\DfmDrupal;
use Drupal\dfm\DfmFileField;

/**
 * Implements hook_theme().
 */
function dfm_theme() {
  $theme['dfm_page']['variables'] = [];
  return $theme;
}

/**
 * Implements hook_file_download().
 */
function dfm_file_download($uri) {
  if (Dfm::checkFileUri($uri, \Drupal::currentUser())) {
    return [
      'Content-type' => \Drupal::service('file.mime_type.guesser')->guessMimeType($uri),
      'Content-Length' => filesize($uri),
    ];
  }
}

/**
 * Implements hook_field_widget_third_party_settings_form().
 *
 * Returns dfm settings form for supported file widgets.
 */
function dfm_field_widget_third_party_settings_form(WidgetInterface $widget, FieldDefinitionInterface $field_definition, $form_mode, $form, FormStateInterface $form_state) {
  return DfmFileField::widgetSettingsForm($widget, $field_definition, $form_mode, $form, $form_state);
}

/**
 * Implements hook_field_widget_settings_summary_alter().
 *
 * Sets dfm settings summary for supported file widgets.
 */
function dfm_field_widget_settings_summary_alter(&$summary, $context) {
  return DfmFileField::alterWidgetSettingsSummary($summary, $context);
}

/**
 * Implements hook_field_widget_single_element_form_alter().
 *
 * Alters widget forms that have dfm enabled.
 */
function dfm_field_widget_single_element_form_alter(&$element, FormStateInterface $form_state, $context) {
  if ($context['widget']->getThirdPartySetting('dfm', 'enabled')) {
    $scheme = $context['items'][$context['delta']]->getFieldDefinition()->getSetting('uri_scheme');
    if (Dfm::access(\Drupal::currentUser(), $scheme)) {
      $element['#scheme'] = $scheme;
      $class = 'Drupal\dfm\DfmFileField';
      $element['#process'][] = [$class, 'processWidget'];
      // Make sure default value callbacks are added.
      if (empty($element['#file_value_callbacks'])) {
        $info = \Drupal::service('element_info')->getInfo($element['#type']);
        if (!empty($info['#file_value_callbacks'])) {
          $element['#file_value_callbacks'] = $info['#file_value_callbacks'];
        }
      }
      $element['#file_value_callbacks'][] = [$class, 'setWidgetValue'];
    }
  }
}

/**
 * Implements hook_preprocess_dfm_page().
 */
function template_preprocess_dfm_page(&$vars) {
  return Dfm::preprocessDfmPage($vars);
}

/**
 * Implements dfm_PLUGIN_plugin_register() for drupal plugin.
 */
function dfm_drupal_plugin_register($dfm) {
  return DfmDrupal::register($dfm);
}

/**
 * Implements hook_cache_flush().
 */
function dfm_cache_flush() {
  $jsdir = 'public://js';
  if (@is_dir($jsdir)) {
    \Drupal::service('file_system')->scanDirectory(
      $jsdir,
      '/^dfm\./',
      ['callback' => 'unlink', 'recurse' => 0]
    );
  }
}

/**
 * Implements hook_element_info_alter().
 */
function dfm_element_info_alter(&$types) {
  $types['textarea']['#pre_render'][] = 'Drupal\dfm\Dfm::preRenderTextarea';
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Alters editor_link_dialog form.
 */
function dfm_form_editor_link_dialog_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (isset($form['attributes']['href']) && Dfm::access()) {
    $form['attributes']['href']['#attributes']['class'][] = 'dfm-url-input';
    $form['attributes']['href']['#attributes']['data-dfm-type'] = 'link';
    $form['attributes']['href']['#attached']['library'][] = 'dfm/drupal.dfm.editor';
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Alters editor_image_dialog form.
 */
function dfm_form_editor_image_dialog_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (isset($form['attributes']['src']) && Dfm::access()) {
    $form['attributes']['src']['#attributes']['class'][] = 'dfm-url-input';
    $form['attributes']['src']['#attributes']['data-dfm-type'] = 'image';
    $form['attributes']['src']['#attached']['library'][] = 'dfm/drupal.dfm.editor';
  }
}

/**
 * Implements hook_module_implements_alter().
 */
function dfm_module_implements_alter(&$modules, $hook) {
  if ($hook === 'form_alter') {
    // Run editor form_alter hooks before all to make
    // dfm_form_filter_format_form_alter work.
    if (isset($modules['editor'])) {
      $modules = ['editor' => $modules['editor']] + $modules;
    }
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Alters filter_format_form form.
 */
function dfm_form_filter_format_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (isset($form['editor']['settings']['subform']['plugins']['ckeditor5_image']['status'])) {
    $desc = &$form['editor']['settings']['subform']['plugins']['ckeditor5_image']['status']['#description'];
    $str = t('Disable to use Drupella File Manager.');
    $desc = $desc ? $desc . ' ' . $str : $str;
  }
}

/**
 * Implements hook_editor_js_settings_alter().
 */
function dfm_editor_js_settings_alter(&$settings) {
  if (empty($settings['editor']['formats'])) {
    return;
  }
  foreach ($settings['editor']['formats'] as &$conf) {
    if (($conf['editor'] ?? '') === 'ckeditor5') {
      $index = array_search('dfm.DfmSelector', $conf['editorSettings']['plugins']);
      if ($index !== FALSE && !Dfm::access()) {
        array_splice($conf['editorSettings']['plugins'], $index, 1);
      }
    }
  }
}

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

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