Fixing Plone 5, the Framework

A story of early adoption.

Plone is known to be a great CMS and also a great framework for CMS-ish applications.

Because of the many improvements in Plone 5 we used it for our projects, even before it's official release.

Like with any Dot-Zero release, this comes with a cost: bugs, regressions, missing functionality.

But this is open source, so we gave back and - together with the Plone community - fixed all the problems along the way to everyone's benefit.

BlueDynamics Alliance

About the talk

We often use Plone in its depth - as a framework to build on

It is possible to do this close by the Plone core.

Plone 5 helped us a lot to meet and exceed the requirements.

But due to the early adoption, we had to face a lot of problems and find solutions which we brought back upstream.

The end result is again far closer to a Plone-the-framework as we need it.

The Plone 5.0 Release

Why was it released, when it wasn't ready yet?

  • It was ready a CMS - UI-Level worked.
  • It was not ready as a framework.
  • Important to get it out of the door, so people start using it.

About the projects

We realised some projects with Plone 5.

Here 3 examples

This talk is about the requirements we had, the problems we faced and the solutions we found on three example projects:

Porsche Informatik Salzburg

by Klein & Partner KG

Our involvement

Customer Requirements

Project Characteristics

Architekturstiftung Österreich

by programmatic, Johannes Raggam in cooperation with Klein & Partner KG and The Schubiduquartett Design Agency

Our involvement

Customer Requirements

  • layout/tiles/mosaic w/o editor
  • not a single viewlet or portlet used/written
  • collective.lineage
  • plone.app.imagecropping
    • rewritten Js and large parts of backend
    • plone.scale/plone.namedfile refactored at large
  • collective.easyform integrated (merging plone5)

Project Characteristics

Swiss Bankers Association

by agitator websolutions, Peter Holzer in cooperation with Klein & Partner KG

Our involvement

Customer Requirements

plone.app.multilingualindexes collective.linguatags

About our involvement in Open Source

Giving back via Pull Requests

portal tabs

https://github.com/plone/Products.CMFPlone/pull/1689 Add review state to portal tabs results #1689

resource registry

https://github.com/plone/Products.CMFPlone/pull/1500 Simpler generate gruntfile/ compile resources #1500

https://github.com/plone/Products.CMFPlone/pull/1496 make Gruntfile.js generator more verbose #1496

https://github.com/plone/Products.CMFPlone/pull/1425 better formatting of generator and generated file in orer to increase… #1425

https://github.com/plone/Products.CMFPlone/pull/1647 Fix GenericSetup bundle compile error with missing resources #1647

https://github.com/plone/Products.CMFPlone/pull/1784 Fix plone-legacy RequireJS errors in development mode #1784

toolbar

https://github.com/plone/Products.CMFPlone/pull/1733 Prettify toolbar #1733

https://github.com/plone/Products.CMFPlone/pull/1426 Minor toolbar cleanup: #1426

https://github.com/plone/Products.CMFPlone/pull/1416 Add less variable for width of secondary toolbar column #1416

related items

https://github.com/plone/mockup/pull/696 Relateditems refactoring + more #696

https://github.com/plone/mockup/pull/676 WIP Related Items Optimizations #676

https://github.com/plone/plone.app.content/pull/101 allowUpload JSON view, content-type json for all #101

structure pattern

https://github.com/plone/mockup/pull/660 Structure pattern: Alert design #660

https://github.com/plone/mockup/pull/651 Structure pattern action items changes #651

https://github.com/plone/mockup/pull/618 WIP: Making structure pattern more flexible to customization options #618

tinymce

https://github.com/plone/mockup/pull/637 Use official TinyMCE bower dependency #637

https://github.com/plone/Products.CMFPlone/pull/1598 multiple TinyMCE styles from theme bundle #1598

mosaic

Porsche Informatik

default ILayoutAware ... alles kann ILayoutAware werden ... jeder context kann ILayoutAware gerendert werden.

Also clean up of all the code.

https://github.com/plone/plone.app.blocks/pull/37 adapterize ILayoutAware #37

https://github.com/plone/plone.app.blocks/pull/34 add subresponse_exception_handler in order to deal more sane with 401… #34

https://github.com/plone/plone.app.standardtiles/pull/27 Take permissions and visibility of viewlets in tiles into account. #27

https://github.com/plone/plone.tiles/pull/7 Fix missing view permissions info on tiletype registration #7

https://github.com/plone/plone.app.mosaic/pull/179 Optional show all fields #179

https://github.com/plone/plone.app.mosaic/pull/226 WIP Use adaptarized plone.app.blocks >=4.0.0 #226

Lineage

