allow users with editbugs to add tags to individual comments.
this will give users the ability to thread conversations, mark comments as spam, identify important comments, etc, without a large reworking of the bugzilla ui.
- add a new line within the comment box between the comment header and content which shows tags for that comment.
+--- | Byron Jones 2012-07-24 ... | (x tag) (x another) | ...
- a concern with the "new line" approach is this will consume vertical space needlessly on comments without tags. another approach is
+-- | Byron Jones 2012-07-24 ... [tag][reply][-] | | (x tag) (x another) | ...
- clicking on the tag icon will show a text box which
- uses yui's autocomplete to assist the user to select a tag
- the list of tags shown by autocomplete will be sorted with the most frequently used tags sorted first
- refreshes the list of current tags for the comment (via ajax)
- tags can not contain spaces, and have a limited range of valid characters - [\w\d\._-]
- min tag length: 3 character; max tag length: 24 characters
- a comment cannot have more than 10 tags
- add a group bz_comment_taggers which governs who can tag comments, users with editbugs become members of this group by default
- group membership is required, just being able to edit a bug is not sufficient (ie. reporters without bz_comment_taggers will not be able to add tags)
- tags are visible to any account, except anon (ie. you must be logged in to bugzilla for the tags to show)
- anyone with bz_comment_taggers can add or remove tags without restriction
- tags can only be added to a bug once, adding an existing tag is a no-op
- tags which match Regexp::Common::RE_PROFANITY will not be allowed
- clicking on the "x" to the left of the tag will immediately remove the tag
- tags are added and removed via ajax, changes are immediately visible to the changer without refreshing the page
- tags added by other users (or on other tabs) will not be visible without a page refresh, or clicking on the tag [icon]
- tags changes are added to longdescs_tags_activity
- comment_tags_activity will be displayed merged with bug_activity on the bug's history page
- some tags will result in the comment being collapsed by default when a page is initially displayed
- the list of tags this applies to is governed by an admin configured param
- a comment will not be collapsed immediately when an auto-collapse tag is added
- add a ui below the comment collapsing controls to collapse/expand by tag:
Collapse All Comments Expand All Comments -- Comment Tags : spam important .. (Click on a tag to only show comments with that tag) -- Show CC Changes
- add a admin configuration panel which lets you set which tags are collapsed by default (eg. 'spam')
- add a report of tag usage
tags will contain a comma separated list of tags. this approach will be faster.
add a new column to longdescs.
tags | varchar(255)
quick lookup for autocomplete, updated when tags are added or removed from comments. the 'weight' is the count of instances of the tag; autocomplete will sort most frequently used tags first.
id | AUTOINC PK tag | VARCHAR(24) weight | INTEGER
history of comment tag changes.
id | AUTOINC PK bug_id | FOREIGN KEY --> bugs.bug_id comment_id | FOREIGN KEY --> longdescs.comment_id who | FOREIGN KEY --> profiles.userid bug_when | DATETIME removed | VARCHAR(24) added | VARCHAR(24)
within the CommentTag class:
search(substring):(tag[,tag..]) params substring | string, sub-string to search, min 2 characters returns an array of tags (strings) which contain the sub-string sorted by weight (most frequently used first)
get(comment_id):(tag[,tag..]) params comment_id | int, longdescs.comment_id returns an array of tags (strings) applied to the comment, or an empty array sorted alphabetically
add(comment_id, tag) params comment_id | int, longdescs.comment_id tag | string, tag to add returns an array of tags (strings) applied to the comment, or an empty array sorted alphabetically
remove(comment_id, tag) params comment_id | int, longdescs.comment_id tag | string, tag to add returns an array of tags (strings) applied to the comment, or an empty array sorted alphabetically