91 lines
3.4 KiB
Python
91 lines
3.4 KiB
Python
import json
|
|
import logging
|
|
|
|
from django.http import HttpResponse
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.views.decorators.http import require_POST
|
|
from django.template import RequestContext
|
|
from django.template.loader import render_to_string
|
|
from django import shortcuts
|
|
from django.conf import settings
|
|
from django.forms.util import ErrorList
|
|
from django.forms.forms import NON_FIELD_ERRORS
|
|
|
|
from polynum.base.models import Request, Entity
|
|
|
|
import django_ws
|
|
from forms import CreateCourseForm
|
|
|
|
@require_POST
|
|
@login_required
|
|
def create_course(request):
|
|
'''Ajax view'''
|
|
form = CreateCourseForm(data=request.POST, request=request)
|
|
ctx = { 'create_course_form': form }
|
|
data = {
|
|
"success": 0,
|
|
"course_year": settings.POLYNUM_BB_COURSE_YEAR
|
|
}
|
|
if form.is_valid():
|
|
conn = django_ws.get_bb_conn()
|
|
course_id = form.cleaned_data['course_id']
|
|
ok, result = conn.create_course(course_id,
|
|
form.cleaned_data['description'],
|
|
form.cleaned_data['category'],
|
|
form.cleaned_data['open_to_visitors'],
|
|
form.cleaned_data['subscription_policy'] != 'no',
|
|
form.cleaned_data['password'])
|
|
if ok:
|
|
logging.info('user %s created course %s',
|
|
request.user.username.encode('utf-8'),
|
|
course_id.encode('utf-8'))
|
|
data = {
|
|
'success': 1,
|
|
'entity_pk': form.cleaned_data['entity'].pk,
|
|
'course_id': course_id,
|
|
'description': form.cleaned_data['description']
|
|
}
|
|
else:
|
|
logging.error('user %s failed to create course %s: %s',
|
|
request.user.username.encode('utf-8'),
|
|
course_id.encode('utf-8'),
|
|
result)
|
|
errors = form._errors.setdefault(NON_FIELD_ERRORS, ErrorList())
|
|
errors.append(result)
|
|
if not data['success']:
|
|
data['html'] = render_to_string("_create_course.html", ctx,
|
|
context_instance=RequestContext(request))
|
|
return HttpResponse(json.dumps(data), mimetype="application/json")
|
|
|
|
@login_required
|
|
def courses_list(request, pk):
|
|
'''Generate the list of courses with respect to Request object given by
|
|
pk.
|
|
'''
|
|
polynum_request = shortcuts.get_object_or_404(Request, pk=pk)
|
|
return shortcuts.render(request, "_select_course.html", { "courses":
|
|
courses_ctx(request, polynum_request)})
|
|
|
|
def courses_ctx(request, polynum_request):
|
|
'''Context building for the course selection template.'''
|
|
ctx = {}
|
|
conn = django_ws.get_bb_conn()
|
|
ok, result = conn.get_course_by_owner(request.user.username)
|
|
if not ok:
|
|
return dict(error=result)
|
|
ctx['user_courses'] = result
|
|
if polynum_request.entity or 'ue' in request.GET:
|
|
ue = request.GET.get('ue')
|
|
if ue:
|
|
possible_ue = Entity.objects.filter(code=ue.lower())
|
|
if not ue or not possible_ue:
|
|
possible_ue = polynum_request.entity.parents(True).filter(entity_type__name=settings.POLYNUM_BB_UE_DESIGNATION)
|
|
if possible_ue:
|
|
ctx['ue'] = possible_ue[0].get_name()
|
|
ue = possible_ue[0].code.upper()
|
|
ok, result = conn.get_course_by_ue(ue)
|
|
if not ok:
|
|
return dict(error=result)
|
|
ctx['ue_courses'] = result
|
|
return ctx
|