templates/content/page/crud/import-index.html.twig line 1

Open in your IDE?
  1. <style>
  2.     .mbody {
  3.         display: flex;
  4.         align-items: center;
  5.         justify-content: center;
  6.         background: #B13403;
  7.     }
  8.     .drag-area {
  9.         border: 2px dashed #fff;
  10.         height: 400px;
  11.         width: 700px;
  12.         border-radius: 5px;
  13.         display: flex;
  14.         align-items: center;
  15.         justify-content: center;
  16.         flex-direction: column;
  17.     }
  18.     .drag-area.active {
  19.         border: 2px solid #fff;
  20.     }
  21.     .drag-area .icon {
  22.         font-size: 100px;
  23.         color: #fff;
  24.     }
  25.     .drag-area header {
  26.         font-size: 24px;
  27.         font-weight: 500;
  28.         color: #fff;
  29.     }
  30.     .drag-area span {
  31.         font-size: 22px;
  32.         font-weight: 500;
  33.         color: #fff;
  34.         margin: 10px 0 15px;
  35.     }
  36.     .drag-area button {
  37.         padding: 10px 25px;
  38.         font-size: 20px;
  39.         font-weight: 500;
  40.         border: none;
  41.         outline: none;
  42.         background: #fff;
  43.         color: #5256ad;
  44.         border-radius: 5px;
  45.         cursor: pointer;
  46.     }
  47.     .drag-area img {
  48.         height: 100%;
  49.         width: 100%;
  50.         object-fit: cover;
  51.         border-radius: 5px;
  52.     }
  53. </style>
  54. <div class="modal fade" id="pageModal" tabindex="-1" aria-labelledby="pageModalLabel" aria-hidden="true">
  55.     <div class="modal-dialog modal-dialog-centered">
  56.         <div class="modal-content">
  57.             <div class="modal-header">
  58.                 <h5 class="modal-title" id="pageModalLabel">Importer fichier CSV</h5>
  59.                 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  60.             </div>
  61.             {% set url = ea_url()
  62.                     .setDashboard('App\\Controller\\Admin\\DashboardController')
  63.                     .setController('App\\Controller\\Content\\Page\\PageCrudController')
  64.                     .setAction('import') %}
  65.             <form action="{{url}}" method="POST" id="mform_id" onsubmit="return mySubmitFunction(event)">
  66.                 <div class="modal-body mbody" style="max-height: 48rem;">
  67.                     <div class="drag-area">
  68.                         <div class="icon">
  69.                             <i class="fas fa-cloud-upload-alt"></i>
  70.                         </div>
  71.                         <header>Drag & Drop pour télécharger le fichier</header>
  72.                         <span>OU</span>
  73.                         <button type="button">Parcourir le Fichier</button>
  74.                         <input type="file" name="fileToUpload" id="fileToUpload" accept="text/csv" multiple hidden>
  75.                     </div>
  76.                 </div>
  77.                 <div class="modal-footer">
  78.                     <input type="text" name="mfileToUpload" id="mfileToUpload" hidden>
  79.                     <input type="text" name="mfileNameToUpload" id="mfileNameToUpload" hidden>
  80.                     <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
  81.                     <button type="submit" class="btn btn-primary" onclick="return mySubmitFunctionbtn(event)">Importer</button>
  82.                 </div>
  83.             </form>
  84.         </div>
  85.     </div>
  86. </div>
  87. <script>
  88.     let submit = false;
  89.     // selecting all required elements
  90.     let modalf = document.querySelector(".modal-footer"),
  91.         minput = modalf.querySelector("input"),
  92.         mnameinput = modalf.querySelector("#mfileNameToUpload");
  93.     let dropArea = document.querySelector(".drag-area"),
  94.         dragText = dropArea.querySelector("header"),
  95.         button = dropArea.querySelector("button"),
  96.         input = dropArea.querySelector("input");
  97.     let file; // this is a global variable and we'll use it inside multiple functions
  98.     button.onclick = () => {
  99.         input.click(); // if user click on the button then the input also clicked
  100.     };
  101.     input.addEventListener("change", function () { // getting user select file and [0] this means if user select multiple files then we'll select only the first one
  102.         file = this.files;
  103.         dropArea.classList.add("active");
  104.         //file.forEach(showFile);
  105.         showFile(); // calling function
  106.     });
  107.     // If user Drag File Over DropArea
  108.     dropArea.addEventListener("dragover", (event) => {
  109.         event.preventDefault(); // preventing from default behaviour
  110.         dropArea.classList.add("active");
  111.         dragText.textContent = "Libérer pour télécharger le fichier";
  112.     });
  113.     // If user leave dragged File from DropArea
  114.     dropArea.addEventListener("dragleave", () => {
  115.         dropArea.classList.remove("active");
  116.         dragText.textContent = "Drag & Drop pour télécharger le fichier";
  117.     });
  118.     // If user drop File on DropArea
  119.     dropArea.addEventListener("drop", (event) => {
  120.         event.preventDefault();
  121.         // preventing from default behaviour
  122.         // getting user select file and [0] this means if user select multiple files then we'll select only the first one
  123.         file = event.dataTransfer.files;
  124.         input.files = event.dataTransfer.files;
  125.         //file.forEach(showFile);
  126.         showFile(); // calling function
  127.     });
  128.     function showFile() {
  129.         minput.value = [];
  130.         mnameinput.value = [];
  131.         dragText.innerHTML = '';
  132.         for (let index = 0; index < file.length; index++) {
  133.             //const element = file[index];
  134.             //console.log(file[index]);
  135.             let fileType = file[index].type; // getting selected file type
  136.             //let fileURL = fileReader.result;
  137.             let validExtensions = ["text/csv", "application/vnd.ms-excel"]; // adding some valid image extensions in array
  138.             if (validExtensions.includes(fileType)) { // if user selected file is an image file
  139.                 let fileReader = new FileReader(); // creating new FileReader object
  140.                 fileReader.onload = () => {
  141.                     let fileURL = fileReader.result;
  142.                     let imgTag = `Fichier déposé avec succès  <br>`;
  143.                     filename =  file[index].name;
  144.                     dragText.innerHTML  += filename + ' , ' ;
  145.                     minput.value += "|[|" + fileURL;
  146.                     mnameinput.value += "|[|" + filename;
  147.                 };
  148.                 fileReader.readAsDataURL(file[index]);
  149.                 // submit = true;
  150.             } else {
  151.                 alert("Ceci n'est pas un fichier CSV!");
  152.                 dropArea.classList.remove("active");
  153.                 dragText.textContent = "Drag & Drop pour télécharger le fichier";
  154.                 submit = false;
  155.                 minput.value = [];
  156.                 mnameinput.value = [];
  157.                 break;
  158.             }
  159.         }
  160.     }
  161.     function mySubmitFunctionbtn(e) {
  162.         submit = true;
  163.         document.getElementById("mform_id").submit();
  164.     }
  165.     function mySubmitFunction(e) {
  166.         if (!submit) {
  167.             e.preventDefault();
  168.         }
  169.     }
  170. </script>