diff --git a/app/main/routes.py b/app/main/routes.py index 850ca7c5f4c8db193d10caa12feab71b665d795c..a46cc93f5c0f0d16b86ddd848711d0d00ffbad6c 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -1,4 +1,4 @@ -from flask import render_template, send_from_directory, request +from flask import render_template, send_from_directory, request, jsonify from app.models import Listings, ListingImages from app.main import bp from app.logger import * @@ -33,23 +33,24 @@ def upload_file(filename): # Should only be used by ajax calls @bp.route('/log_message', methods=['POST']) def log_message(): - data = request.get_json() - log_message = data.get('log_message') - log_type = data.get('type') - - if log_type == 'app': - app_logger.info(log_message) - - if log_type == 'db': - db_logger.info(log_message) - - if log_type == 'auth': - auth_logger.info(log_message) - - if log_type == 'error': - error_logger.info(log_message) + try: + data = request.get_json() + log_message = data.get('log_message') + log_type = data.get('type') - if log_type == 'debug': - debug_logger.info(log_message) + if log_type == 'app': + app_logger.info(log_message) + elif log_type == 'db': + db_logger.info(log_message) + elif log_type == 'auth': + auth_logger.info(log_message) + elif log_type == 'error': + error_logger.info(log_message) + elif log_type == 'debug': + debug_logger.info(log_message) + else: + return jsonify({'success': False, 'error': 'Invalid log type'}), 400 - return True \ No newline at end of file + return jsonify({'success': True, 'message': 'Log message recorded'}) + except Exception as e: + return jsonify({'success': False, 'error': str(e)}), 500 diff --git a/app/templates/admin/edit_booking.html b/app/templates/admin/edit_booking.html index 68114bc634ef789e107bbdda8330dc9631a86329..5434b938234ba6f7e12000b8faf75e33d84e202e 100644 --- a/app/templates/admin/edit_booking.html +++ b/app/templates/admin/edit_booking.html @@ -222,29 +222,18 @@ }); }); - function logMessage(errorMessage, type) { + function logMessage(log_message, type) { fetch('{{ url_for("main.log_message") }}', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': '{{ csrf_token() }}' }, - body: JSON.stringify({ error: errorMessage, type: type }) + body: JSON.stringify({ log_message: log_message, type: type }) }); } - function logMessage(error_message, type) { - fetch('{{ url_for("main.log_message") }}', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-CSRFToken': '{{ csrf_token() }}' - }, - body: JSON.stringify({ error: error_message, type: type }) - }) - } - </script> <style> diff --git a/app/templates/index.html b/app/templates/index.html index b7504fdfdfa664aa8751f44085ada5a85c3822c7..ea2f31cc331349fb2649abdfe972a56e18e26439 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -2,102 +2,102 @@ {% block content %} <head> - <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='listings.css')}}"> - <script src="https://cdn.jsdelivr.net/npm/swiffy-slider@1.6.0/dist/js/swiffy-slider.min.js" crossorigin="anonymous" defer></script> + <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='listings.css') }}"> <link href="https://cdn.jsdelivr.net/npm/swiffy-slider@1.6.0/dist/css/swiffy-slider.min.css" rel="stylesheet" crossorigin="anonymous"> + <script src="https://cdn.jsdelivr.net/npm/swiffy-slider@1.6.0/dist/js/swiffy-slider.min.js" crossorigin="anonymous" defer></script> <style> .slider-wrapper { transform: scale(0.8); width: 100%; } </style> - <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /> + <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js" defer></script> </head> <div class="container mt-4"> <form id="travelForm" class="row g-3"> - <div class="col-md-6"> - <label for="departLocation" class="form-label">Departure Location:</label> - <select class="form-select select2-multiple" id="departLocation" name="departLocation" required> - <option value="" disabled selected>Select locations</option> - </select> - </div> - <div class="col-md-6"> - <label for="departureDate" class="form-label">Departure Date:</label> - <input type="date" class="form-control" id="departDate" name="departDate" required> - </div> - <div class="col-md-6"> - <label for="destinationLocation" class="form-label">Destination Location:</label> - <select class="form-select select2-multiple" id="destinationLocation" name="destinationLocation" required> - <option value="" disabled selected>Select locations</option> - </select> - </div> - <div class="col-md-6"> - <label for="numSeats" class="form-label">Number of Seats:</label> - <select class="form-select" id="numSeats" name="numSeats" required> - <option value="1">1</option> - <option value="2">2</option> - <option value="3">3</option> - <option value="4">4</option> - <option value="5">5</option> - </select> - </div> - <div class="col-md-6"> - <label for="seatType" class="form-label">Seat Type:</label> - <select id="seatType" class="form-select" name="seatType"> - <option value="economy">Economy</option> - <option value="business">Business</option> - <option value="firstClass">First Class</option> - </select> - </div> - <div class="col-md-6"> - <label for="tripType" class="form-label">Trip Type:</label> - <select id="tripType" class="form-select" name="tripType" onchange="toggleReturnFields()"> - <option value="oneWay">One-way</option> - <option value="return">Return</option> - </select> - </div> - <div class="col-md-6"> - <label for="returnDate" class="form-label">Return Date:</label> - <input type="date" class="form-control" id="returnDate" name="returnDate" disabled> - </div> - <div class="col-12"> - <button type="submit" class="btn btn-primary">Search</button> - </div> + <div class="col-md-6"> + <label for="departLocation" class="form-label">Departure Location:</label> + <select class="form-select select2-multiple" id="departLocation" name="departLocation" required> + <option value="" disabled selected>Select locations</option> + </select> + </div> + <div class="col-md-6"> + <label for="departureDate" class="form-label">Departure Date:</label> + <input type="date" class="form-control" id="departDate" name="departDate" required> + </div> + <div class="col-md-6"> + <label for="destinationLocation" class="form-label">Destination Location:</label> + <select class="form-select select2-multiple" id="destinationLocation" name="destinationLocation" required> + <option value="" disabled selected>Select locations</option> + </select> + </div> + <div class="col-md-6"> + <label for="numSeats" class="form-label">Number of Seats:</label> + <select class="form-select" id="numSeats" name="numSeats" required> + <option value="1">1</option> + <option value="2">2</option> + <option value="3">3</option> + <option value="4">4</option> + <option value="5">5</option> + </select> + </div> + <div class="col-md-6"> + <label for="seatType" class="form-label">Seat Type:</label> + <select id="seatType" class="form-select" name="seatType"> + <option value="economy">Economy</option> + <option value="business">Business</option> + <option value="firstClass">First Class</option> + </select> + </div> + <div class="col-md-6"> + <label for="tripType" class="form-label">Trip Type:</label> + <select id="tripType" class="form-select" name="tripType" onchange="toggleReturnFields()"> + <option value="oneWay">One-way</option> + <option value="return">Return</option> + </select> + </div> + <div class="col-md-6"> + <label for="returnDate" class="form-label">Return Date:</label> + <input type="date" class="form-control" id="returnDate" name="returnDate" disabled> + </div> + <div class="col-12"> + <button type="submit" class="btn btn-primary">Search</button> + </div> </form> - + <script> - function toggleReturnFields() { - var tripType = document.getElementById("tripType").value; - var returnDate = document.getElementById("returnDate"); - var returnTime = document.getElementById("returnTime"); - if (tripType === "return") { - returnDate.disabled = false; - returnTime.disabled = false; - } else { - returnDate.disabled = true; - returnTime.disabled = true; + function toggleReturnFields() { + var tripType = document.getElementById("tripType").value; + var returnDate = document.getElementById("returnDate"); + var returnTime = document.getElementById("returnTime"); + if (tripType === "return") { + returnDate.disabled = false; + returnTime.disabled = false; + } else { + returnDate.disabled = true; + returnTime.disabled = true; + } } - } - $(document).ready(function() { - $('.select2-multiple').select2({ - placeholder: "Select locations", - width: '100%' - }); + $(document).ready(function () { + $('.select2-multiple').select2({ + placeholder: "Select locations", + width: '100%' + }); - const locations = ['USA', 'Budapest', 'Location3', 'Location3', 'Location3'].sort(); - locations.forEach(location => { - $('#departLocation').append(new Option(location, location)); - $('#destinationLocation').append(new Option(location, location)); + const locations = ['USA', 'Budapest', 'Location3', 'Location3', 'Location3'].sort(); + locations.forEach(location => { + $('#departLocation').append(new Option(location, location)); + $('#destinationLocation').append(new Option(location, location)); + }); }); - }); </script> - </div> - <div> +</div> +<div> <div class="deals_text"><span class="deals_underline">Currently Hot Locations</span></div> <div class="slider-wrapper"> - <div class="swiffy-slider slider-item-show2 slider-item-reveal slider-nav-outside slider-nav-round slider-nav-visible slider-indicators-outside slider-indicators-round slider-indicators-dark slider-nav-animation slider-nav-animation-fadein slider-item-first-visible"> + <div class="swiffy-slider slider-item-show2 slider-item-reveal slider-nav-outside slider-nav-round slider-nav-visible slider-nav-loop slider-indicators-outside slider-indicators-round slider-indicators-dark slider-nav-animation slider-nav-animation-fadein slider-item-first-visible"> <ul class="slider-container py-4"> {% for listing in top_listings %} <li class="slide-visible"> @@ -116,15 +116,15 @@ </li> {% endfor %} </ul> - - <button type="button" class="slider-nav" aria-label="Go left"></button> + + <button type="button" class="slider-nav slider-nav-prev" aria-label="Go left"></button> <button type="button" class="slider-nav slider-nav-next" aria-label="Go right"></button> - + <div class="slider-indicators"> <button class="active" aria-label="Go to slide"></button> - <button aria-label="Go to slide" class=""></button> - <button aria-label="Go to slide" class=""></button> - <button aria-label="Go to slide" class=""></button> + <button aria-label="Go to slide"></button> + <button aria-label="Go to slide"></button> + <button aria-label="Go to slide"></button> </div> </div> </div> diff --git a/app/uploads/listing_images/16_83c5a311a110469c9fa97ddfce771d0c.gif b/app/uploads/listing_images/16_83c5a311a110469c9fa97ddfce771d0c.gif new file mode 100644 index 0000000000000000000000000000000000000000..71aede03087e88f8e47af526b1bcb71adb687192 Binary files /dev/null and b/app/uploads/listing_images/16_83c5a311a110469c9fa97ddfce771d0c.gif differ diff --git a/app/uploads/listing_images/1_1e1a3a59312549d7997b38ee887221d4.gif b/app/uploads/listing_images/1_1e1a3a59312549d7997b38ee887221d4.gif new file mode 100644 index 0000000000000000000000000000000000000000..71aede03087e88f8e47af526b1bcb71adb687192 Binary files /dev/null and b/app/uploads/listing_images/1_1e1a3a59312549d7997b38ee887221d4.gif differ diff --git a/app/uploads/listing_images/1_2db0a0423d9341a385177675149f6771.jpeg b/app/uploads/listing_images/1_2db0a0423d9341a385177675149f6771.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c775255f893e8d4baaad92fc47832c84a101e102 Binary files /dev/null and b/app/uploads/listing_images/1_2db0a0423d9341a385177675149f6771.jpeg differ diff --git a/app/uploads/listing_images/1_429c3f3406a74622b0c0bfa262ed4eac.jpeg b/app/uploads/listing_images/1_429c3f3406a74622b0c0bfa262ed4eac.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c775255f893e8d4baaad92fc47832c84a101e102 Binary files /dev/null and b/app/uploads/listing_images/1_429c3f3406a74622b0c0bfa262ed4eac.jpeg differ diff --git a/app/uploads/listing_images/1_43f2adea18b249608f86b9af72a2630f.gif b/app/uploads/listing_images/1_43f2adea18b249608f86b9af72a2630f.gif new file mode 100644 index 0000000000000000000000000000000000000000..71aede03087e88f8e47af526b1bcb71adb687192 Binary files /dev/null and b/app/uploads/listing_images/1_43f2adea18b249608f86b9af72a2630f.gif differ diff --git a/app/uploads/listing_images/1_593a952173f94463bbe3de8ac256b492.jpeg b/app/uploads/listing_images/1_593a952173f94463bbe3de8ac256b492.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c775255f893e8d4baaad92fc47832c84a101e102 Binary files /dev/null and b/app/uploads/listing_images/1_593a952173f94463bbe3de8ac256b492.jpeg differ diff --git a/app/uploads/listing_images/1_66e88c470c1c44a7b4f025c24c77ca2f.gif b/app/uploads/listing_images/1_66e88c470c1c44a7b4f025c24c77ca2f.gif new file mode 100644 index 0000000000000000000000000000000000000000..71aede03087e88f8e47af526b1bcb71adb687192 Binary files /dev/null and b/app/uploads/listing_images/1_66e88c470c1c44a7b4f025c24c77ca2f.gif differ diff --git a/app/uploads/listing_images/1_7a6fcdd7c4844443b8d66082802dbd11.jpeg b/app/uploads/listing_images/1_7a6fcdd7c4844443b8d66082802dbd11.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c775255f893e8d4baaad92fc47832c84a101e102 Binary files /dev/null and b/app/uploads/listing_images/1_7a6fcdd7c4844443b8d66082802dbd11.jpeg differ diff --git a/app/uploads/listing_images/1_8947c9bf789d406b9f36127b96cc2592.jpeg b/app/uploads/listing_images/1_8947c9bf789d406b9f36127b96cc2592.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c775255f893e8d4baaad92fc47832c84a101e102 Binary files /dev/null and b/app/uploads/listing_images/1_8947c9bf789d406b9f36127b96cc2592.jpeg differ diff --git a/app/uploads/listing_images/1_dade66b298ff49718bf828784a8b72e3.gif b/app/uploads/listing_images/1_dade66b298ff49718bf828784a8b72e3.gif new file mode 100644 index 0000000000000000000000000000000000000000..71aede03087e88f8e47af526b1bcb71adb687192 Binary files /dev/null and b/app/uploads/listing_images/1_dade66b298ff49718bf828784a8b72e3.gif differ diff --git a/app/uploads/listing_images/1_f55cd2f4d9884252b9f2f9dbee952b14.gif b/app/uploads/listing_images/1_f55cd2f4d9884252b9f2f9dbee952b14.gif new file mode 100644 index 0000000000000000000000000000000000000000..71aede03087e88f8e47af526b1bcb71adb687192 Binary files /dev/null and b/app/uploads/listing_images/1_f55cd2f4d9884252b9f2f9dbee952b14.gif differ