Пример #1
0
def user_settings(request):
    if request.method == 'POST':
        form = SettingsForm(request.POST, request.FILES)

        if form.is_valid():
            im = Image.open(request.FILES['profile_pic'])
            im = ImageOps.fit(im, (120, 120), Image.ANTIALIAS)

            if not os.path.exists(os.path.join(settings.MEDIA_ROOT,
                                               "profile")):
                os.makedirs(os.path.join(settings.MEDIA_ROOT, "profile"))

            im.save(
                os.path.join(settings.MEDIA_ROOT,
                             "profile/{}.png".format(request.user.netid)))
            request.user.photo = "png"
            request.user.save()

            messages.success(request, 'Votre profil a été mis à jour.')

            return render(request, "users/settings.html",
                          {'form': SettingsForm()})
    else:
        form = SettingsForm()

    return render(request, 'users/settings.html', {
        'form': form,
        'stream': actor_stream(request.user),
    })
Пример #2
0
def edit_settings(request):
    """Edit user settings"""
    if request.method == 'POST':
        form = SettingsForm(request.POST)
        if form.is_valid():
            form.save_for_user(request.user)
            messages.add_message(request, messages.INFO,
                                 _(u'Your settings have been saved.'))
            return HttpResponseRedirect(reverse('users.edit_settings'))
        # Invalid form
        return jingo.render(request, 'users/edit_settings.html',
                            {'form': form})

    # Pass the current user's settings as the initial values.
    values = request.user.settings.values()
    initial = dict()
    for v in values:
        try:
            # Uses ast.literal_eval to convert 'False' => False etc.
            # TODO: Make more resilient.
            initial[v['name']] = literal_eval(v['value'])
        except (SyntaxError, ValueError):
            # Attempted to convert the string value to a Python value
            # but failed so leave it a string.
            initial[v['name']] = v['value']
    form = SettingsForm(initial=initial)
    return jingo.render(request, 'users/edit_settings.html', {'form': form})
Пример #3
0
def settings(request):
    user = request.user
    if request.method == 'GET':
        form = SettingsForm(instance=user)
        return render(request,
                      'users/settings.html',
                      context={
                          'form': form,
                          'showed_user': user,
                      })
    elif request.method == 'POST':
        user = request.user
        form = SettingsForm(request.POST, request.FILES, instance=user)
        form.set_user(user)
        if form.is_valid():
            form.image = request.FILES.get('image')
            form.save()
            return redirect(f'/accounts/account/{user.username}')
        else:
            return render(request,
                          'users/settings.html',
                          context={
                              'form': form,
                              'showed_user': user,
                          })
Пример #4
0
 def test_non_existant_setting(self):
     user = User.objects.all()[0]
     form = SettingsForm()
     bad_setting = 'doesnt_exist'
     assert bad_setting not in form.fields.keys()
     with self.assertRaises(KeyError):
         Setting.get_for_user(user, bad_setting)
Пример #5
0
    def test_clean_with_valid_username_email(self):
        form_data = {'username': '******', 'email': '*****@*****.**'}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()
        form.clean()

        self.assertEqual(form.errors, {})
Пример #6
0
    def test_save_email(self):
        form_data = {'email': '*****@*****.**'}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()

        user = form.save()

        self.assertEqual(user.email, '*****@*****.**')
Пример #7
0
    def test_clean_with_existing_email(self):
        User.objects.create_user(email='*****@*****.**')
        form_data = {'email': '*****@*****.**'}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()
        form.clean()

        self.assertNotEqual(form.errors, {})
Пример #8
0
    def test_save_username(self):
        form_data = {'username': '******'}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()

        user = form.save()

        self.assertEqual(user.username, 'newusername')
Пример #9
0
    def test_save_all_empty_string(self):
        form_data = {'username': '', 'email': '', 'password': ''}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()

        user = form.save()

        self.assertEqual(user.email, self.user.email)
        self.assertTrue(user.check_password('password'))
Пример #10
0
def home(request, note=""):
    """ The settings page for users
    
    If you post a SettingsForm to this, it will be saved. In all cases, it renders index.html to provide the user some
    account managment things.
    
    This view may also take a note, in which case the note will be displayed at the top of the page and the request
    will run as if it were a GET.
    """
    if request.method == "POST" and not note:
        form = SettingsForm(request.POST, instance=request.user.settings)
        if form.is_valid():
            form.save()
            note = "Settings Updated Successfully"
        
    else:
        form = SettingsForm(instance=request.user.settings)
    
    ctx = _make_context(request, "settings_form", form)
    ctx["note"] = note
    
    return TemplateResponse(request, "users/index.html", ctx)
