Skip to content
Snippets Groups Projects
views.py 3.27 KiB
Newer Older
dcz2's avatar
dcz2 committed
from django.apps import apps
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import User
dcz2's avatar
dcz2 committed
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.shortcuts import get_current_site
dcz2's avatar
dcz2 committed
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.utils.translation import gettext_lazy as _
dcz2's avatar
dcz2 committed
from django.views.decorators.http import require_http_methods
dcz2's avatar
dcz2 committed
from common.decorators import ajax
from users.forms import UserForm, UserProfileForm, NoteForm
from users.models import Note
from users.utils import send_new_user_email


@permission_required('users.view_user')
def user_list(request):
    return render(request, 'user_list.html', {'users': User.objects.order_by('username')})


@login_required
def user_profile(request):
    if request.method == 'POST':
        form = UserProfileForm(instance=request.user, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('dash')
    else:
        form = UserProfileForm(instance=request.user)
    return render(request, 'user_profile.html', {'form': form})


@permission_required('users.add_user')
def user_add(request):
    if request.method == 'POST':
        form = UserForm(instance=User(), data=request.POST)
        if form.is_valid():
            user = form.save()
            send_new_user_email(site=get_current_site(request), user=user, use_https=request.is_secure())
            return redirect('users:user_list')
    else:
        form = UserForm(instance=User())
    return render(request, 'user_form.html', {'form': form, 'title': _('Dodaj użytkownika')})


@permission_required('users.change_user')
def user_edit(request, pk):
    user = get_object_or_404(User, pk=pk)
    if request.method == 'POST':
        form = UserForm(instance=user, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('users:user_list')
    else:
        form = UserForm(instance=user)
    return render(request, 'user_form.html', {'form': form, 'title': _('Edytuj użytkownika')})
dcz2's avatar
dcz2 committed


@login_required
def get_notes(request, model, pk):
    model = apps.get_model(*model.split('.'))
    subject = get_object_or_404(model, pk=pk)
    ct = ContentType.objects.get_for_model(model)
    notes = Note.objects.filter(subject_ct=ct, subject_id=subject.pk).for_user(request.user).order_by('created_at')
    return JsonResponse({
        "notes": [{
            "pk": note.pk,
            "owner_label": note.owner_label,
            "created_at": note.created_at,
dcz2's avatar
dcz2 committed
            "title": note.title,
dcz2's avatar
dcz2 committed
            "note": note.note,
        } for note in notes],
    })


@require_http_methods(["POST"])
@login_required
def add_note(request, model, pk):
    model = apps.get_model(*model.split('.'))
    subject = get_object_or_404(model, pk=pk)
    note = Note(author=request.user, subject=subject)
    form = NoteForm(instance=note, data=request.POST)
    if form.is_valid():
        form.save()
        return JsonResponse({})
    return JsonResponse(form.errors.get_json_data(), status=400)
dcz2's avatar
dcz2 committed


@require_http_methods(["DELETE"])
@login_required
def delete_note(request, pk):
    note = get_object_or_404(Note.objects.for_user(request.user), pk=pk)
    note.delete()
    return JsonResponse({})