templates/front/course/_course-card.html.twig line 1

Open in your IDE?
  1. {% if course.owner is instanceof('App\\Entity\\Coach') %}
  2.     {% set type = 'coach' %}
  3. {% elseif course.owner is instanceof('App\\Entity\\Club') %}
  4.     {% set type = 'club' %}
  5. {% else %}
  6.     {% set type = 'operator' %}
  7. {% endif %}
  8. <div class="course-card {% if view is defined and view == "map" %}map-view{% endif %}" {% if view is defined and  view == 'map' %}data-lat="{{ course.address.latitude }}" data-lng="{{ course.address.longitude }}" data-name="{{ course | cheapestavailability.price }} €" data-type="{{ type }}"{% endif %}>
  9.     
  10.     {% if course.token in app.session.get('seenCourses') and (not app.user or (app.user and app.user is instanceof('App\\Entity\\Trainee'))) %}
  11.          <i class="fal fa-eye"></i>
  12.     {% endif %}
  13.     
  14.     {% if app.user and is_granted('ROLE_TRAINEE') %}
  15.     <a href="{{ path('add_course_favorite', {'id': course.id}) }}" class="btn btn-like-course" data-update data-token="{{ csrf_token('favorite' ~ course.id) }}">
  16.         <i class="fas fa-heart {% if app.user.isCourseFavorite(course) %}favorite{% endif %}"></i>
  17.     </a>
  18.     {% elseif not app.user %}
  19.     <button type="button" class="btn btn-like-course" data-toggle="modal" data-target="#add-to-favorite">
  20.         <i class="fas fa-heart"></i>
  21.     </button>
  22.     {% endif %}
  23.     <div class="course-img">
  24.         
  25.         {% if is_granted('ROLE_PRO') and menu is defined and menu == 'manage-courses' and app.user == course.owner %}
  26.         <!-- Modal delete course -->
  27.         <div class="modal fade" id="delete-course-{{ course.token }}" tabindex="-1" role="dialog" aria-labelledby="update-course-modal" aria-hidden="true">
  28.             <div class="modal-dialog modal-dialog-centered" role="document">
  29.                 <div class="modal-content">
  30.                     <form action="{{ path('handle_course_status', {'token': course.token}) }}" method="post">
  31.                         <div class="modal-body">
  32.                             <div class="modal-title-wrap">
  33.                                 <h5 class="modal-title">{{ "courses.delete_course" | trans }}</h5>
  34.                                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  35.                                     <i class="fal fa-times"></i>
  36.                                 </button>
  37.                             </div>
  38.                             <div class="row">
  39.                                 <div class="col-12">
  40.                                     <input type="hidden" name="status" value="deleted">
  41.                                     <p class="modal-text text-center">{{ "manage_courses.confirm_course_delete" | trans }}</p>
  42.                                 </div>
  43.                             </div>
  44.                             <div class="modal-actions">
  45.                                 <button type="submit" class="btn main-btn btn-sm mx-auto" name="save" value="save">{{ "manage_courses.yes_delete" | trans }}</button>
  46.                             </div>
  47.                         </div>
  48.                     </form>
  49.                 </div>
  50.             </div>
  51.         </div>
  52.         
  53.         {% if course.status == 'active' %}
  54.         <!-- Modal suspend course -->
  55.         <div class="modal fade" id="suspend-course-{{ course.token }}" tabindex="-1" role="dialog" aria-labelledby="update-course-modal" aria-hidden="true">
  56.             <div class="modal-dialog modal-dialog-centered" role="document">
  57.                 <div class="modal-content">
  58.                     <form action="{{ path('handle_course_status', {'token': course.token}) }}" method="post">
  59.                         <div class="modal-body">
  60.                             <div class="modal-title-wrap">
  61.                                 <h5 class="modal-title">{{ "courses.suspend_course" | trans }}</h5>
  62.                                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  63.                                     <i class="fal fa-times"></i>
  64.                                 </button>
  65.                             </div>
  66.                             <div class="row">
  67.                                 <div class="col-12">
  68.                                     <input type="hidden" name="status" value="suspended">
  69.                                     <p class="modal-text text-center">{{ "manage_courses.confirm_course_suspend" | trans }}</p>
  70.                                     <p class="modal-text text-center">{{ "manage_courses.course_suspend_delete_impact" | trans }}</p>
  71.                                 </div>
  72.                             </div>
  73.                             <div class="modal-actions">
  74.                                 <button type="submit" class="btn main-btn btn-sm mx-auto" name="save" value="save">{{ "manage_courses.yes_suspend" | trans }}</button>
  75.                             </div>
  76.                         </div>
  77.                     </form>
  78.                 </div>
  79.             </div>
  80.         </div>
  81.         
  82.         <div class="course-pro-actions">
  83.             <a class="btn pro-edit-btn on-course" href="{{ path('update_course', {'token': course.token}) }}" data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.modify_course" | trans }}">
  84.                 <i class="fas fa-pen"></i>
  85.             </a>
  86.             <a class="btn pro-edit-btn pro-duplicate-btn on-course" href="{{ path('duplicate_course', {'token': course.token}) }}"  data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.duplicate_this_internship" | trans }}">
  87.                 <i class="far fa-layer-plus"></i>
  88.             </a>
  89.             <a class="btn pro-edit-btn pro-template-btn on-course" href="{{ path('course_template', {'token': course.token}) }}" data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.view_templates" | trans }}">
  90.                 <i class="far fa-arrow-from-top"></i>
  91.             </a>
  92.             <button class="btn pro-edit-btn on-course" data-toggle="modal" data-target="#suspend-course-{{ course.token }}">
  93.                 <i class="far fa-pause"></i>
  94.             </button>
  95.             <button class="btn pro-edit-btn on-course" data-toggle="modal" data-target="#delete-course-{{ course.token }}">
  96.                 <i class="far fa-trash-alt"></i>
  97.             </button>
  98.         </div>
  99.         {% elseif course.status == 'pending' or course.status == 'suspended' %}
  100.         
  101.         <div class="course-pro-actions">
  102.             <a class="btn pro-edit-btn on-course" href="{{ path('update_course', {'token': course.token}) }}" data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.modify_course" | trans }}">
  103.                 <i class="fas fa-pen"></i>
  104.             </a>
  105.             
  106.             {% if course.status == 'pending' %}
  107.             <a class="btn pro-edit-btn pro-duplicate-btn on-course" href="{{ path('duplicate_course', {'token': course.token}) }}"  data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.duplicate_this_internship" | trans }}">
  108.                 <i class="far fa-layer-plus"></i>
  109.             </a>
  110.             {% endif %}
  111.             
  112.             <button class="btn pro-edit-btn on-course" data-toggle="modal" data-target="#delete-course-{{ course.token }}">
  113.                 <i class="far fa-trash-alt"></i>
  114.             </button>
  115.         </div>
  116.         {% elseif course.status == 'completed' %}
  117.         <div class="course-pro-actions">
  118.             <a class="btn pro-edit-btn pro-duplicate-btn on-course" href="{{ path('duplicate_course', {'token': course.token}) }}"  data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.duplicate_this_internship" | trans }}">
  119.                 <i class="far fa-layer-plus"></i>
  120.             </a>
  121.         </div>
  122.         {% elseif course.status == 'archived' %}
  123.             <div class="course-pro-actions">
  124.                 <a class="btn pro-edit-btn pro-duplicate-btn on-course" href="{{ path('duplicate_course', {'token': course.token}) }}"  data-toggle="tooltip" data-placement="top" title="{{ "manage_courses.duplicate_this_internship" | trans }}">
  125.                     <i class="far fa-layer-plus"></i>
  126.                 </a>
  127.                 <button class="btn pro-edit-btn on-course" data-toggle="modal" data-target="#delete-course-{{ course.token }}">
  128.                     <i class="far fa-trash-alt"></i>
  129.                 </button>
  130.             </div>
  131.         {% endif %}
  132.         {% endif %}
  133.         <a href="{{ path('view_course', {'token': course.token }) }}" class="course-link-img">
  134.         {% if course is hasseveralavailabilities %}
  135.             <div class="course-dates">{{ "directory.several_dates" | trans }}</div>
  136.         {% endif %}
  137.         {% if course.cover and course.cover is fileexists('courses_img_directory') %}
  138.             {% set firstPhoto = course.cover %}
  139.         {% else %}
  140.             {% set firstPhoto = 'default.png' %}
  141.         {% endif %}
  142.         <img loading="lazy" src="{{ asset('/images/stages/' ~ firstPhoto) }}" alt="Stage">
  143.         </a>
  144.         <div class="sports-wrap">
  145.             {% for sport in course.sports %}
  146.                 <a href="{{ path('courses', {'sports[]': sport.id, 'search': 'true'}) }}" class="sport-item">
  147.                     {{ ("sport_name." ~ sport.slug) | trans }}
  148.                 </a>
  149.             {% endfor %}
  150.         </div>
  151.     </div>
  152.     <div class="course-infos">
  153.         <a href="{{ path('view_course', {'token': course.token }) }}" class="course-link">
  154.             <h3 class="course-title">
  155.                 {{ course.getTranslatedContent(app.request.locale).name | raw }} 
  156.             </h3>
  157.             <div class="course-author {{ type }}">
  158.                 <div class="author">
  159.                     <a href="{{ path('view_pro', {'type': type, 'slug': course.owner.slug}) }}" class="author-link">
  160.                         {% if course.owner.photo is fileexists('avatar_directory') %}
  161.                             {% set avatar = course.owner.photo %}
  162.                         {% else %}
  163.                             {% set avatar = 'default-profile.png' %}
  164.                         {% endif %}
  165.                         <img loading="lazy" src="{{ asset('/images/profiles/' ~ avatar) }}" alt="{{ type | slice(0, 1) }}">
  166.                         <p class="course-owner-name">{{ course.owner.proInfo.fullname }}</p>
  167.                     </a>
  168.                 </div>
  169.                 
  170.                 <div class="author-stars">
  171.                     {% set averageNotes = getAverageNotes(course.owner)%}
  172.                     {% set average = averageNotes.total %}
  173.                     {% if average != 0 %}
  174.                         {% for i in 1..5 %}
  175.                             {% if average >= i %}
  176.                                 <i class="fas fa-star"></i>
  177.                             {% else %}
  178.                                 {% if average > (i - 1) %}
  179.                                     <i class="fas fa-star-half-alt"></i>
  180.                                 {% else %}
  181.                                     <i class="far fa-star"></i>                                    
  182.                                 {% endif %}
  183.                             {% endif %}
  184.                         {% endfor %}
  185.                     {% else %}
  186.                         {% for i in 1..5 %}
  187.                                 <i class="fas fa-star grey-star"></i>
  188.                             
  189.                         {% endfor %}
  190.                     {% endif %}
  191.                     <span class="pro-review-note">({{ averageNotes.count }})</span>
  192.                 </div>
  193.                 
  194.             </div>
  195.             
  196.             <div class="course-bottom">
  197.                 <div class="left-wrap">
  198.                     <div class="location">
  199.                         <img loading="lazy" src="{{ asset('/images/flag/') ~ course.countryCode | lower }}.svg" class="country-flag" alt="{{ course.countryCode }}">
  200.                         <span class="text">{{ course.address.city }}</span>
  201.                     </div>
  202.                     <div class="date">
  203.                     {% if course.status == "pending" or course.status == "active" %}
  204.                         <img loading="lazy" src="/images/icons/calendar-icon.svg" alt="Dates">
  205.                         {% if course.availabilities | length > 0 and course | nextdate(startingDate).begin != null %}
  206.                             {% if course is hasseveralavailabilities %}
  207.                                 <span class="text">{{ "courses.next_date" | trans }} : {{ course | nextdate(startingDate).begin }}</span>
  208.                             {% else %}
  209.                                 <span class="text">{{ "page_course_detail.from_short" | trans }} {{ course | nextdate(startingDate).begin }} {{ "page_course_detail.to" | trans }} {{ course | nextdate(startingDate).end }}</span>
  210.                             {% endif %}
  211.                         {% endif %}
  212.                     {% endif %}
  213.                     </div>
  214.                 </div>
  215.                 <div class="right-wrap">
  216.                     {% if course.availabilities | length > 0 and course | cheapestavailability.price != null %}
  217.                         <span class="price">{{ course | cheapestavailability.price }} €</span>
  218.                         <span class="duration">{{ "directory.on" | trans }} {{ course | cheapestavailability.duration }} {{ "page_course_detail.days" | trans | lower }}</span>
  219.                     {% endif %}
  220.                 </div>
  221.             </div>
  222.         </div>
  223.     </a>
  224. </div>