132 lines
4.5 KiB
Python
132 lines
4.5 KiB
Python
from django.shortcuts import render, redirect, reverse
|
||
from django.http import HttpResponseRedirect
|
||
from django.urls import reverse_lazy
|
||
|
||
from main.extra_func import set_and_get_name, set_and_get_email, load_and_get_image, set_and_get_role, check_user_exist, \
|
||
check_user_auth
|
||
from main.models import UserProfile
|
||
|
||
from django.contrib.auth.models import User
|
||
from main.forms import CustomRegistrationForm
|
||
from django_registration.views import RegistrationView
|
||
|
||
from django.contrib.auth.decorators import login_required
|
||
|
||
from zenpy import Zenpy
|
||
from zenpy.lib.api_objects import User as ZenpyUser
|
||
|
||
from .models import UserProfile
|
||
|
||
import os
|
||
|
||
|
||
class CustomRegistrationView(RegistrationView):
|
||
"""
|
||
Отображение и логика работы страницы регистрации пользователя
|
||
"""
|
||
form_class = CustomRegistrationForm
|
||
template_name = 'django_registration/registration_form.html'
|
||
success_url = reverse_lazy('django_registration_complete')
|
||
is_allowed = True
|
||
|
||
def register(self, form):
|
||
if check_user_exist(form.data['email']) and check_user_auth(form.data['email'], form.data['password_zen']):
|
||
user = User.objects.create_user(
|
||
username=form.data['username'],
|
||
email=form.data['email'],
|
||
password=form.data['password1']
|
||
)
|
||
profile = UserProfile(
|
||
user=user,
|
||
role=0,
|
||
)
|
||
set_and_get_name(profile)
|
||
set_and_get_email(profile)
|
||
set_and_get_role(profile)
|
||
load_and_get_image(profile)
|
||
profile.save()
|
||
else:
|
||
self.is_allowed = False
|
||
|
||
def get_success_url(self, user=None):
|
||
"""
|
||
Возвращает url-адрес страницы, куда нужно перейти после успешной/неуспешной регистрации
|
||
Используется самой django-registration
|
||
"""
|
||
if self.is_allowed:
|
||
return reverse_lazy('django_registration_complete')
|
||
else:
|
||
return reverse_lazy('django_registration_disallowed')
|
||
|
||
|
||
@login_required()
|
||
def profile_page(request):
|
||
"""
|
||
Отображение страницы профиля
|
||
|
||
|
||
:param request: объект с деталями запроса
|
||
:type request: :class:`django.http.HttpResponse`
|
||
:return: объект ответа сервера с HTML-кодом внутри
|
||
"""
|
||
if request.user.is_authenticated:
|
||
user_profile = request.user.userprofile
|
||
|
||
context = {
|
||
'name': set_and_get_name(user_profile),
|
||
'email': set_and_get_email(user_profile),
|
||
'role': set_and_get_role(user_profile),
|
||
'image_name': load_and_get_image(user_profile),
|
||
'pagename': 'Страница профиля'
|
||
}
|
||
return render(request, 'pages/profile.html', context)
|
||
|
||
def auth_user(request):
|
||
admin_creds = {
|
||
'email': os.environ.get('Admin_email'),
|
||
'subdomain': 'ngenix1612197338',
|
||
'token': os.environ.get('Oauth_token'),
|
||
}
|
||
admin = Zenpy(**admin_creds)
|
||
zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0]
|
||
return zenpy_user, admin
|
||
|
||
@login_required()
|
||
def work_page(request, id):
|
||
if request.user.is_authenticated and request.user.id == id:
|
||
zenpy_user, _ = auth_user(request)
|
||
|
||
context = {
|
||
'engineers': UserProfile.objects.filter(role=1),
|
||
'agents': UserProfile.objects.filter(role=0),
|
||
'role': zenpy_user.role,
|
||
'pagename': 'Управление правами'
|
||
}
|
||
return render(request, 'pages/work.html', context)
|
||
return redirect("login")
|
||
|
||
@login_required()
|
||
def work_hand_over(request):
|
||
zenpy_user, admin = auth_user(request)
|
||
if request.user.is_authenticated and zenpy_user.role == "admin":
|
||
zenpy_user.role = "agent"
|
||
admin.users.update(zenpy_user)
|
||
request.user.userprofile.role = 0
|
||
request.user.userprofile.save()
|
||
return HttpResponseRedirect(reverse('work', args=(request.user.id, )))
|
||
|
||
|
||
@login_required()
|
||
def work_become_engineer(request):
|
||
zenpy_user, admin = auth_user(request)
|
||
if request.user.is_authenticated and zenpy_user.role == "agent":
|
||
zenpy_user.role = "admin"
|
||
admin.users.update(zenpy_user)
|
||
request.user.userprofile.role = 1
|
||
request.user.userprofile.save()
|
||
return HttpResponseRedirect(reverse('work', args=(request.user.id, )))
|
||
|
||
|
||
def main_page(request):
|
||
return render(request, 'pages/index.html')
|