際際滷

際際滷Share a Scribd company logo
Open event presentation.3 2
Open Event
Empowering culture and art organizations everywhere
July 2015 (v3.2)
Who am I?
What have I done so far?
Engineer
Drupaleer
class DrupalCore{
public function __construct() {
$this->god = new God();
}
public function hack() {
$this->god->kill_kitten();
}
}
class God {
public function kill_kitten() {
$shelter = new Shelter();
$lightning = new Lightning();
$shelter->get_kitten->apply
($lightning);
}
}
Open event presentation.3 2
Open event presentation.3 2
Entrepreneur
Open event presentation.3 2
Open event presentation.3 2
Open event presentation.3 2
Open event presentation.3 2
The problem
Where everything started
Open event presentation.3 2
The glass box
Open process
Open designs
Open data
Open use
Open platform
Open platform
Open platform
Ready to share!
Open Event
in one sentence
Open Event in one sentence
Open Event CMS is a foundation for any cultural
organisation wanting to manage and publish their
events online.
Open Event in one sentence
Open Event CMS is a Drupal distribution that directly
represents an Event Open Data Model and automatically
publishes data through a self-documented API.
Open Event in one sentence
Open Event CMS is a Drupal distribution that directly
represents an Event Open Data Model and automatically
publishes data through a self-documented API.
Open Data Model
What is the ODM?
Our mandate is to make the arts available to everyone.
To fulfill this we should be actively opening up all our
information and data in a way that it can be accessed,
joined up, understood and re-used.
Rob Gethen Smith (Southbank Centre CIO)
Collaboration
Event Model (Ontology)
Schema.org
Classification (Taxonomy)
Single source (COPE)
Future standard?
What is the ODM?
SC Website Strategy
The SC Website strategy is structured
around three areas:
1) Open Data  ODM
2) Open Source Code
3) Open Process
Open Event addresses (1) and (2)
3) Open
Process
2) Open
Source
Code
1) Open
Data
Southbank
Centre
Website
Logical model: Event
Distribution
Contribution
It is released as Open Source software with two levels
of contribution possible:
1) A Drupal distribution for final users (it works out of
the box).
2) A Github repository for developers, to contribute to
the way the distribution is built.
Concept
As Open Software it has been developed with minimal
assumptions about how it may be used or extended
and it doesnt force any custom views of the world or the
data it manages.
It is built with flexibility and extensibility in mind.
Concept
 Custom JSON output (Schema.org structure)
 Each content type is automatically mapped as a
Schema.org type
 Only fields with Schema.org mapping are outputed
 RestWS standard mapping still available (remove?)
 Granular/simple events (one date per event)
 Decent editorial experience out of the box
Concept
 Minimize the requirement for entities to model
references (eg: images)
 Complex mappings inline with main type (not
referenced)
What is in it? For end users
 Download, install and use: distribution
 Extensible and adaptable as any Drupal 7 site
 Just add water read-only API approach
 Create Once Publish Everywhere
Useful
Whats in it?
 Drupal 7 (inc. Drupal 8 upgrade path)
 ODM & Schema.org
 Shared* ontologies (and taxonomy*)
 RestWS (API)
 Drupal Features
 Magic Glue! (custom code)
(*) Work in progress
Technical stack
closed
private
closed
public
open
public
closed
private
closed
public
open
public
SC example architecture
Schema.org types included
 Event
 Person
 Place
 Organization
http://openevent.southbank.local/node/add
Schema.org (sub)types included
 ImageObject
 DateTime
 PostalAddress
 GeoCoordinates
 Map
 OpeningHoursSpecification
Schema.org relations included
 Event to Event
 Event to Person
 Event to Organization
 Event to Place
 Place to Place
 Person to Organization
 Organization to Place
Entity relationship diagram
Contrib modules: usual suspects
 ctools
 date
 entity
 features
 strongarm
 token
Contrib modules: event
 field_validation
 link
 relation
 relation_add
http://openevent.southbank.local/node/add/event
Contrib modules: person (and org.)
 auto_entitylabel
 email
 Standard fields used for name components (given
name, family name, etc)
http://openevent.southbank.local/node/add/person
http://openevent.southbank.
local/node/add/organization
Contrib modules: place
 addressfield
 geolocation
 geolocation_googlemaps
 office_hours
http://openevent.southbank.local/node/add/place
Contrib modules: utility
 better_formats
 field_group
 filefield_sources
 taxonomy_access_fix
Features
 oe_components
 oe_event
 oe_organization
 oe_place
 oe_person
 oe_relationship_location
 oe_relationship_performer
http://openevent.southbank.local/admin/structure/features
Editorial experience
Utility modules mainly used to improve the default
editorial experience:
 Fields in tabs
 Field validations
 Taxonomy permissions
 Text formats
 File sources
API
Concept
 Automatic read API
 Self documented API
 Self explanatory API paths
 Install and go
 Rest-ish
