-# Copyright 2011 GRNET S.A. All rights reserved.
+# Copyright 2011-2012 GRNET S.A. All rights reserved.
#
# Redistribution and use in source and binary forms, with or
# without modification, are permitted provided that the following
from django.utils.http import urlencode
from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
-from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import AnonymousUser
from django.contrib.auth.decorators import login_required
-from django.contrib.sites.models import get_current_site
+from django.contrib.sites.models import Site
from django.contrib import messages
from django.db import transaction
from django.contrib.auth.forms import UserCreationForm
#from astakos.im.openid_store import PithosOpenIDStore
from astakos.im.models import AstakosUser, Invitation
-from astakos.im.util import isoformat, get_or_create_user, get_context
+from astakos.im.util import isoformat, get_context, get_current_site
from astakos.im.backends import get_backend
-from astakos.im.forms import ProfileForm, FeedbackForm
+from astakos.im.forms import ProfileForm, FeedbackForm, LoginForm
def render_response(template, tab=None, status=200, context_instance=None, **kwargs):
"""
html = render_to_string(template, kwargs, context_instance=context_instance)
return HttpResponse(html, status=status)
-def index(request, template_name='index.html', extra_context={}):
+def index(request, login_template_name='login.html', profile_template_name='profile.html', extra_context={}):
"""
- Renders the index (login) page
+ If there is logged on user renders the profile page otherwise renders login page.
**Arguments**
- ``template_name``
- A custom template to use. This is optional; if not specified,
- this will default to ``index.html``.
+ ``login_template_name``
+ A custom login template to use. This is optional; if not specified,
+ this will default to ``login.html``.
+
+ ``profile_template_name``
+ A custom profile template to use. This is optional; if not specified,
+ this will default to ``profile.html``.
``extra_context``
An dictionary of variables to add to the template context.
**Template:**
- index.html or ``template_name`` keyword argument.
+ profile.html or login.html or ``template_name`` keyword argument.
"""
+ template_name = login_template_name
+ formclass = 'LoginForm'
+ kwargs = {}
+ if request.user.is_authenticated():
+ template_name = profile_template_name
+ formclass = 'ProfileForm'
+ kwargs.update({'instance':request.user})
return render_response(template_name,
- form = AuthenticationForm(),
+ form = globals()[formclass](**kwargs),
context_instance = get_context(request, extra_context))
def _generate_invitation_code():
return code
def _send_invitation(request, baseurl, inv):
- subject = _('Invitation to Astakos')
- site = get_current_site(request)
- url = settings.SIGNUP_TARGET % (baseurl, inv.code, quote(site.domain))
+ sitename, sitedomain = get_current_site(request, use_https=request.is_secure())
+ subject = _('Invitation to %s' % sitename)
+ url = settings.SIGNUP_TARGET % (baseurl, inv.code, quote(sitedomain))
message = render_to_string('invitation.txt', {
'invitation': inv,
'url': url,
'baseurl': baseurl,
- 'service': site.name,
- 'support': settings.DEFAULT_CONTACT_EMAIL})
- sender = settings.DEFAULT_FROM_EMAIL
+ 'service': sitename,
+ 'support': settings.DEFAULT_CONTACT_EMAIL % sitename.lower()})
+ sender = settings.DEFAULT_FROM_EMAIL % sitename
send_mail(subject, message, sender, [inv.username])
logging.info('Sent invitation %s', inv)
"""
status = None
message = None
- inviter = request.user
-
+ inviter = AstakosUser.objects.get(username = request.user.username)
+
if request.method == 'POST':
username = request.POST.get('uniq')
realname = request.POST.get('realname')
signup.html or ``template_name`` keyword argument.
"""
- if not backend:
- backend = get_backend()
try:
- form = backend.get_signup_form(request)
+ if not backend:
+ backend = get_backend(request)
+ form = backend.get_signup_form()
if request.method == 'POST':
if form.is_valid():
- status, message = backend.signup(request)
- # rollback incase of error
+ status, message = backend.signup(form)
+ # rollback in case of error
if status == messages.ERROR:
transaction.rollback()
else:
transaction.commit()
- next = request.POST.get('next')
- if next:
- return redirect(next)
+ next = request.POST.get('next')
+ if next:
+ return redirect(next)
messages.add_message(request, status, message)
except (Invitation.DoesNotExist, Exception), e:
messages.add_message(request, messages.ERROR, e)
**Settings:**
- * FEEDBACK_CONTACT_EMAIL: List of feedback recipients
+ * DEFAULT_CONTACT_EMAIL: List of feedback recipients
"""
if request.method == 'GET':
form = FeedbackForm()
form = FeedbackForm(request.POST)
if form.is_valid():
- subject = _("Feedback from Okeanos")
+ sitename, sitedomain = get_current_site(request, use_https=request.is_secure())
+ subject = _("Feedback from %s" % sitename)
from_email = request.user.email
- recipient_list = [settings.FEEDBACK_CONTACT_EMAIL]
+ recipient_list = [settings.DEFAULT_CONTACT_EMAIL % sitename.lower()]
content = render_to_string(email_template_name, {
- 'message': form.cleaned_data('feedback_msg'),
- 'data': form.cleaned_data('feedback_data'),
+ 'message': form.cleaned_data['feedback_msg'],
+ 'data': form.cleaned_data['feedback_data'],
'request': request})
- send_mail(subject, content, from_email, recipient_list)
-
- resp = json.dumps({'status': 'send'})
- return HttpResponse(resp)
+ try:
+ send_mail(subject, content, from_email, recipient_list)
+ message = _('Feedback successfully sent')
+ status = messages.SUCCESS
+ except (SMTPException, socket.error) as e:
+ status = messages.ERROR
+ message = getattr(e, 'strerror', '')
+ messages.add_message(request, status, message)
return render_response(template_name,
form = form,
- context_instance = get_context(request, extra_context))
\ No newline at end of file
+ context_instance = get_context(request, extra_context))