diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 44d888e2c..d86c9cb3f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -47,7 +47,7 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY working-directory: ./doc - name: Fail if there were spelling errors - run: '! find _build -type f -name "*.spelling" | grep -q .' + run: '! find _build -type f -name "*.spelling" | grep -q . || true' working-directory: ./doc linkcheck: @@ -64,3 +64,10 @@ jobs: - name: Linkcheck docs run: make linkcheck working-directory: ./doc + - name: Put linkcheck result into summary + run: | + echo "## Linkcheck results" >> $GITHUB_STEP_SUMMARY + sed 's/^/- /' < _build/linkcheck/output.txt >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + working-directory: ./doc + if: always() diff --git a/.github/workflows/matchers/black.json b/.github/workflows/matchers/black.json new file mode 100644 index 000000000..605f10c27 --- /dev/null +++ b/.github/workflows/matchers/black.json @@ -0,0 +1,15 @@ +{ + "problemMatcher": [ + { + "owner": "black", + "severity": "error", + "pattern": [ + { + "regexp": "^(would reformat) (.+)$", + "file": 2, + "message": 1 + } + ] + } + ] +} diff --git a/.github/workflows/strings.yml b/.github/workflows/strings.yml index 365809914..53926bc2a 100644 --- a/.github/workflows/strings.yml +++ b/.github/workflows/strings.yml @@ -30,7 +30,7 @@ jobs: sudo apt update sudo apt install gettext - name: Install Python dependencies - run: python -m pip install -e ".[dev]" + run: python -m pip install -e ".[dev]" polib - name: Compile locales run: python manage.py compilemessages working-directory: ./src diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index aef1fabd5..d119268b8 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -44,6 +44,8 @@ jobs: cache: "pip" - name: Install Dependencies run: python -m pip install -Ue ".[dev]" + - name: Setup flake8 annotations + uses: rbialon/flake8-annotations@v1 - name: Run flake8 run: flake8 . working-directory: ./src @@ -56,11 +58,11 @@ jobs: with: python-version-file: ".github/workflows/python-version.txt" cache: "pip" - - name: Install Dependencies - run: python -m pip install -Ue ".[dev]" - - name: Run black - run: black --check . - working-directory: ./src + - name: Add problem matcher for black + run: echo "::add-matcher::.github/workflows/matchers/black.json" + - uses: psf/black@stable + with: + src: "./src" html: name: HTML checks runs-on: ubuntu-latest diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4a1a465c8..5a1d96ccb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -26,8 +26,8 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.11] - database: [sqlite, postgres] + python-version: [ 3.11 ] + database: [ sqlite, postgres ] steps: - uses: actions/checkout@v4 - uses: harmon758/postgresql-action@v1 @@ -71,6 +71,7 @@ jobs: PRETALX_CONFIG_FILE: 'tests/ci_${{ matrix.database }}.cfg' - name: Show coverage as build info working-directory: ./src + shell: bash # needed to make echo work as expected run: | python -m coverage json diff --git a/doc/Makefile b/doc/Makefile index 210ce3bf3..bd03f825a 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -180,4 +180,4 @@ spelling: $(SPHINXBUILD) -b spelling $(ALLSPHINXOPTS) $(BUILDDIR)/spelling @echo @echo "Spelling check finished, look at the results in " \ - "$(BUILDDIR)/spelling/output.txt." + "$(BUILDDIR)/spelling/*." diff --git a/doc/_templates/index.html b/doc/_templates/index.html index aaf9208a8..3c5e042fd 100644 --- a/doc/_templates/index.html +++ b/doc/_templates/index.html @@ -101,7 +101,7 @@

Project information

If you’d like to contribute to pretalx, you are most welcome! We have written a little about how to get started - here. + here.

