md_slider-1.5.4/md_slider.module

md_slider.module
<?php

/**
 * @file
 * Contains md_slider.module..
 */

use Drupal\Component\Serialization\Json;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Drupal\md_slider\MDCommon;
use Drupal\md_slider\MDSliderDataBase;
use Drupal\file\Entity\File;
use Drupal\Core\Template\Attribute;
use Drupal\image\Entity\ImageStyle;

/**
 * Implements hook_help().
 */
function md_slider_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the md_slider module.
    case 'help.page.md_slider':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('My Awesome Module') . '</p>';
      return $output;

    default:
  }
}

/**
 * Implements hook_page_attachments().
 */
function md_slider_page_attachments(array &$attachments) {
}
/**
 * Implements hook_theme().
 */
function md_slider_theme($existing, $type, $theme, $path) {
  $theme = [];

  $theme['slider_edit_form'] = array(
    'variables' => array(
      'slid' => NULL,
      'settings' => NULL,
    ),
    'path' => $path . '/templates/backend',
  );

  $theme['admin_slides_render'] = array(
    'variables' => array(
      'slid' => NULL,
      'settings' => NULL,
      'slides' => NULL
    ),
    'path' => $path . '/templates/backend',
  );

  $theme['admin_layers_render'] = array(
    'variables' => array(
      'layers' => NULL
    ),
    'path' => $path . '/templates/backend',
  );

  $theme['slide_settings'] = array(
    'variables' => array(),
    'path' => $path . '/templates/backend',
  );

  $theme['video_setting_form'] = array(
    'variables' => array(
      'show_change' => NULL,
    ),
    'path' => $path . '/templates/backend',
  );


  //Frontend
  $theme['md_slider'] = array(
    'variables' => array(
      'slider_name' => NULL,
      'slid' => NULL,
      'settings' => NULL,
    ),
    'path' => $path . '/templates/frontend',
  );

  $theme['front_slide_render'] = array(
    'variables' => array(
      'settings' => NULL,
      'layers' => NULL,
      'index' => NULL,
      'slider_settings' => NULL,
      'slid' => NULL,
      'sid' => NULL
    ),
    'path' => $path . '/templates/frontend',
  );

  $theme['front_layers_render'] = array(
    'variables' => array(
      'layer' => NULL,
      'index' => NULL,
      'video_on_lightbox' => NULL,
    ),
    'path' => $path . '/templates/frontend',
  );


  return $theme;
}


function template_preprocess_slide_settings(&$vars) {
  global $base_url;
  $path = \Drupal::hasService('extension.path.resolver') ? 
    \Drupal::service('extension.path.resolver')->getPath('module', 'md_slider') : 
    drupal_get_path('module', 'md_slider');
  $vars['preview_1'] = $base_url . '/' . $path . '/assets/images/preview-transition-1.jpg';
  $vars['preview_2'] = $base_url . '/' . $path . '/assets/images/preview-transition-2.jpg';
}

function template_preprocess_slider_edit_form(&$vars) {
  $slid = $vars['slid'];
  $settings = $vars['settings'];
  $entry = array(
    'slid' => $slid
  );
  $sort = array(
    'position' => 'ASC'
  );
  $slides = MDSliderDataBase::loadAll('md_slides', $entry, $sort);
  $google_fonts = $settings['dmf_google'];
  if ($google_fonts != '') {
    $fonts = MDCommon::getGoogleWebFont($google_fonts);
    $vars['fonts'] = $fonts;
  }
  else {
    $vars['fonts'] = array();
  }
  $vars['in_effect'] = MDCommon::$in_effects;
  $vars['out_effect'] = MDCommon::$out_effects;
  $vars['slides'] = array(
    '#theme' => 'admin_slides_render',
    '#slid' => $slid,
    '#settings' => $settings,
    '#slides' => $slides
  );

}

