marketo_suite-1.0.x-dev/e3_marketo.module

e3_marketo.module
<?php

/**
 * @file
 * Contains e3_marketo module hooks.
 */

use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Render\Element;
use Drupal\Core\Render\Markup;
use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements hook_help().
 */
function e3_marketo_help($route_name, RouteMatchInterface $route_match) {
  return $route_name === 'help.page.e3_marketo' ?
    check_markup(file_get_contents(dirname(__FILE__) . "/README.md")) : NULL;
}

/**
 * Implements hook_entity_extra_field_info().
 */
function e3_marketo_entity_extra_field_info() {
  $content_types = \Drupal::service('entity_type.bundle.info')->getBundleInfo('marketo_form');
  $extra = [];

  if ($content_types) {

    // Create embed pseudo-field for each Marketo Bundle.
    foreach (array_keys($content_types) as $bundle_id) {
      $extra['marketo_form'][$bundle_id]['display']['marketo_form_embed'] = [
        'label' => t('Marketo Form Embed'),
        'description' => t('Embedded Marketo form'),
        'weight' => 0,
        'visible' => TRUE,
      ];
    }
  }

  return $extra;
}

/**
 * Implements hook_theme().
 */
function e3_marketo_theme() {
  return [
    'marketo_form' => [
      'render element' => 'elements',
    ],
    'marketo_form_embed' => [
      'template' => 'marketo-form-embed',
      'variables' => [
        'form_attributes' => [],
        'footer_html' => '',
        'entity_id' => NULL,
      ],
    ],
  ];
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function e3_marketo_theme_suggestions_marketo_form(array $variables) {
  $suggestions = [];
  $marketo_form = $variables['elements']['#marketo_form'];
  $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');

  $suggestions[] = 'marketo_form__' . $sanitized_view_mode;
  $suggestions[] = 'marketo_form__' . $marketo_form->bundle();
  $suggestions[] = 'marketo_form__' . $marketo_form->bundle() . '__' . $sanitized_view_mode;
  $suggestions[] = 'marketo_form__' . $marketo_form->id();
  $suggestions[] = 'marketo_form__' . $marketo_form->id() . '__' . $sanitized_view_mode;

  return $suggestions;
}

/**
 * Prepare variables for marketo_form entity templates.
 */
function e3_marketo_preprocess_marketo_form(array &$variables) {
  $variables['view_mode'] = $variables['elements']['#view_mode'];
  $variables['marketo_form'] = $variables['elements']['#marketo_form'];

  // Override form title if specified.
  if (!empty($variables['marketo_form']->_referringItem)) {
    /** @var \Drupal\Core\Entity\FieldableEntityInterface $parent */
    $parent = $variables['marketo_form']->_referringItem->getEntity();

    if ($parent->hasField('field_marketo_form_title') && !$parent->get('field_marketo_form_title')->isEmpty()) {
      $variables['title_override'] = $parent->get('field_marketo_form_title')->value;
    }
  }

  $route_match = \Drupal::routeMatch();
  if ($route_match->getRouteName() === 'entity.marketo_form.canonical') {
    $marketo_form = $route_match->getParameter('marketo_form');

    if ($variables['marketo_form']->id() === $marketo_form->id()) {
      $variables['page'] = TRUE;
    }
  }

  // Add nojs copy.
  $no_js_message = \Drupal::config('e3_marketo.settings')->get('load_error_message.value');
  if ($no_js_message) {
    $variables['no_js_message'] = ['#markup' => $no_js_message];
  }

  // Helpful $content variable for templates.
  $variables += ['content' => []];
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
}

/**
 * Implements hook_library_info_alter().
 */
function e3_marketo_library_info_alter(&$libraries, $extension) {

  // Set correct Marketo host for the remote marketo forms library.
  if ($extension == 'e3_marketo' && isset($libraries['marketo-forms-remote'])) {
    $marketo_settings = \Drupal::config('e3_marketo.settings');
    $marketo_host = $marketo_settings->get('instance_host');

    if ($marketo_host) {
      $default_key = '//app-xxxx.marketo.com/js/forms2/js/forms2.min.js';
      $libraries['marketo-forms-remote']['js']["{$marketo_host}/js/forms2/js/forms2.min.js"] = $libraries['marketo-forms-remote']['js'][$default_key];
      unset($libraries['marketo-forms-remote']['js'][$default_key]);
    }
  }
}

/**
 * Implements hook_page_attachments().
 */
function e3_marketo_page_attachments(array &$page) {
  // Make sure Munchkin code is loaded on every page.
  if (empty($page['#attached']['library'])) {
    $page['#attached']['library'] = [];
  }

  if (!in_array('e3_marketo/e3-marketo-munchkin', $page['#attached']['library'])) {
    $page['#attached']['library'][] = 'e3_marketo/e3-marketo-munchkin';
  }

  if (empty($page['#attached']['drupalSettings']['marketoForms']['munchkinId'])) {
    $page['#attached']['drupalSettings']['marketoForms']['munchkinId'] = \Drupal::config('e3_marketo.settings')->get('munchkin_id');
  }

  // Attach Marketo Personalization script to every page if applicable.
  $marketo_settings = \Drupal::config('e3_marketo.settings');

  $personalization_embed_code = $marketo_settings->get('personalization_embed_code');
  if ($personalization_embed_code) {
    $page['#attached']['html_head'][] = [
      [
        '#tag' => 'script',
        '#value' => Markup::create($personalization_embed_code),
        '#weight' => -1,
        '#attributes' => [
          'type' => 'text/javascript',
        ],
      ],
      'key',
    ];
  }
}

/**
 * Helper function for the GNY Reports block.
 *
 * Helps on generating the options dynamically for the reports selection field.
 *
 * @param \Drupal\Core\Field\FieldStorageDefinitionInterface $definition
 *   The field storage definition.
 * @param \Drupal\Core\Entity\FieldableEntityInterface|null $entity
 *   (optional) The entity context if known, or NULL if the allowed values are
 *   being collected without the context of a specific entity.
 * @param bool &$cacheable
 *   (optional) If an $entity is provided, the $cacheable parameter should be
 *   modified by reference and set to FALSE if the set of allowed values
 *   returned was specifically adjusted for that entity and cannot not be reused
 *   for other entities. Defaults to TRUE.
 *
 * @return array
 *   The array of allowed values.
 *
 * @throws \Drupal\Component\Plugin\Exception\PluginException
 */
function _e3_marketo_behavior_options(FieldStorageDefinitionInterface $definition, FieldableEntityInterface $entity = NULL, bool &$cacheable = FALSE) : array {
  /** @var \Drupal\e3_marketo\Plugin\SubmissionBehaviorManager $report_manager */
  $report_manager = \Drupal::service('plugin.manager.submission_behavior_manager');
  return $report_manager->getBehaviorOptions();
}

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

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