3. You?!
• Have you played around with Community?
• What are you interested in?
• Do you have Extbase experience?
4. EXT:Community
• Started around 2008 as pibase extension
• Rewritten during GSoC 2010
• Currently based on Extbase
• Finally stable beta
5. Where to find it?
• Forge:
http://forge.typo3.org/projects/show/extension-
community
• Mailing list
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-
project-community
or news://lists.typo3.org/typo3.projects.community
• Git repository
git://git.typo3.org/TYPO3v4/Extensions/community.git
• Gerrit
6. Websites running Community
• Caremaid.net • Ambasadapiekna.pl
http://www.flickr.com/photos/dieselbug2007/414348333/
7. Features
• Friends
• Messages
• Wall
• Gallery
• Simple search
• Notification service
• Access control configurable in TS
• Easy to extend
• Documentation!!!
8. Not covered by Community
• Registration
• Access on a page level
• Groups (but planned)
10. Features - Messages
• Classic view
– Inbox
– Unread
– Sent
• Threaded view
– List of conversations
– Whole conversation with one user on one
page
11. Features – Relation management
• Requesting, canceling, confirming
friendship
• List of friends
• Possible states of the relationship:
– New
– Confirmed
– Rejected
13. Features - Gallery
• Gallery
– Albums list
– Photos list of one album
• Album
– Title
– Cover image
– Privacy settings
• Special album with profile pictures
14. Features – Notification service
• Mail, private message, wall message….
• Multiple notifications per event
• Easy to use API
$notification = new Tx_Community_Service_Notification_Notification(
'relationRequest',
$this->requestingUser,
$this->requestedUser
);
$notification->setFoo(„BAR”);
$this->notificationService->notify($notification);
• Configurable in TS
relationRequest {
10 {
template = RelationRequest
handler = Tx_Community_Service_Notification_MailHandler
serverEmail = {$plugin.tx_community.serverEmail}
}}
15. Features – Notification service
Want to notify by SMS after receiving private message?
1. Create own notification handler which implements
Tx_Community_Service_Notification_HandlerInterface
- send() method is required
e.g. Tx_CommunityLocal_Service_Notification_SmsHandler
2. Add typoscript configuration
plugin.tx_community.settings.notification.rules {
messageSend {
20 {
handler = Tx_CommunityLocal_Service_Notification_SmsHandler
}
}
}
17. Architecture – Base controller
• Base class for all controllers
• Resolves requested and requesting user
• Access control in initializeAction()
– Return nothing if user has no access
18. Architecture – Access control
Types of access for different requests:
Requesting Requested Are Access type Notes
(logged in) user friends
user
NULL NULL - ACCESS_PUBLIC Public, guest access. No logged in
user, no requested (target) user.
Used e.g. for “list of 10 newest users”.
NULL John - ACCESS_NOBODY Public, guest access, no logged in
user. Public, but user specific plugins.
Bill John NO ACCESS_OTHER Bill is logged in, but he is not a friend
with John
Bill John YES ACCESS_FRIEND
John John | NULL - Access granted by If requested user is not set, and we
default. are logged in, then requestedUser =
requestingUser
– e.g. we are seeing our own profile
19. Architecture – Access control
• On action level
• Configured in TS
– Actions are mapped to „resource names”
accessActionResourceMap {
User {
image = profile.image //image action from UserController
edit = profile.edit
}
– Access rules are set for resource names
accessRules.friend {
profile.image.access = 1
profile.relation.access = 1
}
20. Roadmap
• Use Ajax wherever possible
• Privacy settings for user properties
• Groups
• Performance tuning
• Notification queue
• Advanced search
• Standard image sizes defined in TS
• Commenting on wall posts
21. Workshop tasks
• Installing community
• Features/roadmap brainstorming
• Discussion
– groups handling
– privacy settings
• ???
22. Privacy/access control challenges
• Levels
– Action level (MessageController->sendAction)
– Record level e.g. user/ album
– Record property level – $user->email,
$user->name
• Defaults
– Global defaults: deny or allow
– Defaults for table/record/property
23. Privacy/access control challenges
• Allow user to change his privacy settings
• Easy to extend (new models, new
controllers)
• Fast
• Transparent
• Configured in single place
• …