function template_preprocess_admin_slides_render(&$vars) {
  $slides = $vars['slides'];
  $settings = $vars['settings'];

  foreach ($slides as $index => $slide) {
    $slide->slideSettings = unserialize($slide->settings);
    $slide->slideSettings += array('slide_id' => $slide->sid);
    $slide->jsonSlideSettings = JSON::encode($slide->slideSettings);
    $slide->contentLayer = array(
      '#theme' => 'admin_layers_render',
      '#layers' => unserialize($slide->layers)
    );
    if ($slide->slideSettings['background_image'] != -1) {
      $file = File::load($slide->slideSettings['background_image']);
      if ($file) {        
		$url = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($file->getFileUri()) : 
			file_create_url($file->getFileUri());
        $slide->background_url = $url;
        if ($settings['create_bg_imgstyle'] && $settings['bg_style'] != 'none')
          $slide->background_url = ImageStyle::load($settings['bg_style'])->buildUrl($file->getFileUri());
      }
    }
    $slide->background_style = array("height: {$settings["height"]}px");
    if (!$settings["full_width"]) {
      $slide->background_style[] = "width:{$settings["width"]}px";
    }
    if (empty($slide->background_url) && isset($slide->slideSettings['background_color']) && $slide->slideSettings['background_color'] != "") {
      $slide->background_style[] = "background-color: {$slide->slideSettings['background_color']}";
    }
    $slides[$index] = $slide;
  }
  $slides = $vars['slides'];
}

/**
 * @param $vars
 */
function template_preprocess_admin_layers_render(&$vars) {
  $layers = $vars['layers'];
  foreach ($layers as $index => $layer) {
    $data = array();
    foreach ($layer as $attr => $value) {
      if ($attr == 'link') {
        $link_val = Json::encode($value);
        $data[] = "data-link='{$link_val}'";
        continue;
      }
      if ($attr == 'thumb' && !empty($value) && isset($layer['fileid'])) {
        $image = File::load($layer['fileid']);
        if ($image) {
		  $thumb = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($image->getFileUri()) : 
			file_create_url($image->getFileUri());
          $data[] = "data-thumb='{$thumb}'";
        }
        else {
          $data[] = "data-thumb=''";
        }
        continue;
      }
      if ($attr == "title") {
        $value = htmlentities($value, ENT_QUOTES, "UTF-8");
      }
      $data[] = "data-{$attr}=\"{$value}\"";
    }
    $layer['layer_data'] = implode(' ', $data);

    if ($layer['type'] == 'image') {
      $layer['file_url'] = '';
      if (isset($layer['fileid'])) {
        if ($image = File::load($layer['fileid'])) {
		  $layer['file_url'] = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($image->getFileUri()) : 
			file_create_url($image->getFileUri());
        }
      }
    }

    $style = array();
    $style[] = "z-index: {$layer['zindex']};";
    $style[] = "width: {$layer['width']}px;";
    $style[] = "height: {$layer['height']}px;";
    $style[] = "top: {$layer['top']}px;";
    $style[] = "left: {$layer['left']}px;";

    if ($layer["type"] == "text" && isset($layer["fontweight"]) && $layer["fontweight"] != "") {
      if (is_numeric($layer["fontweight"]) === FALSE) {
        $font_w = substr($layer["fontweight"], 0, 3);
        $font_s = substr($layer["fontweight"], 3);
        $style[] = "font-weight: {$font_w};\n";
        $style[] = "font-style: {$font_s};\n";
      }
      else {
        $style[] = "font-weight: {$layer["fontweight"]};\n";
      }
    }
    $layer['layer_style'] = implode(' ', $style);
    $layers[$index] = $layer;
  }

  $vars['layers'] = $layers;
}

