You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

259 lines
7.6 KiB

# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth import authenticate, login, logout
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import NoReverseMatch
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.http import Http404
from django.contrib.auth.models import Group, Permission
from django.contrib import messages
from abonapp.models import AbonGroup
from photo_app.models import Photo
from .models import UserProfile
import mydefs
@login_required
@mydefs.only_admins
def home(request):
return redirect('acc_app:profile')
def to_signin(request):
nextl = request.GET.get('next')
nextl = '' if nextl == 'None' or nextl is None or nextl.isspace() else nextl
try:
if request.POST:
auser = authenticate(username=request.POST.get('login'), password=request.POST.get('password'))
if auser:
login(request, auser)
if nextl == 'None' or nextl is None or nextl == '':
if request.user.is_staff:
return redirect('acc_app:profile')
return redirect('client_side:home')
return redirect(nextl)
return render(request, 'accounts/login.html', {
'next': nextl,
'errmsg': 'Неправильный логин или пароль, попробуйте ещё раз'
})
return render(request, 'accounts/login.html', {
'next': nextl
})
except NoReverseMatch:
raise Http404("Destination page does not exist")
def sign_out(request):
logout(request)
return redirect('acc_app:login')
@login_required
@mydefs.only_admins
def profile_show(request, uid=0):
uid = mydefs.safe_int(uid)
if uid == 0:
return redirect('acc_app:other_profile', uid=request.user.id)
usr = get_object_or_404(UserProfile, id=uid)
if request.method == 'POST':
usr.username = request.POST.get('username')
usr.fio = request.POST.get('fio')
usr.telephone = request.POST.get('telephone')
usr.is_active = request.POST.get('stat')
usr.is_admin = request.POST.get('is_admin')
usr.save()
return redirect('acc_app:other_profile', uid=uid)
return render(request, 'accounts/index.html', {
'uid': uid,
'userprofile': usr
})
@login_required
@mydefs.only_admins
def chgroup(request, uid):
uid = mydefs.safe_int(uid)
if uid == 0:
usr = request.user
else:
usr = get_object_or_404(UserProfile, id=uid)
if request.method == 'POST':
ag = request.POST.getlist('ag')
usr.abon_groups.clear()
usr.abon_groups.add(*[int(d) for d in ag])
usr.save()
abongroups = AbonGroup.objects.all()
return render(request, 'accounts/profile_chgroup.html', {
'uid': uid,
'userprofile': usr,
'abongroups': abongroups
})
@login_required
@mydefs.only_admins
def ch_ava(request):
if request.method == 'POST':
user = request.user
if user.avatar:
user.avatar.delete()
photo = Photo()
photo.image = request.FILES.get('avatar')
photo.save()
user.avatar = photo
user.save(update_fields=['avatar'])
request.user = user
return render(request, 'accounts/settings/ch_info.html', {
'user': request.user
})
@login_required
@mydefs.only_admins
def ch_info(request):
if request.method == 'POST':
user = request.user
user.username = request.POST.get('username')
user.fio = request.POST.get('fio')
user.email = request.POST.get('email')
user.telephone = request.POST.get('telephone')
psw = request.POST.get('oldpasswd')
if psw != '':
if user.check_password(psw):
newpasswd = request.POST.get('newpasswd')
user.set_password(newpasswd)
else:
messages.error(request, 'Неправильный пароль')
user.save()
request.user = user
return render(request, 'accounts/settings/ch_info.html', {
'user': request.user
})
@login_required
@permission_required('acc_app.add_userprofile')
def create_profile(request):
if request.method == 'POST':
username = request.POST.get('username')
user = UserProfile()
user.username = username
user.fio = request.POST.get('fio')
user.email = request.POST.get('email')
user.telephone = request.POST.get('telephone')
user.is_admin = True
passwd = request.POST.get('passwd')
conpasswd = request.POST.get('conpasswd')
if not passwd:
messages.error(request, 'Забыли указать пароль для нового аккаунта')
if not conpasswd:
messages.error(request, 'Забыли повторить пароль для нового аккаунта')
if passwd == conpasswd:
user_qs = UserProfile.objects.filter(username=username)[:1]
if user_qs.count() == 0:
user.set_password(passwd)
user.save()
return redirect('acc_app:accounts_list')
else:
messages.error(request, 'Пользователь с таким именем уже есть')
else:
messages.error(request, 'Пароли не совпадают, попробуйте ещё раз')
return render(request, 'accounts/create_acc.html', {
'newuser': user
})
return render(request, 'accounts/create_acc.html')
@login_required
@mydefs.only_admins
def delete_profile(request, uid):
if uid != request.user.id:
if not request.user.has_perm('acc_app.delete_userprofile'):
raise PermissionDenied
prf = get_object_or_404(UserProfile, id=uid)
prf.delete()
return redirect('acc_app:accounts_list')
@login_required
@mydefs.only_admins
def acc_list(request):
users = UserProfile.objects.filter(is_admin=True)
users = mydefs.pag_mn(request, users)
return render(request, 'accounts/acc_list.html', {
'users': users
})
@login_required
@mydefs.only_admins
def perms(request, uid):
profile = get_object_or_404(UserProfile, id=uid)
own_permissions = UserProfile.get_all_permissions(profile)
return render(request, 'accounts/settings/permissions.html', {
'uid': uid,
'own_permissions': own_permissions
})
@login_required
@mydefs.only_admins
def groups(request):
grps = Group.objects.all()
grps = mydefs.pag_mn(request, grps)
return render(request, 'accounts/group_list.html', {
'groups': grps
})
@login_required
@mydefs.only_admins
def group(request, uid):
uid = mydefs.safe_int(uid)
grp = get_object_or_404(Group, id=uid)
if request.method == 'POST':
group_rights = filter(lambda x: x[0] == 'group_rights', request.POST.lists())[0][1]
grp.permissions.clear()
for grr in group_rights:
rid = mydefs.safe_int(grr)
grp.permissions.add(rid)
grp.save()
return redirect('acc_app:profile_group_link', id=uid)
grp_rights = grp.permissions.all()
all_rights = Permission.objects.exclude(group=grp)
return render(request, 'accounts/group.html', {
'group': grp,
'all_rights': all_rights,
'grp_rights': grp_rights
})
@login_required
@mydefs.only_admins
def appoint_task(req, uid):
uid = mydefs.safe_int(uid)
url = resolve_url('taskapp:add')
return redirect("%s?rp=%d" % (url, uid))