Giter VIP home page Giter VIP logo

devday_website's Introduction

Coverage Status

Dev Day website

The Dev Day website is built using Django CMS. The project consists of a Django CMS content management part and some custom Django apps for talk, attendee and speaker management.

Developing

Information on how to set up a development environment on your machine, running the application, and performing various development and maintaince tasks is detailed in README-DEV.md. It also includes some application design information.

Quickstart

To get a local development instance up and running:

  1. Install Docker (on macOS and Windows install Docker For Desktop)
  2. Install Docker Compose
  3. Clone this repository
  4. Run ./run.sh devdata in a shell and wait for it to complete (Windows: use Git Bash)
  5. Access the web site at localhost:8000
  6. Log in as [email protected] with password admin.

Running A Production Environment

To set up a test or production environment, see README-PROD.md.

Contributing

We welcome your ideas and improvements! Please see CONTRIBUTING.md for details.

Credits

This Django project has been made possible by the contributions of:

  • Jan Dittberner
  • Jeremias Arnstadt
  • Felix Herzog
  • Stefan Bethke
  • Daniel Sy

and the Software Engineering Community at Deutsche Telekom MMS GmbH.

devday_website's People

Contributors

artifactdev avatar danielsy avatar dependabot[bot] avatar jandd avatar jenslauterbach avatar ronnyfriedland avatar schurzi avatar stblassitude avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

devday_website's Issues

Implement states for talk submissions

Is your feature request related to a problem? Please describe.
Currently speakers can submit talks and can modify the summary and description whenever they like. This can cause problems for reviewers/committee members and the talk presentation after an event.

Describe the solution you'd like
I suggest to implement a kind of state machine for talks that has consequences on the actions that are possible to do with the talk. I would like to store the state transitions and their data.

Actor Action State transition
Speaker Add <new> → draft
Speaker Edit draft → draft
Speaker Submit for review draft → submitted
Committee Comment submitted → submitted
Committee Request for changes submitted → draft
Committee Accept submitted → accepted by committee
Speaker Confirm accepted by committee → confirmed by speaker
DevDay team Add to session grid confirmed by speaker → published

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
The implementation of this feature will affect a lot of view and form code and may break things, writing test for all touched views and forms is a must.
The consequences of each state transition needs to be described / implemented
At least the state transitions initiated by the Speaker until the submitted state need to be implemented before the call for papers.

public speaker view produces internal server error

Describe the bug
Accessing /session/speaker/98/ leads to Internal Server Error:

Key Value
Exception Type: MultipleObjectsReturned
Exception Value: get() returned more than one Speaker -- it returned 2!
callback <function SpeakerPublic at 0x7fb27d934ea0>
callback_args ()
callback_kwargs {'pk': '98'}

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'https://www.devday.de/session/speaker/98'
  2. See error + Stacktrace mail to admin

Expected behavior
The public speaker page is shown.

Attendee Registration broken if logged in

Describe the bug
Opening /attendee/register, an exception is shown if you're logged in as an editor (potentially other user categories as well).

It appears tests are not covering this part very well.

When editing pages, make it clear which elements are currently not shown on the live site

Is your feature request related to a problem? Please describe.
When editing pages, the templates render placeholder and static_placeholder elements even for parts of the page that are not currently visible to regular users. However, there is no way for an editor to see which elements are invisible, which is confusing.

Describe the solution you'd like
Elements that are only shown so editors can access them, but are invisible on the live site to regular users, should be visually distinguishable from regular parts of the page. For example, an outline might mark the div that is invisible on the live site.

Modify speaker registration and representation

Is your feature request related to a problem? Please describe.
Currently a Speaker database entry is tied to an Attendee database entry and talks that were submitted by that speaker. This has a list of disadvantages:

  • A new speaker instance is created when a speaker submits talks for a new event
  • A speaker cannot decide to re-use existing biography and photographs
  • Some speaker information is stored in the DevDayUser itself (name, organisation, ...) which leads to the issue that changes to these data will modify the Speaker representation for existing sessions by that speaker
  • A user that has been a speaker in past events cannot be deleted without losing all information about his talks too