function template_preprocess_md_slider(&$vars) {
  $settings = $vars['settings'];
  $entry = array(
    'slid' => $vars['slid']
  );
  $sort = array(
    'position' => 'ASC'
  );
  $slides = MDSliderDataBase::loadAll('md_slides', $entry, $sort);
  $contentSlides = array();
  $contentSlides[] = [
    '#attached' => [
      'library' => "md_slider/md_slider.slider.{$vars['slider_name']}"
    ]
  ];
  foreach ($slides as $index => $slide) {
    $contentSlides[] = array(
      '#theme' => 'front_slide_render',
      '#index' => 'md-layer-' . $vars['slid'] . '-' . $slide->sid,
      '#slider_settings' => $settings,
      '#slid' => $vars['slid'],
      '#settings' => unserialize($slide->settings),
      '#layers' => unserialize($slide->layers),
    );
  }
  $vars['contentSlides'] = $contentSlides;
  $vars['attributes']['style'] = 'min-height:' . $settings['height'] . 'px';
  //print "<pre>";print_r($settings);print "</pre>";
  $style = ImageStyle::load($settings['thumb_style']);

  if ( !empty($style) ) {
	  $effects = $style->get('effects'); 
	  foreach($effects as $effect){
		if(isset($effect['data']) && isset($effect['data']['width'])){
		  $vars['attributes']['data-thumb-height'] = $effect['data']['height'];
		  $vars['attributes']['data-thumb-width'] = $effect['data']['width'];
		  break;
		}
	  }  
  }
}

