Tickets

Tickets [Paid] 1.6.10

No permission to buy ($60.00)
NixFifty updated Tickets with a new update entry:

Version 1.5.0

This is a significant update to Tickets and all license holders are encouraged to upgrade to this version. There are some post-upgrade steps that must be completed or else you will run in to unexpected issues. In addition to this, a PHP 5.4+ requirement is now enforced so you will need to update PHP if you're running anything older than that.

With the truckload of changes in this version, there is also an increase in price to allow for better continued support for this add-on...

Read the rest of this update entry...
 
I have been beta testing Tickets 1.5 for a while and it is a massive update. Or rewrite actually.
Like others, I run it live on my big board. I've got hundreds of tickets already.

It has taken a while, but @NixFifty has really come through on this project. The result is beautiful.
Tickets will make it much easier to manage your support requests.
 
Last edited:
Upgraded, but two errors causing issues so no search / rebuild of data:

Code:
Error Info Zend_Db_Statement_Mysqli_Exception: Mysqli prepare error: Unknown column 'ticket.discussion_state' in 'where clause' - library/Zend/Db/Statement/Mysqli.php:77
Generated By: mrsps, 26 minutes ago
Stack Trace #0 /var/www/myptsd/html/c/library/Zend/Db/Statement.php(115): Zend_Db_Statement_Mysqli->_prepare('\n            SE...')
#1 /var/www/myptsd/html/c/library/Zend/Db/Adapter/Mysqli.php(381): Zend_Db_Statement->__construct(Object(Zend_Db_Adapter_Mysqli), '\n            SE...')
#2 /var/www/myptsd/html/c/library/Zend/Db/Adapter/Abstract.php(478): Zend_Db_Adapter_Mysqli->prepare('\n            SE...')
#3 /var/www/myptsd/html/c/library/XenForo/Model.php(219): Zend_Db_Adapter_Abstract->query('\n            SE...', Array, 2)
#4 /var/www/myptsd/html/c/library/NixFifty/Tickets/Model/Ticket.php(179): XenForo_Model->fetchAllKeyed('\n            SE...', 'ticket_id')
#5 /var/www/myptsd/html/c/library/NixFifty/Tickets/Model/Ticket.php(1313): NixFifty_Tickets_Model_Ticket->getActiveTickets(Array)
#6 /var/www/myptsd/html/c/library/NixFifty/Tickets/Listener.php(34): NixFifty_Tickets_Model_Ticket->rebuildTicketCountCache()
#7 /var/www/myptsd/html/c/library/XenForo/CodeEvent.php(58): NixFifty_Tickets_Listener::controllerPreDispatch(Object(Siropu_Chat_ControllerPublic_Chat), 'Refresh', 'Siropu_Chat_Con...')
#8 /var/www/myptsd/html/c/library/XenForo/Controller.php(313): XenForo_CodeEvent::fire('controller_pre_...', Array, 'Siropu_Chat_Con...')
#9 /var/www/myptsd/html/c/library/XenForo/FrontController.php(350): XenForo_Controller->preDispatch('Refresh', 'Siropu_Chat_Con...')
#10 /var/www/myptsd/html/c/library/XenForo/FrontController.php(134): XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))
#11 /var/www/myptsd/html/c/index.php(13): XenForo_FrontController->run()
#12 {main}Request State array(3) {
  ["url"] => string(47) "https://www.myptsd.com/c/index.php?chat/refresh"
  ["_GET"] => array(1) {
    ["chat/refresh"] => string(0) ""
  }
  ["_POST"] => array(16) {
    ["room_id"] => string(1) "0"
    ["user_rooms"] => array(1) {
      [0] => string(6) "218041"
    }
    ["last_id"] => string(6) "218041"
    ["activity_last_id"] => string(1) "0"
    ["activity_last_update"] => string(1) "0"
    ["users_last_update"] => string(1) "0"
    ["inverse"] => string(1) "0"
    ["hide_bot"] => string(1) "0"
    ["no_users"] => string(1) "0"
    ["show_ignored"] => string(1) "0"
    ["all_pages"] => string(1) "0"
    ["loading"] => string(1) "0"
    ["_xfRequestUri"] => string(3) "/c/"
    ["_xfNoRedirect"] => string(1) "1"
    ["_xfToken"] => string(8) "********"
    ["_xfResponseType"] => string(4) "json"
  }
}

