2018

Ideas for GSoC student projects for Plone from 2018.

These are project ideas proposed for Plone's participation in Google Summer of Code 2018. Student interested in working on these are encouraged to apply for the program

Note, most projects do not require the candidate to know Plone already, but we do expect applicants to have started to learn about Plone before applying. Applicants that submit bug fixes, even minor ones to add-on packages, are strongly preferred. The specific technologies required for each project are listed in the details for the idea.

Prospective students should follow our ideas for getting started before writing up their proposal.

Create-React-App for Plone-React

Summary

Plone-react is a new front-end implementation of the Plone CMS using plone.restapi. It uses the Pastanaga UI design which is integrated into the package. Currently to be able to use and customize the package and create a theme for your site you need to fork the repo. The idea of this project is to factor out the functionality into a separate package so a theme package can depend on this base package. The base package will contain the full implementation including the webpack config. A generator package like “create-react-app” will generate boilerplate for a new theme package with a dependency to the base package.

Implementation

  • Change plone-react package so it can be used as a base package.
  • Create example boiler plate for a theme package
  • Create generator package to generate the boiler plate

Skills

  • Javascript development (in particular ReactJS)
  • Webpack magician (or want to become one)

Mentors

Rob Gietema, Timo Stollenwerk, Víctor Fernández de Alba

Aims

Users as Content

(read the discussion)

Summary

Users in Plone have traditionally not been content objects.  This makes some tasks involving the management of users more difficult. 

Plone has a system for using custom content types as User objects, membrane, but the system is older, and needs upgrading and cleanup to remain compatible with newer versions of Plone. This project would undertake cleaning the existing codebase and writing documentation about the available approaches to user and identity management in Plone.

Implementation

  • merge the existing Products.membrane and dexterity.membrane code bases

  • make support of the older Archetypes content type system an option rather than required

  • determine the best approach to cataloging membrane fields and implement that solution

  • refactor the code base to reflect better architectural principles

  • write clear and consistent documentation about user and identity management options in Plone

Skills

A successful candidate will have experience writing Python code. They will need to be able to assess existing code, identify improvements, and implement them. Skill in documentation and testing will also be helpful.

Mentors

Philip Bauer

Aims

Documentation PR for docs.plone.org and a PR for a new version of the membrane add-on.

Command-Line Plone Tools

(read the discussion)

Summary

Plone uses mrbob and bobtemplates.plone to generate skeletons for Plone packages. This makes it easy for developer to create new addons and also provides best practices in structure and tests. With the recent development in bobtemplates.plone and the new plonecli, we founded the base for a more modular skeleton ecosystem. But we need to cover more parts of the Plone development and need to improve the existing templates, increase the flexibility and test coverage.

This new generation of plonecli and bobtemplates will improve the quality of Plone packages for the whole community. It will also lower the barrier to start with Plone development, as developers can just create functionalities for Plone and get already code and tests which follows known best practices.

There is also interest in adding support at the command line for generating Docker configuration and containers for development.  

For a GSoC student it’s a great way to learn Plone and our best practices.

Implementation

The objective is to add missing templates to bobtemplates.plone (portlet, tile, viewlet, view, util) and also to improve existing templates with higher test coverage and more flexibility. Also to extend plonecli with support for Docker and container-based development.

Skills

Basic Python development knowledge is mandatory. Knowledge of Plone and Jinja2 templates is useful but can be achieved during the project. Knowledge of Python and Plone testing is useful, especially plone.app.testing and plone.app.robotframework will be used

Mentors

Maik Dertappen, David Bain

Aims

A new version of bobtemplates.plone and plonecli.

GatsbyJS Integration

(read the discussion)

Summary

GatsbyJS is a static site generator written in React. With Gatsby you can fetch and populate a website from different sources. There are plugins available for a number of data sources, including content management systems.  It would be wonderful to have a full-featured plugin available to allow GatsbyJS to integrate data from a Plone site. This would allow site authors to take advantage of the power that the Plone system provides in content management, while at the same time supporting deploying that content using a blazing fast static site generator.

Implementation

The basic idea is that Gatsby call plone.restapi routes to get all the needed data. 

There is already an initial implementation on