function template_preprocess_front_slide_render(&$vars) {
  $settings = $vars['settings'];
  $slider_settings = $vars['slider_settings'];
  $layers = $vars['layers'];
  $contentLayers = array();
  $thumb_style = $slider_settings['thumb_style'];
  foreach ($layers as $index => $layer) {
    $contentLayers[] = array(
      '#theme' => 'front_layers_render',
      '#index' => $vars['index'] . '-' . $index,
      '#layer' => $layer,
      '#video_on_lightbox' => $slider_settings['videobox']
    );
  }
  $vars['contentLayers'] = $contentLayers;
  $vars['attributes']['data-timeout'] = $settings['timelinewidth'] . '00';
  // Add data for slide settings thumbnail alt and background image alt
  if (!isset($settings["background_image_alt"])) {
    $settings["background_image_alt"] = "";
  }
  if (!isset($settings["custom_thumbnail_alt"])) {
    $settings["custom_thumbnail_alt"] = "";
  }
  // Add data transitions for slide
  if (!empty($settings["transitions"])) {
    $vars['attributes']['data-transition'] = implode(",", $settings["transitions"]);
  }
  $vars['background_style'] = "";
  if ($settings['background_image'] != -1 && ($background = File::load($settings['background_image']))) {
    // Load background image
	$vars['background_url'] = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($background->getFileUri()) : 
			file_create_url($background->getFileUri());
    if ($slider_settings['create_bg_imgstyle'] && $slider_settings['bg_style'] != 'none') {
      $vars['background_url'] = ImageStyle::load($slider_settings['bg_style'])->buildUrl($background->getFileUri());
    }
    // Load thumbnail image
    $thumb = $background;

    if ($settings['custom_thumbnail'] != -1) {
      $thumb = File::load($settings['custom_thumbnail']);
    }
    if ($thumb_style == 'none')
      $data_thumb = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($thumb->getFileUri()) : 
			file_create_url($thumb->getFileUri());
    else
      $data_thumb = ImageStyle::load($thumb_style)->buildUrl($thumb->getFileUri());
    if ($data_thumb)
      $vars['attributes']['data-thumb'] = $data_thumb;

    // Load thumbnail alt
    $thumb_alt = isset($settings["background_image_alt"]) ? $settings["background_image_alt"] : "";
    if (isset($settings["custom_thumbnail_alt"])) {
      $thumb_alt = $settings["custom_thumbnail_alt"];
    }

    $vars['attributes']['data-thumb-type'] = 'image';
    $vars['attributes']['data-thumb-alt'] = $thumb_alt;
  }
  else {
    // use background color
    if (!$slider_settings["responsive"]) {
      $style = array("height: {$slider_settings["height"]}px");
    }
    else {
      $style = array("height: 100%");
    }

    if (!$slider_settings["full_width"] && !$slider_settings["responsive"]) {
      $style[] = "width: {$vars["slider_settings"]["width"]}px";
    }
    else {
      $style[] = "width: 100%";
    }

    if ($settings["background_color"] != "") {
      if (strpos($settings["background_color"], "rgba") !== FALSE) {
        $color = explode(",", $settings["background_color"]);
        unset($color["3"]);
        $color = implode(",", $color) . ")";
        $color = str_replace("rgba", "rgb", $color);
        $style[] = "background-color: {$color}";
      }
      $style[] = "background-color: {$settings["background_color"]}";
    }
    $vars['background_style'] = implode("; ", $style);

    if ($settings['custom_thumbnail'] != -1) {
      if ($thumb = File::load($settings['custom_thumbnail'])) {
        if ($thumb_style == 'none')
	      $data_thumb = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($thumb->getFileUri()) : 
			file_create_url($thumb->getFileUri());
        else
          $data_thumb = ImageStyle::load($thumb_style)->buildUrl($thumb->getFileUri());

        // Process data for thumbnail alt
        $thumb_alt = "";
        if (isset($settings["custom_thumbnail_alt"]) && $settings["custom_thumbnail_alt"]) {
          $thumb_alt = $settings["custom_thumbnail_alt"];
        }
        $vars['attributes']['data-thumb-alt'] = $thumb_alt;
        if ($data_thumb)
          $vars['attributes']['data-thumb'] = $data_thumb;
      }
    }
    else {
      $vars['attributes']['data-thumb-type'] = 'color';
      $thumb_height = '75';
      $thumb_width = '100';
      if ($thumb_style != 'none'){
        $effect = ImageStyle::load($slider_settings['thumb_style'])->getEffects()->getConfiguration();
        foreach ($effect as $index => $item) {
          if (isset($item['data']['width']))
            $thumb_height = $item['data']['width'];
          if (isset($item['data']['height']))
            $thumb_height = $item['data']['height'];
        }
      }

      $thumb_data = array(
        "height: {$thumb_height}px",
        "width: {$thumb_width}px",
      );

      if ($settings["background_color"] != "") {
        if (strpos($settings["background_color"], "rgba") !== FALSE) {
          $color = explode(",", $settings["background_color"]);
          unset($color["3"]);
          $color = implode(",", $color) . ")";
          $color = str_replace("rgba", "rgb", $color);
          $thumb_data[] = "background-color: {$color}";
        }
        $thumb_data[] = "background-color: {$settings["background_color"]}";
      }

      $thumb_data = implode("; ", $thumb_data);
      $vars['attributes']['data-thumb'] = $thumb_data;
    }
  }

  $vars['elements_height'] = $vars['slider_settings']['height'];
}


