TODO-LIST

Add Invite tab with email notification

Add Promote tab to promote members with notification

Add a factory based type called "PloneGroupSpace", which is a 
free-form GroupSpace.

   - GroupSpace is going to become restricted in the sense that
     you are now only allowed to add new services. It is inside
     these services that the content is added. New services can  
     be added by GroupMembers, although this can depend on the
     chosen policy.

- Swap content tab and view tab

- GroupMember can subscribe (newsletter subscription) to a workspace . He receives an email per week and per group

- A user can subscribe to a workspace. Manager validate or not the user to become a groupmember.

Create three new factory based types using PloneFolder:

- LinkFolder
  - Only Links can be added
- FileFolder
  - Only PloneExFiles can be added
- ArticleFolder
  - Only Articles can be added


Change the default policy for GroupMembers:

- GroupMember
  - Can add new services and invite members


Use PloneChat either as a service or integrated in the GroupSpace

    - In a first step, a PloneChat can be a service.

    - In a second step, we could make PloneChat an integral part of a GroupSpace. 
      A PloneChat can be shown on the lower part of every page, just like a
      discussion thread can be shown on every plone document. This PloneChat is
      where group members can easily communicate and share ideas immediately. 
      Optionally, the integration can be switched off. The PloneChat can also 
      be minimized and an alert can be shown when there is a new message.

-----------------------------------------------------

- Allow definition of addable content types per Group Space

- In order to use the "My GroupSpaces" slot, you'll have to customize
  the folder_localrole_edit.py script that you find in 
  CMFPlone/skins/plone_form_scripts. We'll have to replace the Plone
  Sharing tab with our own forms to correct this. A workaround is to
  edit a GroupSpace after changing local roles.

  folder_localrole_edit
  -------------------------------------------------------------------
  pm = context.portal_membership

  if change_type == 'add':
      pm.setLocalRoles( obj=context,
                        member_ids=member_ids,
                        member_role=member_role )
  else:
      pm.deleteLocalRoles( obj=context,
                           member_ids=member_ids )

############ Insert start ###############

  context.reindexObject(idxs=['listGroupSpaceMemberUsers'])
  context.reindexObject(idxs=['listGroupSpaceVisitorUsers'])

############ Insert end #################

  qst='?portal_status_message=Local+Roles+changed.'

  from Products.CMFPlone import transaction_note
  transaction_note('Modified sharing for folder %s at %s' % (context.title_or_id(), context.absolute_url()))

  context.REQUEST.RESPONSE.redirect( context.absolute_url() + '/folder_localrole_form' + qst )
-------------------------------------------------------------------