github

.  

It's a simple example that just exports a flat list of content objects.

There are a lot of things that could be done to improve this proof-of-concept package:

  • Make the plugin customizable: for example the search query and/or credentials to access Plone site.

  • Make it possible to export the full content tree from Plone to GatsbyJS (Traverse and plone.restapi knowledge needed)

  • Properly download files/images and store them in a way compatible with GatsbyJS

  • Create a GatsbyJS theme for Pastanaga (that means, of course, just the frontend parts, any other theme would also be a possible option)

  • Enhance the GatsbyJS theme with “interactive” components that you usually need for a website: contact form, sitemap, commenting, google analytics, etc.

  • Implement Pastanaga editing (this one is some kind of a long shot and would be more a PoC type of project. We might be able to combine the advantages of a static site builder with the power of React and Pastanaga, Gatsby react components could still post content to the backend, which would automatically generate a new static version of the site)

Skills

  • Basic knowledge of cms and Plone (in particular plone.restapi)

  • Javascript development (in particular ReactJS)

  • GraphQL

Mentors

Timo Stollenwerk, Andrea Cecchi, Víctor Fernández de Alba, Rob Gietema

Aims

An npm package that can be used to easily fetch data from a Plone site, and to build a static website.

Plus: a Pastanaga theme for GatsbyJS

Improvements to Import/Export

(read the discussion)

Summary

Strategically, good content import/export is important because

  1. it allows new users to get started quickly.
  2. It also helps overcome an obstacle when users expect a SQL database to be able to import and export from.
  3. It makes it easier for regular bulk uploads or syncs of content from external sources. It allows this for non technical users and non python developers.

The end goal is to make plone more approachable for webmasters which will in turn help grow the install base. 

The aim would be a online UI which allows

  • both CSV and JSON import and export of content (using seperate files for binary/content). CSV is included so non technical users can update metadata. Both formats will able to hold the same data, CSV will need to use quoted JSON for certain parts.
  • It will allow for both object creation as well as finding and updating existing content via various unique attributes such as path or custom fields.
  • It will work for metadata, content and binary content or just combinations of these (ie just metadata refresh if required).
  • It should make it possible to export content and then reimport it into a new site with a different version such that almost all data is retained.
  • Help when imports go wrong, e.g dry-run mode, reports on content created, skipped etc etc.
  • Permissions and security to be respected. Lower roles can still use it just with content/fields they have access to.

Implementation

A GSoC project was started in 2017 to implement this, but was not completed.  This project would pick up where that one left off, cleaning the existing code and working to implement a solid user interface. The work remaining to be done includes the need to

  • Enhance the advanced tab, UI and the existing Upload pattern.

  • Improve code quality with 100% PEP8 coverage.

  • Resolve open issues

  • Add the ability to upload from another site. A site owner could enter a url and authenticate, and then stream content between sites, which would cut down the extra burden of handling and tracking of files.

  • Reach 100% test coverage

  • Add the ability to migrate big data between sites. Currently it cannot handle large sized BLOB(optional)

  • Add the ability to perform migration of data between Plone 4 and Plone 5 (optional)

Skills

A successful candidate will have Python skill. A solid sense for UI/UX will be helpful, but a good candidate can also engage with the community to build consensus about what the UI/UX should be.

Mentors

Encolpe Degoute

Aims

A completed add-on package as well as a Plone Improvement Proposal to work toward including the functionality in the core of Plone.

Editable Translations, Through-the-web

(read the discussion)

Summary

Plone Content is fully translatable through the editing interface, but the User Interface of Plone itself relies on GNU GetText .po Files. These files live on the filesystem and can be replaced, but sometimes it can be useful to change some of the translations from within a Plone site. Therefore it would be good for Plone to provide a control panel that allows site managers to override or add new translations through-the-web. The package collective.ttwpo is an existing proof of concept and can serve as a starting point for this project, the main goal of which is to provide a solid and usable user interface.

Implementation

Based on collective.ttwpo, the GSoC Student will implement a User Interface that helps administrators to easily change any existing translation files. Additionally, connectors for third party translation systems such as Transifex and POedit could be provided.

Skills