Describe the solution you'd like
I would like to redesign the speaker registration process and entity model. There should be some kind of base speaker data (name, firstname, twitter handle, phone number, company/institution, job title, short biography, ...) that can be reused for new events if the speaker decides to do so. This information does not need to be tied to a specific event and thus Attendee entity.
When a talk submission of a speaker is accepted for an Event (by both the committee and the Speaker, which will lead to another feature request for talk states) a copy of the data that is relevant to display the Speaker for the current event to the audience should be made. This will lead to the nice effect that the speaker data will be frozen and will not change when the speaker changes personal data afterwards. An admin interface for changing such frozen speaker data will be required to fix typos or do modifications if there is some urgent personal/legal/other demand from the speaker or other relevant party.

Describe alternatives you've considered
I thought about some kind of state for the speaker itself but this will not be sufficient to fix all of the disadvantages mentioned.

inconsistent sizes of headings

Describe the bug
currently the HTML headings <h1>..<h6> are inconsistently sized.

To Reproduce
Steps to reproduce the behavior:

  1. Open any page
  2. Edit content
  3. Use headings as format templates
  4. See error

Expected behavior
The headings should be formatted semantically with h1 being most prominent to h6 being least prominent.

Additional context
see http://getbootstrap.com/docs/4.1/content/typography/#headings for a good reference

AttributeError in Speaker admin interface

Describe the bug

Key Value
Request Method: POST
Request URL: http://app:7000/admin/talk/speaker/97/change/?_changelist_filters=user__event__id__exact%3D4
Exception Type: AttributeError
Exception Value: 'NoneType' object has no attribute 'read'
args (<WSGIRequest: POST '/admin/talk/speaker/97/change/?_changelist_filters=user__event__id__exact%3D4'>,
'97')
kwargs {}
self <talk.admin.SpeakerAdmin object at 0x7f1f42fc3a90>
view <bound method ModelAdmin.change_view of <talk.admin.SpeakerAdmin object at 0x7f1f42fc3a90>>

Seems to be an issue with filtering by event.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'https://www.devday.de/admin/talk/speaker/97/change?_changelist_filters=user__event__id__exact%3D4'
  2. Click on 'Sichern'
  3. See error (500 Internal Server Error) and mail to admins

Expected behavior
The speaker update is saved and a redirect to the speaker list ist performed.

Additional context
We do not have a test case covering this issue.

We need CMS Module for sponsor area

Is your feature request related to a problem? Please describe.
We need a specific structure for displaying the sponsors correctly, currently this structure is only possible by editing in html mode. We should find an easier way to add new sponsors.

Describe the solution you'd like
A CMS Editor plugin which adds a div with selectable classes, for example we can put an element in the editor and than we can give this element element the numbers of columns for each of the viewports and generell (col-12, col-sm-6, col-lg-3, ..). This element should take linked images as content.

Describe alternatives you've considered
We could edit the needed columns in html view of the editor

Additional context
Required codestructur for sponsor area:
<div class="col-12"> <a href="https://www.t-systems-mms.com/"> <img src="" class="align-center " width="420"> </a></div><div class="col-6 col-md-3"> <a href="https://www.t-systems-mms.com/"> <img src="" width="250"> </a></div><div class="col-6 col-md-3"> <a href="https://www.t-systems-mms.com/"> <img src="" width="250"> </a></div><div class="col-6 col-md-3"> <a href="https://www.t-systems-mms.com/"> <img src="" width="250"> </a></div><div class="col-6 col-md-3"> <a href="https://www.t-systems-mms.com/"> <img src="" width="250"> </a></div>

Add CMS Picture plugin templates and settings

Describe the solution you'd like
The DjangoCMS Picture plugin offers editors to select a template, and select a croping/thumbnail/scaling set of options. We should figure out what we need for integrating the collage image on the homepage, and on other pages.

This improves on the work in PR #29.

Add sponsoring cards

Is your feature request related to a problem? Please describe.
We need sponsoring cards which showing the available sponsor packages with the included features.

Describe the solution you'd like
I would like to use bootstrap cards with specific styling to fit ci/cd of the devday

Additional context
By click on "Jetzt Sponsor werden" a page should appear with the cards on top and a contactformular specific for sponsore request under the cards.

Send email to all participants, all speakers, all...

Is your feature request related to a problem? Please describe.
For marketing and organizational purposes, it is necessary to be able to send an email to all members of a certain group.

Describe the solution you'd like
The email subject and body should be edited in Django; the recipient groups should be selectable from at least:

  • all registered users
  • all registered speakers
  • all current attendees
  • all current speakers
    Describe alternatives you've considered
    A clear and concise description of any alternative solutions or features you've considered.

The email should be sent from [email protected], and have as sender [email protected].

Add `update` subcommand to prod.sh

Is your feature request related to a problem? Please describe.
Updating a prod install from git should be easy to perform.

