{ "info": { "author": "Harald Friessnegger", "author_email": "harald@webmeisterei.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Plone", "Framework :: Plone :: 4.3", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7" ], "description": "================================\ncollective.contentrules.mustread\n================================\n\nContent rule to define which content items need to be read by which users (local roles) before a certain deadline.\n\nA notification email is sent to all users when the read confirmation is requested.\n\nAn optional reminder email is sent to all users that did not confirm their read-requests 2 days (configurable) before the deadline.\n\nWhen read-requests for content items have expired, a notification email is sent to a configurable emailaddress that lists all unread documents and which users did not confirm the item as read in time.\n\nSite-Administrators can view read-statistics (per content-item and site-wide) as well as download a CSV list of all read-requests.\n\nThe content rule allows to configure\n\n* the number of days the users have time to read the content (deadline = today + nr-of-days),\n* the number of days the reminder is sent out before the deadline,\n* and the subject/text of the notification and reminder emails.\n\nThis addon depends on `collective.mustread `_.\n\nTo enable must-read actions on non-folderish ATContentTypes include archetypes.zcml (see Installation_).\n\nSetup contentrule\n=================\n\n\nAdd a new content rule.\n\nTypically you'll use `Read confirmation requested` as the triggering event.\n\nThis is fired when a user calls the @@request-read-confirmation view on a content object\nwhich is linked in the `actions` dropdown of content items if the user has the `Request read confirmation` permission.\n\nYou can also use other event triggers such as `Object added to this container` or `Workflow state changed` if this makes sense for your use-case.\n\nAs action choose `Request read confirmation` and configure it:\n\n\nEmail source\n The email address notifications and reminders get send from (``From:`` header)\n\n\nRole\n Currently the users who get notified of the read request are defined by a global, acquired or local role you can chose (similiar to `collective.contentrules.mailtorole `_\n\n We also support roles granted to groups and also support looking up users in nested groups\n\n Maybe we'll add support to alternatively choose groups and users directly in the future.\n\n\nAcquired Roles\n Also notify users which acquired `Role` from a parent object\n\n\nGlobal Roles\n Also notify users which have been granted `Role` in the user or group control panel.\n\n\nNotification Subject\n Subject of notification email\n\n\nNotification Message\n Text for the notification email. You can use all the replacement variables of plone.stringinterp and in addition\n the `Content action specific variables`_)\n\n\nReminder Subject\n Subject of reminder email\n\n\nReminder Message\n Text for the reminder mail.\n\n If empty, no reminder is sent\n\n\nDeadline Delay\n Number of days a read request must be confirmed within.\n Will be used to compute the deadline of requests.\n\n\nReminder Delay\n Defines how many days before the deadline a reminder email will be sent.\n\n\nContent action specific variables\n---------------------------------\n\nThis package defines some additional `plone.stringinterp` variables:\n\nmustread_url\n URL of the item that marks the object as read (`/@@mustread-hit`)\n\n (available in other actions as well).\n\nmustread_fullname\n Full Name of the person the read request is assigned to\n\n (only available in `Request read confirmation` action).\n\nmustread_deadline\n Localized deadline of the read request\n\n (only available in `Request read confirmation` action).\n\n\nUsage\n=====\n\nAfter `setting up the content rule `_ you simply call the `@@request-read-confirmation` view on a content object.\n\nThis should be available in the `actions` dropdown of content items for users having the `Request read confirmation` permission.\n\nFor the users matching the role-filter defined in the action, a mustread database entry gets created and a notification email is sent out.\n\nYou'll see a satusmessage indicating which usernames got notified.\n\nIf you want your users to get notified again some days before the deadline, you'll want to `Setup a reminder`_.\n\nYou can also `Setup an expiration notification`_ (an email report of missed read requests - which documents have missed requests and which users did not read the document).\n\nThere is a csv export (`@@read-statistic-csv`) that lists all mustread records (useful as audit-log or doing advanced spreadsheet-magic).\n\n\n\nSetup a reminder\n----------------\n\nThe view `@@send-read-reminders` searches for (child-)objects with open read requests and notifies\nusers if today's date equals `deadline of the reminder - notification-delay` (which is specified in the action of the contentrule)\n\nYou can use a clockserver (similar to https://github.com/collective/collective.timedevents) or a cronjob (z3c.recipe.usercrontab) for this.\n\nThis is an example for a cronjob that sends out reminder emails at 7am::\n\n 0 7 * * * wget --quiet -O- --user=admin --password=admin --auth-no-challenge http://127.0.0.1:8080/Plone/@@send-read-reminders > /dev/null\n\n.. ATTENTION::\n make sure to call this view only once a day since the system does not keep records for sent notifications\n and users would get multiple reminder emails.\n\n\nSetup an expiration notification\n--------------------------------\n\nThe view `@@send-expired-notification` lists all documents having open read requests and notifies the portal's admin address.\n\nYou can configure the recipients in the registry record `collective.contentrules.mustread.interfaces.IMustReadSettings.expired_recipient`\n\nMake sure to call it only once a day - similar to `Setup a reminder`_\n\n\nTodos\n=====\n\n- Report View for objects - shows mustread records for an object or context including child-objects.\n\n * A heading for each object, links to mustread report for this object\n * Table listing with sortable columns:\n\n username, deadline, read-at, status (read, read too late, not read)\n\n- Add cleanup options to report view\n\n * Remove a single mustread entry\n * Remove all mustread entries\n\n- Report view for users (link usernames in report for object)\n\n Table listing all objects the user has read, not read, read too late.\n\n\n- limitation of types that offer must-read actions is done by marker interface\n (see archetypes.zcml) - there might be nicer ways\n\n- implement dexterity behaviour for ICanBeMarkedAsMustRead\n\n- Idea: separate content-action for notifications so we can define multiple notifications with different delays and texts\n\n- Idea: allow to call @@send-read-reminders w/o authentication using a secret\n (similar to munin.zope)\n\n\nTranslations\n============\n\nThis product has been translated into\n\n- English\n- German\n\n\nInstallation\n============\n\nInstall collective.contentrules.mustread by adding it to your buildout::\n\n [buildout]\n\n ...\n\n eggs =\n collective.contentrules.mustread\n\n zcml =\n collective.contentrules.mustread-archetypes\n\n.. ATTENTION:: when using atcontenttypes, also include archetypes.zcml or apply marker interface to your types\n\nand then running ``bin/buildout``\n\n\nInstall it via the addon configuration panel (Plone/prefs_install_products_form)\n\nAnd make sure to configure the Database for `collective.mustread `_\n\n\nContribute\n==========\n\n- Issue Tracker: https://github.com/collective/collective.contentrules.mustread/issues\n- Source Code: https://github.com/collective/collective.contentrules.mustread\n\nSupport\n=======\n\nIf you are having issues, please let us know `via the issue tracker `_\n\n\nLicense\n=======\n\nThe project is licensed under the GPLv2.\n\n\nContributors\n============\n\n- Harald Friessnegger, harald@webmeisterei.com\n\n\nChangelog\n=========\n\n\n1.0a2 (2017-04-26)\n------------------\n\n- Do not send expiration email if there are no users with deadlines\n that expired before our search-date [fRiSi]\n\n\n1.0a1 (2017-04-26)\n------------------\n\n- Initial release.\n [frisi]", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://pypi.python.org/pypi/collective.contentrules.mustread", "keywords": "Python Plone", "license": "GPL version 2", "maintainer": "", "maintainer_email": "", "name": "collective.contentrules.mustread", "package_url": "https://pypi.org/project/collective.contentrules.mustread/", "platform": "", "project_url": "https://pypi.org/project/collective.contentrules.mustread/", "project_urls": { "Homepage": "https://pypi.python.org/pypi/collective.contentrules.mustread" }, "release_url": "https://pypi.org/project/collective.contentrules.mustread/1.0a2/", "requires_dist": null, "requires_python": "", "summary": "Define which users need to mark a content item as read (via collective.mustread)", "version": "1.0a2" }, "last_serial": 2832855, "releases": { "1.0a1": [ { "comment_text": "", "digests": { "md5": "68d8d7a6e92fcd929f2c223082e0af18", "sha256": "e9751e09fc31c059fca2d1c59874826ddacfe36c6b57e974a9366df36251ed49" }, "downloads": -1, "filename": "collective.contentrules.mustread-1.0a1.tar.gz", "has_sig": false, "md5_digest": "68d8d7a6e92fcd929f2c223082e0af18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35791, "upload_time": "2017-04-26T14:09:11", "url": "https://files.pythonhosted.org/packages/a6/16/b3b6db921c09b585c875dfc8d5bd4f686c3a6f22d3b850b6e8cc12fa5e09/collective.contentrules.mustread-1.0a1.tar.gz" } ], "1.0a2": [ { "comment_text": "", "digests": { "md5": "a03da5d4ffb430fa025c23c065620e8a", "sha256": "7c43ccfbc00ff74f6fed6c324090e128743b4615c05b3e415e9d3e5fe240f66b" }, "downloads": -1, "filename": "collective.contentrules.mustread-1.0a2.tar.gz", "has_sig": false, "md5_digest": "a03da5d4ffb430fa025c23c065620e8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42662, "upload_time": "2017-04-26T20:38:13", "url": "https://files.pythonhosted.org/packages/2a/ec/6bdac14f6d0215a1a887298dfb910431af2d9e11b50dbdc2503c4cfa3842/collective.contentrules.mustread-1.0a2.tar.gz" } ], "1.0a2.dev0": [] }, "urls": [ { "comment_text": "", "digests": { "md5": "a03da5d4ffb430fa025c23c065620e8a", "sha256": "7c43ccfbc00ff74f6fed6c324090e128743b4615c05b3e415e9d3e5fe240f66b" }, "downloads": -1, "filename": "collective.contentrules.mustread-1.0a2.tar.gz", "has_sig": false, "md5_digest": "a03da5d4ffb430fa025c23c065620e8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42662, "upload_time": "2017-04-26T20:38:13", "url": "https://files.pythonhosted.org/packages/2a/ec/6bdac14f6d0215a1a887298dfb910431af2d9e11b50dbdc2503c4cfa3842/collective.contentrules.mustread-1.0a2.tar.gz" } ] }