The Case Study#

Background#

For this training we will build a website for a fictional Plone conference on Mars.

By 2050 human civilisation has reached the stars and each year the conference is held on a different planet.

The conference website we want to create should be reusable in the following years, so some things should be configurable.

Requirements#

Here are some requirements that we want to meet when the site is done:

  • As a visitor I want to find current information on the conference.

  • As a visitor I want to find information about talks, trainings and keynotes.

  • As a speaker I want to be able to submit talks.

  • As a speaker I want to see and edit my submitted talks.

  • As an organizer I want to see a list of all proposed talks.

  • As an organizer I want to display the sponsors of the conference.

  • As a jury member I want to vote on talks.

  • As a jury member I want to decide which talks to accept, and which not.

Note that requirements connect roles with capabilities. This is important because we'll want to limit the capabilities to those to whom we assign particular roles.

Changing requirements#

If you have ever organized a conference you will find that this story is pretty rough. Like in many real projects new requirements will come up during the development of the project.

Here are some specific features-requirements that will come up:

  • Talks should be assignable to rooms

  • Available values for audience, type of talk and rooms be managed by a admin

  • Talks should have a time and date to display them in a calendar

  • We want a calendar-view that shows the talks in a timetable with rooms as columns

  • Talks should be able to have multiple speakers (e.g. for panel discussions)

  • We want to be able to easily submit Lightning Talks

We will see how you can adapt and extend the project to meet these changing requirements.

Tasks#

During the course of the training you will solve the following tasks.

  • Installation of backend and frontend

  • Create users and organize them

  • Configure some basic settings of the website

  • Create content with info about the conference using the default features

  • Create a Plone add-on to hold our own python code

  • Create a contenttype 'talk' to store all the data required for a talk

  • Create a view to display talks in a nice way

  • Create a view that shows a list of talks to allow a easy overview

  • Create a new field to mark arbitrary content as 'featured'

  • Display this featured content on a dynamic frontpage

  • Add date and time to talks to assign them in a schedule

  • Display date and time on talks

  • Allow potential speakers to self-register and then create and submit talks

  • Store the data on the speaker in a custom content-type

  • Create a relation from speaker to talk upon creation of a talk

  • Allow multiple speakers for one talk

  • Create a sponsor contenttype to manage sponsors

  • Store non-visible information about the sponsor in the sponsor-type

  • Display sponsors on all pages sorted by level

  • Allow some settings to be configurable by an admin in a control panel

  • Create a calendar view to display talks

  • Turn the calendar view in a reuseable block to include it on the frontpage

  • Add a separate add-on to allow voting on talks

  • Create a react-component for voting and connect it to the backend with a custom restapi-endpoint

  • Create a simple mobile app that allows the easy submission of lightning talks (a type of talk)

Technologies and Tools#

Optional topics without documentation#

The following topics are not covered in the written training but could be discussed on demand.

  • Custom forms

    • Hand-written forms

    • Form built using zc3.form

    • Form using addons

    • Custom add- and edit-forms for content

  • Custom fields

  • Caching (plone.app.caching, memoize, Varnish etc.)

  • Portlets

  • Zope Component Architecture in depth

  • LDAP-integration, Users, Authentication, Member profiles, Members as content

  • Using external APIs

  • Asynchronous processing

  • ZODB

  • RelStorage

  • Debugging and Profiling

  • Releasing Your Code

  • Professional Deployments

Topics covered in other trainings and documentation#