def edit(request, user_id=0): if user_id != 0: if can_edit_user(request, user_id): view_user = User.objects.get(pk=user_id) else: return HttpResponse('Unauthorized', status=401) else: view_user = request.user key = ApiKey.objects.get(user = view_user) if request.method == 'POST': form = ProfileForm(request.POST) if form.is_valid(): # update basic data email = form.cleaned_data.get("email") first_name = form.cleaned_data.get("first_name") last_name = form.cleaned_data.get("last_name") view_user.email = email view_user.first_name = first_name view_user.last_name = last_name view_user.save() try: user_profile = UserProfile.objects.get(user=view_user) user_profile.job_title = form.cleaned_data.get("job_title") user_profile.organisation = form.cleaned_data.get("organisation") user_profile.save() except UserProfile.DoesNotExist: user_profile = UserProfile() user_profile.user = view_user user_profile.job_title = form.cleaned_data.get("job_title") user_profile.organisation = form.cleaned_data.get("organisation") user_profile.save() messages.success(request, _(u"Profile updated")) # if password should be changed password = form.cleaned_data.get("password") if password: view_user.set_password(password) view_user.save() messages.success(request, _(u"Password updated")) else: try: user_profile = UserProfile.objects.get(user=view_user) except UserProfile.DoesNotExist: user_profile = UserProfile() form = ProfileForm(initial={'username':view_user.username, 'email':view_user.email, 'first_name':view_user.first_name, 'last_name':view_user.last_name, 'api_key': key.key, 'job_title': user_profile.job_title, 'organisation': user_profile.organisation,}) return render_to_response( 'oppia/profile/profile.html', {'form': form,}, context_instance=RequestContext(request))
def edit(request): key = ApiKey.objects.get(user=request.user) if request.method == 'POST': form = ProfileForm(request.POST) if form.is_valid(): # update basic data email = form.cleaned_data.get("email") first_name = form.cleaned_data.get("first_name") last_name = form.cleaned_data.get("last_name") request.user.email = email request.user.first_name = first_name request.user.last_name = last_name request.user.save() try: user_profile = UserProfile.objects.get(user=request.user) user_profile.job_title = form.cleaned_data.get("job_title") user_profile.organisation = form.cleaned_data.get( "organisation") user_profile.save() except UserProfile.DoesNotExist: user_profile = UserProfile() user_profile.user = request.user user_profile.job_title = form.cleaned_data.get("job_title") user_profile.organisation = form.cleaned_data.get( "organisation") user_profile.save() messages.success(request, _(u"Profile updated")) # if password should be changed password = form.cleaned_data.get("password") if password: request.user.set_password(password) request.user.save() messages.success(request, _(u"Password updated")) else: try: user_profile = UserProfile.objects.get(user=request.user) except UserProfile.DoesNotExist: user_profile = UserProfile() form = ProfileForm( initial={ 'username': request.user.username, 'email': request.user.email, 'first_name': request.user.first_name, 'last_name': request.user.last_name, 'api_key': key.key, 'job_title': user_profile.job_title, 'organisation': user_profile.organisation, }) return render(request, 'oppia/profile/profile.html', { 'form': form, })
def register(request): if not settings.OPPIA_ALLOW_SELF_REGISTRATION: raise Http404 if request.method == 'POST': # if form submitted... form = RegisterForm(request.POST) if form.is_valid(): # All validation rules pass # Create new user username = form.cleaned_data.get("username") email = form.cleaned_data.get("email") password = form.cleaned_data.get("password") first_name = form.cleaned_data.get("first_name") last_name = form.cleaned_data.get("last_name") user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.save() user_profile = UserProfile() user_profile.user = user user_profile.job_title = form.cleaned_data.get("job_title") user_profile.organisation = form.cleaned_data.get("organisation") user_profile.save() u = authenticate(username=username, password=password) if u is not None: if u.is_active: login(request, u) return HttpResponseRedirect('thanks/') return HttpResponseRedirect('thanks/') # Redirect after POST else: form = RegisterForm(initial={'next':request.GET.get('next'),}) return render_to_response('oppia/form.html', {'form': form, 'title': _(u'Register'), }, context_instance=RequestContext(request),)
def obj_create(self, bundle, **kwargs): if not settings.OPPIA_ALLOW_SELF_REGISTRATION: raise BadRequest(_(u'Registration is disabled on this server.')) required = [ 'username', 'password', 'passwordagain', 'email', 'firstname', 'lastname' ] for r in required: try: bundle.data[r] except KeyError: raise BadRequest(_(u'Please enter your %s') % r) data = { 'username': bundle.data['username'], 'password': bundle.data['password'], 'password_again': bundle.data['passwordagain'], 'email': bundle.data['email'], 'first_name': bundle.data['firstname'], 'last_name': bundle.data['lastname'], } rf = RegisterForm(data) if not rf.is_valid(): str = "" for key, value in rf.errors.items(): for error in value: str += error + "\n" raise BadRequest(str) else: username = bundle.data['username'] password = bundle.data['password'] email = bundle.data['email'] first_name = bundle.data['firstname'] last_name = bundle.data['lastname'] try: bundle.obj = User.objects.create_user(username, email, password) bundle.obj.first_name = first_name bundle.obj.last_name = last_name bundle.obj.save() user_profile = UserProfile() user_profile.user = bundle.obj if 'jobtitle' in bundle.data: user_profile.job_title = bundle.data['jobtitle'] if 'organisation' in bundle.data: user_profile.organisation = bundle.data['organisation'] if 'phoneno' in bundle.data: user_profile.phone_number = bundle.data['phoneno'] user_profile.save() u = authenticate(username=username, password=password) if u is not None: if u.is_active: login(bundle.request, u) # Add to tracker tracker = Tracker() tracker.user = u tracker.type = 'register' tracker.ip = bundle.request.META.get( 'REMOTE_ADDR', '0.0.0.0') tracker.agent = bundle.request.META.get( 'HTTP_USER_AGENT', 'unknown') tracker.save() key = ApiKey.objects.get(user=u) bundle.data['api_key'] = key.key except IntegrityError: raise BadRequest( _(u'Username "%s" already in use, please select another' % username)) del bundle.data['passwordagain'] del bundle.data['password'] del bundle.data['firstname'] del bundle.data['lastname'] return bundle
def upload_view(request): if not request.user.is_staff: raise Http404 if request.method == 'POST': # if form submitted... form = UploadProfileForm(request.POST, request.FILES) if form.is_valid(): request.FILES['upload_file'].open("rb") csv_file = csv.DictReader(request.FILES['upload_file'].file) required_fields = ['username', 'firstname', 'lastname', 'email'] results = [] try: for row in csv_file: # check all required fields defined all_defined = True for rf in required_fields: if rf not in row or row[rf].strip() == '': result = {} result['username'] = row['username'] result['created'] = False result['message'] = _(u'No %s set' % rf) results.append(result) all_defined = False if not all_defined: continue user = User() user.username = row['username'] user.first_name = row['firstname'] user.last_name = row['lastname'] user.email = row['email'] auto_password = False if 'password' in row: user.set_password(row['password']) else: password = User.objects.make_random_password() user.set_password(password) auto_password = True try: user.save() up = UserProfile() up.user = user for col_name in row: setattr(up, col_name, row[col_name]) up.save() result = {} result['username'] = row['username'] result['created'] = True if auto_password: result['message'] = _( u'User created with password: %s' % password) else: result['message'] = _(u'User created') results.append(result) except IntegrityError as ie: result = {} result['username'] = row['username'] result['created'] = False result['message'] = _(u'User already exists') results.append(result) continue except: result = {} result['username'] = None result['created'] = False result['message'] = _(u'Could not parse file') results.append(result) else: results = [] form = UploadProfileForm() return render(request, 'oppia/profile/upload.html', { 'form': form, 'results': results })
def register(request): if not settings.OPPIA_ALLOW_SELF_REGISTRATION: raise Http404 if request.method == 'POST': # if form submitted... form = RegisterForm(request.POST) if form.is_valid(): # All validation rules pass # Create new user username = form.cleaned_data.get("phone_number") email = form.cleaned_data.get("email") password = form.cleaned_data.get("password") first_name = form.cleaned_data.get("first_name") last_name = form.cleaned_data.get("last_name") gender = form.cleaned_data.get("gender") phone_number = form.cleaned_data.get("phone_number") phone_number_two = form.cleaned_data.get("phone_number_two") phone_number_three = form.cleaned_data.get("phone_number_three") year_group = form.cleaned_data.get("year_group") program = form.cleaned_data.get("program") status = form.cleaned_data.get("status") home_town = form.cleaned_data.get("home_town") school_code = form.cleaned_data.get("school_code") user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.year_group = year_group user.program = program user.status = status user.home_town = home_town user.school_code = school_code if status == 'Tutor': user.is_staff = 1 user.save() user_profile = UserProfile() user_profile.user = user user_profile.job_title = form.cleaned_data.get("job_title") user_profile.organisation = form.cleaned_data.get("organisation") user_profile.phone_number = form.cleaned_data.get("phone_number") user_profile.phone_number_two = form.cleaned_data.get( "phone_number_two") user_profile.phone_number_three = form.cleaned_data.get( "phone_number_three") user_profile.year_group = form.cleaned_data.get("year_group") user_profile.program = form.cleaned_data.get("program") user_profile.status = form.cleaned_data.get("status") user_profile.home_town = form.cleaned_data.get("home_town") user_profile.school_code = form.cleaned_data.get("school_code") user_profile.gender = form.cleaned_data.get("gender") user_profile.save() u = authenticate(username=username, password=password) if u is not None: if u.is_active: login(request, u) return HttpResponseRedirect('thanks/') return HttpResponseRedirect('thanks/') # Redirect after POST else: form = RegisterForm(initial={ 'next': request.GET.get('next'), }) return render_to_response( 'oppia/form.html', { 'form': form, 'title': _(u'Register'), }, context_instance=RequestContext(request), )
def edit(request, user_id=0): if user_id != 0: if can_edit_user(request, user_id): view_user = User.objects.get(pk=user_id) else: return HttpResponse('Unauthorized', status=401) else: view_user = request.user key = ApiKey.objects.get(user=view_user) if request.method == 'POST': form = ProfileForm(request.POST) if form.is_valid(): # update basic data email = form.cleaned_data.get("email") first_name = form.cleaned_data.get("first_name") last_name = form.cleaned_data.get("last_name") view_user.email = email view_user.first_name = first_name view_user.last_name = last_name if form.cleaned_data.get("status") == 'Tutor': view_user.is_staff = 1 view_user.save() try: user_profile = UserProfile.objects.get(user=view_user) #user_profile.job_title = form.cleaned_data.get("job_title") #user_profile.organisation = form.cleaned_data.get("organisation") user_profile.phone_number = form.cleaned_data.get( "phone_number") user_profile.phone_number_two = form.cleaned_data.get( "phone_number_two") user_profile.phone_number_three = form.cleaned_data.get( "phone_number_three") user_profile.year_group = form.cleaned_data.get("year_group") user_profile.program = form.cleaned_data.get("program") user_profile.gender = form.cleaned_data.get("gender") user_profile.status = form.cleaned_data.get("status") user_profile.home_town = form.cleaned_data.get("home_town") user_profile.school_code = form.cleaned_data.get("school_code") user_profile.save() except UserProfile.DoesNotExist: user_profile = UserProfile() user_profile.user = view_user #user_profile.job_title = form.cleaned_data.get("job_title") #user_profile.organisation = form.cleaned_data.get("organisation") user_profile.phone_number = form.cleaned_data.get( "phone_number") user_profile.phone_number_two = form.cleaned_data.get( "phone_number_two") user_profile.phone_number_three = form.cleaned_data.get( "phone_number_three") user_profile.year_group = form.cleaned_data.get("year_group") user_profile.program = form.cleaned_data.get("program") user_profile.gender = form.cleaned_data.get("gender") user_profile.status = form.cleaned_data.get("status") user_profile.home_town = form.cleaned_data.get("home_town") user_profile.school_code = form.cleaned_data.get("school_code") user_profile.save() messages.success(request, _(u"Profile updated")) # if password should be changed password = form.cleaned_data.get("password") if password: view_user.set_password(password) view_user.save() messages.success(request, _(u"Password updated")) else: try: user_profile = UserProfile.objects.get(user=view_user) except UserProfile.DoesNotExist: user_profile = UserProfile() form = ProfileForm( initial={ 'username': view_user.username, 'email': view_user.email, 'first_name': view_user.first_name, 'last_name': view_user.last_name, 'api_key': key.key, 'job_title': user_profile.job_title, 'organisation': user_profile.organisation, 'phone_number': user_profile.phone_number, 'gender': user_profile.gender, 'phone_number_two': user_profile.phone_number_two, 'phone_number_three': user_profile.phone_number_three, 'year_group': user_profile.year_group, 'program': user_profile.program, 'status': user_profile.status, 'home_town': user_profile.home_town, 'school_code': user_profile.school_code, }) return render_to_response('oppia/profile/profile.html', { 'form': form, }, context_instance=RequestContext(request))
def home_view(request): activity = [] if request.user.is_authenticated(): # create profile if none exists (historical for very old users) try: up = request.user.userprofile except UserProfile.DoesNotExist: up = UserProfile() up.user = request.user up.save() dashboard_accessed.send(sender=None, request=request, data=None) # if user is student redirect to their scorecard if up.is_student_only(): return HttpResponseRedirect( reverse('profile_user_activity', args=[request.user.id])) # is user is teacher redirect to teacher home if up.is_teacher_only(): return HttpResponseRedirect(reverse('oppia_teacher_home')) start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) if interval == 'days': no_days = (end_date - start_date).days + 1 trackers = Tracker.objects.filter( course__isnull=False, course__is_draft=False, user__is_staff=False, course__is_archived=False, tracker_date__gte=start_date, tracker_date__lte=end_date).extra({ 'activity_date': "date(tracker_date)" }).values('activity_date').annotate(count=Count('id')) for i in range(0, no_days, +1): temp = start_date + datetime.timedelta(days=i) count = next((dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"), count]) else: delta = relativedelta(months=+1) no_months = 0 tmp_date = start_date while tmp_date <= end_date: print tmp_date tmp_date += delta no_months += 1 for i in range(0, no_months, +1): temp = start_date + relativedelta(months=+i) month = temp.strftime("%m") year = temp.strftime("%Y") count = Tracker.objects.filter( course__isnull=False, course__is_draft=False, user__is_staff=False, course__is_archived=False, tracker_date__month=month, tracker_date__year=year).count() activity.append([temp.strftime("%b %Y"), count]) else: form = None leaderboard = Points.get_leaderboard(10) return render_to_response('oppia/home.html', { 'form': form, 'activity_graph_data': activity, 'leaderboard': leaderboard }, context_instance=RequestContext(request))
def obj_create(self, bundle, **kwargs): if not settings.OPPIA_ALLOW_SELF_REGISTRATION: raise BadRequest(_(u'Registration is disabled on this server.')) required = [ 'username', 'password', 'passwordagain', 'email', 'firstname', 'lastname', 'status', 'gender' ] for r in required: try: bundle.data[r] except KeyError: raise BadRequest(_(u'Please enter your %s') % r) data = { 'username': bundle.data['username'], 'password': bundle.data['password'], 'password_again': bundle.data['passwordagain'], 'email': bundle.data['email'], 'first_name': bundle.data['firstname'], 'last_name': bundle.data['lastname'], 'phone_number': bundle.data['phone_number'], 'status': bundle.data['status'], 'year_group': bundle.data['year_group'], 'home_town': bundle.data['home_town'], 'program': bundle.data['program'], 'school_code': bundle.data['school_code'], } #rf = RegisterForm(data) #if not rf.is_valid(): # str = "" # for key, value in rf.errors.items(): # for error in value: # str += error + "\n" #raise BadRequest(str) #else: username = bundle.data['username'] password = bundle.data['password'] email = bundle.data['email'] first_name = bundle.data['firstname'] last_name = bundle.data['lastname'] school_code_existing = SchoolCode.objects.filter( school_code=bundle.data['school_code'], ).exists() if not school_code_existing and bundle.data['status'] != "Guest": raise BadRequest(_(u'This school code does not exist!')) if bundle.data['status'] == "Select": raise BadRequest(_(u'Status is required')) if bundle.data['year_group'] == "Select": raise BadRequest(_(u'Year group is required')) if bundle.data['program'] == "Select": raise BadRequest(_(u'Program is required')) if bundle.data['program'] == "": raise BadRequest(_(u'Program is required')) if bundle.data['status'] == "": raise BadRequest(_(u'Status is required')) if bundle.data['year_group'] == "": raise BadRequest(_(u'Year group is required')) try: bundle.obj = User.objects.create_user(username, email, password) bundle.obj.first_name = first_name bundle.obj.last_name = last_name bundle.obj.save() user_profile = UserProfile() user_profile.user = bundle.obj user_profile.phone_number = bundle.data['phone_number'] user_profile.status = bundle.data['status'] user_profile.year_group = bundle.data['year_group'] user_profile.home_town = bundle.data['home_town'] user_profile.program = bundle.data['program'] user_profile.school_code = bundle.data['school_code'] #if 'jobtitle' in bundle.data: # user_profile.job_title = bundle.data['jobtitle'] #if 'organisation' in bundle.data: # user_profile.organisation = bundle.data['organisation'] user_profile.save() u = authenticate(username=username, password=password) if u is not None: if u.is_active: login(bundle.request, u) # Add to tracker tracker = Tracker() tracker.user = u tracker.type = 'register' tracker.ip = bundle.request.META.get( 'REMOTE_ADDR', '0.0.0.0') tracker.agent = bundle.request.META.get( 'HTTP_USER_AGENT', 'unknown') tracker.save() key = ApiKey.objects.get(user=u) bundle.data['api_key'] = key.key except IntegrityError: raise BadRequest( _(u'Username "%s" already in use, please select another' % username)) del bundle.data['passwordagain'] del bundle.data['password'] del bundle.data['firstname'] del bundle.data['lastname'] return bundle