2013-08-25 20:16:20 +10:00
|
|
|
"""
|
|
|
|
|
Define the views for the Django MVC
|
|
|
|
|
"""
|
|
|
|
|
|
2013-07-27 22:23:05 +10:00
|
|
|
from django import template
|
|
|
|
|
from django.views import generic
|
2014-02-21 23:38:18 +10:00
|
|
|
from itertools import chain
|
|
|
|
|
from operator import attrgetter
|
2013-07-27 22:23:05 +10:00
|
|
|
|
2014-03-01 23:08:25 +10:00
|
|
|
from three_d_viewer.models import Sample, Category, Mineral, GlossaryEntry
|
2013-07-27 22:23:05 +10:00
|
|
|
register = template.Library()
|
|
|
|
|
|
|
|
|
|
|
2013-09-11 23:44:40 +10:00
|
|
|
class HomeView(generic.ListView):
|
2013-08-25 20:16:20 +10:00
|
|
|
"""
|
2013-09-11 23:44:40 +10:00
|
|
|
Show the home page
|
2013-08-25 20:16:20 +10:00
|
|
|
"""
|
2013-07-27 22:23:05 +10:00
|
|
|
|
2013-09-11 23:44:40 +10:00
|
|
|
template_name = 'three_d_viewer/home.html'
|
|
|
|
|
model = Sample
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(HomeView, self).get_context_data(**kwargs)
|
2014-01-21 21:43:23 +10:00
|
|
|
context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).order_by('name')
|
2013-09-11 23:44:40 +10:00
|
|
|
context['parent_categories'] = Category.objects.filter(parent=None). \
|
2014-01-21 15:59:23 +10:00
|
|
|
filter(active=True).order_by('name')
|
2013-09-11 23:44:40 +10:00
|
|
|
return context
|
2013-07-27 22:23:05 +10:00
|
|
|
|
2014-02-21 23:38:18 +10:00
|
|
|
class MineralPracticeView(generic.ListView):
|
2014-02-24 13:05:21 +10:00
|
|
|
model = Mineral
|
2014-02-21 23:38:18 +10:00
|
|
|
template_name = 'three_d_viewer/minerals_practice.html'
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(MineralPracticeView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Minerals')
|
|
|
|
|
result = cat.active_samples
|
2013-07-27 22:23:05 +10:00
|
|
|
|
2014-02-21 23:38:18 +10:00
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-24 14:32:56 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2014-02-21 23:38:18 +10:00
|
|
|
return context
|
2014-02-20 15:21:50 +10:00
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
class MineralDetailView(generic.DetailView):
|
2013-08-25 20:16:20 +10:00
|
|
|
"""
|
2014-02-24 13:05:21 +10:00
|
|
|
Add extra functionality for mineral details
|
2013-08-25 20:16:20 +10:00
|
|
|
"""
|
2013-09-11 23:44:40 +10:00
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
model = Mineral
|
|
|
|
|
template_name = 'three_d_viewer/mineral_detail.html'
|
|
|
|
|
|
|
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(MineralDetailView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Minerals')
|
|
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-24 14:32:56 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2014-02-24 13:05:21 +10:00
|
|
|
return context
|
|
|
|
|
|
2014-03-03 12:55:46 +10:00
|
|
|
def get_object(self, queryset=None):
|
|
|
|
|
object = super(MineralDetailView, self).get_object()
|
|
|
|
|
object.viewed_count += 1
|
|
|
|
|
object.save()
|
|
|
|
|
return object
|
|
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
class RockPracticeView(generic.ListView):
|
2013-07-27 22:23:05 +10:00
|
|
|
model = Sample
|
2014-02-24 13:05:21 +10:00
|
|
|
template_name = 'three_d_viewer/rock_practice.html'
|
|
|
|
|
|
2013-09-11 23:44:40 +10:00
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
2014-01-21 15:59:23 +10:00
|
|
|
filter(active=True).order_by("name")
|
2013-09-11 23:44:40 +10:00
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
|
2013-09-11 23:44:40 +10:00
|
|
|
def get_context_data(self, **kwargs):
|
2014-02-24 13:05:21 +10:00
|
|
|
context = super(RockPracticeView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Rocks')
|
|
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-17 16:35:55 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2013-09-11 23:44:40 +10:00
|
|
|
return context
|
2014-01-21 21:43:23 +10:00
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
class RockDetailView(generic.DetailView):
|
|
|
|
|
model = Sample
|
|
|
|
|
template_name = 'three_d_viewer/rock_detail.html'
|
2014-01-21 21:43:23 +10:00
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(RockDetailView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Rocks')
|
|
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-17 16:35:55 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2014-02-24 13:05:21 +10:00
|
|
|
return context
|
|
|
|
|
|
2014-03-03 12:55:46 +10:00
|
|
|
def get_object(self, queryset=None):
|
|
|
|
|
object = super(RockDetailView, self).get_object()
|
|
|
|
|
object.viewed_count += 1
|
|
|
|
|
object.save()
|
|
|
|
|
return object
|
|
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
class FossilPracticeView(generic.ListView):
|
|
|
|
|
model = Sample
|
|
|
|
|
template_name = 'three_d_viewer/fossil_practice.html'
|
2014-01-21 23:54:09 +10:00
|
|
|
|
|
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
2014-02-24 13:05:21 +10:00
|
|
|
|
2014-01-21 23:54:09 +10:00
|
|
|
def get_context_data(self, **kwargs):
|
2014-02-24 13:05:21 +10:00
|
|
|
context = super(FossilPracticeView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Fossils')
|
|
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-24 14:32:56 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2014-02-24 13:05:21 +10:00
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
class FossilDetailView(generic.DetailView):
|
|
|
|
|
model = Sample
|
|
|
|
|
template_name = 'three_d_viewer/fossil_detail.html'
|
|
|
|
|
|
|
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(FossilDetailView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Fossils')
|
2014-02-22 13:38:18 +10:00
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-24 14:32:56 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2014-03-01 23:08:25 +10:00
|
|
|
return context
|
2014-03-03 12:55:46 +10:00
|
|
|
|
|
|
|
|
def get_object(self, queryset=None):
|
|
|
|
|
object = super(FossilDetailView, self).get_object()
|
|
|
|
|
object.viewed_count += 1
|
|
|
|
|
object.save()
|
|
|
|
|
return object
|
2014-03-01 23:08:25 +10:00
|
|
|
|
|
|
|
|
class GlossaryView(generic.ListView):
|
|
|
|
|
model = GlossaryEntry
|
|
|
|
|
template_name = 'three_d_viewer/glossary.html'
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(GlossaryView, self).get_context_data(**kwargs)
|
2014-03-03 12:55:46 +10:00
|
|
|
context['entries'] = GlossaryEntry.objects.all().order_by("name")
|
2014-03-01 23:08:25 +10:00
|
|
|
return context
|
2014-11-17 16:35:55 +10:00
|
|
|
|
|
|
|
|
class ERB101HomeView(generic.ListView):
|
|
|
|
|
"""
|
|
|
|
|
Show the home page
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
template_name = 'three_d_viewer/erb101/home.html'
|
|
|
|
|
model = Sample
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(ERB101HomeView, self).get_context_data(**kwargs)
|
|
|
|
|
context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).filter(erb101_sample=True).order_by('name')
|
|
|
|
|
context['parent_categories'] = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by('name')
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
class ERB101MineralPracticeView(generic.ListView):
|
|
|
|
|
model = Mineral
|
2014-11-24 14:32:56 +10:00
|
|
|
template_name = 'three_d_viewer/erb101/minerals_practice.html'
|
2014-11-17 16:35:55 +10:00
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(ERB101MineralPracticeView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Minerals')
|
|
|
|
|
result = cat.active_101_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_101_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
2014-11-24 14:32:56 +10:00
|
|
|
context['base_template'] = 'three_d_viewer/erb101/base.html'
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
class ERB101MineralDetailView(generic.DetailView):
|
|
|
|
|
"""
|
|
|
|
|
Add extra functionality for mineral details
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
model = Mineral
|
|
|
|
|
template_name = 'three_d_viewer/erb101/mineral_detail.html'
|
|
|
|
|
|
|
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(ERB101MineralDetailView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Minerals')
|
|
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
|
|
|
|
context['base_template'] = 'three_d_viewer/erb101/base.html'
|
2014-11-17 16:35:55 +10:00
|
|
|
return context
|
2014-11-24 14:32:56 +10:00
|
|
|
|
|
|
|
|
def get_object(self, queryset=None):
|
|
|
|
|
object = super(ERB101MineralDetailView, self).get_object()
|
|
|
|
|
object.viewed_count += 1
|
|
|
|
|
object.save()
|
|
|
|
|
return object
|
2014-11-17 16:35:55 +10:00
|
|
|
|
|
|
|
|
class ERB101RockPracticeView(generic.ListView):
|
|
|
|
|
model = Sample
|
2014-11-24 14:32:56 +10:00
|
|
|
template_name = 'three_d_viewer/erb101/rock_practice.html'
|
2014-11-17 16:35:55 +10:00
|
|
|
|
|
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(ERB101RockPracticeView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Rocks')
|
|
|
|
|
result = cat.active_101_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_101_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
|
|
|
|
context['base_template'] = 'three_d_viewer/erb101/base.html'
|
|
|
|
|
return context
|
2014-11-24 14:32:56 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ERB101RockDetailView(generic.DetailView):
|
|
|
|
|
model = Sample
|
|
|
|
|
template_name = 'three_d_viewer/erb101/rock_detail.html'
|
|
|
|
|
|
|
|
|
|
parent_categories = Category.objects.filter(parent=None). \
|
|
|
|
|
filter(active=True).order_by("name")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(ERB101RockDetailView, self).get_context_data(**kwargs)
|
|
|
|
|
cat = Category.objects.get(name='Rocks')
|
|
|
|
|
result = cat.active_samples
|
|
|
|
|
|
|
|
|
|
for child in cat.active_children:
|
|
|
|
|
result = chain(result, child.active_samples)
|
|
|
|
|
|
|
|
|
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
|
|
|
|
context['base_template'] = 'three_d_viewer/erb101/base.html'
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
def get_object(self, queryset=None):
|
|
|
|
|
object = super(ERB101RockDetailView, self).get_object()
|
|
|
|
|
object.viewed_count += 1
|
|
|
|
|
object.save()
|
|
|
|
|
return object
|
|
|
|
|
|
|
|
|
|
class TheoryTemplateView(generic.TemplateView):
|
2014-12-02 16:20:52 +10:00
|
|
|
|
2014-11-24 14:32:56 +10:00
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(TheoryTemplateView, self).get_context_data(**kwargs)
|
|
|
|
|
context['base_template'] = 'three_d_viewer/base.html'
|
2015-02-24 13:37:55 +10:00
|
|
|
context['url_extender'] = 'three_d_viewer:'
|
2014-12-02 16:20:52 +10:00
|
|
|
context['olivine'] = Mineral.objects.filter(name='Olivine')[0]
|
|
|
|
|
context['quartz'] = Mineral.objects.filter(name='Quartz')[0]
|
|
|
|
|
context['microcline'] = Mineral.objects.filter(name='Microcline')[0]
|
|
|
|
|
context['plag'] = Mineral.objects.filter(name='Plagioclase')[0]
|
2015-02-24 13:37:55 +10:00
|
|
|
context['diopside'] = Mineral.objects.filter(name='Diopside')[0]
|
|
|
|
|
context['actinolite'] = Mineral.objects.filter(name='Actinolite')[0]
|
2014-11-24 14:32:56 +10:00
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
class ERB101TheoryTemplateView(generic.TemplateView):
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
|
context = super(ERB101TheoryTemplateView, self).get_context_data(**kwargs)
|
|
|
|
|
context['base_template'] = 'three_d_viewer/erb101/base.html'
|
2015-02-24 13:37:55 +10:00
|
|
|
context['url_extender'] = 'three_d_viewer:erb101_'
|
|
|
|
|
context['olivine'] = Mineral.objects.filter(name='Olivine')[0]
|
|
|
|
|
context['quartz'] = Mineral.objects.filter(name='Quartz')[0]
|
|
|
|
|
context['microcline'] = Mineral.objects.filter(name='Microcline')[0]
|
|
|
|
|
context['plag'] = Mineral.objects.filter(name='Plagioclase')[0]
|
|
|
|
|
context['diopside'] = Mineral.objects.filter(name='Diopside')[0]
|
|
|
|
|
context['actinolite'] = Mineral.objects.filter(name='Actinolite')[0]
|
2014-12-02 16:20:52 +10:00
|
|
|
return context
|
|
|
|
|
|