2016-11-16 18:02:43 +00:00
|
|
|
import json
|
|
|
|
|
2017-06-08 23:07:59 +00:00
|
|
|
from django.contrib.auth import login
|
2017-06-15 22:52:47 +00:00
|
|
|
from django.contrib.auth.hashers import make_password
|
2017-06-08 21:51:54 +00:00
|
|
|
from django.contrib.auth.models import User
|
2016-11-09 21:13:43 +00:00
|
|
|
from django.http import Http404
|
2016-09-22 22:18:35 +00:00
|
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
2017-06-06 17:51:48 +00:00
|
|
|
from guardian.shortcuts import get_objects_for_user
|
|
|
|
|
2016-09-22 22:18:35 +00:00
|
|
|
from nodeodm.models import ProcessingNode
|
2017-11-30 15:55:15 +00:00
|
|
|
from app.models import Project, Task
|
2016-09-22 22:18:35 +00:00
|
|
|
from django.contrib import messages
|
2016-09-27 14:45:09 +00:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2016-09-30 18:28:35 +00:00
|
|
|
from django.utils.translation import ugettext as _
|
2017-06-08 23:07:59 +00:00
|
|
|
from django import forms
|
2016-08-10 20:23:17 +00:00
|
|
|
|
|
|
|
def index(request):
|
2017-06-08 21:51:54 +00:00
|
|
|
# Check first access where the user is expected to
|
|
|
|
# create an admin account
|
|
|
|
if User.objects.filter(is_superuser=True).count() == 0:
|
|
|
|
return redirect('welcome')
|
|
|
|
|
2018-03-11 14:51:55 +00:00
|
|
|
return redirect('dashboard' if request.user.is_authenticated
|
2016-08-13 17:57:24 +00:00
|
|
|
else 'login')
|
2016-08-10 20:23:17 +00:00
|
|
|
|
2016-09-27 14:45:09 +00:00
|
|
|
@login_required
|
2016-08-10 20:23:17 +00:00
|
|
|
def dashboard(request):
|
2016-09-30 18:28:35 +00:00
|
|
|
no_processingnodes = ProcessingNode.objects.count() == 0
|
2016-10-12 22:18:37 +00:00
|
|
|
no_tasks = Task.objects.filter(project__owner=request.user).count() == 0
|
2016-09-30 18:28:35 +00:00
|
|
|
|
|
|
|
# Create first project automatically
|
2018-06-17 20:05:48 +00:00
|
|
|
if Project.objects.count() == 0:
|
2016-10-12 22:18:37 +00:00
|
|
|
Project.objects.create(owner=request.user, name=_("First Project"))
|
2016-09-29 01:07:53 +00:00
|
|
|
|
2017-06-06 17:51:48 +00:00
|
|
|
return render(request, 'app/dashboard.html', {'title': 'Dashboard',
|
2016-10-12 22:18:37 +00:00
|
|
|
'no_processingnodes': no_processingnodes,
|
2017-06-15 19:47:00 +00:00
|
|
|
'no_tasks': no_tasks
|
2017-06-06 17:51:48 +00:00
|
|
|
})
|
2016-09-22 22:18:35 +00:00
|
|
|
|
2016-11-09 21:13:43 +00:00
|
|
|
|
|
|
|
@login_required
|
2016-11-11 16:00:31 +00:00
|
|
|
def map(request, project_pk=None, task_pk=None):
|
2016-11-09 21:13:43 +00:00
|
|
|
title = _("Map")
|
|
|
|
|
2016-11-16 18:02:43 +00:00
|
|
|
if project_pk is not None:
|
2016-11-11 16:00:31 +00:00
|
|
|
project = get_object_or_404(Project, pk=project_pk)
|
2017-01-28 01:33:10 +00:00
|
|
|
if not request.user.has_perm('app.view_project', project):
|
2016-11-09 21:13:43 +00:00
|
|
|
raise Http404()
|
|
|
|
|
2016-11-16 18:02:43 +00:00
|
|
|
if task_pk is not None:
|
2017-07-12 17:35:28 +00:00
|
|
|
task = get_object_or_404(Task.objects.defer('orthophoto_extent', 'dsm_extent', 'dtm_extent'), pk=task_pk, project=project)
|
2016-11-09 21:13:43 +00:00
|
|
|
title = task.name
|
2017-07-12 20:51:25 +00:00
|
|
|
mapItems = [task.get_map_items()]
|
2016-11-09 21:13:43 +00:00
|
|
|
else:
|
|
|
|
title = project.name
|
2017-07-12 20:51:25 +00:00
|
|
|
mapItems = project.get_map_items()
|
2016-11-09 21:13:43 +00:00
|
|
|
|
|
|
|
return render(request, 'app/map.html', {
|
|
|
|
'title': title,
|
|
|
|
'params': {
|
2017-07-12 20:51:25 +00:00
|
|
|
'map-items': json.dumps(mapItems),
|
2017-12-03 22:56:30 +00:00
|
|
|
'title': title,
|
|
|
|
'public': 'false'
|
2017-06-15 19:47:00 +00:00
|
|
|
}.items()
|
2016-11-09 21:13:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
|
2016-12-18 22:29:34 +00:00
|
|
|
@login_required
|
|
|
|
def model_display(request, project_pk=None, task_pk=None):
|
|
|
|
title = _("3D Model Display")
|
|
|
|
|
|
|
|
if project_pk is not None:
|
|
|
|
project = get_object_or_404(Project, pk=project_pk)
|
2017-01-28 01:33:10 +00:00
|
|
|
if not request.user.has_perm('app.view_project', project):
|
2016-12-18 22:29:34 +00:00
|
|
|
raise Http404()
|
|
|
|
|
|
|
|
if task_pk is not None:
|
2017-07-12 17:35:28 +00:00
|
|
|
task = get_object_or_404(Task.objects.defer('orthophoto_extent', 'dsm_extent', 'dtm_extent'), pk=task_pk, project=project)
|
2016-12-18 22:29:34 +00:00
|
|
|
title = task.name
|
|
|
|
else:
|
|
|
|
raise Http404()
|
|
|
|
|
|
|
|
return render(request, 'app/3d_model_display.html', {
|
2017-12-03 22:56:30 +00:00
|
|
|
'title': title,
|
|
|
|
'params': {
|
|
|
|
'task': json.dumps(task.get_model_display_params()),
|
|
|
|
'public': 'false'
|
|
|
|
}.items()
|
|
|
|
})
|
2016-12-18 22:29:34 +00:00
|
|
|
|
|
|
|
|
2016-09-27 14:45:09 +00:00
|
|
|
@login_required
|
2016-09-22 22:18:35 +00:00
|
|
|
def processing_node(request, processing_node_id):
|
|
|
|
pn = get_object_or_404(ProcessingNode, pk=processing_node_id)
|
|
|
|
if not pn.update_node_info():
|
|
|
|
messages.add_message(request, messages.constants.WARNING, '{} seems to be offline.'.format(pn))
|
|
|
|
|
|
|
|
return render(request, 'app/processing_node.html',
|
|
|
|
{
|
|
|
|
'title': 'Processing Node',
|
|
|
|
'processing_node': pn,
|
2017-06-15 19:47:00 +00:00
|
|
|
'available_options_json': pn.get_available_options_json(pretty=True)
|
2016-09-22 22:18:35 +00:00
|
|
|
})
|
2017-06-06 17:51:48 +00:00
|
|
|
|
2017-06-08 23:07:59 +00:00
|
|
|
class FirstUserForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = User
|
|
|
|
fields = ('username', 'password', )
|
|
|
|
widgets = {
|
|
|
|
'password': forms.PasswordInput(),
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-06-08 21:51:54 +00:00
|
|
|
def welcome(request):
|
|
|
|
if User.objects.filter(is_superuser=True).count() > 0:
|
|
|
|
return redirect('index')
|
|
|
|
|
2017-06-09 13:45:23 +00:00
|
|
|
fuf = FirstUserForm()
|
2017-06-08 23:07:59 +00:00
|
|
|
|
|
|
|
if request.method == 'POST':
|
2017-06-09 13:45:23 +00:00
|
|
|
fuf = FirstUserForm(request.POST)
|
2017-06-08 23:07:59 +00:00
|
|
|
if fuf.is_valid():
|
|
|
|
admin_user = fuf.save(commit=False)
|
2017-06-15 22:52:47 +00:00
|
|
|
admin_user.password = make_password(fuf.cleaned_data['password'])
|
2017-06-08 23:07:59 +00:00
|
|
|
admin_user.is_superuser = admin_user.is_staff = True
|
|
|
|
admin_user.save()
|
|
|
|
|
|
|
|
# Log-in automatically
|
|
|
|
login(request, admin_user, 'django.contrib.auth.backends.ModelBackend')
|
|
|
|
return redirect('dashboard')
|
|
|
|
|
|
|
|
return render(request, 'app/welcome.html',
|
|
|
|
{
|
|
|
|
'title': 'Welcome',
|
|
|
|
'firstuserform': fuf
|
|
|
|
})
|
2018-03-02 15:57:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
def handler404(request):
|
|
|
|
return render(request, '404.html', status=404)
|
|
|
|
|
|
|
|
def handler500(request):
|
|
|
|
return render(request, '500.html', status=500)
|