Translations
Info
All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh

Community

From TYPO3Wiki
Jump to: navigation, search

This page is outdated.

If you're looking for Community extension based on Extbase, please visit project site on Forge or download it from extension repository

This page belongs to the Community Extension project (category Project)

notice - Draft

Change the {{draft}} marker to {{review}} when you need a reviewer for text and TypoScript. info

This page is mainly for discussion on a new Community Extension for TYPO3. First of all, we want to set up a wishlist to gather the functionality and then put up an architecture for the extension. We would like to work together with other developers. Especially with developers of existing extensions, which could be used for community features. So please contact us via mailing-list Typo3 Community Extension on lists.typo3.org or Usenet news.typo3.org -> [1]


Personal Wishlists

To gather some ideas on what the plugin should be able to do, feel free to write down you personal wishes. We will later try to coordinate them.

Mimis Wishlist

  • General functionality and design-goals
    • Small extension, that uses available extensions
    • Offer an API with hooks to extend the extension easily
    • Use MVC concept as base-architecture
  • Community-Users (possibly covered by fe_users)
    • Registration (possibly covered by fe_user_registration)
    • Personal Profile with privacy-settings
    • Find users via user-search
  • Buddies
    • Users have their own buddies list
    • Show connection to other users via your / their buddies
  • Messaging
    • Each user should have a public and a private messaging center (possibly covered by ve_guestbook)
    • Groups and networks should have their own messaging center (possibly chc_forum...)
  • Groups (possibly covered by fe_groups)
    • Users should be able to set up groups
    • There should be admins and moderators for each group
    • Privacy settings should be set by admins
    • Attendance rules should be possible (everybody may attend, only invited users...)
  • Who is online functionality
    • List of users who are currently online
  • Additional functionality (all covered by other extensions)
    • Galleries
    • Blogs
    • Chat

Alex's (MasterEmit) Wishlist

this list is not ready, but i try to add more and more some detailed aspects, what i would like to have. currently i just write down my ideas without references to other extensions, which could be used already. this can be done later. details will follow.

  • General
    • Small extensions
    • if possible, reusing extensions, which are already available
    • creating some common libraries for common functions
    • as much as possible hooks for better interaction between different extensions
  • User/Groups General

There are some interesting questions we should try to evaluate, how they can be solved as good as possible. What we need is the possibility to have a general structur of adding a list of users and a list of groups to elements.

  • These elements could be
    • events, where user should be able to show, that they will take part
    • community-groups, where user could be a member
    • a user itself, for adding buddy-groups and buddies
    • and so on
  • Different types of usergroups should be written in different subfolders of a sysfolder

The big question is, if we can use the classic frontend-user and frontend-usergroup functionality. I would prefer it. I need to check some tables to write more about it.

  • User Profile General
    • I would like to have a really flexible design. Here are some ideas, how an admin could define the data structure of a user profile
    • different types of fields
      • text ... just a basic text-field
      • password ... a basic password field
      • memo ... a text-field with more than one line
      • rtf ... a rtf-memo
      • dropdownlist ... a list with different entries, where the user could pick up one
      • radiolist ... same like dropdownlist, just other style
      • checkbox ... a checkbox?!!
      • image ... possibility to upload an image
      • imagelink ... possibility to link to an image
      • link ... a url to something
      • email ... email address
    • All of these fields should have some special options
    • common options for fields
      • label ... the label of this field
      • required ... checks, if the field should be filled
      • edit-options ... one or more combinations of: during registration / during profile edit / never / group settings
      • view-options ... one or more combinations of: guests / logged in users / owner of profile / buddies / community groups
      • view-setting-option ... just the same like view-options, but here it could be defined, if the user itself is able to set one or more of the view-options. default are always the settings of view-options.
    • linking and synchronisation to and from other fields
      • every field can be synchronised from and/or two other fields: never/if empty/every time
      • every field can just link to another field and getting and/or writing its data from the linked field
      • css-class
    • special options for fields
      • text ... just maximum characters, what could be entered
      • password ... maximum characters, what could be entered and maybe some additional options like minimum characters, if upper- and lowercase could or maybe should be mixed, how about a minimum amont of numeric or special characters for making the password more save and so on
      • memo ... how many lines, maximum characters and whatever
      • rtf ... its just an idea ;-)
      • dropdownlist ... for sure a list with entries. each entry should have an idea, which will be saved as number and a text, which will be shown
      • radiolist ... same like dropdownlist
      • checkbox ... maybe just two possible values for true and false
      • image ... different options for uploading (max filesize, min and max image size for upload, image-size for viewing, which kind of file-extension)
      • imagelink ... a link to an imagesource. maybe some more options for sizing and check also link bellow
      • link ... just a link with the possibility to just show the link, show the link with a special text and add prefix and/or suffix and integrate informations from another field inside link, inside prefix and inside suffix ... why? with these options it could be easy to link to other communities like myspace. the user could enter in this field just the username for his myspace account and the link will generate the right url. maybe this could be done with same functionality in a better way. imagelink is working in the sameway. it just do not shows the link as text. it integrates the link as image-source. in this case and with the possibility of accessing the data of other fields (linking fields), an "online now" symbol for other communities could be shown next to the link to go to the user profile of this community. so the user could enter the username just on one position and the user profile is showing two different kind of informations with this data
      • email ... special field for emails.
    • I know its a lot and not so easy - but in my eyes, it would be the perfect user-profile-system
    • the different types of fields should be written like extensions. so if someone would like to have a new type of field with special functionality for backend structure-editor, frontend profile editor and profile viewer, it should be easy to integrate it

