David Draper DaveDraper Erik Winlöf erikwinlof UI Team What were going to do Possibilities Unique Organizing ID: 372215
Download Presentation The PPT/PDF document "Share Site Customizations Live" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
Share Site Customizations Live
David
Draper
@_
DaveDraper
Erik
Winlöf
@
erikwinlof
(UI Team)Slide2
What we’re going to do…
Possibilities
Unique
Organizing
Extension points
3 demos =
3 extension modules
…customizations applied
LIVE
!
Create
your own < 1 hour!
Slide3
Acme
Research
& Development
department
Publishes
R&D
articles
Partner
“portal”
Casting
:
Author:
Alan
Editor:
Erik
Partner:
PatrickSlide4
Pre Demo: “Nothing up our sleeves”
Alfresco Community
4.2.b
(vanilla)
Slide5
Step 1
Define
R&D projects
Make it availableSlide6
Don’t worry, be happy!
Slide7
Define R&D projects
Site
Presets
Used in create site dialog
Customize using
“preset-id”
in evaluators
Config
templateSlide8
/alfresco/site-data/presets/
acme-
rd
-
presets.xml
<preset id="
acme-
rd
-preset
”>
<page id="site/${
siteid
}/dashboard">
<title-id>
page.acme-rd-dashboard.title
</title-id>
<properties>
<
sitePages
>
[
{ "pageId":"acme-rd-introduction" }, { "pageId":"documentlibrary" } ]</sitePages> </properties> </page>
<components/></preset>Also:Custom propertiesRename pages w <pageMetadata>
*-presets.xml
(v 4.1)
http://
blogs.alfresco.com
/
wp
/
ddraper
/2011/11/01/spring-surf-presets/Slide9
/alfresco/site-data/pages/
acme-
rd
-
introduction.xml
<page>
<
template-instance>
1-column
</template-instance>
<components
>
…
<component>
<region-id>
column
</region-id>
<
sub-components
>
<sub-component id="wiki">
<url>/components/wiki/page</url> </sub-component> </sub-components> </component> </components>
Tip! (v4.0b)2-columns2-columns-resizable2-columns-narrow-left2-columns-narrow-left3-columnshttp://blogs.alfresco.com/wp/ewinlof/2011/10/12/create-pages-in-alfresco-share-using-new-out-of-the-box-templates/
http://wiki.alfresco.com/wiki/
Share_Custom_PagesSlide10
Make preset available
Global module: <customizations>
Slide11
What is an extension module? (v4.0)
/alfresco/site-data/extensions/
*-
extension.xml
<evaluator>
<components>
<configurations>
<customizations>
Add/remove/replace
components in
a
<@region>
Merge share-
config
Enhance templates’
&
webscripts
’:
markup / resources /
model
Module evaluators:
site
.module.evaluator
(v4.0)
portal
.module.evaluator
(v4.0)
group
.module.evaluator
(v4.2b
)
http
://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2FCreate-a-
Model.html
http://
blogs.alfresco.com
/
wp
/
ddraper
/2011/08/26/extensibility-module-deployment/Slide12
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<extension>
<
modules>
<
module>
<
id>
Acme Rd (1) Global changes
</id>
<auto-deploy>true</auto-deploy>
<
!-- No
evaluator, always applied!
--> <customizations> <customization> <targetPackageRoot>org.alfresco</targetPackageRoot> <
sourcePackageRoot>acme.rd.customizations</sourcePackageRoot> </customization> </customizations> </module> Slide13
/alfresco/site-
webscripts
/
org/alfresco
/
modules
create
-
site.get.js
model.sitePresets
.push
(
{
id:
"acme-
rd
-preset"
,
name:
msg.get
("
preset.acme-rd.title
")});
/alfresco/site-webscripts/acme/rd/customizations/modulescreate-site.get.js
var
sitePresets
= [{
id:
"site-dashboard"
,
name
:
msg.get
("
title.collaborationSite
"
)
}
];
model.sitePresets
=
sitePresets
;
Note!
Separate runtime
Common model
http
://blogs.alfresco.com/wp/ddraper/2012/05/22/customizing-share-javascript-widget-instantiation-part-1/Slide14
Demo 1: “Create R&D
project”
Slide15
How quick is Dave?
…he’s smart…
https://github.com/share-extras/site-extension
%
>
ant create-project
-
D
company
=
Acme
-
D
usecase
=
RD
…
Slide16
Share
Namespaced
project structure:
build targets
Spring context file
i18n
Site preset
Sample
page &
webscript
Extension modules
Doclib
customizationsSlide17
Repository
Namespaced
project structure:
build targets
Spring
context
file
Content model
Sample repo
action
Note
!
Not required…Slide18
Repository
rd:article
aspect
rd:status
property [ “
Draft
”
|
”
Published
”
]
Repo
action
marks as “
Published
”
https://
devcon.alfresco.com
/berlin/sessions/developing-doclib-actions-alfresco-4
http://
wiki.alfresco.com/wiki/Data_Dictionary_Guide
Alternative solution:Folder rule kicks off a simple workflowhttp://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2Flibrary-folder-rules-define.htmlSlide19
Step 2
Publishing articles
Show article info in the document library
“Slim down” Share for EditorsSlide20
Publishing articles
Doclib
action
SiteManager
(editor
)
R&D Project
only
Site
Preset module: <configurations>Slide21
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<module>
<id>Acme Rd (2) Site changes</id>
<evaluator type="
site.module.evaluator
">
<
params
>
<sites>.*</sites>
<
sitePresets
>
acme-
rd
-preset
</
sitePresets> <applyForNonSites>false</applyForNonSites> <groups>.*</groups> </params> </evaluator> <configurations> Actions, indicators etc
Slide22
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<
config
evaluator="string-compare" condition="
DocLibActions
">
<actions>
<action id="
acme-
rd
-document-
setStatusPublished
" type="
javascript
">
<evaluator>
acme.rd.evaluator.doclib.
hasArticleAspect
</evaluator> <evaluator negate="true">acme.rd.evaluator.doclib.isStatusPublished</evaluator> <evaluator>evaluator.doclib.action.isSiteManager</evaluator> <permissions> <permission allow="true">Write</permission> </permissions> <param name="function">onActionSimpleRepoAction</
param> <param name="action">acme.rd.setPublishedStatus</param> </action>Also:
(v4.2b)isSiteConsumer
isSiteContributor
isSiteCollaborator
“
pagelink
” / “link
”
https
://devcon.alfresco.com/berlin/sessions/developing-doclib-actions-alfresco-4
http://
blogs.alfresco.com
/
wp
/
mikeh
/2011/09/26/share-document-library-extensions-in-v4-0/Slide23
Show Custom data only in R&D
doclibs
Indicators
Metadata templates
Slide24
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<
config
evaluator="string-compare" condition="
DocumentLibrary
">
<indicators>
<indicator id="
acme-
rd
-status
" index="10"
icon
=”…/
rd
/components/
documentlibrary/indicators/status-16.png” label="acme.rd.indicator.status"> <evaluator>acme.rd.evaluator.doclib.hasArticleAspect</evaluator> <labelParam index="0">{jsNode.properties.rd_status}</
labelParam> </indicator></indicators></config>Tip!<override>some-indicator-id</override>“action” attribute
http://blogs.alfresco.com/wp/
mikeh
/2011/09/26/share-document-library-extensions-in-v4-0/Slide25
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<
config
evaluator="string-compare" condition="
DocumentLibrary
">
<metadata-templates>
<template id="
acme-
rd
-status
">
<evaluator>
acme.rd.evaluator.doclib.
hasArticleAspect
</evaluator>
<line index="10" id="date">{
date
}{size}</line> <line index="20" id="rd:status"> {rd_status acme.rd.metadata.status} </line> </template></metadata-templates></config>
Renders objects with: (v4.2b)userNamedisplayNameiso8601titlename
…or register a custom renderer (v.4.0)http://blogs.alfresco.com/
wp
/
mikeh
/2011/09/26/share-document-library-extensions-in-v4-0/Slide26
Hide “Documents” for Editors
Site
Preset
module:
<components>
http://localhost:8081/share/page/
surfBugStatus
http://
blogs.alfresco.com
/
wp
/
ddraper
/2011/08/31/
surfbug
/Slide27
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<component>
<scope>
template
</scope>
<region-id>
filter
</region-id>
<source-id>
documentlibrary
</source-id>
<sub-components>
<sub-component id="
default
">
<evaluations>
<evaluation id="
hideSiteManagersFilter
"> <render>false</render> <evaluators> <evaluator type="group.component.evaluator"> <params><groups>SiteManager</groups>
</params> </evaluator>Also: Add & Replacehttp://blogs.alfresco.com/wp/ewinlof/2011/11/09/add-remove-or-replace-components-on-shares-document-details-page/
Component evaluators: (v4.0)
config
.component.evaluator
equals
.component.evaluator
portlet
.component.evaluator
site
.component.evaluator
preset
.component.evaluator
http
://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2FCreate-a-Model.htmlSlide28
Demo
2: “R
&D
site customizations”
Slide29
Step 3
Partner
“portal
”
List R&D Projects
Only “Published” articles
“inline previewer”Slide30
Partner “portal”
Dashboard
page
Partner
Title
List of R&D projects (
api
/
sites?spf
=acme-
rd
-preset)
Document Library page
Partner
Title
Document List (
customized)Slide31
/alfresco/site-data/extensions/
acme-rd-extension.xml
<module>
<id>Acme Rd (3) Partner changes</id>
<evaluator type="
group.module.evaluator
">
<
params
>
<
groups
>
GROUP_Partner
</
groups
>
<
groupRelation
>
AND
</groups> </params> </evaluator> <customizations> <customization> <targetPackageRoot>org.alfresco</targetPackageRoot
> <sourcePackageRoot>acme.rd.customizations-partner</sourcePackageRoot> </customization>Slide32
/alfresco
/templates/
org/
alfresco
/
dashboard.ftl
<@markup
target="
alf-hd
"
action="
after
"
id="acme-after-
alf
-
hd
">
<@region id="partner-title” scope="global" />
<@region id="partner-sites" scope="global" />
</@markup>
/alfresco/templates/
acme/rd/customizations-partner/dashboard.ftl
<@markup
id="
alf-hd
”>
<div id="
alf-hd
">
<@region id="header" scope="global" />
<@region id="title" scope="page" />
<@region id="navigation" scope="
page"
/>
</div>
</@markup>
<#-- Remove markup sections we don't want -->
<
@markup
target="
alf-hd
"
action="
remove
"
id="acme-remove-
alf
-
hd
" />
http://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2Ftu-share-FM-temp-customize.htmlSlide33
Only “Published” docs
Custom repository
webscript
/slingshot/doclib2/
acme-
rd
rd:status
== “Published”
Share “surf-
doclist
”
webscript
<data-
url
-resolver
>
“
resolver.doclib.doclistDataUrl
”Slide34
/alfresco/site-data/extensions/
acme-
rd
-
extension.xml
<bean id="
acme.rd.doclib.resolver.doclistDataUrl
”
class="
org.alfresco.web.resolver.doclib
.
DefaultDoclistDataUrlResolver
">
<property name="
basePath
" value="/slingshot/doclib2/
acme-
rd
"/>
</bean>
/alfresco/web-extensions/
acme-
rd-share-context.xml
<config evaluator="string-compare” condition
="
DocumentLibrary
"
replace
="
true
">
<
doclist
><
data-
url
-resolver
>
acme.rd.doclib.resolver.doclistDataUrl
<
/
data-
url
-resolver
><
/
doclist
>
<
/
config
>Slide35
“inline previewer”
Document
List “
viewRenderer
”
Notes from
Ray’s
session
https://devcon.alfresco.com/berlin/sessions/share-document-library-views-dam-interface
http://rgauss.com/2012/08/08/adding-document-library-views-to-alfresco-share/ Slide36
Demo 3
: “Partner ‘portal’”
Slide37
What we have
done
Site extension
project
Site Preset
Global module
Site preset module
Group
moduleSlide38
Start worrying!
Engineering sessions
Slides & code
https://
devcon.alfresco.com
/berlin/sessions/share-customizations-live
Blogs
http://blogs.alfresco.com/wp/ewinlof/
http://blogs.alfresco.com/wp/ddraper/
Site Extension
project
https://github.com/share-extras/site-extension