Python/Plone and Desgin Skills would help to start, but could be acquired while working on this project. The student should be comfortable driving a community discussion about the user interface design for this project.

Mentors

Alexander Loechel

Aims

For this Project the aim is to provide a PR to collective.ttwpo which will provide the developed User Interface. In the long run a PLIP (Plone Imrovement Proposal) should be written to include this functionality or package into Plone Core.

Content Quality Module

(read the discussion)

Summary

SEO, Accessibility and Content Quality are common problem areas that needs to be faced by modern editors. Automated feedback to the editors could help to improve published content.

The Plone derivate Castle CMS did have an accessibility and SEO Panel to indicate if a content page did comply certain criteria. We do want to port that to general Plone Core and make that plugable, so that different Plugins of external tools (e.g. SiteImprove, Wave, AXE) could be presented in a integrated way.

Implementation

This projects aims on create a new package that did create a modular and plugable panel on each side that reports common accessibility and SEO errors like wrong heading structure, missing captions and alt tags as well as anti pattern link text content, missing descrition keywords and non descriptive titles and captions.

Two additional plugins should be provided for SiteImprove and axe-core (maybe via axe-cli) to provide actual feedback on accessibility issues.

Skills

A successful GSoC student will require some Python, Plone and JavaScript knowledge, as well as general accessibility and SEO knowlegde. Most of the necessary skills could be learned during the project period, with help of the mentors. But a general understanding of the neccessity of diversity and inclusive technologies should be present on start.

Mentors

Alexander Loechel, Paul, Roeland, Sally Kleinfeldt

Aims

A new package for a Plone Content action / control panel should be created. in the long run this package should be included into Plone core. Therefore a PLIP (Plone Improvement Proposal) should be written, implemented and a pull request to merge into core should be created.

Editor Improvements

(read the discussion)

Summary

Many modern online tools, such as GitHub, automatically generate anchors for all headings in text. This is super convenient for (power) user because inter-linking documents is then one click away, instead of needing first to update the linked document to create an anchor that can then be linked. 

The goal of this GSoC project is to update Plone so that every heading in a document content type receives an anchor that is automatically generated. We do not mean manually using TinyMCE or its plugins to place anchors. The anchors need to placed by Plone itself, automagically, without intervention by the content author. 

Implementation

Plone already has a “AutoTOC” feature that creates automatic Table Of Contents at the top of documents with links to headings (however these links are numbers and not very future proof). So one possible approach is to reuse or extend the table of contents (TOC) setting to:

  • Allow hiding the TOC (possibly by default).
  • Create anchors from the heading text and normalize it (lowercase, replace non-alphanumerics with “-”, and trim, for example). In other words, "#1 Heading With A TLA (three-letter acronym) and doubled--dash" would become "1-heading-with-a-tla-three-letter-acronym-and-doubled-dash”.

It needs to be ensured that anchors are unique to the page by suffixing them with numbers in case of duplicates. This would be the same as what Plone does with document names in case of duplicates.

Additionally, when the editing bar is positioned across the top (it is positioned to the left by default, but some sites position it across the top) it covers the linked heading anchor. the positioning of the editing bar needs to be adjusted so that there is sufficient clearance and the heading is revealed

The student may also wish to work with their mentor to add other, related improvements to the TinyMCE integration in order to ensure the scope is appropriate.

Tests and documentation for all changes are required as well.

Skills

A successful candidate will require some Python, Plone and JavaScript knowledge, as well as general UI/UX knowlegde. Nothing very deep and technical, but a general overview of how things work.

Mentors

Nejc Zupan

Aims

A new release of the Plone TinyMCE integration package with the upgraded functionality, compatible with all supported Plone versions.

Your Own Idea

Summary

We love your own suggestions! Ask us at community.plone.org and we'll help you polish the idea into something we both love.

Implementation

As long as it benefits the Plone community it can be anything. Most likely the majority will be Python and direct to Plone, but we will also accept Zope, ZODB, WSGI, HTML/CSS, JavaScript, etc.

Skills

Tailor your idea to your own skills

Mentors

Don't worry about this, at Plone we think it's our responsibility to find you the right mentor.

Aims

A core contribution or an add-on, most likely.