Now i try to describe some extensions, which would use the technology above

  • User Profile Designer Backend Extension
    • this is just the designer, which gives a backend user the possibility to create the data structure of a user-profile. this definition of the data-structure will be saved in a sys-folder (backend user should be able to define this folder)
  • User Profile Editor Frontend Extension
    • This extension is rendering the profile editor
    • possible settings
      • page to jump after saving
      • page to jump after cancel
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Registration Frontend Extension
    • This extension is rendering the form for registration. it should be an extension of User Profile Editor Extension
    • possible settings
      • page to jump after saving
      • page to jump after cancel
      • setting, if verification should be done (email will be send)
      • user-group, which will be the main group for user after registration
      • field with email-address
      • page to jump with verification extension (url of this page will be send via email)
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Verification Frontend Extension
    • This extension verifies users email-address after registration. User Registration Frontend Extension should point to a page with this extension
    • possible settings
      • page to jump after success
      • page to jump after failed
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Lost Password Frontend Extension
    • With this extension a user can request a new password
    • possible settings
      • for checking the identity of this user, some fields from profile can be requested
      • for each field it can be set, if this field must be filled right or if it is an option
      • it can be set, how many options need to be filled right (for example 2 from 3)
      • it can be set, if this field is one of possible others for getting the right user entry (mostly email-address)
      • settings, if the user will get an email with verification-code or if the user can proceed with, for example, changing password
      • field with email-address
      • page to jump with verification extension for password request (url of this page will be send via email)
      • possible change to another user-group after requesting password
      • page to jump after request
      • page to jump after error
      • page to jump after cancel
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Lost Password Verification Frontend Extension
    • This extension verifies users email-address after lost password. User Lost Password Frontend Extension should point to a page with this extension
    • possible settings
      • page to jump after success
      • page to jump after failed
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Reset Password Frontend
    • extension is generating a new password and is sending this password to users email-address
    • possible settings
      • page to jump after success
      • page to jump after failed
      • settings for password generation (default from profile-structure-data)
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Change Password Frontend
    • extension checks old password and allows to set a new one
    • possible settings
      • page to jump after success
      • page to jump after failed
      • settings for password generation (default from profile-structure-data)
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • User Login Frontend
    • extension for login-form and/or logout
    • possible settings
      • page to jump after success
      • page to jump after failed
      • page to jump if already logged in
      • page to jump after logout
      • text to show after success
      • text to show after failed
      • text to show if already logged in
      • text to show after logout
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • Users List Frontend
    • flexible extension for listing users. used for simple list, search-results, currently-online, buddy-list and so on. every list of users should be done with this extension
    • different possible styles like list or grid with possible settings for columns, which should be shown. together with a grid a small user-gallery could be made with profile-picture
    • fields could be used as links to jump to special pages. additional links should be possible to add. in this way, one list can offer a jump to user-profile, add this user as friend, write a message to this user, ...
    • possible settings
      • filter for
        • users of one or more groups (usergroups, buddies, ...)
        • users, who are currently online, offline, verified, not verified, disabled, ...
        • users with registration date between time period
        • users with last login between time period
        • users with special entries in their user profile
      • how many users per page
      • possibility to change users per page
      • tab-row for fast alphabetical preselect
      • which fields from user-profile should be shown and should this fields shown as links to special pages and which group has the right to see this field
      • adding additional links to pages
      • default sorting
      • possibility to change sorting
      • top constraint (top 10, top 100, ...)
      • show counted users
      • page to jump, if no user was found
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • Users Search Frontend
    • allows to enter search criteria for searching users. possible filters are the same like Users List Frontend. Depending on user rights the user can fill one or more fields. some fields can get default values. some fields can be hidden (user can not change this search criteria). at the end this Extension is just sending search criteria to Users List Frontend
    • possible settings
      • filter-fields for
        • users of one or more groups (usergroups, buddies, ...)
        • users, who are currently online, offline, verified, not verified, disabled, ...
        • users with registration date between time period
        • users with last login between time period
        • users with special entries in their user profile
      • page to jump for listing with Users List Frontend Extension
    • getting data from
      • sysfolder with profile-structure-data
      • sysfolder with user-data
  • Buddies General
    • a user should have the possibility to add different buddy-groups and every buddy can be assigned to one or more buddy-groups of this user
    • somehow a mechanism needs to be integrated, that different buddy-networks can be used with different settings. for example one network for virtual friends, one network for real life friends, one network for just marking other users as favorite and so on. so real life friends and virtual friends are maybe just shown, if both users are setting the same. the other user could be informed, that a user tries to add and so on ...
    • following extensions are just some basic ideas
  • Buddies Manage Buddy Groups Frontend
    • allows to add, edit and delete Buddy-Groups and to add or delete buddies to or from buddy-groups
    • can be filtered by group or buddy (for example via url)
    • possible settings
      •  ?
    • getting data from
      • sysfolder with user-data
  • Buddies Buddy Link
    • if the current shown user is a friend or maybe is not a friend, this extension will show a button or link or maybe just a text
    • with this extension a button "Add this user as friend" or "Delete this user from friends" or "Manage this friend" could be possible
    • possible settings
      • extension should be shown, if user is a friend or if user is not a friend
      • text, which should be shown, if criteria is valid
      • link to a page to do something with this friend
    • getting data from
      • sysfolder with user-data
  • Buddies DeleteThisFriendLink Frontend
    • gives the possibility to delete a user from buddies
    • possible settings
      • page to jump after deletion
      • page to jump after cancel
    • getting data from
      • sysfolder with user-data
  • Buddies AddThisAsFriendLink Frontend
    • gives the possibility to add a user as friend
    • possible settings
      • page to jump after add
      • page to jump after cancel
    • getting data from
      • sysfolder with user-data

