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.
220 lines
7.4 KiB
220 lines
7.4 KiB
# -*- coding: utf-8 -*-
|
|
from django.shortcuts import render_to_response
|
|
from django.http import HttpResponseRedirect, HttpResponse
|
|
from django.template import RequestContext
|
|
from django.core.context_processors import csrf
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.utils.translation import ugettext as _
|
|
from django.utils import timezone
|
|
# forms
|
|
from forms import ChangePasswordForm, EmailAnnouncementForm
|
|
from edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\
|
|
WebPageForm, SocialForm, AboutForm
|
|
from models import User
|
|
# python
|
|
import json, datetime
|
|
import calendar as python_calendar
|
|
from django.views.generic import TemplateView, FormView
|
|
|
|
class SettingsView(TemplateView):
|
|
template_name = 'accounts/settings.html'
|
|
def get_context_data(self, **kwargs):
|
|
context = super(SettingsView, self).get_context_data(**kwargs)
|
|
context['change_password_form'] = ChangePasswordForm()
|
|
context['email_announcement_form'] = EmailAnnouncementForm()
|
|
return context
|
|
|
|
class CalendarView(TemplateView):
|
|
template_name = 'accounts/calendar.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(CalendarView, self).get_context_data(**kwargs)
|
|
now = timezone.now().replace(microsecond=0, second=0, minute=0, hour=0)
|
|
|
|
number_of_days = python_calendar.monthrange(now.year, now.month)[1]
|
|
days = [timezone.make_aware(datetime.datetime(now.year, now.month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)]
|
|
|
|
context['days'] = days
|
|
context['current_day'] = now
|
|
# --------------------
|
|
calendar = self.request.user.calendar
|
|
context['events'] = calendar.events_by_month(now)
|
|
|
|
return context
|
|
|
|
|
|
def events_handeler(obj):
|
|
response = {'name': obj.name, 'country': obj.country.name, 'city': obj.city.name}
|
|
if obj.place:
|
|
response['place'] = obj.place.name
|
|
return response
|
|
|
|
|
|
@login_required
|
|
def get_calendar(request, year, month):
|
|
now = timezone.now().replace(microsecond=0, second=0, minute=0, hour=0)
|
|
day = timezone.make_aware(datetime.datetime(year=int(year), month=int(month), day=1), timezone.get_default_timezone())
|
|
calendar = request.user.calendar
|
|
|
|
number_of_days = python_calendar.monthrange(day.year, day.month)[1]
|
|
days = [timezone.make_aware(datetime.datetime(day.year, day.month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)]
|
|
args = {}
|
|
dthandler = lambda obj: (obj.isoformat() if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) else None)
|
|
|
|
args['days'] = json.dumps(days, default=dthandler)
|
|
args['current_day'] = json.dumps(now, default=dthandler)
|
|
events = calendar.events_by_month(day)
|
|
|
|
args['events'] = json.dumps(events, default=events_handeler)
|
|
|
|
return HttpResponse(json.dumps(args), content_type='application/json')
|
|
|
|
class ProfileView(TemplateView):
|
|
template_name = 'accounts/profile.html'
|
|
|
|
def post(self):
|
|
return HttpResponse(self.request.POST)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ProfileView, self).get_context_data(**kwargs)
|
|
user = self.request.user
|
|
profile = user.profile
|
|
|
|
|
|
profile_forms = {
|
|
'avatar_form': AvatarForm(instance=profile), 'name_form': NameForm(instance=user),
|
|
'home_form': HomeForm(instance=profile), 'work_form': WorkForm(instance=profile),
|
|
'about_company_form': AboutCompanyForm(instance=profile), 'phone_form': PhoneForm(instance=profile),
|
|
'email_form': EmailForm(instance=user), 'web_page_form': WebPageForm(instance=profile),
|
|
'social_form': SocialForm(instance=profile), 'about_form': AboutForm(instance=profile)
|
|
}
|
|
|
|
context.update(profile_forms)
|
|
return context
|
|
|
|
|
|
class MessagesView(TemplateView):
|
|
template_name = 'accounts/messages.html'
|
|
|
|
|
|
|
|
@login_required
|
|
def change_password(request):
|
|
"""
|
|
Change current user password if new password is valid
|
|
"""
|
|
success = {'success': False}
|
|
if request.POST:
|
|
form = ChangePasswordForm(request.POST)
|
|
if form.is_valid():
|
|
user = request.user
|
|
if(user.check_password(form.cleaned_data.get('old_password'))):
|
|
#user.set_password(form.cleaned_data.get('new_password'))
|
|
#user.save()
|
|
success['success'] = True
|
|
success['message'] = _(u'Пароль именен')
|
|
return HttpResponse(json.dumps(success), content_type='application/json')
|
|
else:
|
|
errors = {'errors': [_(u'Не правильный пароль')]}
|
|
success.update(errors)
|
|
return HttpResponse(json.dumps(success), content_type='application/json')
|
|
else:
|
|
errors = [err[0] for err in form.errors.values()]
|
|
errors = {'errors': errors}
|
|
success.update(errors)
|
|
return HttpResponse(json.dumps(success), content_type='application/json')
|
|
else:
|
|
return HttpResponse(json.dumps(success), content_type='application/json')
|
|
|
|
|
|
|
|
|
|
def user_for_tag(request):
|
|
|
|
users = [{'id': user.id, 'label': user.get_full_name(), 'value': user.get_full_name() } for user in User.objects.all()]
|
|
return HttpResponse(json.dumps(users), content_type='application/json')
|
|
|
|
class ProfileInvalidView(FormView):
|
|
"""
|
|
abstract view
|
|
"""
|
|
def form_invalid(self, form):
|
|
response = {'success': False}
|
|
return HttpResponse(json.dumps(response), content_type='application/json')
|
|
|
|
|
|
class BaseProfileView(ProfileInvalidView):
|
|
"""
|
|
abstract view
|
|
"""
|
|
def form_valid(self, form):
|
|
profile = self.request.user.profile
|
|
form = self.form_class(self.request.POST, instance=profile)
|
|
form.save()
|
|
response = {'success': True}
|
|
return HttpResponse(json.dumps(response), content_type='application/json')
|
|
|
|
class WorkView(BaseProfileView):
|
|
form_class = WorkForm
|
|
|
|
class AvatarView(BaseProfileView):
|
|
form_class = AvatarForm
|
|
|
|
def form_valid(self, form):
|
|
profile = self.request.user.profile
|
|
form = self.form_class(self.request.POST, self.request.FILES, instance=profile)
|
|
form.save()
|
|
response = {'success': True}
|
|
return HttpResponse(json.dumps(response), content_type='application/json')
|
|
|
|
|
|
class HomeView(BaseProfileView):
|
|
form_class = HomeForm
|
|
|
|
|
|
class AboutCompanyView(BaseProfileView):
|
|
form_class = AboutCompanyForm
|
|
|
|
|
|
class PhoneView(BaseProfileView):
|
|
form_class = PhoneForm
|
|
|
|
|
|
class WebPageView(BaseProfileView):
|
|
form_class = WebPageForm
|
|
|
|
|
|
class SocialView(BaseProfileView):
|
|
form_class = SocialForm
|
|
|
|
|
|
class AboutView(BaseProfileView):
|
|
form_class = AboutForm
|
|
|
|
|
|
class EmailView(ProfileInvalidView):
|
|
form_class = EmailForm
|
|
|
|
def form_valid(self, form):
|
|
user = self.request.user
|
|
form = self.form_class(self.request.POST, instance=user)
|
|
form.save()
|
|
response = {'success': True}
|
|
|
|
return HttpResponse(json.dumps(response), content_type='application/json')
|
|
|
|
|
|
class NameView(ProfileInvalidView):
|
|
form_class = NameForm
|
|
|
|
def form_valid(self, form):
|
|
user = self.request.user
|
|
form = self.form_class(self.request.POST, instance=user)
|
|
form.save()
|
|
response = {'success': True}
|
|
|
|
return HttpResponse(json.dumps(response), content_type='application/json')
|
|
|
|
def test(request):
|
|
|
|
return HttpResponse('test') |