When I build help ticket systems for folks on D6, I use one content type for the ticket and a second content type with Nodecomment for replies. This lets me ensure that only the ticket owner and the internal helpdesk can see ticket history, and keep internal-only notes unpublished (vs no ability for internal notes with a comment).

Is there an equivalent for this in D7, or a better approach to take with contrib, or do I need to write a custom module to handle this?


@Chris You started me down the right path, thanks so much! I've tested and can implement it this way without writing any custom code:

  • Create 3 content types: Helpdesk Ticket, Ticket Internal Note, Ticket External Note.
  • Create a role called Helpdesk Volunteer.
  • Put a node reference field on Ticket Internal Note and Ticket External Note using the node reference URL widget.
  • Use the Content Access module (currently still in dev) to restrict view/edit/delete of the Ticket Internal Note content type to users in the Helpdesk Volunteer role.
  • Create a view with EVA that attaches to the Helpdesk Ticket content type, set to display both internal and external notes.

Afterwards, it's just a touch of prettification and theming as needed. Add a file attachment upload field and a ticket category. Maybe implement messaging/notifications to have email notifications and reply-by-email. Fully functional helpdesk on D7!

| improve this answer | |

This might be stretching it a bit, but it seems you could achieve this level of access by using the Comment Access module. The node owner would have the "approve comments on own $type" permission, and the internal helpdesk would have the "administer comments" permission. The fallbacks of this approach are that the internal helpdesk would have access to administer all comments on the site even if they were outside the ticketing system, and the ability to approve / delete comments would have to be hidden so the the comments remain unpublished.

| improve this answer | |

You could also go the route of adding a node reference field to the "reply" content type and leverage the node privacy byrole module for access to the ticket. At the time of this response it only has a 7.x-1.x version available, however it has a very small code base which means it should be easier to finish a port to 7. That way you could have a View that displays the ticket node by adding a contextual filter pulling from the node ID that validates whether the user has access to the node. Then you would create an attachment display showing all responses related to the ticket so the list would show right underneath the ticket as if it were a list of comments.

You would probably have to write some glue code to pre-populate the nodereference value and hide it from the form. There are probably some other small tweaks you would have to do as well to ensure the system flows nicely from the end user's standpoint. Not a quick win at all, but another way to approach it.

| improve this answer | |
  • Why did you post another answer? – kiamlaluno Jul 23 '11 at 14:34
  • Because they are two completely separate ideas. That way they could be voted up or down individually without confusion or further explanation as to which one the vote applied to. – Chris Pliakas Jul 23 '11 at 14:50
  • This is an interesting route and inspires me. What do you think of this? -Leverage Node Reference URL Widget to allow the user to add new "comments" to his case, which are really nodes of a different content type (possibly an internal ticket note and an external ticket note) -Control creation of those content types by role. -Use Entity Views Attachment to display all of the comments on that case, and let core access system handle which ones to display to the user based on role. Does this make sense? – Nicholai Jul 23 '11 at 16:01
  • I see where you are going, and it makes sense to me. Good luck, and I hope it works out! – Chris Pliakas Jul 23 '11 at 18:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.