Select Git revision
example.conllu
views.py 3.85 KiB
from django.apps import apps
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.shortcuts import get_current_site
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.utils.translation import gettext_lazy as _
from django.views.decorators.http import require_http_methods
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
from django.conf import settings
@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')})
@login_required
def get_notes(request, model, pk, type):
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')
if type:
notes = notes.filter(type=type)
return JsonResponse({
"notes": [{
"pk": note.pk,
"owner_label": "własne" if note.author.pk is request.user.pk else note.author.username,
"created_at": note.created_at,
"title": note.title,
"note": note.note,
"type": note.type,
"super": "Tak" if note.super else "Nie"
} for note in notes],
})
@require_http_methods(["POST"])
@login_required
def add_note(request, model, pk, type=None):
model = apps.get_model(*model.split('.'))
subject = get_object_or_404(model, pk=pk)
user = request.user
if request.POST.get('super', 'off') == 'on' \
and user.groups.filter(name=settings.SUPER_LEXICOGRAPHS_GROUP_NAME).exists():
user = subject.assignments.first().user
note = Note(author=user, subject=subject)
if type:
note.type = type
form = NoteForm(instance=note, data=request.POST)
if form.is_valid():
form.save()
return JsonResponse({})
return JsonResponse(form.errors.get_json_data(), status=400)
@require_http_methods(["DELETE"])
@login_required
def delete_note(request, pk, type=None):
note = get_object_or_404(Note.objects.for_user(request.user), pk=pk, type=type) if type else \
get_object_or_404(Note.objects.for_user(request.user), pk=pk)
note.delete()
return JsonResponse({})