md_slider-1.5.4/src/Slider/MDSliderImport.php

src/Slider/MDSliderImport.php
<?php

/**
 * @file
 * Contains \Drupal\md_slider\Slider\MDSliderImport.
 */

namespace Drupal\md_slider\Slider;

use Drupal\md_slider\MDSlide;
use Drupal\md_slider\MDSlider;

use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Messenger;
use Drupal\Core\File;
class MDSliderImport {
  /**
   * List array images from file import
   * @var array
   */
  public $images;

  /**
   * List array slider data from file import
   * @var array
   */
  public $slider_data;


  /**
   * Get Data from file import and save data to array
   * @param $file_path
   * @param $destination_dir
   */  
  public function getDataImport($file_path, $destination_dir) {
    $zip = new \ZipArchive();
    $res = $zip->open($file_path);
    
    if ($res !== true) {
        throw new \Exception("Failed to open ZIP file: {$file_path}");
    }
    
    $images = [];
    $sliders = [];
    
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $stat = $zip->statIndex($i);
        $entry_name = $stat['name'];
        
        // Skip the images directory itself
        if ($entry_name === "images/") {
            continue;
        }
        
        // Process import images
        if (str_starts_with($entry_name, "images/")) {
            $image_name = basename($entry_name);
            
            // Get image content
            $entry_content = $zip->getFromIndex($i);
            
            if ($entry_content === false) {
                continue;
            }
            
            // file_save_data is deprecated in Drupal 9, 10
            $image = \Drupal::hasService('file.repository') 
                ? \Drupal::service('file.repository')->writeData(
                    $entry_content, 
                    "{$destination_dir}/{$image_name}", 
                    \Drupal\Core\File\FileSystemInterface::EXISTS_RENAME
                  )
                : file_save_data(
                    $entry_content, 
                    "{$destination_dir}/{$image_name}", 
                    \Drupal\Core\File\FileSystemInterface::EXISTS_RENAME
                  );
            
            if ($image !== false) {
                $images[$image_name] = $image;
            }
        }
        elseif (str_contains($entry_name, "md_slider_")) {
            // Get slider data
            $slider_content = $zip->getFromIndex($i);
            if ($slider_content !== false) {
                $sliders[] = $slider_content;
            }
        }
    }
    
    $zip->close();
    
    $this->images = $images;
    $this->slider_data = $sliders;
  }
  
  /**
   * Import data form file import
   *
   */
  public function importDataSlider() {
    $sliders = $this->slider_data;
    $images = $this->images;
    $md_slider = new MDSlider();
    $md_slide = new MDSlide();

    foreach ($sliders as $slider_data) {
      // Get slider data
      $slider_data = unserialize($slider_data);
      $slider = $slider_data["slider"];
      $slides = $slider_data["slides"];

      // Save slider to database
      $slider->id = NULL;
      $md_slider->title = $slider->title;
      $md_slider->machine_name = $slider->machine_name;
      if ($md_slider::isSlider($slider->machine_name)){
        $md_slider->machine_name = "{$slider->machine_name}-".time();
        $md_slider->title = "{$slider->title}-".time();
      }
      $md_slider->description = $slider->description;
      $md_slider->settings = $slider->settings;
      $slid = $md_slider->saveDataSlider();
      $style = array();
      if (!$slid) {
		\Drupal::messenger()->addMessage($this->t("MD Slider: Import unsuccessful!"),MessengerInterface::TYPE_ERROR);
        //drupal_set_message(t("MD Slider: Import unsuccessful!"), "error");
        return;
      }

      // Save slides to database
      foreach ($slides as $slide) {
        $md_slide->sid = NULL;
        $md_slide->slid = $slid;

        // Get background and thumbnail settings after import
        if ($slide->settings['background_image'] != -1 && isset($images[$slide->settings['background_image']]))
          $slide->settings['background_image'] = $images[$slide->settings['background_image']]->id();
        else
          $slide->settings['background_image'] = -1;

        if ($slide->settings['custom_thumbnail'] != -1 && isset($images[$slide->settings['custom_thumbnail']]))
          $slide->settings['custom_thumbnail'] = $images[$slide->settings['custom_thumbnail']]->id();
        else
          $slide->settings['custom_thumbnail'] = -1;

        // Get file id of image and video item
        foreach ($slide->layers as &$layer) {
          switch ($layer["type"]) {
            case "video":
              if ($layer['fileid'] && isset($images[$layer['fileid']]))
                $layer['fileid'] = $images[$layer['fileid']]->id();
              break;

            case "image":
              if ($layer["fileid"] && isset($images[$layer["fileid"]]))
                $layer["fileid"] = $images[$layer["fileid"]]->id();
              break;
          }
        }
        $md_slide->position = $slide->position;
        $md_slide->settings = $slide->settings;
        $md_slide->layers = $slide->layers;
        $sid = $md_slide->saveDataSlider();
        foreach ($md_slide->layers as $key => &$layer) {
          $index = array($slid, $sid, $key);
          $css = new MDSliderRenderCss((object) $layer);
          $style = array_merge($style, $css->getCSS($index, $layer));
        }
      }
      MDSliderRenderCss::saveFileCss($md_slider->machine_name, $style);
    }
  }
}

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

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