Poi: A friendly issue tracker
Poi: A friendly issue tracker
Poi is an issue tracker product for Plone. It has a goal to be simple and attractive whilst providing the most commonly needed issue tracking functionality. Poi 4.0 uses Dexterity and is for Plone 5 only.
by Martin Aspeli <email@example.com>
current maintainer: Maurits van Rees <firstname.lastname@example.org>
Released under the GNU General Public License, version 2
Feedback is very welcome. Please submit any bugs or feature requests at:
Installation and dependencies
Best is to use zc.buildout. Just add Products.Poi to your eggs, rerun buildout and you are done.
Poi 4.0+ requires:
- Plone 5
What version of Poi to use?
- Poi 2.x is for Plone 4
- Poi 3.x is a migration step from Poi 2.x to Poi 4.x
- Poi 4.0+ only works on Plone 5
Version 3.x of Poi is only for migrating to Dexterity in preparation of moving to Plone 5. It requires plone.app.contenttypes 1.1.2, but don’t activate the add-on unless you plan on migrating all your default Archetypes to Dexterity.
- Do the migration in Plone 4 (reinstall Poi or run the upgrade steps)
- Upgrade to Plone 5
- Upgrade to Poi 4.x
Re-install Poi from the Add/Remove Products control panel. Some upgrade steps will be executed; these can also be found in the ZMI, in portal_setup, on the Upgrade tab, in case you need to run them again. Backup your Data.fs first before upgrading!
Poi is a folderish object type. Many Poi Trackers can exist within the same Plone instance.
Prior to adding a new Tracker, ensure that some Assignees (users) are created in the system.
Add a new Tracker, and customize the following to suit your organization’s needs:
- Areas - top level categories for the Tracker (e.g., UI)
- Issue Types – ticket types in the system (e.g., Bug)
- Severities - levels of severity for the Issues (e.g., Low)
- Available Releases – used for assigning version values (e.g. v1.0)
- Assignees – list of users to whom Issues can be assigned
- Watchers – list of users who should be notified when Issues or comments are added
- Mailing List – single email address, similar to Watchers
- Repository URL – git/subversion repository used by your organization
Note that if you are not tracking software releases, you can leave the list of “releases” empty, and organization by release will be turned off. The fields for areas and issue types come pre-configured with simple values that presume you are tracking software bugs. You can modify these to suit your needs.
If a repository URL is provided, revision numbers will automatically be hyperlinked when included in Issue descriptions and comments.
After creating the Tracker, use the “state” menu to open it for submissions. Available workflow states are:
- Open: Anonymous users can view and submit issues
- Restricted: Anonymous users can view, but only members can submit
- Protected: Only members can view and submit
- Closed: Tracker is closed to submissions
The Tracker front page includes:
- Issue search (as well as link to Advanced Search)
- Issue Logs link (view all Tracker activity)
- Watch This Tracker / Stop Watching This Tracker button to enable/disable notifications
- Browse Issues by release, state, area or tag
- “My Submitted Issues” listing
- “Orphaned Issues” listing (unassigned Issues)
- “Issues Assigned to Me”
Once you have set up the Tracker, Issues (tickets) can be created within the Tracker. Who can create them depends on the Tracker’s state (see list above). Issues contain:
- Release (version Issue was found in)
- Details (description)
- Steps to Reproduce
- Related Issues (select from existing Issues within the Tracker)
- Area, Type and Severity
- Target Release (for fix)
- Contact Email
- Requested By Date
- Ticket Owner (Assignee)
- Subjects (Tags)
Once an Issue is created:
- Attachments can be added to the Issue
- Responses can be added
- When adding a response as a tracker manager, you can change the state, importance or assignment of an issue.
Issues have the following workflow:
If email notification is enabled in the Tracker setup, the following conditions will exist.
- If a mailing list was provided in the Tracker setup, members of the list will also be notified.
- All listed Tracker Assignees automatically become Tracker Watchers when the tracker is created.
- A Ticket Owner (assignee assigned to an issue) automatically becomes an Issue Watcher for that issue.
|User||New Issue||Issue Response||Issue Resolved|
|Tracker Mailing List||X||X||X|
* except responses they post
For additional mail functionality, also see poi.receivemail and poi.maildefaults
Roles and Permissions
Poi adds 3 Roles to the defaults in Plone. Roles honor inheritance. Note that some of these permissions will change based on the state of the tracker.
|Modify Issue Severity||X||X||X|
|Modify Issue Assignment||X||X||X|
|Modify Issue State||X||X||X|
|Modify Issue Tags||X||X||X|
|Modify Issue Watchers||X||X||X|
|Modify Issue Target Release||X||X||X|
|Modify Related Issues||X||X||X||X||X|
If you have contributed to Poi in some fashion, be sure to add yourself in the hall of fame here!
o Design and development by Martin Aspeli <email@example.com>
o Bug fixes and general critiquing by Rocky Burt <firstname.lastname@example.org>
o Icons by Vidar Andersen, Black Tar, originally created for CMFCollector.
o Log-view for Poi trackers by Malthe Borch
- o Link detection, additions to the search interface and other fixes
- by Daniel Nouri.
o Plone 3 support by Alexander Limi and Maurits van Rees.
- o Bug fixes, modernizing of responses, maintenance by Maurits van
o Plone 4 support by Maurits van Rees and Maarten Kling.
- o Refactoring of emailing and watching code into
- collective.watcherlist: Maurits van Rees.
o Plone 5 Refactoring by Six Feet Up
Changelog for Poi
- Plone 5 compatibility
- Complete refactor using Dexterity for Trackers and Issues (see Poi 3.x for migration)
- Issues are now folderish for holding attachments.
- New template layouts
- CSV export from issue search
- New field for relating issues to each other
- Added a migration path from Poi 2.x to 4.x, which migrates Trackers and Issues to Dexterity. This requires a version of plone.app.contenttypes compatible with Plone 4.3, with minimum version 1.1.2. This version of Poi is to only be used in Plone 4 as a migration step, and is not a useable version of Poi. You will see errors like AttributeError: @@issuefolder when you try to view a tracker. This is okay. You can now migrate to Plone 5.
- Avoid security warning on startup. You get a warning about our IResponseAdder viewlet manager, which apparently has a security declaration for nonexistent method ‘__getitem__’. So we add that method and let it return an IndexError, because this is a zope.contentprovider which is not meant to iterate over viewlets. [maurits]
- Use blob file for attachments in issues and responses. This comes with an upgrade step to migrate them. Fixes issue #32. [maurits]
- Added basic options to BasePoiMail. This avoids doing the same calculations on various sub classes. [maurits]
- Load rss.png instead of rss.gif. [maurits]
- Only do link detection in plain or intelligent text fields. If a field has html and contains an html space   and you have an issue 160, it will start looking very ugly. Note that by default html is not allowed. [maurits]
- Require Products.DataGridField 1.9.2 as minimum. This means we no longer use the isDataGridFilled validator, but simply rely on required=True for the availableAreas and availableIssueTypes fields of the trackers. [maurits]
- Refer to .png Plone images in css instead of .gif. [thomasdesvenain]
- When we go to search form, current filters are pre-selected. [thomasdesvenain]
- Filled in missing translations for de and removed stale fuzzy entries [pilz]
- Show technicians in the responsible managers list in the search form. Fixes http://plone.org/products/poi/issues/266 [maurits]
- Sort the available releases of trackers in PloneSoftwareCenter by id, which means: by version. [maurits]
- Fix auto-recognized issue/revision links when displayed in the tracker log. These would point outside of the tracker. Now we pass the absolute url of the tracker. Note that responses cache their rendered html text in a variable rendered_text, which is only updated when you edit the response, so this may not have effect on existing responses. Fixes http://plone.org/products/poi/issues/255 [maurits]
- Fix corner cases in recognizing links to issues and revisions. Add the patterns for these two in config.py so they can be overridden. Also add the template to use when recognizing a link to another issue there. Fixes http://plone.org/products/poi/issues/262 [maurits]
- Fixed mail templates styles for new issue and new response [cekk]
- Some style fixes; removed all inline styles left, translated to CSS rules. [keul]
- Removed the text type selection for the tracker description. Note: when editing and saving an existing tracker and it has html code in its description, you may get a validation error: “Mimetype text/html is not allowed.” In that case you need to edit the description and remove the html tags. [keul]
- Some style fixes; removed inline styles. [keul]
- Also allow text/plain for the details field. This fixes a problem with Plone 4.3. [maurits]
- Updated italian translation [keul]
- Now supporting the “Site Administrator” role [keul]
- Fix tracker security; issues inside private folder must not be visible to anonymous users [keul]
- Show the ‘Watch/Stop watching this tracker’ button again. [maurits]
- Fixed KeyError: portal on several pages for anonymous users. [maurits]
- Issue search form criteria can be pre-selected from request. [thomasdesvenain]
- Quick search and add issue button are now available on all pages. [thomasdesvenain]
- Most metadata are now clickable links. [thomasdesvenain]
- Added issue_portal_type parameter in IssueFolderView. It is now possible to use a custom content type inherited from PoiIssue. [cedricmessiant]
- Completed French translations. [cedricmessiant]
- Store the watchers of a tracker in a lines field instead of annotations. This way, you can edit them as Manager if that is needed. Added an upgrade step to migrate all existing trackers. [maurits]
- Fixed changes in a response that were being saved with a wrong id. This did not cause missing data, just a duplicate id in the response changes. This is never shown in the UI, so should only be a problem for third party code that directly accesses this response data structure. https://github.com/collective/Products.Poi/issues/4 [maurits]
- Fix advanced search form not returning results unless both Issue number and Submitter were specified. [rpatterson]
- Fixed reinstall error. Metadata would be missing in the catalog brains. [maurits]
- Included Products.AddRemoveWidget and Products.DataGridField in configure.zcml [cedricmessiant]
- Fixed packaging error. [maurits]
- Made compatible with Plone 4.3. Lost compatibility with Plone 4.0. [maurits]
- Fix Unauthorized/”Insufficient Privileges” error under Plone 4.2. [rpatterson]
- completed german translation [jensens]
- Get rid of all code that still handled old PoiResponses. If you still have those (meaning you were using Poi 1.1.x before this), then you must first update to version 2.0.x and run the upgrade steps. [maurits]
- Add an uninstall method and profile, to clean up a bit more. In addition to what the CMFQuickInstaller does, we remove our catalog columns and indexes, our skin layer from the skin selections, and our types from the parentMetaTypesNotToQuery in the navtree_properties. [maurits]
- Refactored all email notifications to templates. This should make it easier to customize and translate. [maurits]
- Fixed example link for collective changesets. [maurits]
- When clicking on the suggested login button, show a popup. [maurits]
- Removed htmlrender.py. [maurits]
- Refactored the email notifications by creating a page template browser/poi_mail.pt and a css file skins/Poi/poi-email.css and using that instead of hardcoded stuff in a python file htmlrender.py. Fixes http://plone.org/products/poi/issues/251 [maurits]
- Allow assigning portlets to trackers and issues. Fixes http://plone.org/products/poi/issues/250 [maurits]
- Make sure the issue-info-box does not inherit a 100% width, as is the case on plone.org at the moment (6 September 2011), which is far too wide for this little box. See http://plone.org/products/poi/issues/249 [Maurits]
- Added MANIFEST.in file so that .mo translation files will be included in source distributions (with help from zest.releaser and zest.pocompile). Refs http://plone.org/products/poi/issues/248 [maurits]
- Depend on Products.CMFPlone instead of Plone to improve Plone 4.1 compatibility. [maurits]
- Do not fail when rendering a response that has a text/x-html-safe mimetype or where the html transform returns nothing. (Merged from 1.2 branch.) [maurits]
- Review French translations [toutpt]
- Split profile registration and upgrade steps from configure.zcml into a new profiles.zcml as it is quite big already. [maurits]
- Fix: for the ‘no change’ label and input the ids were empty. [thomasdesvenain]
- Removed our dependency on collective.autopermission, as its functionality is integrated in Zope 2.12 (Plone 4.0). [maurits]
- Lower the minimum dependency on Products.AddRemoveWidget to 1.4.2 again, as I had a report about a performance hit in 1.4.3 in corner cases not related to Poi itself; and 1.4.2 is fine really, though 1.4.4 has a fix for Plone 4 in a part that Poi does not use. [maurits]
- Do not advise users to click on ‘search for issues’ as that link is nowhere; instead it should be ‘Advanced issue search’. [maurits]
For changes in 2.0b2 and earlier, see docs/HISTORY.txt.