from postgresqleu.accountinfo.lookups import UserLookup
from postgresqleu.confreg.lookups import RegistrationLookup
+import postgresqleu.accounting.models
from postgresqleu.confreg.models import Conference, ConferenceRegistration, ConferenceAdditionalOption
from postgresqleu.confreg.models import RegistrationClass, RegistrationType, RegistrationDay
self.fields['volunteers'].queryset = ConferenceRegistration.objects.filter(conference=self.conference)
+class BackendSuperConferenceForm(BackendForm):
+ class Meta:
+ model = Conference
+ fields = ['conferencename', 'urlname', 'series', 'startdate', 'enddate', 'location',
+ 'timediff', 'contactaddr', 'sponsoraddr', 'confurl', 'administrators',
+ 'jinjadir', 'accounting_object', 'vat_registrations', 'vat_sponsorship', ]
+ selectize_multiple_fields = ['administrators', ]
+ accounting_object = django.forms.ChoiceField(choices=[], required=False)
+ exclude_date_validators = ['startdate', 'enddate']
+
+ def fix_fields(self):
+ self.fields['administrators'].label_from_instance = lambda x: u'{0} {1} ({2})'.format(x.first_name, x.last_name, x.username)
+ self.fields['accounting_object'].choices = [('', '----'),] + [(o.name, o.name) for o in postgresqleu.accounting.models.Object.objects.filter(active=True)]
+ if not self.instance.id:
+ del self.fields['accounting_object']
+
+ def pre_create_item(self):
+ # Create a new accounting object automatically if one does not exist already
+ (obj, created) = postgresqleu.accounting.models.Object.objects.get_or_create(name=self.instance.urlname,
+ defaults={'active': True})
+ self.instance.accounting_object = obj
+
class BackendRegistrationForm(BackendForm):
class Meta:
model = ConferenceRegistration
from django.db import transaction
from django import forms
from django.core import urlresolvers
+from django.core.exceptions import PermissionDenied
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.contrib.admin.utils import NestedObjects
from django.contrib import messages
from postgresqleu.confsponsor.util import get_sponsor_dashboard_data
from backendforms import BackendCopySelectConferenceForm
-from backendforms import BackendConferenceForm, BackendRegistrationForm
+from backendforms import BackendConferenceForm, BackendSuperConferenceForm, BackendRegistrationForm
from backendforms import BackendRegistrationTypeForm, BackendRegistrationClassForm
from backendforms import BackendRegistrationDayForm, BackendAdditionalOptionForm
from backendforms import BackendTrackForm, BackendRoomForm, BackendConferenceSessionForm
allow_new=False,
allow_delete=False)
+@login_required
+def superedit_conference(request, urlname):
+ if not request.user.is_superuser:
+ raise PermissionDenied("Superuser only")
+
+ return backend_process_form(request,
+ urlname,
+ BackendSuperConferenceForm,
+ get_object_or_404(Conference, urlname=urlname).pk,
+ bypass_conference_filter=True,
+ allow_new=False,
+ allow_delete=False)
+
+@login_required
+def new_conference(request):
+ if not request.user.is_superuser:
+ raise PermissionDenied("Superuser only")
+
+ return backend_process_form(request,
+ None,
+ BackendSuperConferenceForm,
+ None,
+ bypass_conference_filter=True,
+ allow_new=True,
+ allow_delete=False,
+ conference=Conference(),
+ instancemaker=lambda: Conference(),
+ )
+
def edit_registration(request, urlname, regid):
return backend_process_form(request,
urlname,
url(r'^events/admin/([^/]+)/reports/feedback/$', postgresqleu.confreg.feedback.feedback_report),
url(r'^events/admin/([^/]+)/reports/feedback/session/$', postgresqleu.confreg.feedback.feedback_sessions),
url(r'^events/admin/([^/]+)/reports/schedule/$', postgresqleu.confreg.pdfschedule.pdfschedule),
+ url(r'^events/admin/newconference/$', postgresqleu.confreg.backendviews.new_conference),
url(r'^events/admin/(\w+)/$', postgresqleu.confreg.views.admin_dashboard_single),
url(r'^events/admin/(\w+)/edit/$', postgresqleu.confreg.backendviews.edit_conference),
+ url(r'^events/admin/(\w+)/superedit/$', postgresqleu.confreg.backendviews.superedit_conference),
url(r'^events/admin/(\w+)/mail/$', postgresqleu.confreg.views.admin_attendeemail),
url(r'^events/admin/(\w+)/mail/(\d+)/$', postgresqleu.confreg.views.admin_attendeemail_view),
url(r'^events/admin/(\w+)/regdashboard/$', postgresqleu.confreg.views.admin_registration_dashboard),
</div>
{%endif%}
+{%if user.is_superuser%}
+<h3>New conference</h3>
+<div class="row">
+ <div class="col-md-3 col-sm-6 col-xs-12 buttonrow">
+ <a class="btn btn-default btn-block" href="/events/admin/newconference/">Create new conference</a>
+ </div>
+</div>
+{%endif%}
+
{%if user.is_superuser%}
<p>
Everything should normally be edited through interfaces above. For exceptional cases,
<h2>Metadata</h2>
<div class="row">
<div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn btn-default btn-block" href="/events/admin/{{c.urlname}}/edit/">Conference entry</a></div>
+{%if user.is_superuser%}
+ <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn btn-default btn-block" href="/events/admin/{{c.urlname}}/superedit/">Superuser conference entry</a></div>
+{%endif%}
<div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn btn-default btn-block" href="/events/admin/{{c.urlname}}/accesstokens/">Access tokens</a></div>
<div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn btn-default btn-block" href="/events/admin/{{c.urlname}}/feedbackquestions/">Feedback questions</a></div>
</div>