And when trying to save permissions:

Code:
Error Info TypeError: Argument 2 passed to NixFifty_Tickets_Model_Ticket::prepareTicketCustomFields() must be of the type array, boolean given, called in /var/www/myptsd/html/c/library/NixFifty/Tickets/DataWriter/Ticket.php on line 696 - library/NixFifty/Tickets/Model/Ticket.php:444
Generated By: anthony, 13 minutes ago
Stack Trace #0 /var/www/myptsd/html/c/library/NixFifty/Tickets/DataWriter/Ticket.php(696): NixFifty_Tickets_Model_Ticket->prepareTicketCustomFields(Array, false)
#1 /var/www/myptsd/html/c/library/XenForo/DataWriter.php(1437): NixFifty_Tickets_DataWriter_Ticket->_postSaveAfterTransaction()
#2 /var/www/myptsd/html/c/library/NixFifty/Tickets/Deferred/Ticket.php(38): XenForo_DataWriter->save()
#3 /var/www/myptsd/html/c/library/XenForo/Model/Deferred.php(295): NixFifty_Tickets_Deferred_Ticket->execute(Array, Array, 7.9392488002777, '')
#4 /var/www/myptsd/html/c/library/XenForo/Model/Deferred.php(429): XenForo_Model_Deferred->runDeferred(Array, 7.9392488002777, '', false)
#5 /var/www/myptsd/html/c/library/XenForo/Model/Deferred.php(374): XenForo_Model_Deferred->_runInternal(Array, 7.9392488002777, '', false)
#6 /var/www/myptsd/html/c/library/XenForo/ViewRenderer/Abstract.php(354): XenForo_Model_Deferred->run(true, 7.9392488002777)
#7 /var/www/myptsd/html/c/library/XenForo/ViewRenderer/HtmlAdmin.php(50): XenForo_ViewRenderer_Abstract::hasManualDeferredToRun()
#8 /var/www/myptsd/html/c/library/XenForo/FrontController.php(617): XenForo_ViewRenderer_HtmlAdmin->renderRedirect(4, 'https://www.myp...', NULL, Array)
#9 /var/www/myptsd/html/c/library/XenForo/FrontController.php(158): XenForo_FrontController->renderView(Object(XenForo_ControllerResponse_Redirect), Object(XenForo_ViewRenderer_HtmlAdmin), Array)
#10 /var/www/myptsd/html/c/admin.php(13): XenForo_FrontController->run()
#11 {main}Request State array(3) {
  ["url"] => string(64) "https://www.myptsd.com/c/admin.php?user-groups/moderating.4/save"
  ["_GET"] => array(1) {
    ["user-groups/moderating_4/save"] => string(0) ""
  }
  ["_POST"] => array(9) {
    ["title"] => string(10) "Moderating"
    ["display_style_priority"] => string(2) "20"
    ["user_title_override"] => string(1) "1"
    ["user_title"] => string(9) "Moderator"
    ["username_css"] => string(15) "color: #E67E22;"
    ["banner_text"] => string(0) ""
    ["banner_css_class"] => string(23) "userBanner bannerHidden"
    ["permissions"] => array(22) {
      ["general"] => array(49) {
        ["view"] => string(5) "allow"
        ["viewNode"] => string(5) "allow"
        ["viewMemberList"] => string(5) "allow"
        ["viewProfile"] => string(5) "allow"
        ["search"] => string(5) "allow"
        ["maxTaggedUsers"] => string(2) "-1"
        ["createTag"] => string(5) "unset"
        ["bypassUserTagLimit"] => string(5) "unset"
        ["editProfile"] => string(5) "allow"
        ["editCustomTitle"] => string(5) "allow"
        ["requireTfa"] => string(5) "allow"
        ["followModerationRules"] => string(5) "allow"
.....
 
Upgraded, but two errors causing issues so no search / rebuild of data:

Code:
Error Info Zend_Db_Statement_Mysqli_Exception: Mysqli prepare error: Unknown column 'ticket.discussion_state' in 'where clause' - library/Zend/Db/Statement/Mysqli.php:77
Generated By: mrsps, 26 minutes ago
Stack Trace #0 /var/www/myptsd/html/c/library/Zend/Db/Statement.php(115): Zend_Db_Statement_Mysqli->_prepare('\n            SE...')
#1 /var/www/myptsd/html/c/library/Zend/Db/Adapter/Mysqli.php(381): Zend_Db_Statement->__construct(Object(Zend_Db_Adapter_Mysqli), '\n            SE...')
#2 /var/www/myptsd/html/c/library/Zend/Db/Adapter/Abstract.php(478): Zend_Db_Adapter_Mysqli->prepare('\n            SE...')
#3 /var/www/myptsd/html/c/library/XenForo/Model.php(219): Zend_Db_Adapter_Abstract->query('\n            SE...', Array, 2)
#4 /var/www/myptsd/html/c/library/NixFifty/Tickets/Model/Ticket.php(179): XenForo_Model->fetchAllKeyed('\n            SE...', 'ticket_id')
#5 /var/www/myptsd/html/c/library/NixFifty/Tickets/Model/Ticket.php(1313): NixFifty_Tickets_Model_Ticket->getActiveTickets(Array)
#6 /var/www/myptsd/html/c/library/NixFifty/Tickets/Listener.php(34): NixFifty_Tickets_Model_Ticket->rebuildTicketCountCache()
#7 /var/www/myptsd/html/c/library/XenForo/CodeEvent.php(58): NixFifty_Tickets_Listener::controllerPreDispatch(Object(Siropu_Chat_ControllerPublic_Chat), 'Refresh', 'Siropu_Chat_Con...')
#8 /var/www/myptsd/html/c/library/XenForo/Controller.php(313): XenForo_CodeEvent::fire('controller_pre_...', Array, 'Siropu_Chat_Con...')
#9 /var/www/myptsd/html/c/library/XenForo/FrontController.php(350): XenForo_Controller->preDispatch('Refresh', 'Siropu_Chat_Con...')
#10 /var/www/myptsd/html/c/library/XenForo/FrontController.php(134): XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))
#11 /var/www/myptsd/html/c/index.php(13): XenForo_FrontController->run()
#12 {main}Request State array(3) {
  ["url"] => string(47) "https://www.myptsd.com/c/index.php?chat/refresh"
  ["_GET"] => array(1) {
    ["chat/refresh"] => string(0) ""
  }
  ["_POST"] => array(16) {
    ["room_id"] => string(1) "0"
    ["user_rooms"] => array(1) {
      [0] => string(6) "218041"
    }
    ["last_id"] => string(6) "218041"
    ["activity_last_id"] => string(1) "0"
    ["activity_last_update"] => string(1) "0"
    ["users_last_update"] => string(1) "0"
    ["inverse"] => string(1) "0"
    ["hide_bot"] => string(1) "0"
    ["no_users"] => string(1) "0"
    ["show_ignored"] => string(1) "0"
    ["all_pages"] => string(1) "0"
    ["loading"] => string(1) "0"
    ["_xfRequestUri"] => string(3) "/c/"
    ["_xfNoRedirect"] => string(1) "1"
    ["_xfToken"] => string(8) "********"
    ["_xfResponseType"] => string(4) "json"
  }
}

And when trying to save permissions:

Code:
Error Info TypeError: Argument 2 passed to NixFifty_Tickets_Model_Ticket::prepareTicketCustomFields() must be of the type array, boolean given, called in /var/www/myptsd/html/c/library/NixFifty/Tickets/DataWriter/Ticket.php on line 696 - library/NixFifty/Tickets/Model/Ticket.php:444
Generated By: anthony, 13 minutes ago
Stack Trace #0 /var/www/myptsd/html/c/library/NixFifty/Tickets/DataWriter/Ticket.php(696): NixFifty_Tickets_Model_Ticket->prepareTicketCustomFields(Array, false)
#1 /var/www/myptsd/html/c/library/XenForo/DataWriter.php(1437): NixFifty_Tickets_DataWriter_Ticket->_postSaveAfterTransaction()
#2 /var/www/myptsd/html/c/library/NixFifty/Tickets/Deferred/Ticket.php(38): XenForo_DataWriter->save()
#3 /var/www/myptsd/html/c/library/XenForo/Model/Deferred.php(295): NixFifty_Tickets_Deferred_Ticket->execute(Array, Array, 7.9392488002777, '')
#4 /var/www/myptsd/html/c/library/XenForo/Model/Deferred.php(429): XenForo_Model_Deferred->runDeferred(Array, 7.9392488002777, '', false)
#5 /var/www/myptsd/html/c/library/XenForo/Model/Deferred.php(374): XenForo_Model_Deferred->_runInternal(Array, 7.9392488002777, '', false)
#6 /var/www/myptsd/html/c/library/XenForo/ViewRenderer/Abstract.php(354): XenForo_Model_Deferred->run(true, 7.9392488002777)
#7 /var/www/myptsd/html/c/library/XenForo/ViewRenderer/HtmlAdmin.php(50): XenForo_ViewRenderer_Abstract::hasManualDeferredToRun()
#8 /var/www/myptsd/html/c/library/XenForo/FrontController.php(617): XenForo_ViewRenderer_HtmlAdmin->renderRedirect(4, 'https://www.myp...', NULL, Array)
#9 /var/www/myptsd/html/c/library/XenForo/FrontController.php(158): XenForo_FrontController->renderView(Object(XenForo_ControllerResponse_Redirect), Object(XenForo_ViewRenderer_HtmlAdmin), Array)
#10 /var/www/myptsd/html/c/admin.php(13): XenForo_FrontController->run()
#11 {main}Request State array(3) {
  ["url"] => string(64) "https://www.myptsd.com/c/admin.php?user-groups/moderating.4/save"
  ["_GET"] => array(1) {
    ["user-groups/moderating_4/save"] => string(0) ""
  }
  ["_POST"] => array(9) {
    ["title"] => string(10) "Moderating"
    ["display_style_priority"] => string(2) "20"
    ["user_title_override"] => string(1) "1"
    ["user_title"] => string(9) "Moderator"
    ["username_css"] => string(15) "color: #E67E22;"
    ["banner_text"] => string(0) ""
    ["banner_css_class"] => string(23) "userBanner bannerHidden"
    ["permissions"] => array(22) {
      ["general"] => array(49) {
        ["view"] => string(5) "allow"
        ["viewNode"] => string(5) "allow"
        ["viewMemberList"] => string(5) "allow"
        ["viewProfile"] => string(5) "allow"
        ["search"] => string(5) "allow"
        ["maxTaggedUsers"] => string(2) "-1"
        ["createTag"] => string(5) "unset"
        ["bypassUserTagLimit"] => string(5) "unset"
        ["editProfile"] => string(5) "allow"
        ["editCustomTitle"] => string(5) "allow"
        ["requireTfa"] => string(5) "allow"
        ["followModerationRules"] => string(5) "allow"
.....
The first one seems like a query that didn't get triggered for some reason. Can you run this SQL query, should iron it out:
SQL:
ALTER TABLE `xf_nixfifty_ticket` ADD COLUMN `discussion_state` ENUM('visible','moderated','deleted') NOT NULL DEFAULT 'visible' AFTER `ticket_locked`

The second one is a little weirder since it implies that you've got some orphaned tickets (i.e. the category was deleted) but if you delete categories from the ACP, a clean up task is carried out to deal with those so not quite sure how that's happened. I'll PM you and see if we can figure out what's going on here.
 
Last edited:
This looks very interesting for future use :)

Q: If you generate a discussion thread via the "Create Thread In Forum" option for a category, are replies to those threads entered as ticket responses? Is the ticket information in the sidebar available anywhere in the thread view?

@ our site just now, we have an option during ticket creation where you can choose to make your ticket private or not. Publicly available tickets can be read & responded to by anyone, whereas private tickets are only viewable by staff and the user who posted it. We achieve this by directing threads posted as a private ticket to a separate forum that has the "Can Read Others' Threads" set to No for all regular users.
The reason why this exists is the fact that we want users to be able to help themselves by searching - I know, it's a rare thing, but any time saved due to the user finding the solution themselves is a net win for us - but on the flipside, if users want the information to be private, it should be.

Suggestion: Would it be possible to get a new user group selection for each Field that determines who can see this field when viewing tickets?
For instance, the "Forum URL" field, some of our clients wish to keep this information private, so even if someone else was to view the ticket, they would not be able to view the "Forum URL" field.

Suggestion: Would it be possible to get a new flag for each ticket that determines whether it's private?
Any search functionality should also take this into consideration, of course.
There would also need to be a separate forum for threads generated by private tickets, so we could maintain the forum permission setup described above.
What would be absolutely magical is if the option for private tickets was a per-category option; i.e. "Feature Request" tickets cannot be made private, but "How Do I?" and "Bug" tickets can be.
If a staff member, or the user, changed the visibility of the ticket (from Private to Public and back again), the auto-generated thread should be moved to the corresponding forum.

Suggestion: For the XF2 version, would it be possible for you to create a Widget for use on the forum home view, above the forum list, that displays all unassigned tickets as well as all tickets assigned to the viewing user?
If the user is not a staff member, this widget should display all open tickets the current user has submitted. Having two separate widgets would also be fine, if the "Outstanding Tickets" widget would be fully invisible for non-staff members.

We would also need the ability to exclude certain categories from this widget/these widgets; e.g. Feature Requests should not be displayed as open support tickets, as they don't need attention in the same way a "Bug" or "Feature Request" ticket needs :)


If these things were to be implemented, this system will be perfect for our use-case and we'll be grabbing the XF2 version at some point in the future when we're ready to upgrade the DBTech site :D



Fillip
 
Last edited:
If you generate a discussion thread via the "Create Thread In Forum" option for a category, are replies to those threads entered as ticket responses? Is the ticket information in the sidebar available anywhere in the thread view?
No to both but they're both pretty straightforward to add and I think they'll both be quite useful additions too so leave it with me. :D

Suggestion: Would it be possible to get a new flag for each ticket that determines whether it's private?
Any search functionality should also take this into consideration, of course.
There would also need to be a separate forum for threads generated by private tickets, so we could maintain the forum permission setup described above.
What would be absolutely magical is if the option for private tickets was a per-category option; i.e. "Feature Request" tickets cannot be made private, but "How Do I?" and "Bug" tickets can be.
If a staff member, or the user, changed the visibility of the ticket (from Private to Public and back again), the auto-generated thread should be moved to the corresponding forum.

Suggestion: For the XF2 version, would it be possible for you to create a Widget for use on the forum home view, above the forum list, that displays all unassigned tickets as well as all tickets assigned to the viewing user?
If the user is not a staff member, this widget should display all open tickets the current user has submitted. Having two separate widgets would also be fine, if the "Outstanding Tickets" widget would be fully invisible for non-staff members.

We would also need the ability to exclude certain categories from this widget/these widgets; e.g. Feature Requests should not be displayed as open support tickets, as they don't need attention in the same way a "Bug" or "Feature Request" ticket needs :)
I can look in to these. I plan on adding widgets to the XF1 version very soon and that'll be mirrored to XF2 as well.
 
Would be kind of cool to extend old licenses a few months or so since this add-on got no love til recently.
I feel the same when it comes to updates etc. when it comes to some of these add-ons. Sometimes you might get one update in that year, and when your subscription runs out, the update you really need or want you can not get cause your subscription has expired. Maybe some guaranteed amount of updates should be included in the deal, so even if your subscription runs out you are still entitled to 1 upgrade etc....
 
NixFifty updated Tickets with a new update entry:

Version 1.5.3

  • Prevent escalations from firing on deleted tickets.
  • Only show discussion tab if the user has permission to view the thread and the node it is in.
  • Fix an issue with the escalator when no ticket priority has been set.
  • Properly save execution settings for escalations.
  • Reduce overhead when escalations are triggered.
  • Other assorted code improvements.
From 1.5.2:
  • Correctly display like summaries on the simplified ticket message layout.
  • Wire up...

Read the rest of this update entry...
 
NixFifty updated Tickets with a new update entry:

Version 1.5.5

It is recommended that you backup a copy of your escalation texts prior to upgrading, just in case.
  • Add some missing phrases.
  • Fix a potential case where a thread could be mistakenly created for a ticket.
  • Remove legacy code that was causing issues with status changes from escalations.
  • Fix an issue where the discussion tab could go missing.
  • Fixed an issue where escalation texts could become mixed up or go missing.
  • Added the ability to filter by any ticket...

Read the rest of this update entry...
 
Add the ability to convert a conversation to a ticket.
Upgraded, but neither can find a permission for it, nor a link or button to convert a conversion to ticket (may I know the right place or process to convert conversation to ticket please?)
 
Upgraded, but neither can find a permission for it, nor a link or button to convert a conversion to ticket (may I know the right place or process to convert conversation to ticket please?)
The permission is under conversation moderator permissions and is called 'Convert conversation to ticket'.
 
Top Bottom