Example #1
0
File: views.py Project: CCLab/sezam
def add_authority(request, slug=None, **kwargs):
    """
    Add new Authority in case if it can't be found in the database.
    """
    user_message = request.session.pop('user_message', {})
    template = kwargs.get('template', 'add_record.html')
    admin_mail_template = 'emails/authority_added.txt'
    from_link = None

    # Show the form to enter Authority data.
    if request.method == 'GET':
        from_link = request.GET.get('from', None)
        initial = {'slug': 'slug', 'order': 100}
        form = AuthorityProfileForm(initial=initial)

    # Check if the form is correct, save Authority in the db.
    elif request.method == 'POST':
        form = AuthorityProfileForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            authority = AuthorityProfile(**data)
            try:
                authority.save()
            except Exception as e:
                print >> sys.stderr, '[%s] %s' % (datetime.now().isoformat(), e)
                user_message = update_user_message({}, e.args[0], 'fail')
                form = AuthorityProfileForm(instance=authority)
            if authority.id: # Added successfully.
                user_message = update_user_message(user_message,
                    AppMessage('AuthSavedInactive').message % authority.name,
                    'success')

                # Send notification to managers.
                subject = _(u'New authority in the db: ') + authority.name
                content = render_to_string(admin_mail_template, {
                    'authority': authority, 'user': request.user,
                    'domain': get_domain_name()})
                try:
                    send_mail_managers(subject, content, fail_silently=False,
                                       headers={'Reply-To': request.user.email})
                except Exception as e:
                    print >> sys.stderr, '[%s] %s' % (datetime.now().isoformat(), e)

                # Create notifier.
                item = TaggedItem.objects.create(name=authority.name,
                                                content_object=authority)
                evnt = EventNotification.objects.create(
                    item=item, action='active', receiver=request.user,
                    summary='Authority %s becomes active' % authority.name)

                request.session['user_message'] = user_message
                return redirect(reverse('display_authorities'))

    return render_to_response(template,
                              {'form': form,
                               'from': from_link,
                               'mode': 'authority',
                               'user_message': user_message,
                               'page_title': _(u'Add authority')},
        context_instance=RequestContext(request))