What else i would like to have and what would be necessary. Just some more ideas of extensions. Some may exists, some not. Most of them needs an integration of community features.

  • Board/Forum
    • mm_forum is a really good example. In my eyes i would prefer to use this one, but with a better integration to other extensions
  • User Gallery
    • each user should have the possibility to organize different galleries and sub galleries with as many pictures they want. Just limited by a specific amount of space. Like everywhere else, the user should be able to set some security settings for galleries and pictures. Again for guests, just logged in users, specific friend groups and friends. Every Gallery should have name and a description field. Same with pictures. Users should be able to activate comments, so that other users are allowed to write comments. Maybe through another "Comments" Extension, where the owner also has the possibility to say, if comments should be approved before they are visible for other user. Important is, that the administration of the site can decide, if a specific usergroup should approve any uploaded picture, before it is visible for other users. Nice would be, to have different kind of lists and also the possibility to search inside the name, descriptions, tags and so on. Something like "10 newest pictures" or a random picture or something like this would be great to.
  • Blog
    • The Blog should be for every user. Again connected with a comment-Extension to write comments. Same settings for security like always. Also search able and with lists and so on. An additional RSS-Extension could publish the entries to RSS Readers.
  • Locations and addresses
    • Just Location somewhere in the world connected to different categories and with a address and the possibility of adding comments. The creator of the location is allowed to edit and set the security levels (see above). Could be also used for addresses. Private and public onces.
  • Calendar
    • This extension should handle and organize calendar entries. Security stuff like in all other extensions. Different views, maybe icalsrv support or something similar.
  • Events
    • User can create different events and connect to different categories and locations. Security settings like always. So Events could be private, for a specific group (friends, family, ...) or public (parties, exhibitions, concerts). Again Comments should be possible. Of course different, event specific informations. This could be based on the calendar extension.