Contrib modules: API
 restws
 schemaorg
Custom code: core
 oe_rest_api_doc
 oe_schemaorg_rest
 oe_schemaorg_relation
Custom code: special mappings
 oe_schemaorg_rest_address
 oe_schemaorg_rest_date
 oe_schemaorg_rest_duration
 oe_schemaorg_rest_geo
 oe_schemaorg_rest_image
 oe_schemaorg_rest_link
 oe_schemaorg_rest_office_hours
Image in event
From schema.org/Thing
image: URL or ImageObject
An image of the item. This can be a URL or a fully described
ImageObject.
Image in event
If URL is used we lose a lot of information.
Where does the URL point to? An image file or an
ImageObject?
Image in event
Include the ImageObject in the main type returned.
This embedded type mapping is coded in the module
oe_schemaorg_rest_image.
Image in event (restws)
http://openevent.southbank.local/node/24.json
field_image: [
{
file: {
uri: "http://openevent.local/file/34",
id: "34",
resource: "file"
},
alt: "alt string here.",
title: "title string here."
},
Image in event (openevent)
http://openevent.southbank.local/api/person/24.json
image: [
{
contentUrl: "http://openevent.local/sites/default/files/imagefield_9aNBjg.gif",
alternateName: "alt string here.",
caption: "title string here."
},
Image in event
API documentation
http://openevent.southbank.local/api/doc/json
Fields list
Fields description
Open event presentation.3 2
Open event presentation.3 2
Open event presentation.3 2
What is missing?
What is missing?
 Drupal tests
 XML output
 RDF output
 API Create, Update, Delete (write queries)
 More Schema.org types
 Drupal 8 version
What did we learn?
Motivation
We standardized and abstracted the core functionality
and released it as Open Source.
And then we built our CMS on top of it.
What did we learn?
It is a challenge to think and develop openly.
It is easy to simply share.
It is difficult to share openly.
It is worth the extra effort.
Implementation and use
Digital
Officer
I could build you a
website in a day!
Basic implementation
Front End
Design/Dev
Digital
Officer
A separate
presentation layer
is so cool*!
(*) Powerful and flexible.
Add a presentation layer
Digital
Officer
The API can
publish the data in
the CMS to any
application
Front End
Design/Dev
Publish to other apps
Digital
Officer
Front End
Design/Dev
The API publishes
open data in
Schema.org format
for other people to
use
Publish to the internet
Database
Officer
Digital
Officer
Front End
Design/Dev
The CMS now gets
its content
efficiently and
accurately
Data can be
automatically
aggregated from
any source
Integrate data sources
CMS
Developer
Front End
Design/Dev
I can extend the
CMS to hold all the
other content my
organisation needs
to publish
Database
Officer
Customise the CMS
 Search
 Caching
 E-commerce
 Microdata CMS
Developer
Front End
Design/Dev
Database
Officer
Bells and whistles
Digital
Officer
Give it a go!
Requirements
 Web server
 PHP 5.6
 Database (supported by Drupal)
 Drush
 Git (optional for developers)
Download and install
(1) Fetch the code from Drupal.org:
$:> drush dl openevent
Download and install
(2) Install the distribution:
$:> cd openevent
$:> drush si openevent --account-name=siteuser
--account-pass=sitepass --db-url=mysql://dbuser:
dbpass@localhost/dbname -y
Build and install
(1) Fetch the code from Github:
$:> git clone git@github.com:Southbank-
Centre/OpenEvent.git
www/drupal/profiles/openevent
Build and install
(2) Fetch the contrib code from Drupal.org and assemble
the distribution:
$:> cd www/drupal
$:> cp profiles/openevent/local-openevent.make .
$:> drush make local-openevent.make -y
Build and install
(3) Install the distribution:
$:> drush si openevent --account-name=siteuser
--account-pass=sitepass --db-url=mysql://dbuser:
dbpass@localhost/dbname -y
Now what?
Now what?
 Use it
 Improve it
 Expand it
 Create critical mass
 Drupal 8!
References
References
Drupal distribution:
https://www.drupal.org/project/openevent
Github repository:
https://github.com/Southbank-Centre/OpenEvent
References
Schema.org:
http://schema.org
Protractor:
http://angular.github.io/protractor
Credits
Credits
Jorge Lopez-Lago (Tech Lead at Onload)
Alex Bridge (Developer at Cogapp)
Dave Vernon (Developer at Southbank Centre)
Sam Murray (Developer at Southbank Centre)
Tassos Koutlas (Developer at Cogapp)
Southbank Centre
Sources
Some content and images shamelessly copied from Rob
Gethen Smiths Open Event CMS June 2015 presentation
(http://www.slideshare.net/RobGethenSmith/open-
event-cms-june-2015)
Avatar images by Freepik.com
Questions?
Fancy some in depth tinkering after the session?
Thank you!

More Related Content

Open event presentation.3 2