new courses landing page
This commit is contained in:
@@ -2263,7 +2263,7 @@ def course_map(course):
|
||||
|
||||
|
||||
|
||||
var mymap = L.map('map_canvas', {{
|
||||
var mymap = L.map('map_canvas_{id}', {{
|
||||
center: [{latmean}, {lonmean}],
|
||||
zoom: 13,
|
||||
layers: [outdoors]
|
||||
@@ -2306,6 +2306,7 @@ def course_map(course):
|
||||
|
||||
</script>
|
||||
""".format(
|
||||
id=course.id,
|
||||
latmean=latmean,
|
||||
lonmean=lonmean,
|
||||
scoordinates=scoordinates,
|
||||
@@ -2314,8 +2315,10 @@ def course_map(course):
|
||||
)
|
||||
|
||||
div = """
|
||||
<div id="map_canvas" style="width: 100%; height: 400px; margin:0; padding:0;grid-gap:0;"></div>
|
||||
"""
|
||||
<div id="map_canvas_{id}" style="width: 100%; height: 400px; margin:0; padding:0;grid-gap:0;"></div>
|
||||
""".format(
|
||||
id=course.id,
|
||||
)
|
||||
|
||||
return script, div
|
||||
|
||||
|
||||
105
rowers/templates/courses_challenges.html
Normal file
105
rowers/templates/courses_challenges.html
Normal file
@@ -0,0 +1,105 @@
|
||||
{% extends "newbase.html" %}
|
||||
{% load static %}
|
||||
{% load rowerfilters %}
|
||||
{% load leaflet_tags %}
|
||||
|
||||
{% block meta %}
|
||||
{% leaflet_js %}
|
||||
{% leaflet_css %}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}Rowsandall Virtual Challenges{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script type='text/javascript'
|
||||
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
|
||||
<ul class="main-content">
|
||||
<li class="grid_4">
|
||||
<h1>Courses you might like</h1>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="/rowers/list-courses/">All Courses</a>
|
||||
</p>
|
||||
<a href="/rowers/list-courses/?liked=true">Courses I like</a>
|
||||
</p>
|
||||
</li>
|
||||
{% for course in coursesdicts %}
|
||||
<li class="rounder">
|
||||
<a href="/rowers/courses/{{ course.course.id }}/">
|
||||
<h2>{{ course.course.name }}</h2>
|
||||
</a>
|
||||
<p>{{ course.course.country }}</p>
|
||||
<p>{{ course.course.distance }}m</p>
|
||||
<div class="mapdiv" id="{{ course.course.id }}">
|
||||
{{ course.div|safe}}
|
||||
{{ course.script|safe}}
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
<li class="grid_4">
|
||||
<h1>Interesting Challenges</h1>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="/rowers/virtualevents/">Challenges page</a>
|
||||
</p>
|
||||
<a href="/rowers/virtualevents/?nearby=true">Nearby Challenges</a>
|
||||
</p>
|
||||
</li>
|
||||
{% for challenge in challengesdicts %}
|
||||
<li class="rounder">
|
||||
<a href="/rowers/virtualevent/{{ challenge.challenge.id }}/">
|
||||
<h2>{{ challenge.challenge.name }}</h2>
|
||||
</a>
|
||||
<p>{{ challenge.challenge.startdate|date:"Y-m-d" }}
|
||||
{{ challenge.challenge.start_time|time:"H:i e" }}
|
||||
to
|
||||
{{ challenge.challenge.enddate|date:"Y-m-d" }}
|
||||
{{ challenge.challenge.end_time|time:"H:i e" }}
|
||||
({{ challenge.challenge.timezone }})</p>
|
||||
<p>{% if challenge.challenge.sessiontype == 'fastest_time' %}
|
||||
Time Challenge: To be rowed on the water
|
||||
{% elif challenge.challenge.sessiontype == 'fastest_distance' %}
|
||||
Distance Challenge: To be rowed on the water
|
||||
{% elif challenge.challenge.sessiontype != 'race' %}
|
||||
Indoor Race: To be rowed on a Concept2 ergometer
|
||||
{% endif %}
|
||||
</p>
|
||||
{% if challenge.challenge.sessiontype == 'fastest_time' %}
|
||||
<div class="vignet">
|
||||
<img src="/static/img/sculler.png"
|
||||
alt="Marked Course">
|
||||
</div>
|
||||
{% elif challenge.challenge.sessiontype == 'fastest_distance' %}
|
||||
<div class="vignet">
|
||||
<img src="/static/img/sculler.png"
|
||||
alt="Marked Course">
|
||||
</div>
|
||||
{% elif challenge.challenge.sessiontype != 'race' %}
|
||||
<div class="vignet">
|
||||
<img src="/static/img/domca.png"
|
||||
alt="Marked Course">
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
<div class="mapdiv" id="{{ challenge.challenge.id }}">
|
||||
{{ challenge.div|safe}}
|
||||
{{ challenge.script|safe}}
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'menu_racing.html' %}
|
||||
{% endblock %}
|
||||
@@ -309,6 +309,8 @@ urlpatterns = [
|
||||
name='workouts_view'),
|
||||
re_path(r'^list-workouts/user/(?P<userid>\d+)/$', views.workouts_view,
|
||||
name='workouts_view'),
|
||||
re_path(r'^courses/$', views.courses_challenges_view,
|
||||
name='courses_challenges_view'),
|
||||
re_path(r'^virtualevents/$', views.virtualevents_view,
|
||||
name='virtualevents_view'),
|
||||
re_path(r'^virtualevent/createchoice/$', TemplateView.as_view(
|
||||
|
||||
@@ -8,10 +8,86 @@ from django import forms
|
||||
from rowers.plannedsessions import timefield_to_seconds_duration
|
||||
|
||||
from rowers.courses import getnearestraces, getnearestcourses,coursetokml, coursestokml
|
||||
from random import sample
|
||||
|
||||
# landing page for challenges & courses
|
||||
def courses_challenges_view(request):
|
||||
r = getrower(request.user)
|
||||
g = GeoIP2()
|
||||
|
||||
ip = request.META.get('HTTP_X_REAL_IP', '1.1.1.1')
|
||||
try:
|
||||
lat_lon = g.lat_lon(ip)
|
||||
city = g.city(ip)
|
||||
except: # pragma: no cover
|
||||
lat_lon = None
|
||||
city = {
|
||||
'city': '',
|
||||
'country_name': '',
|
||||
'time_zone': '',
|
||||
}
|
||||
|
||||
courses = GeoCourse.objects.all().order_by("country", "name", "distance")
|
||||
nearby_courses = getnearestcourses(lat_lon, courses, whatisnear=2000)
|
||||
liked_courses = GeoCourse.objects.filter(followers=r)
|
||||
courses = GeoCourse.objects.filter(id__in=[course.id for course in nearby_courses]) | liked_courses
|
||||
|
||||
courses = sample(list(courses),3)
|
||||
|
||||
coursesdicts = []
|
||||
for course in courses:
|
||||
script, div = course_map(course)
|
||||
coursesdicts.append({
|
||||
'course': course,
|
||||
'script': script,
|
||||
'div': div,
|
||||
})
|
||||
|
||||
challenges = VirtualRace.objects.filter(startdate__gte=timezone.now())
|
||||
challenges2 = VirtualRace.objects.filter(startdate__lte=timezone.now(),
|
||||
evaluation_closure__gte=timezone.now()-datetime.timedelta(days=3))
|
||||
|
||||
challenges = challenges | challenges2
|
||||
while len(challenges) < 3:
|
||||
allchallenges = VirtualRace.objects.all().order_by("-startdate")
|
||||
challenges = list(challenges)+sample(list(allchallenges), 3-len(challenges))
|
||||
challenges = list(set(challenges))
|
||||
|
||||
challenges = sample(list(challenges),3)
|
||||
|
||||
challengesdicts = []
|
||||
for challenge in challenges:
|
||||
script = ''
|
||||
div = ''
|
||||
if challenge.course:
|
||||
script, div = course_map(challenge.course)
|
||||
|
||||
challengesdicts.append(
|
||||
{
|
||||
'script': script,
|
||||
'div': div,
|
||||
'challenge': challenge,
|
||||
}
|
||||
)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url': reverse('courses_challenges_view'),
|
||||
'name': 'Courses and Challenges'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
return render(request, "courses_challenges.html",
|
||||
{
|
||||
'coursesdicts': coursesdicts,
|
||||
'rower': r,
|
||||
'challengesdicts': challengesdicts,
|
||||
'breadcrumbs': breadcrumbs,
|
||||
})
|
||||
|
||||
|
||||
# List Courses
|
||||
|
||||
|
||||
def courses_view(request):
|
||||
r = getrower(request.user)
|
||||
g = GeoIP2()
|
||||
|
||||
Reference in New Issue
Block a user