Describe the solution you'd like
Use ./prod update to update the current install from the current git branch, rebuild all necessary containers and restart the application.

Provide automated/scripted backup for prod environments

Is your feature request related to a problem? Please describe.
Currently it is tedious to create backups of the production environment because there is no simple one-line command to perform backups of the PostgreSQL database and corresponding media files.

Describe the solution you'd like
Add a backup subcommand to prod.sh. The command may either be based on the docker-compose.tools.yml backup container or can just invoke the necessary commands from prod.sh directly.

Additional context

  • The backup files should contain the timestamp in date +%Y%m%d-%H%M%S%z format
  • media and db backup should use the same timestamp
  • media backup should have the same path structure as with the ./run.sh backup command for dev environments

Add menu entry if registration or submission is open

Is your feature request related to a problem? Please describe.
Users should be able to register or submit a talk for the current event easily (if registration/submission is open).

Describe the solution you'd like
When registration is open for the current event, a menu item should automatically be added to the main menu. Same goes for talk submission. This involves adding menu entries in talk/cms_menus.py

Provide some guidance for usage of CSS classes in templates

Is your feature request related to a problem? Please describe.
I worked on several templates in the code base and struggled to choose the correct column width classes (like col-xx col-md-xx offset-md-xx and so on).

Describe the solution you'd like
I would like a short style guide with advice like:

Use class="col-12 col-md-10 offset-md-1 content-area" for pages with short textual explainations
Use <h2> for the page headline
Use ... for forms
See ... as an example how to style ...

Describe alternatives you've considered
I looked into our existing codebase but it unfortunatelly it is a bit inconsistent regarding CSS class usage. The existing styled pages (Profile form, Session grid, Start page) are very specific and not sufficient as general advice.

Allow setting a valid new password for a DevDayUser in the admin interface

Is your feature request related to a problem? Please describe.
It is possible to set an invalid password for a user by just entering some text in the password field of the DevDayUser admin page. It would be nice to be able to set a new password and/or send a password reset link.

Describe the solution you'd like
Make the password field hash the entered password or generate a fresh password via a custom admin command for the DevDayUser model. It would be useful to make the password field on the admin page display-only.

Describe alternatives you've considered
There is a cli command manage.py changepassword but this makes it hard to setup new users.

placeholder for CfP text on speaker registration pages

Is your feature request related to a problem? Please describe.
Currently there is no introduction text for the CfP on the speaker registration pages.

Describe the solution you'd like
Add a static_placeholder for the CfP introduction text on the login and registration pages for speakers.

Sessions don't show up in the grid unless they have a track

Describe the bug
Sessions that don't have a track assigned are not shown in the session grid.

To Reproduce
Create a session for an event, assign it a time slot, but don't select a track. The session will not be shown in the grid.

Expected behavior
All sessions assigned to a time slot are shown.

Add frontend build to run.sh, overall build

Is your feature request related to a problem? Please describe.
The frontend build currently is separate, and it's results are checked in as source code. This is undesirable, as it can lead to outdated/inconsistent states between the frontend and application spaces.

Describe the solution you'd like
The frontend build should be executed as part of the overall build, i. e. as part of ./run.sh build.

The Docker image should be part of the Docker Compose setup.

The build should also be fully reproducible; this requires changing of the banner in frontend/gulp/config.js.

Add deep-linkable session detail page

Is your feature request related to a problem? Please describe.
Currently it is not possible to directly link to the summary or footage of a session of either the current or a past event.

Describe the solution you'd like
I'd like a session specific detail page with an own URI that can be linked to. The URI should contain the slug of the event and a slug for the session that is based on the session title.

Describe alternatives you've considered
Currently there is a speaker page that lists the sessions of the speaker in an accordion and a video page for an event that embeds footage from sessions. Sessions in both of these pages could be replaced with links to the new page.

Additional context

Links to the currently existing functionality for Dev Day 2018 are:

Enable faster container shutdown via dumb-init

Is your feature request related to a problem? Please describe.
Container shutdown takes longer then necessary because the Python process does not properly work as PID 1. Shutdown should work much faster.

Describe the solution you'd like
https://github.com/Yelp/dumb-init

Additional context
I implemented the same for another Python application by adding dumb-init to the apk add execution and by changing the ENTRYPOINT command to ENTRYPOINT ["dumb-init", "..."]

Update imprint

Describe the bug
The imprint should be updated to reflect new executives..

