from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django.core import serializers
+from django.urls import reverse
from django.http import HttpResponse
from django.utils.translation import ugettext_lazy as _
from django import forms
from django.contrib.admin.helpers import ActionForm
+from django.utils.html import format_html
from teleforma.models.chat import ChatMessage
from teleforma.models.notification import Notification
class UserProfileAdmin(UserAdmin):
inlines = [ProfileInline, StudentInline, ProfessorProfileInline]
search_fields = ['username', 'email']
+ list_display = UserAdmin.list_display + (
+ 'user_actions',
+ )
+
+ def user_actions(self, obj):
+ return format_html(
+ '<a class="btn btn-primary btn-sm" href="{}">Se connecter en tant que</a>',
+ reverse('teleforma-user-login', args=[obj.pk]),
+ reverse('teleforma-user-login', args=[obj.pk]),
+ )
+ user_actions.short_description = 'Actions'
+ user_actions.allow_tags = True
class TrainingAdmin(admin.ModelAdmin):
return host
-def get_periods(user):
+def get_periods(request):
+ user = request.user
periods = []
- student = user.student.all()
- if student:
- student = user.student.get()
- periods = student.period.all()
+ professor = user.professor.all()
+ quotas = user.quotas.all()
+ students = user.student.all()
if user.is_superuser or user.is_staff:
periods = Period.objects.filter(is_open=True)
- professor = user.professor.all()
- if professor:
+ elif professor:
periods = Period.objects.filter(is_open=True)
- quotas = user.quotas.all()
- if quotas and not (user.is_superuser or user.is_staff) and not professor:
+ elif quotas and not (user.is_superuser or user.is_staff) and not professor:
periods = []
for quota in quotas:
if not quota.period in periods:
periods.append(quota.period)
+ elif students:
+ period_ids = request.session.get('period_ids')
+ if period_ids:
+ periods = [Period.objects.get(id=period_id)
+ for period_id in period_ids]
+ else:
+ student = user.student.get()
+ periods = [training.period for training in student.trainings.all()]
+ for period in periods:
+ for child in period.children.all():
+ periods.append(child)
+ request.session['period_ids'] = [period.id for period in periods]
+ else:
+ return []
+
return periods
def get(self, request):
if request.user.is_authenticated:
- periods = get_periods(request.user)
+ periods = get_periods(request)
if periods:
period = get_default_period(periods)
if period in periods:
if period:
self.period = period[0]
else:
- periods = get_periods(self.request.user)
+ periods = get_periods(self.request)
self.period = get_default_period(periods)
context['period'] = self.period
return context
def render_to_response(self, context):
period = context['period']
- if not period in get_periods(self.request.user):
+ if not period in get_periods(self.request):
messages.warning(self.request, _(
"You do NOT have access to this resource and then have been redirected to your desk."))
return redirect('teleforma-home')
to_subscribe = []
student_courses = [course['course']
for course in get_courses(user)]
- for webclass in Webclass.published.filter(period=self.period, iej=student.iej, course__in=student_courses):
+ import pdb;pdb.set_trace()
+ for webclass in Webclass.published.filter(period=self.period, course__in=student_courses):
# if webclass.course not in student_courses:
# continue
slot = webclass.get_slot(user)
if student:
try:
webclass = Webclass.published.filter(
- period=self.period, course=course, iej=student.iej)[0]
+ period=self.period, course=course)[0]
except IndexError:
pass
if webclass:
if not access:
context['access_error'] = access_error
context['message'] = contact_message
- context['periods'] = get_periods(self.request.user)
+ context['periods'] = get_periods(self.request)
return context
@method_decorator(access_required)