Пример #11
0
 def get_for_user(cls, user, name):
     from users.forms import SettingsForm
     form = SettingsForm()
     if name not in form.fields.keys():
         raise KeyError(("'{name}' is not a field in "
                         "user.forms.SettingsFrom()").format(name=name))
     try:
         setting = Setting.uncached.get(user=user, name=name)
     except Setting.DoesNotExist:
         value = form.fields[name].initial or ''
         setting = Setting.objects.create(user=user, name=name, value=value)
     # Cast to the field's Python type.
     return form.fields[name].to_python(setting.value)
Пример #12
0
def _make_context(request, form_name, form_value):
    ctx = {}
    
    # TODO: Is creating forms expensive
    ctx["area"] = "user"
    ctx["importForm"] = ImportForm()
    ctx["pass_form"] = PasswordChangeForm(request.user)
    ctx["email_form"] = EmailForm(instance=request.user)
    ctx["settings_form"] = SettingsForm(instance=request.user.settings)
    ctx["theme_form"] = ThemeForm(instance=request.user.settings)
    
    ctx[form_name] = form_value
    
    return ctx
Пример #13
0
    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(UsersettingsView, self).get_context_data(**kwargs)
        # Add in a QuerySet of all the books
        if self.request.method != "POST":
            context['settingsform'] = SettingsForm(instance=self.request.user)
            context['avatarform'] = AvatarForm(instance=self.request.user)

        if "settingsform" in context:
            context['settingsform'].fields[
                "main_department"].queryset = self.request.user.departments.all(
                )

        # adds "Settings" to breadcrumbs
        context["breadcrumbs"] = [(reverse("userprofile",
                                           kwargs={"pk": self.request.user.pk
                                                   }), self.request.user),
                                  ("", _("Settings"))]

        return context
Пример #14
0
    def post(self, request):
        context = self.get_context_data()
        context["settingsform"] = SettingsForm(instance=request.user)
        context["avatarform"] = AvatarForm(instance=request.user)
        context['settingsform'].fields[
            "main_department"].queryset = self.request.user.departments.all()

        # handle language settings and use saved settings of user as default
        if "language" in request.POST:
            request.user.language = request.POST["language"]
            request.user.save()
            translation.activate(request.POST["language"])
            request.session[
                translation.LANGUAGE_SESSION_KEY] = request.POST["language"]
            return HttpResponseRedirect(reverse("usersettings"))

        # handle pagelength/ timezone/ theme settings and use saved settings of user as default
        elif "pagelength" in request.POST or "timezone" in request.POST or "theme" in request.POST:
            form = SettingsForm(request.POST)
            if form.is_valid():
                changed_data = False

                # change of pagelength settings
                if request.user.pagelength != form.cleaned_data["pagelength"]:
                    request.user.pagelength = form.cleaned_data["pagelength"]
                    changed_data = True

                # change of timezone settings
                if request.user.timezone != form.cleaned_data["timezone"]:
                    request.user.timezone = form.cleaned_data["timezone"]
                    changed_data = True

                # change of main department settings
                if request.user.main_department != form.cleaned_data[
                        "main_department"]:
                    request.user.main_department = form.cleaned_data[
                        "main_department"]
                    changed_data = True

                # change of theme settings
                if request.user.theme != form.cleaned_data["theme"]:
                    request.user.theme = form.cleaned_data["theme"]
                    changed_data = True

                # save changes
                if changed_data:
                    request.user.save()

                # save success message
                messages.success(self.request,
                                 _('Settings were successfully updated'))
            context["settingsform"] = form

        # handle given avatar
        elif "avatar" in request.FILES or "avatar" in request.POST:
            if request.user.avatar:
                tempavatar = request.user.avatar
            else:
                tempavatar = None

            form = AvatarForm(request.POST,
                              request.FILES,
                              instance=request.user)

            if form.is_valid():
                if form.cleaned_data[
                        "avatar_clear"] and request.user.avatar is not None:
                    request.user.avatar.delete()
                    request.user.avatar = None
                    request.user.save()
                if tempavatar is not None:
                    tempavatar.storage.delete(tempavatar)
                form.save()
            context["avatarform"] = form

        return render(request, self.template_name, context)
Пример #15
0
 def test_non_existant_setting(self):
     form = SettingsForm()
     bad_setting = 'doesnt_exist'
     assert bad_setting not in form.fields.keys()
     with self.assertRaises(KeyError):
         Setting.get_for_user(self.u, bad_setting)