function template_preprocess_front_layers_render(&$vars) {
  $layer = $vars['layer'];
  if (!isset($layer["title"])) {
    $layer["title"] = "";
  }

  // create data attributes for layer
  $element_full = array_merge(MDCommon::$default_layers[$layer['type']], $layer);

  $vars['starttime'] = $element_full['starttime'];
  $vars['stoptime'] = $element_full['stoptime'];

  $vars['attributes']['data-x'] = $element_full['left'];
  $vars['attributes']['data-y'] = $element_full['top'];
  $vars['attributes']['data-width'] = $element_full['width'];
  $vars['attributes']['data-height'] = $element_full['height'];
  $vars['attributes']['data-start'] = $element_full['starttime'];
  $vars['attributes']['data-stop'] = $element_full['stoptime'];
  if ($element_full['startani'] != 'none' && $element_full['startani'] != '') {
    $vars['attributes']['data-easein'] = $element_full['startani'];
  }
  if ($element_full['stopani'] != 'none' && $element_full['stopani'] != '') {
    $vars['attributes']['data-easeout'] = $element_full['stopani'];
  }
  if (isset($element_full['paddingtop'])) {
    $vars['attributes']['data-paddingtop'] = $element_full['paddingtop'];
  }
  if (isset($element_full['paddingright'])) {
    $vars['attributes']['data-paddingright'] = $element_full['paddingright'];
  }
  if (isset($element_full['paddingbottom'])) {
    $vars['attributes']['data-paddingbottom'] = $element_full['paddingbottom'];
  }
  if (isset($element_full['paddingleft'])) {
    $vars['attributes']['data-paddingleft'] = $element_full['paddingleft'];
  }


  # Get image url for image layer
  if ($layer['type'] == 'image') {
    $layer['url'] = '';
    if (isset($layer['fileid'])) {
      $image = File::load($layer['fileid']);
      if ($image) {        
		$layer['url'] = \Drupal::hasService('file_url_generator') ? 
			\Drupal::service('file_url_generator')->generateAbsoluteString($image->getFileUri()) : 
			file_create_url($image->getFileUri());
      }
    }
  }

  if ($layer['type'] == 'video') {
    $layer['url'] = MDCommon::getVideoUrl($layer['fileid']);
    $display_mode = isset($layer['displayMode']) ? $layer['displayMode'] : ($vars['video_on_lightbox'] ? 'lightbox' : 'inline');
    $vars['attributes']['data-display'] = $display_mode;
  }

  $class = array('md-object', $vars['index']);
  if (isset($layer['style']) && $layer['style'] != 'none') {
    $class[] = $layer['style'];
  }
  if (isset($layer['mdtclass']) && $layer['mdtclass'] != '') {
    $class[] = $layer['mdtclass'];
  }
  $vars['class'] = implode(' ', $class);

  # Generate layer link
  if (isset($layer['link']) && is_array($layer['link'])) {
    $link = $layer['link'];
    if (strpos($link['value'], 'http') === FALSE && strpos($link["value"], "#") !== 0) {
      $url = parse_url($link['value']);
      $options = array();
      $options['absolute'] = TRUE;
      if (isset($url['fragment'])) {
        $options['fragment'] = $url['fragment'];
      }

      if (isset($url['query'])) {
        parse_str($url['query'], $query);
        $options['query'] = $query;
      }
      $vars["link"] = Url::fromUserInput('/' .$url['path'], $options)->toString();
    }
    else {
      $vars["link"] = $link['value'];
    }
  }
  if (isset($layer["opacity"]) && intval($layer["opacity"]) != 100) {
    $percent = intval($layer["opacity"]) / 100;
    $layer["opacity"] = "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity={$layer["opacity"]})'; filter: alpha(opacity={$layer["opacity"]}); opacity: {$percent};";
  }
  else {
    $layer["opacity"] = "";
  }
  $vars['layer'] = $layer;
}


/**
 * Implements hook_library_info_alter().
 */
function md_slider_library_info_alter(&$libraries, $extension) {
  if ($extension == 'md_slider') {
    $destination_dir = 'public://md-slider-css';
    $sliders = MDSliderDataBase::loadAll('md_sliders');

    foreach ($sliders as $index => $slider) {
      $settings = unserialize($slider->settings);
      $libraries['md_slider.slider.' . $slider->machine_name]['css']['component'][$settings['dmf_google']] = array(
        'type' => 'external'
      );

      $file_uri = $destination_dir . "/md-slider-{$slider->machine_name}-layers.css";	  
	  $file_url = \Drupal::hasService('file_url_generator') ? 
	   \Drupal::service('file_url_generator')->transformRelative($file_uri) : 
	   file_url_transform_relative($file_uri);
      $libraries['md_slider.slider.' . $slider->machine_name]['css']['component'][$file_url] = array();
    }
  }
}

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

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