Lars' Thoughts

  • Basic considerations
    • The code should follow certain design principles as a whole
    • Maybe we should consider rewriting certain extensions to be used to fit in the whole design-scheme
    • I'm totally open for design-pattern and architecture
    • all those communities for me are basically users, groups and relationships
  • User wishes
    • Create User
    • Modify Profile
      • Have a description
      • Have a image
    • Delete myself
    • can have buddies
      • buddies need to consent
      • see when buddies are online
    • Send messages to each other
  • Group wishes
    • have a creator
    • be modified by admins
    • have some scope of visibility
    • can be deleted by admins
    • can be joined if they are visible
    • have a forum visible to members
    • should be able to have partner-groups / buddy-groups
  • Maybe we should have one type of object which is a user or which can be formed by other objects of that kind, similiar to the composite-design pattern. That way users could be buddies of groups, which in turn could be members of other groups and we might end up in totally f***ed up relationships between the entities :)


Frank Thelemann's must haves

  • MVC concept with lib/div
  • rightsmanagement with access control lists
  • more an libary for developers than fe plugins
  • no using of code or recode from extensions wich based on the pi_base, better investing the time in building a new complete system
  • target should be a community system for TYPO3 5.0
  • using of new standard ext like partner for profiles, or xajax for ajax, or better an dispatcher for different frameworks? ;-)
  • a base system for all other community extensions for rights,fe-editing,loging,configurations and more...
  • communications with the extension coordination team

