Plone Intranet under the hood

Embed Size (px)

Citation preview

cosent_slide_hd

Plone Intranet
under the hood

Guido Stevens@GuidoStevens

cosent.nlSocial Knowledge Technology

it starts with a vision

Once upon a time...

2010 Intranet designer at Syslab

2011 Created Patternslib

2012Mockup forked

2014 Plone Intranet Designer

2015Mockup merged

2015Plone 5.0 released

2015Plone Intranet 1.0 released

Patternslib Mockup Patternslib

Design First

Patternslib

Separate Github organization

Multipe repositories

Some patterns live elsewhere

Provides: Javascriptmarkup + CSS only for documentation purposes

Prototype

Separate repository

In ploneintranet Github org

No Javascriptdownloads patternslib bundle

No Plonehand-crafted markup

Standalone clickable prototypeJekyll static page templates

Provides: CSS, images

Defines: HTML markup

Patterns in action

post-box is our most complex frontend element

post-box is our most complex frontend element

pat-content-mirror

pat-inject

pat-switch

pat-subform

pat-autosubmit

pat-content-mirror

pat-content-mirror

textarea (invisible)

#mirror-post-box

pat-content-mirror

textarea (invisible)

#mirror-post-box

pat-inject

pat-inject

pat-inject executes AJAX request

activated by pat-inject class

fetches action page URL

extracts source #selector

replaces current page target selector

optionally replaces second && target selector

pat-inject executes AJAX request

activated by pat-inject class

fetches action page URL

extracts source #selector

replaces current page target selector

optionally replaces second && target selector

learn more at patternslib.com

+ 2 talks by JCBrand

putting it all together

ploneintranet/ploneintranet

single repository

single egg distribution

23 separate packagesseparate GS profiles

separate test suites

separation of concerns (1)

patternslib

javascript

prototype

CSS

markup definition

ploneintranet

python & Plone

markup implementation

prototype

ploneintranet

separation of concerns (2)

ploneintranet.theme

no views or templates

diazo transforms

CSS bundlefrom proto

JS bundlecompile / download

ploneintranet.layout

globally used views & templatesmenu bar

dashboard

App protocolcontext sensitive browser layers

ploneintranet.suite

no views or templates

only package that depends on ploneintranet.theme

integrates all other ploneintranet.*

robot tests on all ploneintranet.*

customization entry points

ploneintranet.theme

no views or templates

diazo transforms

CSS bundlefrom proto

JS bundlecompile / download

ploneintranet.suite

no views or templates

only package that depends on ploneintranet.theme

integrates all other ploneintranet.*

robot tests on all ploneintranet.*

don't customize, generalize

it's a productnot a framework

highly integrated

it's an applicationnot a website

minimal branding

forking is costlyto build

to maintain even more

generalize feature requestsgood idea test: useful for others

high quality generic solution

share future maintenance

improve core product

customize configuration not codeavoid hardcoding current business logic

avoid UX uglification

Just A Bunch Of Add-ons No More!

All pages hand-crafted markupNo z3c.form generated pages

No developer design...

Add-on integration requires design

Just A Bunch Of Add-ons No More!

All pages hand-crafted markupNo z3c.form generated pages

No developer design...

Add-on integration requires design

This is a product, not a framework

Consistent, superior UX

High quality polished product

Focus on OOTB product re-use

how to make money then?

free != beer

business analysisinformation flows

social structure

configure systemcase workflows

teamspace structure

integrationauthentication

other systems

enhancementsbuild new features

improve existing features

deployment

training

supportfix bugs

upgrades

analytics

re-use opportunities

whole productuse as base for client project

collaborate with partners

expand roadmap

library modedepend on ploneintranet

load only individual packagesnetwork (tagging)

async

themeswitcher

layout (app protocol)

stack overview

statistics

49 contributors

6800+ commits

835 tests

87% test coverage (excl. robot)

sloccount:python:23.9 k (85%)

xml: 3.8 k (13%)

investment ~ 750 000

built on Plone 5

moved to Plone5 a2 in 2014

took some initial effort

smooth sailing since

now we don't have to port :-)

now we don't have to support Plone4 :-)

we don't expose Barcelonetaexcept where we do: themeswitcher

package groups

frontendtheme

themeswitcher

integrationsuite

api

sitewidelayout

notifications

messaging

workspacesworkspace

todo

usersuserprofile

invitations

standalone appssearch

library

previewsattachments

docconv

async

plonesocialmicroblog

activitystream

network

(misc legacy)

integration

ploneintranet.suite:default loads all package profiles

:testing creates demo site

runs all robot testsfrom all packages

in fully themed site

on :testing content

ploneintranet.api

all developers are lazy :-)

search

Solr based

Elasticsearch future option

faceted

livesearch

standaloneZCatalog elsewhere

plonesocial

status updates

mentions

tags

attachmentspreviews

reply, re-share

filter by following network

like

microblog & activity stream

ploneintranet.microblogplonesocial.microblog

post-box form

microblog storage backendBtrees

performance optimizednot catalogued

queued batch writes

ploneintranet.activitystreamplonesocial.activitystream

render activity stream with status updates

personalized data structures

Btree persistent dictionaries

Arnold follows Bernard

Claire likes your update

Denise endorses Ellen for skill X

Generic personalized tagging behavior overrides DC: tags with

ploneintranet.network

Btree persistent dictionaries

Arnold follows Bernard

Claire likes your update

Denise endorses Ellen for skill X

Generic personalized tagging behavior overrides DC: tags with

user profiles

dexterity.membrane

personalized datapersonal stream

endorsements

followers/following

likes

import view for management

assumes AD/LDAPbut not required

see talk by Matt Sital Singh

team spaces and case management

based on collective.workspace

simplify security management

single trust zone

document management

activity stream

adaptive case management:workflowed team space

todo centered

see talk by Alexander Pilz

document previews

based on collective.documentviewer

.* pdf png screenshot

stored as annotations on files

used in all file listingsworkspace

activity stream

search results

WIP: async conversion

async

super minimalistic478 SLOC

no ZODB queue handlinguse Celery

use Redis

async request dispatch

handle in browser viewnormal view security

easy to debug

ploneintranet.async

super minimalistic478 SLOC

no ZODB queue handlinguse Celery

use Redis

async request dispatch

handle in browser viewnormal view security

easy to debug

generically re-usable

theme switcher

fallback to Barcelonetacontrol panels

raw editing

cms.localhost:8080/Ploneconfigurable switch host

plone.app.theming policy API

ploneintranet.themeswitcher implementation

ploneintranet.themeswitcher

fallback to Barcelonetacontrol panels

raw editing

cms.localhost:8080/Ploneconfigurable switch host

plone.app.theming policy API

ploneintranet.themeswitcher implementation

context-sensitive browserlayer switching

Use caseDocument in workspace

Document in library

different default view

same portal type

App protocoltoplevel traverse event handler

disable other IAppLayer

enable own IAppLayer

Mixin class for easy usage

ploneintranet.layout

Use caseDocument in workspace

Document in library

different default view

same portal type

App protocoltoplevel traverse event handler

disable other IAppLayer

enable own IAppLayer

Mixin class for easy usage

Roadmap

Content updates

Notifications

Mobile Push

News hub

Calendaring

Auto-tagging

Org charts

.

learn more

Product and services:quaive.com

Developer documentation:docs.ploneintranet.org

Sources and issue tracker:github.com/ploneintranet/ploneintranet