Age | Commit message (Collapse) | Author |
|
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.
|
|
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".
|
|
This should never be manually changed, and can cause issues in saving
empty entries.
|
|
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
|
|
Just like for cfp and cfs, make it possible to specify an exact
timestamp when registration will open and close, if wanted.
|
|
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...
|
|
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
|
|
|
|
|
|
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.
|
|
We already excluded this in the normal admin area, but the superuser
django admin did not.
Fixes #9
|
|
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.
|
|
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.
|
|
Broken by update to python3, but clearly not used very often.
|
|
|
|
Mostly pep8-incompatible imports generated by 2to3, many of which
weren't used anyway. Also some indentation errors caused by 2to3.
|
|
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.
|
|
|
|
Sibling imports should be prefixed with a period. Good idea in py2, will
eventually become required in py3, so another small step.
|
|
Python 2.6 introduced the better syntax, Python 3 removes the old one,
so one small step towards py3.
|
|
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.
|
|
Only superusers should have access to /admin/django/ at this time, so no
need to carry this code around.
|
|
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.
|
|
Happy broken links everybody :) But these are links that should normally
not be used, so...
|
|
It has been deprecated, and instead we should use "in" and "not in", so
make that change across the board.
|
|
|
|
|
|
In passing remove some comments that were pointless
|
|
Mostly not important, but getting rid of the PIP warnings will help
catch errors in the future.
|
|
|
|
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.
|
|
In an effort to close up with PEP8, we should use spaces for indent
rather than tabs... Time to update your editor config!
|
|
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).
|
|
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
|
|
Importing from django.core.urlresolvers is deprecated in favor of django.urls.
|
|
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.
|
|
This was missed when the registrator field was added for multireg
|
|
|
|
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.
|
|
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.
|
|
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.
|
|
Accidentally included part of unrelated development code :/
This reverts commit 93de76a0305fa582de2b9b9b7ab5ec8e6b8304a1.
|
|
|
|
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.
|
|
|
|
|
|
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.
|
|
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.
|
|
Requested by ads
|
|
Makes it easier to track down conferences where we forgot to close
feedback for example.
|