223 lines
7.0 KiB
Python
223 lines
7.0 KiB
Python
from django.views.i18n import set_language
|
|
from django.views.generic import TemplateView
|
|
from django.views.generic.base import View
|
|
from openhumans.models import OpenHumansMember
|
|
from .models import ReportToken
|
|
from django.contrib.auth import logout
|
|
from django.contrib import messages
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.shortcuts import redirect
|
|
from django.conf import settings
|
|
from django.urls import reverse
|
|
from django.views.decorators.http import require_POST
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth import login as auth_login
|
|
from django.contrib.auth import logout as auth_logout
|
|
from django.http import HttpResponseForbidden
|
|
import datetime
|
|
import json
|
|
from .helpers import create_openclinica_event, get_openclinica_token, send_user_survey_link
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class HomeView(TemplateView):
|
|
template_name = "main/home.html"
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
if self.request.user.is_authenticated:
|
|
try:
|
|
self.files = self.request.user.openhumansmember.list_files()
|
|
except Exception:
|
|
logout(request)
|
|
return redirect("/")
|
|
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
context = super().get_context_data(*args, **kwargs)
|
|
|
|
if self.request.user.is_authenticated:
|
|
openhumansmember = self.request.user.openhumansmember
|
|
|
|
context.update(
|
|
{
|
|
"openhumansmember": openhumansmember,
|
|
"files": self.files
|
|
}
|
|
)
|
|
|
|
# Not logged in.
|
|
else:
|
|
context.update({"openhumans_login_url": OpenHumansMember.get_auth_url()})
|
|
|
|
return context
|
|
|
|
|
|
def autologin(request, oh_id):
|
|
if not request.user.is_authenticated:
|
|
token_string = request.GET.get("login_token", None)
|
|
if token_string:
|
|
token = ReportToken.objects.get(token=token_string)
|
|
if token.is_valid():
|
|
try:
|
|
oh_member = OpenHumansMember.objects.get(oh_id=oh_id)
|
|
auth_login(request, oh_member.user)
|
|
except:
|
|
pass
|
|
if request.user.is_authenticated:
|
|
if request.GET.get('next'):
|
|
return redirect(request.GET['next'])
|
|
else:
|
|
return redirect('home')
|
|
else:
|
|
return HttpResponseForbidden()
|
|
|
|
|
|
@login_required()
|
|
@require_POST
|
|
def consent(request):
|
|
survey_member = request.user.openhumansmember.surveyaccount
|
|
if survey_member.consent_given == False:
|
|
survey_member.consent_given = True
|
|
survey_member.save()
|
|
if survey_member.last_email == datetime.date.today():
|
|
messages.add_message(request, messages.INFO, _("Your consent has been saved. You should already "
|
|
"have gotten an email earlier today to get started "
|
|
"with your survey!"))
|
|
else:
|
|
get_openclinica_token(survey_member)
|
|
send_user_survey_link(survey_member)
|
|
messages.add_message(request, messages.INFO, _("Your consent has been saved. You should now get "
|
|
"an email to get started with your survey!"))
|
|
else:
|
|
survey_member.consent_given = False
|
|
survey_member.save()
|
|
messages.add_message(request, messages.INFO, _("Your consent has been withdrawn, you will not "
|
|
"receive any more daily emails."))
|
|
return redirect("home")
|
|
|
|
|
|
@login_required()
|
|
@require_POST
|
|
def daily_emails(request):
|
|
survey_member = request.user.openhumansmember.surveyaccount
|
|
if survey_member.daily_emails_activated == False:
|
|
survey_member.daily_emails_activated = True
|
|
survey_member.save()
|
|
messages.add_message(request, messages.INFO, _("You have activated the daily emails."))
|
|
else:
|
|
survey_member.daily_emails_activated = False
|
|
survey_member.save()
|
|
messages.add_message(request, messages.INFO, _("You have deactivated the daily emails."))
|
|
return redirect("home")
|
|
|
|
|
|
@login_required()
|
|
def take_survey(request):
|
|
oh_member = request.user.openhumansmember
|
|
survey_member = oh_member.surveyaccount
|
|
if survey_member.consent_given:
|
|
if survey_member.last_survey != datetime.date.today():
|
|
create_openclinica_event(survey_member, "SE_DAILY", str(datetime.date.today()))
|
|
survey_member.last_survey = datetime.date.today()
|
|
survey_member.save()
|
|
return redirect(settings.OPENCLINICA_PARTICIPATE_LINK + "?accessCode={}".format(survey_member.survey_token))
|
|
else:
|
|
return redirect('home')
|
|
|
|
|
|
def logout_user(request):
|
|
"""
|
|
Logout user.
|
|
"""
|
|
if request.method == "POST":
|
|
logout(request)
|
|
redirect_url = settings.LOGOUT_REDIRECT_URL
|
|
if not redirect_url:
|
|
redirect_url = "home"
|
|
return redirect(redirect_url)
|
|
|
|
|
|
class FaqView(TemplateView):
|
|
template_name = "main/faq.html"
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
if self.request.user.is_authenticated:
|
|
try:
|
|
self.files = self.request.user.openhumansmember.list_files()
|
|
except Exception:
|
|
logout(request)
|
|
return redirect("/")
|
|
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
context = super().get_context_data(*args, **kwargs)
|
|
|
|
if self.request.user.is_authenticated:
|
|
context.update(
|
|
{
|
|
"files": self.files
|
|
}
|
|
)
|
|
|
|
return context
|
|
|
|
|
|
class TeamView(TemplateView):
|
|
def get_context_data(self, *args, **kwargs):
|
|
context = super().get_context_data(*args, **kwargs)
|
|
|
|
with open('./src/_data/team.json') as team:
|
|
context["persons"] = json.load(team)
|
|
|
|
return context
|
|
|
|
template_name = "main/team.html"
|
|
|
|
|
|
class VisionView(TemplateView):
|
|
template_name = "main/vision.html"
|
|
|
|
|
|
class AboutView(TemplateView):
|
|
template_name = "main/about.html"
|
|
|
|
|
|
class DataView(TemplateView):
|
|
template_name = "main/data.html"
|
|
|
|
|
|
def set_language_custom(request):
|
|
if request.user.is_authenticated and request.POST.get('language'):
|
|
if request.POST['language'] in [lang[0] for lang in settings.LANGUAGES]:
|
|
request.user.openhumansmember.surveyaccount.language = request.POST['language']
|
|
request.user.openhumansmember.surveyaccount.save()
|
|
|
|
return set_language(request)
|
|
|
|
|
|
@login_required
|
|
def delete_all_openhuman_files(request):
|
|
oh_member = request.user.openhumansmember
|
|
oh_member.delete_all_files()
|
|
|
|
return redirect('faq')
|
|
|
|
|
|
@login_required
|
|
def delete_all(request):
|
|
oh_member = request.user.openhumansmember
|
|
oh_member.delete_all_files()
|
|
|
|
user = request.user
|
|
|
|
auth_logout(request)
|
|
|
|
user.delete()
|
|
|
|
return redirect('faq')
|
|
|