templates/annonces/_form.html.twig line 1

Open in your IDE?
  1. {{ form_start(form) }}
  2. <div class="theme-input-box">
  3.     <label class="style-choix-logo" for="logoEntreprise">Titre</label>
  4.     {{ form_row(form.titre,{'attr': {'class': 'theme-input form-control','placeholder': ''}}) }}
  5. </div>
  6. <div class="theme-input-box">
  7.     <label class="style-choix-logo" for="logoEntreprise">Écrivez la description de votre produit :</label>
  8.     {{ form_row(form.description,{'attr': {'class': 'theme-input form-control','placeholder': ''}}) }}
  9. </div>
  10. <div class="theme-input-box">
  11.     <label>Choisissez la catégorie de votre annonce :</label>
  12.     {% for res in categories %}
  13.     <input type="radio" id="{{res.id}}" name="categories" value="{{res.id}}" 
  14.     {% if type == 'edit' %}
  15.     {% if annonce.categories.id == res.id %}checked{% endif %}
  16.     {% endif %} >
  17.     <label for="{{res.id}}">{{res.libelle}}</label>
  18.     {% endfor %}
  19. </div>
  20. <div class="theme-input-box">
  21.     <label>Insérer une image <i class="fas fa-exclamation-circle" data-toggle="tooltip" data-placement="top" title="" data-bs-original-title="Il s'agit d'un fichier privé que seul le propriétaire de l'annonce peut télécharger. Taille maximale 2 Go, tout type de fichier accepté" aria-label="Il s'agit d'un fichier privé que seul le propriétaire de l'annonce peut télécharger. Taille maximale 2 Go, tout type de fichier accepté"></i></label>
  22.     <div class="theme-file-upload text-center">
  23.         {{ form_row(form.image,{'attr': {'class': 'form-control','placeholder': ''}}) }}
  24.         <h3 class="theme-title" style="color: #F6249D;">Cliquez ici pour ajouter une image</h3>
  25.         <p class="theme-description">(Fichier autorisé : image (.jpg / .jpeg/ .png / .gif))</p>
  26.     </div>
  27. </div>
  28. {% if type == 'edit' %}
  29. <div class="theme-input-box">
  30.     <div>
  31.         <label style="margin: 0px;">Importer des images supplémentaires <i class="fas fa-exclamation-circle" data-toggle="tooltip" data-placement="top" title="" data-bs-original-title=""></i></label>
  32.         <p class="theme-description">La première image importée sera l'image principale</p>
  33.         <div class="upload-images-box clearfix">
  34.             {% if annonce.image %}
  35.                 <div class="theme-input-box">
  36.                     <img src="{{ asset('uploads/annonces/' ~ annonce.image) }}" alt="{{ annonce.titre }}" style="width: 100px;">
  37.                 </div>
  38.             {% endif %}
  39.         </div>
  40.     </div>
  41. </div>
  42. {% endif %}
  43. <div class="theme-input-box">
  44.     <label class="style-choix-logo" for="logoEntreprise">Quantité</label>
  45.     {{ form_row(form.quantite,{'attr': {'class': 'theme-input form-control','placeholder': ''}}) }}
  46. </div>
  47. <div class="row">
  48.     <div class="theme-input-box col-md-4">
  49.         <label class="style-choix-logo" for="logoEntreprise">Prix (en €)</label>
  50.         {{ form_row(form.prix,{'attr': {'class': 'theme-input form-control','placeholder': ''}}) }}
  51.     </div>
  52.     <div class="theme-input-box col-md-4">
  53.         <label class="style-choix-logo" for="logoEntreprise">Remise (en %)</label>
  54.         {{ form_row(form.pourcentRemise,{'attr': {'class': 'theme-input form-control','placeholder': ''}}) }}
  55.     </div>
  56. </div>
  57. <div class="theme-input-box">
  58.     <div class="Listing-checkbox">
  59.         <label>Je souhaite diffuser mon annonce auprès :</label>
  60.         <input class="styled-checkbox" id="styled-checkbox-1" name="part" type="checkbox" value="part" {% if annonce.visiblePro == 0 %}checked{% endif %}>
  61.         <label for="styled-checkbox-1"><span>Des particuliers</span></label>
  62.         <input class="styled-checkbox" id="styled-checkbox-2" name="pro" type="checkbox" value="pro" {% if annonce.visiblePro == 1 %}checked{% endif %}>
  63.         <label for="styled-checkbox-2"><span>Des professionnels</span></label>
  64.     </div>
  65. </div>
  66. <div class="theme-form-title text-center">
  67.     <h3 class="theme-title"><span style="color: #F6249D;">Programmer la publication</span></h3>
  68. </div>
  69. <div class="fixed-price-tab-box">
  70.     <div class="tab-content">
  71.         <div class="tab-pane fade in active">
  72.             <div class="theme-box-center">
  73.                 <div class="row">
  74.                     <div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12">
  75.                         <div class="theme-input-box">
  76.                             <label>Date de diffusion</label>
  77.                             <input class="input-date-style" type="date" name="date" id="programmer-date" value="{{ annonce.dateDebut|date('Y-m-d') }}">
  78.                         </div>
  79.                         <div class="theme-input-box">
  80.                             <label>Heure de début de diffusion</label>
  81.                             <input class="input-date-style" type="time" name="heureDebut" id="programmer-heure-debut" value="{{ annonce.dateDebut|date('H:i') }}">
  82.                         </div>
  83.                         <div class="theme-input-box">
  84.                             <label>Heure de fin de diffusion</label>
  85.                             <input class="input-date-style" type="time" name="heureFin" id="programmer-heure-fin" value="{{ annonce.dateFin|date('H:i') }}">
  86.                         </div>
  87.                     </div>
  88.                     <div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12" style="vertical-align: middle !important;">
  89.                         <div class="fix-price-value">
  90.                             <h3 class="theme-title" style="color: #F6249D;">Programmer votre annonce</h3><br>
  91.                             <p class="theme-description">Chaque annonce débute et se termine à l'heure souhaitée dans la limite de 24h dans la même journée puisque les annonces sont automatiquement supprimées à minuit.</p>
  92.                         </div>
  93.                     </div>
  94.                 </div>
  95.             </div>
  96.         </div>
  97.         <div role="tabpanel" class="tab-pane fade in active" id="fixed">
  98.             <div class="theme-box-center">
  99.                 <div class="row mx-auto">
  100.                     <div class="col-12">
  101.                         <div class="Listing-checkbox theme-input-box">
  102.                             <label>Booster l'annonce:</label>
  103.                             <input class="styled-checkbox" id="styled-checkbox-3" type="checkbox" name="booster" {% if annonce.booster == 1 %}checked{% endif %}>
  104.                             <label for="styled-checkbox-3"><span>Booster l'annonce pour 4 crédits supplémentaires <i class="fas fa-exclamation-circle" data-toggle="tooltip" data-placement="top" title="" data-bs-original-title="Le fais de booster l'annonce lui permet d'etre mis en avant par rapport au autre annonce"></i></span></label>
  105.                         </div>
  106.                     </div>
  107.                 </div>
  108.                 <div class="row d-flex justify-content">
  109.                     <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12 ">
  110.                         <div class="theme-fix-btn theme-btn-post-margin ">
  111.                             <button type="submit" class="theme-btn-pro" style="background-color:#F6249D !important;">DIFFUSER L'ANNONCE</button>
  112.                         </div>
  113.                     </div>
  114.                 </div>
  115.             </div>
  116.         </div>
  117.     </div>
  118. </div>
  119. {{ form_end(form) }}
  120. <script>
  121. document.addEventListener('DOMContentLoaded', function () {
  122.     const dateInput = document.getElementById('programmer-date');
  123.     const heureDebutInput = document.getElementById('programmer-heure-debut');
  124.     const heureFinInput = document.getElementById('programmer-heure-fin');
  125.     // Disable past dates
  126.     const today = new Date().toISOString().split('T')[0];
  127.     dateInput.setAttribute('min', today);
  128.     // Set default times if future date is selected
  129.     dateInput.addEventListener('change', function () {
  130.         const selectedDate = new Date(this.value);
  131.         const currentDate = new Date();
  132.         const selectedDateString = selectedDate.toISOString().split('T')[0];
  133.         const currentDateString = currentDate.toISOString().split('T')[0];
  134.         if (selectedDate > currentDate) {
  135.             heureDebutInput.value = '00:00';
  136.             heureFinInput.value = '23:59';
  137.         } else if (selectedDateString === currentDateString) {
  138.             heureFinInput.value = '23:59';
  139.         }
  140.     });
  141.     // Validate end time is after start time
  142.     heureDebutInput.addEventListener('change', validateTime);
  143.     heureFinInput.addEventListener('change', validateTime);
  144.     function validateTime() {
  145.         const debutTime = heureDebutInput.value;
  146.         const finTime = heureFinInput.value;
  147.         if (debutTime && finTime && finTime < debutTime) {
  148.             Swal.fire({
  149.                 icon: 'error',
  150.                 title: 'Erreur de temps',
  151.                 text: "L'heure de fin ne peut pas être antérieure à l'heure de début.",
  152.                 confirmButtonColor: '#F6249D'
  153.             });
  154.             heureFinInput.value = debutTime;
  155.         }
  156.     }
  157.     // Set initial default times if the current date is selected
  158.     const initialDate = new Date(dateInput.value);
  159.     const initialDateString = initialDate.toISOString().split('T')[0];
  160.     if (initialDateString === today) {
  161.         heureFinInput.value = '23:59';
  162.     }
  163. });
  164. </script>