Falk Hermann's wishes

  • for FE always work with the xajax extension
    • (Because TYPO3 is a large system and requires a lot of resources every time the Page is loaded)
  • Some ext or patches which make TYPO3 faster (may be we have to overwrite some Core-Functions)
  • nearly everything from above ;-)
  • (Descriptions for your wishes, please. Some of them I can't comprehend. For instance: Why should we not user functions from pi_base?)

Mischas Vision

Define the community system as generic as possible. A community should be designed in a way which allows arbitrary types of information to be attached to it. This means a community doesnt consist of users - it is an aggregation of information. One should be able to attach any Typo3 datatype to a community (pages, pagetrees, files, other communities, languages(!), domains, users (of course)).

The more generic the system starts the better foundation will be the result for future extension development.

Bernd's ideas

As communities can have each topic and you can't create an extension for each topic. A better way is an interface enabling for existing tables, so data can be created and edited by fe_users.

Existing tables = tables from core (exclud system-tables!) or any extension.

All records could be fe_user-created, therefore all records need at least two addition fields: fe_user_owner and fe_usergroup_owner. For FE-displaying, the existing options had to be enhanced for a view by owner.

Possible realizing

For each page you can create additional records which control an enhancement of enablefields() for each data-table (TCA), you can define if the records should be shown only for user, which will add the condition ' AND '.$fe_user[uid].'=table.fe_user_owner'

For buddylists another field is needed 'show_buddies' which can be set by owner end enables also buddies to view record: ' OR (buddies_enabled AND '.$fe_user[uid].'in (select buddylist from fe_users where uid=table.fe_user_owner) )'

As there must be the possibility to create and edit records for fe_users, a common interface must provide the ability to have edit-forms based on TCA-definition for each table.

The BE-module, mentioned above to select owner, could define for each table the possibility to

  • create records
  • edit records by owner or by group
  • define an HTML-template with automaticly generated marker-replacements based on TCA-definition (default-form like in BE)

Stephan's idea

  • The registed fe_user are able to invite extern (non-registed fe_user), for only one time for 4 weeks (anti-spam).
  • If a new members is registed in a special group, these members of that special group get a newsletter, with name and "unclear picture" of that new member. With the possibility to send him a message directly to his/here internel mailbox. or a click for invited (opt in) this person for the own buddylist.
  • If the fe_user have birthday today, a mail is sent to evry person of his buddylist and the person whre he is a buddy in that extern group, with the directly possibility to sent a birthday greating to him, (loginfunction, on this internal mailsite).

Consolidation of the wishlists

This section should build a specification of the extension, taken from the proposals in the wishlists.

Project aims

Must haves

  • Build on MVC Framework
  • Includes only extensions based on MVC Framework
  • Small Extension
  • Cover the basic functionality of a community-website (users, buddies, groups, profiles, messaging...)

Should haves

  • API for fe programming for other frontend extensions
  • Rights management to define granularity of privacy-content-access

What is it not

For what the extension is for

User groups / Audience

  • FE Users: Community users, who put up a profile and put content on their pages
  • BE Users: Admins who have to supervise the community, delete content, put content on the right page etc.

Detailed specification

Functional Requirements

Importance
1=important
5=not so important
Requirement Description Possible Extension
covering requirement
Finished %
1 Community-User-Login Gives a user the possibility for login to the community newloginbox - New Login Box 100%
1 Community-User-Registration Gives a user the possibility to register as a community-user Needs to be rewritten as sr_feuser_register is always updated under the same version number, so that a good administrative workflow is not possible.  ???
1 Community-User-Unregister Enables a user to unregister from the community (delete his account) - 0%
1 Community-User-LostPassword Sends an email with the password to the community-user covered by New Login Box 100%
1 Community-User-ProfileEditing Enables the user to edit his profile settings: Personal information, contact data, privacy regulations - 30%
1 Community-User-Search Executes a query on the community-users IndexedSearch 30%
1 Community-User-Profile Shows the profile of a community-user - 30%
2 Community-User-AddBuddy Enables a user to add another user as his buddy - 80%
2 Community-User-DeleteBuddy Enables a user to delete a buddy from his buddylist - 50%
2 Community-User-ShowBuddyList Shows all buddies of a user - 50%
2 Community-User-ShowBuddyRelation Shows a connection from a shown profile to the user's profile - 30%
3 Community-User-SendMessage Enables a community-user to send a message to another user ve_guestbook 0%
3 Community-User-ShowMessages Shows a list of messages for a community user see above 0%
3 Community-User-DeleteMessage Enables a user to delete a message from his board - 0%
4 Community-User-CreditAlgorithm Calculate a credit (credibility, usage,...) for a user - 0%
3 Community-User-WhoSOnline Show a list of users, currently online - 0%
1 Community-Group-Create Enables a user to create a user-group fe_user_group 30%
1 Community-Group-Delete Enables a user to delete a user-group - 0%
1 Community-Group-EditProfile Enable a user to modify the profile of a user-group - 30%
1 Community-Group-JoinGroup Enables a user to join a user-group - 50%
3 Community-Group-InviteUser Send an invitation for joining a user-group to a user - 0%
3 Community-Group-LeaveGroup Enables a user to quit his membership to a group - 50%
1 Community-Group-ShowProfile Shows a group profile page - 30%
1 Community-Group-Board Gives the group-users the possibility to discuss on a board (forum) mm_forum 0%
1 Admin-User-List BE Module for listing community-users Take a look at partner 0%
1 Admin-User-Delete BE Module for deleting community-users see above??? 0%
1 Admin-email-Notification Configurable notification for new users, groups,... for admins - 0%

The features described above are the core-features of the extension. Besides those features there should be a possibility to enable an user to create content from any extension that he is allowed to.

Data Requirements

Importance
1=important
5=not so important
Requirement Description Possible Extension
covering requirement
1 Community-User Data for community user (name, email, adresse,...)
1 Community-User-Settings Data for profile configuration of user
1 Community-Messages Storing all messaging data: personal messages, forum posts ... ve_guestbook
1 Community-Groups Data for community groups (name, description, configuration...)
1 Community-Users-Groups-Relation Data for membership relation of users
1 Community-Buddies Data for user-user relations (buddies)
4 Community-User-Credits Data for user credit algorithm

Existing Extensions for community issues

Community Extensions

Other Extensions for community issues

Mailing-List

Feel free to attend to the following mailinglist, to get some more information: TYPO3 Community Extension on lists.typo3.org