templates/_partials/courses/_favorito.html.twig line 1

Open in your IDE?
  1. {% if app.user %}
  2. <span class="favorito curso-favorito {% if actividad.isFavorito is defined and actividad.isFavorito %}active{% endif %}"
  3. data-actividad-id="{{ actividad.id }}"
  4. data-actividad-tipo="{{ actividad.tipo }}">*</span>
  5. <script>
  6. document.addEventListener('DOMContentLoaded', function() {
  7. // Inicializar botón de favorito para la actividad {{ actividad.tipo }}-{{ actividad.id }}
  8. const favoritoBtn = document.querySelector('.curso-favorito[data-actividad-id="{{ actividad.id }}"][data-actividad-tipo="{{ actividad.tipo }}"]');
  9. if (favoritoBtn) {
  10. favoritoBtn.addEventListener('click', function(e) {
  11. e.preventDefault();
  12. toggleFavorito(favoritoBtn);
  13. });
  14. }
  15. /**
  16. * Función para alternar el estado de favorito de un curso
  17. *
  18. * @param {HTMLElement} button Botón de favorito
  19. */
  20. function toggleFavorito(button) {
  21. const actividadId = button.dataset.actividadId;
  22. const actividadTipo = button.dataset.actividadTipo;
  23. // URL del endpoint
  24. const url = `/${document.documentElement.lang}/courses/ajax/favorito/${actividadTipo}/${actividadId}`;
  25. // Petición AJAX
  26. fetch(url, {
  27. method: 'POST',
  28. headers: {
  29. 'X-Requested-With': 'XMLHttpRequest',
  30. 'Content-Type': 'application/json'
  31. },
  32. credentials: 'same-origin'
  33. })
  34. .then(response => {
  35. if (!response.ok) {
  36. if (response.status === 403) {
  37. // Redirigir al login si no está autenticado
  38. window.location.href = `/${document.documentElement.lang}/login`;
  39. return Promise.reject('Redirect to login');
  40. }
  41. return Promise.reject(`Error: ${response.status}`);
  42. }
  43. return response.json();
  44. })
  45. .then(data => {
  46. if (data.success) {
  47. // Cambiar la clase del botón según el nuevo estado
  48. if (data.isFavorito) {
  49. button.classList.add('active');
  50. } else {
  51. button.classList.remove('active');
  52. }
  53. }
  54. })
  55. .catch(error => {
  56. console.error('Error:', error);
  57. });
  58. }
  59. });
  60. </script>
  61. {% endif %}