widget_engine-8.x-1.2/widget_engine.module

widget_engine.module
<?php

/**
 * @file
 * Contains widget_engine.module.
 */

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Ajax\InvokeCommand;
use Drupal\Core\Render\Element;
use Drupal\image\Entity\ImageStyle;

/**
 * Load needed for module includes.
 */
require_once 'includes/widget_engine.theme.inc';

/**
 * Implements hook_help().
 */
function widget_engine_help($route_name, RouteMatchInterface $route_match) {
  $output = '';
  switch ($route_name) {
    // Main module help for the widget_engine module.
    case 'help.page.widget_engine':
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Widget engine module') . '</p>';
      break;

    default:
  }

  return $output;
}

/**
 * Returns a list of available node type names.
 *
 * This list can include types that are queued for addition or deletion.
 *
 * @return string[]
 *   An array of node type labels, keyed by the node type name.
 */
function widget_engine_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')->getBundleInfo('widget'));
}

/**
 * Implements hook_menu_links_discovered_alter().
 */
function widget_engine_menu_links_discovered_alter(&$links) {
  $links['entity.widget.add_page']['parent'] = 'system.admin_content';
  // Add links for each widget type.
  foreach (widget_engine_type_get_names() as $machine_name => $label) {
    $links['entity.widget.add_form' . $machine_name] = array(
      'title' => $label,
      'route_name' => 'entity.widget.add_form',
      'menu_name' => 'admin',
      'parent' => 'entity.widget.add_page',
      'route_parameters' => array('widget_type' => $machine_name),
    );
  }
}

/**
 * Implements hook_library_info_alter().
 */
function widget_engine_library_info_alter(&$libraries, $extension) {
  // Optionally use the Libraries module to determine our library paths.
  if ($extension == 'widget_engine'
    && \Drupal::moduleHandler()->moduleExists('libraries')) {
    // Include html2canvas library.
    $html2canvas_path = libraries_get_path('html2canvas') . '/dist/html2canvas.min.js';
    $libraries['html2canvas']['js'] = ['/' . $html2canvas_path => ['minified' => 'true']];
    // Include es6-promise library.
    $es6_promise_path = libraries_get_path('es6-promise') . '/dist/es6-promise.auto.min.js';
    $libraries['es6-promise']['js'] = ['/' . $es6_promise_path => ['minified' => 'true']];
  }
}

/**
 * Implements hook_ajax_render_alter().
 */
function widget_engine_ajax_render_alter(&$commands) {
  $selector = '.ief-widget-table';
  $command = new InvokeCommand($selector, 'trigger', ['afterSaveWidget']);
  $commands[] = $command->render();
}

/**
 * Implements hook_entity_type_build().
 */
function widget_engine_entity_type_build(array &$entity_types) {
  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
  if (isset($entity_types['widget'])) {
    $entity_types['widget']->setHandlerClass('inline_form', '\Drupal\widget_engine\Form\WidgetInlineForm');
  }
}

/**
 * Implements hook_theme_registry_alter().
 */
function widget_engine_theme_registry_alter(&$theme_registry) {
  $theme_registry['inline_entity_form_entity_table']['function'] = 'theme_widget_engine_form_entity_table';
}

/**
 * Themes the table showing existing entity references in the widget.
 */