https://github.com/plone/Products.CMFPlone/pull/1629 Navroot subjects setting #1629

https://github.com/plone/plone.app.content/pull/82 folder contents: fix breadcrumbs and toolbar for subsites and VH #82

https://github.com/plone/plone.app.content/pull/93 enable non-portal-root published sites to deliver the translations fo… #93

https://github.com/plone/plone.app.vocabularies/pull/35 Optional keywords of current navigationroot only. #35

https://github.com/plone/Products.CMFPlone/pull/1514 fix #1513 - Wrong portal_url used for TinyMCE in multilingual site #1514

https://github.com/plone/Products.CMFPlone/pull/1459 Use getSite() instead of portal url for controlpanel portlets #1459

Optimizations

https://github.com/plone/plone.app.contenttypes/pull/348 deferred initialize to reduce costs of adapter lookup. #348

https://github.com/plone/plone.app.contenttypes/pull/359 configure edit urls for locking support #359

https://github.com/plone/plone.app.contenttypes/pull/308 Change all text getters on plone.app.textfield.value.RichTextValue ob… #308

https://github.com/plone/plone.app.contenttypes/pull/288 IRichText indexing for all and html to plain transform #288

https://github.com/plone/plone.app.contenttypes/pull/287 IRichText indexing for all and html to plain transform #287

https://github.com/plone/plone.app.dexterity/pull/215 The defaults of exclude from navigation is now obtained from an adapter. #215

https://github.com/plone/plone.app.event/pull/228 plone.autoform.directives and more generic javascript #228

https://github.com/plone/plone.app.event/pull/227 Don't validate empty start/end #227

https://github.com/plone/plone.app.event/pull/223 More graceful dates_for_display when no start/end #223

https://github.com/plone/plone.app.registry/pull/22 Add traceback info with record name to importer in order to ease debugging #22

https://github.com/plone/plone.registry/pull/10 Give RecordsProxy a parent. #10

https://github.com/plone/plone.subrequest/pull/9 Allow to pass a custom exception handler for the response. #9

https://github.com/plone/plone.subrequest/pull/8 Fixes out-of-memory errors when using lots of subrequests #8

unload protection

https://github.com/plone/plone.app.theming/pull/112 Enable unload protection by using pattern class pat-formunloadalert i… #112

https://github.com/plone/plone.app.z3cform/pull/48 Enable unload protection by using pattern class pat-formunloadalert i… #48

https://github.com/plone/Products.CMFPlone/pull/1730 Enable unload protection by using pattern class pat-formunloadalert i… #1730

https://github.com/plone/plone.app.z3cform/pull/48 Enable unload protection by using pattern class pat-formunloadalert i… #48

patterns

https://github.com/plone/plone.app.z3cform/pull/46 Call callables in pattern options #46

https://github.com/plone/plone.app.z3cform/pull/45 Allow to set CSS class via plone.autoform directives #45

https://github.com/plone/plone.app.z3cform/pull/24 Allow time options to be customized for DatetimeWidget. #24

forms

https://github.com/plone/plone.autoform/pull/15 orderable fieldsets #15

https://github.com/plone/plone.autoform/pull/13 Enable override of fieldset label/description in a subsequent directive. #13

https://github.com/plone/plone.autoform/pull/11 Sane ordering for fields. #11

https://github.com/plone/plone.patternslib/pull/9 Thet improvements #9

https://github.com/plone/plone.patternslib/pull/7 masonry, imagesloaded upd. uncompressed in resource registry #7

https://github.com/plone/plone.patternslib/pull/6 WIP: bower, pat-leaflet, pat-gallery, cleanup #6

https://github.com/plone/plone.scale/pull/11 Cleanup: don't scale images up for direction "down", GIF handling, zero as flexible width #11

https://github.com/plone/plone.namedfile/pull/24 use latest plone.scale scaling factories #24

https://github.com/plone/plone.namedfile/pull/22 Use ZCA to fetch the scaling factory using IScalingFactoryFetcher #22

https://github.com/plone/plone.transformchain/pull/5 Added events to notifiy before/after all/single transform(s) are executed #5

Lessons learned

Want to contribute?

This is a really good idea!

be part of the world wide community

Ask questions at community.plone.org

File issues at GitHub!

If in doubt file at plone/Products.CMFPlone

Enhance the documentation

Your future self and coworkers will love you!

Fix bugs

Enhance Addons

collective

Plone Improvement Proposals (PLIP)

Enhance the ecosystem around Plone

SpaceForward
Right, Down, Page DownNext slide
Left, Up, Page UpPrevious slide
POpen presenter console
HToggle this help