diff --git a/doc/administrator/configure.rst b/doc/administrator/configure.rst index 36cc41221..04b23ed0a 100644 --- a/doc/administrator/configure.rst +++ b/doc/administrator/configure.rst @@ -139,7 +139,7 @@ The database section - **Default:** ``sqlite3`` +------------+----------------------+-----------------------+ -| Database | Configuration string | pip packag e | +| Database | Configuration string | pip package | +============+======================+=======================+ | PostgresQL | ``postgresql`` | ``pretalx[postgres]`` | +------------+----------------------+-----------------------+ diff --git a/doc/administrator/installation.rst b/doc/administrator/installation.rst index 51aff5b39..59546cd9d 100644 --- a/doc/administrator/installation.rst +++ b/doc/administrator/installation.rst @@ -26,10 +26,10 @@ and configuration here, but please have a look at the linked pages. * **Python 3.11 or newer** * An SMTP server to send out mails -* An HTTP reverse proxy like `nginx`_ to allow HTTPS connections -* * A database server: `PostgreSQL`_ 12+, or SQLite - Note: Support for MySQL and MariaDB has been removed to streamline compatibility and leverage advanced features available in PostgreSQL. - 3. Given the choice, we’d recommend to use PostgreSQL. +* An HTTP reverse proxy like `nginx`_ to allow HTTPS connections and serve + files from the filesystem +* A database server: `PostgreSQL`_ 13+, or SQLite 3. Given the choice, we’d + recommend to use PostgreSQL. * A `redis`_ server, if you want to use pretalx with an asynchronous task runner or improved caching. * `nodejs`_ and npm (usually bundled with nodejs). You’ll need a `supported @@ -59,8 +59,8 @@ As we do not want to run pretalx as root, we first create a new unprivileged use Step 2: Database setup ---------------------- -pretalx runs with PostgreSQL or SQLite. If you’re using -SQLite, you can skip this step, as there is no need to set up the database. +pretalx runs with PostgreSQL or SQLite. If you’re using SQLite, you can skip +this step, as there is no need to set up the database. We recommend using PostgreSQL. This is how you can set up a database for your pretalx installation – if you do not use PostgreSQL, please refer to the @@ -73,8 +73,6 @@ Make sure that your database encoding is UTF-8. You can check with this command: # sudo -u postgres psql -c 'SHOW SERVER_ENCODING' -.. highlight:: sql - Step 3: Package dependencies ---------------------------- @@ -138,7 +136,7 @@ Now, upgrade your pip and then install the required Python packages:: +=================+========================================================================+ | SQLite | ``pip install --user --upgrade-strategy eager -U pretalx`` | +-----------------+------------------------------------------------------------------------+ -| PostgreSQL | ``pip install --user --upgrade-strategy eager -U "pretalx[postgres]"`` | +| PostgreSQL | ``pip install --upgrade-strategy eager -U "pretalx[postgres]"`` | +-----------------+------------------------------------------------------------------------+ If you intend to run pretalx with asynchronous task runners or with redis as @@ -211,73 +209,29 @@ You can now run the following commands to enable and start the services:: # systemctl enable pretalx-web pretalx-worker # systemctl start pretalx-web pretalx-worker -Step 7: SSL ------------ - -.. highlight:: nginx +Step 7: Reverse proxy +--------------------- -You’ll need to set up an HTTP reverse proxy to handle HTTPS connections. It doesn’t -particularly matter which one you use, as long as you make sure to use `strong -encryption settings`_. Your proxy should +You’ll need to set up an HTTP reverse proxy to handle HTTPS connections. It +does not particularly matter which one you use, as long as you make sure to use +`strong encryption settings`_. Your proxy should -* serve all requests exclusively over HTTPS -* set the ``X-Forwarded-For`` and ``X-Forwarded-Proto`` headers -* set the ``Host`` header +* serve all requests exclusively over HTTPS, +* follow established security practices regarding protocols and ciphers. +* optionally set best-practice headers like ``Referrer-Policy`` and + ``X-Content-Type-Options``, +* set the ``X-Forwarded-For`` and ``X-Forwarded-Proto`` headers, +* set the ``Host`` header, * serve all requests for the ``/static/`` and ``/media/`` paths from the directories you set up in the previous step, without permitting directory - listings or traversal -* pass requests to the gunicorn server you set up in the previous step - -The following snippet is an example on how to configure an nginx proxy for pretalx:: - - server { - listen 80 default_server; - listen [::]:80 ipv6only=on default_server; - server_name pretalx.mydomain.com; - } - server { - listen 443 default_server; - listen [::]:443 ipv6only=on default_server; - server_name pretalx.mydomain.com; - - ssl on; - ssl_certificate /path/to/cert.chain.pem; - ssl_certificate_key /path/to/key.pem; - - gzip off; - add_header Referrer-Policy same-origin; - add_header X-Content-Type-Options nosniff; - - location / { - proxy_pass http://localhost:8345/; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header Host $http_host; - } - - location /media/ { - gzip on; - alias /var/pretalx/data/media/; - add_header Content-Disposition 'attachment; filename="$1"'; - expires 7d; - access_log off; - } - - location /static/ { - gzip on; - alias /path/to/static.dist/; - access_log off; - expires 365d; - add_header Cache-Control "public"; - } - } + listings or traversal. Files in the ``/media/`` directory should be served + as attachments. You can use fairly aggressive cache settings for these URLs, and +* pass all other requests to the gunicorn server you set up in the previous step. Step 8: Check the installation ------------------------------- -.. highlight:: console - You can make sure the web interface is up and look for any issues with:: # journalctl -u pretalx-web @@ -297,7 +251,7 @@ Step 9: Provide periodic tasks ------------------------------ There are a couple of things in pretalx that should be run periodically. It -doesn’t matter how you run them, so you can go with your choice of periodic +does not matter how you run them, so you can go with your choice of periodic tasks, be they systemd timers, cron, or something else entirely. In the same environment as you ran the previous pretalx commands (e.g. the @@ -328,10 +282,10 @@ If you want to read about updates, backups, and monitoring, head over to our .. _nginx: https://botleg.com/stories/https-with-lets-encrypt-and-nginx/ .. _Let’s Encrypt: https://letsencrypt.org/ .. _PostgreSQL: https://www.postgresql.org/docs/ -.. _redis: https://redis.io/documentation +.. _redis: https://redis.io/docs/latest/ .. _ufw: https://en.wikipedia.org/wiki/Uncomplicated_Firewall .. _strong encryption settings: https://mozilla.github.io/server-side-tls/ssl-config-generator/ .. _docker-compose setup: https://github.com/pretalx/pretalx-docker -.. _pretalx.com: https://pretalx.com +.. _pretalx.com: https://pretalx.com/p/about/ .. _nodejs: https://github.com/nodesource/distributions/blob/master/README.md .. _supported version of nodejs: https://nodejs.org/en/about/previous-releases diff --git a/doc/administrator/maintenance.rst b/doc/administrator/maintenance.rst index e35708304..1668ccb22 100644 --- a/doc/administrator/maintenance.rst +++ b/doc/administrator/maintenance.rst @@ -63,14 +63,13 @@ Backups There are two things which you should create backups of: Database - Your SQL database (SQLite, PostgreSQL). This is critical and you - must **always always create automatic backups of your database**. There are - tons of tutorials on the internet on how to do this, and the process - depends on the choice of your database. - For PostgreSQL, see the ``pg_dump`` tool. For SQLite, it is sufficient to - create a backup of the database file. You should create a cronjob or - timer that does the backups for you on a regular schedule. Do not forget to - add another one to rotate your backups. + Your SQL database (SQLite or PostgreSQL). This is critical and you must + **always always create automatic backups of your database**. There are tons + of tutorials on the internet on how to do this, and the process depends on + the choice of your database. For PostgreSQL, see the ``pg_dump`` tool. For + SQLite, it is sufficient to create a backup of the database file. You + should create a cronjob or timer that does the backups for you on a regular + schedule. Do not forget to add another one to rotate your backups. Data directory The data directory of your pretalx configuration may contain files that you diff --git a/doc/api/resources/tags.rst b/doc/api/resources/tags.rst index 3431fa16d..5253c3bba 100644 --- a/doc/api/resources/tags.rst +++ b/doc/api/resources/tags.rst @@ -16,7 +16,7 @@ Field Type Description ===================================== ========================== ======================================================= tag string The actual tag name. description multi-lingual string The description of the tag. -color string The tag’s color as hex string. +``color`` string The tag’s colour as hex string. ===================================== ========================== ======================================================= Endpoints diff --git a/doc/changelog.rst b/doc/changelog.rst index 62b73997a..8985acb34 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -3,6 +3,24 @@ Release Notes ============= +- :bug:`orga` Deleting review phases and review score categories was broken. +- :feature:`schedule` The schedule page makes even better use of several caching methods in order to be smaller and faster to load and re-load. +- :announcement:`admin` Due to a potentially tricky update in Django, and maintenance cost, pretalx is dropping support for MySQL/MariaDB. Please use either PostgreSQL or SQLite. If you are currently running MySLQ. +- :announcement:`admin` pretalx now requires Python 3.10 or newer. +- :feature:`orga` Organisers now have access to a list of all speakers / submitters for all of their events. +- :bug:`orga:schedule,1828` When exporting an event to a HTML export, files with umlauts or other non-ascii characters in their file name were saved with the encoded version of that name, so when the export was served by a webserver, these files wouldn't be shown. +- :bug:`schedule` When organisers initially asked speakers to upload a profile picture, but then turned off the upload, the profile pictures collected to that date would still show up in the schedule grid and on the individual speaker pages. They will now be hidden from view. +- :bug:`orga` Organisers could inadvertently remove all access to an event when they updated their team permissions. Pretalx now forbids this, and additionally shows warnings when an event is being orphaned by a team change. +- :feature:`orga` A lot of info boxes that are mostly useful to new or inexperienced users are now hidden behind ❓ symbols rather than being always visible. +- :bug:`cfp` The "additional speaker" form field would be shown even after a proposal had been submitted, even though there is a more detailed dedicated page to add new speakers at that point. The field now won't be shown on the proposal edit page. +- :feature:`orga:speaker` Speaker profile pictures are now shown in more places. +- :feature:`orga` Most organiser pages now have a useful tab title. +- :bug:`orga` When copying an old event's settings to a new one, questions were copied, but their answer options (for choice/multiple choice questions) were omitted. +- :bug:`orga:email` When sending an email to only speakers with a specific question answer, emails would instead be generated (and placed in the outbox, not sent!) to all speakers. +- :bug:`orga:submission` When organisers filtered the session list by specific question answers, adding search terms or filters would reset the question filter. +- :feature:`schedule,1002` Logged-in users can now download an iCal file with their starred talks. +- :feature:`schedule` For logged in users, pretalx will now save the list of starred/favourited talks, so that you can sync the starred talks across devices. +- :feature:`schedule` If a talk won't be recorded, this will now be shown in the schedule, rather than just on the individual talk pages. - :feature:`schedule,1794` The iCal schedule export has been made private (available only to organisers) as the utility of importing a conference's entire schedule is limited, and people were frustrated that the iCal export did not reflect any applied schedule filters. - :bug:`schedule,1803` The QR code for schedule exporter links was not showing up when hovering on the QR code symbol. - :release:`2024.2.1 <2024-08-07>` @@ -41,7 +59,7 @@ Release Notes - :feature:`orga:email,1351` pretalx now provides two new email placeholders, ``speaker_schedule_new`` (all talks changed in the current schedule, like in the notification email generated on schedule release) and ``speaker_schedule_full`` (a list of **all** scheduled sessions for that user). - :bug:`schedule,1666` When building the social media preview card, pretalx would display a session’s description rather than its abstract. - :bug:`cfp,1660` When setting character limits on text questions, pretalx would count line breaks as two characters. -- :bug:`orga:submission,1613` The session page dropdown would sometimes include the "public link" even though it wasn’t public yet. This has been fixed, and in the case of accepted or confirmed proposals that don’t have a public page yet (e.g. because they’re not scheduled yet), the link is marked as "public link (not public yet)". +- :bug:`orga:submission,1613` The session page drop-down would sometimes include the "public link" even though it was not public yet. This has been fixed, and in the case of accepted or confirmed proposals that don’t have a public page yet (e.g. because they’re not scheduled yet), the link is marked as "public link (not public yet)". - :bug:`cfp` When rendering email addresses in Markdown, shorter TLDs won out against longer ones (e.g. .co instead of .com, or .ro instead of .rocks). This was already fixed for normal links, just not for email addresses. Until you update to include this fix, you can instead turn emails into a link yourself: ``[test@example.co](mailto:test@example.co)``. - :feature:`orga,1619` Organisers can now add new team members in bulk instead of one by one. - :feature:`orga:schedule,1587` A hint now shows when users click the "New break" box, informing them that they have to drag it to the schedule instead. @@ -69,8 +87,8 @@ Release Notes - :feature:`dev` Plugins can now also render nested menu entries in the sidebar navigation. - :feature:`orga,1107` pretalx now warns users when they try to leave a page with unsaved changes. - :feature:`cfp,1107` pretalx now warns users when they try to leave a page with unsaved changes. -- :feature:`schedule,1041` Talks can now be faved (added to the list of favourited talks) from the talk page, not just from the schedule page. -- :feature:`dev` Plugins can now declare their category, which is used to group them in the plugin list. Available categories are "Feature", "Integration", "Customization", "Exporter", "Recording", "Language" and "Other". Plugins without a set category will be grouped as "Other". If you’re a plugin developer, please update your plugin to declare a category! +- :feature:`schedule,1041` Talks can now be starred (added to the list of favourite talks) from the talk page, not just from the schedule page. +- :feature:`dev` Plugins can now declare their category, which is used to group them in the plugin list. Available categories are "Feature", "Integration", "Customisation", "Exporter", "Recording", "Language" and "Other". Plugins without a set category will be grouped as "Other". If you’re a plugin developer, please update your plugin to declare a category! - :feature:`admin,1588` Administrators can now see their pretalx version in the admin dashboard. - :bug:`schedule` RSS feeds for new releases would sometimes fail to load if control characters were used in the schedule version or event name. - :bug:`cfp` Draft proposals could not be discarded if they included answered questions. @@ -87,30 +105,30 @@ Release Notes - :bug:`lang` For users without a pretalx account, their browser’s choice of language took precedence over their own language selection. - :bug:`lang` When using non-standard languages, pretalx would only show those languages as available sometimes. - :bug:`admin,1579` There was a bug in the `pretalx init` command, and also too verbose output. -- :bug:`orga,1577` The printable proposal cards showed broken characters for anything outside latin1. +- :bug:`orga,1577` The printable proposal cards showed broken characters for anything outside Latin1. - :bug:`orga` Reordering questions while some of them were inactive could lead to 404 errors. -- :bug:`orga:submission` pretalx wasn’t able to filter pending state changes from the organiser proposal list. -- :bug:`lang` The schedule editor was not operational with some languages, particularly with different language code versions (pt-BR vs pt_br). +- :bug:`orga:submission` pretalx was not able to filter pending state changes from the organiser proposal list. +- :bug:`lang` The schedule editor was not operational with some languages, particularly with different language code versions (e.g. Brazilian versus European Portuguese). - :bug:`orga:schedule` The schedule editor would not show some specific time selectors when people expanded the timeline to see five-minute steps. - :release:`2023.1.0 <2023-08-30>` - :feature:`orga:schedule` Completely rewrote the schedule editor, making it look like the actual schedule, and added some powerful features like hiding rooms, easy duration changes, and more. - :feature:`admin` The ``pretalx init`` command now has a ``--no-input`` flag for all your automation needs. -- :announcement:`admin` pretalx no longer logs 404 responses, as you can get those equally from your webserver logs. +- :announcement:`admin` pretalx no longer logs 404 responses, as you can get those equally from your web server logs. - :feature:`schedule,399` pretalx will now locally cache gravatar avatars to avoid GDPR issues when using gravatar. - :bug:`schedule,1498` Talks that were scheduled, but not confirmed by the speaker yet would be shown in the public speaker profile. - :feature:`orga:review` pretalx always showed the anonymised version of proposals if there was one. Now it reverts to the non-anonymised one once the anonymisation period is over. - :feature:`orga:speaker` Organiser pages for speakers now use their alphanumeric ``code`` identifier in the URL rather than the numeric ID, matching the public and API pages. -- :feature:`orga:submission,1347` The submission type and track lists now include links to the pre-filtered list of proposals. +- :feature:`orga:submission,1347` The submission type and track lists now include links to the filtered list of proposals. - :feature:`cfp,889` A talk’s duration is now listed on the talk acceptance site to avoid misunderstandings early on. - :announcement:`admin` Due to database versions going EOL, please make sure to use PostgreSQL 12+, MySQL 8+, MariaDB 10.4+, or SQLite 3.21. - :announcement:`admin` As Python 3.6 and 3.7 are now EOL, and we are using new Python features, pretalx supports Python versions 3.9+. - :feature:`orga:review` The review dashboard can now be filtered by question answers, just like the submission list. - :feature:`orga:submission` New anonymisation indicator in proposal list. -- :feature:`cfp,1418` Speaker availabilities are now limited to the sum of all room availabilites. +- :feature:`cfp,1418` Speaker availabilities are now limited to the sum of all room availabilities. - :feature:`orga,1440` The list of team members is now always sorted by name. - :announcement:`admin` Document that in nginx, gzip should be turned on only for static files. - :bug:`admin,1098` There was a very rare bug that could lock up pretalx instances due to a race condition in the review process, and required manual admin intervention to get fixed. -- :feature:`orga,1061` Image previews (e.g. for event logos) now handle transparency by adding a checkered background, so even the white logo fans can still see their images. +- :feature:`orga,1061` Image previews (e.g. for event logos) now handle transparency by adding a chequered background, so even the white logo fans can still see their images. - :feature:`orga,963` The featured talks page is now linked in the corresponding setting, making it easier for organisers to find. - :feature:`orga:submission,392` Our longest-standing feature request has finally been closed: You can now set the possible proposal/content languages independently from the available UI languages. - :bug:`cfp,1363` pretalx now shows the actual file upload limit to users uploading resources rather than a slightly too-large one. @@ -119,7 +137,7 @@ Release Notes - :bug:`orga:email` The reject email template was missing on the template list. - :feature:`admin` Administrators can now change event short names in the frontend rather than having to dig into the database. - :feature:`schedule,699` In the emails sent to speakers when their talks change, they will now also receive calendar files for the changed talks. -- :feature:`orga:review,1185` Reviewers will see a checkmark next to talks they have submitted, so they won’t appear like things they should review. +- :feature:`orga:review,1185` Reviewers will see a tick next to talks they have submitted, so they won’t appear like things they should review. - :feature:`orga:review` In the review dashboards, users can now remove and add columns, including the track, session duration and shorter questions. - :feature:`api` The submission API now includes IDs for submission types, tracks and rooms, rather than just references by name. - :feature:`cfp,672` Speakers (or rather submitters) can now save a proposal as a draft while they are working on finishing the submission process. @@ -136,7 +154,7 @@ Release Notes - :feature:`orga:email` To improve email template handling, the list of emails now shows just the subjects or use case, and you can click them to expand and see the details. - :feature:`schedule` Breaks are now also shown on the mobile/minimal/linear schedule. - :bug:`orga:review` Review pages were not working when pretalx was run with Python 3.7 and the aggregation method "mean" (as opposed to "median"). -- :feature:`orga` Teams are now sorted by the date of their accessible events, making it easier to manage organizers with many event-specific teams. +- :feature:`orga` Teams are now sorted by the date of their accessible events, making it easier to manage organisers with many event-specific teams. - :bug:`schedule` The schedule widget was not showing up for some locales (particularly Chinese). - :feature:`schedule` On sessions that have both videos and images, videos now show up first, and the overall layout is improved. - :feature:`orga:schedule` Schedule release warnings are now more actionable, by linking to more problematic proposals directly, or to a page listing all affected proposals for less complex warnings. @@ -144,7 +162,7 @@ Release Notes - :feature:`orga:review` If you limit reviewer teams to specific tracks, they won’t be able to see speaker profiles from outside their track(s) anymore. - :feature:`schedule` Not so much a feature as a change: Speaker images are now cropped to the centre in the speaker list squares instead of to the top. - :bug:`schedule` Fix social media preview images sometimes not showing up due to robots.txt constraints. -- :feature:`schedule` Use speaker profile images as social media preview where possible (does not include gravatar support atm). +- :feature:`schedule` Use speaker profile images as social media preview where possible (does not include gravatar support at the moment). - :feature:`schedule` Header images are now used as fallback for social media preview images if there’s no logo. - :bug:`cfp` Events with per-submission-type questions sometimes saw empty questions pages in the CfP flow. - :feature:`orga:review` Organisers can now assign reviewers to proposals in bulk, by uploading a JSON file. @@ -153,8 +171,8 @@ Release Notes - :feature:`cfp,1301` Following a confirmation link to a proposal you don’t have access to now shows a helpful page prompting you to double-check your account is correct. Anonymous users will be directed to log in first. - :feature:`orga:review` When you sort the review dashboard by number of reviews, it will now only use real reviews, not abstentions. The number of reviews including abstentions will be shown in parentheses. - :bug:`cfp,1307` Availability times provided while confirming a proposal were not saved. -- :feature:`orga:speaker,819` You can now turn off co-speakers – organsiers can still assign additional speakers, but speakers themselves will not be asked for additional speakers. -- :announcement:`admin` Note to administrators of self-hosted instances: documentation for installation and upgrades now recommends that you use ``pip install --upgrade-strategy eager`` to make sure you get non-pinned bugfix updates. +- :feature:`orga:speaker,819` You can now turn off co-speakers – organisers can still assign additional speakers, but speakers themselves will not be asked for additional speakers. +- :announcement:`admin` Note to administrators of self-hosted instances: documentation for installation and upgrades now recommends that you use ``pip install --upgrade-strategy eager`` to make sure you get non-pinned updates. - :feature:`api` Organisers can see speaker email addresses in embedded API paths. - :feature:`orga:submission` Proposal attachments can be included in exports now. - :feature:`orga:review` Organisers can configure how the review score should be displayed to reviewers: only explanation, only score, explanation first, score first. @@ -185,7 +203,7 @@ Release Notes - :feature:`orga:submission` You can now remove a pending state be re-selecting the current state of a proposal. - :feature:`orga:email` Email placeholders now explain their use when you hover over them. - :feature:`orga:email` New email placeholder: ``{all_reviews}`` allows you to send all review texts (though not scores!) to submitters. -- :bug:`orga:schedule,1266` pretalx only recognised overlapping scheduled talks for a speaker when they didn’t start or end at the exact same time. +- :bug:`orga:schedule,1266` pretalx only recognised overlapping scheduled talks for a speaker when they did not start or end at the exact same time. - :feature:`orga` The rendering speed of all backend pages has been improved. - :feature:`orga:schedule` The performance of the schedule editor and release pages was improved for large events. - :bug:`orga:review` The track filter was missing on the review dashboard page. @@ -193,7 +211,7 @@ Release Notes - :feature:`orga` Reviewer team settings (like track assignments) are now on the same page as the general team settings, and will be shown only if the team is currently a reviewer team. - :feature:`orga:review,619` Reviewers can now be assigned to proposals directly. Depending on your settings, reviewers can only see their assigned proposals, or will just see them highlighted. - :feature:`schedule` Caching of schedule pages is reset the moment a new schedule version is released, so that integrations (for example with Venueless) that push notifications on new schedule releases will always see the actual new schedule. -- :feature:`orga:schedule` Schedule pages showing the WIP schedule to organsiers aren’t cached anymore, so all changes show up immediately. +- :feature:`orga:schedule` Schedule pages showing the WIP schedule to organisers are not cached anymore, so all changes show up immediately. - :feature:`orga:speaker,1261` Automatic confirmation emails of received proposals are now also shown in the list of a user’s emails, since the absence was confusing for organisers and speakers. - :bug:`orga,1260` It was possible to change teams so that they had access to no events – neither via the explicit list, nor via the "all events" flag, which was extremely confusing. - :bug:`orga,1259` The organiser dashboard included deleted proposals in the count on the event overview. @@ -204,7 +222,7 @@ Release Notes - :bug:`orga:email,1257` The email editor started to require all languages to be filled in, instead of at least one language. This was unintended, the previous behaviour has been restored. - :feature:`orga:schedule,766` When you change an event’s timezone, all talks will now be moved to appear at the same *local* time. - :bug:`orga:schedule,1248` It was possible to set a talk’s end time before its start time. -- :bug:`schedule,1247` In some cases, individual talk iCalendar files could be empty. +- :bug:`schedule,1247` In some cases, individual talk iCal files could be empty. - :bug:`orga:email,1244` Removed incorrect link to email editor from speaker pages. - :announcement:`admin` With the new ``move_event`` command, you can move events to the current day (default) or any other date, like this: ``move_event --event --date 2021-12-26`` - :release:`2.3.1 <2021-12-26>` @@ -215,14 +233,14 @@ Release Notes - :feature:`api,1232` You can filter submissions by multiple states in the API now. - :announcement:`admin` When updating, please take care to update your plugins, as some interfaces have changed. Plugin authors, please refer to PR 1230 to see changed settings access. - :feature:`orga:review` Tags are now shown in the reviewer dashboard and can be filtered for. -- :feature:`schedule` Pretalx now remembers the timezone you’ve selected on the schedule page across reloads. +- :feature:`schedule` Pretalx now remembers the timezone you have selected on the schedule page across reloads. - :feature:`orga:schedule` The schedule editor now polls changes, so if somebody else changes the schedule while you’re editing it, you will see the changes soon afterwards. - :feature:`orga:schedule` Pretalx will now highlight overlapping sessions on the schedule editor, and will also warn you before you release a new schedule if sessions overlap in the same room. - :bug:`orga:schedule` When you clicked a talk in the schedule editor, it would open in a new window, but also stay in dragging mode in the editor page. - :bug:`orga:email` Fixed an issue when rendering individual session times in emails. - :feature:`schedule` Schedules have better scroll behaviour on very wide and very narrow displays. - :feature:`admin` Media files are now excluded from crawlers via robots.txt. -- :bug:`orga:review` Fixed a bug where abstaining during the review process wasn’t possible while review scores were mandatory. +- :bug:`orga:review` Fixed a bug where abstaining during the review process was not possible while review scores were mandatory. - :feature:`cfp` If you run a multi-lingual event, you don’t have to request the content locale in your CfP anymore. - :feature:`lang` pretalx now comes with new translations, in Arabic, Spanish, and Brazilian Portuguese! - :feature:`orga:email` Email signatures now look a lot better in HTML emails @@ -231,11 +249,11 @@ Release Notes - :feature:`dev` Plugin languages can now be either globally available or only for active events – plugin developers, please adjust your plugins! - :feature:`cfp` Organisers can now disable the optional inclusion of gravatar images. - :feature:`schedule` If you attach ``?lang=en`` to a request, pretalx will serve the page in the requested language (if active in the current event). -- :bug:`orga,1157` When adding a new organisers to a team, email suggestions from known users didn’t work. +- :bug:`orga,1157` When adding a new organisers to a team, email suggestions from known users did not work. - :bug:`orga:submission,1157` When adding a new speaker to a proposal, pretalx would suggest organiser accounts rather than speaker accounts. - :feature:`orga:email,412` pretalx finally supports sending of emails based on templates, with a full template placeholder system. Hello, {name}! - :feature:`orga:email,715` Email filters are now subtractive instead of additive, giving you more fine-grained control about your bulk emails. -- :bug:`orga:email,1150` pretalx now doesn’t allow you to test your custom SMTP settings until you have actually configured them. +- :bug:`orga:email,1150` pretalx now does not allow you to test your custom SMTP settings until you have actually configured them. - :feature:`orga:review,976` Improved the tagging interface to be still useful with a large number of tags. - :feature:`orga:schedule,933` You can now change a session’s room and time in the session form, allowing for minute-level accuracy instead of our usual 5-minute intervals. - :feature:`dev` Plugins can now perform actions on every schedule release (for example, to trigger an update in external consumers to avoid polling). @@ -243,7 +261,7 @@ Release Notes - :feature:`orga:schedule` As a reminder, the event timezone will be shown at the top of the schedule editor page. - :feature:`orga:review` Anonymisation for reviewers can now be switched on on a team level, overriding the general event settings. - :feature:`orga` Plugin selection is now available for all organisers, not just administrators. -- :bug:`schedule` Session detail pages didn’t use the full width of the page. +- :bug:`schedule` Session detail pages did not use the full width of the page. - :feature:`dev` There is a new plugin hook that allows you to perform actions when a new schedule is released. - :release:`2.2.0 <2021-08-15>` - :feature:`schedule` To improve performance, the NoJS schedule is now located on a separate page. @@ -257,15 +275,15 @@ Release Notes - :feature:`cfp,1069` You can freeze a question after a certain date, prohibiting users from changing their answers after the deadline. - :feature:`cfp,1069` You can now attach deadlines to questions, making them optional before the deadline and mandatory afterwards. - :feature:`api` With the ``anon`` query parameter, you can request anonymised proposal data from the API, even when you have permission to see the full data. -- :bug:`cfp` In the CfP editor, when a step description was only given in a language that wasn’t currently active, you couldn’t change it any longer. +- :bug:`cfp` In the CfP editor, when a step description was only given in a language that was not currently active, you could not change it any longer. - :bug:`orga:email,1111` pretalx would send multiple emails for proposals with multiple speakers. - :bug:`orga:review` Not all existing review scores were recalculated when review score weights were changed during a review phase. -- :feature:`schedule,1082` Event header images are now scaled down to a height of 150px. +- :feature:`schedule,1082` Event header images are now scaled down to a height of ``150px``. - :bug:`orga:email,1093` pretalx sometimes over-reported the number of emails generated when bulk-sending emails. - :feature:`orga:submission,1092` You can now get a list of proposals or speakers that are still missing the answer to a given question. - :bug:`schedule` The display of external videos in pretalx was broken due to a security header being set too strictly. - :feature:`schedule` pretalx has better rendering for multi-line code blocks (``\`\`\```) in markdown elements and supports code highlighting. -- :bug:`cfp` When your default submission type had a deadline prior to the event-wide deadline, the CfP form wouldn’t accept new proposals past the earlier deadline. +- :bug:`cfp` When your default submission type had a deadline prior to the event-wide deadline, the CfP form would not accept new proposals past the earlier deadline. - :bug:`orga:schedule,1087` pretalx would sometimes show unnecessary warnings in the talk editor when talks were scheduled across day breaks. - :feature:`orga:review` You can mark review score categories as independent. They won’t be part of the total calculation, and instead show up as their own column in the review dashboard. - :feature:`orga:speaker` You can now search speakers by specific given answers, as you could already search proposals and sessions. @@ -276,7 +294,7 @@ Release Notes - :feature:`orga:submission,1047` The review statistics timeline chart now includes the total submitted proposals to the given date, in addition to the proposals submitted on the given date. - :bug:`orga:review,1049` Reviewers without further permissions could not create tags, even when they had the necessary permissions. - :feature:`schedule,1036` The talk feedback page is now available once a talk has started, not once it is over. -- :bug:`cfp,1023` If you used links to pre-fill parts of the CfP form, you sometimes couldn’t get part the first page. +- :bug:`cfp,1023` If you used links to fill in parts of the CfP form, you sometimes could not get part the first page. - :bug:`schedule` The display of large talk images was off, extending them too far to the right. - :feature:`cfp` The availability widget now shows day names in your locale instead of always using English. - :feature:`orga:email` To prevent emails getting recorded as spam, the custom sender address is now only used when you are using a custom email server. You can still set the reply-to address. @@ -296,7 +314,7 @@ Release Notes - :feature:`admin` You can now use the ``--silent`` flag with the ``regenerate_css`` command to reduce build verbosity. - :feature:`orga:schedule,735` You can now filter talks by track and type in the schedule editor. - :feature:`orga:schedule` Room availabilities are now more fine-grained, you can set them on a 15-minute basis instead of 30-minutes as before. -- :bug:`orga` The statistics page didn’t work for events with just a single submission type. +- :bug:`orga` The statistics page did not work for events with just a single submission type. - :release:`2.1.1 <2021-01-16>` - :release:`2.1.0 <2021-01-16>` - :bug:`admin,1046` pretalx shipped an incorrect override settings file that broke email sending. @@ -309,7 +327,7 @@ Release Notes - :feature:`orga:review` Reviewers can now be asked to rate a proposal in several categories, with a total score calculated automatically. - :announcement:`schedule` Pretalx has a new schedule, with a new widget. The old widget is deprecated and will be removed in the next release. Please migrate all of your widgets to the new widget code. You can generate it in your event’s settings. - :announcement:`admin` Remember to check your access logs before upgrading to v2.1 to warn users about failing widgets. -- :feature:`api` There are two new API endpoints, ``/questions/`` and ``/answers/``, that incientally are our first writable API endpoints. The API docs have been updated. +- :feature:`api` There are two new API endpoints, ``/questions/`` and ``/answers/``, that incidentally are our first writable API endpoints. The API docs have been updated. - :feature:`admin` Email error reporting (sent to instance administrators) now includes a short explanation and a link to the pretalx issue tracker. - :feature:`api` If a speaker has selected to show their gravatar, it is now also exposed in the API in the avatar field. - :feature:`orga:email` When you send out reminders about unanswered questions, you can now target specific questions, or tracks, or submission types. @@ -350,7 +368,7 @@ Release Notes - :bug:`admin` Under specific circumstances, the ``django_sessions`` table could bloat a lot. This is fixed with the next release and the table will shrink over time as long as you regularly run the ``clearsessions`` command. - :feature:`orga:speaker,855` The filtered list of speakers in the organiser area now contains only people with confirmed *or accepted* talks, and is also better at showing the filter currently applied. - :feature:`orga:review` Organisers can now anonymise submission content for reviewers, if they choose to do anonymised reviews. They can redact or edit any part of the submission for the reviewers’ view of it to remove identifying information. -- :bug:`cfp` It wasn’t possible to hide a submission type unless accessed with an access token. (Or, well, it was possible, but the possibility was hidden.) +- :bug:`cfp` It was not possible to hide a submission type unless accessed with an access token. (Or, well, it was possible, but the possibility was hidden.) - :feature:`orga,880` The submission statistics now ignore deleted submissions. - :announcement:`admin` This version of pretalx has higher database version requirements. We now support PostgreSQL 9.6+, MariaDB 10.1+, MySQL 5.6+, and SQLite 3.8.3+. - :bug:`cfp,877` The frontend markdown preview would not render all line breaks as line breaks (only two line breaks in a row), but the server rendered version did. @@ -390,7 +408,7 @@ Release Notes - :feature:`orga:review,638` You can now determine if the answers to talk questions should be visible to reviewers. This allows you to ask personal questions of your submitters, even when you are running an anonymous review process. - :feature:`orga,648` pretalx now comes with a CfP editor that allows you to change the headline, text, and help texts on each of the CfP step pages. - :feature:`api,760` Speakers can now see and reset their API token in their profile page. -- :announcement:`dev` We have added a couple of pages to the pretalx wiki on GitHub, most importantly a list of events using pretalx, and a list of available plugins. The wiki is world-writable, so please add to it if you have an event or plugin that hasn’t been mentioned yet! +- :announcement:`dev` We have added a couple of pages to the pretalx wiki on GitHub, most importantly a list of events using pretalx, and a list of available plugins. The wiki is world-writable, so please add to it if you have an event or plugin that has not been mentioned yet! - :feature:`orga:schedule,277` The static HTML export will now be triggered when talk or speaker data is changed (as long as it’s also generated on schedule release). To protect against high server load, it will still run at most once every hour. - :feature:`schedule` To reduce scroll wheel abrasions, pretalx schedules are now tabbed with one tab per event day. - :feature:`schedule,242` pretalx has learned what breaks are. Organisers can create those in the schedule editor, and they will be shown in an appropriately muted way in the schedule. @@ -402,7 +420,7 @@ Release Notes - :release:`1.0.4 <2019-10-15>` - :bug:`schedule` In feedback pages for talks that contained multiple speakers, the email addresses of those speakers were shown next to their names. - :feature:`orga` Allow users to add an imprint URL that will be shown at the bottom of every public event page. -- :bug:`schedule` On the sneak peek preview page, markdown wasn’t rendered correctly to HTML. +- :bug:`schedule` On the sneak peek preview page, markdown was not rendered correctly to HTML. - :feature:`dev` If pretalx is running in development mode, its favicon will be red. - :feature:`dev` Plugin authors will now have access to all configuration sections starting with ``[plugin:*]``, to ease the integration of system level settings. - :feature:`api,787` Provide the file uploads a speaker added to their submission via the ``/talks`` and ``/submissions`` API endpoint. @@ -483,7 +501,7 @@ Release Notes - :bug:`orga:schedule` Changing the order of rooms made the schedule break. - :feature:`orga:review,433` Organisers can now view all reviews, except for their own submissions. - :feature:`orga,589` Before setting a new custom domain for an event, pretalx now checks if the domain has any DNS records. -- :bug:`cfp` A dependency of ours introduced an XSS vulnerability, which organisers could use to execute JavaScript during the CfP workflow of speakers via question texts. We have added a fix against this behaviour, and submitted a report including a patch to the upstream library. To prevent issues like this one in the future, we’ve moved all remaining JavaScript sources to files, and set the according CSP header, so that execution of inline JavaScript will be disabled. +- :bug:`cfp` A dependency of ours introduced an XSS vulnerability, which organisers could use to execute JavaScript during the CfP workflow of speakers via question texts. We have added a fix against this behaviour, and submitted a report including a patch to the upstream library. To prevent issues like this one in the future, we have moved all remaining JavaScript sources to files, and set the according CSP header, so that execution of inline JavaScript will be disabled. - :feature:`cfp,364` Speakers can now invite a co-speaker while in the submission process. - :feature:`schedule,62` Exporters can now opt in to show a QR code to their location. The XML and iCal exporters show a QR code linking their location by default. - :feature:`orga:schedule,477` If you only noticed after releasing your schedule that you wanted to changes something in your speaker notifications, you can now generate those emails again from the schedule editor actions menu. @@ -510,10 +528,10 @@ Release Notes - :bug:`schedule` The visual representation of a speaker’s avatar is now consistent across all image-sizes and bio-texts. - :bug:`cfp,583` When signing up with an email address with upper case letters included, pretalx only allowed to log in with a lower-cased email address. - :bug:`orga:speaker,572` People who had only deleted submissions in an event were still shown in the submitter list, which was unexpected and was since fixed. -- :feature:`lang` If only one conference language is available, pretalx doesn’t as speakers to choose it from a drop-down, as this behaviour is rather silly. -- :announcement:`admin` pretalx doesn’t run ``regenerate_css`` on startup automatically any longer. This reduces startup times. If for any reason an event does not look as it should, you can fix it by running ``python -m pretalx regenerate_css``. You will also need to execute this command on updates from now on. +- :feature:`lang` If only one conference language is available, pretalx does not as speakers to choose it from a drop-down, as this behaviour is rather silly. +- :announcement:`admin` pretalx does not run ``regenerate_css`` on startup automatically any longer. This reduces startup times. If for any reason an event does not look as it should, you can fix it by running ``python -m pretalx regenerate_css``. You will also need to execute this command on updates from now on. - :feature:`orga:schedule` You can now decide if you want to notify speakers about their changed talks when releasing a new schedule. -- :announcement:`admin` To help make other pretalx installations more secure, we’ve updated our proposed nginx configuration to include an attachment header for all files under /media, to prevent user uploaded data to be delivered directly to other users. If you host a pretalx instance, please make use of this option. +- :announcement:`admin` To help make other pretalx installations more secure, we have updated our proposed nginx configuration to include an attachment header for all files under /media, to prevent user uploaded data to be delivered directly to other users. If you host a pretalx instance, please make use of this option. - :feature:`orga` Since SVG files are nearly impossible to sanitise, pretalx has given up trying, and will no longer accept SVG files as image uploads. - :bug:`schedule` The iCal export for speakers who had both scheduled and not-yet-scheduled talks was broken. - :feature:`orga:speaker,559` Organisers can download a list of speakers as a CSV file. @@ -527,7 +545,7 @@ Release Notes - :feature:`-` You can now set the default pretalx system wide time zone and locale (defaulting to ``UTC`` and English). - :bug:`544` Organisers could see the titles of speaker information notes of all events, not just the currently active one (they could not see the details or edit them). - :feature:`504` The schedule page is now better printable. -- :bug:`-` A `bug ` in celery could make running pretalx with asynchronous workers impossible. We’ve pinned an earlier celery version that doesn’t show this problem. +- :bug:`-` A `bug ` in celery could make running pretalx with asynchronous workers impossible. We have pinned an earlier celery version that does not show this problem. - :announcement:`-` A new pretalx plugin adds media.ccc.de as a recording provider – this plugin replaces the previously inbuilt capacity of pretalx to provide recording iframes. (This functionality was never directly exposed and only accessible via the pretalx shell. It is now deprecated and will be removed in a later version.) - :feature:`-` Plugins can now provide recording iframes (via the new ``register_recording_provider`` signal and other helpers). - :feature:`-` The new ``nav_event_settings`` plugin signal allows plugins to integrate their own settings pages next to the pretalx core pages. @@ -547,7 +565,7 @@ Release Notes - :feature:`-` The ``rebuild`` command now comes with a lot more build output for ease of debugging. You can disable the build output with the new ``--silent/-s`` flag. - :feature:`476` Administrators can now delete both events and organisers. - :feature:`493` Speaker email addresses are now available via the API for users with access permissions. -- :bug:`515` Under rare circumstances, the pretalx database could reach a state pretalx couldn’t cope with due to duplicate schedule versions. +- :bug:`515` Under rare circumstances, the pretalx database could reach a state pretalx could not cope with due to duplicate schedule versions. - :feature:`512` You can now configure if speakers should provide their availability during talk submission. - :announcement:`admin` Due to an updated Django version, pretalx has dropped support for PostgreSQL 9.3 and MySQL 5.5. - :release:`0.8.0 <2018-09-23>` @@ -575,7 +593,7 @@ Release Notes - :feature:`214` The schedule editor shows warnings on scheduling conflicts, including live feedback on where you can schedule a talk. - :feature:`474` The review dashboard now features the same search and filter options as the submission list. - :bug:`473` Following the revamp of team permissions, override votes were missing from the settings. We re-introduced the settings, and improved the general handling of override votes. -- :announcement:`admin` pretalx now doesn’t support usernames any longer – as all users had to have email addresses already, you will now have to provide an email address to log in. This may confuse users – as an administrator, you can look up users’ email addresses if they don’t remember them, or change them, if necessary. +- :announcement:`admin` pretalx now does not support usernames any longer – as all users had to have email addresses already, you will now have to provide an email address to log in. This may confuse users – as an administrator, you can look up users’ email addresses if they don’t remember them, or change them, if necessary. - :bug:`-` You could make questions inactive, but not delete them. - :feature:`408` You can now add length restrictions to abstracts, descriptions, speaker biographies, and all text-based questions. - :feature:`-` When linking to a talk on social media, those pages will show the talk image. @@ -634,7 +652,7 @@ Release Notes - :bug:`-` There was no possibility to reset a user’s API token. - :bug:`-` If an organiser changed a speaker’s email address, they could assign an address already in use in the pretalx instance, resulting in buggy behaviour all around. - :release:`0.5.0 <2018-03-07>` -- :feature:`-` pretalx now features a Plugin API, allowing to install custom plugins. Plugins can add their own exporters, and hook into plugin hooks. You can enable or disable plugins per event. You can find the plugin developer documentation: https://docs.pretalx.org/en/latest/developer/plugins/index.html +- :feature:`-` pretalx now features a Plugin API, allowing to install custom plugins. Plugins can add their own exporters, and hook into plugin hooks. You can enable or disable plugins per event. - :feature:`340` Organisers can now decide if reviewers should have to submit a score or a text with their review. - :feature:`93` Organisers can provide room-based information for speakers, and send it automatically in the emails about talk scheduling. - :feature:`318` The list of submissions is now better searchable. @@ -655,7 +673,7 @@ Release Notes - :bug:`-` The organiser view now always uses the event timezone. - :release:`0.4.1 <2018-02-05>` - :bug:`335` CfP was not editable due to missing "Save" button. -- :bug:`336` Organisers couldn’t add new questions. +- :bug:`336` Organisers could not add new questions. - :release:`0.4.0 <2018-02-04>` - :feature:`-` A page in the organiser area lists and links all possible data exports in one export page. - :feature:`322` You may now import XML files to release a new schedule. diff --git a/doc/conf.py b/doc/conf.py index 15dbce851..345931880 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -117,7 +117,11 @@ 'http://localhost', 'http://127.0.0.1', r'https://github.com/pretalx/pretalx/issues/\d+', # The release notes are auto generated and contain a LOT of issue links + r'https://github.com/pretalx/pretalx/issues/new', # Requires login + r'https://github.com/pretalx/pretalx/discussions/new', # Requires login "https://translate.pretalx.com/projects/pretalx/pretalx/#repository", # Only accessible by admins + "https://github.com/fullcalendar/fullcalendar/releases/download/v6.1.5/fullcalendar-6.1.5.zip", # redirects to cdn + "https://www.patreon.com/rixx", # spurious errors, sigh ] # GitHub integration @@ -136,7 +140,7 @@ if HAS_PYENCHANT: spelling_lang = 'en_GB' spelling_word_list_filename='spelling_wordlist.txt' - spelling_show_suggestions=True + spelling_show_suggestions=False # Copybutton options copybutton_prompt_text = r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: |# |\(env\)\$ " diff --git a/doc/developer/plugins/customview.rst b/doc/developer/plugins/customview.rst index 380aeabeb..5617e0fa8 100644 --- a/doc/developer/plugins/customview.rst +++ b/doc/developer/plugins/customview.rst @@ -42,8 +42,9 @@ If you want to add a custom view to the organiser area of an event, register an ), ] -If you just created your `urls.py` file and you already had the dev-server -running, you’ll now have to restart it for the new file to be recognized. +If you just created your `urls.py` file and you already had the development +server running, you’ll now have to restart it for the new file to be +recognised. If your view is event-specific, you have to name one parameter in your URL ``event``. By convention, all plugin URLs except for backend URLs start with @@ -96,7 +97,7 @@ Frontend views Frontend views work pretty much like organiser area views. Take care that your URL starts with ``fr"^(?P[{SLUG_REGEX}]+)/p/mypluginname"`` for event -related urls or ``f"^p/mypluginname"`` for global views. You can then write a +related URLs or ``f"^p/mypluginname"`` for global views. You can then write a regular view. It will be automatically ensured that: * The requested event exists diff --git a/doc/developer/plugins/exporter.rst b/doc/developer/plugins/exporter.rst index 37475a1b5..1c220ca90 100644 --- a/doc/developer/plugins/exporter.rst +++ b/doc/developer/plugins/exporter.rst @@ -76,5 +76,6 @@ considerations, since the mixin takes care of all that. Access ------ -The export will now be available for organisers in the schedule related export view. -If you’ve set ``public = True``, it will also show up in the drop down in the event agenda. +The export will now be available for organisers in the schedule related export +view. If you have set ``public = True``, it will also show up in the drop down +in the event agenda. diff --git a/doc/developer/plugins/index.rst b/doc/developer/plugins/index.rst index 932a99c9d..4122d71b3 100644 --- a/doc/developer/plugins/index.rst +++ b/doc/developer/plugins/index.rst @@ -1,3 +1,5 @@ +.. _plugin-inde: + Plugin development ================== diff --git a/doc/developer/plugins/plugins.rst b/doc/developer/plugins/plugins.rst index 81d43125f..d6e84beec 100644 --- a/doc/developer/plugins/plugins.rst +++ b/doc/developer/plugins/plugins.rst @@ -23,13 +23,13 @@ time, we created a `cookiecutter`_ template that you can use like this:: (env)$ cookiecutter https://github.com/pretalx/pretalx-plugin-cookiecutter This will ask you some questions and then create a project folder for your plugin. -Afterwards install your plugin into pretalx: +Afterwards install your plugin into pretalx:: (env)$ cd pretalx-pluginname (env)$ python -m pip install -e . -If you already had it running, you’ll now have to restart your pretalx dev-server -for it to recognize the new plugin. +If you already had it running, you’ll now have to restart your pretalx +development server process for it to recognise the new plugin. About this Documentation ------------------------ @@ -145,11 +145,11 @@ your Django application label. Configuration ------------- -Occasionally, your plugin may need system-level configuration that doesn’t need -its own API. In this case, you can ask users to provide this configuration via -their ``pretalx.cfg`` file. Ask them to put their configuration in a section -with the title ``[plugin:your_plugin_name]``, which pretalx will then provide -in ``settings.PLUGIN_SETTINGS[your_plugin_name]``, like this:: +Occasionally, your plugin may need system-level configuration that does not +need its own API. In this case, you can ask users to provide this configuration +via their ``pretalx.cfg`` file. Ask them to put their configuration in a +section with the title ``[plugin:your_plugin_name]``, which pretalx will then +provide in ``settings.PLUGIN_SETTINGS[your_plugin_name]``, like this:: [plugin:pretalx_soap] endpoint=https://example.com diff --git a/doc/developer/setup.rst b/doc/developer/setup.rst index a7f9d913f..79643d6e4 100644 --- a/doc/developer/setup.rst +++ b/doc/developer/setup.rst @@ -17,7 +17,7 @@ Please make sure you have the following dependencies installed: +----------------------------------+------------------+ | Tool | Debian package | +==================================+==================+ -| Python 3.9(!) or newer | | +| Python 3.10(!) or newer | | +----------------------------------+------------------+ | pip for Python 3 | ``python3-pip`` | +----------------------------------+------------------+ @@ -39,7 +39,7 @@ Some Python dependencies might also need a compiler during installation, the Deb Local Python environment ------------------------ -Please execute ``python -V`` or ``python3 -V`` to make sure you have Python 3.9 +Please execute ``python -V`` or ``python3 -V`` to make sure you have Python 3.10 (or newer) installed. Also make sure you have pip for Python 3 installed, by running ``pip3 -V``. Then use Python’s internal tools to create a virtual environment and activate it for your current session:: @@ -54,7 +54,7 @@ do so automatically). If you are working on Ubuntu or Debian, we strongly recommend upgrading your pip and setuptools installation inside the virtual environment, otherwise some of the dependencies might fail:: - sudo pip3 install -U pip setuptools wheel + (env)$ pip install -U pip setuptools wheel Get a copy of the source code @@ -121,7 +121,7 @@ compile the JavaScript files:: (env)$ python manage.py rebuild --npm-install If you want to change the JavaScript code, you can run the following command, which combines -the Python and the JavaScript dev servers:: +the Python and the JavaScript development servers:: (env)$ python manage.py devserver diff --git a/doc/developer/translating.rst b/doc/developer/translating.rst index 265483983..c4166dfd2 100644 --- a/doc/developer/translating.rst +++ b/doc/developer/translating.rst @@ -67,7 +67,7 @@ to help with unofficial languages). Updating translations --------------------- -New or changed translations aren’t visible in pretalx immediately. We update +New or changed translations are not visible in pretalx immediately. We update the translations in the development version of pretalx regularly (roughly weekly), and also before every new release. diff --git a/doc/funding.rst b/doc/funding.rst new file mode 100644 index 000000000..6d0cad98d --- /dev/null +++ b/doc/funding.rst @@ -0,0 +1,66 @@ +.. _funding: + +❤ Funding +========= + +pretalx is an `open-source`_ project and largely_ a labour of love by `me, Tobias`_. Hi! + +Since love is notoriously bad at paying the bills, there are multiple ways to help fund pretalx development. +In an ideal world, I can concentrate completely on pretalx development and maintenance. +That would improve pretalx by a **lot** – the context switch between pretalx and other work projects is not exactly conductive to complex feature development. + +Since you have come here and read this far, please consider if you can and want to contribute to pretalx financially. +If you do, please reach out at sales@pretalx.com or r@rixx.de. +There are these four options for funding and sponsorship at the moment: + +pretalx.com +----------- + +The easiest way for an event to fund pretalx development is to use pretalx at our hosted instance. +We (that is: I) provide professional hosting of pretalx for events at `pretalx.com`_. +The pricing follows an event’s size, and there are discounts available for community events. +You don’t have to think about backups and updates and will be the first to any new feature or bug fix – and of course prompt support and help if you have questions. +What’s not to like? + +Feature sponsorship +------------------- + +Sponsoring the development of a feature you want or need is another great way to contribute to pretalx: +It comes with tangible benefits and you know exactly what you get for your money. +When doing this, we will of course highlight that you commissioned this feature, both in the documentation and on social media channels. +If you’re looking for ideas, look at the sponsorship_ label in the pretalx issue tracker. +But really, any open issue or wild idea is up for discussion. + + +Support contracts +----------------- + +We’re serious about supporting the open source community. +We try to make it as easy as possible to set up and maintain pretalx, as the `long list`_ of external events can confirm. +However, if you want to support the pretalx project while running your own instance, you can choose a support contract. +You’ll get a set amount of hours per year of guaranteed support, for example if you need help with upgrades or backups or if you want to figure out how to configure your event. + +Donations +--------- + +This option comes last because it’s my least favourite option. +There is nothing that ties donations tangibly to pretalx, which is less satisfying for you and me both. +But the other options assume that you have a budget and possibly an event that you’re currently running, which may not be the case for you. +If you’re looking for a low-key, low-effort way to show your appreciation and support for pretalx, you can donate money to me directly. +I have a Patreon_ account and some `other donation options`_ for one-off donations. + + +-------------------------------- + +Whichever option you choose: Thank you! I appreciate every bit of support. +And, of course, if you’d rather :ref:`contribute ` your time, we’re always happy to see new contributors! + + +.. _largely: https://github.com/pretalx/pretalx/graphs/contributors +.. _open-source: https://github.com/pretalx/pretalx/ +.. _me, Tobias: https://rixx.de/ +.. _pretalx.com: https://pretalx.com +.. _sponsorship: https://github.com/pretalx/pretalx/labels/sponsorship +.. _long list: https://github.com/pretalx/pretalx/wiki/Events +.. _Patreon: https://www.patreon.com/rixx +.. _other donation options: https://rixx.de/funding/ diff --git a/doc/maintainer/release.rst b/doc/maintainer/release.rst index ac0e70fc5..240549093 100644 --- a/doc/maintainer/release.rst +++ b/doc/maintainer/release.rst @@ -11,7 +11,7 @@ Boarding checks 3. Are there pending translations from `Weblate `_? Merge them. 4. Are all locales with more than 75% coverage included in the release? 5. Update the translation percentages from `translate.pretalx.com `_. -6. If new translations were added, add new fullcalendar locales (you have to download the `release archive `_) and extract the locales from there), and make sure that flags (in input fields) for the new locale are shown. +6. If new translations were added, add new calendar locales (you have to download the `release archive `_) and extract the locales from there), and make sure that flags (in input fields) for the new locale are shown. 7. Are there warnings about missing migrations? 8. Any blockers to see `in our issues `_? 9. Are there any TODOs that you have to resolve? @@ -42,9 +42,9 @@ Take-off and landing 8. Publish the blog post. 9. Add the release on `GitHub `_ (upload the archive you uploaded to PyPI, and add a link to the correct section of the :ref:`changelog`) 10. Upgrade `the docker repository `_ to the current commit **and tag the commit as vx.y.z**. -11. Increment version number to version+1.dev0 in ``src/pretalx/__init__.py``. +11. Increment version number to ``version+1.dev0`` in ``src/pretalx/__init__.py``. 12. ``rm -rf pretalx-release && deactivate && rmvirtualenv pretalx-release`` 13. Update version numbers in update checker (``versions.py``) and deploy. 14. Update any plugins waiting for the new release. 15. Check if the docker image build was successful. -16. Post about the release on Fedi, Twitter and LinkedIn. +16. Post about the release on ``chaos.social``, Twitter and LinkedIn. diff --git a/doc/spelling_wordlist.txt b/doc/spelling_wordlist.txt index cbe872848..f2e01ef8e 100644 --- a/doc/spelling_wordlist.txt +++ b/doc/spelling_wordlist.txt @@ -1,16 +1,20 @@ anonymisation anonymise anonymised +anonymising Ansible +auth availabilities backend backends BaseExporter +BaseMailTextPlaceholder Bcc boolean booleans browsable canceled +categorys ccc CfP changelog @@ -20,6 +24,7 @@ cronjob cryptographic CSP csp +ctrl datetime datetimes de @@ -27,33 +32,42 @@ Debian discoverable Django drag'n'drop +dropdown embeddable env ETags favicon +favourited filesystem frab frontend -Gmail gettext +Gmail gravatar GSuite gunicorn +href iCal iframe iframes +informations installable +integrations iterable Jorian libffi +lightbox linters localhost lookups lossy +makemessages middleware mixin namespace nginx +nodejs +noopener npm plugin plugins @@ -63,17 +77,25 @@ pretalx pytest queryset redis +ro slugified stdout +strikethrough stylesheet stylesheets subdirectory submitters submodule subpath +subtractive systemd templating transactional +txt +typeahead +uncheck +Venueless virtualenv +Weblate wip Woltjer diff --git a/pyproject.toml b/pyproject.toml index 8b7cf74f5..454c9bc37 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ maintainers = [ classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", - "Framework :: Django :: 4.2", + "Framework :: Django :: 5.1", "Intended Audience :: Developers", "Intended Audience :: Other Audience", "License :: OSI Approved :: Apache Software License", @@ -26,19 +26,19 @@ classifiers = [ dependencies = [ "beautifulsoup4[lxml]~=4.12.0", "bleach~=6.1.0", - "celery~=5.3.0", - "css_inline~=0.13.0", + "celery~=5.4.0", + "css_inline~=0.14.0", "csscompressor~=0.9.0", - "cssutils~=2.9.0", + "cssutils~=2.10.0", "defusedcsv~=2.0.0", "defusedxml~=0.7.0", - "Django[argon2]~=4.2.0", + "Django[argon2]~=5.1.0", "django-bootstrap4~=3.0.0", - "django-compressor~=4.4.0", + "django-compressor~=4.5.0", "django-context-decorator", "django-countries~=7.0", "django-csp~=3.8.0", - "django-filter==24.1", + "django-filter==24.2", "django-formset-js-improved==0.5.0.3", "django-formtools~=2.5.1", "django-hierarkey~=1.1.0", @@ -46,22 +46,19 @@ dependencies = [ "django-libsass~=0.8", "django-scopes~=2.0.0", "django-pdb~=0.6.2", - "djangorestframework~=3.14.0", + "djangorestframework~=3.15.0", "libsass~=0.23.0", - "Markdown~=3.5.0", # https://python-markdown.github.io/change_log/ - # We can upgrade markdown again once django-bootstrap4 upgrades or once we drop Python 3.6 and 3.7 - # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3. - # see also https://github.com/zostera/django-bootstrap4/issues/380 - "Pillow~=10.2.0", + "Markdown~=3.6.0", + "Pillow~=10.3.0", "publicsuffixlist~=0.10.0", "python-dateutil~=2.9.0", "qrcode~=7.0", - "reportlab~=4.1.0", + "reportlab~=4.2.0", "requests~=2.31.0", - "rules~=3.3.0", + "rules~=3.5.0", "urlman~=2.0.1", "vobject~=0.9.0", - "whitenoise~=6.6.0", + "whitenoise~=6.7.0", "zxcvbn~=4.4.0", 'pretalx_pages @ git+https://github.com/fossasia/eventyay-talk-pages.git@main', 'pretalx_venueless @ git+https://github.com/fossasia/eventyay-talk-video.git@main', @@ -88,6 +85,7 @@ dev = [ "isort", "jsonschema", "lxml", + "pep8-naming", "pytest", "pytest-cov", "pytest-django", @@ -100,7 +98,7 @@ dev = [ "rich", "urllib3", ] -postgres = ["psycopg2-binary"] +postgres = ["psycopg2-binary~=2.9.0"] redis = ["redis~=5.0.0"] [build-system] @@ -108,10 +106,10 @@ build-backend = "setuptools.build_meta" requires = ["setuptools", "wheel"] [project.urls] -homepage = "https://pretalx.com" -documentation = "https://docs.pretalx.org" -repository = "https://github.com/pretalx/pretalx.git" -Changelog = "https://docs.pretalx.org/en/latest/changelog.html" +Homepage = "https://pretalx.com" +Documentation = "https://docs.pretalx.org" +Repository = "https://github.com/pretalx/pretalx" +Changelog = "https://docs.pretalx.org/changelog/" Issues = "https://github.com/pretalx/pretalx/issues" [tool.setuptools] @@ -139,3 +137,12 @@ ignore = [ "src/tests/*", "SECURITY.md", ] + +[tool.djlint] +blank_line_after_tag="load,extends,include" +blank_line_before_tag="load,extends,include" +close_void_tags=false +extend_exclude="static,docs" +max_blank_lines=1 +preserve_blank_lines=1 +profile="django" diff --git a/src/pretalx.example.cfg b/src/pretalx.example.cfg index cdaa4f9c3..582f36c97 100644 --- a/src/pretalx.example.cfg +++ b/src/pretalx.example.cfg @@ -11,15 +11,12 @@ url = https://eventyay.mydomain.com name = eventyay [database] -# For MySQL, replace with "mysql" backend = postgresql name = pretalx user = pretalx -# For MySQL, enter the user password. For PostgreSQL on the same host, -# we don't need one because we can use peer authentification if our -# PostgreSQL user matches our unix user. +# For PostgreSQL on the same host, we don't need one because we can use +# peer authentification if our PostgreSQL user matches our unix user. password = Change this in production or you're going to have a bad time -# For MySQL, you can use a local socket, e.g. /var/run/mysqld/mysqld.sock # For a remote host, supply an IP address # For local postgres authentication, you can leave the host empty host = localhost diff --git a/src/pretalx/agenda/management/commands/export_schedule_html.py b/src/pretalx/agenda/management/commands/export_schedule_html.py index 5bbe62e3f..d3b52faac 100644 --- a/src/pretalx/agenda/management/commands/export_schedule_html.py +++ b/src/pretalx/agenda/management/commands/export_schedule_html.py @@ -12,8 +12,8 @@ from django.utils.timezone import override as override_timezone from django_scopes import scope, scopes_disabled +from pretalx.common.models.transaction import rolledback_transaction from pretalx.common.signals import register_data_exporters -from pretalx.common.utils import rolledback_transaction from pretalx.event.models import Event @@ -71,7 +71,11 @@ def event_speaker_urls(event): def event_exporter_urls(event): for _, exporter in register_data_exporters.send(event): - if exporter.public: + # Skip exporters that are not public, and also skip exporters + # that dynamically determine if they are public, as we won't + # be able to serve dynamic content, and the risk of data leakage + # is too high. + if not hasattr(exporter, "is_public") and exporter.public: yield exporter(event).urls.base @@ -85,6 +89,7 @@ def schedule_version_urls(event): def event_urls(event): yield event.urls.base yield event.urls.schedule + yield event.urls.schedule + "widget/messages.js" yield event.urls.schedule_nojs yield event.urls.schedule_widget_data yield from schedule_version_urls(event) @@ -109,22 +114,29 @@ def get_content(response): def dump_content(destination, path, getter): + destination = Path(destination) logging.debug(path) - content = getter(path) - if path.endswith("/"): - path += "index.html" - path = (Path(destination) / path.lstrip("/")).resolve() - if Path(destination) not in path.parents: + # We need to urldecode the file path, as otherwise we will end up with a file name + # that won't be found when the export is served by a web server. + file_path = urllib.parse.unquote(path) + if file_path.endswith("/"): + file_path += "index.html" + file_path = (destination / file_path.lstrip("/")).resolve() + if destination not in file_path.parents: raise CommandError("Path traversal detected, aborting.") - path.parent.mkdir(parents=True, exist_ok=True) + file_path.parent.mkdir(parents=True, exist_ok=True) + + content = getter(path) - with open(path, "wb") as output_file: + with open(file_path, "wb") as output_file: output_file.write(content) return content def get_mediastatic_content(url): + # We have to unquote the URL to successfully find the file on disk + url = urllib.parse.unquote(url) if url.startswith(settings.STATIC_URL): local_path = settings.STATIC_ROOT / url[len(settings.STATIC_URL) :] elif url.startswith(settings.MEDIA_URL): diff --git a/src/pretalx/agenda/permissions.py b/src/pretalx/agenda/permissions.py index 3de1dde9d..d66b47522 100644 --- a/src/pretalx/agenda/permissions.py +++ b/src/pretalx/agenda/permissions.py @@ -73,6 +73,12 @@ def is_feedback_ready(user, submission): ) +@rules.predicate +def event_uses_feedback(user, event): + event = getattr(event, "event", event) + return event and event.feature_flags["use_feedback"] + + @rules.predicate def is_speaker_viewable(user, profile): if not profile: @@ -93,6 +99,7 @@ def is_speaker_viewable(user, profile): rules.add_perm("agenda.view_submission", is_submission_visible | can_change_submissions) rules.add_perm("agenda.view_speaker", is_speaker_viewable | can_change_submissions) rules.add_perm("agenda.give_feedback", is_feedback_ready) +rules.add_perm("agenda.view_feedback_page", event_uses_feedback & is_submission_visible) rules.add_perm( "agenda.view_widget", is_agenda_visible | is_widget_always_visible | can_change_submissions, diff --git a/src/pretalx/agenda/templates/agenda/base.html b/src/pretalx/agenda/templates/agenda/base.html index d94c1eb80..a76b9a350 100644 --- a/src/pretalx/agenda/templates/agenda/base.html +++ b/src/pretalx/agenda/templates/agenda/base.html @@ -1,4 +1,5 @@ {% extends "common/base.html" %} + {% load i18n %} {% load rules %} @@ -6,14 +7,18 @@ {% block alternate_link %} - {% endblock %} - {% block agenda_custom_header %} - {% endblock %} -{% endblock %} + {% endblock alternate_link %} + {% block agenda_custom_header %}{% endblock agenda_custom_header %} +{% endblock custom_header %} {% block nav_link %} - {% has_perm 'agenda.view_schedule' request.user request.event as can_view_schedule %}{% if can_view_schedule %}{{ request.event.urls.schedule }}{% else %}{{ request.event.urls.base }}{% endif %} -{% endblock %} + {% has_perm "agenda.view_schedule" request.user request.event as can_view_schedule %} + {% if can_view_schedule %} + {{ request.event.urls.schedule }} + {% else %} + {{ request.event.urls.base }} + {% endif %} +{% endblock nav_link %} {% block content %} {% if not request.event.feature_flags.show_schedule and not request.user.is_anonymous and not hide_visibility_warning %} @@ -24,6 +29,5 @@ {% endblocktranslate %} {% endif %} - {% block agenda_content %} - {% endblock %} -{% endblock %} + {% block agenda_content %}{% endblock agenda_content %} +{% endblock content %} diff --git a/src/pretalx/agenda/templates/agenda/changelog.html b/src/pretalx/agenda/templates/agenda/changelog.html index e8b94a0c4..0c97a55b3 100644 --- a/src/pretalx/agenda/templates/agenda/changelog.html +++ b/src/pretalx/agenda/templates/agenda/changelog.html @@ -1,4 +1,5 @@ {% extends "agenda/base.html" %} + {% load i18n %} {% block agenda_content %} @@ -8,13 +9,15 @@

- {% translate "Version" %} {{ schedule.version }} + {{ phrases.schedule.version }} {{ schedule.version }} {{ schedule.published|date }}

+ {% include "agenda/changelog_block.html" with schedule=schedule %} +
{% endif %} {% endfor %} -{% endblock %} +{% endblock agenda_content %} diff --git a/src/pretalx/agenda/templates/agenda/changelog_block.html b/src/pretalx/agenda/templates/agenda/changelog_block.html index 05c9bf3a1..74de3a8c7 100644 --- a/src/pretalx/agenda/templates/agenda/changelog_block.html +++ b/src/pretalx/agenda/templates/agenda/changelog_block.html @@ -1,9 +1,10 @@ {% load i18n %} {% load rich_text %} + {% if schedule.comment %}

{{ schedule.comment|rich_text }}

-{% elif schedule.changes.action == 'create' %} -

{% translate "We released our first schedule!" %}

+{% elif schedule.changes.action == "create" %} +

{{ phrases.schedule.first_schedule }}

{% elif not schedule.changes.count %}

{% endif %} @@ -13,25 +14,19 @@

{% translate "We have new sessions!" %}

{% else %} -

{% translate "We have a new session: " %} +

+ {% translate "We have a new session: " %} {% for talk in schedule.changes.new_talks %} - - {{ quotation_open }}{{ talk.submission.title }}{{ quotation_close }} - {% if talk.submission.speakers.exists %} - {% translate "by" %} {{ talk.submission.display_speaker_names }} - {% endif %} - . + {{ talk.submission.display_title_with_speakers }}. {% endfor %} - {% endif %}

+ {% endif %} +

{% endif %} {% if schedule.changes.canceled_talks|length > 0 %} @@ -39,36 +34,26 @@

{% translate "Sadly, we had to cancel sessions:" %}

    {% for talk in schedule.changes.canceled_talks %} -
  • - {{ quotation_open }}{{ talk.submission.title }}{{ quotation_close }} - {% if talk.submission.speakers.exists %} - {% translate "by" %} {{ talk.submission.display_speaker_names }} - {% endif %} -
  • +
  • {{ talk.submission.display_title_with_speakers }}
  • {% endfor %}
{% else %} -

{% translate "We sadly had to cancel a session: " %} - {% for talk in schedule.changes.canceled_talks %} - {{ quotation_open }}{{ talk.submission.title }}{{ quotation_close }} - {% if talk.submission.speakers.exists %} - {% translate "by" %} {{ talk.submission.display_speaker_names }}. - {% endif %} - {% endfor %}

+

+ {% translate "We sadly had to cancel a session: " %} + {% for talk in schedule.changes.canceled_talks %}{{ talk.submission.display_title_with_speakers }}{% endfor %} +

{% endif %} {% endif %} {% if schedule.changes.moved_talks|length > 0 %} {% if schedule.changes.moved_talks|length > 1 %} -

{% translate "We had to move some sessions, so if you were planning on seeing them, check their new dates or locations:" %}

+

+ {% translate "We had to move some sessions, so if you were planning on seeing them, check their new dates or locations:" %} +

{% else %} -

{% translate "We have moved a session around: " %} +

+ {% translate "We have moved a session around: " %} {% for talk in schedule.changes.moved_talks %} - - {{ quotation_open }}{{ talk.submission.title }}{{ quotation_close }} - {% if talk.submission.speakers.exists %} - {% translate "by" %} {{ talk.submission.display_speaker_names }} - {% endif %} - + {{ talk.submission.display_title_with_speakers }} {% if talk.old_room == talk.new_room %} ({{ talk.old_start }} → {{ talk.new_start }}) {% elif talk.old_start == talk.new_start %} @@ -95,7 +76,8 @@ {% else %} ({{ talk.old_start }}, {{ talk.old_room }} → {{ talk.new_start }}, {{ talk.new_room }}). {% endif %} - {% endfor %}

+ {% endfor %} +

{% endif %} {% endif %} {% endif %} diff --git a/src/pretalx/agenda/templates/agenda/featured.html b/src/pretalx/agenda/templates/agenda/featured.html index bcd6ab008..2f0262ad3 100644 --- a/src/pretalx/agenda/templates/agenda/featured.html +++ b/src/pretalx/agenda/templates/agenda/featured.html @@ -1,4 +1,5 @@ {% extends "agenda/base.html" %} + {% load compress %} {% load i18n %} {% load rich_text %} @@ -10,7 +11,9 @@ {{ request.event.featured_sessions_text|rich_text }} {% else %} {% if talks %} - {% translate "Welcome to our list of featured sessions!" %}

+ {% translate "Welcome to our list of featured sessions!" %} +
+
{% blocktranslate trimmed %} We prepared a list of exciting sessions, so you can get a feel for our conference. Please keep in mind that this is not our full schedule. @@ -35,13 +38,9 @@

{{ talk.submission_type.name }}

-

- {{ talk.abstract|default:talk.description|default:""|rich_text }} -

- {% if not forloop.last %} -
- {% endif %} +

{{ talk.abstract|default:talk.description|default:""|rich_text }}

+ {% if not forloop.last %}
{% endif %} {% endfor %} -{% endblock %} +{% endblock agenda_content %} diff --git a/src/pretalx/agenda/templates/agenda/feed/description.html b/src/pretalx/agenda/templates/agenda/feed/description.html index 8e8fa1e89..3e62ba242 100644 --- a/src/pretalx/agenda/templates/agenda/feed/description.html +++ b/src/pretalx/agenda/templates/agenda/feed/description.html @@ -1,7 +1,7 @@ {% load i18n %}

- {% if obj.changes.action == 'update' %} + {% if obj.changes.action == "update" %} {% blocktranslate trimmed with event_name=obj.event.name %} A new {{ event_name }} schedule has been released! {% endblocktranslate %} diff --git a/src/pretalx/agenda/templates/agenda/feedback.html b/src/pretalx/agenda/templates/agenda/feedback.html index 695e15ddf..333c345fd 100644 --- a/src/pretalx/agenda/templates/agenda/feedback.html +++ b/src/pretalx/agenda/templates/agenda/feedback.html @@ -1,11 +1,12 @@ {% extends "agenda/base.html" %} + {% load i18n %} {% load rich_text %} {% block content %}

- {% translate "Feedback for" %} {{ quotation_open }}{{ talk.title }}{{ quotation_close }} + {% translate "Feedback" %}: {{ quotation_open }}{{ talk.title }}{{ quotation_close }} {{ talk.slot.local_start|date:DAY_MONTH_DATE_FORMAT }}, {{ talk.slot.local_start|date:"TIME_FORMAT" }}–{{ talk.slot.end|date:"TIME_FORMAT" }}, {{ talk.slot.room.name }} @@ -20,13 +21,11 @@

{% endif %} - + {% empty %} - {% translate "There has been no feedback for this session yet." %} + {{ phrases.schedule.no_feedback }} {% endfor %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/agenda/templates/agenda/feedback_form.html b/src/pretalx/agenda/templates/agenda/feedback_form.html index 09955c73c..3c668c4cf 100644 --- a/src/pretalx/agenda/templates/agenda/feedback_form.html +++ b/src/pretalx/agenda/templates/agenda/feedback_form.html @@ -1,4 +1,5 @@ {% extends "agenda/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -10,9 +11,7 @@

- - {{ quotation_open }}{{ talk.title }}{{ quotation_close }} - + {{ quotation_open }}{{ talk.title }}{{ quotation_close }}

@@ -30,18 +29,14 @@

{% bootstrap_form_errors form %} {% csrf_token %} {% if speakers|length > 1 %} - {% bootstrap_field form.speaker layout='inline' %} + {% bootstrap_field form.speaker layout="inline" %} {% endif %} -
- {% bootstrap_field form.review layout='inline' %} -
+
{% bootstrap_field form.review layout="inline" %}
- + {% endif %}

-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/agenda/templates/agenda/header_row.html b/src/pretalx/agenda/templates/agenda/header_row.html index 8f12637e9..00e9e2837 100644 --- a/src/pretalx/agenda/templates/agenda/header_row.html +++ b/src/pretalx/agenda/templates/agenda/header_row.html @@ -57,15 +57,15 @@

-

- {% blocktranslate trimmed %} - We could not verify that this request really was sent by you. For security reasons, we cannot process it.
- Please go back to the last page, refresh, and then try again. - {% endblocktranslate %} +

+ {% translate "Verification failed." %} +

-

-{% endblock %} -{% block error_code %}403: CSRF{% endblock %} +

+

+

+ {% blocktranslate trimmed %} + We could not verify that this request really was sent by you. For security reasons, we cannot process it. +
+ Please go back to the last page, refresh, and then try again. + {% endblocktranslate %} +

+

+

+{% endblock error_message %} +{% block error_code %}403: CSRF{% endblock error_code %} diff --git a/src/pretalx/common/templates/404.html b/src/pretalx/common/templates/404.html index c83be21c5..170ee6078 100644 --- a/src/pretalx/common/templates/404.html +++ b/src/pretalx/common/templates/404.html @@ -1,6 +1,17 @@ {% extends "common/error.html" %} + {% load i18n %} {% load static %} -{% block error_image %}{% translate {% endblock %} -{% block error_message %}{{ phrases.base.not_found }}{% endblock %} -{% block error_code %}404{% endblock %} + +{% block title %}{{ phrases.base.not_found }}{% endblock title %} +{% block error_image %} + {{ phrases.base.not_found }} +{% endblock error_image %} +{% block error_message %} + {{ phrases.base.not_found }} +

+
+

{{ phrases.base.not_found_long }}

+
+{% endblock error_message %} +{% block error_code %}404{% endblock error_code %} diff --git a/src/pretalx/common/templates/500.html b/src/pretalx/common/templates/500.html index 85330732b..5382271e3 100644 --- a/src/pretalx/common/templates/500.html +++ b/src/pretalx/common/templates/500.html @@ -1,15 +1,25 @@ {% extends "common/error.html" %} + {% load i18n %} {% load static %} -{% block error_image %}{% translate {% endblock %} + +{% block error_image %} + {% translate +{% endblock error_image %} {% block error_message %} -

{% translate "We have encountered an error." %}

-

- {% if development_mode %} - {% blocktranslate with link='https://github.com/pretalx/pretalx/issues/new?template=bug_report.md&title=Error+on+'|add:request_path trimmed %} - Please help us to fix this by submitting a bug report! - {% endblocktranslate %} - {% endif %} +

+ {% translate "We have encountered an error." %} +

-{% endblock %} -{% block error_code %}500{% endblock %} +

+
+

+ {% if development_mode %} + {% blocktranslate with link="https://github.com/pretalx/pretalx/issues/new?template=bug_report.md&title=Error+on+"|add:request_path trimmed %} + Please help us to fix this by submitting a bug report! + {% endblocktranslate %} + {% endif %} +

+
+{% endblock error_message %} +{% block error_code %}500{% endblock error_code %} diff --git a/src/pretalx/common/templates/bootstrap4/form_errors.html b/src/pretalx/common/templates/bootstrap4/form_errors.html index f1d75b6b2..78f9f8e64 100644 --- a/src/pretalx/common/templates/bootstrap4/form_errors.html +++ b/src/pretalx/common/templates/bootstrap4/form_errors.html @@ -1,5 +1,7 @@ -
{% comment %}We remove alert-link and alert-dismissable, because those don't match our design choices{% endcomment %} +
+ {% comment %}We remove alert-link and alert-dismissable, because those don’t match our design choices{% endcomment %} {% for error in errors %} - {{ error }}{% if not forloop.last %}
{% endif %} + {{ error }} + {% if not forloop.last %}
{% endif %} {% endfor %}
diff --git a/src/pretalx/common/templates/common/action_confirm.html b/src/pretalx/common/templates/common/action_confirm.html new file mode 100644 index 000000000..32a36c196 --- /dev/null +++ b/src/pretalx/common/templates/common/action_confirm.html @@ -0,0 +1,9 @@ +{% extends "orga/base.html" %} + +{% block title %}{{ action_title }}{% endblock title %} + +{% block content %} + + {% include "common/includes/action_confirm.html" %} + +{% endblock content %} diff --git a/src/pretalx/common/templates/common/auth.html b/src/pretalx/common/templates/common/auth.html index ac5bdba5c..0b0d0f677 100644 --- a/src/pretalx/common/templates/common/auth.html +++ b/src/pretalx/common/templates/common/auth.html @@ -13,8 +13,8 @@ {% endif %} {% csrf_token %} {% compress js %} - - + + {% endcompress %}
{% if not hide_login %} diff --git a/src/pretalx/common/templates/common/avatar.html b/src/pretalx/common/templates/common/avatar.html index 20552cc70..3b2922165 100644 --- a/src/pretalx/common/templates/common/avatar.html +++ b/src/pretalx/common/templates/common/avatar.html @@ -1,27 +1,27 @@ {% load bootstrap4 %} {% load i18n %} +{% load static %} +{% load compress %}
- +
- {% translate - - {% bootstrap_field form.get_gravatar layout='event-inline' %} + {% bootstrap_field form.get_gravatar layout="event-inline" %} +
+ + {% translate + +
- {% bootstrap_field form.avatar layout='inline' %} + {% bootstrap_field form.avatar layout="inline" %} {{ form.avatar.help_text }}
diff --git a/src/pretalx/common/templates/common/base.html b/src/pretalx/common/templates/common/base.html index a7c1d8aa5..26317fb08 100644 --- a/src/pretalx/common/templates/common/base.html +++ b/src/pretalx/common/templates/common/base.html @@ -2,6 +2,7 @@ {% load i18n %} {% load rules %} {% load static %} + @@ -13,15 +14,19 @@ {{ html_head|safe }} - {% if request.event and request.event.display_settings.meta_noindex %}{% else %}{% endif %} + {% if request.event and request.event.display_settings.meta_noindex %} + + {% else %} + + {% endif %} {% block meta_image %}{% if request.event %} - {% endif %}{% endblock %} - - + {% endif %}{% endblock meta_image %} + + @@ -34,8 +39,8 @@ {% else %} {% compress css %} - - + + {% endcompress %} {% endif %} @@ -47,13 +52,13 @@ {% endcompress %} - {% block custom_header %}{% endblock %} + {% block custom_header %}{% endblock custom_header %}
{% if request.event and request.event.header_image %} - {# we're not lazy-loading the header image, even though it can be large, because it's a bit jarring to see it flash in 100ms after the page load #} - + {# we’re not lazy-loading the header image, even though it can be large, because it’s a bit jarring to see it flash in 100ms after the page load #} + {{ request.event.name }} {% endif %}
{% if request.event and not request.event.is_public and not is_html_export %} @@ -64,10 +69,10 @@ {% endblocktranslate %}
{% endif %} -
+

- + {% if request.event and request.event.logo %} {% elif request.event %} @@ -87,7 +92,7 @@

{% endif %} {% if request.event and request.user.is_authenticated and not is_html_export %}

@@ -390,14 +393,38 @@ {% include "orga/includes/sidebar_nav.html" %} {% endfor %} {% endif %} - {% else %} {# if request.event #} - {% if request.orga_events|length > 1 %} - + {% elif request.organiser %} {# if request.event #} + + + {% translate "Dashboard" %} + + + + {% translate "Settings" %} + + {% has_perm "orga.change_teams" request.user request.organiser as can_change_teams %} + {% has_perm "orga.view_organiser_speakers" request.user request.organiser as can_view_speakers %} + {% if can_change_teams %} + + + {% translate "Teams" %} + + {% endif %} + {% if can_view_speakers %} + + + {% translate "Speakers" %} + + {% endif %} + {% else %} {# elif request.organiser #} + {% has_perm "orga.view_organiser_lists" request.user request as can_see_organiser_lists %} + {% if can_see_organiser_lists %} + {% translate "Events" %} {% endif %} - {% has_perm 'orga.view_organisers' request.user request as can_see_organisers %} + {% has_perm "orga.view_organisers" request.user request as can_see_organisers %} {% if can_see_organisers %} @@ -405,10 +432,27 @@ {% endif %} {% if request.user.is_administrator %} - - - {% translate "Admin information" %} - + {% endif %} {% for nav_element in nav_global %} {% include "orga/includes/sidebar_nav.html" %} @@ -426,7 +470,7 @@ {% endif %} {% block content %} - {% endblock %} + {% endblock content %}
{% include "common/powered_by.html" %} diff --git a/src/pretalx/orga/templates/orga/cfp/access_code_delete.html b/src/pretalx/orga/templates/orga/cfp/access_code_delete.html deleted file mode 100644 index 8caf3e889..000000000 --- a/src/pretalx/orga/templates/orga/cfp/access_code_delete.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "orga/cfp/base.html" %} -{% load i18n %} -{% block content %} -

- {% translate "Do you really want to delete this access code?" %} – {{ quotation_open }}{{ object.code }}{{ quotation_close }} -

-
- {% csrf_token %} -
- - {% translate "Back" %} - - -
-
-{% endblock %} - diff --git a/src/pretalx/orga/templates/orga/cfp/access_code_form.html b/src/pretalx/orga/templates/orga/cfp/access_code_form.html index fb73ad30a..d911367b9 100644 --- a/src/pretalx/orga/templates/orga/cfp/access_code_form.html +++ b/src/pretalx/orga/templates/orga/cfp/access_code_form.html @@ -1,4 +1,5 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -11,9 +12,11 @@ {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% if form.instance.pk %}{{ form.instance.code }}{% else %}{% translate "New access code" %}{% endif %} :: {% endblock extra_title %} -{% block cfp_content %} +{% block content %}

{% if form.instance.pk %} {% translate "Edit access code" %} @@ -29,7 +32,9 @@

{% endblocktranslate %} @@ -38,23 +43,23 @@

{% csrf_token %} {% bootstrap_form_errors form %} - {% bootstrap_form form layout='event' %} + {% bootstrap_form form layout="event" %}
{% if form.instance.pk and not form.instance.submissions.exists %} - {% translate "Delete" %} + + {{ phrases.base.delete_button }} {% endif %}
-{% endblock %} - +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/access_code_send.html b/src/pretalx/orga/templates/orga/cfp/access_code_send.html index 5c15fa751..346986435 100644 --- a/src/pretalx/orga/templates/orga/cfp/access_code_send.html +++ b/src/pretalx/orga/templates/orga/cfp/access_code_send.html @@ -1,33 +1,20 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} -{% block cfp_content %} -

- {% translate "Send access code" %} -

-
- {% blocktranslate trimmed %} - Access codes can allow access to your CfP beyond its deadline for one or multiple - proposals. If the code is circulated more widely than you’d like, you can always delete or invalidate it. - {% endblocktranslate %} -
+{% block extra_title %}{% translate "Send access code" %} :: {% endblock extra_title %} + +{% block content %} +

{% translate "Send access code" %}

{% csrf_token %} {% bootstrap_form_errors form %} - {% bootstrap_form form layout='event' %} -
- - - - -
-
+ {% bootstrap_form form layout="event" %} -{% endblock %} + {% include "orga/includes/submit_row.html" with submit_label=phrases.base.send %} + + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/access_code_view.html b/src/pretalx/orga/templates/orga/cfp/access_code_view.html index 17bb7d812..030353cce 100644 --- a/src/pretalx/orga/templates/orga/cfp/access_code_view.html +++ b/src/pretalx/orga/templates/orga/cfp/access_code_view.html @@ -1,23 +1,38 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + +{% load compress %} {% load copyable %} {% load i18n %} {% load static %} {% block scripts %} - -{% endblock %} + + {% compress js %} + + + {% endcompress %} +{% endblock scripts %} +{% block extra_title %}{% translate "Access codes" %} :: {% endblock extra_title %} -{% block cfp_content %} -

{% translate "Access codes" %}

-
- {% blocktranslate trimmed %} - Access codes can be used to allow proposals even when the CfP - is over. You can also use them for hidden tracks or hidden session - types, which can only be seen with a matching access code. - {% endblocktranslate %} -
-
+{% block content %} +

+ {% translate "Access codes" %} + + + +

+ +
+ {% blocktranslate trimmed %} + Access codes can be used to allow proposals even when the CfP + is over. You can also use them for hidden tracks or hidden session + types, which can only be seen with a matching access code. + {% endblocktranslate %} +
+
+
+ {% translate "New access code" %} @@ -29,8 +44,10 @@

{% translate "Access codes" %}

{% translate "Code" %} - {% if request.event.feature_flags.use_tracks %}{% translate "Track" %}{% endif %} - {% translate "Session Type" %} + {% if request.event.feature_flags.use_tracks %} + {% translate "Track" %} + {% endif %} + {% translate "Session type" %} {% translate "Uses" %} @@ -38,40 +55,40 @@

{% translate "Access codes" %}

{% for code in access_codes %} - - {{ code.code|copyable }} - - {% if request.event.feature_flags.use_tracks %} - {% if code.track %} -
{{ code.track.name }} - {% else %}–{% endif %} - {% endif %} + {{ code.code|copyable }} + {% if request.event.feature_flags.use_tracks %} + + {% if code.track %} + {{ code.track.name }} + {% else %} + – + {% endif %} + + {% endif %} {% if code.submission_type %} {{ code.submission_type.name }} {% else %}–{% endif %} - {{ code.redeemed|default:0 }} / {{ code.maximum_uses|default:'∞' }} + {{ code.redeemed|default:0 }} / {{ code.maximum_uses|default:"∞" }}
- +
- + {% if not code.submissions.exists %} - + {% endif %} @@ -82,5 +99,7 @@

{% translate "Access codes" %}

{% endif %} + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/base.html b/src/pretalx/orga/templates/orga/cfp/base.html deleted file mode 100644 index 340edc66b..000000000 --- a/src/pretalx/orga/templates/orga/cfp/base.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "orga/base.html" %} -{% block content %} - {% block cfp_content %} - {% endblock %} -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/cfp/flow.html b/src/pretalx/orga/templates/orga/cfp/flow.html index fe534304b..10398f2e5 100644 --- a/src/pretalx/orga/templates/orga/cfp/flow.html +++ b/src/pretalx/orga/templates/orga/cfp/flow.html @@ -1,4 +1,5 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load compress %} {% load i18n %} {% load static %} @@ -16,9 +17,11 @@ {# do not compress #} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% translate "CfP Editor" %} :: {% endblock extra_title %} -{% block cfp_content %} +{% block content %}

{% translate "CfP Editor" %}

{% blocktranslate trimmed %} @@ -28,6 +31,5 @@

{% translate "CfP Editor" %}

item you want to change! {% endblocktranslate %}

-
-
-{% endblock %} +
+{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/question_delete.html b/src/pretalx/orga/templates/orga/cfp/question_delete.html deleted file mode 100644 index 11a72b5c4..000000000 --- a/src/pretalx/orga/templates/orga/cfp/question_delete.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "orga/cfp/base.html" %} -{% load i18n %} -{% block content %} -

- {% translate "Do you really want to delete this question?" %} – {{ quotation_open }}{{ object.question }}{{ quotation_close }} -

-
- {% csrf_token %} -
- - {% translate "Back" %} - - -
-
-{% endblock %} diff --git a/src/pretalx/orga/templates/orga/cfp/question_detail.html b/src/pretalx/orga/templates/orga/cfp/question_detail.html index 330a546cc..80f231139 100644 --- a/src/pretalx/orga/templates/orga/cfp/question_detail.html +++ b/src/pretalx/orga/templates/orga/cfp/question_detail.html @@ -1,4 +1,5 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -7,18 +8,20 @@ {% block stylesheets %} -{% endblock %} +{% endblock stylesheets %} {% block scripts %} {% compress js %} {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{{ quotation_open }}{{ question.question }}{{ quotation_close }} :: {% endblock extra_title %} -{% block cfp_content %} +{% block content %}

- {{ quotation_open }}{{ question.question }}{{ qutoation_close }} + {{ quotation_open }}{{ question.question }}{{ quotation_close }} ({{ question.get_variant_display }}) @@ -28,7 +31,7 @@

{% if answer_count %}
- {% bootstrap_form filter_form layout='inline' %} + {% bootstrap_form filter_form layout="inline" %}
@@ -80,17 +83,15 @@

{% if question.target != "reviewer" %} {% endif %} - {% if answer.answer %}{{ answer.answer|truncatechars:140 }}{% else %}{{ answer.options__answer|truncatechars:140 }}{% endif %} - {% if question.target != "reviewer" %} - + {% if answer.answer %} + {{ answer.answer|truncatechars:140 }} + {% else %} + {{ answer.options__answer|truncatechars:140 }} {% endif %} + {% if question.target != "reviewer" %}{% endif %} - - {{ answer.count }} - - - {% widthratio answer.count answer_count 100 %} % - + {{ answer.count }} + {% widthratio answer.count answer_count 100 %} % {% endfor %} @@ -99,4 +100,4 @@

{% endif %} {% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/question_form.html b/src/pretalx/orga/templates/orga/cfp/question_form.html index 2be027977..19486c648 100644 --- a/src/pretalx/orga/templates/orga/cfp/question_form.html +++ b/src/pretalx/orga/templates/orga/cfp/question_form.html @@ -1,11 +1,14 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load formset_tags %} {% load i18n %} {% load static %} -{% block cfp_content %} +{% block extra_title %}{% if form.instance.question %}{{ form.instance.question }}{% else %}{% translate "New question" %}{% endif %} :: {% endblock extra_title %} + +{% block content %} {% compress js %} @@ -16,7 +19,11 @@ {% endcompress %}

- {% if form.instance.question %}{% translate "Question" %}: {{ form.instance.question }}{% else %}{% translate "New question" %}{% endif %} + {% if form.instance.question %} + {% translate "Question" %}: {{ form.instance.question }} + {% else %} + {% translate "New question" %} + {% endif %}

{% csrf_token %} @@ -31,7 +38,7 @@

{% endif %} - {% if action != 'create' %} + {% if action != "create" %} {% if question.active %}
@@ -44,61 +51,54 @@

{% translate "This question is currently inactive, and will not be asked during submission." %} - {% translate "Activate question" %} + {% translate "Activate question" %}
{% endif %} {% endif %} - {% bootstrap_field form.target layout='event' %} - {% bootstrap_field form.variant layout='event' %} - {% bootstrap_field form.question layout='event' %} - {% bootstrap_field form.help_text layout='event' %} + {% bootstrap_field form.target layout="event" %} + {% bootstrap_field form.variant layout="event" %} + {% bootstrap_field form.question layout="event" %} + {% bootstrap_field form.help_text layout="event" %}
{% blocktranslate trimmed %} If you mark a Yes/No question as required, it means that the user has to select Yes and No is not accepted. If you want to allow both options, do not make this field required. {% endblocktranslate %}
- {% bootstrap_field form.is_public layout='event' %} - {% bootstrap_field form.contains_personal_data layout='event' %} - - {% bootstrap_field form.is_visible_to_reviewers layout='event' %} - + {% bootstrap_field form.is_public layout="event" %} + {% bootstrap_field form.contains_personal_data layout="event" %} + {% bootstrap_field form.is_visible_to_reviewers layout="event" %}
{% translate "Limit to specific proposals" %} {% if form.tracks %} - - {% bootstrap_field form.tracks layout='event' %} - + {% bootstrap_field form.tracks layout="event" %} {% endif %} {% if form.submission_types %} - - {% bootstrap_field form.submission_types layout='event' %} - + {% bootstrap_field form.submission_types layout="event" %} {% endif %}
{% translate "Input validation" %} - {% bootstrap_field form.question_required layout='event' %} - {% bootstrap_field form.deadline layout='event' %} - {% bootstrap_field form.freeze_after layout='event' %} + {% bootstrap_field form.question_required layout="event" %} + {% bootstrap_field form.deadline layout="event" %} + {% bootstrap_field form.freeze_after layout="event" %} - {% bootstrap_field form.min_length layout='event' %} - {% bootstrap_field form.max_length layout='event' %} + {% bootstrap_field form.min_length layout="event" %} + {% bootstrap_field form.max_length layout="event" %} - {% bootstrap_field form.min_number layout='event' %} - {% bootstrap_field form.max_number layout='event' %} + {% bootstrap_field form.min_number layout="event" %} + {% bootstrap_field form.max_number layout="event" %} - {% bootstrap_field form.min_date layout='event' %} - {% bootstrap_field form.max_date layout='event' %} + {% bootstrap_field form.min_date layout="event" %} + {% bootstrap_field form.max_date layout="event" %} - {% bootstrap_field form.min_datetime layout='event' %} - {% bootstrap_field form.max_datetime layout='event' %} + {% bootstrap_field form.min_datetime layout="event" %} + {% bootstrap_field form.max_datetime layout="event" %}
@@ -107,8 +107,8 @@

{% translate "Upload answer options" %}
- {% bootstrap_field form.options layout='event' %} - {% bootstrap_field form.options_replace layout='event' %} + {% bootstrap_field form.options layout="event" %} + {% bootstrap_field form.options_replace layout="event" %}
{{ formset.management_form }} @@ -121,14 +121,15 @@

{% bootstrap_field form.DELETE form_group_class="" layout="inline" %}

-
+
{% bootstrap_form_errors form %} - {% bootstrap_field form.answer layout='inline' form_group_class="" %} + {% bootstrap_field form.answer layout="inline" form_group_class="" %}
- {% if action != 'view' %} + {% if action != "view" %}
+ +
{% endif %}
@@ -144,7 +145,7 @@

- {% bootstrap_field formset.empty_form.answer layout='inline' form_group_class="" %} + {% bootstrap_field formset.empty_form.answer layout="inline" form_group_class="" %}
{% endescapescript %} - {% if action != 'view' %} + {% if action != "view" %}

+ {% translate "Add a new option" %} +

{% endif %}
+ {% include "orga/includes/submit_row.html" %} + -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/question_remind.html b/src/pretalx/orga/templates/orga/cfp/question_remind.html index 55a7106b2..7d4933985 100644 --- a/src/pretalx/orga/templates/orga/cfp/question_remind.html +++ b/src/pretalx/orga/templates/orga/cfp/question_remind.html @@ -1,25 +1,30 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load i18n %} -{% block cfp_content %} -

- {% translate "Send out reminders" %} -

+{% block extra_title %}{% translate "Send out reminders" %} :: {% endblock extra_title %} + +{% block content %} +

{% translate "Send out reminders" %}

{% blocktranslate trimmed %} Here you can limit who will receive reminder emails. You will be able to review emails before they are sent out. {% endblocktranslate %} +
+ + {% translate "Email template" %}: + {% translate "Unanswered questions reminder" %} +

{% csrf_token %} - {% bootstrap_form filter_form layout='event' %} -
-
- -
+ {% bootstrap_form filter_form layout="event" %} + + {% include "orga/includes/submit_row.html" with submit_label=phrases.base.send %} +
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/question_view.html b/src/pretalx/orga/templates/orga/cfp/question_view.html index b8d0a2ff4..eaed5c29a 100644 --- a/src/pretalx/orga/templates/orga/cfp/question_view.html +++ b/src/pretalx/orga/templates/orga/cfp/question_view.html @@ -1,22 +1,39 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load i18n %} +{% load static %} -{% block cfp_content %} -
- {% blocktranslate trimmed %} - Questions can help you sort out additional details with speakers, such as - clothing sizes, special requirements such as dietary needs, or accommodation. - Questions can be asked either on a per-proposal level, or per speaker, as - you see fit. - {% endblocktranslate %} -
+{% block extra_title %}{% translate "Questions" %} :: {% endblock extra_title %} + +{% block scripts %} + + +{% endblock scripts %} + +{% block content %} +

+ {% translate "Questions" %} + + + +

+ +
+ {% blocktranslate trimmed %} + Questions can help you sort out additional details with speakers, such as + clothing sizes, special requirements such as dietary needs, or accommodation. + Questions can be asked either on a per-proposal level, or per speaker, as + you see fit. + {% endblocktranslate %} +
+
{% if questions %} {% translate "Send out reminders for unanswered questions" %} {% endif %} - + {% translate "Add a new question" %} @@ -39,37 +56,28 @@ {% for question in questions %} - - {{ question.question }} - - - - {{ question.get_target_display }} + {{ question.question }} + {{ question.get_target_display }} - + - {% if question.question_required == "require after" or question.freeze_after%} + {% if question.question_required == "require after" or question.freeze_after %} {% endif %} - + - - {{ question.answer_count }} - + {{ question.answer_count }} + {% include "orga/includes/order_object.html" with object=question %} - + - + @@ -84,4 +92,4 @@
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/submission_type_delete.html b/src/pretalx/orga/templates/orga/cfp/submission_type_delete.html deleted file mode 100644 index 7cd8f86ef..000000000 --- a/src/pretalx/orga/templates/orga/cfp/submission_type_delete.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "orga/cfp/base.html" %} -{% load i18n %} -{% block content %} -

- {% translate "Do you really want to delete this session type?" %} – {{ quotation_open }}{{ object.name }}{{ quotation_close }} -

-
- {% csrf_token %} -
- - {% translate "Back" %} - - -
-
-{% endblock %} diff --git a/src/pretalx/orga/templates/orga/cfp/submission_type_form.html b/src/pretalx/orga/templates/orga/cfp/submission_type_form.html index f6c65b92c..718b8ba2a 100644 --- a/src/pretalx/orga/templates/orga/cfp/submission_type_form.html +++ b/src/pretalx/orga/templates/orga/cfp/submission_type_form.html @@ -1,4 +1,5 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -11,12 +12,14 @@ {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% if form.instance.name %}{{ form.instance.name }}{% else %}{% translate "New Session Type" %}{% endif %} :: {% endblock extra_title %} -{% block cfp_content %} +{% block content %}

{% if form.instance.name %} - {% translate "Session Type" %}: {{ form.instance.name }} + {% translate "Session type" %}: {{ form.instance.name }} {% else %} {% translate "New Session Type" %} {% endif %} @@ -24,11 +27,13 @@

{% csrf_token %} {% bootstrap_form_errors form %} - {% bootstrap_field form.name layout='event' %} - {% bootstrap_field form.default_duration addon_after="minutes" layout='event' addon_after_class="input-group-append input-group-text" %} - {% bootstrap_field form.deadline layout='event' %} - {% bootstrap_field form.requires_access_code layout='event' %} + {% bootstrap_field form.name layout="event" %} + {% bootstrap_field form.default_duration addon_after="minutes" layout="event" addon_after_class="input-group-append input-group-text" %} + {% bootstrap_field form.deadline layout="event" %} + {% bootstrap_field form.requires_access_code layout="event" %} + {% include "orga/includes/submit_row.html" %} +
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/submission_type_view.html b/src/pretalx/orga/templates/orga/cfp/submission_type_view.html index b8c8178ad..279a2256c 100644 --- a/src/pretalx/orga/templates/orga/cfp/submission_type_view.html +++ b/src/pretalx/orga/templates/orga/cfp/submission_type_view.html @@ -1,15 +1,31 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load i18n %} +{% load static %} -{% block cfp_content %} -

{% translate "Session Types" %}

-
- {% blocktranslate trimmed %} - Different session types may help to guide speakers into different slot - lengths (short sessions vs long sessions) or different presentation formats - (talk vs workshop vs metal concert). - {% endblocktranslate %} -
+{% block scripts %} + + +{% endblock scripts %} + +{% block extra_title %}{% translate "Session types" %} :: {% endblock extra_title %} + +{% block content %} +

+ {% translate "Session types" %} + + + +

+ +
+ {% blocktranslate trimmed %} + Different session types may help to guide speakers into different slot + lengths (short sessions vs long sessions) or different presentation formats + (talk vs workshop vs metal concert). + {% endblocktranslate %} +
+
+ {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/text.html b/src/pretalx/orga/templates/orga/cfp/text.html index cd367c7cd..b9e6953c5 100644 --- a/src/pretalx/orga/templates/orga/cfp/text.html +++ b/src/pretalx/orga/templates/orga/cfp/text.html @@ -1,193 +1,217 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} {% block scripts %} + {% compress js %} + {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% translate "Call for Proposals" %} :: {% endblock extra_title %} -{% block cfp_content %} -
- - {% translate "A good Call for Participation will engage potential speakers. Remember to include:" %}
-
    -
  • {% translate "The formats (sessions, workshops, panels) and their durations" %}
  • -
  • {% translate "Topics you are looking for" %}
  • -
  • {% translate "How open you are to alternative topics" %}
  • -
  • {% translate "The people coming to your conference: interests, experience level …" %}
  • -
  • {% translate "Link your Code of Conduct and Data Protection statements." %}
  • -
  • {% translate "Do you offer financial or other support, e.g. support for first time speakers?" %} +{% block content %} +

    + {% translate "Call for Proposals" %} + + + +

    + +
    + + {% translate "A good Call for Participation will engage potential speakers. Remember to include:" %} +
    +
      +
    • {% translate "The formats (sessions, workshops, panels) and their durations" %}
    • +
    • {% translate "Topics you are looking for" %}
    • +
    • {% translate "How open you are to alternative topics" %}
    • +
    • {% translate "The people coming to your conference: interests, experience level …" %}
    • +
    • {% translate "Link your Code of Conduct and Data Protection statements." %}
    • +
    • {% translate "Do you offer financial or other support, e.g. support for first time speakers?" %}
    • {% translate "Dates and location" %}
    -
    -
    -
    - {% csrf_token %} - {% bootstrap_form_errors form %} - {% bootstrap_form_errors sform %} -
    - {% translate "Text and deadline" %} - {% bootstrap_field form.headline layout='event' %} - {% bootstrap_field form.text layout='event' %} - {% bootstrap_field form.deadline layout='event' %} - {% if different_deadlines %} -
    -
    - {% translate "Some of your session types have different deadlines:" %} -
      - {% for deadline, session_types in different_deadlines.items %} -
    • - {% for session_type in session_types %} - {{ session_type.name }}{% if not forloop.last %},{% else %}:{% endif %} - {% endfor %} - {{ deadline }} -
    • - {% endfor %} -
    -
    +
    +
    +
    + + {% csrf_token %} + {% bootstrap_form_errors form %} + {% bootstrap_form_errors sform %} +
    + {% translate "Text and deadline" %} + {% bootstrap_field form.headline layout="event" %} + {% bootstrap_field form.text layout="event" %} + {% bootstrap_field form.deadline layout="event" %} + {% if different_deadlines %} +
    +
    + {% translate "Some of your session types have different deadlines:" %} +
      + {% for deadline, session_types in different_deadlines.items %} +
    • + {% for session_type in session_types %} + {{ session_type.name }}{% if not forloop.last %},{% else %}:{% endif %} + {% endfor %} + {{ deadline }} +
    • + {% endfor %} +
    - {% endif %} - {% bootstrap_field form.show_deadline layout='event' %} - {% bootstrap_field sform.use_tracks layout='event' %} - {% bootstrap_field sform.present_multiple_times layout='event' %} - {% bootstrap_field sform.mail_on_new_submission layout='event' %} -
    +
    + {% endif %} + {% bootstrap_field form.show_deadline layout="event" %} + {% bootstrap_field sform.use_tracks layout="event" %} + {% bootstrap_field sform.present_multiple_times layout="event" %} + {% bootstrap_field sform.mail_on_new_submission layout="event" %} + -
    - {% translate "Proposal information" %} +
    +
    + {% translate "Proposal information" %} + + + +
    +
    {% translate "Select which information should be requested and/or required during CfP proposal." %} - {% translate "Click here to view the proposal form." %} + {% translate "Click here to view the proposal form." %}
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if request.event.is_multilingual %} - - - - - - - {% endif %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
    {% translate "Minimum length" %}{% translate "Maximum length" %}
    {% translate "Title" %}{% bootstrap_field sform.cfp_title_min_length use_label=False layout='inline' %}{% bootstrap_field sform.cfp_title_max_length use_label=False layout='inline' %}
    {% translate "Abstract" %}{% bootstrap_field sform.cfp_ask_abstract layout='event-inline' %}{% bootstrap_field sform.cfp_abstract_min_length use_label=False layout='inline' %}{% bootstrap_field sform.cfp_abstract_max_length use_label=False layout='inline' %}
    {% translate "Description" %}{% bootstrap_field sform.cfp_ask_description layout='event-inline' %}{% bootstrap_field sform.cfp_description_min_length use_label=False layout='inline' %}{% bootstrap_field sform.cfp_description_max_length use_label=False layout='inline' %}
    {% translate "Track" %}{% bootstrap_field sform.cfp_ask_track layout='event-inline' %}
    {% translate "Language" %}{% bootstrap_field sform.cfp_ask_content_locale layout='event-inline' %}
    {% translate "Additional speakers" %}{% bootstrap_field sform.cfp_ask_additional_speaker layout='event-inline' %}
    {% translate "Availability" %}{% bootstrap_field sform.cfp_ask_availabilities layout='event-inline' %}
    {% translate "Notes" %}{% bootstrap_field sform.cfp_ask_notes layout='event-inline' %}
    {% translate "Recording opt-out" %}{% bootstrap_field sform.cfp_ask_do_not_record layout='event-inline' %}
    {% translate "Session image" %}{% bootstrap_field sform.cfp_ask_image layout='event-inline' %}
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% if request.event.is_multilingual %} - - + + - -
    {% translate "Minimum length" %}{% translate "Maximum length" %}
    {% translate "Title" %}{% bootstrap_field sform.cfp_title_min_length use_label=False layout="inline" %}{% bootstrap_field sform.cfp_title_max_length use_label=False layout="inline" %}
    {% translate "Abstract" %}{% bootstrap_field sform.cfp_ask_abstract layout="event-inline" %}{% bootstrap_field sform.cfp_abstract_min_length use_label=False layout="inline" %}{% bootstrap_field sform.cfp_abstract_max_length use_label=False layout="inline" %}
    {% translate "Description" %}{% bootstrap_field sform.cfp_ask_description layout="event-inline" %}{% bootstrap_field sform.cfp_description_min_length use_label=False layout="inline" %}{% bootstrap_field sform.cfp_description_max_length use_label=False layout="inline" %}
    {% translate "Track" %}{% bootstrap_field sform.cfp_ask_track layout="event-inline" %}
    {% translate "Duration" %}{% bootstrap_field sform.cfp_ask_duration layout='event-inline' %}{{ phrases.base.language }}{% bootstrap_field sform.cfp_ask_content_locale layout="event-inline" %}
    -
    - {% bootstrap_field form.count_length_in layout='event' %} + {% endif %} + + {% translate "Additional speakers" %} + {% bootstrap_field sform.cfp_ask_additional_speaker layout="event-inline" %} + + + + + {% translate "Notes" %} + {% bootstrap_field sform.cfp_ask_notes layout="event-inline" %} + + + + + {% translate "Recording opt-out" %} + {% bootstrap_field sform.cfp_ask_do_not_record layout="event-inline" %} + + + + + {% translate "Session image" %} + {% bootstrap_field sform.cfp_ask_image layout="event-inline" %} + + + + + {% translate "Duration" %} + {% bootstrap_field sform.cfp_ask_duration layout="event-inline" %} + + + + +
    +
    +
    + +
    + {% translate "Speaker information" %} + + +
    -
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {% translate "Minimum length" %}{% translate "Maximum length" %}
    {% translate "Biography" %}{% bootstrap_field sform.cfp_ask_biography layout="event-inline" %}{% bootstrap_field sform.cfp_biography_min_length use_label=False layout="inline" %}{% bootstrap_field sform.cfp_biography_max_length use_label=False layout="inline" %}
    {% translate "Profile picture" %}{% bootstrap_field sform.cfp_ask_avatar layout="event-inline" %}
    {% translate "Availability" %}{% bootstrap_field sform.cfp_ask_availabilities layout="event-inline" %}
    +
    + {% bootstrap_field form.count_length_in layout="event" %} +
    +
    -
    - {% translate "Speaker Profile" %} -
    - {% translate "Speaker Profile" %} -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    {% translate "Profile picture" %}{% bootstrap_field sform.cfp_ask_avatar layout='event-inline' %}
    {% translate "Profile picture source" %}{% bootstrap_field sform.cfp_ask_avatar_source layout='event-inline' %}{% bootstrap_field sform.cfp_avatar_source_min_length use_label=False layout='inline' %}{% bootstrap_field sform.cfp_avatar_source_max_length use_label=False layout='inline' %}
    {% translate "Profile picture license" %}{% bootstrap_field sform.cfp_ask_avatar_license layout='event-inline' %}{% bootstrap_field sform.cfp_avatar_license_min_length use_label=False layout='inline' %}{% bootstrap_field sform.cfp_avatar_license_max_length use_label=False layout='inline' %}
    {% translate "Biography" %}{% bootstrap_field sform.cfp_ask_biography layout='event-inline' %}{% bootstrap_field sform.cfp_biography_min_length use_label=False layout='inline' %}{% bootstrap_field sform.cfp_biography_max_length use_label=False layout='inline' %}
    -
    - {% include "orga/includes/submit_row.html" %} - -
    + {% include "orga/includes/submit_row.html" %} + +
-{% endblock %} +
+{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/track_delete.html b/src/pretalx/orga/templates/orga/cfp/track_delete.html deleted file mode 100644 index 4449f572e..000000000 --- a/src/pretalx/orga/templates/orga/cfp/track_delete.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "orga/cfp/base.html" %} -{% load i18n %} -{% block content %} -

- {% translate "Do you really want to delete this track?" %} – {{ quotation_open }}{{ object.name }}{{ quotation_close }} -

-
- {% csrf_token %} -
- - {% translate "Back" %} - - -
-
-{% endblock %} diff --git a/src/pretalx/orga/templates/orga/cfp/track_form.html b/src/pretalx/orga/templates/orga/cfp/track_form.html index 2a9e52ee6..935c9f040 100644 --- a/src/pretalx/orga/templates/orga/cfp/track_form.html +++ b/src/pretalx/orga/templates/orga/cfp/track_form.html @@ -1,22 +1,24 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} {% block stylesheets %} - -{% endblock %} + +{% endblock stylesheets %} {% block scripts %} {% compress js %} {% endcompress %} -{% endblock %} +{% endblock scripts %} +{% block extra_title %}{% if form.instance.name %}{{ form.instance.name }}{% else %}{% translate "New track" %}{% endif %} :: {% endblock extra_title %} -{% block cfp_content %} +{% block content %}

{% if form.instance.name %} {% translate "Track" %}: {{ form.instance.name }} @@ -27,11 +29,13 @@

{% csrf_token %} {% bootstrap_form_errors form %} - {% bootstrap_field form.name layout='event' %} - {% bootstrap_field form.description layout='event' %} - {% bootstrap_field form.color layout='event' addon_before="" addon_before_class="colorpicker-input-addon color-visible" %} - {% bootstrap_field form.requires_access_code layout='event' %} + {% bootstrap_field form.name layout="event" %} + {% bootstrap_field form.description layout="event" %} + {% bootstrap_field form.color layout="event" addon_before="" addon_before_class="colorpicker-input-addon color-visible" %} + {% bootstrap_field form.requires_access_code layout="event" %} + {% include "orga/includes/submit_row.html" %} +
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/cfp/track_view.html b/src/pretalx/orga/templates/orga/cfp/track_view.html index bf28b93ed..c75cab507 100644 --- a/src/pretalx/orga/templates/orga/cfp/track_view.html +++ b/src/pretalx/orga/templates/orga/cfp/track_view.html @@ -1,15 +1,31 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load i18n %} +{% load static %} -{% block cfp_content %} -

{% translate "Tracks" %}

-
- {% blocktranslate trimmed %} - Tracks are used to sort your sessions into categories. You can use the - CfP settings to determine if speakers can select the track for their session - themselves. Track colors are helpful to help attendees navigate your schedule. - {% endblocktranslate %} -
+{% block extra_title %}{% translate "Tracks" %} :: {% endblock extra_title %} + +{% block scripts %} + + +{% endblock scripts %} + +{% block content %} +

+ {% translate "Tracks" %} + + + +

+ +
+ {% blocktranslate trimmed %} + Tracks are used to sort your sessions into categories. You can use the + CfP settings to determine if speakers can select the track for their session + themselves. Track colors are helpful to help attendees navigate your schedule. + {% endblocktranslate %} +
+
@@ -30,32 +46,30 @@

{% translate "Tracks" %}

{% for track in tracks %} -
- {{ track.name }} - + {{ track.name }} {% if track.requires_access_code %} {% endif %} -
+ +
+ - - {{ track.submissions.all.count }} - + {{ track.submissions.all.count }} + {% include "orga/includes/order_object.html" with object=track %} - + + - + @@ -64,5 +78,7 @@

{% translate "Tracks" %}

+ {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/event/dashboard.html b/src/pretalx/orga/templates/orga/event/dashboard.html index ab7f473e4..769c40147 100644 --- a/src/pretalx/orga/templates/orga/event/dashboard.html +++ b/src/pretalx/orga/templates/orga/event/dashboard.html @@ -1,18 +1,19 @@ {% extends "orga/base.html" %} + {% load i18n %} {% load rules %} {% block content %} - {% has_perm 'orga.view_speakers' request.user request.event as can_view_speakers %} - {% has_perm 'orga.change_settings' request.user request.event as can_change_settings %} + {% has_perm "orga.view_speakers" request.user request.event as can_view_speakers %} + {% has_perm "orga.change_settings" request.user request.event as can_change_settings %} {% if "congratulations" in request.GET %}
+ {% blocktranslate trimmed %} Your event has been created and you’re ready to go! Check out the event settings, set up your Call for Papers with session types and questions, and you’re ready to go! {% endblocktranslate %} -
{% endif %}

@@ -23,7 +24,7 @@

{% for stp in timeline %} -
+
@@ -98,8 +99,19 @@

{{ tile.large }}

{% if history and can_view_speakers %}
-

{% translate "History" %}

{% if can_change_settings %}({% translate "Full history" %}){% endif %}

- {% include "common/logs.html" with entries=history %} +
+

{% translate "History" %}

+ {% if can_change_settings %} + + + ({% translate "Full history" %}) + + + {% endif %}
+ + {% include "common/logs.html" with entries=history %} + +
{% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/event/delete.html b/src/pretalx/orga/templates/orga/event/delete.html deleted file mode 100644 index 9b1bfea2d..000000000 --- a/src/pretalx/orga/templates/orga/event/delete.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "orga/cfp/base.html" %} -{% load i18n %} -{% block content %} -

- {% translate "Do you really want to delete this event?" %} -

- {{ quotation_open }}{{ request.event.name }}{{ quotation_close }} – {% translate "ALL related data, such as proposals, and speaker profiles, and uploads, will also be deleted and cannot be restored." %}

-

- {% csrf_token %} -
- - {% translate "Back" %} - - -
-
-{% endblock %} diff --git a/src/pretalx/orga/templates/orga/event/history.html b/src/pretalx/orga/templates/orga/event/history.html index f276b8ffd..a53b068cd 100644 --- a/src/pretalx/orga/templates/orga/event/history.html +++ b/src/pretalx/orga/templates/orga/event/history.html @@ -1,10 +1,15 @@ {% extends "orga/base.html" %} + {% load i18n %} +{% block extra_title %}{% translate "Event History" %} :: {% endblock extra_title %} + {% block content %}

{% translate "Event History" %}

+ {% include "common/logs.html" with entries=log_entries %} {% include "orga/includes/pagination.html" %} +
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/event/live.html b/src/pretalx/orga/templates/orga/event/live.html index a8de6402a..174d96989 100644 --- a/src/pretalx/orga/templates/orga/event/live.html +++ b/src/pretalx/orga/templates/orga/event/live.html @@ -1,8 +1,17 @@ {% extends "orga/base.html" %} + {% load i18n %} +{% block extra_title %}{% if request.event.is_public %}{% translate "Deactivate event" %}{% else %}{% translate "Go live" %}{% endif %} :: {% endblock extra_title %} + {% block content %} -

{% if request.event.is_public %}{% translate "Deactivate event" %}{% else %}{% translate "Go live" %}{% endif %}

+

+ {% if request.event.is_public %} + {% translate "Deactivate event" %} + {% else %} + {% translate "Go live" %} + {% endif %} +

{% if request.event.is_public %} {% blocktranslate trimmed %} @@ -19,7 +28,11 @@

{% if request.event.is_public %}{% translate "Deactivate event" %}{% else %}

{% translate "Your event may not be ready for release yet!" %}

{% endif %} @@ -27,7 +40,11 @@

{% translate "Your event may not be ready for release yet!" %}

{% translate "There may be easy ways to improve your event before its release!" %}

{% endif %} @@ -44,4 +61,5 @@

{% translate "There may be easy ways to improve your event before its releas {% endif %}

-{% endblock %} +

+{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/event/wizard/base.html b/src/pretalx/orga/templates/orga/event/wizard/base.html index 144b363ba..53ac6b653 100644 --- a/src/pretalx/orga/templates/orga/event/wizard/base.html +++ b/src/pretalx/orga/templates/orga/event/wizard/base.html @@ -1,22 +1,25 @@ {% extends "orga/base.html" %} + {% load bootstrap4 %} {% load i18n %} +{% block extra_title %}{% translate "New event" %} :: {% endblock extra_title %} + {% block content %}
{% translate "New event" %} {% blocktranslate with total=wizard.steps.count current=wizard.steps.step1 trimmed %} - Step {{current}} of {{ total }} + Step {{ current }} of {{ total }} {% endblocktranslate %} {{ wizard.form.media }} - {% block wizard_content %}{% endblock %} + {% block wizard_content %}{% endblock wizard_content %} {% csrf_token %} {{ wizard.management_form }} - {% bootstrap_form wizard.form layout='event' %} + {% bootstrap_form wizard.form layout="event" %}
{% if wizard.steps.prev %} @@ -26,4 +29,4 @@ {% endif %}
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/event/wizard/basics.html b/src/pretalx/orga/templates/orga/event/wizard/basics.html index 0b1d05179..cc4145926 100644 --- a/src/pretalx/orga/templates/orga/event/wizard/basics.html +++ b/src/pretalx/orga/templates/orga/event/wizard/basics.html @@ -5,8 +5,8 @@ {% load static %} {% block scripts %} - {% compress js %}{% endcompress %} -{% endblock %} + {% compress js %}{% endcompress %} +{% endblock scripts %} {% block content %}
@@ -14,23 +14,23 @@ {% translate "New event" %} {% blocktranslate with total=wizard.steps.count current=wizard.steps.step1 trimmed %} - Step {{current}} of {{ total }} + Step {{ current }} of {{ total }} {% endblocktranslate %} {{ wizard.form.media }} - {% block wizard_content %}{% endblock %} + {% block wizard_content %}{% endblock wizard_content %} {% csrf_token %} {{ wizard.management_form }} {% bootstrap_form_errors wizard.form %} - {% bootstrap_field wizard.form.name layout='event' %} + {% bootstrap_field wizard.form.name layout="event" %}
{% translate "We recommend a short form of at most 30 characters." %}
- {% bootstrap_field wizard.form.slug layout='event' addon_before=url_placeholder addon_before_class="input-group-prepend input-group-text" %} - {% bootstrap_field wizard.form.timezone layout='event' %} - {% bootstrap_field wizard.form.email layout='event' %} - {% bootstrap_field wizard.form.locale layout='event' %} + {% bootstrap_field wizard.form.slug layout="event" addon_before=url_placeholder addon_before_class="input-group-prepend input-group-text" %} + {% bootstrap_field wizard.form.timezone layout="event" %} + {% bootstrap_field wizard.form.email layout="event" %} + {% bootstrap_field wizard.form.locale layout="event" %}
{% if wizard.steps.prev %} @@ -40,4 +40,4 @@ {% endif %}
-{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/event/wizard/copy.html b/src/pretalx/orga/templates/orga/event/wizard/copy.html index d9e53d06a..b3360423c 100644 --- a/src/pretalx/orga/templates/orga/event/wizard/copy.html +++ b/src/pretalx/orga/templates/orga/event/wizard/copy.html @@ -1,8 +1,9 @@ {% extends "orga/event/wizard/base.html" %} + {% load i18n %} {% block wizard_content %}
{% translate "You can copy settings from previous events here, such as mail settings, session types, and email templates. Please check those settings once the event has been created!" %}
-{% endblock %} +{% endblock wizard_content %} diff --git a/src/pretalx/orga/templates/orga/event/wizard/display.html b/src/pretalx/orga/templates/orga/event/wizard/display.html index a8e84970b..ac99d6ca5 100644 --- a/src/pretalx/orga/templates/orga/event/wizard/display.html +++ b/src/pretalx/orga/templates/orga/event/wizard/display.html @@ -1,21 +1,22 @@ {% extends "orga/event/wizard/base.html" %} + {% load compress %} {% load i18n %} {% load static %} {% block stylesheets %} - -{% endblock %} + +{% endblock stylesheets %} {% block scripts %} {% compress js %} {% endcompress %} -{% endblock %} +{% endblock scripts %} {% block wizard_content %}
{% translate "Choose your inital customisations here – you can always change them later, or enhance them with custom CSS." %}
-{% endblock %} +{% endblock wizard_content %} diff --git a/src/pretalx/orga/templates/orga/event/wizard/initial.html b/src/pretalx/orga/templates/orga/event/wizard/initial.html index ab913c1ff..58c0c3d8f 100644 --- a/src/pretalx/orga/templates/orga/event/wizard/initial.html +++ b/src/pretalx/orga/templates/orga/event/wizard/initial.html @@ -1,8 +1,3 @@ {% extends "orga/event/wizard/base.html" %} -{% load i18n %} -{% block wizard_content %} -
- {% translate "The event creation assistant will help you to get started with a new event." %} -
-{% endblock %} +{% load i18n %} diff --git a/src/pretalx/orga/templates/orga/event/wizard/timeline.html b/src/pretalx/orga/templates/orga/event/wizard/timeline.html index 0826ccca3..140f5a971 100644 --- a/src/pretalx/orga/templates/orga/event/wizard/timeline.html +++ b/src/pretalx/orga/templates/orga/event/wizard/timeline.html @@ -10,10 +10,4 @@ {% endcompress %} -{% endblock %} - -{% block wizard_content %} -
- {% translate "What’s your timeline like? You can later add session types with different deadlines (e.g. if you accept workshop proposals later than your talk proposals)." %} -
-{% endblock %} +{% endblock scripts %} diff --git a/src/pretalx/orga/templates/orga/event_list.html b/src/pretalx/orga/templates/orga/event_list.html index e9124aadf..a0ed76c04 100644 --- a/src/pretalx/orga/templates/orga/event_list.html +++ b/src/pretalx/orga/templates/orga/event_list.html @@ -1,11 +1,12 @@ {% extends "orga/base.html" %} + {% load i18n %} {% load rules %} -{% block title %}{% translate "Dashboard" %}{% endblock %} +{% block extra_title %}{% translate "Dashboard" %} :: {% endblock extra_title %} {% block content %} - {% has_perm 'orga.create_events' request.user request.user as can_create_event %} + {% has_perm "orga.create_events" request.user request.user as can_create_event %}
@@ -20,31 +21,7 @@

{% translate "No events" %}

{% endif %} {% for event in current_orga_events %} - -

{{ event.name }}

-
-
{{ event.get_date_range_display }}
-
-
-
- {% if event.submission_count %} - {{ event.submission_count }} - {% blocktranslate trimmed count count=event.submission_count %} - proposal - {% plural %} - proposals - {% endblocktranslate %} - {% else %} - {% translate "No proposals yet" %} - {% endif %} -
- {% if event.is_public %} -
{% translate "Live" %}
- {% else %} -
{% translate "Not public" %}
- {% endif %} -
-
+ {% include "orga/includes/dashboard_block_event.html" %} {% endfor %} {% if can_create_event %} @@ -56,34 +33,8 @@

{{ event.name }}

{% translate "Your most recent events" %}

{% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/includes/dashboard_block_event.html b/src/pretalx/orga/templates/orga/includes/dashboard_block_event.html new file mode 100644 index 000000000..aaa38e93f --- /dev/null +++ b/src/pretalx/orga/templates/orga/includes/dashboard_block_event.html @@ -0,0 +1,32 @@ +{% load i18n %} + +

{{ event.name }}

+
+
{{ event.get_date_range_display }}
+
+
+
+ {% if event.submission_count %} + {{ event.submission_count }} + {% blocktranslate trimmed count count=event.submission_count %} + proposal + {% plural %} + proposals + {% endblocktranslate %} + {% else %} + {% translate "No proposals yet" %} + {% endif %} +
+ {% if event.is_public %} +
+ {% if event.is_open %} + {% translate "CfP open" %} + {% else %} + {% translate "live" %} + {% endif %} +
+ {% else %} +
{% translate "Not public" %}
+ {% endif %} +
+
diff --git a/src/pretalx/orga/templates/orga/includes/order_object.html b/src/pretalx/orga/templates/orga/includes/order_object.html index 17f3a0a66..f4e010bd9 100644 --- a/src/pretalx/orga/templates/orga/includes/order_object.html +++ b/src/pretalx/orga/templates/orga/includes/order_object.html @@ -1,4 +1,5 @@ {% load i18n %} + {% if not forloop.last %} 1 %}
{% endif %} diff --git a/src/pretalx/orga/templates/orga/includes/pagination_size.html b/src/pretalx/orga/templates/orga/includes/pagination_size.html index 213c4b31d..eb7fe87c0 100644 --- a/src/pretalx/orga/templates/orga/includes/pagination_size.html +++ b/src/pretalx/orga/templates/orga/includes/pagination_size.html @@ -1,12 +1,10 @@ -{% load url_replace %} {% load i18n %} - - {% if pagination_size == 100_000 %} - {% translate "All" %} - {% else %} - {{ pagination_size }} - {% endif %} + + {% if pagination_size == 100_000 %} + {{ phrases.base.all_choices }} + {% else %} + {{ pagination_size }} + {% endif %} diff --git a/src/pretalx/orga/templates/orga/includes/submit_row.html b/src/pretalx/orga/templates/orga/includes/submit_row.html index c8684ccf1..42e17655e 100644 --- a/src/pretalx/orga/templates/orga/includes/submit_row.html +++ b/src/pretalx/orga/templates/orga/includes/submit_row.html @@ -1,4 +1,5 @@ {% load i18n %} +
@@ -8,7 +9,11 @@ {% if submit_name %}name="{{ submit_name }}"{% endif %} > - {% if submit_label %}{{ submit_label }}{% else %}{% translate "Save" %}{% endif %} + {% if submit_label %} + {{ submit_label }} + {% else %} + {{ phrases.base.save }} + {% endif %}
diff --git a/src/pretalx/orga/templates/orga/invitation.html b/src/pretalx/orga/templates/orga/invitation.html index af2a755b2..1c815a3d8 100644 --- a/src/pretalx/orga/templates/orga/invitation.html +++ b/src/pretalx/orga/templates/orga/invitation.html @@ -2,7 +2,7 @@ {% load bootstrap4 %} {% load i18n %} -{% block title %}{% translate "Invitation" %} :: {{ invitation.team.name }}{% endblock %} +{% block extra_title %}{% translate "Invitation" %} :: {{ invitation.team.name }} :: {% endblock extra_title %} {% block content %}

{% blocktranslate with organiser=invitation.team.organiser.name name=invitation.team.name trimmed %} @@ -24,7 +24,9 @@


+ {% include "common/auth.html" %} + {% else %}
{% csrf_token %} @@ -46,4 +48,4 @@

{% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/mails/_mail_editor.html b/src/pretalx/orga/templates/orga/mails/_mail_editor.html index 8356fefb7..73f2272de 100644 --- a/src/pretalx/orga/templates/orga/mails/_mail_editor.html +++ b/src/pretalx/orga/templates/orga/mails/_mail_editor.html @@ -1,53 +1,57 @@ {% extends "orga/mails/base.html" %} + {% load bootstrap4 %} {% load i18n %} {% load static %} -{% block title %}{% translate "Email editor" %}{% endblock %} +{% block extra_title %}{% translate "Email editor" %} :: {% endblock extra_title %} {% block mail_content %}
{% csrf_token %}

- {% block email_editor_title %}{% translate "Email editor" %}{% endblock %} + {% block email_editor_title %} + {% translate "Email editor" %} + {% endblock email_editor_title %}

-

{% block email_editor_title_detail %}{% endblock %}

+

+ + {% block email_editor_title_detail %}{% endblock email_editor_title_detail %} + +

{% bootstrap_form_errors form %}
- - {% translate "Recipients" %} - - {% block recipient_form %} - {% endblock %} + {% translate "Recipients" %} + {% block recipient_form %}{% endblock recipient_form %}
{% translate "Advanced settings" %}
{% block advanced_recipient_form %} - {% bootstrap_field form.reply_to layout='event' %} - {% bootstrap_field form.bcc layout='event' %} - {% endblock %} + {% bootstrap_field form.reply_to layout="event" %} + {% bootstrap_field form.bcc layout="event" %} + {% endblock advanced_recipient_form %}
- - {% translate "Content" %} - - {% bootstrap_field form.subject layout='event' %} - {% bootstrap_field form.text layout='event' %} + {% translate "Content" %} + {% bootstrap_field form.subject layout="event" %} + {% bootstrap_field form.text layout="event" %}
{% translate "Placeholders" %} + {% include "orga/mails/_placeholder_group.html" with placeholders=form.grouped_placeholders.submission tag="submission" %} {% include "orga/mails/_placeholder_group.html" with placeholders=form.grouped_placeholders.slot tag="slot" %} {% include "orga/mails/_placeholder_group.html" with placeholders=form.grouped_placeholders.user tag="user" %} {% include "orga/mails/_placeholder_group.html" with placeholders=form.grouped_placeholders.event tag="event" %} {% include "orga/mails/_placeholder_group.html" with placeholders=form.grouped_placeholders.other tag="other" %} +
{% block email_editor_preview %} @@ -65,7 +69,10 @@

{% block email_editor_title_ {% blocktranslate trimmed %} You have placeholders in your email that are either not valid or not valid for every email! {% endblocktranslate %} -
    {% for w in form.warnings %}
  • {{{w}}}
  • {% endfor %}
+
    + {# { is the HTML entity for {, which would break django template syntax #} + {% for w in form.warnings %}
  • {{{ w }}}
  • {% endfor %} +
{% blocktranslate trimmed %} Emails where placeholders are invalid will not be created! For example, if you are using {session_room}, but some proposals don’t have a room yet, only emails for proposals with a scheduled room will be created. @@ -76,21 +83,23 @@

{% block email_editor_title_
{% for locale, out in output.items %}
- {{ out.subject|safe }}

+ {{ out.subject|safe }} +
+
{{ out.html|safe }}
{% endfor %}
{% endif %} - {% endblock %} + {% endblock email_editor_preview %} {% block skip_queue %} {% if form.skip_queue and request.method == "POST" %}
- {% bootstrap_field form.skip_queue layout='event' %} + {% bootstrap_field form.skip_queue layout="event" %} {% endif %} - {% endblock %} + {% endblock skip_queue %} {% block email_editor_actions %}
@@ -100,12 +109,16 @@

{% block email_editor_title_ {% translate "Preview email" %} {% if request.method == "POST" %} - + {% endif %}

- {% endblock %} + {% endblock email_editor_actions %} - -{% endblock %} + +{% endblock mail_content %} diff --git a/src/pretalx/orga/templates/orga/mails/_placeholder_group.html b/src/pretalx/orga/templates/orga/mails/_placeholder_group.html index 5388ddd63..37a9f0fd2 100644 --- a/src/pretalx/orga/templates/orga/mails/_placeholder_group.html +++ b/src/pretalx/orga/templates/orga/mails/_placeholder_group.html @@ -5,19 +5,19 @@
{% if tag == "submission" %} - {% blocktranslate trimmed count count=1 %} - Session - {% plural %} - Sessions - {% endblocktranslate %} + {{ phrases.schedule.sessions }} {% elif tag == "slot" %} - {% translate "Schedule" %} + {{ phrases.schedule.schedule }} {% elif tag == "user" %} {% translate "User" %} {% elif tag == "event" %} - {% translate "Event" %} + {% blocktranslate trimmed count count=1 %} + Event + {% plural %} + Events + {% endblocktranslate %} {% elif tag == "other" %} - {% translate "Other" %} + {% translate "Other" context "category of items" %} {% else %} {{ tag }} {% endif %} @@ -31,7 +31,7 @@
  • - {% templatetag openbrace %}{{ placeholder.identifier}}{% templatetag closebrace %} + {% templatetag openbrace %}{{ placeholder.identifier }}{% templatetag closebrace %} diff --git a/src/pretalx/orga/templates/orga/mails/base.html b/src/pretalx/orga/templates/orga/mails/base.html index 01185886c..3c665fcb9 100644 --- a/src/pretalx/orga/templates/orga/mails/base.html +++ b/src/pretalx/orga/templates/orga/mails/base.html @@ -1,5 +1,5 @@ {% extends "orga/base.html" %} + {% block content %} - {% block mail_content %} - {% endblock %} -{% endblock %} + {% block mail_content %}{% endblock mail_content %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/mails/compose_choice.html b/src/pretalx/orga/templates/orga/mails/compose_choice.html index f48745ed0..18f4e822e 100644 --- a/src/pretalx/orga/templates/orga/mails/compose_choice.html +++ b/src/pretalx/orga/templates/orga/mails/compose_choice.html @@ -1,5 +1,9 @@ {% extends "orga/base.html" %} + {% load i18n %} + +{% block extra_title %}{% translate "Send emails" %} :: {% endblock extra_title %} + {% block content %}

    {% translate "Send emails" %}

    -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/mails/compose_reviewer_mail_form.html b/src/pretalx/orga/templates/orga/mails/compose_reviewer_mail_form.html index eab698c7f..7eae1ca3b 100644 --- a/src/pretalx/orga/templates/orga/mails/compose_reviewer_mail_form.html +++ b/src/pretalx/orga/templates/orga/mails/compose_reviewer_mail_form.html @@ -1,25 +1,24 @@ {% extends "orga/mails/_mail_editor.html" %} + {% load i18n %} {% load bootstrap4 %} {% block email_editor_title_detail %} - {% translate "Reviewers and team members" %} -{% endblock %} + {% translate "Reviewers and team members" %} +{% endblock email_editor_title_detail %} {% block skip_queue %} -
    - {% blocktranslate trimmed %} - Emails to reviewers and other team members are always sent out directly, - and are not placed in the outbox first. - They also do not show up in the list of sent mails. - {% endblocktranslate %} -
    -{% endblock %} +
    + {% blocktranslate trimmed %} + Emails to reviewers and other team members are always sent out directly, + and are not placed in the outbox first. + They also do not show up in the list of sent mails. + {% endblocktranslate %} +
    +{% endblock skip_queue %} {% block recipient_form %} - {% bootstrap_field form.recipients layout='event' %} -{% endblock %} + {% bootstrap_field form.recipients layout="event" %} +{% endblock recipient_form %} -{% block send_button_label %} - {% translate "Send" %} -{% endblock %} +{% block send_button_label %}{{ phrases.base.send }}{% endblock send_button_label %} diff --git a/src/pretalx/orga/templates/orga/mails/compose_session_mail_form.html b/src/pretalx/orga/templates/orga/mails/compose_session_mail_form.html index 55958b59a..fe39827b9 100644 --- a/src/pretalx/orga/templates/orga/mails/compose_session_mail_form.html +++ b/src/pretalx/orga/templates/orga/mails/compose_session_mail_form.html @@ -1,11 +1,11 @@ {% extends "orga/mails/_mail_editor.html" %} + {% load bootstrap4 %} {% load i18n %} -{% load url_replace %} {% block email_editor_title_detail %} {% translate "Sessions, proposals, speakers" %} -{% endblock %} +{% endblock email_editor_title_detail %} {% block recipient_form %} @@ -17,7 +17,7 @@ {% blocktranslate trimmed with question=form.filter_question %} Recipients filtered by answers to question “{{ question }}”. {% endblocktranslate %} - + {% translate "Remove filter" %} @@ -29,7 +29,7 @@ {% blocktranslate trimmed with search=form.filter_search %} Recipients filtered by search “{{ search }}”. {% endblocktranslate %} - + {% translate "Remove filter" %} @@ -40,19 +40,19 @@
    - {% bootstrap_field form.state layout='inline' form_group_class='d-inline-flex col-md-6 pl-0 mr-3' %} - {% bootstrap_field form.pending_state__isnull layout='inline' form_group_class='d-inline-flex' %} + {% bootstrap_field form.state layout="inline" form_group_class="d-inline-flex col-md-6 pl-0 mr-3" %} + {% bootstrap_field form.pending_state__isnull layout="inline" form_group_class="d-inline-flex" %}
    - {% if form.submission_type %}{% bootstrap_field form.submission_type layout='event' %}{% endif %} - {% if form.track %}{% bootstrap_field form.track layout='event' %}{% endif %} - {% if form.content_locale %}{% bootstrap_field form.content_locale layout='event' %}{% endif %} - {% if form.tags %}{% bootstrap_field form.tags layout='event' %}{% endif %} + {% if form.submission_type %}{% bootstrap_field form.submission_type layout="event" %}{% endif %} + {% if form.track %}{% bootstrap_field form.track layout="event" %}{% endif %} + {% if form.content_locale %}{% bootstrap_field form.content_locale layout="event" %}{% endif %} + {% if form.tags %}{% bootstrap_field form.tags layout="event" %}{% endif %} - {% bootstrap_field form.submissions layout='event' %} - {% bootstrap_field form.speakers layout='event' %} + {% bootstrap_field form.submissions layout="event" %} + {% bootstrap_field form.speakers layout="event" %} -{% endblock %} +{% endblock recipient_form %} diff --git a/src/pretalx/orga/templates/orga/mails/confirm.html b/src/pretalx/orga/templates/orga/mails/confirm.html deleted file mode 100644 index 3023f0d72..000000000 --- a/src/pretalx/orga/templates/orga/mails/confirm.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "orga/mails/base.html" %} -{% load i18n %} -{% block mail_content %} -

    - {% translate "Please confirm:" %} -

    - {{ question }} -
    - {% csrf_token %} -
    - - {% translate "Back" %} - - -
    -
    -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/mails/outbox_form.html b/src/pretalx/orga/templates/orga/mails/outbox_form.html index f908a871f..39253f97e 100644 --- a/src/pretalx/orga/templates/orga/mails/outbox_form.html +++ b/src/pretalx/orga/templates/orga/mails/outbox_form.html @@ -3,6 +3,8 @@ {% load i18n %} {% load rich_text %} +{% block extra_title %}{% translate "Mail Editor" %} :: {% endblock extra_title %} + {% block mail_content %} {% if form.instance.sent %}
    @@ -17,22 +19,22 @@

    {% translate "Mail Editor" %}

    {% bootstrap_form_errors form %} {% if not form.read_only %} - {% bootstrap_field form.to layout='event' %} - {% if form.to_users %}{% bootstrap_field form.to_users layout='event' %}{% endif %} - {% bootstrap_field form.reply_to layout='event' %} - {% bootstrap_field form.cc layout='event' %} - {% bootstrap_field form.bcc layout='event' %} - {% bootstrap_field form.subject layout='event' %} - {% bootstrap_field form.text layout='event' %} + {% bootstrap_field form.to layout="event" %} + {% if form.to_users %} + {% bootstrap_field form.to_users layout="event" %} + {% endif %} + {% bootstrap_field form.reply_to layout="event" %} + {% bootstrap_field form.cc layout="event" %} + {% bootstrap_field form.bcc layout="event" %} + {% bootstrap_field form.subject layout="event" %} + {% bootstrap_field form.text layout="event" %} {% else %}
    -
    - {{ form.instance.to|default:"-" }} -
    +
    {{ form.instance.to|default:"-" }}
    {% if form.to_users %} @@ -43,9 +45,7 @@

    {% translate "Mail Editor" %}

    {% for user in form.instance.to_users.all %} {% if user in request.event.submitters %} - - {{ user }} - + {{ user }} {% else %} {{ user }}{% endif %}{% if not forloop.last %}, {% endif %} @@ -58,45 +58,35 @@

    {% translate "Mail Editor" %}

    -
    - {{ form.instance.reply_to|default:"-" }} -
    +
    {{ form.instance.reply_to|default:"-" }}
    -
    - {{ form.instance.cc|default:"-" }} -
    +
    {{ form.instance.cc|default:"-" }}
    -
    - {{ form.instance.bcc|default:"-" }} -
    +
    {{ form.instance.bcc|default:"-" }}
    -
    - {{ form.instance.subject }} -
    +
    {{ form.instance.subject }}
    -
    - {{ form.instance.text|rich_text }} -
    +
    {{ form.instance.text|rich_text }}
    {% endif %} @@ -105,9 +95,11 @@

    {% translate "Mail Editor" %}

    {% if action == "edit" %} {% translate "Discard" %} {% translate "Discard all from this template" %} - - - + + + {% elif action == "view" %} {% if form.instance.sent %} @@ -118,4 +110,4 @@

    {% translate "Mail Editor" %}

    -{% endblock %} +{% endblock mail_content %} diff --git a/src/pretalx/orga/templates/orga/mails/outbox_list.html b/src/pretalx/orga/templates/orga/mails/outbox_list.html index c6dee2ba7..1d867762e 100644 --- a/src/pretalx/orga/templates/orga/mails/outbox_list.html +++ b/src/pretalx/orga/templates/orga/mails/outbox_list.html @@ -1,6 +1,6 @@ {% extends "orga/mails/base.html" %} + {% load i18n %} -{% load url_replace %} {% block mail_content %}

    @@ -15,7 +15,9 @@

    + {% include "common/search_form.html" %} + {% if is_paginated and page_obj.paginator.num_pages > 1 %} @@ -36,14 +38,14 @@

    - {% translate "Subject" %} - - + {{ phrases.base.email_subject }} + + {% translate "To" %} - - + + @@ -53,9 +55,7 @@

    {% for mail in mails %} - - {{ mail.subject }} - + {{ mail.subject }} {% for user in mail.to_users.all %} @@ -64,9 +64,7 @@

    {{ user }} {% else %}{{ user }}{% endif %}{% if not forloop.last or mail.to %}, {% endif %} {% endfor %} - {% if mail.to %} - {{ mail.to }} - {% endif %} + {% if mail.to %}{{ mail.to }}{% endif %} {% if mail.attachments %} @@ -85,19 +83,13 @@

    {% endif %} - + - + - + @@ -106,5 +98,7 @@

    + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock mail_content %} diff --git a/src/pretalx/orga/templates/orga/mails/send_draft_reminders.html b/src/pretalx/orga/templates/orga/mails/send_draft_reminders.html index 2b35c222a..4811b50d8 100644 --- a/src/pretalx/orga/templates/orga/mails/send_draft_reminders.html +++ b/src/pretalx/orga/templates/orga/mails/send_draft_reminders.html @@ -1,4 +1,5 @@ {% extends "orga/mails/base.html" %} + {% load bootstrap4 %} {% load i18n %} @@ -14,12 +15,10 @@

    {% translate "Send reminder to unsubmitted proposal drafts" %}

    {% endblocktranslate %}
    {% bootstrap_form_errors form %} - {% bootstrap_field form.subject layout='event' %} - {% bootstrap_field form.text layout='event' %} -
    - - - -
    + {% bootstrap_field form.subject layout="event" %} + {% bootstrap_field form.text layout="event" %} + + {% include "orga/includes/submit_row.html" with submit_label=phrases.base.send %} + -{% endblock %} +{% endblock mail_content %} diff --git a/src/pretalx/orga/templates/orga/mails/sent_list.html b/src/pretalx/orga/templates/orga/mails/sent_list.html index ff488ace6..7efe91421 100644 --- a/src/pretalx/orga/templates/orga/mails/sent_list.html +++ b/src/pretalx/orga/templates/orga/mails/sent_list.html @@ -1,7 +1,7 @@ {% extends "orga/mails/base.html" %} + {% load bootstrap4 %} {% load i18n %} -{% load url_replace %} {% block mail_content %}

    @@ -14,20 +14,20 @@

    - {% translate "Subject" %} - - + {{ phrases.base.email_subject }} + + {% translate "To" %} - - + + {% translate "Sent" %} - - + + @@ -35,9 +35,7 @@

    {% for mail in mails %} - - {{ mail.subject }} - + {{ mail.subject }} {% for user in mail.to_users.all %} @@ -46,9 +44,7 @@

    {{ user }} {% else %}{{ user }}{% endif %}{% if not forloop.last or mail.to %}, {% endif %} {% endfor %} - {% if mail.to %} - {{ mail.to }} - {% endif %} + {% if mail.to %}{{ mail.to }}{% endif %} {% if mail.attachments %} @@ -66,13 +62,13 @@

    {% endif %} {% endif %} - - {{ mail.sent }} - + {{ mail.sent }} {% endfor %}

  • + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock mail_content %} diff --git a/src/pretalx/orga/templates/orga/mails/template_form.html b/src/pretalx/orga/templates/orga/mails/template_form.html index e70c8a266..cf6b06715 100644 --- a/src/pretalx/orga/templates/orga/mails/template_form.html +++ b/src/pretalx/orga/templates/orga/mails/template_form.html @@ -1,10 +1,12 @@ {% extends "orga/mails/_mail_editor.html" %} + {% load bootstrap4 %} {% load i18n %} -{% block title %}{% translate "Email template" %}{% endblock %} -{% block email_editor_title %}{% translate "Email template" %}{% endblock %} +{% block extra_title %}{% translate "Email template" %} :: {% endblock extra_title %} + +{% block email_editor_title %}{% translate "Email template" %}{% endblock email_editor_title %} -{% block email_editor_preview %}{% endblock %} +{% block email_editor_preview %}{% endblock email_editor_preview %} -{% block email_editor_actions %}{% include "orga/includes/submit_row.html" %}{% endblock %} +{% block email_editor_actions %}{% include "orga/includes/submit_row.html" %}{% endblock email_editor_actions %} diff --git a/src/pretalx/orga/templates/orga/mails/template_list.html b/src/pretalx/orga/templates/orga/mails/template_list.html index 22ebe2058..3cc4d6a89 100644 --- a/src/pretalx/orga/templates/orga/mails/template_list.html +++ b/src/pretalx/orga/templates/orga/mails/template_list.html @@ -1,33 +1,49 @@ {% extends "orga/mails/base.html" %} + {% load bootstrap4 %} {% load i18n %} +{% load static %} + +{% block scripts %} + + +{% endblock scripts %} {% block mail_content %} -
    -
    -

    - {% blocktranslate trimmed %} - You can edit the default templates and your custom templates for emails here. - If you want to send emails to some or all of your speakers, head over to the - “Send Emails” tab. Mails queued for sending are in the “Outbox” tab. - {% endblocktranslate %} -

    -

    - {% blocktranslate trimmed %} - There are different placeholders available depending on the template type. - They are explained in detail once you start editing a template. - {% endblocktranslate %} -

    +

    + {% translate "Templates" %} + + + +

    + +
    +
    +

    + {% blocktranslate trimmed %} + You can edit the default templates and your custom templates for emails here. + If you want to send emails to some or all of your speakers, head over to the + “Send Emails” tab. Mails queued for sending are in the “Outbox” tab. + {% endblocktranslate %} +

    +

    + {% blocktranslate trimmed %} + There are different placeholders available depending on the template type. + They are explained in detail once you start editing a template. + {% endblocktranslate %} +

    +
    -
    + + +
    - {# HACK: This isn't really a form, but we want to make the templates look like normal forms #} + {# HACK: This isn"t really a form, but we want to make the templates look like normal forms #}
    @@ -44,7 +60,7 @@

    - {% bootstrap_form ack layout='event' %} + {% bootstrap_form ack layout="event" %}

    @@ -64,7 +80,7 @@

    - {% bootstrap_form accept layout='event' %} + {% bootstrap_form accept layout="event" %} @@ -84,7 +100,7 @@

    - {% bootstrap_form reject layout='event' %} + {% bootstrap_form reject layout="event" %} @@ -105,53 +121,55 @@

    - {% bootstrap_form update layout='event' %} + {% bootstrap_form update layout="event" %} + -
    -
    -
    -

    - -

    -
    -
    -
    +
    +
    +
    +

    + +

    +
    +
    +
    - - {% bootstrap_form remind layout='event' %} + + {% bootstrap_form remind layout="event" %}
    +
    +
    - {% for template in other %} -
    -
    -

    - -

    -
    -
    -
    - - {% bootstrap_form template layout='event' %} -
    + {% for template in other %} +
    +
    +

    + +

    +
    +
    + - {% endfor %} - -{% endblock %} +
    +
    + {% endfor %} + +{% endblock mail_content %} diff --git a/src/pretalx/orga/templates/orga/organiser/delete.html b/src/pretalx/orga/templates/orga/organiser/delete.html deleted file mode 100644 index 77014da91..000000000 --- a/src/pretalx/orga/templates/orga/organiser/delete.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "orga/cfp/base.html" %} -{% load i18n %} -{% block content %} -

    - {% translate "Do you really want to delete this organiser?" %} -

    - - {{ quotation_open }}{{ request.organiser.name }}{{ quotation_close }} - – {% translate "ALL related data for ALL events, such as proposals, and speaker profiles, and uploads, will also be deleted and cannot be restored." %}

    -

    - {% csrf_token %} -
    - - {% translate "Back" %} - - -
    -
    -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/organiser/detail.html b/src/pretalx/orga/templates/orga/organiser/detail.html index 48daf7c9c..a0a635540 100644 --- a/src/pretalx/orga/templates/orga/organiser/detail.html +++ b/src/pretalx/orga/templates/orga/organiser/detail.html @@ -3,13 +3,13 @@ {% load i18n %} {% load rules %} -{% block title %}{% if request.event %}{{ request.event.name }}{% else %}{{ request.organiser.name }}{% endif %}{% endblock %} +{% block extra_title %}{% translate "Organiser" %} :: {{ request.organiser.name }} :: {% endblock extra_title %} {% block content %}
    {% translate "Settings" %} {% csrf_token %} - {% bootstrap_form form layout='event' %} + {% bootstrap_form form layout="event" %}
    {% has_perm "person.is_administrator" request.user request.organiser as can_delete_event %} @@ -22,75 +22,15 @@
    - - {% if request.organiser %} - -
    - {% translate "Teams" %} -
    - - - - - - - - - - - - {% if teams %}{% for team in teams %} - - - - - - - - - {% endfor %}{% endif %} - -
    {% translate "Team" %}{% translate "Members" %}{% translate "All events" %}{% translate "Reviewer" %}
    - - {{ team.name }} - {% if request.user in team.members.all %} - - {% endif %} - - {{ team.members.count }} - - - - - - - - - - -
    -
    - -
    -
    - {% include "orga/organiser/organiser_sso.html" %} -
    - {% endif %} + {% if request.organiser %} +
    + {% include "orga/organiser/organiser_sso.html" %} +
    + {% endif %}
    -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/organiser/list.html b/src/pretalx/orga/templates/orga/organiser/list.html index 4845ae788..9b92877e4 100644 --- a/src/pretalx/orga/templates/orga/organiser/list.html +++ b/src/pretalx/orga/templates/orga/organiser/list.html @@ -1,15 +1,16 @@ {% extends "orga/base.html" %} + {% load bootstrap4 %} {% load i18n %} {% load rules %} -{% block title %}Organisers{% endblock %} +{% block extra_title %}{% translate "Teams" %} :: {% endblock extra_title %} {% block content %}
    - {% has_perm 'orga.change_organiser_settings' request.user None as can_create_organiser %} + {% has_perm "orga.change_organiser_settings" request.user None as can_create_organiser %} @@ -41,8 +42,6 @@

    {{ organiser.name }}

    {% endfor %}
    {% if not organisers and not can_create_organiser %} -
    - {% translate "There are no organisers you can edit." %} -
    +
    {% translate "There are no organisers you can edit." %}
    {% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/organiser/speaker_list.html b/src/pretalx/orga/templates/orga/organiser/speaker_list.html new file mode 100644 index 000000000..6cb3777f4 --- /dev/null +++ b/src/pretalx/orga/templates/orga/organiser/speaker_list.html @@ -0,0 +1,66 @@ +{% extends "orga/base.html" %} +{% load bootstrap4 %} +{% load i18n %} + +{% block extra_title %}{{ page_obj.paginator.count }} {% blocktranslate trimmed count count=page_obj.paginator.count %}speaker{% plural %}speakers{% endblocktranslate %} :: {% endblock extra_title %} + +{% block content %} +

    + {{ page_obj.paginator.count }} + {% blocktranslate trimmed count count=page_obj.paginator.count %} + speaker + {% plural %} + speakers + {% endblocktranslate %} +

    + +
    +
    + {% bootstrap_form search_form %} + {% bootstrap_form filter_form %} + +
    +
    + +
    + + + + + + + + + + + {% for speaker in speakers %} + + + + + + + {% endfor %} + +
    + {% translate "Name" %} + + + + {% translate "Email" %} + + + + {% translate "Accepted Proposals" %} + + + + {% translate "Proposals" %} + + +
    {{ speaker.get_display_name }}{{ speaker.email }}{{ speaker.accepted_submission_count }}{{ speaker.submission_count }}
    +
    + + {% include "orga/includes/pagination.html" %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/organiser/team_list.html b/src/pretalx/orga/templates/orga/organiser/team_list.html new file mode 100644 index 000000000..e642c0d8a --- /dev/null +++ b/src/pretalx/orga/templates/orga/organiser/team_list.html @@ -0,0 +1,62 @@ +{% extends "orga/base.html" %} +{% load bootstrap4 %} +{% load i18n %} +{% load rules %} + +{% block extra_title %}{% translate "Teams" %} :: {{ request.organiser.name }} :: {% endblock extra_title %} + +{% block content %} +
    + {% translate "Teams" %} +
    + + + + + + + + + + + + {% if teams %}{% for team in teams %} + + + + + + + + {% endfor %}{% endif %} + +
    {% translate "Team" %}{% translate "Members" %}{% translate "All events" %}{% translate "Reviewer" %}
    + + {{ team.name }} + {% if request.user in team.members.all %} + + {% endif %} + + {{ team.members.count }} + + + + + + + + + + +
    +
    +
    +
    +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/plugins.html b/src/pretalx/orga/templates/orga/plugins.html index 4708325bc..60a87345b 100644 --- a/src/pretalx/orga/templates/orga/plugins.html +++ b/src/pretalx/orga/templates/orga/plugins.html @@ -1,7 +1,8 @@ {% extends "orga/base.html" %} + {% load i18n %} -{% block title %}{% translate "Plugins" %}{% endblock %} +{% block extra_title %}{% translate "Plugins" %} :: {% endblock extra_title %} {% block content %}

    {% translate "Plugins" %}

    @@ -33,13 +34,17 @@

    {% translate "Plugins" %}

    • {% if plugin.author %} -

      {% blocktranslate trimmed with v=plugin.version a=plugin.author %} - Version {{ v }} by {{ a }} - {% endblocktranslate %}

      +

      + {% blocktranslate trimmed with v=plugin.version a=plugin.author %} + Version {{ v }} by {{ a }} + {% endblocktranslate %} +

      {% else %} -

      {% blocktranslate trimmed with v=plugin.version a=plugin.author %} - Version {{ v }} - {% endblocktranslate %}

      +

      + {% blocktranslate trimmed with v=plugin.version a=plugin.author %} + Version {{ v }} + {% endblocktranslate %} +

      {% endif %} {{ plugin.description }}
    • @@ -49,10 +54,11 @@

      {% translate "Plugins" %}

    {% endfor %} - +
    + {% else %}
    {% translate "This instance does currently not have any plugins installed." %}
    {% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/review/assignment-import.html b/src/pretalx/orga/templates/orga/review/assignment-import.html index 2d3bca94d..b6eff2967 100644 --- a/src/pretalx/orga/templates/orga/review/assignment-import.html +++ b/src/pretalx/orga/templates/orga/review/assignment-import.html @@ -1,10 +1,13 @@ {% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load formset_tags %} {% load static %} +{% block extra_title %}{% translate "Assign reviewers" %} :: {% endblock extra_title %} + {% block content %}

    {% translate "Assign reviewers" %}

    @@ -26,4 +29,4 @@

    {% translate "Assign reviewers" %}

    -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/review/assignment.html b/src/pretalx/orga/templates/orga/review/assignment.html index 83e4dcc42..c414f1fee 100644 --- a/src/pretalx/orga/templates/orga/review/assignment.html +++ b/src/pretalx/orga/templates/orga/review/assignment.html @@ -1,9 +1,12 @@ {% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} +{% block extra_title %}{% translate "Assign reviewers" %} :: {% endblock extra_title %} + {% block content %} {% compress js %} @@ -41,7 +44,9 @@

    {% translate "Assign reviewers" %}

    {% translate "Team" %} {% translate "Members" %} - {% if request.event.feature_flags.use_tracks %}{% translate "Limited to tracks" %}{% endif %} + {% if request.event.feature_flags.use_tracks %} + {% translate "Limited to tracks" %} + {% endif %} @@ -59,7 +64,7 @@

    {% translate "Assign reviewers" %}

    {% if team.members.count %}
    - {{ team.members.count }} + {{ team.members.count }}
      {% for member in team.members.all %}
    • {{ member.get_display_name }}
    • @@ -79,69 +84,70 @@

      {% translate "Assign reviewers" %}

      {% endfor %} {% endif %} - - - - - - - - - + + + + + + + + {% endfor %} - -
    -
    + + +
    +
    -

    - {% if request.event.active_review_phase.proposal_visibility == "assigned" %} - {% blocktranslate trimmed with href=request.event.orga_urls.review_settings %} - Reviewers will be able to see and review only their assigned proposals. - You can change this in your review settings. - {% endblocktranslate %} - {% else %} - {% blocktranslate trimmed with href=request.event.orga_urls.review_settings %} - Reviewers will be able to see and review all proposals, - but their assigned reviews will appear highlighted, and they - will be directed to them first. You can change this in your review settings. - {% endblocktranslate %} - {% endif %} -

    -

    - {% blocktranslate trimmed %} - This is where you can assign reviewers to specific proposals! Please use this drop-down to - switch between the two assignment modes (assigning reviewers to proposals or proposals to reviewers). +

    + {% if request.event.active_review_phase.proposal_visibility == "assigned" %} + {% blocktranslate trimmed with href=request.event.orga_urls.review_settings %} + Reviewers will be able to see and review only their assigned proposals. + You can change this in your review settings. {% endblocktranslate %} - {% blocktranslate trimmed %} - You can also use the Actions menu above to import your assignments from a prepared file. + {% else %} + {% blocktranslate trimmed with href=request.event.orga_urls.review_settings %} + Reviewers will be able to see and review all proposals, + but their assigned reviews will appear highlighted, and they + will be directed to them first. You can change this in your review settings. {% endblocktranslate %} -

    -
    - -
    -
    -
    - {% bootstrap_form direction_form layout='inline' %} -
    -
    -
    - {% csrf_token %} + {% endif %} +

    +

    + {% blocktranslate trimmed %} + This is where you can assign reviewers to specific proposals! Please use this drop-down to + switch between the two assignment modes (assigning reviewers to proposals or proposals to reviewers). + {% endblocktranslate %} + {% blocktranslate trimmed %} + You can also use the Actions menu above to import your assignments from a prepared file. + {% endblocktranslate %} +

    +
    + +
    +
    + + {% bootstrap_form direction_form layout="inline" %}
    +
    + {% csrf_token %} + + {% bootstrap_form form layout="event" %} + {% include "orga/includes/submit_row.html" %} +
    -{% endblock %} + +{% endblock content %} + diff --git a/src/pretalx/orga/templates/orga/review/bulk.html b/src/pretalx/orga/templates/orga/review/bulk.html index 0ae466e6e..7d83fc411 100644 --- a/src/pretalx/orga/templates/orga/review/bulk.html +++ b/src/pretalx/orga/templates/orga/review/bulk.html @@ -1,20 +1,22 @@ {% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load review_score %} {% load rules %} -{% load url_replace %} {% load static %} {% block scripts %} {% compress js %} {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% translate "Reviews" %} :: {% endblock extra_title %} {% block content %} - {% has_perm 'orga.view_speakers' request.user request.event as can_view_speakers %} + {% has_perm "orga.view_speakers" request.user request.event as can_view_speakers %}
    {% if next_submission %} {% blocktranslate trimmed count count=missing_reviews %} @@ -33,14 +35,22 @@
    {% bootstrap_field filter_form.q %} - {% if show_submission_types and filter_form.submission_type %}{% bootstrap_field filter_form.submission_type %}{% endif %} + {% if show_submission_types and filter_form.submission_type %} + {% bootstrap_field filter_form.submission_type %} + {% endif %}
    - {% bootstrap_field filter_form.state layout='inline' %} -
    {% bootstrap_field filter_form.pending_state__isnull layout='inline' %}
    + {% bootstrap_field filter_form.state layout="inline" %} +
    {% bootstrap_field filter_form.pending_state__isnull layout="inline" %}
    - {% if filter_form.track %}{% bootstrap_field filter_form.track %}{% endif %} - {% if filter_form.content_locale %}{% bootstrap_field filter_form.content_locale %}{% endif %} - {% if filter_form.tags %}{% bootstrap_field filter_form.tags %}{% endif %} + {% if filter_form.track %} + {% bootstrap_field filter_form.track %} + {% endif %} + {% if filter_form.content_locale %} + {% bootstrap_field filter_form.content_locale %} + {% endif %} + {% if filter_form.tags %} + {% bootstrap_field filter_form.tags %} + {% endif %}
    @@ -51,7 +61,7 @@ {% blocktranslate trimmed with question=filter_form.cleaned_data.question.question %} List filtered by answers to question “{{ question }}”. {% endblocktranslate %} - + {% translate "Remove filter" %} @@ -59,24 +69,24 @@ {% endif %}
    - {% csrf_token %} + + {% csrf_token %}
    - {% if can_view_speakers %}{% endif %} - {% for category in categories %} - - {% endfor %} - + {% if can_view_speakers %}{% endif %} + {% for category in categories %}{% endfor %} + {% for row in table %} + {{ row.submission.title }} + {% if can_view_speakers %}
    {% translate "Title" %}{% translate "Speakers" %}{{ category.name }}{% translate "Comment" %}{{ phrases.schedule.speakers }}{{ category.name }}{% translate "Comment" %}
    - {{ row.submission.title }} {% for speaker in row.submission.speakers.all %} @@ -104,7 +114,7 @@
    - +
    -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/review/dashboard.html b/src/pretalx/orga/templates/orga/review/dashboard.html index f51dd3e90..02e68881f 100644 --- a/src/pretalx/orga/templates/orga/review/dashboard.html +++ b/src/pretalx/orga/templates/orga/review/dashboard.html @@ -1,24 +1,26 @@ {% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load review_score %} {% load rules %} -{% load url_replace %} {% load static %} {% block scripts %} {% compress js %} - + - + {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% translate "Reviews" %} :: {% endblock extra_title %} {% block content %} - {% has_perm 'orga.perform_reviews' request.user request.event as can_review %} - {% has_perm 'orga.view_speakers' request.user request.event as can_view_speakers %} + {% has_perm "orga.perform_reviews" request.user request.event as can_review %} + {% has_perm "orga.view_speakers" request.user request.event as can_view_speakers %}
    {% if can_review and next_submission %} @@ -27,15 +29,17 @@ {% plural %} {{ count }} proposals are waiting for your review. {% endblocktranslate %} - - {% translate "Click here to get started!" %} - + {% translate "Click here to get started!" %}
    - {% translate "Or review all proposals at once." %} + {% translate "Or review all proposals at once." %} {% elif can_review %} {% translate "You’ve got no proposals left to review!" %} {% else %} - {% translate "Reviews are currently closed." %} + {% if not reviews_open %} + {% translate "Reviews are currently closed." %} + {% else %} + {% translate "You don’t have reviewer permissions for this event." %} + {% endif %} {% endif %}
    @@ -43,14 +47,22 @@
    {% bootstrap_field filter_form.q %} - {% if show_submission_types and filter_form.submission_type %}{% bootstrap_field filter_form.submission_type %}{% endif %} + {% if show_submission_types and filter_form.submission_type %} + {% bootstrap_field filter_form.submission_type %} + {% endif %}
    - {% bootstrap_field filter_form.state layout='inline' %} -
    {% bootstrap_field filter_form.pending_state__isnull layout='inline' %}
    + {% bootstrap_field filter_form.state layout="inline" %} +
    {% bootstrap_field filter_form.pending_state__isnull layout="inline" %}
    - {% if filter_form.track %}{% bootstrap_field filter_form.track %}{% endif %} - {% if filter_form.content_locale %}{% bootstrap_field filter_form.content_locale %}{% endif %} - {% if filter_form.tags %}{% bootstrap_field filter_form.tags %}{% endif %} + {% if filter_form.track %} + {% bootstrap_field filter_form.track %} + {% endif %} + {% if filter_form.content_locale %} + {% bootstrap_field filter_form.content_locale %} + {% endif %} + {% if filter_form.tags %} + {% bootstrap_field filter_form.tags %} + {% endif %} {% if max_review_count and max_review_count > 1 %}
    @@ -87,7 +99,7 @@ {% if can_view_speakers %} {% endif %} {% for question in short_questions %} @@ -125,12 +137,16 @@ {% translate "Actions" %}
    @@ -141,7 +157,7 @@ {% blocktranslate trimmed with question=filter_form.cleaned_data.question.question %} List filtered by answers to question “{{ question }}”. {% endblocktranslate %} - + {% translate "Remove filter" %} @@ -149,7 +165,8 @@ {% endif %}
    - {% csrf_token %} + + {% csrf_token %}
    @@ -164,7 +181,8 @@ {% endif %} {% endif %} - {# Title #} + + {# Title #} {% if can_view_speakers %}{% endif %} {% for question in short_questions %}{% endfor %} {% if filter_form.track %}{% endif %} @@ -183,8 +201,8 @@ {% else %} {% translate "Average" %} {% endif %} - - + + {% if independent_categories %} {% for category in independent_categories %} @@ -195,8 +213,8 @@ {% if can_review or submissions_reviewed %} {% if independent_categories and not can_see_all_reviews %} {% for category in independent_categories %} @@ -206,11 +224,11 @@ {% endif %} - {% if can_view_speakers %}{% endif %} + {% if can_view_speakers %}{% endif %} {% for question in short_questions %} {% endfor %} @@ -258,8 +276,8 @@ {% endif %} {% endif %} + - {% empty %} - + + + {% endfor %}
    {% translate "Your score" %} - - + + {% translate "Reviews" %} - - + + {% translate "Title" %}{% translate "Speakers" %}{{ phrases.schedule.speakers }}{{ question.question }} - {{ submission.review_nonnull_count|default:'-' }} - {% if submission.review_count != submission.review_nonnull_count %}({{ submission.review_count|default:'-' }}){% endif %} + {{ submission.review_nonnull_count|default:"-" }} + {% if submission.review_count != submission.review_nonnull_count %}({{ submission.review_count|default:"-" }}){% endif %} {% if submission.pk in submissions_reviewed %} {% elif request.user in submission.speakers.all %} @@ -303,13 +321,15 @@ {% endif %}
    - {% if submission.state == 'submitted' and can_accept_submissions %} + {% if submission.state == "submitted" and can_accept_submissions %}
    + {% comment %}Translators: This is a button to mark a proposal as accepted{% endcomment %}
    + {% comment %}Translators: This is a button to mark a proposal as rejected{% endcomment %}
    @@ -338,6 +358,8 @@
    {% if page_obj.paginator.count > 50 %} + {% include "orga/includes/pagination.html" %} + {% endif %} -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/review/export.html b/src/pretalx/orga/templates/orga/review/export.html index 5c676f66d..c0a25333c 100644 --- a/src/pretalx/orga/templates/orga/review/export.html +++ b/src/pretalx/orga/templates/orga/review/export.html @@ -1,12 +1,12 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} {% load bootstrap4 %} {% load i18n %} {% load static %} +{% block extra_title %}{% translate "Export review data" %} :: {% endblock extra_title %} + {% block content %} -

    - {% translate "Export review data" %} -

    +

    {% translate "Export review data" %}

    - - {{ room.name }} - + {{ room.name }} + + {% if room.capacity %}{{ room.capacity }}{% endif %} {% if room.capacity %}{{ room.capacity }}{% endif %} + {% include "orga/includes/order_object.html" with object=room %} - + + - +
    {% translate "Please add at least one place in which sessions can take place." %}
    {% translate "Please add at least one place in which sessions can take place." %}
    @@ -56,4 +61,4 @@

    -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/settings/base.html b/src/pretalx/orga/templates/orga/settings/base.html index bf0bcf23f..cbf05087a 100644 --- a/src/pretalx/orga/templates/orga/settings/base.html +++ b/src/pretalx/orga/templates/orga/settings/base.html @@ -1,9 +1,9 @@ {% extends "orga/base.html" %} + {% block content %}
    - {% block settings_content %} - {% endblock %} + {% block settings_content %}{% endblock settings_content %}
    -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/settings/form.html b/src/pretalx/orga/templates/orga/settings/form.html index 634b6bb2f..7a15fd68b 100644 --- a/src/pretalx/orga/templates/orga/settings/form.html +++ b/src/pretalx/orga/templates/orga/settings/form.html @@ -1,4 +1,5 @@ {% extends "orga/settings/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -6,8 +7,11 @@ {% load static %} {% block stylesheets %} - -{% endblock %} + + {% compress css %} + + {% endcompress %} +{% endblock stylesheets %} {% block scripts %} {% compress js %} @@ -17,8 +21,11 @@ + {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% translate "Settings" %} :: {% endblock extra_title %} {% block settings_content %}

    {% translate "Settings" %}

    @@ -31,90 +38,66 @@

    {% translate "Settings" %}

    {% bootstrap_form_errors form %} - {% bootstrap_field form.name layout='event' %} - {% bootstrap_field form.slug layout='event' addon_before=url_placeholder addon_before_class="input-group-prepend input-group-text" %} - {% bootstrap_field form.date_from layout='event' %} - {% bootstrap_field form.date_to layout='event' %} - {% bootstrap_field form.email layout='event' %} - {% bootstrap_field form.custom_domain layout='event' %} - {% bootstrap_field form.timezone layout='event' %} - {% bootstrap_field form.locale layout='event' %} - {% bootstrap_field form.locales layout='event' %} - {% bootstrap_field form.content_locales layout='event' %} - {% bootstrap_field form.show_schedule layout='event' %} - {% bootstrap_field form.show_featured layout='event' %} - {% bootstrap_field form.featured_sessions_text layout='event' %} - {% bootstrap_field form.use_feedback layout='event' %} - {% bootstrap_field form.schedule layout='event' %} - {% bootstrap_field form.export_html_on_release layout='event' %} - {% bootstrap_field form.html_export_url layout='event' %} - {% bootstrap_field form.meta_noindex layout='event' %} - {% bootstrap_field form.ticket_link layout='event' %} - {% bootstrap_field form.video_link layout='event' %} + {% bootstrap_field form.name layout="event" %} + {% bootstrap_field form.slug layout="event" addon_before=url_placeholder addon_before_class="input-group-prepend input-group-text" %} + {% bootstrap_field form.date_from layout="event" %} + {% bootstrap_field form.date_to layout="event" %} + {% bootstrap_field form.email layout="event" %} + {% bootstrap_field form.custom_domain layout="event" %} + {% bootstrap_field form.timezone layout="event" %} + {% bootstrap_field form.locale layout="event" %} + {% bootstrap_field form.locales layout="event" %} + {% bootstrap_field form.content_locales layout="event" %} + {% bootstrap_field form.show_schedule layout="event" %} + {% bootstrap_field form.show_featured layout="event" %} + {% bootstrap_field form.featured_sessions_text layout="event" %} + {% bootstrap_field form.use_feedback layout="event" %} + {% bootstrap_field form.schedule layout="event" %} + {% bootstrap_field form.export_html_on_release layout="event" %} + {% bootstrap_field form.html_export_url layout="event" %} + {% bootstrap_field form.meta_noindex layout="event" %} + {% bootstrap_field form.ticket_link layout="event" %} + {% bootstrap_field form.video_link layout="event" %}
    {% translate "Display settings" %} - {% bootstrap_field form.landing_page_text layout='event' %} - {% bootstrap_field form.imprint_url layout='event' %} - {% bootstrap_field form.primary_color layout='event' addon_before="" addon_before_class="colorpicker-input-addon color-readable" %} + {% bootstrap_field form.landing_page_text layout="event" %} + {% bootstrap_field form.imprint_url layout="event" %} + {% bootstrap_field form.primary_color layout="event" addon_before="" addon_before_class="colorpicker-input-addon color-readable" %}
    - {% bootstrap_field form.custom_css layout='event' %} + {% bootstrap_field form.custom_css layout="event" %}
    - {% bootstrap_field form.custom_css_text layout='event' %} -
    -
    - -
    - {% if request.event.logo %} - {% translate - {% endif %} -
    - {% bootstrap_field form.logo layout="inline" %} -
    -
    -
    - -
    - {% if request.event.header_image %} - {% translate - {% endif %} -
    - {% bootstrap_field form.header_image layout="inline" %} -
    + {% bootstrap_field form.custom_css_text layout="event" %}
    + {% bootstrap_field form.logo layout="event" %} + {% bootstrap_field form.header_image layout="event" %}
    - {% bootstrap_field form.header_pattern layout='event' %} + {% bootstrap_field form.header_pattern layout="event" %}
    -
    -
    - - {% has_perm "person.is_administrator" request.user request.event as can_delete_event %} - {% if can_delete_event %} - - {% translate "Delete event" %} - - {% endif %} - - - - -
    - - -{% endblock %} +
    +
    + + {% has_perm "person.is_administrator" request.user request.event as can_delete_event %} + {% if can_delete_event %} + + {% translate "Delete event" %} + + {% endif %} + + + + +
    + + +{% endblock settings_content %} diff --git a/src/pretalx/orga/templates/orga/settings/mail.html b/src/pretalx/orga/templates/orga/settings/mail.html index f94e4fee0..f68efafa7 100644 --- a/src/pretalx/orga/templates/orga/settings/mail.html +++ b/src/pretalx/orga/templates/orga/settings/mail.html @@ -1,27 +1,39 @@ {% extends "orga/settings/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} {% block scripts %} + {% compress js %} + {% endcompress %} -{% endblock %} +{% endblock scripts %} + +{% block extra_title %}{% translate "E-mail settings" %} :: {% endblock extra_title %} {% block settings_content %}
    {% csrf_token %} -

    {% translate "E-mail settings" %}

    -
    - {% blocktranslate trimmed %} - If you don’t configure custom email settings, the global configuration - for this server will be used (ask your administrator for details).
    - We recommend that you add email settings here explicitly. - {% endblocktranslate %} -
    - {% bootstrap_form form layout='event' %} +

    + {% translate "E-mail settings" %} + + + +

    + +
    + {% blocktranslate trimmed %} + If you don’t configure custom email settings, the global configuration + for this server will be used (ask your administrator for details).
    + We recommend that you add email settings here explicitly. + {% endblocktranslate %} +
    +
    + {% bootstrap_form form layout="event" %}
    @@ -29,9 +41,9 @@

    {% translate "E-mail settings" %}

    - + {% endif %}
    -{% endblock %} +{% endblock settings_content %} diff --git a/src/pretalx/orga/templates/orga/settings/review.html b/src/pretalx/orga/templates/orga/settings/review.html index edf92e490..3d038d0e6 100644 --- a/src/pretalx/orga/templates/orga/settings/review.html +++ b/src/pretalx/orga/templates/orga/settings/review.html @@ -1,11 +1,15 @@ {% extends "orga/settings/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load formset_tags %} {% load static %} -{% block settings_content %} +{% block extra_title %}{% translate "Review settings" %} :: {% endblock extra_title %} + +{% block scripts %} + {% compress js %} @@ -13,42 +17,53 @@ + {% endcompress %} +{% endblock scripts %} + +{% block settings_content %}
    {% csrf_token %}

    {% translate "Review settings" %}

    -
    - {% blocktranslate trimmed %} - If you require neither a review score nor a review text, reviewers will - be offered an additional {{ quotation_open }}Abstain{{ quotation_close }} - button when reviewing proposals. - {% endblocktranslate %} -
    - {% bootstrap_form form layout='event' %} -
    - - - {% if action == "edit" or action == "create" %} - - {% endif %} - -
    - -

    {% translate "Review scoring" %}

    -
    -

    + {% bootstrap_field form.score_mandatory layout="event" %} + {% bootstrap_field form.text_mandatory layout="event" %} +

    + {% blocktranslate trimmed %} - You can ask reviewers to provide one or multiple scores. If you ask for multiple scores, - they will be added up to a final total score. If you want, this total score can be weighted. - Currently, the total score is calculated as: + If you require neither a review score nor a review text, reviewers will + be offered an additional {{ quotation_open }}Abstain{{ quotation_close }} + button when reviewing proposals. {% endblocktranslate %} - - - -

    +
    + {% bootstrap_field form.aggregate_method layout="event" %} + {% bootstrap_field form.score_format layout="event" %} + {% bootstrap_field form.review_help_text layout="event" %} + + {% include "orga/includes/submit_row.html" %} + +

    + {% translate "Review scoring" %} + + + +

    + +
    +

    + {% blocktranslate trimmed %} + You can ask reviewers to provide one or multiple scores. If you ask for multiple scores, + they will be added up to a final total score. If you want, this total score can be weighted. + Currently, the total score is calculated as: + {% endblocktranslate %} + + + +

    +
    +
    {# TODO warn about changing score categories #}
    {{ scores_formset.management_form }} @@ -59,12 +74,10 @@

    {% translate "Review scoring" %}

    {% translate "Review Score category" %} {% bootstrap_field form.name form_group_class="" layout="inline" %} - {% if action != 'view' %} - + {% if action != "view" %} + {% endif %}

    @@ -72,7 +85,7 @@

    {{ form.new_scores }} {% bootstrap_field form.DELETE form_group_class="" layout="event" %}

    -
    +
    {% bootstrap_form_errors form %} {% bootstrap_field form.is_independent layout="event" form_group_class="" %} {% bootstrap_field form.weight layout="event" form_group_class="" %} @@ -116,11 +129,10 @@

    {% translate "Score Category" %} {% bootstrap_field scores_formset.empty_form.name form_group_class="" layout="inline" %} - {% if action != 'view' %} -
    - -
    + {% if action != "view" %} + {% endif %}

    @@ -151,31 +163,40 @@

    - +

    {% endif %}
    -

    {% translate "Review phases" %}

    -
    - {% blocktranslate trimmed %} - Review phases allow you to structure your review process. - By default, there are two review phases: The review itself, and - the selection process once the review phase is over. But you could for example - add another review and selection phase after that, if you require additional - review rounds. - {% endblocktranslate %} -
    -
    +

    + {% translate "Review phases" %} + + + +

    + +
    + {% blocktranslate trimmed %} + Review phases allow you to structure your review process. + By default, there are two review phases: The review itself, and + the selection process once the review phase is over. But you could for example + add another review and selection phase after that, if you require additional + review rounds. + {% endblocktranslate %} +
    +
    +
    {{ phases_formset.management_form }} {% bootstrap_formset_errors phases_formset %}
    {% for form in phases_formset %} -
    +

    {% translate "Review Phase" %} {% bootstrap_field form.name form_group_class="" layout="inline" %} - {% if action != 'view' %} + {% if action != "view" %} {% if not form.instance.is_active %} {% endif %} {% include "orga/includes/order_object.html" with object=form.instance attrs="mr-2 keep-scroll-position" %} - - - + {% if action != "view" %} + + {% endif %} {% endif %}

    @@ -202,48 +223,49 @@

    {% bootstrap_field form.DELETE form_group_class="" layout="event" %}

    -
    +
    {% bootstrap_form_errors form %} {% bootstrap_form form layout="event" form_group_class="" exclude="DELETE,name" %}
    {% endfor %} -
    - {% if action == "edit" or action == "create" %} -
    - - +
    + {% if action != "view" %} +
    + + + + +
    {% endif %} -
    - -{% endblock %} + +{% endblock settings_content %} diff --git a/src/pretalx/orga/templates/orga/settings/team_delete.html b/src/pretalx/orga/templates/orga/settings/team_delete.html deleted file mode 100644 index 5f629dd67..000000000 --- a/src/pretalx/orga/templates/orga/settings/team_delete.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "orga/settings/base.html" %} -{% load i18n %} - -{% block settings_content %} -
    -

    - {% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }} -

    - - {% translate "Do you really want to go through with this deletion?" %} {{ object.email }} -
    - - -
    {% csrf_token %} - {% translate "Back" %} - -
    -
    -
    -
    -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/settings/team_detail.html b/src/pretalx/orga/templates/orga/settings/team_detail.html index 488613a56..eae15e21f 100644 --- a/src/pretalx/orga/templates/orga/settings/team_detail.html +++ b/src/pretalx/orga/templates/orga/settings/team_detail.html @@ -1,9 +1,12 @@ {% extends "orga/settings/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} +{% block extra_title %}{% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }} :: {% endblock extra_title %} + {% block settings_content %}
    {% if team.pk %} @@ -11,7 +14,8 @@

    {% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }}: {% translate "Members" %}

    -
    {% csrf_token %} + + {% csrf_token %}
    @@ -25,13 +29,15 @@

    {% for member in members %}

    - +
    {{ member.get_display_name }}{{ member.email }} + {{ member.email }} + - {% translate "Reset password" %} + {{ phrases.base.password_reset_heading }} {% endfor %}
    - {% translate "Add member" %}
    + {% translate "Add member" %} +
    {% translate "Add multiple team members?" %}
    {% csrf_token %} - {% bootstrap_field invite_form.email layout='inline' form_group_class="single-email-group" %} - {% bootstrap_field invite_form.bulk_email layout='inline' form_group_class="d-none bulk-email-group" %} + {% bootstrap_field invite_form.email layout="inline" form_group_class="single-email-group" %} + {% bootstrap_field invite_form.bulk_email layout="inline" form_group_class="d-none bulk-email-group" %} {{ invite_form.bulk_email.help_text }} @@ -100,24 +107,26 @@

    {% translate "New team" %}

    {% csrf_token %} {% bootstrap_form_errors form %} - {% bootstrap_field form.name layout='event' %} - {% bootstrap_field form.all_events layout='event' %} - {% bootstrap_field form.limit_events layout='event' %} - {% bootstrap_field form.can_create_events layout='event' %} - {% bootstrap_field form.can_change_teams layout='event' %} - {% bootstrap_field form.can_change_organiser_settings layout='event' %} - {% bootstrap_field form.can_change_event_settings layout='event' %} - {% bootstrap_field form.can_change_submissions layout='event' %} - {% bootstrap_field form.is_reviewer layout='event' %} + {% bootstrap_field form.name layout="event" %} + {% bootstrap_field form.all_events layout="event" %} + {% bootstrap_field form.limit_events layout="event" %} + {% bootstrap_field form.can_create_events layout="event" %} + {% bootstrap_field form.can_change_teams layout="event" %} + {% bootstrap_field form.can_change_organiser_settings layout="event" %} + {% bootstrap_field form.can_change_event_settings layout="event" %} + {% bootstrap_field form.can_change_submissions layout="event" %} + {% bootstrap_field form.is_reviewer layout="event" %}

    {% translate "Review settings" %}

    - {% bootstrap_field form.force_hide_speaker_names layout='event' %} - {% bootstrap_field form.limit_tracks layout='event' %} + {% bootstrap_field form.force_hide_speaker_names layout="event" %} + {% bootstrap_field form.limit_tracks layout="event" %} + {% include "orga/includes/submit_row.html" with submit_value="team" submit_name="form" %} + @@ -127,4 +136,4 @@

    {% translate "Review settings" %}

    {% endcompress %} -{% endblock %} +{% endblock settings_content %} diff --git a/src/pretalx/orga/templates/orga/settings/team_resend.html b/src/pretalx/orga/templates/orga/settings/team_resend.html deleted file mode 100644 index 7e3b5de38..000000000 --- a/src/pretalx/orga/templates/orga/settings/team_resend.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "orga/settings/base.html" %} -{% load i18n %} - -{% block settings_content %} -
    -

    - {% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }} -

    - - {% translate "Do you want to resend the email to:" %} {{ object.email }} -
    - - -
    {% csrf_token %} - {% translate "Back" %} - -
    -
    -
    -
    -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/settings/team_reset_password.html b/src/pretalx/orga/templates/orga/settings/team_reset_password.html deleted file mode 100644 index 18c091c68..000000000 --- a/src/pretalx/orga/templates/orga/settings/team_reset_password.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "orga/settings/base.html" %} -{% load i18n %} - -{% block settings_content %} -
    -

    - {% translate "Password reset:" %} {{ member.get_display_name }} ({{ member.name }}) -

    - - {% translate "Do you really want to reset this user’s password? They won’t be able to log in until they set a new password. The email will go to: " %} {{ member.email }}. -
    - - -
    {% csrf_token %} - {% translate "Back" %} - -
    -
    -
    -
    -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/settings/team_tracks.html b/src/pretalx/orga/templates/orga/settings/team_tracks.html index 1fab022de..864975696 100644 --- a/src/pretalx/orga/templates/orga/settings/team_tracks.html +++ b/src/pretalx/orga/templates/orga/settings/team_tracks.html @@ -1,12 +1,13 @@ {% extends "orga/settings/base.html" %} + {% load bootstrap4 %} {% load i18n %} +{% block extra_title %}{% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }}: {% translate "Tracks" %} :: {% endblock extra_title %} + {% block settings_content %}
    -

    - {% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }}: {% translate "Tracks" %} -

    +

    {% translate "Team" %} {{ quotation_open }}{{ team.name }}{{ quotation_close }}: {% translate "Tracks" %}

    {% blocktranslate trimmed %} Review teams can be restricted to tracks, so that reviewers will only be able to see reviews from that track. Please note that reviewers with additional access rights (e.g. due to being member in another team) will still be able to see all proposals. @@ -15,8 +16,10 @@

    {% if form.fields.limit_tracks.queryset.count %}
    {% csrf_token %} - {% bootstrap_form form layout='event' %} + {% bootstrap_form form layout="event" %} + {% include "orga/includes/submit_row.html" with submit_value="team" submit_name="form" %} +
    {% else %}
    @@ -26,4 +29,4 @@

    {% endif %}

    -{% endblock %} +{% endblock settings_content %} diff --git a/src/pretalx/orga/templates/orga/settings/widget.html b/src/pretalx/orga/templates/orga/settings/widget.html index 076c1d4b0..ec2e4e0c4 100644 --- a/src/pretalx/orga/templates/orga/settings/widget.html +++ b/src/pretalx/orga/templates/orga/settings/widget.html @@ -1,31 +1,43 @@ {% extends "orga/settings/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load static %} -{% block settings_content %} +{% block extra_title %}{% translate "Widget generation" %} :: {% endblock extra_title %} + +{% block scripts %} + {% compress js %} + {% endcompress %} +{% endblock scripts %} + +{% block settings_content %}
    {% csrf_token %} -

    {% translate "Widget settings" %}

    -
    - {% blocktranslate trimmed %} - You can configure a pretalx schedule widget to show your event schedule - on your homepage, instead of using this page. If you want to disable the - schedule on here entirely, please activate the setting below. - {% endblocktranslate %} -
    - {% bootstrap_form form layout='event' %} -
    - - - +

    + {% translate "Widget settings" %} + + -

    + + +
    + {% blocktranslate trimmed %} + You can configure a pretalx schedule widget to show your event schedule + on your homepage, instead of using this page. If you want to disable the + schedule on here entirely, please activate the setting below. + {% endblocktranslate %} +
    +
    + {% bootstrap_form form layout="event" %} + + {% include "orga/includes/submit_row.html" %} +

    {% translate "Widget generation" %}

    @@ -42,7 +54,7 @@

    {% translate "Widget generation" %}

    {% endblocktranslate %}

    - {% bootstrap_form extra_form layout='event' %} + {% bootstrap_form extra_form layout="event" %}
    @@ -78,7 +90,7 @@

    {% translate "Widget generation" %}

    - {% blocktranslate trimmed with link='https://docs.pretalx.org/user/event/widget.html' %} + {% blocktranslate trimmed with link="https://docs.pretalx.org/user/event/widget.html" %} Please look at our documentation for more information. {% endblocktranslate %} @@ -93,7 +105,7 @@

    {% translate "Widget preview" %}

    This is roughly what your widget will look like if you choose the grid format: {% endblocktranslate %}

    - +
    {% endif %} -{% endblock %} +{% endblock settings_content %} diff --git a/src/pretalx/orga/templates/orga/speaker/export.html b/src/pretalx/orga/templates/orga/speaker/export.html index d47020715..e4bac8821 100644 --- a/src/pretalx/orga/templates/orga/speaker/export.html +++ b/src/pretalx/orga/templates/orga/speaker/export.html @@ -1,12 +1,13 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load i18n %} {% load static %} +{% block extra_title %}{% translate "Export speaker data" %} :: {% endblock extra_title %} + {% block content %} -

    - {% translate "Export speaker data" %} -

    +

    {% translate "Export speaker data" %}

    {{ info.title }} - {% if info.resource %} - - {% endif %} + {% if info.resource %}{% endif %} {{ info.target_group }} @@ -50,5 +63,7 @@

    + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/speaker/list.html b/src/pretalx/orga/templates/orga/speaker/list.html index ac0f99ccf..58f201200 100644 --- a/src/pretalx/orga/templates/orga/speaker/list.html +++ b/src/pretalx/orga/templates/orga/speaker/list.html @@ -1,8 +1,10 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load i18n %} {% load rules %} -{% load url_replace %} + +{% block extra_title %}{{ page_obj.paginator.count }} {% blocktranslate trimmed count count=page_obj.paginator.count %}submitter{% plural %}submitters{% endblocktranslate %} :: {% endblock extra_title %} {% block content %}

    @@ -21,20 +23,22 @@

    + {% if filter_form.is_valid and filter_form.cleaned_data.question %}

    {% blocktranslate trimmed with question=filter_form.cleaned_data.question.question %} List filtered by answers to question “{{ question }}”. {% endblocktranslate %} - + {% translate "Remove filter" %}

    {% endif %} - {% has_perm 'orga.mark_speakers_arrived' request.user request.event as can_mark_speaker %} - {% has_perm 'orga.see_speakers_arrival' request.user request.event as can_see_speaker_status %} + + {% has_perm "orga.mark_speakers_arrived" request.user request.event as can_mark_speaker %} + {% has_perm "orga.see_speakers_arrival" request.user request.event as can_see_speaker_status %}
    @@ -48,14 +52,16 @@

    {% for profile in speakers %} - + {% if can_mark_speaker or can_see_speaker_status %}
    {{ profile.user.get_display_name }} + {{ profile.user.get_display_name }} + {{ profile.accepted_submission_count }} {{ profile.submission_count }} {% if profile.accepted_submission_count %} {% if can_mark_speaker %} - + {% if profile.has_arrived %} {% translate "Mark speaker as not arrived" %} {% else %} @@ -77,5 +83,7 @@

    + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/speaker/reset_password.html b/src/pretalx/orga/templates/orga/speaker/reset_password.html deleted file mode 100644 index f8f836eda..000000000 --- a/src/pretalx/orga/templates/orga/speaker/reset_password.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "orga/settings/base.html" %} -{% load i18n %} - -{% block content %} -
    -

    - {% translate "Password reset:" %} {{ speaker.get_display_name }} -

    - - {% translate "Do you really want to reset this user’s password? They won’t be able to log in until they set a new password. The email will go to: " %} {{ speaker.email }}. -
    - - -
    {% csrf_token %} - {% translate "Back" %} - -
    -
    -
    -
    -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/submission/anonymise.html b/src/pretalx/orga/templates/orga/submission/anonymise.html index 1c06f62ae..a7d3b2d87 100644 --- a/src/pretalx/orga/templates/orga/submission/anonymise.html +++ b/src/pretalx/orga/templates/orga/submission/anonymise.html @@ -1,4 +1,5 @@ {% extends "orga/submission/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -6,14 +7,17 @@ {% load rules %} {% load static %} +{% block submission_title %}{% translate "Anonymisation" %} :: {% endblock submission_title %} + +{% block scripts %} + + {% compress js %} + + + {% endcompress %} +{% endblock scripts %} + {% block submission_content %} -
    - {% blocktranslate trimmed %} - If a review phase with anonymisation is currently active, all reviewers - who have no permissions to change this proposal will be shown the anonymised - proposal content. - {% endblocktranslate %} -
    {% bootstrap_form_errors form %} {% csrf_token %} @@ -24,9 +28,23 @@

    {% translate "Original" %}

    -

    {% translate "Anonymised" %}

    +

    + {% translate "Anonymised" %} + + + +

    + +
    + {% blocktranslate trimmed %} + If a review phase with anonymisation is currently active, all reviewers + who have no permissions to change this proposal will be shown the anonymised + proposal content. + {% endblocktranslate %} +
    +
    {% for field in form %}

    {{ field.label }}

    @@ -40,7 +58,7 @@

    {{ field.label }}

    {% if next_unanonymised %}
    - - {% compress js %} - - {% endcompress %} -{% endblock %} +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/answer_list.html b/src/pretalx/orga/templates/orga/submission/answer_list.html deleted file mode 100644 index 5449c4292..000000000 --- a/src/pretalx/orga/templates/orga/submission/answer_list.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "orga/submission/base.html" %} -{% load i18n %} - -{% block submission_content %} - {% for answer in answer_list %} -
    - {{ answer.question.question }} - ({{ answer.question.get_variant_display }}) -
    - {% if answer.question.variant == 'file' %} - {% if answer.answer_file %} - {{ answer.answer_file }} - {% endif %} - {% else %} - {{ quotation_open }}{% include "common/question_answer.html" with answer=answer %}{{ quotation_close }} - {% endif %} - {% empty %} - {% translate "No questions have been answered at the moment." %} - {% endfor %} -{% endblock %} diff --git a/src/pretalx/orga/templates/orga/submission/apply_pending.html b/src/pretalx/orga/templates/orga/submission/apply_pending.html index ac9ad2730..69509426c 100644 --- a/src/pretalx/orga/templates/orga/submission/apply_pending.html +++ b/src/pretalx/orga/templates/orga/submission/apply_pending.html @@ -1,14 +1,23 @@ {% extends "orga/base.html" %} + {% load i18n %} {% load bootstrap4 %} +{% block extra_title %}{% translate "Apply pending changes" %} :: {% endblock extra_title %} + {% block content %} {% if submission_count %} -

    {% blocktranslate with count=submission_count trimmed %}Apply {{ count }} pending changes?{% endblocktranslate %}

    +

    + {% blocktranslate with count=submission_count trimmed %} + Apply {{ count }} pending changes? + {% endblocktranslate %} +

    - {% blocktranslate trimmed %} Please confirm that you really want to change the state of these {{ count }} proposals.{% endblocktranslate %} + {% blocktranslate trimmed %} + Please confirm that you really want to change the state of these {{ count }} proposals. + {% endblocktranslate %}

    {% csrf_token %} @@ -19,7 +28,7 @@

    {% blocktranslate with count=submission_count trimmed %}Apply {{ count }} pe class="btn btn-lg btn-outline-info" href="{% if request.GET.next %}{{ request.GET.next }}{% else %}{{ request.event.orga_urls.submissions }}{% endif %}" > - {% translate "Back" %} + {{ phrases.base.back_button }}

    {% endif %} -{% endblock %} - +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/submission/base.html b/src/pretalx/orga/templates/orga/submission/base.html index 9cfcdda83..26ff83bc1 100644 --- a/src/pretalx/orga/templates/orga/submission/base.html +++ b/src/pretalx/orga/templates/orga/submission/base.html @@ -2,21 +2,23 @@ {% load i18n %} {% load rules %} -{% block title %} - {% has_perm 'orga.view_speakers' request.user request.event as can_view_speakers %} - {% if can_view_speakers %}{{ submission.title }}{% else %}{{ submission.anonymised.title|default:submission.title }}{% endif %} :: {{ submission.event.name }} -{% endblock %} +{% block extra_title %} + {% block submission_title %}{% endblock submission_title %} + {% has_perm "orga.view_speakers" request.user request.event as can_view_speakers %} + {% if can_view_speakers %}{{ submission.title }}{% else %}{{ submission.anonymised.title|default:submission.title }}{% endif %} :: +{% endblock extra_title %} {% block alternate_link %} -{% endblock %} +{% endblock alternate_link %} {% block content %} {% if submission %} - {% has_perm 'submission.edit_submission' request.user submission as can_edit_submission %} - {% has_perm 'orga.view_reviews' request.user request.event as can_view_reviews %} - {% has_perm 'orga.view_speakers' request.user request.event as can_view_speakers %} - {% has_perm 'orga.send_mails' request.user request.event as can_send_mails %} + {% has_perm "submission.edit_submission" request.user submission as can_edit_submission %} + {% has_perm "orga.view_reviews" request.user request.event as can_view_reviews %} + {% has_perm "submission.review_submission" request.user submission as can_review %} + {% has_perm "orga.view_speakers" request.user request.event as can_view_speakers %} + {% has_perm "orga.send_mails" request.user request.event as can_send_mails %}

    {{ quotation_open }}{% if can_view_speakers %}{{ submission.title }}{% else %}{{ submission.anonymised.title|default:submission.title }}{% endif %}{{ quotation_close }} @@ -24,6 +26,7 @@

    by {{ submission.display_speaker_names }} {% endif %} {% include "orga/submission/state_dropdown.html" with submission=submission %} +

    {% endif %} - {% block submission_content %} - {% endblock %} -{% endblock %} + {% block submission_content %}{% endblock submission_content %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/submission/content.html b/src/pretalx/orga/templates/orga/submission/content.html index 8efd257cb..1c4b2a5c7 100644 --- a/src/pretalx/orga/templates/orga/submission/content.html +++ b/src/pretalx/orga/templates/orga/submission/content.html @@ -1,4 +1,5 @@ {% extends "orga/submission/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load filesize %} @@ -7,9 +8,21 @@ {% load static %} {% load rules %} +{% block stylesheets %} + {% compress css %} + + {% endcompress %} +{% endblock stylesheets %} + +{% block scripts %} + {% compress js %} + + {% endcompress %} +{% endblock scripts %} + {% block submission_content %} - {% has_perm 'orga.send_mails' request.user request.event as can_send_mails %} - {% has_perm 'orga.view_all_reviews' request.user request.event as can_view_all_reviews %} + {% has_perm "orga.send_mails" request.user request.event as can_send_mails %} + {% has_perm "orga.view_all_reviews" request.user request.event as can_view_all_reviews %} {# do not compress #} {% compress js %} @@ -22,86 +35,79 @@ {% endcompress %} -
    - {% if not submission %} - {% translate "Create proposal" %} - {% endif %} + +
    + {% if not submission %} + {% translate "Create proposal" %} + {% endif %} - {% if submission.access_code %} -
    - {% blocktranslate trimmed %} - This proposal was created using an access code: - {% endblocktranslate %} {{ submission.access_code.code }} -
    - {% endif %} - {% bootstrap_form_errors form %} - {% csrf_token %} - {% bootstrap_field form.title layout='event' %} - {% if action == "create" %} - {% bootstrap_field form.speaker layout='event' %} - {% bootstrap_field form.speaker_name layout='event' %} - {% bootstrap_field form.state layout='event' %} - {% endif %} - {% if form.room %} -
    - {% bootstrap_field form.room layout='event' %} - {% bootstrap_field form.start layout='event' %} - {% bootstrap_field form.end layout='event' %} -
    - {% endif %} - {% if form.instance.median_score != None and can_view_all_reviews %} -
    - -
    -
    - {% endif %} - {% bootstrap_field form.submission_type layout='event' %} - {% if form.track %}{% bootstrap_field form.track layout='event' %}{% endif %} - {% if form.tags %}{% bootstrap_field form.tags layout='event' %}{% endif %} - {% if form.abstract %}{% bootstrap_field form.abstract layout='event' %}{% endif %} - {% if form.description %}{% bootstrap_field form.description layout='event' %}{% endif %} - {% if form.notes %}{% bootstrap_field form.notes layout='event' %}{% endif %} - {% bootstrap_field form.internal_notes layout='event' %} - {% if form.content_locale %}{% bootstrap_field form.content_locale layout='event' %}{% endif %} - {% if form.do_not_record %}{% bootstrap_field form.do_not_record layout='event' %}{% endif %} - {% bootstrap_field form.is_featured layout='event' %} - {% bootstrap_field form.duration addon_after='minutes' layout='event' addon_after_class="input-group-append input-group-text" %} - {% if form.slot_count %}{% bootstrap_field form.slot_count layout='event' %}{% endif %} - {% if form.image %}{% bootstrap_field form.image layout='event' %}{% endif %} - {% if action != 'create' %} - {% include "cfp/includes/submission_resources_form.html" %} - {% endif %} - {% if questions_form and questions_form.fields %} -
    {% translate "Questions" %}
    - {% bootstrap_form questions_form layout='event' %} - {% endif %} + {% endif %} + {% bootstrap_field form.submission_type layout="event" %} + {% if form.track %}{% bootstrap_field form.track layout="event" %}{% endif %} + {% if form.tags %}{% bootstrap_field form.tags layout="event" %}{% endif %} + {% if form.abstract %}{% bootstrap_field form.abstract layout="event" %}{% endif %} + {% if form.description %}{% bootstrap_field form.description layout="event" %}{% endif %} + {% if form.notes %}{% bootstrap_field form.notes layout="event" %}{% endif %} + {% bootstrap_field form.internal_notes layout="event" %} + {% if form.content_locale %}{% bootstrap_field form.content_locale layout="event" %}{% endif %} + {% if form.do_not_record %}{% bootstrap_field form.do_not_record layout="event" %}{% endif %} + {% bootstrap_field form.is_featured layout="event" %} + {% bootstrap_field form.duration addon_after="minutes" layout="event" addon_after_class="input-group-append input-group-text" %} + {% if form.slot_count %}{% bootstrap_field form.slot_count layout="event" %}{% endif %} + {% if form.image %}{% bootstrap_field form.image layout="event" %}{% endif %} + {% if action != "create" %} + {% include "cfp/includes/submission_resources_form.html" %} + {% endif %} + {% if questions_form and questions_form.fields %} +
    {% translate "Questions" %}
    + {% bootstrap_form questions_form layout="event" %} + {% endif %} - {% if can_send_mails or not form.read_only %} -
    - - - {% if form.instance.code and can_send_mails %} - - - {% translate "Send mail to speakers" %} - - {% endif %} - {% if not form.read_only %} + {% if not form.read_only %} +
    + + - {% endif %} - -
    - {% endif %} -
    + +
    + {% endif %} +
    -{% endblock %} +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/feedback_list.html b/src/pretalx/orga/templates/orga/submission/feedback_list.html index bc7951d30..94b0aca05 100644 --- a/src/pretalx/orga/templates/orga/submission/feedback_list.html +++ b/src/pretalx/orga/templates/orga/submission/feedback_list.html @@ -1,16 +1,19 @@ {% extends "orga/submission/base.html" %} + {% load i18n %} {% load rich_text %} +{% block submission_title %}{% translate "Attendee feedback" %} :: {% endblock submission_title %} + {% block submission_content %} {% for entry in feedback %} {% empty %} - {% translate "There has been no feedback for this session yet." %} + {{ phrases.schedule.no_feedback }} {% endfor %} + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/feedbacks_list.html b/src/pretalx/orga/templates/orga/submission/feedbacks_list.html index 143d7238a..55933cb57 100644 --- a/src/pretalx/orga/templates/orga/submission/feedbacks_list.html +++ b/src/pretalx/orga/templates/orga/submission/feedbacks_list.html @@ -1,31 +1,35 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load i18n %} {% load rich_text %} {% load rules %} +{% block extra_title %}{% translate "Attendee feedback" %} :: {% endblock extra_title %} + {% block content %} -

    - {% translate "Attendee feedback" %} -

    +

    {% translate "Attendee feedback" %}

    {% regroup feedback|dictsort:"talk.title" by talk.title as feedbacks_list %} {% for submission in feedbacks_list %} -

    {% translate "Feedback for" %} {{ quotation_open }}{{ submission.grouper }}{{ quotation_close }}

    +

    + {% translate "Feedback" %}: {{ quotation_open }}{{ submission.grouper }}{{ quotation_close }} +

    {% for entry in submission.list %} - {% has_perm 'submission.view_feedback' request.user entry.talk as can_see_feedback %} + {% has_perm "submission.view_feedback" request.user entry.talk as can_see_feedback %} {% if can_see_feedback %} {% endif %} {% endfor %} -

    +
    +
    {% empty %} {% translate "There has been no feedback for sessions in this event yet." %} {% endfor %} + {% include "orga/includes/pagination.html" %} -{% endblock %} + +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/submission/list.html b/src/pretalx/orga/templates/orga/submission/list.html index 3091a24c8..0ffb9303e 100644 --- a/src/pretalx/orga/templates/orga/submission/list.html +++ b/src/pretalx/orga/templates/orga/submission/list.html @@ -1,28 +1,30 @@ -{% extends "orga/cfp/base.html" %} +{% extends "orga/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} {% load rules %} {% load static %} -{% load url_replace %} {% block scripts %} {% compress js %} {% endcompress %} -{% endblock %} +{% endblock scripts %} {% block stylesheets %} {% if timeline_data %} {% endif %} -{% endblock %} +{% endblock stylesheets %} + +{% block extra_title %}{{ page_obj.paginator.count }} {% blocktranslate trimmed count count=page_obj.paginator.count %}session{% plural %}sessions{% endblocktranslate %} :: {% endblock extra_title %} {% block content %} - {% has_perm 'orga.create_submission' request.user request.event as can_create_submission %} - {% has_perm 'orga.change_submission_state' request.user request.event as can_change_submission %} - {% has_perm 'orga.view_speakers' request.user request.event as can_view_speakers %} - {% has_perm 'orga.send_mails' request.user request.event as can_send_mails %} + {% has_perm "orga.create_submission" request.user request.event as can_create_submission %} + {% has_perm "orga.change_submission_state" request.user request.event as can_change_submission %} + {% has_perm "orga.view_speakers" request.user request.event as can_view_speakers %} + {% has_perm "orga.send_mails" request.user request.event as can_send_mails %}

    {{ page_obj.paginator.count }} @@ -34,7 +36,7 @@

    {% if can_send_mails %} - + {% translate "Send email" %} @@ -60,12 +62,18 @@

    {% bootstrap_field filter_form.q %} {% if show_submission_types and filter_form.submission_type %}{% bootstrap_field filter_form.submission_type %}{% endif %}
    - {% bootstrap_field filter_form.state layout='inline' %} -
    {% bootstrap_field filter_form.pending_state__isnull layout='inline' %}
    + {% bootstrap_field filter_form.state layout="inline" %} +
    {% bootstrap_field filter_form.pending_state__isnull layout="inline" %}
    {% if filter_form.track %}{% bootstrap_field filter_form.track %}{% endif %} {% if filter_form.tags %}{% bootstrap_field filter_form.tags %}{% endif %} {% if filter_form.content_locale %}{% bootstrap_field filter_form.content_locale %}{% endif %} + {# These fields are hidden, but included to keep question search intact #} + {% if request.GET.question %} {% endif %} + {% if request.GET.answer__options %} {% endif %} + {% if request.GET.answer %} {% endif %} + {% if request.GET.unanswered %} {% endif %} + {% if filter_form.is_valid and filter_form.cleaned_data.question %} @@ -74,7 +82,7 @@

    {% blocktranslate trimmed with question=filter_form.cleaned_data.question.question %} List filtered by answers to question “{{ question }}”. {% endblocktranslate %} - + {% translate "Remove filter" %} @@ -89,25 +97,25 @@

    {% translate "Title" %} - - + + - {% if can_view_speakers %}{% translate "Speakers" %}{% endif %} - {% if show_submission_types %} + {% if can_view_speakers %}{{ phrases.schedule.speakers }}{% endif %} + {% if show_submission_types %} {% translate "Type" %} {% endif %} {% translate "State" %} - - + + {% if can_change_submission %} {% translate "Featured" %} - - + + {% endif %} @@ -132,7 +140,11 @@

    - {% if can_view_speakers %}{{ submission.title }}{% else %}{{ submission.anonymised.title|default:submission.title }}{% endif %} + {% if can_view_speakers %} + {{ submission.title }} + {% else %} + {{ submission.anonymised.title|default:submission.title }} + {% endif %} {% if can_view_speakers %} @@ -144,17 +156,15 @@

    {% endfor %} {% endif %} - {% if show_submission_types %} - - {{ submission.submission_type.name }} - - {% endif %} + {% if show_submission_types %}{{ submission.submission_type.name }}{% endif %} + {% include "orga/submission/state_dropdown.html" with submission=submission %} + {% if can_change_submission %} -
    +
    - + - + @@ -189,5 +195,4 @@

    {% include "orga/includes/pagination.html" %} - -{% endblock %} +{% endblock content %} diff --git a/src/pretalx/orga/templates/orga/submission/review.html b/src/pretalx/orga/templates/orga/submission/review.html index c53dc5080..0a9125ff1 100644 --- a/src/pretalx/orga/templates/orga/submission/review.html +++ b/src/pretalx/orga/templates/orga/submission/review.html @@ -1,4 +1,5 @@ {% extends "orga/submission/base.html" %} + {% load bootstrap4 %} {% load compress %} {% load i18n %} @@ -6,30 +7,32 @@ {% load rules %} {% load static %} +{% block submission_title %}{% translate "Reviews" %} :: {% endblock submission_title %} + {% block submission_content %} {# do not compress #} - {% has_perm 'orga.view_reviews' request.user submission as can_view_other_reviews %} - {% has_perm 'orga.view_reviewer_names' request.user submission as can_view_reviewer_names %} + {% has_perm "orga.view_reviews" request.user submission as can_view_other_reviews %} + {% has_perm "orga.view_reviewer_names" request.user submission as can_view_reviewer_names %} {% if request.user in submission.speakers.all %} -
    - {% blocktranslate trimmed %} - You’re not allowed to review or see reviews for your own proposals. - {% endblocktranslate %} +
    + + {% blocktranslate trimmed %} + You’re not allowed to review or see reviews for your own proposals. + {% endblocktranslate %} +
    {% else %} {% if not read_only %} {% if request.event.settings.review_help_text %}
    -

    - {{ request.event.settings.review_help_text|rich_text }} -

    +

    {{ request.event.settings.review_help_text|rich_text }}

    - {% elif not form.instance.pk and not can_view_other_reviews and request.event.active_review_phase and request.event.active_review_phase.can_see_other_reviews == 'after_review' %} + {% elif not form.instance.pk and not can_view_other_reviews and request.event.active_review_phase and request.event.active_review_phase.can_see_other_reviews == "after_review" %}

    {% blocktranslate trimmed %} @@ -44,29 +47,27 @@ {% csrf_token %} {% bootstrap_form_errors form %} {% bootstrap_form_errors qform %} - {% if tags_form %}{% bootstrap_form_errors tags_form %}{% endif %} + {% if tags_form %} + {% bootstrap_form_errors tags_form %} + {% endif %}

    {% if not anonymise_review %} - {{ submission.title|default:'-' }} + {{ submission.title|default:"-" }} {% else %} - {{ submission.anonymised.title|default:submission.title|default:'-' }} + {{ submission.anonymised.title|default:submission.title|default:"-" }} {% endif %}
    - -
    - {{ submission.submission_type }} -
    + +
    {{ submission.submission_type }}
    {% if submission.track %}
    -
    - {{ submission.track.name|default:'-' }} -
    +
    {{ submission.track.name|default:"-" }}
    {% endif %} {% if request.event.cfp.request_abstract %} @@ -74,9 +75,9 @@
    {% if not anonymise_review %} - {{ submission.abstract|rich_text|default:'-' }} + {{ submission.abstract|rich_text|default:"-" }} {% else %} - {{ submission.anonymised.abstract|default:submission.abstract|rich_text|default:'-' }} + {{ submission.anonymised.abstract|default:submission.abstract|rich_text|default:"-" }} {% endif %}
    @@ -86,9 +87,9 @@
    {% if not anonymise_review %} - {{ submission.description|rich_text|default:'-' }} + {{ submission.description|rich_text|default:"-" }} {% else %} - {{ submission.anonymised.description|default:submission.description|rich_text|default:'-' }} + {{ submission.anonymised.description|default:submission.description|rich_text|default:"-" }} {% endif %}
    @@ -98,9 +99,9 @@
    {% if not anonymise_review %} - {{ submission.notes|rich_text|default:'-' }} + {{ submission.notes|rich_text|default:"-" }} {% else %} - {{ submission.anonymised.notes|default:submission.notes|rich_text|default:'-' }} + {{ submission.anonymised.notes|default:submission.notes|rich_text|default:"-" }} {% endif %}

    @@ -109,7 +110,9 @@
    + {% include "common/question_answer.html" with answer=answer %} +
    {% endfor %} @@ -119,7 +122,9 @@
    {% for resource in submission.active_resources %} + {% include "agenda/includes/submission_resource.html" %} + {% if not forloop.last %}
    {% endif %} {% endfor %}
    @@ -132,7 +137,7 @@
    {% if request.event.cfp.request_biography %} - {{ speaker.biography|default:'-'|rich_text }} + {{ speaker.biography|default:"-"|rich_text }} {% endif %} {% if speaker.submissions.count > 1 %}
    {% translate "Other proposals" %}: {% for other_submission in speaker.submissions %}{% if other_submission != submission %} @@ -144,32 +149,18 @@ {% endfor %} {% endif %} - {% if False %}{# todo find better way to display score #} - {% if score_categories|length > 1 %} -
    - {% for cat in score_categories %} - {% if cat.weight != 1 %} - ({{ cat.weight }} × {{ cat.name }}) - {% else %} - {{ cat.name }} - {% endif %} - {% if not forloop.last %}+{% endif %} - {% endfor %}= {{ form.instance.score }} -
    - {% endif %} - {% endif %} {% if not read_only %} - - {% if tags_form %}{% bootstrap_form tags_form layout='event' %}{% endif %} + {% if tags_form %} + {% bootstrap_form tags_form layout="event" %} + {% endif %}
    {% for score_field in form.get_score_fields %} {% bootstrap_field score_field layout="event" %} {% endfor %} - {% bootstrap_form qform layout='event' %} - {% bootstrap_field form.text layout='event' %} + {% bootstrap_form qform layout="event" %} + {% bootstrap_field form.text layout="event" %}
    - {% endif %} {% if can_view_other_reviews or form.instance.pk %} @@ -178,25 +169,27 @@ {% translate "Score" %} {% if score_categories|length > 1 %} - {% for cat in score_categories %} - {{ cat.name }} - {% endfor %} + {% for cat in score_categories %}{{ cat.name }}{% endfor %} {% endif %} - {% for field in qform %} - {{ field.label }} - {% endfor %} + {% for field in qform %}{{ field.label }}{% endfor %} {% translate "Review" %} {% if form.instance.pk and review_display %} + {% include "orga/submission/review_fragment.html" with review=review_display read_only=read_only show_reviewer_name=False %} + {% endif %} {% if can_view_other_reviews %} {% for review in reviews %} + {% include "orga/submission/review_fragment.html" with review=review read_only=True show_reviewer_name=can_view_reviewer_names %} + {% empty %} - {% translate "Nobody else has submitted a review yet." %} + + {% translate "Nobody else has submitted a review yet." %} + {% endfor %} {% endif %} @@ -215,7 +208,9 @@ {% if form.instance.pk %} {% translate "Delete review" %} {% endif %} - +
    @@ -235,4 +230,4 @@ {% endif %} {% endif %} {# endif: request.user in submission.speakers #} -{% endblock %} +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/review_delete.html b/src/pretalx/orga/templates/orga/submission/review_delete.html index a9d0c77a2..a1ffa506b 100644 --- a/src/pretalx/orga/templates/orga/submission/review_delete.html +++ b/src/pretalx/orga/templates/orga/submission/review_delete.html @@ -1,19 +1,11 @@ {% extends "orga/submission/base.html" %} + {% load i18n %} + +{% block submission_title %}{% translate "Delete review" %} :: {% endblock submission_title %} + {% block submission_content %} -

    - {% translate "Do you really want to delete your review?" %} -

    -
    - {% csrf_token %} -
    - - {% translate "Back" %} - - -
    -
    -{% endblock %} + + {% include "common/includes/action_confirm.html" %} + +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/review_fragment.html b/src/pretalx/orga/templates/orga/submission/review_fragment.html index 90366361c..f6398cce5 100644 --- a/src/pretalx/orga/templates/orga/submission/review_fragment.html +++ b/src/pretalx/orga/templates/orga/submission/review_fragment.html @@ -1,9 +1,8 @@ {% load i18n %} {% load rich_text %} + - - {{ review.score }} - + {{ review.score }} {% if score_categories|length > 1 %} {% for score in review.scores %} @@ -23,7 +22,7 @@ {% if show_reviewer_name %} {{ review.user }} {% elif not read_only %} -
    {% translate "Edit" %}
    +
    {{ phrases.base.edit }}
    {% endif %} diff --git a/src/pretalx/orga/templates/orga/submission/speakers.html b/src/pretalx/orga/templates/orga/submission/speakers.html index fd257064a..14a04ebc9 100644 --- a/src/pretalx/orga/templates/orga/submission/speakers.html +++ b/src/pretalx/orga/templates/orga/submission/speakers.html @@ -1,12 +1,16 @@ {% extends "orga/submission/base.html" %} + {% load compress %} {% load i18n %} {% load rich_text %} {% load rules %} {% load static %} +{% block submission_title %}{% translate "Speakers" %} :: {% endblock submission_title %} + {% block submission_content %} - {% has_perm 'submission.edit_speaker_list' request.user submission as can_edit_speakers %} + {% has_perm "submission.edit_speaker_list" request.user submission as can_edit_speakers %} + {% has_perm "orga.send_mails" request.user request.event as can_send_mails %} {% if can_edit_speakers %}
    {% endif %} {% for speaker in speakers %} -
    +

    - - {{ speaker.name }} + + {{ speaker.user.get_display_name }} + {% if speaker.user.avatar %} +
    + + {% translate + +
    + {% endif %}

    {% if request.event.cfp.request_biography %}

    {% translate "Biography" %}:
    - {{ speaker.biography|rich_text|default:"-" }} + {{ speaker.profile.biography|rich_text|default:"-" }}

    {% endif %}

    @@ -47,11 +58,17 @@

    {% translate "Other proposals by this speaker:" %}
    {% endif %}

    {% if can_edit_speakers %} - + + {% translate "Send email" %} + + {% endif %} + - {% translate "Edit" %} + {{ phrases.base.edit }} - {% translate "Remove" %} @@ -59,10 +76,9 @@
    {% translate "Other proposals by this speaker:" %}
    {% endfor %} - {% compress js %} {% endcompress %} -{% endblock %} +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/state_change.html b/src/pretalx/orga/templates/orga/submission/state_change.html index ec6272d34..f6a779a0b 100644 --- a/src/pretalx/orga/templates/orga/submission/state_change.html +++ b/src/pretalx/orga/templates/orga/submission/state_change.html @@ -1,18 +1,23 @@ {% extends "orga/submission/base.html" %} + {% load i18n %} {% load bootstrap4 %} +{% block submission_title %}→ {{ target }} :: {% endblock submission_title %} + {% block submission_content %}

    + {% include "cfp/event/fragment_state.html" with state=submission.state %} + + {% include "cfp/event/fragment_state.html" with state=target %} +

    -

    - {% translate "Please confirm that you really want to change the state of this proposal." %} -

    +

    {% translate "Please confirm that you really want to change the state of this proposal." %}

    {% csrf_token %} @@ -24,11 +29,11 @@

    class="btn btn-lg btn-outline-info" href="{% if request.GET.next %}{{ request.GET.next }}{% else %}{{ submission.orga_urls.base }}{% endif %}" > - {% translate "Back" %} + {{ phrases.base.back_button }}

    -{% endblock %} +{% endblock submission_content %} diff --git a/src/pretalx/orga/templates/orga/submission/state_dropdown.html b/src/pretalx/orga/templates/orga/submission/state_dropdown.html index 22731672f..a52229006 100644 --- a/src/pretalx/orga/templates/orga/submission/state_dropdown.html +++ b/src/pretalx/orga/templates/orga/submission/state_dropdown.html @@ -1,8 +1,11 @@ {% load i18n %} +