function theme_widget_engine_form_entity_table($variables) {
  $renderer = \Drupal::service('renderer');
  $form = $variables['form'];
  $entity_type = $form['#entity_type'];

  $fields = $form['#table_fields'];
  $has_tabledrag = \Drupal::entityTypeManager()->getHandler($entity_type, 'inline_form')->isTableDragEnabled($form);

  // Sort the fields by weight.
  uasort($fields, '\Drupal\Component\Utility\SortArray::sortByWeightElement');

  $header = [];
  if ($has_tabledrag) {
    $header[] = ['data' => '', 'class' => ['ief-tabledrag-header']];
    $header[] = ['data' => t('Sort order'), 'class' => ['ief-sort-order-header']];
  }
  // Add header columns for each field.
  $first = TRUE;
  foreach ($fields as $field_name => $field) {
    $column = ['data' => $field['label']];
    // The first column gets a special class.
    if ($first) {
      $column['class'] = ['ief-first-column-header'];
      $first = FALSE;
    }
    // Hide wid header label.
    if ($field_name == 'wid') {
      $column['class'][] = 'hidden';
    }
    $header[] = $column;
  }
  $header[] = t('Operations');

  // Build an array of entity rows for the table.
  $rows = [];
  foreach (Element::children($form) as $key) {
    if (empty($form[$key]['#entity'])) {
      continue;
    }

    /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
    $entity = $form[$key]['#entity'];
    // Add new class to row for widget entity type.
    $widget_row_classes = '';

    // Add image rebuild class to row.
    if (!empty($form[$key]['#image_rebuild'])) {
      $widget_row_classes .= 'ief-widget-rebuild-img ';
    }

    // Add row uniq row class.
    if ($entity_type == 'widget') {
      $wid = $entity->id();
      $widget_row_classes .= 'ief-row-widget-' . $wid;
    }
    $row_classes = ["ief-row-entity {$widget_row_classes}"];
    $cells = [];
    if ($has_tabledrag) {
      $cells[] = ['data' => '', 'class' => ['ief-tabledrag-handle']];
      $cells[] = $renderer->render($form[$key]['delta']);
      $row_classes[] = 'draggable';
    }
    // Add a special class to rows that have a form underneath, to allow
    // for additional styling.
    if (!empty($form[$key]['form'])) {
      $row_classes[] = 'ief-row-entity-form';
    }

    foreach ($fields as $field_name => $field) {
      $data = '';
      if ($field['type'] == 'label') {
        $data = $variables['form'][$key]['#label'];
      }
      elseif ($field['type'] == 'field' && $entity->hasField($field_name)) {
        $display_options = ['label' => 'hidden'];
        if (isset($field['display_options'])) {
          $display_options += $field['display_options'];
        }
        $data = $entity->get($field_name)->view($display_options);

        // Add image style.
        if ($field_name == 'widget_preview') {
          $data = widget_engine_build_preview_image($data);
        }
      }
      elseif ($field['type'] == 'callback') {
        $arguments = [
          'entity' => $entity,
          'variables' => $variables,
        ];
        if (isset($field['callback_arguments'])) {
          $arguments = array_merge($arguments, $field['callback_arguments']);
        }

        $data = call_user_func_array($field['callback'], $arguments);
      }

      // Hide wid column.
      $cell_classes = [
        'inline-entity-form-' . $entity_type . '-' . $field_name,
      ];
      if ($field_name == 'wid') {
        $cell_classes[] = 'hidden';
      }
      $cells[] = ['data' => $data, 'class' => $cell_classes];
    }

    // Add the buttons belonging to the "Operations" column.
    $cells[] = $renderer->render($form[$key]['actions']);
    // Create the row.
    $rows[] = ['data' => $cells, 'class' => $row_classes];
    // If the current entity array specifies a form, output it in the next row.
    if (!empty($form[$key]['form'])) {
      $row = [
        ['data' => $renderer->render($form[$key]['form']), 'colspan' => count($fields) + 1],
      ];
      $rows[] = [
        'data' => $row,
        'class' => ['ief-row-form'],
        'no_striping' => TRUE,
      ];
    }
  }

  if (!empty($rows)) {
    $tabledrag = [];
    if ($has_tabledrag) {
      $tabledrag = [
        [
          'action' => 'order',
          'relationship' => 'sibling',
          'group' => 'ief-entity-delta',
        ],
      ];
    }

    $table_classes = ($entity_type == 'widget') ? 'ief-widget-table' : '';
    $table = [
      '#type' => 'table',
      '#header' => $header,
      '#rows' => $rows,
      '#attributes' => [
        'id' => 'ief-entity-table-' . $form['#id'],
        'class' => ["ief-entity-table {$table_classes}"],
      ],
      '#tabledrag' => $tabledrag,
    ];

    return $renderer->render($table);
  }
}

/**
 * Add image style to widget preview field.
 */
function widget_engine_build_preview_image($data) {
  // Check image style.
  if (!$style_preview = ImageStyle::load('widget_preview')) {
    $style_preview = ImageStyle::load('large');
  }

  // Set new image style.
  if (is_object($style_preview)) {
    $data[0]['#image_style'] = $style_preview->get('name');
  }

  return $data;
}

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

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