Beispiel #1
0
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))
Beispiel #2
0
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,
    })
Beispiel #3
0
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),)
Beispiel #4
0
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(request, 'oppia/form.html', {'form': form, 'title': _(u'Register')})
Beispiel #5
0
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("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 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','status','phone_number','school_code','year_group','program']
            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['phone_number']
                            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['phone_number']
                    user.first_name = row['firstname']
                    user.last_name = row['lastname']
                    if row['status']=='Tutor':
                        user.is_staff=1
                    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['phone_number']
                        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['phone_number']
                        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_to_response('oppia/profile/upload.html', 
                              {'form': form, 
                               'results': results},
                              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))
Beispiel #9
0
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()
        
        # 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))
Beispiel #10
0
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 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   
Beispiel #12
0
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))
Beispiel #13
0
    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
Beispiel #14
0
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
    })
Beispiel #15
0
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),
    )
Beispiel #16
0
    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
Beispiel #17
0
    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