templates/front/course/course-details.html.twig line 1

Open in your IDE?
  1. {% extends "front/base.html.twig" %}
  2. {% block stylesheets %}
  3.     {{ parent() }}
  4.     {{ encore_entry_link_tags('single-course') }}
  5.     {{ encore_entry_link_tags('search') }}
  6. {% endblock %}
  7. {% block title %}{{ course.getTranslatedContent(app.request.locale).name | raw }}
  8. {% endblock %}
  9. {% block og %}
  10.     {% set locale = app.request.locale %}
  11.     {% set url = app.request.server.get('FULL_URL') %}
  12.     <!-- Open Graph Markup -->
  13.     <meta property="og:locale" content="{{ locale }}">
  14.     <meta property="og:url" content="{{ url }}/{{ locale }}/courses/{{ course.token }}"/>
  15.     <meta property="og:type" content="article"/>
  16.     <meta property="og:title" content="{{ course.getTranslatedContent(locale).name | raw }}"/>
  17.     <meta property="og:description" content="{{ translatedCourse.description }}"/>
  18.     {% if course.cover and course.cover is fileexists('courses_img_directory') %}
  19.     <meta property="og:image" content="{{ url }}/images/stages/{{ course.cover }}"/>
  20.     {% endif %}
  21.     <meta property="og:site_name" content="Racket Trip">
  22. {% endblock %}
  23. {% if course.owner is instanceof('App\\Entity\\Coach') %}
  24.     {% set type = 'coach' %}
  25. {% elseif course.owner is instanceof('App\\Entity\\Club') %}
  26.     {% set type = 'club' %}
  27. {% else %}
  28.     {% set type = 'operator' %}
  29. {% endif %}
  30. {# Profile photo #}
  31. {% if course.owner.photo is fileexists('avatar_directory') %}
  32.     {% set avatar = course.owner.photo %}
  33. {% else %}
  34.     {% set avatar = 'default-profile.png' %}
  35. {% endif %}
  36. {% block body %}
  37.     {% include "front/course/_course-details-modals.html.twig" %}
  38.     <section class="mt-0 first-section overflow-hidden-mobile" id="course-detail">
  39.         <div class="container">
  40.             <div class="row">
  41.                 <div class="col-md-12">
  42.                     <div class="course-author-wrap {{ type }}">
  43.                         <a href="{{ path('view_pro', {'type': type, 'slug': course.owner.slug}) }}" class="link-author-img"><img loading="lazy" src="{{ asset('/images/profiles/' ~ avatar ) }}" class="author-img" alt="avatar"></a>
  44.                         <div class="author-review">
  45.                             <a href="{{ path('view_pro', {'type': type, 'slug': course.owner.slug}) }}"><p class="author-name">{{ course.owner.proInfo.fullname }}</p></a>
  46.                             
  47.                             <div class="author-stars" data-toggle="modal" data-target="#view-notes">
  48.                                 {% set averageNotes = getAverageNotes(course.owner)%}
  49.                                 {% set average = averageNotes.total %}
  50.                                 {% if average != 0 %}
  51.                                     {% for i in 1..5 %}
  52.                                         {% if average >= i %}
  53.                                             <i class="fas fa-star"></i>
  54.                                         {% else %}
  55.                                             {% if average > (i - 1) %}
  56.                                                 <i class="fas fa-star-half-alt"></i>
  57.                                             {% else %}
  58.                                                 <i class="far fa-star"></i>                                    
  59.                                             {% endif %}
  60.                                         {% endif %}
  61.                                     {% endfor %}
  62.                                 {% else %}
  63.                                     {% for i in 1..5 %}
  64.                                         <i class="fas fa-star grey-star"></i>
  65.                                     {% endfor %}
  66.                                 {% endif %}
  67.                                 <span class="review-count">({{ averageNotes.count }})</span>
  68.                             </div>
  69.                             
  70.                         </div>
  71.                         
  72.                         <div class="course-infos hide-mobile">
  73.                             <h3 class="course-name">
  74.                                 {{ course.getTranslatedContent(app.request.locale).name | raw }}
  75.                             </h3>
  76.                             {% if app.user and app.user is same as(course.owner) %} 
  77.                                 {% if course.status == "pending" or course.status == "active" %}
  78.                                 <a href="{{ path('update_course', {'token': course.token}) }}" class="btn main-btn btn-sm ml-3 text-nowrap">{{ "page_course_detail.upload" | trans }}</a>
  79.                                 {% endif %}
  80.                                 {% if course.status == "pending" and course.stepSaved == 5 %}
  81.                                 <a href="{{ path('publish_course', {'token': course.token}) }}" class="btn main-btn btn-sm ml-3 text-nowrap">{{ "course_form.put_online" | trans }}</a>
  82.                                 {% endif %}
  83.                             {% endif %}
  84.                         </div>
  85.                         <div class="like-wrap">
  86.                             {% if is_granted('ROLE_TRAINEE') %}
  87.                             <a href="{{ path('add_course_favorite', {'id': course.id}) }}" class="btn btn-like" id="favorite-btn" data-update data-token="{{ csrf_token('favorite' ~ course.id) }}">
  88.                                 <i class="fas fa-heart {% if app.user.isCourseFavorite(course) %}favorite{% endif %}"></i>
  89.                             </a>
  90.                             {% else %}
  91.                             <button type="button" class="btn btn-like" data-toggle="modal" data-target="#add-to-favorite">
  92.                                 <i class="fas fa-heart"></i>
  93.                             </button>
  94.                             {% endif %}
  95.                             <button class="btn btn-share" data-toggle="modal" data-target="#share-socials">
  96.                                 <i class="fal fa-arrow-square-up"></i>
  97.                             </button>
  98.                         </div>
  99.                     </div>
  100.                 </div>
  101.             </div>
  102.     
  103.             <div class="row hide-large">
  104.                 <div class="col-12">
  105.                     <div class="course-others-action" id="mobile-media-map">
  106.                         {% if not course.hideClubInfo or (app.user and app.user is same as(course.owner)) %}
  107.                         <button class=" btn see-map" id="scroll-map">
  108.                             <i class="fal fa-map-marked-alt"></i>
  109.                             <span>{{ "page_course_detail.see_on_map" | trans }}</span>
  110.                         </button>
  111.                         {% endif %}
  112.                         
  113.                         {% if course.videos | length > 0 %}
  114.                         <button type="button" class="btn watch-video" data-toggle="modal" data-target="#watch-video">{{ "pro_page.video" | trans | capitalize }}</button>
  115.                         {% endif %}
  116.                     </div>
  117.                 
  118.                     <div class="course-images-wrapper sliders-mobile">
  119.                         <div class="course-image-item">
  120.                             <img loading="lazy" src="{{ asset('/images/stages/' ~ course.cover ?? "default.png") }}" alt="Photo de couverture">
  121.                         </div>
  122.                         {% if course.photos | length > 0 %}
  123.                         {% for photo in course.photos %}
  124.                             {% if photo.name is fileexists('courses_img_directory') %}
  125.                                 <div class="course-image-item">
  126.                                     <img loading="lazy" src="{{ asset('/images/stages/' ~ photo.name) }}" alt="{{photo.name}}">
  127.                                 </div>
  128.                             {% endif %}
  129.                         {% endfor %}
  130.                         {% endif %}
  131.                     </div>
  132.                 </div>
  133.             </div>
  134.         
  135.             <div class="row">
  136.                 <div class="course-sidebar-col">
  137.                     <div class="course-sidebar" id="course-details-sidebar">
  138.                         <div class="title-info hide-mobile">
  139.                             <div class="left-col">
  140.                                 <h1 class="course-title">{{ course.getTranslatedContent(app.request.locale).name | raw }}</h1>
  141.                                 <div class="author-wrap {{ type }}">
  142.                                     <a href="{{ path('view_pro', {'type': type, 'slug': course.owner.slug}) }}">
  143.                                         <img loading="lazy" src="{{ asset('/images/profiles/' ~ avatar ) }}" class="author-img" alt="">
  144.                                     </a>
  145.                                     <div class="author-review">
  146.                                         <a href="{{ path('view_pro', {'type': type, 'slug': course.owner.slug}) }}" class="author-name">
  147.                                             {{ course.owner.proInfo.fullname }}
  148.                                         </a>
  149.                                         
  150.                                         <div class="author-stars" data-toggle="modal" data-target="#view-notes">
  151.                                             {% set averageNotes = getAverageNotes(course.owner)%}
  152.                                             {% set average = averageNotes.total %}
  153.                                             {% if average != 0 %}
  154.                                                 {% for i in 1..5 %}
  155.                                                     {% if average >= i %}
  156.                                                         <i class="fas fa-star"></i>
  157.                                                     {% else %}
  158.                                                         {% if average > (i - 1) %}
  159.                                                             <i class="fas fa-star-half-alt"></i>
  160.                                                         {% else %}
  161.                                                             <i class="far fa-star"></i>                                    
  162.                                                         {% endif %}
  163.                                                     {% endif %}
  164.                                                 {% endfor %}
  165.                                             {% else %}
  166.                                                 {% for i in 1..5 %}
  167.                                                     <i class="fas fa-star grey-star"></i>
  168.                                                 {% endfor %}
  169.                                             {% endif %}
  170.                                             <span class="review-count">({{ averageNotes.count }})<span>
  171.                                         </div>
  172.                                         
  173.                                     </div>
  174.                                 </div>
  175.                             </div>
  176.                             <div class="right-col">
  177.                                 <div class="like-wrap">
  178.                                     <button class="btn btn-share" data-toggle="modal" data-target="#share-socials">
  179.                                         <i class="fal fa-arrow-square-up"></i>
  180.                                     </button>
  181.                                     {% if is_granted('ROLE_TRAINEE') %}
  182.                                     <a href="{{ path('add_course_favorite', {'id': course.id}) }}" class="btn btn-like" id="favorite-btn" data-update data-token="{{ csrf_token('favorite' ~ course.id) }}">
  183.                                         <i class="fas fa-heart {% if app.user.isCourseFavorite(course) %}favorite{% endif %}"></i>
  184.                                     </a>
  185.                                     {% else %}
  186.                                     <button type="button" class="btn btn-like" data-toggle="modal" data-target="#add-to-favorite">
  187.                                         <i class="fas fa-heart"></i>
  188.                                     </button>
  189.                                     {% endif %}
  190.                                 </div>
  191.                             </div>
  192.                         </div>
  193.                         <div class="hide-desktop">
  194.                             <h1 class="course-title">{{ course.getTranslatedContent(app.request.locale).name | raw }}</h1>
  195.                         </div>
  196.                         <div class="badges">
  197.                             {% for sport in course.sports %}
  198.                                 <a href="{{ path('courses', {'sports[]': sport.id, 'search': 'true'}) }}" class="badge-sport">
  199.                                     {{ ("sport_name." ~ sport.slug) | trans }}
  200.                                 </a>
  201.                             {% endfor %}
  202.                         </div>
  203.                         {% if course.hideClubInfo == false and course.club %}
  204.                             <div class="club-intro">
  205.                                 {% if course.club.owner != null %}
  206.                                 <a href="{{ path('view_pro', {'type': 'club', 'slug': course.club.owner.slug}) }}">
  207.                                 {% endif %}
  208.                                     <img loading="lazy" src="{{ asset('/images/club-icon.png') }}" alt="Club">
  209.                                     <span class="club-name">{{ course.club.name }}</span>
  210.                                 {% if course.club.owner != null %}
  211.                                 </a>
  212.                                 {% endif %}
  213.                             </div>
  214.                         {% endif %}
  215.                         <div class="course-extra-infos">
  216.                             <i class="fas fa-map-marker-alt"></i>
  217.                             <span class="course-extra-text">{{ course.address.city }}, {{ course.countryCode | countryName(app.request.locale) }}</span>
  218.                         </div>
  219.                         <div class="course-extra-infos">
  220.                             <i class="fas fa-globe"></i>
  221.                             <span class="course-languages">
  222.                                 {% for language in course.languages %}
  223.                                     <img loading="lazy" src="{{ asset('/images/flag/' ~ language.slug ~ '.png') }}" alt="{{ language.slug }}">
  224.                                 {% endfor %}
  225.                             </span>
  226.                         </div>
  227.                         <div class="course-extra-infos">
  228.                             <i class="far fa-calendar-alt"></i>
  229.                             {% if course is hasseveralavailabilities %}
  230.                                 <span class="course-extra-text">{{ "courses.next_date" | trans }} : {{ course | nextdate.begin }}</span>
  231.                             {% else %}
  232.                                 {% if course | nextdate.begin == course | nextdate.end %}
  233.                                 <span class="course-extra-text">{{ course | nextdate.begin }}</span>
  234.                                 {% else %}
  235.                                 <span class="course-extra-text">{{ "calendar.from" | trans }} {{ course | nextdate.begin }} {{ "calendar.to" | trans }} {{ course | nextdate.end }}</span>
  236.                                 {% endif %}
  237.                             {% endif %}
  238.                         </div>
  239.                         <div class="course-extra-infos">
  240.                             <i class="fas fa-user"></i>
  241.                             <span class="course-extra-text">
  242.                                 {% for age in course.ages %}
  243.                                     {{ ("age_name." ~ age.slug) | trans }}
  244.                                     {% if loop.last %}{% else %}/{% endif %}
  245.                                 {% endfor %}
  246.                             </span>
  247.                         </div>
  248.                         <div class="course-extra-infos">
  249.                             <i class="fas fa-signal-4"></i>
  250.                             <span class="course-extra-text">{{ "page_course_detail.level" | trans }}
  251.                                 {% for level in course.levels %}
  252.                                     {{ ("level_name." ~ level.slug) | trans }}
  253.                                     {% if loop.last %}{% else %}/{% endif %}
  254.                                 {% endfor %}
  255.                             </span>
  256.                         </div>
  257.                         <div class="price-wrap">
  258.                             <h3 class="price-info">
  259.                                 {# {{ "page_course_detail.from" | trans }} #}
  260.                                 {% if course.availabilities | length >= 1 %}
  261.                                     {{ course | cheapestavailability.price }}
  262.                                 {% else %}
  263.                                     0
  264.                                 {% endif %}
  265.                                 â‚¬
  266.                                 <span>/{{ "page_course_detail.person" | trans }}</span>
  267.                             </h3>
  268.                             <span class="course-duration">{{ "page_course_detail.on" | trans }}
  269.                                 {% if course.availabilities | length >= 1 %}
  270.                                     {{ course | cheapestavailability.duration }}
  271.                                 {% else %}
  272.                                     0
  273.                                 {% endif %}
  274.                                 {{ "page_course_detail.days" | trans }}</span>
  275.                         </div>
  276.                         <hr>
  277.                         <button class="btn main-btn-outline mt-3 w-100" id="see-availabilities">{{ "page_course_detail.check_availability" | trans }}</button>
  278.                         
  279.                         {% if not app.user or (app.user and not app.user.isPro) %}
  280.                         
  281.                         <button class="btn main-btn mt-3 w-100" data-toggle="modal" data-target="#contact">{{ "page_course_detail.contact" | trans }}</button>
  282.                         
  283.                         {% endif %}
  284.                         
  285.                     </div>
  286.                 </div>
  287.                 {% if not app.user or (app.user and not app.user.isPro) %}
  288.                         
  289.                 {% include "front/pro/_contact-modal.html.twig" with {"pro": course.owner, "from": course.token} %}
  290.                 
  291.                 {% endif %}
  292.             
  293.             
  294.                 <div class="course-content-col" id="course-info">
  295.                     
  296.                     <div class="course-others-action hide-xs-mobile">
  297.                         {% if not course.hideClubInfo or (app.user and app.user is same as(course.owner)) %}
  298.                         <button class=" btn see-map" id="scroll-map">
  299.                             <i class="fal fa-map-marked-alt"></i>
  300.                             <span>{{ "page_course_detail.see_on_map" | trans }}</span>
  301.                         </button>
  302.                         {% endif %}
  303.                         
  304.                         {% if course.videos | length > 0 %}
  305.                         <button type="button" class="btn watch-video" data-toggle="modal" data-target="#watch-video">{{ "pro_page.video" | trans | capitalize }}</button>
  306.                         {% endif %}
  307.                     </div>
  308.                     <div class="course-images-wrapper sliders-desktop">
  309.                         <div class="course-image-item">
  310.                             <img loading="lazy" src="{{ asset('/images/stages/' ~ course.cover ?? "default.png") }}" alt="Photo de couverture">
  311.                         </div>
  312.                         {% if course.photos | length > 0 %}
  313.                         {% for photo in course.photos %}
  314.                             {% if photo.name is fileexists('courses_img_directory') %}
  315.                                 <div class="course-image-item">
  316.                                     <img loading="lazy" src="{{ asset('/images/stages/' ~ photo.name) }}" alt="{{photo.name}}">
  317.                                 </div>
  318.                             {% endif %}
  319.                         {% endfor %}
  320.                         {% endif %}
  321.                     </div>
  322.                     <div class="course-content-wrap">
  323.                         <ul class="nav nav-pills couse-infos-tabs" id="pills-tab" role="tablist">
  324.                             <li class="nav-item">
  325.                                 <a class="nav-link active" id="pills-stay-tab" data-toggle="pill" href="#pills-stay" role="tab" aria-controls="pills-stay" aria-selected="true">{{ "page_course_detail.stay" | trans }}</a>
  326.                             </li>
  327.                             <li class="nav-item">
  328.                                 <a class="nav-link" id="pills-planning-tab" data-toggle="pill" href="#pills-planning" role="tab" aria-controls="pills-planning" aria-selected="false">{{ "page_course_detail.planning" | trans }}</a>
  329.                             </li>
  330.                             <li class="nav-item">
  331.                                 <a class="nav-link" id="pills-other-tab" data-toggle="pill" href="#pills-other" role="tab" aria-controls="pills-other" aria-selected="false">{{ "page_course_detail.other_activities" | trans }}</a>
  332.                             </li>
  333.                             <li class="nav-item">
  334.                                 <a class="nav-link" id="pills-logistic-tab" data-toggle="pill" href="#pills-logistic" role="tab" aria-controls="pills-logistic" aria-selected="false">{{ "page_course_detail.logistics" | trans }}</a>
  335.                             </li>
  336.                         </ul>
  337.                         <div class="tab-content mobile-margin-bottom" id="pills-tabContent">
  338.                             <div class="tab-pane course-content-card fade show active" id="pills-stay" role="tabpanel" aria-labelledby="pills-stay-tab">
  339.                                 <div class="title-with-line">
  340.                                     <p>{{ "page_course_detail.your_stay" | trans }}</p>
  341.                                 </div>
  342.                                 <p class="course-description course-centent-text">
  343.                                     {{ translatedCourse.description |nl2br }}
  344.                                 </p>
  345.                             </div>
  346.                             <div class="tab-pane course-content-card fade" id="pills-planning" role="tabpanel" aria-labelledby="pills-planning-tab">
  347.                                 <div class="title-with-line">
  348.                                     <p>{{ "page_course_detail.planning" | trans }}</p>
  349.                                 </div>
  350.                                 {% if translatedCourse.plannings | length > 0 %}
  351.                                 {% for planning in translatedCourse.plannings %}
  352.                                     <h4 class="course-content-title">{{ planning.title }}</h4>
  353.                                     <p class="course-centent-text">
  354.                                         {{ planning.description |nl2br }}
  355.                                     </p>
  356.                                 {% endfor %}
  357.                                 {% else %}
  358.                                     
  359.                                     <span class="no-planning">{{ "page_course_detail.no_planning" | trans }}</span>
  360.                                 {% endif %}
  361.                             </div>
  362.                             <div class="tab-pane course-content-card fade" id="pills-other" role="tabpanel" aria-labelledby="pills-other-tab">
  363.                                 <div class="title-with-line">
  364.                                     <p>{{ "page_course_detail.other_activities" | trans }}</p>
  365.                                 </div>
  366.                                 {% if translatedCourse.others == null %}
  367.                                 
  368.                                     <span class="no-planning">{{ "page_course_detail.no_other_activities" | trans }}</span>
  369.                                     
  370.                                 {% else %}
  371.                                     <div class="course-activities">
  372.                                         {% for other in translatedCourse.others |split(',')  %}
  373.                                         <span class="activity-item">{{ other }}</span>
  374.                                         {% endfor %}
  375.                                     </div>
  376.                                 {% endif %}
  377.                             </div>
  378.                             <div class="tab-pane course-content-card fade" id="pills-logistic" role="tabpanel" aria-labelledby="pills-logistic-tab">
  379.                                 <div class="title-with-line">
  380.                                     <p>{{ "page_course_detail.included" | trans }}</p>
  381.                                 </div>
  382.                                 {% if course.logistic | length == 0 %}
  383.                                     <span class="no-planning">{{ "page_course_detail.no_logistics" | trans }}</span>
  384.                                 {% else %}
  385.                                     <ul id="logistic">
  386.                                         {% for logistic in course.logistic %}
  387.                                             {% if logistic == "transports" %}
  388.                                                 <li>{{ "page_course_detail.transport" | trans }}</li>
  389.                                             {% elseif logistic == "transfer" %}
  390.                                                 <li>{{ "page_course_detail.transfer" | trans }}</li>
  391.                                             {% elseif logistic == "housing" %}
  392.                                                 <li>{{ "page_course_detail.housing" | trans }}</li>
  393.                                             {% elseif logistic == "meal" %}
  394.                                                 <li>{{ "page_course_detail.meals" | trans }}</li>
  395.                                             {% elseif logistic == "breakfast" %}
  396.                                                 <li>{{ "page_course_detail.breakfast" | trans }}</li>
  397.                                             {% elseif logistic == "lunch" %}
  398.                                                 <li>{{ "page_course_detail.lunch" | trans }}</li>
  399.                                             {% elseif logistic == "dinner" %}
  400.                                                 <li>{{ "page_course_detail.dinner" | trans }}</li>
  401.                                             {% elseif logistic == "nursery" %}
  402.                                                 <li>{{ "page_course_detail.nursery" | trans }}</li>
  403.                                             {% endif %}                
  404.                                         {% endfor %}
  405.                                     </ul>
  406.                                 {% endif %}
  407.                             </div>
  408.                         </div>
  409.                     </div>
  410.                     <div class="course-content-card mb-5 availability-card mobile-margin-bottom" id="list-availabilities">
  411.                         <div class="title-with-line">
  412.                             <p>{{ "page_course_detail.pricing" | trans }}</p>
  413.                         </div>
  414.                         {% if availabilities | length > 0 or course.priceBundles | length > 0 %}
  415.                         <div class="price-header">
  416.                             <div class="persons">
  417.                                 <div class="title-courses-dispo">
  418.                                     <span>{{ "page_course_detail.number_of_persons" | trans }}</span>
  419.                                 </div>
  420.                             </div>
  421.                             <div class="prices">
  422.                                 <div class="title-courses-dispo">
  423.                                     <span>{{ "page_course_detail.price_person" | trans }}</span>
  424.                                 </div>
  425.                             </div>
  426.                         </div>
  427.                         {% if availabilities | length > 0 %}
  428.                         <div class="price-item">
  429.                             <span class="persons">{{ "page_course_detail.for_one_person" | trans }}</span>
  430.                             <span class="prices"><b>{{ availabilities[0].price }} â‚¬/{{ "page_course_detail.person" | trans }}</b></span>
  431.                         </div>
  432.                         {% endif %}
  433.                         {% if course.priceBundles | length > 0 %}
  434.                         {% for priceBundle in course.priceBundles | sort((a, b) => a.persons <=> b.persons) %}
  435.                             <div class="price-item">
  436.                                 <span class="persons">{{ "page_course_detail.from" | trans }} {{ priceBundle.persons }} {{ "page_course_detail.persons" | trans }}</span>
  437.                                 <span class="prices"><b>{{ priceBundle.pricePerPerson }} â‚¬/{{ "page_course_detail.person" | trans }}</b></span>
  438.                             </div>
  439.                         {% endfor %}
  440.                         {% endif %}
  441.                         {% else %}
  442.                             
  443.                             <p class="empty-message">{{ "page_course_detail.no_prices" | trans }}</p>
  444.                         {% endif %}
  445.                         
  446.                         <div class="title-with-line">
  447.                             <p>{{ "page_course_detail.availabilities" | trans }}</p>
  448.                         </div>
  449.                         {# Formulaire recherche par date #}
  450.                         {% if (course.frequency == 'recurring' and course.status != "archived" and course.status != "completed") or startingDate %}
  451.                         <div class="row justify-content-center mb-5">
  452.                             <div class="col-md-12 search-col availability-search">
  453.                                 {{ form_start(form, {'attr': {'class': 'main-search availabily-form'}}) }}
  454.                                     <div class="form-inline">
  455.                                         <div class="input-wrap">
  456.                                             <div class="search-dropdowns">
  457.                                                 <div class="custom-dropdown-input" id="date-wrap">
  458.                                                     <span class="custom-dropdown-label" id="date-input-label">
  459.                                                     {% if startingDate %}
  460.                                                         {{ startingDate }}
  461.                                                     {% else %}
  462.                                                         {{ "page_course_detail.from" | trans }}
  463.                                                     {% endif %}
  464.                                                     </span>
  465.                                                     <div class="custom-dropdown-content">
  466.                                                         <div id="datepicker" data-start={{ course.availabilities[0].begin }} data-end={{ course.availabilities[0].end }}></div>
  467.                                                         {{ form_widget(form.begin) }}
  468.                                                     </div>
  469.                                                 </div>
  470.                                             </div>
  471.                                         </div>
  472.                                     </div>
  473.                                     <button class="btn btn-main-search" type="submit">
  474.                                         <span class="hide-mobile">{{ "global.search" | trans }}</span>
  475.                                         <i class="far fa-search hide-desktop"></i>
  476.                                     </button>
  477.                                 {{ form_end(form) }}
  478.                             </div>
  479.                         </div>
  480.                         {% endif %}
  481.                         {% if course.status != "archived" and course.status != "completed" and availabilities.getTotalItemCount > 0 %}
  482.                         {#
  483.                         <div class="row" id="date-and-price">
  484.                             <div class="col-lg-5 col-md-12 title-courses-dispo">
  485.                                 <i class="fas fa-calendar-alt"></i>
  486.                                 <span>{{ "page_course_detail.dates" | trans }}</span>
  487.                             </div>
  488.                             <div class="col-lg-3 title-courses-dispo price-courses-title">
  489.                                 <i class="fas fa-clock"></i>
  490.                                 <span>{{ "page_course_detail.durations" | trans }}</span>
  491.                             </div>
  492.                             <div class="col-4"></div>
  493.                         </div>
  494.                         #}
  495.                         <div class="availability-header">
  496.                             <div class="dates">
  497.                                 <div class="title-courses-dispo">
  498.                                     <i class="fas fa-calendar-alt"></i>
  499.                                     <span>Dates</span>
  500.                                 </div>
  501.                             </div>
  502.                             <div class="durations">
  503.                                 <div class="title-courses-dispo">
  504.                                     <i class="fas fa-clock"></i>
  505.                                     <span>Durées</span>
  506.                                 </div>
  507.                             </div>
  508.                         </div>
  509.                         <div id="availabilities">
  510.                             {% for availability in availabilities %}
  511.                                 <div class="availability-item">
  512.                                     <span class="dates">{{ availability.formattedDate }}</span>
  513.                                     <span class="durations">{{ availability.duration }} {{ "page_course_detail.days" | trans | lower }}</span>
  514.                                     <div class="actions">
  515.                                         <button class="btn btn-book" data-begin="{{ availability.begin }}" data-end="{{ availability.end }}" data-price="{{ availability.price }}">{{ "page_course_detail.book" | trans }}</button>
  516.                                     </div>
  517.                                 </div>
  518.                                 {#
  519.                                 <div class="availability-row">
  520.                                     <div class="first">
  521.                                         <span class="dates">{{ availability.begin }} au {{ availability.end }}</span>
  522.                                         
  523.                                     </div>
  524.                                     
  525.                                     <div class="second">
  526.                                         <span class="price">{{ availability.duration }} {{ "page_course_detail.days" | trans | lower }}</span>
  527.                                     </div>
  528.                                     <div class="third">
  529.                                         <button class="btn btn-book" data-begin="{{ availability.begin }}" data-end="{{ availability.end }}" data-price="{{ availability.price }}">{{ "page_course_detail.book" | trans }}</button>
  530.                                     </div>
  531.                                 </div>
  532.                                 #}
  533.                             {% endfor %}
  534.                         </div>
  535.                         {{ knp_pagination_render(availabilities, 'front/_partials/availabilities-pagination.html.twig') }}
  536.                         {% else %}
  537.                             
  538.                             <h5 class="d-block text-center">Aucune disponibilité</h5>
  539.                             {% if startingDate %}
  540.                                 
  541.                             {% endif %}
  542.                             
  543.                         {% endif %}
  544.                     </div>
  545.                     {% if course.club %}
  546.                     
  547.                     <div class="course-content-card">
  548.                         {% if course.club.insurance or course.club.swimmingpool or course.club.gym or course.club.seminarRoom or course.club.restaurant  or course.club.bar %}
  549.                         <div class="title-with-line">
  550.                             <p>{{ "page_course_detail.about_club" | trans }}</p>
  551.                         </div>
  552.                         <div class="club-infrastructures">
  553.                             {% if course.club.insurance %}
  554.                                 <div class="infrastructure-item">
  555.                                     <img loading="lazy" src="{{ asset('/images/icons/assurance.svg') }}">
  556.                                     <span class="infrastructure-text">{{ "pro_page.insurance" | trans }}</span>
  557.                                 </div>
  558.                             {% endif %}
  559.                             {% if course.club.swimmingpool %}
  560.                                 <div class="infrastructure-item">
  561.                                     <img loading="lazy" src="{{ asset('/images/icons/piscine.svg') }}">
  562.                                     <span class="infrastructure-text">{{ "pro_page.swimmingpool" | trans }}</span>
  563.                                 </div>
  564.                             {% endif %}
  565.                             {% if course.club.gym %}
  566.                                 <div class="infrastructure-item">
  567.                                     <img loading="lazy" src="{{ asset('/images/icons/training.svg') }}">
  568.                                     <span class="infrastructure-text">{{ "pro_page.gym" | trans }}</span>
  569.                                 </div>
  570.                             {% endif %}
  571.                             {% if course.club.seminarRoom %}
  572.                                 <div class="infrastructure-item">
  573.                                     <img loading="lazy" src="{{ asset('/images/icons/seminar-room.svg') }}">
  574.                                     <span class="infrastructure-text">{{ "pro_page.seminar" | trans }}</span>
  575.                                 </div>
  576.                             {% endif %}
  577.                             {% if course.club.restaurant %}
  578.                                 <div class="infrastructure-item">
  579.                                     <img loading="lazy" src="{{ asset('/images/icons/restaurant.svg')}}">
  580.                                     <span class="infrastructure-text">{{ "pro_page.restaurant" | trans }}</span>
  581.                                 </div>
  582.                             {% endif %}
  583.                             {% if course.club.bar %}
  584.                                 <div class="infrastructure-item">
  585.                                     <img loading="lazy" src="{{ asset('/images/icons/bar.svg') }}">
  586.                                     <span class="infrastructure-text">{{ "pro_page.bar" | trans }}</span>
  587.                                 </div>
  588.                             {% endif %}
  589.                         </div>
  590.                         {% endif %}
  591.                         {% if course.club.courtInfos|length > 4 %}
  592.                         <div class="title-with-line mt-5">
  593.                             <p>{{ "page_course_detail.fields_tables" | trans }}</p>
  594.                         </div>
  595.                         <div class="club-infrastructures terrains">
  596.                             {% for court in course.club.courtInfos %}
  597.                                 {% if court.nbOpen > 0 or court.nbSemiOpen > 0 or court.nbCovered > 0 %}
  598.                                 <div class="infrastructure-item court">
  599.                                     <img loading="lazy" src="{{ asset('/images/icons/' ~ court.sport.icon) }}">
  600.                                     <span class="infrastructure-text">
  601.                                         {{ ("sport_name." ~ court.sport.slug) | trans }}</span>
  602.                                     
  603.                                     <div class="terrains-count">
  604.                                         {% if court.nbOpen > 0 %}
  605.                                         <h5 class="count">
  606.                                             <span>{{court.nbOpen}}</span>
  607.                                             {{ "page_course_detail.outdoor" | trans }}
  608.                                         </h5>
  609.                                         {% endif %}
  610.                                         {% if court.nbSemiOpen > 0 %}
  611.                                         <h5 class="count">
  612.                                             <span>{{court.nbSemiOpen}}</span>
  613.                                             {{ "page_course_detail.semi_indoor" | trans }}
  614.                                         </h5>
  615.                                         {% endif %}
  616.                                         {% if court.nbCovered > 0 %}
  617.                                         <h5 class="count">
  618.                                             <span>{{court.nbCovered}}</span>
  619.                                             {{ "page_course_detail.indoor" | trans }}
  620.                                         </h5>
  621.                                         {% endif %}
  622.                                         
  623.                                     </div>
  624.                                 </div>
  625.                                 {% endif %}
  626.                             {% endfor %}
  627.                         </div>
  628.                         {% endif %}
  629.                     </div>
  630.                     {% endif %}
  631.                     {% if course.coachsInfos | length > 0 and (not course.hideCoachInfo or (app.user and app.user is same as(course.owner)) ) %}
  632.                     <div class="title-with-line grey mt-5">
  633.                         <p>Coachs pour le stage</p>
  634.                     </div>
  635.                     <div class="row partners-wrapper coach-partners">
  636.                         {% for coachInfo in course.coachsInfos %}
  637.                             
  638.                             {% if coachInfo.owner %}
  639.                                 {% set pro = coachInfo.owner %}
  640.                                 
  641.                                 {% include "front/pro/_pro-card.html.twig" %}
  642.                                 
  643.                             {% else %}
  644.                                 
  645.                                 <div class="public-partner-card ">
  646.                                     <span class="type">COACH</span>
  647.                                     {% if coachInfo.image %}
  648.                                                     
  649.                                     <img class="cover" src="/images/profiles/{{ coachInfo.image }}" alt="Partner">
  650.                                     {% else %}
  651.                                     
  652.                                     {% set names = coachInfo.name |split(' ') | slice(0, 1) %}
  653.                                     {% set shortName = names[0] | slice(0, 1) %}
  654.                                     <span class="short-name">{{ shortName }}</span>
  655.                                         
  656.                                     {% endif %}
  657.                                     <span class="name">{{ coachInfo.name }}</span>
  658.                                     <div class="extra">
  659.                                         <i class="far fa-map-marker-alt"></i>
  660.                                         <span class="text">{% if coachInfo.address.city %}{{ coachInfo.address.city }}, {% endif %}{{ coachInfo.address.countryCode | countryName(app.request.locale) }}</span>
  661.                                     </div>
  662.                                 </div>
  663.                             {% endif %}
  664.                         {% endfor %}
  665.                     </div>
  666.                     {% endif %}
  667.                     {% if course.operator %}
  668.                     <div class="title-with-line grey mt-5">
  669.                         <p>Operateur pour le stage</p>
  670.                     </div>
  671.                     <div class="row partners-wrapper">
  672.                         {% set pro = course.operator.owner %}
  673.                         {% include "front/pro/_pro-card.html.twig" %}
  674.                     </div>
  675.                     {% endif %}
  676.                     
  677.                     {% if not course.hideClubInfo or (app.user and app.user is same as(course.owner)) %}
  678.                     <div class="title-with-line grey mt-5">
  679.                         <p>{{ "page_course_detail.close_environment" | trans }}</p>
  680.                     </div>
  681.                     <div class="single-course-map" id="course-detail-map"></div>
  682.                     <div class="course-content-card map">
  683.                         <h4 class="legend">{{ 'page_course_detail.map_legend' | trans }}</h4>
  684.                         <div class="row nearby-addresses justify-content-center">                            
  685.                             <div class="col-lg-2 col-4">
  686.                                 <div class="environment-item">
  687.                                     <img loading="lazy" src="{{ asset('/images/icons/club.png') }}" alt="">
  688.                                     <span class="environment-text club">{{ "global.club" | trans | capitalize }}</span>
  689.                                 </div>
  690.                                 <div class="hidden">
  691.                                     <div class="club-address" data-latitude="{{ course.address.latitude }}" data-longitude="{{ course.address.longitude }}" data-address="{{ course.address.fulladdress }}"></div>
  692.                                 </div>
  693.                             </div>
  694.                             {% if course.airports | length > 0 %}
  695.                             <div class="col-lg-2 col-4">
  696.                                 <div class="environment-item">
  697.                                     <img loading="lazy" src="{{ asset('/images/icons/aeroport.png') }}" alt="">
  698.                                     <span class="environment-text aeroport">{{ "page_course_detail.airport" | trans }}</span>
  699.                                 </div>
  700.                                 <div class="hidden">
  701.                                     {% for airport in course.airports %}
  702.                                         <div class="nearby-address" data-latitude="{{ airport.address.latitude }}" data-longitude="{{ airport.address.longitude }}" data-address="{{ airport.address.fulladdress }}" data-type="airports"></div>
  703.                                     {% endfor %}
  704.                                 </div>
  705.                             </div>
  706.                             {% endif %}
  707.                             {% if course.beaches | length > 0 %}
  708.                             <div class="col-lg-2 col-4">
  709.                                 <div class="environment-item">
  710.                                     <img loading="lazy" src="{{ asset('/images/icons/plage.png') }}" alt="">
  711.                                     <span class="environment-text plage">{{ "page_course_detail.beach" | trans }}</span>
  712.                                 </div>
  713.                                 <div class="hidden">
  714.                                     {% for beach in course.beaches %}
  715.                                         <div class="nearby-address" data-latitude="{{ beach.address.latitude }}" data-longitude="{{ beach.address.longitude }}" data-address="{{ beach.address.fulladdress }}" data-type="beaches"></div>
  716.                                     {% endfor %}
  717.                                 </div>
  718.                             </div>
  719.                             {% endif %}
  720.                             {% if course.stations | length > 0 %}
  721.                             <div class="col-lg-2 col-4">
  722.                                 <div class="environment-item">
  723.                                     <img loading="lazy" src="{{ asset('/images/icons/gare.png') }}" alt="">
  724.                                     <span class="environment-text gare">{{ "page_course_detail.station" | trans }}</span>
  725.                                 </div>
  726.                                 <div class="hidden">
  727.                                     {% for station in course.stations %}
  728.                                         <div class="nearby-address" data-latitude="{{ station.address.latitude }}" data-longitude="{{ station.address.longitude }}" data-address="{{ station.address.fulladdress }}" data-type="stations"></div>
  729.                                     {% endfor %}
  730.                                 </div>
  731.                             </div>
  732.                             {% endif %}
  733.                             {% if course.restaurants | length > 0 %}
  734.                             <div class="col-lg-2 col-4">
  735.                                 <div class="environment-item">
  736.                                     <img loading="lazy" src="{{ asset('/images/icons/restaurant.png') }}" alt="">
  737.                                     <span class="environment-text restaurant">{{ "page_course_detail.restaurant" | trans }}</span>
  738.                                 </div>
  739.                                 <div class="hidden">
  740.                                     {% for restaurant in course.restaurants %}
  741.                                         <div class="nearby-address" data-latitude="{{ restaurant.address.latitude }}" data-longitude="{{ restaurant.address.longitude }}" data-address="{{ restaurant.address.fulladdress }}" data-type="restaurants"></div>
  742.                                     {% endfor %}
  743.                                 </div>
  744.                             </div>
  745.                             {% endif %}
  746.                             {% if course.accommodations | length > 0 %}
  747.                             <div class="col-lg-2 col-4">
  748.                                 <div class="environment-item">
  749.                                     <img loading="lazy" src="{{ asset('/images/icons/hebergement.png') }}" alt="">
  750.                                     <span class="environment-text hebergement">{{ "page_course_detail.housing" | trans }}</span>
  751.                                 </div>
  752.                                 <div class="hidden">
  753.                                     {% for accommodation in course.accommodations %}
  754.                                         <div class="nearby-address" data-latitude="{{ accommodation.address.latitude }}" data-longitude="{{ accommodation.address.longitude }}" data-address="{{ accommodation.address.fulladdress }}" data-type="accommodations"></div>
  755.                                     {% endfor %}
  756.                                 </div>
  757.                             </div>
  758.                             {% endif %}
  759.                         </div>
  760.                     </div>
  761.                     {% endif %}
  762.                 </div>
  763.             </div>
  764.         </div>
  765.     </section>
  766.     <!-- Modal booking -->
  767.     <div class="modal fade bd-example-modal-lg" id="book" tabindex="-1" role="dialog" aria-labelledby="book" aria-hidden="true">
  768.         <div class="modal-dialog modal-dialog-centered" role="document">
  769.             <div class="modal-content">
  770.                 <div class="modal-body">
  771.                     <div class="modal-title-wrap">
  772.                         <h5 class="modal-title">{{ "messaging.booking_request" | trans }}</h5>
  773.                         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  774.                             <i class="fal fa-times"></i>
  775.                         </button>
  776.                     </div>
  777.                         
  778.                     {% if app.user %}
  779.                     {% if not app.user.isPro %}
  780.                     {% if not traineeHasPendingBooking %}
  781.                     <form action="{{ path('make_booking', {'courseToken': course.token}) }}" method="post" id="booking-request-form">
  782.                         <div class="row">
  783.                             <div class="col-12">
  784.                                 <h4 class="label-form">{{ "course_communication.date" | trans }}</h4>
  785.                                 <input type="hidden" name="begin" id="begin-date">
  786.                                 <input type="hidden" name="end" id="end-date">
  787.                                 <input type="hidden" name="price" id="price">
  788.                                 <input type="hidden" name="course_id" id="course" value="{{ course.id }}">
  789.                                 <div class="booking-date" id="selected-date">
  790.                                     
  791.                                 </div>
  792.                                 <h4 class="label-form">{{ "page_course_detail.number_of_participants" | trans }}</h4>
  793.                                 <div class="participants">
  794.                                     {% for age in course.ages | sort((a, b) => b.id <=> a.id) %}
  795.                                     
  796.                                     {% if age.slug == "adult" %}
  797.                                     <div class="participant-item">
  798.                                         <div class="participant-type">
  799.                                             <span class="type">{{ "page_course_detail.adult" | trans }}</span>
  800.                                             <span class="spec">{{ "page_course_detail.eighteen_and_over" | trans }}</span>
  801.                                         </div>
  802.                                         <div class="participant-input">
  803.                                             <input type="number" id="adult" name="adult" min="0" max="10" class="input-spinner-increment form-control" value="1">
  804.                                         </div>
  805.                                     </div>
  806.                                     {% elseif age.slug == "teen" %}
  807.                                     <div class="participant-item">
  808.                                         <div class="participant-type">
  809.                                             <span class="type">{{ "page_course_detail.teenager" | trans }}</span>
  810.                                             <span class="spec">{{ "page_course_detail.thirteen_seventeen" | trans }}</span>
  811.                                         </div>
  812.                                         <div class="participant-input">
  813.                                             <input type="number" id="ado" name="teen" min="0" max="10" class="input-spinner-increment form-control" value="0">
  814.                                         </div>
  815.                                     </div>
  816.                                     {% elseif age.slug == "child" %}
  817.                                     <div class="participant-item">
  818.                                         <div class="participant-type">
  819.                                             <span class="type">{{ "page_course_detail.child" | trans }}</span>
  820.                                             <span class="spec">{{ "page_course_detail.up_to_thirteen_years" | trans }}</span>
  821.                                         </div>
  822.                                         <div class="participant-input">
  823.                                             <input type="number" id="enfant" name="child" min="0" max="10" class="input-spinner-increment form-control" value="0">
  824.                                         </div>
  825.                                     </div>
  826.                                     {% endif %}
  827.                                     {% endfor %}
  828.                                 </div>
  829.                                 <div class="need-people hide">
  830.                                     <span class="text">{{ "page_course_detail.need_people" | trans }}</span>
  831.                                 </div>
  832.                                 {#
  833.                                 <h4 class="label-form">Total</h4>
  834.                                 <div class="booking-price">
  835.                                     <span id="price">500</span>
  836.                                     <span class="currency">€</span>
  837.                                 </div>
  838.                                 #}
  839.                     
  840.                             </div>
  841.                         </div>
  842.                         <div class="row mt-3">
  843.                             <div class="col-md-12">
  844.                                 <button type="submit" id="submit-booking-request" class="btn main-btn m-auto">{{ "page_course_detail.send_request" | trans }}</button>
  845.                             </div>
  846.                         </div>
  847.                     </form>
  848.                     {% else %}
  849.                     <h4 class="modal-subtitle">Une demande de réservation est en cours.</h4>
  850.                     {% endif %}
  851.                     
  852.                     {% else %}
  853.                     <h4 class="modal-subtitle">{{ "page_course_detail.cant_booking" | trans }}</h4>
  854.                     {% endif %}
  855.                     {% else %}
  856.                     <h4 class="modal-subtitle">{{ "page_course_detail.must_connect_for_booking" | trans }}</h4>
  857.                     <div class="must-login-actions">
  858.                         <a href="{{ path('user_login', {'type': 'trainee'}) }}" class="btn main-btn btn-sm">{{ "footer.login" | trans }}</a>
  859.                         <a href="{{ path('trainee_registration') }}" class="btn main-btn-outline btn-sm">{{ "sign_up.sign_up" | trans }}</a>
  860.                     </div>
  861.                     {% endif %}
  862.                     
  863.                 </div>
  864.             </div>
  865.         </div>
  866.     </div>
  867. {% endblock %}
  868. {% block javascript %}
  869.     
  870.     {{ parent() }}
  871.     {{ encore_entry_script_tags('single-course') }}
  872. {% endblock %}