video.form.add.php 6.7 KB

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