To Reproduce
Steps to reproduce the behavior:

  1. Go to https://www.devday.de/imprint/
  2. Scroll down to 'Geschäftsführung.'
  3. See error: Peter Klingenburg

Expected behavior
Ralf.

Allow complex session grid display

Is your feature request related to a problem? Please describe.
The current session grid is computed automatically from the rooms and talkslots, and the sessions and timeslots linked to them. This works well for a dense matrix, where all talk slots and rooms have been assigned a session (with the exception of breaks etc.)

The 2019 grid will likely have a more complex layout. When rendered plainly, it will be a sparse matrix with many of the elements ending up being empty. (The morning will look much different from the afternoon.)

Describe the solution you'd like
We need to come up with either

  • a way to condense the matrix to a compact representation, or
  • a tool to build the grid visually, assigning talk slots to elements manually.

Describe alternatives you've considered
Continuing to use the current algorithm unchanged will lead to an unsightly display.

Additional context
We already have the situation that for 2015 and 2016, the fourth room is displayed, but doesn't have any talks in it. When adding three workshop rooms and the excursion, it would get worse.

Presentation of the Collage / Picture

Describe the solution you'd like
It would be great, if the picture / collage is automatically as wide as the white description column - or below the description "box". In addition you should have the posibility to zoom in with a click on the picture (picture opens in front of the website).

Add slides and videos to devdata

The test data set needs to include video and slideshare links for talks.

When creating the talks, fill in the video and slideshare ID fields.

Styling of Checkboxes

Is your feature request related to a problem? Please describe.
The Checkboxes should be styled in a way that fits the visual communication and other input fields.

Describe the solution you'd like
A CSS Only styling approach

Sitetemplate or sites without call to action area

Is your feature request related to a problem? Please describe.
We need a sitetemplate for sites where the content shouldn't get a calltoaction-area (colored columns).

Describe the solution you'd like
The container in the content area where text or any content is added to should look like this:
<div class="offset-lg-2 col-lg-8 col-12"> Content </div>

Create User menu, move existing entries and add new ones

Is your feature request related to a problem? Please describe.
As a logged in user, I get logout and profile links. If I'm a member of the committee, I also get the session selection entry. If I'm a staff member, I get the checkin link. Additionally, speakers should have prominent links to manage their submissions.

Describe the solution you'd like
Create a User menu (preferably with a well-recognized icon) and put all these functions under it. Since we have more space in that menu, we can use more descriptive menu titles.

Improve test data

Describe the solution you'd like
We need additional test data entries:

  • site.domain should use the appropriate value for the environment (localhost:8000, devday-test.mms-at-work.de:8080) instead of devday.de
  • the sponsoring page should link to the sponsoring app
  • a basic set of sponsoring packages should be added for the current event
  • die Seite sponsoring sollte auf die Sponsoring-App verlinken
  • es sollte ein Grunddatenbestand für Sponsoringpakete für das aktuelle Event da sein, damit man den nicht manuell pflegen muss

Infobeamer schedule.xml does not filter rooms for event

Describe the bug
/<event_slug>/schedule.xml contains all rooms and not just those relevant to the event.

To Reproduce
Steps to reproduce the behavior:

  1. Go to http://localhost:8000/devdata19/schedule.xml
  2. See error

Expected behavior
schedule.xml should contain items for the specific event only.

Additional context

  • it should be checked whether this is applicable for other items in the schedule.xml too
  • we should not render a schedule.xml if there are no talks scheduled yet but return a 404 in that case

Prod data migration fails because of long session titles and small slug field

Describe the bug
Trying to migrate the production data to the current schema failed in devday/talk/migrations/0028_add_slugs_to_talks.py because there are session titles where the result of slugify() is longer than the default 50 characters. This results in:

django.db.utils.DataError: value too long for type character varying(50)

Applying talk.0028_add_slugs_to_talks...devday_website_app_1 exited with code 1

To Reproduce
Steps to reproduce the behavior:

  1. Take a production dump
  2. Restore database and media from dump
  3. Run ./prod.sh up -d app
  4. See error in output of ./prod.sh logs app

Expected behavior
The migration works fine and application starts.

Additional context
This issue has been introduced by implementing #10

Add docker image for test tooling

Is your feature request related to a problem? Please describe.
Currently it is hard to populate the test environment with development data because the prod image that is used there does not provide the necessary Python dependency lorem (which is not needed in production). The dev app image cannot be used because it does not have support for the fully locked down Vault of the test environment.

