summaryrefslogtreecommitdiff
path: root/postgresqleu/confreg/admin.py
AgeCommit message (Collapse)Author
2023-07-24Move cfpintro, additionalintro and welcomemail from db to templatesMagnus Hagander
This moves these large-text fields out of the database and into the templates, which makes them a lot easier to edit there, and will make it possible to use better HTML templating and such in the future. cfpintro can be set either using a full template block override or using a property called system.cfp.intro. additionalintro can for now only be set as a property, system.reg.additionalintro. In passing also add a system.reg.voucherintro to override the default text introducing what to do with vouchers. As of this, require the template confreg/mail/welcomemail.txt to exist in the skin directory to make it possible to send welcome emails. Previously there was a default content for this file that just included the database property as the entire text, but from this it requires a complete file in the skin. The fact that it exists is validated when trying to turn on either welcome email or tickets. Also create a new model for ConferenceRemovedData where we persist the current values for these fields, since the database content isn't under version control, in case it needs to be recovered later.
2023-01-12Fix selection of users to show as check-in processorsMagnus Hagander
The django admin dialog is seldom used for this, but should of course show the correct values. The possible checkin processors at a conference are the checkin processors, not "all registered and confirmed attendees".
2022-10-10Exclude messaging_config from django admin of registrationsMagnus Hagander
This should never be manually changed, and can cause issues in saving empty entries.
2022-06-26Support higher resolution speaker photosMagnus Hagander
This adds a new field to the speaker model supporting 512x512 sized speaker photos. It also changes the speaker form (as well as the backend form) to accept any size image and resize it into the bounding box of 512x512. There is no reason to force the speaker to do that manually, computers are good at such things. The rezied image will be padded as necessary to the full 512x512 with transparent background, which also means the storage format of the new photos will be PNG in order to support that transparency. Whenever the photo is updated, a downscaled copy will automatically be generated that's 128x128 for backwards compatibilty as well as thumbnailing. There is no interface to independently edit this lower resolution photo. Fixes #15
2022-06-25Make registration open controlled by an optional time rangeMagnus Hagander
Just like for cfp and cfs, make it possible to specify an exact timestamp when registration will open and close, if wanted.
2022-06-25Rename field 'active' on a conference to 'registrationopen'Magnus Hagander
This has been sitting in the corner of legacy for far too long. Rename to registrationopen to make it much omre clear and consistent with other entries, and more searchable. Quite likely one or more places were missed in this commit and will need to get cleaned up...
2022-06-25Make call for papers and sponsors controllable by a time rangeMagnus Hagander
Allows specifying at which time call for papers and call for sponsors are opened, instead of manually having to flip a checkbox. For the call to be opened, it needs to *both* satisfy the checkbox and the time range, unless the timerange is left completely empty (the default) i which case the checkbox is used along like before. Fixes #34
2020-07-13Remove unused importsMagnus Hagander
2020-04-04Enable use of django 2.2 autocomplete in admin viewsMagnus Hagander
2020-04-04Remove dependency on django-selectableMagnus Hagander
The version we have doesn't work in django 2.2. And while there might be newer ones available, we only use it in the admin interface and the newer django has it's own functionality for delivering the same thing there.
2019-12-13Exclude photo from field validation of speakers in django adminMagnus Hagander
We already excluded this in the normal admin area, but the superuser django admin did not. Fixes #9
2019-10-29Move speaker photos into main model with byteaMagnus Hagander
Instead of having a separate table with just the photos, move into the main table. And instead of storing it base64 encoded, store it as a proper bytea field. Also rename the field from photofile to photo, to be more logical. Note that this can BREAK templates overriding this field. The old name is preserved on the model so that old templates for showing the page should work, but not the form in the speaker profile.
2019-07-11Make the speaker photo use a proper widget and validatorMagnus Hagander
Instead of a bunch of things hardcoded in the template and in the view, make the photo upload widget reusable, and move the validation of the field into a proper validator. This makes it a lot easier to re-use the field elsewhere.
2019-02-05Fix conference filter in django adminMagnus Hagander
Broken by update to python3, but clearly not used very often.
2019-01-10Fix for comparison between string and intMagnus Hagander
2019-01-10Manual pep8 fixesMagnus Hagander
Mostly pep8-incompatible imports generated by 2to3, many of which weren't used anyway. Also some indentation errors caused by 2to3.
2019-01-10Replace __unicode__ with __str__Magnus Hagander
2to3 doesn't do this automatically, probably because weird things can happen if you had both. We know we didn't, so just do a straight replacement.
2019-01-10Import related fixes from 2to3Magnus Hagander
2019-01-04Fix sibling importsMagnus Hagander
Sibling imports should be prefixed with a period. Good idea in py2, will eventually become required in py3, so another small step.
2019-01-04Switch to new style try/except handlingMagnus Hagander
Python 2.6 introduced the better syntax, Python 3 removes the old one, so one small step towards py3.
2018-12-26Create ticketing and check-in systemMagnus Hagander
This adds a system for generating tickets and using those tickets when the attendees check into the conference. Fundamentally this consists of a number of things: * A webapp for checking in users, including support for both QR code scanning of tickets and manual searching/checking in. * Generating tickets as PDFs, making them available on the registration page, and sending them with the welcome email. Tickets are generated using the same kind of JSON template that badges already did, from a file called tickets.json. A basic sample ticket is included, but should normally be skinned per conference. * Tickets can be enabled/disabled on a per conference basis, which turns on the availability of all those things. * The check-in process is enabled/disabled on a per conference basis when the confernce starts and is shut down after it's finished, and controls just the checkin app. * Check-in processors are assigned on a per conference basis to registered users. Those are the users that will use the app to perform checkins. (Need to be a bit careful about handing out that permission since it can access a lot of information about attendees) * The exact time of a checkin is tracked along with who checked the attendee in. Reporting can be added for this later, to track things like peak times more efficiently. * Support is added for the concept of "queue partitioning". This is wen the queues at checkin are split into separate ones, such as "A-F", "G-S" etc. This is done as part of the ticket system as we can then print the suggested queue already on the ticket, so there is no ambiguity. * The actual queue partitions can be decided at conference time when it is known how many there will be. A new reports allows for automatic calculation of where the partitions should be to get as even as possible queues. This adds two new tokens to each registration, an "idtoken" which is the secret token used on the ticket in order to look up the registration (we don't want to use the regtoken here, as that one is even more secret and allows the modification of a registration), and a "publictoken" which can be printed on badges for public lookup. The public token is not currently used at all, but it's easier to make it available at the same time.
2018-12-19Remove legacy permissions code from confreg django adminMagnus Hagander
Only superusers should have access to /admin/django/ at this time, so no need to carry this code around.
2018-12-19Remove legacy email-to-multiple functionalityMagnus Hagander
The functionality in /admin/ was always pretty much a hack, and the new functionality covers this and more, so there is no need to use it anymore. In passing also remove the /admin/ functionality to bypass confirmation of attendees, which should not have been used since a long time.
2018-12-16Move django admin interface to /admin/django/Magnus Hagander
Happy broken links everybody :) But these are links that should normally not be used, so...
2018-12-15Replace usage of has_key()Magnus Hagander
It has been deprecated, and instead we should use "in" and "not in", so make that change across the board.
2018-12-14Avoid multi-statement rowsMagnus Hagander
2018-12-14Fix blankline related warningsMagnus Hagander
2018-12-14Fix comment warningsMagnus Hagander
In passing remove some comments that were pointless
2018-12-14Fix spaces before/after comma and colonMagnus Hagander
Mostly not important, but getting rid of the PIP warnings will help catch errors in the future.
2018-12-14Fix spacing around operatorsMagnus Hagander
2018-12-14Manual fix of further whitespace issuesMagnus Hagander
Many of these were masked with the using of tabs, but were basically incorrect all the time. It's all in places where whitespace doesn't actually matter, but let's try to match up to PEP8.
2018-12-14Replace tabs with spacesMagnus Hagander
In an effort to close up with PEP8, we should use spaces for indent rather than tabs... Time to update your editor config!
2018-11-17Implement conference series permissionsMagnus Hagander
This adds the concept of an administrator at the conference series level. An administrator of a series will: 1. Automatically be administrator on all conferences in the series 2. Have access to time based reports for the series 3. Have access to cross-conference email for the series In passing, update the time based report template to use the newer styling, and make it possible to resize the graph with drag/drop. This also changes the list of available conferences in time reports to be grouped by conference series, and removes the client side filtering (since it's now much easier to just shift-click an entire series, which was really the usecase for the previous filter).
2018-09-23Revamp and expand news handlingMagnus Hagander
A number of improvements and unifications for news: * News posts now get authors * Authors are from NewsPosterProfile:s, which will include a full name and an "urlname" * Authors can also be specified as "can post global", which should give rights to post on the global feed. Right now the global feed requires superuser access anwyay, but for the future... * News can now be posted at conference level as well as previous global only * Front page of website pulls in a combination of global news and conference news. Global news can be given a "high priority until" field that ensure it sits at the top of the frontpage until a certain date, so conference news can't push it off. * Each conference gets it's own RSS feed. This one is also available via JSON for an easy way to pull it into the conference site itself. * All links to posts in the conference feed goes to the conference homepage. It's really only designed for transient news. * Each user also gets it's own RSS feed. This is designed so that it can be submitted to an aggregator like Planet PostgreSQL which requires personal feeds. Conference specific news are automatically prefixed by conference name. * Each post can individually be toggled if it should be included in the RSS feed or not * Re-adds the news archive, with a paginated view * Each post can individually be toggled for inclusion in the news archive, so it's possible to create more transient news. News archive *only* contains news from the global feed, not the conference feeds. * Makes the "read more" button on the frontpage only show up if the entire news post did not fit
2018-09-07Fix imports of django urlresolvesVik Fearing
Importing from django.core.urlresolvers is deprecated in favor of django.urls.
2018-05-23Add support for token based access to admin informationMagnus Hagander
This adds a new object for each conference that is an AccessToken. This token can be given permissions to access specific types of data in a structured format, which can then be loaded using an URL with that token in it. Initially this exports a number of datasets that are useful to feed into a budget spreadsheet or similar, but the model and code is structured to make it easy to add completely different exports as well in the future.
2018-03-23Use selectable for registrator in /admin/Magnus Hagander
This was missed when the registrator field was added for multireg
2018-02-01Change ConferenceRegistration.payconfirmedat to timestamptzVik Fearing
2017-12-29Remove support for non-jinja based conference skinningMagnus Hagander
The jinja skinning is basically better in every aspect, and by removing support for the pre-jinja code we no longer have to maintain a whole lot of duplicated templates. In exchange for that we now have to maintain a duplicated base.html template :) Would be good to get that sorted at some point as well, but that's for later. This includes dropping the database columns holding the data from previous conferences, and it means we can get rid of the ugly setup with symlinks in the directory conference_templates.
2017-12-09Rewrite cross-conference email systemMagnus Hagander
This mainly adds two features: * Ability to opt-out of cross conference emails for attendees. Each outgoing email will include a link with a token which can be used to opt out, at which point only direct conference emails will be received. * A more flexible way to include who to send email to. This includes the ability to send to speakers (even those that were not registered, or those that were registered with a different email address). This can in the future be extended to also include things like specific additional options. To implement the opt-out feature, a new concept of a "Conference Series" has been added. This groups the conferences into series like "pgconfeu", "fosdem pgday" etc, and makes it possible to opt-out on the basis of an individual series. The series will be used for other things in the future as well, but for now it's only for opt-out. Of course it is also possible to opt-out globally. This adds a "speakertoken" field to all speakers to make it possible to link to these profiles without a login as well.
2017-11-02Attempt to implement concurrently safe adminMagnus Hagander
There is an issue with concurrent updates in django admin, in that the entire entry will be overwritten on save, even if some fields have been edited concurrently, say by a notification arriving or a cronjob or something like that. To avoid this issue, take a hash of all the values when generating a form and store it in a hidden field. When a form is submitted, compare this hash to the current values in the database, and if anything has changed raise a validation error. Makes no attempt to actually resolve the conflict, it only sets a global error on the form, and the user has to reload and start over, but it should prevent concurrent modification. Has worked in testing, but there are probably some cases where this will incorrectly reject an appropriate update. Let's hope it's not too many. There are also likely cases where it misses things, but we should be no worse off than before this patch.
2017-10-04Revert "Properly set debugging parameter in class"Magnus Hagander
Accidentally included part of unrelated development code :/ This reverts commit 93de76a0305fa582de2b9b9b7ab5ec8e6b8304a1.
2017-10-04Properly set debugging parameter in classMagnus Hagander
2017-10-04Implement volunteer schedule managementMagnus Hagander
This adds the concepts of VolunteerSlot and VolunteerAssignment. Each VolunteerSlot has a minimum and a maximum number of volunteers. Possible volunteers (listed in a new field on the conference itself) can sign up for specific slots they are interested in, which must then be confirmed by an admin (controlled by the admin field on the conference). Admins can also add volunteers to specific slots, which must then be confirmed by the volunteer. There is also a per-volunteer ical feed using a secret URL (this adds a regtoken field to all registrations, which is something we've already needed for some other things as well, so it'll be good to have regardless). No notifications are sent in this system, that's all intended to be manually handled by the volunteer manager, at least for now.
2017-08-18Fix previous commit by putting values in the correct classMagnus Hagander
2017-08-18Show more metadata in admin view of pending additional ordersMagnus Hagander
2017-01-20Add support for rendering badges using jinja/jsonMagnus Hagander
Instead of having to write badges as python code (with all the implications that had - such as not letting outsiders have access to them for security reasons), they can now be written in JSON using Jinja templates to insert replacement variables and write simpler logic. JSON based badges are loaded from badge.json in the directory containing the conference jinja templates. Images used are all loaded from the static directory in the same enforced structure. If Jinja templates are enabled for conference pages, they are automatically enabled for badges as well - there is no support for combining the two different ways in the same conference.
2017-01-20Add admin interface safeguard for jinjatemplatesMagnus Hagander
This ensures that you can't specify both jinja templates and django templates for the same conference, or break things by accidentally putting a space in the field for it.
2017-01-07Make speaker records searchable in /admin/Magnus Hagander
Requested by ads
2016-12-20Add some more fields in the conference overviewMagnus Hagander
Makes it easier to track down conferences where we forgot to close feedback for example.