SlideShare a Scribd company logo
1 of 24
Download to read offline
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

More Related Content

More from AOE

Searchperience Indexierungspipeline
Searchperience   IndexierungspipelineSearchperience   Indexierungspipeline
Searchperience Indexierungspipeline
AOE
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
AOE
 
Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)
AOE
 
T3DD12 Caching with Varnish
T3DD12 Caching with VarnishT3DD12 Caching with Varnish
T3DD12 Caching with Varnish
AOE
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
AOE
 

More from AOE (20)

Multithreaded XML Import (San Francisco Magento Meetup)
Multithreaded XML Import (San Francisco Magento Meetup)Multithreaded XML Import (San Francisco Magento Meetup)
Multithreaded XML Import (San Francisco Magento Meetup)
 
rock-solid TYPO3 development with continuous integration and deployment
rock-solid TYPO3 development with continuous integration and deploymentrock-solid TYPO3 development with continuous integration and deployment
rock-solid TYPO3 development with continuous integration and deployment
 
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
 
Continuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriverContinuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriver
 
SONY on TYPO3 - Rapid Global CMS Deployment
SONY on TYPO3 - Rapid Global CMS DeploymentSONY on TYPO3 - Rapid Global CMS Deployment
SONY on TYPO3 - Rapid Global CMS Deployment
 
The typo3.org Relaunch Project
The typo3.org Relaunch ProjectThe typo3.org Relaunch Project
The typo3.org Relaunch Project
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling  am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Searchperience Indexierungspipeline
Searchperience   IndexierungspipelineSearchperience   Indexierungspipeline
Searchperience Indexierungspipeline
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)
 
Angrybirds Magento Cloud Deployment
Angrybirds Magento Cloud DeploymentAngrybirds Magento Cloud Deployment
Angrybirds Magento Cloud Deployment
 
T3DD12 Caching with Varnish
T3DD12 Caching with VarnishT3DD12 Caching with Varnish
T3DD12 Caching with Varnish
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3
 
Panasonic search
Panasonic searchPanasonic search
Panasonic search
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Open Source CMS TYPO3 at Cisco WebEx
Open Source CMS TYPO3 at Cisco WebExOpen Source CMS TYPO3 at Cisco WebEx
Open Source CMS TYPO3 at Cisco WebEx
 
Case Study NDD Distribution on TYPO3
Case Study NDD Distribution on TYPO3Case Study NDD Distribution on TYPO3
Case Study NDD Distribution on TYPO3
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

T3DD12 community extension

  • 1. EXT: Community Tymoteusz Motylewski T3DD12
  • 2. Tymoteusz Motylewski AOE media Wiesbaden TYPO3 & Magento Twitter: @tmotyl Mail: t.motylewski@gmail.com
  • 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)
  • 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 – Relation management • 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 – 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 } } }
  • 16. Architecture Architecture
  • 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 • …
  • 24. Questions? Mail: t.motylewski@gmail.com Twitter: @tmotyl