Describe the solution you'd like
I would like to have a tool image for the test environment that populates the database. Ideally the image would start up, run the migrate and devdata management commands and stop.

Describe alternatives you've considered
I tried the dev app image -> Vault problems
I tried the prod app image -> no lorem dependency

Additional context

  • Maybe this could be integrated with the docker-compose.tools.yml containing the backup service which is currently not fit for production either because it uses the hard coded local development password

Mark archive pages more clearly

Describe the bug
The design of the archive pages features the teaser for the upcoming conference clearly, but there's less indication that the program you're looking at is actually for a past event.

To Reproduce
https://www.devday.de/devday17/talk/

Expected behavior
Either modify the teaser on the archive pages to make it clear it's a teaser for the upcoming event, remove it entirely, or make the actual page title ("Sessionplan 2017") more prominent.

production backup should work without running the app

Is your feature request related to a problem? Please describe.
Currently ./prod.sh backup performs a full docker-compose up -d before running the backup. This requires starting the application and possibly other containers. This can lead to a problem if the data migrations in the app container fail or the backup is intended to be made just for a production rollout, where the new code is already in place.

Describe the solution you'd like
I want to make sure that the db container is running and would then just perform a one-off job using docker-compose run app tar c -C /srv/devday/media to avoid using the new code and running potential new migrations.

Missing attendee picker in user admin

Describe the bug
When editing a user, there's no way to add an attendee object for that user, or to remove existing ones.

Also, the attendee admin list view is pretty much useless and should be extended with a search field.

Expected behavior
It's easy to modifiy attendee status for a user.

Attendees should be active only after the user can log in

Describe the bug
Right now, we treat the existence of an Attendee object as proof that a user can and will attend the event.

Expected behavior
We should ensure that we only consider Attendee objects valid for which the user has completed the double-opt-in activation, and can log in to the site.

Factor common test code in to our own class

Is your feature request related to a problem? Please describe.
Many of the test case classes have very similar contents; we also spread a number of (semi-)constants over the modules, or repeat them in all of them.

Less boilerplate leads to tests that are easier to understand and maintain.

Describe the solution you'd like
Create a class devday/test/testutil.py DevDayTestCase derived from Django's TestCase, and maybe one for SimpleTestCase, and move common code to member methods.

Make devdata work with prod setup

Is your feature request related to a problem? Please describe.
The devdata management command does not work in prod setups yet.

Describe the solution you'd like
Move the lorem dependency to prod dependencies.

Allow attendees to vote on sessions (for session grid)

Is your feature request related to a problem? Please describe.
As organizers, we're interested in two metrics: when planning the session grid, how many attendees will likely want to hear a talk, and after the event, how did attendees like each talk.

Describe the solution you'd like
After the program committee has selected the talks for the event, attendees should be able to register interest in the talks. The exact format has to be determined; for the organizers, a ranked list of talks needs to be produced, so we can make sure popular talks are not scheduled in the same time slot, and are scheduled in larger rooms.

Add new formats to talk submission

Is your feature request related to a problem? Please describe.
For 2019, we're offering multiple separate formats for talk submissions: a lightning talk with a length of ~10 minutes, a regular talk with a length of either 45 or 60 minutes, or a workshop (about 3 hours).

Speakers should be able to indicate which of the formats they find acceptable for their talk.

Describe the solution you'd like
When submitting a talk suggestion, speakers can check which of the formats they are willing to work with. These format options are managed per event.

Provide flow dependent help text / information on registration and login pages

Is your feature request related to a problem? Please describe.
There are multiple ways how users of the website can reach the registration and login pages. It may be hard for the user to see the reason especially if the user gets interrupted between steps of the link flow.

Describe the solution you'd like
Add an optional URL parameter to the register and login URLs that triggers the display of a flow specific message.

Describe alternatives you've considered
Separate login and register pages for each flow would be an alternative but would lead to a lot of code duplication and future maintenance issues.

Exception in talk preview

Describe the bug

Key Value
Request Method: GET
Request URL: http://app:7000/devday18/talk-preview/
Exception Type: FieldError
Exception Value: Non-relational field given in select_related: 'slug'. Choices are: (none)
callback <function TalkListPreviewView at 0x7f2600a59048>
callback_args ()
callback_kwargs {'event': 'devday18'}

A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'https://www.devday.de/devday18/talk-preview/'
  2. See error and mail to admins

Expected behavior
The talk-preview page should be displayed

Additional context
We obviously do not have a test case covering this issue.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.