templates/front/courses/course_details.html.twig line 1

  1. {% extends "front/base.html.twig" %}
  2. {% block title %} - Course détails{% endblock %}
  3. {% block mainContent %}
  4.     <section class="py-0 pb-lg-5">
  5.         <div class="container">
  6.             <div class="row g-3">
  7.                 <!-- Course video START -->
  8.                 <div class="col-12">
  9.                     <div class="video-player rounded-3">
  10.                         {% if course.media.videoUrl is not same as null or course.media.mp4File is not same as null or course.media.webMFile is not same  as null or course.media.oggFile is not same as null %}
  11.                             <video style="max-height: 600px;overflow: hidden;" controls crossorigin="anonymous" playsinline poster="{{ asset('uploads/media/courses/' ~ course.media.imageFile) }}">
  12.                                 {% if course.media.videoUrl is not same as null %}
  13.                                     <source src="{{ course.media.videoUrl }}" type="video/mp4" size="720">
  14.                                 {% endif %}
  15.                                 {% if course.media.mp4File is not same as null %}
  16.                                     <source src="{{ asset('uploads/media/courses/' ~ course.media.mp4File) }}" type="video/mp4" size="720">
  17.                                 {% endif %}
  18.                                 {% if course.media.webMFile is not same as null %}
  19.                                     <source src="{{ asset('uploads/media/courses/' ~ course.media.webMFile) }}" type="video/webm" size="720">
  20.                                 {% endif %}
  21.                                 {% if course.media.oggFile is not same as null %}
  22.                                     <source src="{{ asset('uploads/media/courses/' ~ course.media.oggFile) }}" type="video/ogg" size="720">
  23.                                 {% endif %}
  24.                             </video>
  25.                         {% else %}
  26.                             <img style="width: 100%;max-height: 400px;" src="{{ asset('uploads/media/courses/' ~ course.media.imageFile) }}" alt="">
  27.                         {% endif %}
  28.                     </div>
  29.                 </div>
  30.                 <!-- Course video END -->
  31.                 <!-- Playlist responsive toggler START -->
  32.                 <div class="col-12 d-lg-none">
  33.                     <button class="btn btn-primary mb-3" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasSidebar" aria-controls="offcanvasSidebar">
  34.                         <i class="bi bi-camera-video me-1"></i> {% trans %}PLAYLIST_KEY{% endtrans %}
  35.                     </button>
  36.                 </div>
  37.                 <!-- Playlist responsive toggler END -->
  38.             </div>
  39.         </div>
  40.     </section>
  41.     <section class="pt-0">
  42.         <div class="container">
  43.             <div class="row g-lg-5">
  44.                 <!-- Main content START -->
  45.                 <div class="col-lg-8">
  46.                     <div class="row g-4">
  47.                                 
  48.                         <!-- Course title START -->
  49.                         <div class="col-12">
  50.                             <!-- Title -->
  51.                             <h1>{{ course.intitule }}</h1>
  52.                             <!-- Content -->
  53.                             <ul class="list-inline mb-0">
  54.                                 <li class="list-inline-item h6 me-3 mb-1 mb-sm-0"><i class="fas fa-star text-warning me-2"></i>{{ course.review }}/5.0</li>
  55.                                 <li class="list-inline-item h6 me-3 mb-1 mb-sm-0"><i class="fas fa-user-graduate text-orange me-2"></i>{{ course.eleves|length }} Enrolled</li>
  56.                                 <li class="list-inline-item h6 me-3 mb-1 mb-sm-0"><i class="fas fa-signal text-success me-2"></i>{{ course.niveauDifficulte }}</li>
  57.                             </ul>
  58.                         </div>
  59.                         <!-- Course title END -->
  60.                         <!-- Instructor detail START -->
  61.                         <div class="col-12">
  62.                             <div class="d-sm-flex justify-content-sm-between align-items-center">
  63.                                 <!-- Avatar detail -->
  64.                                 <div class="d-flex align-items-center">
  65.                                     <!-- Avatar image -->
  66.                                     <div class="avatar avatar-lg">
  67.                                         <img class="avatar-img rounded-circle" src="{{ asset(course.enseignant.avatar) }}" alt="avatar">
  68.                                     </div>
  69.                                     <div class="ms-3">
  70.                                         <h6 class="mb-0"><a href="#">{% trans %}BY_KEY{% endtrans %} {{ course.enseignant.utilisateur.personne.nomComplet }}</a></h6>
  71.                                         <p class="mb-0 small">{% trans %}TRAINER_KEY{% endtrans %}</p>
  72.                                     </div>
  73.                                 </div>
  74.                                 <!-- Button -->
  75.                                 <div class="d-flex mt-2 mt-sm-0">
  76.                                     <a class="btn btn-danger-soft btn-sm mb-0" href="#">Follow</a>
  77.                                     <!-- Share button with dropdown -->
  78.                                     <div class="dropdown ms-2">
  79.                                         <a href="#" class="btn btn-sm mb-0 btn-info-soft small" role="button" id="dropdownShare" data-bs-toggle="dropdown" aria-expanded="false">
  80.                                             {% trans %}SHARE_KEY{% endtrans %}
  81.                                         </a>
  82.                                         <!-- dropdown button -->
  83.                                         <ul class="dropdown-menu dropdown-w-sm dropdown-menu-end min-w-auto shadow rounded" aria-labelledby="dropdownShare">
  84.                                             <li><a  class="dropdown-item" href="#"><i class="fab fa-twitter-square me-2"></i>Twitter</a></li>
  85.                                             <li><a class="dropdown-item" href="#"><i class="fab fa-facebook-square me-2"></i>Facebook</a></li>
  86.                                             <li><a class="dropdown-item" href="#"><i class="fab fa-linkedin me-2"></i>LinkedIn</a></li>
  87.                                             <li><a class="dropdown-item" href="#"><i class="fas fa-copy me-2"></i>Copy link</a></li>
  88.                                         </ul>
  89.                                     </div>
  90.                                 </div>
  91.                             </div>
  92.                         </div>
  93.                         <!-- Instructor detail END -->
  94.                         <!-- Course detail START -->
  95.                         <div class="col-12">
  96.                             <!-- Tabs START -->
  97.                             <ul class="nav nav-pills nav-pills-bg-soft px-3" id="course-pills-tab" role="tablist">
  98.                                 <!-- Tab item -->
  99.                                 <li class="nav-item me-2 me-sm-4" role="presentation">
  100.                                     <button class="nav-link mb-0 active" id="course-pills-tab-1" data-bs-toggle="pill" data-bs-target="#course-pills-1" type="button" role="tab" aria-controls="course-pills-1" aria-selected="true">{% trans %}COURSEOVERVIEW_KEY{% endtrans %}</button>
  101.                                 </li>
  102.                                 <!-- Tab item -->
  103.                                 <li class="nav-item me-2 me-sm-4" role="presentation">
  104.                                     <button class="nav-link mb-0" id="course-pills-tab-2" data-bs-toggle="pill" data-bs-target="#course-pills-2" type="button" role="tab" aria-controls="course-pills-2" aria-selected="false">{% trans %}COURSE_REVIEWS_KEY{% endtrans %}</button>
  105.                                 </li>
  106.                                 <!-- Tab item -->
  107.                                 <li class="nav-item me-2 me-sm-4" role="presentation">
  108.                                     <button class="nav-link mb-0" id="course-pills-tab-3" data-bs-toggle="pill" data-bs-target="#course-pills-3" type="button" role="tab" aria-controls="course-pills-3" aria-selected="false">FAQs </button>
  109.                                 </li>
  110.                                 <!-- Tab item -->
  111.                                 <li class="nav-item me-2 me-sm-4" role="presentation">
  112.                                     <button class="nav-link mb-0" id="course-pills-tab-4" data-bs-toggle="pill" data-bs-target="#course-pills-4" type="button" role="tab" aria-controls="course-pills-4" aria-selected="false">Forum</button>
  113.                                 </li>
  114.                             </ul>
  115.                             <!-- Tabs END -->
  116.                             <!-- Tab contents START -->
  117.                             <div class="tab-content pt-4 px-3" id="course-pills-tabContent">
  118.                                 <!-- Content START -->
  119.                                 <div class="tab-pane fade show active" id="course-pills-1" role="tabpanel" aria-labelledby="course-pills-tab-1">
  120.                                     <!-- Course detail START -->
  121.                                     <h5 class="mb-3">Course Description</h5>
  122.                                     {{ course.content|raw }}
  123.                                 </div>
  124.                                 <!-- Content END -->
  125.                                 <!-- Content START -->
  126.                                 <div class="tab-pane fade" id="course-pills-2" role="tabpanel" aria-labelledby="course-pills-tab-2">
  127.                                     {{ include('front/includes/courses/_course_reviews.html.twig') }}
  128.                                 </div>
  129.                                 <!-- Content END -->
  130.                                 <!-- Content START -->
  131.                                 <div class="tab-pane fade" id="course-pills-3" role="tabpanel" aria-labelledby="course-pills-tab-3">
  132.                                     <!-- Title -->
  133.                                     <h5 class="mb-3">Frequently Asked Questions</h5>
  134.                                     {% for faq in course.faqs %}
  135.                                         <!-- FAQ item -->
  136.                                         <div class="mt-4">
  137.                                             <h6>{{ faq.question }}</h6>
  138.                                             <p class="mb-0">{{ faq.answer }}</p>
  139.                                         </div>
  140.                                     {% endfor %}
  141.                         
  142.                                 </div>
  143.                                 <!-- Content END -->
  144.                                 <!-- Content START -->
  145.                                 <div class="tab-pane fade" id="course-pills-4" role="tabpanel" aria-labelledby="course-pills-tab-4">
  146.                                     {{ include('front/includes/courses/forum.html.twig') }}
  147.                                 </div>
  148.                                 <div class="mt-5 text-right">
  149.                                     {% if lastReadLesson is not same as null %}
  150.                                         <a class="btn btn-success-soft" href="{{ url("app_front_read_lesson", {slug: lastReadLesson.slug}) }}">Poursuivre la lecture</a>
  151.                                     {% else %}
  152.                                         <a href="{{ path('app_front_course_start', {slug: course.slug}) }}" class="btn btn-primary-soft">Commencer la lecture</a>
  153.                                     {% endif %}
  154.                                     
  155.                                     
  156.                                 </div>
  157.                                 <!-- Content END -->
  158.                             </div>
  159.                             <!-- Tab contents END -->
  160.                         </div>
  161.                         <!-- Course detail END -->
  162.                     </div>
  163.                 </div>
  164.                 <!-- Main content END -->
  165.                 <!-- Right sidebar START -->
  166.                 <div class="col-lg-4">
  167.                     <!-- Responsive offcanvas body START -->
  168.                     <div class="offcanvas-lg offcanvas-end" tabindex="-1" id="offcanvasSidebar" aria-labelledby="offcanvasSidebarLabel">
  169.                         <div class="offcanvas-header bg-dark">
  170.                             <h5 class="offcanvas-title text-white" id="offcanvasSidebarLabel">Course playlist</h5>
  171.                             <button type="button" class="btn btn-sm btn-light mb-0" data-bs-dismiss="offcanvas" data-bs-target="#offcanvasSidebar" aria-label="Close"><i class="bi bi-x-lg"></i></button>
  172.                         </div>
  173.                         <div class="offcanvas-body p-3 p-lg-0">
  174.                             <div class="col-12">
  175.                                 <!-- Accordion START -->
  176.                                 <div class="accordion accordion-icon accordion-bg-light" id="accordionExample2">
  177.                                     {% for chapter in course.chapitres %}
  178.                                         <!-- Item -->
  179.                                         <div class="accordion-item mb-3">
  180.                                             <h6 class="accordion-header font-base" id="heading-{{ chapter.id }}">
  181.                                                 <a class="accordion-button fw-bold rounded {{ loop.index > 1 ? 'collapsed' : '' }} d-block" href="#collapse-{{ chapter.id }}" data-bs-toggle="collapse" data-bs-target="#collapse-{{ chapter.id }}" aria-expanded="{{ loop.index > 1 ? 'false' : 'true' }}" aria-controls="collapse-{{ chapter.id }}">
  182.                                                     <span class="mb-0">{{ chapter.title }}</span> 
  183.                                                     <span class="small d-block mt-1">({{ chapter.lessons|length }} Lectures)</span> 
  184.                                                 </a>
  185.                                             </h6>
  186.                                             <div id="collapse-{{ chapter.id }}" class="accordion-collapse collapse {{ loop.index is same as 1 ? 'show' : '' }}" aria-labelledby="heading-{{ chapter.id }}" data-bs-parent="#accordionExample2">
  187.                                                 <div class="accordion-body mt-3">
  188.                                                     <div class="vstack gap-3">
  189.                                                         <!-- Progress bar -->
  190.                                                         <div class="overflow-hidden">
  191.                                                             <div class="d-flex justify-content-between">
  192.                                                                 <p class="mb-1 h6">0/{{ chapter.lessons|length  }} Completed</p>
  193.                                                                 <h6 class="mb-1 text-end">0%</h6>
  194.                                                             </div>
  195.                                                             <div class="progress progress-sm bg-primary bg-opacity-10">
  196.                                                                 <div class="progress-bar bg-primary aos" role="progressbar" data-aos="slide-right" data-aos-delay="200" data-aos-duration="1000" data-aos-easing="ease-in-out" style="width: 0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
  197.                                                                 </div>
  198.                                                             </div>
  199.                                                         </div>
  200.                                                         {% for lesson in chapter.lessons %}
  201.                                                             <!-- Course lecture -->
  202.                                                             <div class="d-flex justify-content-between align-items-center">
  203.                                                                 <div class="position-relative d-flex align-items-center">
  204.                                                                     {% if is_granted('ROLE_INSTRUCTOR') or is_granted('ROLE_ADMIN') %}
  205.                                                                         <a href="{{  not app.user and not is_granted('ROLE_INSTRUCTOR') }}" class="btn btn-danger-soft btn-round btn-sm mb-0 stretched-link position-static">
  206.                                                                             <i class="fas fa-play me-0"></i>
  207.                                                                         </a>
  208.                                                                     {% else %}
  209.                                                                         <a href="#" class="btn btn-danger-soft btn-round btn-sm mb-0 stretched-link position-static">
  210.                                                                             <i class="fas fa-play me-0"></i>
  211.                                                                         </a>    
  212.                                                                     {% endif %}
  213.                                                                     
  214.                                                                     <span class="d-inline-block text-truncate ms-2 mb-0 h6 fw-light w-200px">{{ lesson.title }}</span>
  215.                                                                 </div>
  216.                                                                 <p class="mb-0 text-truncate">2m 10s</p>
  217.                                                             </div>
  218.                                                         {% endfor %}
  219.                                                     </div>
  220.                                                 </div>
  221.                                             </div>
  222.                                         </div>
  223.                                     {% endfor %}
  224.                                 </div>
  225.                                 <!-- Accordion END -->
  226.                             </div>
  227.                         </div>
  228.                     </div>
  229.                     <!-- Responsive offcanvas body END -->
  230.                     <!-- Tags START -->
  231.                     <div class="mt-4">
  232.                         <h4 class="mb-3">Tags</h4>
  233.                         <ul class="list-inline mb-0">
  234.                             {% for tag in course.tags|split(',') %}
  235.                                 <li class="list-inline-item"> <a class="btn btn-outline-light btn-sm" href="#">{{ tag }}</a> </li>
  236.                             {% endfor %}
  237.                         </ul>
  238.                     </div>
  239.                     <!-- Tags END -->
  240.                 </div>
  241.                 <!-- Right sidebar END -->
  242.             </div><!-- Row END -->
  243.         </div>
  244.     </section>
  245.     <!-- =======================
  246.     Listed courses START -->
  247.     <section class="pt-0">
  248.         <div class="container">
  249.             <!-- Title -->
  250.             <div class="row mb-4">
  251.                 <h2 class="mb-0">Top Listed Courses</h2>
  252.             </div>
  253.             <div class="row">
  254.                 <!-- Slider START -->
  255.                 <div class="tiny-slider arrow-round arrow-blur arrow-hover">
  256.                     <div class="tiny-slider-inner" data-autoplay="false" data-arrow="true" data-edge="2" data-dots="false" data-items="3" data-items-lg="2" data-items-sm="1">
  257.                         {% for cours in topCourses %}
  258.                             {% if cours is not same as course %}
  259.                                 {{ include('front/includes/courses/_trending_course.html.twig', {course: cours}) }}
  260.                             {% endif %}
  261.                         {% endfor %}
  262.                     </div>
  263.                 </div>
  264.                 <!-- Slider END -->        
  265.             </div>
  266.         </div>
  267.     </section>
  268.     <!-- =======================
  269.     Listed courses END -->
  270. {% endblock %}