Allow Members to request access to private Plone Folders.
('Introduction\n============\n\nClosed sections\n---------------\n\nThis products is intended to solve the use case for "closed sections", which\nare described as "sections for which a subscription is necessary". \nThis is rather a broad issue, and as is often the case, the details will\nprobably be filled in later, but i\'m sure the use case will sound familiar to a\nlot of people.\n\nThe standard Plone functionality does a good job: making folder private takes\ncare of security, and it\'s easy to share the folder with a user (or group).\n\nWhat\'s missing for the use case is, in my opinion:\n\n - a way for Managers to mark certain folders as being a "closed section"\n - for Members, a list of subscribable "sections"\n - * a mechanism for users to request a "subscription"\n * a way for Managers to approve subscriptions\n - a list of users\'s "subscriptions"\n\nThese are all fairly minor things, which should work easily with Plone\'s\nfunctionality.\n\nIt seems there\'s nothing around yet that works for Plone 4 (we\'re targeting\n4.2). I\'ve looked at collective.groupspaces.* briefly, but it looks too big.\ncollective.groupspaces.content adds a content type (subclasses ATFolder), which\ni don\'t like. And it appears not to work for Plone 4, though i haven\'t tried\ninstalling it yet.\n\nOpen sections\n-------------\n\nIn addition, there is also a use case for "Open sections". These work in the\nsame way, except that after a subscription request, subscription is granted\nimmediately.\n\nUser Stories\n============\n\nWe have these User Stories, and suggested implementations:\n\n 1. [V] Mark as Subscribable: solve by sticking an extra interface on a\n Folder, possibly use p4a.subtyper\n\n 2. [V] List of Subscribable Sections: create a Portlet\n\n 3. a. [V] Request a subscription: View + Annotation storage on the \n Folder\n\n b. i. [V] List subscription requests in a Portlet\n\n ii. [V] Manage requests from View on Folder \n\n 4. [V] List of Member\'s subscriptions: a View.\n\n 5. a. [ ] ??? Change display names for Open/Closed Sections\n b. [ ] ??? Give Open/Closed Sections a one-state workflow\n\n 6. [V] Custom "Insufficient privileges" message: When trying to view a \n "Closed Section", display a different message. Link to subscription \n request View.\n\n 7. a. [ ] Remove own subscription request:\n b. [ ] Remove own subscription (protected by extra click):\n\n 8. [V] Get view permission when subscription is granted: Grant Member\n the `Reader` Role on the Folder \n a. [V] after subscription approval on a Closed Section\n b. [V] immediately after request on an Open Section \n\n 9. [ ] Support for delegating more than one Role\n\n| [V]: done\n| [ ]: open\n| [W]: work in progress\n\nGetting started\n===============\n\nMarking a Folder as a Subscribable Section\n------------------------------------------\n\nAfter installation, you (The Manager) should see an extra button "Sub-types"\n(next to "Actions") on Folders. Here, you can mark the Folder as being an\n"Open" or "Closed" section. We will assume you create an Open Section first, in\nthe site root. It will be Private by default, otherwise make it so. Note that\nthe title and description will be exposed, to provide potential subscribers\nsome information about what they\'re signing up for.\n\nAfter marking the Folder as a Subscribable Section in this manner, an extra tab\n"Subscriptions" appears (next to "Sharing"). Here you can view subscriptions\nand subscription requests for the Subscribable Section. \n\nAlso, you should see a portlet in the right column which shows your recently\ncreated "Open Section". The portlet was added when the product was installed,\nand only shows when there are Subscribable Sections. \n\nSubscribing to an Open Section\n------------------------------\n\nA Member without any further privileges won\'t see the Open Section in the\nsite\'s sections menu, but will see it in the portlet. Clicking it takes you to\nit. You\'ll be redirected to the Plone\'s `insufficient_privileges` form, which\nis patched to not display the "Insufficient Privileges" message, but which\ninstead tells you that this is a Section for which a subscription is required,\nand there\'ll be a link to subscribe to the Section. The title and description\nof the Section will be visible, so you know what the Section is about..\n\nClicking the subscription link on the Open Section will immediately grant you\nthe Reader role on the Section. You\'ll be redirected to the default view of the\nSection, and a portal message will tell you your subscription was succesful.\n\nViewing and removing subscriptions\n----------------------------------\n\nAs the Manager, you will now see this member\'s subscription in the\n"Subscriptions" overview. You will also find the user has the "Reader" role\nunder the Sharing tab. \n \n If there are members in the Sharing list that are not in the Subscribers\n list, it means that they have not been added via this product. You can only\n manage these members through Plone\'s Sharing form (and not via our "Manage\n subscriptions" screen), because these members are not subscribers.\n\n If you revoke a subscriber\'s Reader role from the Sharing tab, the\n subscriber will also not show up as a subscriber in the "Manage\n subscriptions" screen anymore. \n\nIn this form, you can check the box to remove the subscription. Submit the\nform, and you\'ll see the subscription has disappeared. If you look under\n"Sharing", you\'ll notice the Reader role has also been removed.\n\nSubscribing to a Closed Section\n-------------------------------\n\nThis is similar to subscribing to an Open Section, but after subscribing you\'ll\nsee a list of your subscriptions. The top of the screen shows a message which\nsays that your subscription request has been added.\n\nAs a manager, you will see this request in the "Subscription requests" portlet\nwhich was also added to the right column upon product installation. Clicking\nthe link will take you to the Section\'s "Manage subscriptions" page.\n\nApproving subscriptions\n-----------------------\n\nOn the subscriptions management form of the Closed Section, the Manager will\nsee a list of subscription requests. Checking the box in the "Approve" column\nand submitting the form will approve the request: You\'ll see a portal message\nsaying the subscription was approved. You\'ll see the user has been moved from\nthe "Requests" to the "Subscriptions" list. Looking at the "Sharing", you\'ll\nnotice the user has been granted the Reader role.\n\n\nContinuous integration testing\n==============================\n\n.. image:: https://secure.travis-ci.org/collective/collective.subscribablesections.png\n :target: http://travis-ci.org/collective/collective.subscribablesections\n\nHave an idea? Found a bug? Let us know by `opening a support ticket`_.\n\nAuthors\n=======\n\nKees Hink\nKim Chee Leong\n\n\n.. _`opening a support ticket`: https://github.com/collective/collective.subscribablesections/issues\n\ncollective.subscribablesections Installation\n--------------------------------------------\n\nTo install collective.subscribablesections into the global Python environment (or a workingenv),\nusing a traditional Zope 2 instance, you can do this:\n\n* When you\'re reading this you have probably already run \n ``easy_install collective.subscribablesections``. Find out how to install setuptools\n (and EasyInstall) here:\n http://peak.telecommunity.com/DevCenter/EasyInstall\n\n* If you are using Zope 2.9 (not 2.10), get `pythonproducts`_ and install it \n via::\n\n python setup.py install --home /path/to/instance\n\ninto your Zope instance.\n\n* Create a file called ``collective.subscribablesections-configure.zcml`` in the\n ``/path/to/instance/etc/package-includes`` directory. The file\n should only contain this::\n\n <include package="collective.subscribablesections" />\n\n.. _pythonproducts: http://plone.org/products/pythonproducts\n\n\nAlternatively, if you are using zc.buildout and the plone.recipe.zope2instance\nrecipe to manage your project, you can do this:\n\n* Add ``collective.subscribablesections`` to the list of eggs to install, e.g.:\n\n [buildout]\n ...\n eggs =\n ...\n collective.subscribablesections\n \n* Tell the plone.recipe.zope2instance recipe to install a ZCML slug:\n\n [instance]\n recipe = plone.recipe.zope2instance\n ...\n zcml =\n collective.subscribablesections\n \n* Re-run buildout, e.g. with:\n\n $ ./bin/buildout\n \nYou can skip the ZCML slug if you are going to explicitly include the package\nfrom another package\'s configure.zcml file.\n\n collective.subscribablesections is copyright \n\n This program is free software; you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation; either version 2 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program; if not, write to the Free Software\n Foundation, Inc., 59 Temple Place, Suite 330, Boston, \n MA 02111-1307 USA.\n\nChangelog\n=========\n\n1.1 (2017-05-23)\n----------------\n\n- Add MANIFEST.in [kingel]\n- Fix getSite import error on Plone 4.3 [toutpt]\n- added development buildout configurations [macagua]\n- added support for Travis CI service [macagua]\n- added support for plone.app.testing [macagua]\n- added Spanish translation [macagua]\n- added support for plone domain [macagua]\n- added more improvements for i18n support [macagua]\n- Bugfix: added an include of permissions.zcml file from Products.CMFCore for support \n "browser/configure.zcml" browser:page permission. Resolve github issue number  [macagua]\n\n1.0 (2012-06-13)\n----------------\n- Stable release\n\n0.2dvl (unreleased)\n-------------------\n- Changed template fill-slot definitions to a more saner one [kcleong]\n- Use ZCatalog instead of portal_catalog.unrestrictedSearchResults, the\n ZCatalog is really unrestricted. [kcleong]\n- Improved and simplified retrieving of came form object in section view [kcleong]\n- Added an event subscriber so the folder is reindexed when subtyped with a section [kcleong]\n\n\n0.1 (2011-11-21)\n----------------\n\nNo changes.\n\n0.1a1 (2011-10-24)\n------------------\n\n- Updated setup.py: url, author.\n- Check if user exists before including them in subscriptions/requests list.\n- Bugfix: Define Section\'s title and description in proper place in \n `insufficient_privileges` template.\n\n0.1-dvl (2011-10-21)\n--------------------\n\n- Initial release\n',)