video.form.add.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. $data = [];
  3. $uploadBytes = fichier::iniSizeToBytes();
  4. $postBytes = fichier::iniSizeToBytes();
  5. $maxBytes = min($uploadBytes, $postBytes);
  6. ?>
  7. <nav aria-label="breadcrumb" class="ariane">
  8. <ol class="breadcrumb" style="border-radius: 0 0 5px 5px; padding:5px 10px;">
  9. <li class="breadcrumb-item"><a href="/">Toutes les vidéos</a></li>
  10. <li class="breadcrumb-item active" aria-current="page"><?php echo isset($data["title"]) ? $data["title"] : "Ajouter une vidéo"; ?></li>
  11. </ol>
  12. </nav>
  13. <div class='container' style="position: relative;">
  14. <form method="post" id="uploadForm" enctype="multipart/form-data">
  15. <input type="hidden" name="from" value="video.form.add">
  16. <div class='form-group' id="progressBarBox" style="display:none;">
  17. <span id="progressPercent">0%</span>
  18. <progress id="progressBar" value="0" max="100" style="width: 100%; display: none;"></progress>
  19. </div>
  20. <div class='form-group SubmitElement'>
  21. <label for='videoFile'>Charger la vidéo</label>
  22. <div class='custom-file'>
  23. <input type='file' name='videoFile' class='custom-file-input' id='videoFile' accept='video/*' required>
  24. <label class='custom-file-label' for='videoFile'>Choisir un fichier</label>
  25. </div>
  26. <!-- Champ caché pour indiquer la taille max en octets (valeur utilisée côté serveur si présent) -->
  27. <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxBytes; ?>">
  28. <small class="form-text text-muted">
  29. Taille max autorisée : <?php echo fichier::bytesToHuman($maxBytes); ?>
  30. </small>
  31. </div>
  32. <div class='form-group' id="previewFileName" style="display:none;">
  33. <label for='selectedFileName'>Nom de la vidéo sélectionnée</label>
  34. <input type='text' class='form-control' id='selectedFileName' readonly>
  35. </div>
  36. <div class='form-group SubmitElement'>
  37. <label>Statut de la vidéo</label>
  38. <div class='custom-control custom-radio'>
  39. <input type='radio' id='activeStatus' name='videoStatus' class='custom-control-input' value='1' <?php echo ((isset($data["active"]) and $data["active"] == 1) or !isset($data["active"])) ? "checked" : NULL; ?>>
  40. <label class='custom-control-label' for='activeStatus'>Accessible à tous</label>
  41. </div>
  42. <div class='custom-control custom-radio'>
  43. <input type='radio' id='inactiveStatus' name='videoStatus' class='custom-control-input' value='0' <?php echo (isset($data["active"]) and $data["active"] == 0) ? "checked" : NULL; ?>>
  44. <label class='custom-control-label' for='inactiveStatus'>Non accessible</label>
  45. </div>
  46. </div>
  47. <div class='form-group'>
  48. <label for='videoName'>Titre de la vidéo</label>
  49. <input type='text' class='form-control' id='videoName' name="videoName" value="<?php echo isset($data["title"]) ? $data["title"] : NULL; ?>" required>
  50. </div>
  51. <div class='form-group'>
  52. <label for='dateEvent'>Jour de l'évènement</label>
  53. <input class='form-control' type="date" id="dateEvent" name="dateEvent" value="<?php echo isset($data["dateEvent"]) ? $data["dateEvent"] : NULL; ?>" required>
  54. </div>
  55. <div class='form-group SubmitElement'>
  56. <button type='submit' class='btn btn-primary btn-lg'>Enregistrer la vidéo</button>
  57. </div>
  58. </form>
  59. </div>
  60. <style>
  61. #progressBar {
  62. height: 20px;
  63. }
  64. #progressPercent {
  65. font-weight: bold;
  66. }
  67. </style>
  68. <script>
  69. document.getElementById('videoFile').addEventListener('change', function() {
  70. var fileName = this.files[0].name;
  71. document.getElementById('selectedFileName').value = fileName;
  72. document.getElementById('previewFileName').style.display = 'block';
  73. });
  74. document.getElementById('uploadForm').addEventListener('submit', function(event) {
  75. document.getElementById('progressBarBox').style.display = 'block';
  76. var elements = document.getElementsByClassName('SubmitElement');
  77. for (var i = 0; i < elements.length; i++) {
  78. elements[i].style.display = 'none';
  79. }
  80. event.preventDefault();
  81. var form = document.getElementById('uploadForm');
  82. var fileInput = document.getElementById('videoFile');
  83. var progressBar = document.getElementById('progressBar');
  84. var progressPercent = document.getElementById('progressPercent');
  85. progressBar.style.display = 'block';
  86. var formData = new FormData(form);
  87. var xhr = new XMLHttpRequest();
  88. xhr.open('POST', '/edit/add', true);
  89. xhr.upload.onprogress = function(event) {
  90. if (event.lengthComputable) {
  91. var percentComplete = (event.loaded / event.total) * 100;
  92. progressBar.value = percentComplete;
  93. progressPercent.textContent = Math.round(percentComplete) + '%';
  94. }
  95. };
  96. xhr.onload = function() {
  97. if (xhr.status === 200) {
  98. try {
  99. // Récupérer la réponse JSON contenant l'ID
  100. var response = JSON.parse(xhr.responseText);
  101. var videoId = response.id;
  102. if (videoId) {
  103. // Rediriger vers /edit/ID avec l'ID récupéré
  104. window.location.href = "/edit/" + videoId;
  105. } else {
  106. alert("Erreur : ID non trouvé dans la réponse.");
  107. showElement();
  108. }
  109. } catch (e) {
  110. alert("Erreur lors du traitement de la réponse.");
  111. showElement();
  112. }
  113. } else {
  114. alert('Erreur lors du téléchargement.');
  115. // progressBar.value = 0; // Réinitialiser la barre
  116. // progressPercent.textContent = '0%';
  117. showElement();
  118. }
  119. };
  120. xhr.send(formData);
  121. });
  122. function showElement() {
  123. var elements = document.getElementsByClassName('SubmitElement');
  124. for (var i = 0; i < elements.length; i++) {
  125. elements[i].style.display = 'block';
  126. }
  127. }
  128. </script>