import os import json from django.shortcuts import render, get_object_or_404 from django.http import JsonResponse from django.contrib.auth.decorators import login_required from django.conf import settings from .models import Tour, TourCompletion @login_required def tour_list(request): tours = Tour.objects.filter(is_active=True) return render(request, 'tours/tour_list.html', {'tours': tours}) @login_required def get_tour_data(request, slug): tour = get_object_or_404(Tour, slug=slug, is_active=True) # Check if user has already completed this tour completed = TourCompletion.objects.filter(tour=tour, user=request.user).exists() # Load the tour data from JSON file tour_file_path = os.path.join(settings.BASE_DIR, 'static', 'js', 'tours', tour.tour_file) try: with open(tour_file_path, 'r') as f: tour_data = json.load(f) except (FileNotFoundError, json.JSONDecodeError): return JsonResponse({'error': 'Tour data not found or invalid'}, status=404) return JsonResponse({ 'tour': tour_data, 'completed': completed }) @login_required def mark_tour_completed(request, slug): if request.method != 'POST': return JsonResponse({'error': 'Method not allowed'}, status=405) tour = get_object_or_404(Tour, slug=slug, is_active=True) # Mark the tour as completed for this user TourCompletion.objects.get_or_create(tour=tour, user=request.user) return JsonResponse({'status': 'success'}) @login_required def start_tour_view(request, slug): tour = get_object_or_404(Tour, slug=slug, is_active=True) # Redirect to the page where the tour should start return render(request, 'tours/start_tour.html', {'tour': tour})