EXT:
Community

  Tymoteusz Motylewski
                T3DD12
Tymoteusz Motylewski
AOE media
Wiesbaden

TYPO3 & Magento

Twitter: @tmotyl
Mail: t.motylewski@gmail.com
You?!
• Have you played around with Community?
• What are you interested in?
• Do you have Extbase experience?
EXT:Community
•   Started around 2008 as pibase extension
•   Rewritten during GSoC 2010
•   Currently based on Extbase
•   Finally stable beta
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
Websites running Community

• Caremaid.net            • Ambasadapiekna.pl




                 http://www.flickr.com/photos/dieselbug2007/414348333/
Features
•   Friends
•   Messages
•   Wall
•   Gallery
•   Simple search
•   Notification service
•   Access control configurable in TS
•   Easy to extend
•   Documentation!!!
Not covered by Community
• Registration
• Access on a page level
• Groups (but planned)
Features - Profile
•   View
•   Edit
•   Delete
•   Report bad profile
Features - Messages
• Classic view
  – Inbox
  – Unread
  – Sent
• Threaded view
  – List of conversations
  – Whole conversation with one user on one
    page
Features – Relation management
• Requesting, canceling, confirming
  friendship
• List of friends
• Possible states of the relationship:
  – New
  – Confirmed
  – Rejected
Features - Wall
• Posting messages
• Smiles (requires ext. „smile”)
• Deleting messages
Features - Gallery
• Gallery
  – Albums list
  – Photos list of one album
• Album
  – Title
  – Cover image
  – Privacy settings
• Special album with profile pictures
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}
}}
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
            }
       }
   }
Architecture




        Architecture
Architecture – Base controller
• Base class for all controllers
• Resolves requested and requesting user
• Access control in initializeAction()
  – Return nothing if user has no access
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
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
}
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
Workshop tasks
• Installing community
• Features/roadmap brainstorming
• Discussion
  – groups handling
  – privacy settings
• ???
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
Privacy/access control challenges
• Allow user to change his privacy settings
• Easy to extend (new models, new
  controllers)
• Fast
• Transparent
• Configured in single place
• …
Questions?




Mail:   t.motylewski@gmail.com
Twitter: @tmotyl

T3DD12 community extension

  • 1.
    EXT: Community TymoteuszMotylewski T3DD12
  • 2.
    Tymoteusz Motylewski AOE media Wiesbaden TYPO3& Magento Twitter: @tmotyl Mail: t.motylewski@gmail.com
  • 3.
    You?! • Have youplayed 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 findit? • 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 byCommunity • Registration • Access on a page level • Groups (but planned)
  • 9.
    Features - Profile • View • Edit • Delete • Report bad profile
  • 10.
    Features - Messages •Classic view – Inbox – Unread – Sent • Threaded view – List of conversations – Whole conversation with one user on one page
  • 11.
    Features – Relationmanagement • Requesting, canceling, confirming friendship • List of friends • Possible states of the relationship: – New – Confirmed – Rejected
  • 12.
    Features - Wall •Posting messages • Smiles (requires ext. „smile”) • Deleting messages
  • 13.
    Features - Gallery •Gallery – Albums list – Photos list of one album • Album – Title – Cover image – Privacy settings • Special album with profile pictures
  • 14.
    Features – Notificationservice • 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 – Notificationservice 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 } } }
  • 16.
    Architecture Architecture
  • 17.
    Architecture – Basecontroller • Base class for all controllers • Resolves requested and requesting user • Access control in initializeAction() – Return nothing if user has no access
  • 18.
    Architecture – Accesscontrol 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 – Accesscontrol • 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 • Installingcommunity • 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 • …
  • 24.
    Questions? Mail: t.motylewski@gmail.com Twitter: @tmotyl