diff --git a/runtime/history/SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1.json b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1.json new file mode 100644 index 00000000..7fd0bcac --- /dev/null +++ b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "gram-support-access-permission-controller-rca", + "started_at_utc": "2026-09-18T04:04:53Z", + "finished_at_utc": "2026-09-18T04:04:57Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386", + "sanitized_output_sha256": "67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "GRAM515R1_SAFE_REPORT={\"classification\":{\"changes_made\":false,\"direct_user_overrides_present\":false,\"group2_entries_4_each\":true,\"group3_full_9_each\":true,\"group4_full_9_each\":true,\"permission_defs_9_each\":true,\"routes_4_each\":true,\"send_attempts\":0,\"site_count_7\":true,\"staff_effective_cache_issues_present\":true,\"undefined_permission_references_present\":false},\"controller_signal_sites\":[{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"codevipe\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"dsmods\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"gamevipe\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"hkmods\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"kingofwolk\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"zakrutim\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"newfi\"}],\"direct_user_override_sites\":[],\"schema_version\":1,\"scope\":\"READ_ONLY_GRAM_SUPPORT_ACCESS_PERMISSION_CONTROLLER_RCA_7OF7\",\"site_count\":7,\"sites\":[{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/codevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"codevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/dsmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"dsmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/gamevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"gamevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/hkmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"hkmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/kingofwolk/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"kingofwolk\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/zakrutim/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"zakrutim\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/newfi/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"newfi\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}}],\"staff_effective_cache_issues\":[{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"codevipe\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"dsmods\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"gamevipe\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"hkmods\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"kingofwolk\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"zakrutim\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"newfi\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}],\"transport\":{\"vm160\":{\"guest_stderr_present\":false,\"inner_rc\":0,\"ok\":true,\"report\":{\"rows\":[{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/codevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"codevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/dsmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"dsmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/gamevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"gamevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/hkmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"hkmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/kingofwolk/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"kingofwolk\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/zakrutim/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"zakrutim\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}}]},\"transport_rc\":0,\"transport_stderr_bytes\":0,\"transport_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"vm210\":{\"guest_stderr_present\":false,\"inner_rc\":0,\"ok\":true,\"report\":{\"rows\":[{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/newfi/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"newfi\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}}]},\"transport_rc\":0,\"transport_stderr_bytes\":0,\"transport_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}},\"undefined_permission_references\":[]}\nGRAM515R1_DECISION=PASS_RCA_EVIDENCE_CAPTURED\nGRAM515R1_NEXT_GATE=REVIEW_EXACT_PERMISSION_OR_CONTROLLER_CAUSE_BEFORE_ANY_CHANGE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1.txt b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1.txt new file mode 100644 index 00000000..22c344d9 --- /dev/null +++ b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1.txt @@ -0,0 +1,36 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=gram-support-access-permission-controller-rca +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386 +SANITIZED_OUTPUT_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386 +OUTPUT_BEGIN +GRAM515R1_SAFE_REPORT={"classification":{"changes_made":false,"direct_user_overrides_present":false,"group2_entries_4_each":true,"group3_full_9_each":true,"group4_full_9_each":true,"permission_defs_9_each":true,"routes_4_each":true,"send_attempts":0,"site_count_7":true,"staff_effective_cache_issues_present":true,"undefined_permission_references_present":false},"controller_signal_sites":[{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"codevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"dsmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"gamevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"hkmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"kingofwolk"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"zakrutim"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"newfi"}],"direct_user_override_sites":[],"schema_version":1,"scope":"READ_ONLY_GRAM_SUPPORT_ACCESS_PERMISSION_CONTROLLER_RCA_7OF7","site_count":7,"sites":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}],"staff_effective_cache_issues":[{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"codevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"dsmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"gamevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"hkmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"kingofwolk","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"zakrutim","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"newfi","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}],"transport":{"vm160":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"vm210":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}},"undefined_permission_references":[]} +GRAM515R1_DECISION=PASS_RCA_EVIDENCE_CAPTURED +GRAM515R1_NEXT_GATE=REVIEW_EXACT_PERMISSION_OR_CONTROLLER_CAUSE_BEFORE_ANY_CHANGE +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 1bb524b1..7fd0bcac 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260918-INFRA-MAIL-POSTBOX-FINAL-7OF7-CANARY-EVENT-RECONCILE-PRESEND-PROVEN-514R2R3", + "command_id": "SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1", "status": "OK", "rc": 0, "host": "pve01", - "mode": "change", - "component": "infra-mail-postbox-final-7of7-canary-event-reconcile-presend-proven", - "started_at_utc": "2026-09-18T03:45:31Z", - "finished_at_utc": "2026-09-18T03:45:32Z", + "mode": "read-only", + "component": "gram-support-access-permission-controller-rca", + "started_at_utc": "2026-09-18T04:04:53Z", + "finished_at_utc": "2026-09-18T04:04:57Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "cf0545627b9a5797b8053b7a511f2ea319d35fabfa0c249c432a58c29130f03b", + "command_sha256": "7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": true, + "change_declared": false, "result_contract_valid": true, - "result_contract_status": "OK", + "result_contract_status": null, "result_contract_error": null, "command_rc": 0, - "changes_made": true, + "changes_made": false, "rollback_started": false, "rollback_restored": null, - "mutation_outcome": "MUTATED", + "mutation_outcome": "NO_MUTATION", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "0672d8f63dd29a034a453d09cf666848a3d6e02bbd7e42e23cc6f16b1b3a5be9", - "sanitized_output_sha256": "0672d8f63dd29a034a453d09cf666848a3d6e02bbd7e42e23cc6f16b1b3a5be9", + "raw_evidence_sha256": "67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386", + "sanitized_output_sha256": "67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "MAIL514R2R3_SAFE_REPORT={\"classification\":{\"delivery_events_7of7\":true,\"no_resend_enforced\":true,\"pre_send_baseline_clean\":true,\"send_attempts_exact_7\":true,\"send_events_7of7\":true,\"send_outcome_uncertain\":false,\"send_successes_exact_7\":true,\"stable_control_plane_anchor\":true,\"unexpected_negative_events\":false,\"ydb_cli_pinned\":true,\"ydb_table_proven\":true},\"cloud_control_plane_mutation\":false,\"command_id\":\"SUPPORT-260918-INFRA-MAIL-POSTBOX-FINAL-7OF7-CANARY-EVENT-RECONCILE-PRESEND-PROVEN-514R2R3\",\"dns_mutation\":false,\"failure_code\":null,\"failure_stage\":\"EVENT_RECONCILIATION\",\"iam_mutation\":false,\"local_temp_cleanup_complete\":true,\"max_send_attempts\":7,\"no_resend_enforced\":true,\"official_simulator\":\"success+tag@simulator.pstbx.ru\",\"policy\":{\"automatic_resend_on_uncertain_outcome\":false,\"bounce_subscription_delay_semantics_anchor\":\"historical_446_452_455_plus_current_514R1R9_live_destination\",\"current_send_delivery_event_path_proven_by_this_canary\":true,\"newsletter_one_click_unsubscribe_global_transactional_path_enabled\":false,\"postbox_global_suppression_provider_managed\":true,\"presend_authority\":\"514R2P2_PASS_FULL_PATH_ZERO_FUTURE_RECIPIENT_ROWS\",\"xenforo_feedback_auto_mutations_enabled\":false},\"production_postbox_configuration_mutation\":false,\"schema_version\":1,\"scope\":\"FINAL_BOUNDED_7OF7_POSTBOX_SIMULATOR_SEND_PLUS_YDB_SEND_DELIVERY_RECONCILIATION_PRESEND_PROVEN\",\"send_attempts\":7,\"send_outcome_uncertain\":false,\"send_remote_sha256\":\"bb7e742fa6c2394fdae18aac19a60975e9e9f7708b113e491df80fa09fdf65d4\",\"send_successes\":7,\"simulator_real_recipient_delivery\":false,\"sites\":[{\"domain\":\"codevipe.ru\",\"marker\":\"W2-260918-514R2R3-CODEVIPE\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+codevipe-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"codevipe\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"2473cfe550db16914dd749150dc10fbde5c8245c44576725c3efdb94fad06b2b\",\"2aff46577885799a15d540b41681add6b9b603f1c397d48fc77e787016be7e46\",\"5a34d3552a0e0949350fb6acf60a60691d5dbad8dfde8a4eb76f1fa0b9cda311\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false},{\"domain\":\"dsmods.ru\",\"marker\":\"W2-260918-514R2R3-DSMODS\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+dsmods-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"dsmods\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"5c65517f4c5bc5866f42c9d336b480969914071c9a4e8bf3196d06b28ff3546a\",\"6b698e4df82a04e9e0a2d70239241401fa75d6f0f024ebee0d15de4ac472361e\",\"fd9ff107194d1a99d7bd1e66380f6830311c75cac3225476b24009090c624080\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false},{\"domain\":\"gamevipe.ru\",\"marker\":\"W2-260918-514R2R3-GAMEVIPE\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+gamevipe-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"gamevipe\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"0c63e75b896f88be9441b1815035054e922aa4e44d0606eab951d98c6db93a80\",\"7127569b0321b70a08b9b190fb44d07ff3f29b87a83ef09848bfd6609c5293c3\",\"8e7793ff33d874b154269792abf15a272238356c183eff6d917dedc5ab0c97b9\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false},{\"domain\":\"hkmods.ru\",\"marker\":\"W2-260918-514R2R3-HKMODS\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+hkmods-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"hkmods\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"3ab31241fc11aa56c74f29506313113cd6520f6bc631f215d3e198661d64ee5e\",\"a8fda4783781bfdf59502d25e48eb0e10fd8ce9e6cf0e114d975b6421e8cf793\",\"da0e82488157f17b2c8ecc72ec4d5c618a4212b4b54429c02eb697d5110e9c0a\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false},{\"domain\":\"kingofwolk.ru\",\"marker\":\"W2-260918-514R2R3-KINGOFWOLK\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+kingofwolk-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"kingofwolk\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"54615cf24fd746b6ad35555c058b3e6f14700e4ed1d46b3647cb3afd411cdfd0\",\"86c615beaf68a21683b15885821b2f40305d78027ebb30f2d5220cb2788cb502\",\"96bbdcc6f3ea0c59e1832feb5b777517dc1cdea58e438e9a22dbdcef9db48391\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false},{\"domain\":\"zakrutim.ru\",\"marker\":\"W2-260918-514R2R3-ZAKRUTIM\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+zakrutim-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"zakrutim\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"3a3052bd38c5fac4a570d88f1deaeed2314fea755df4b8df85b9c4ff531b6219\",\"56b84e44f808dda108f2ec3a42cf4606c5007a6286c8075032555701add59b67\",\"7b43579df56a3624eb82ca595bde68a20e052df0fc3e2dff22683d189bb917af\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false},{\"domain\":\"newfi.ru\",\"marker\":\"W2-260918-514R2R3-NEWFI\",\"queued_id_observed\":false,\"queued_id_sha256\":null,\"recipient\":\"success+newfi-260918-514r2r3@simulator.pstbx.ru\",\"send_attempted\":true,\"send_rc\":0,\"send_success\":true,\"slug\":\"newfi\",\"wrapper_sha_match\":true,\"ydb_delivery_event\":true,\"ydb_event_types\":[\"DELIVERY\",\"SEND\"],\"ydb_id_hashes\":[\"48e2f22304a3333090a1d240a3a7cb56e415f66f95ea4f234390a270e14745a5\",\"931fad04be886b620104e849e7e69336c29a73ab91cbd152b922b8a2cc04d277\",\"f3a62a661986de4ef5b1267b70b5fb0c767e4f0d469adc60fac4297ee3d01ee1\"],\"ydb_matched_rows\":2,\"ydb_send_event\":true,\"ydb_unexpected_negative\":false}],\"smtp_credentials_touched\":false,\"stable_control_plane\":{\"anchor_ok\":true,\"database_id_sha256\":\"881913df70cf2918f09dacf3c12962cc25fee70126f4bde8e68524a45727fff3\",\"database_name\":\"postbox-feedback-ydb\",\"database_path_sha256\":\"57271235298bb8ab7e9576162a546dd839c7cbdc14a9c4f12ed230215f187a86\",\"function_id_sha256\":\"739ab8f5291e67867d60e19618eb04264b4133dfa143bf1f1ce18214e2a03df9\",\"trigger_id_sha256\":\"a45d7ef62d6598c16fe8d8a93a433e80ca05ab2984ed89e7dfebc37889f9a0bf\"},\"xenforo_mutation\":false,\"ydb_cli\":{\"actual_sha256\":\"f7ab3e098fca2b12d5fb88b54d08c271857e3d00bdb99f54a978aa22a581a994\",\"expected_sha256\":\"f7ab3e098fca2b12d5fb88b54d08c271857e3d00bdb99f54a978aa22a581a994\",\"historical_version\":\"2.31.0\",\"official_url\":\"storage.yandexcloud.net/yandexcloud-ydb/release/2.31.0/windows/amd64/ydb.exe\",\"pin_basis\":\"EXACT_SHA256_HISTORICAL_440R1_AND_514R2P2\",\"pinned_ok\":true},\"ydb_feedback_table\":{\"baseline_clean\":true,\"baseline_row_count\":14,\"discovery_score\":64,\"expected_presend_path_sha256\":\"a118ff4233c3fa82ff269d37a066334d42ab4ad52771962bf51c7a54fac33594\",\"final_row_count\":28,\"path_sha256\":\"a118ff4233c3fa82ff269d37a066334d42ab4ad52771962bf51c7a54fac33594\",\"poll_complete\":true,\"poll_count\":2,\"proven\":true}}\nMAIL514R2R3_DECISION=PASS_FINAL_CURRENT_7OF7_POSTBOX_SEND_DELIVERY_EVENT_RECONCILIATION\nMAIL514R2R3_NEXT_GATE=PROJECT_COMPLETE_CURRENT_POSTBOX_TRANSPORT_AND_FEEDBACK_PLANE_PROVEN_APP_ACTION_BRIDGE_REMAINS_POLICY_DEFERRED\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-INFRA-MAIL-POSTBOX-FINAL-7OF7-CANARY-EVENT-RECONCILE-PRESEND-PROVEN-514R2R3\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "GRAM515R1_SAFE_REPORT={\"classification\":{\"changes_made\":false,\"direct_user_overrides_present\":false,\"group2_entries_4_each\":true,\"group3_full_9_each\":true,\"group4_full_9_each\":true,\"permission_defs_9_each\":true,\"routes_4_each\":true,\"send_attempts\":0,\"site_count_7\":true,\"staff_effective_cache_issues_present\":true,\"undefined_permission_references_present\":false},\"controller_signal_sites\":[{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"codevipe\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"dsmods\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"gamevipe\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"hkmods\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"kingofwolk\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"zakrutim\"},{\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"slug\":\"newfi\"}],\"direct_user_override_sites\":[],\"schema_version\":1,\"scope\":\"READ_ONLY_GRAM_SUPPORT_ACCESS_PERMISSION_CONTROLLER_RCA_7OF7\",\"site_count\":7,\"sites\":[{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/codevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"codevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/dsmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"dsmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/gamevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"gamevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/hkmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"hkmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/kingofwolk/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"kingofwolk\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/zakrutim/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"zakrutim\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/newfi/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"newfi\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}}],\"staff_effective_cache_issues\":[{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"codevipe\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"dsmods\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"gamevipe\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"hkmods\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"kingofwolk\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"zakrutim\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"},{\"effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"falseish_permissions\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"view\",\"viewAll\",\"viewOwn\",\"viewTechnicalContext\"],\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"slug\":\"newfi\",\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}],\"transport\":{\"vm160\":{\"guest_stderr_present\":false,\"inner_rc\":0,\"ok\":true,\"report\":{\"rows\":[{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/codevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"codevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/dsmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"dsmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/gamevipe/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"gamevipe\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/hkmods/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"hkmods\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/kingofwolk/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"kingofwolk\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}},{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/zakrutim/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"zakrutim\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}}]},\"transport_rc\":0,\"transport_stderr_bytes\":0,\"transport_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"vm210\":{\"guest_stderr_present\":false,\"inner_rc\":0,\"ok\":true,\"report\":{\"rows\":[{\"addon_present\":true,\"addon_tree_sha256\":\"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7\",\"db\":{\"db_ok\":true,\"direct_override_summary\":[],\"errors\":[],\"group_entries\":[{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":2,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":3,\"user_id\":0},{\"permission_id\":\"assign\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"create\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"internalNotes\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"manage\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"replyOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"view\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewAll\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewOwn\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0},{\"permission_id\":\"viewTechnicalContext\",\"permission_value\":\"allow\",\"permission_value_int\":0,\"user_group_id\":4,\"user_id\":0}],\"permissions\":[{\"depend_permission_id\":\"\",\"display_order\":60,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":20,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":80,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":50,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":40,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":10,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":70,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":30,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"depend_permission_id\":\"\",\"display_order\":90,\"interface_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"routes\":[{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"}],\"staff_accounts\":[{\"gramSupport_effective\":{\"assign\":null,\"create\":null,\"internalNotes\":null,\"manage\":null,\"replyOwn\":null,\"view\":null,\"viewAll\":null,\"viewOwn\":null,\"viewTechnicalContext\":null},\"gramSupport_group_present_in_cache\":false,\"in_admin_group_3\":true,\"in_moderator_group_4\":true,\"is_admin\":true,\"is_moderator\":true,\"permission_combination_id_sha256\":\"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683\",\"primary_group_id\":2,\"secondary_group_ids\":[3,4],\"user_id_sha256\":\"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\"}]},\"permissions_xml\":[{},{\"display_order\":\"10\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"view\",\"permission_type\":\"flag\"},{\"display_order\":\"20\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"create\",\"permission_type\":\"flag\"},{\"display_order\":\"30\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"40\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"replyOwn\",\"permission_type\":\"flag\"},{\"display_order\":\"50\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"manage\",\"permission_type\":\"flag\"},{\"display_order\":\"60\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"assign\",\"permission_type\":\"flag\"},{\"display_order\":\"70\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewAll\",\"permission_type\":\"flag\"},{\"display_order\":\"80\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"internalNotes\",\"permission_type\":\"flag\"},{\"display_order\":\"90\",\"interface_group_id\":\"gramSupport\",\"permission_group_id\":\"gramSupport\",\"permission_id\":\"viewTechnicalContext\",\"permission_type\":\"flag\"}],\"php_audit_rc\":0,\"php_audit_stderr_bytes\":0,\"php_audit_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"public\":\"/var/www/forums/newfi/public\",\"public_present\":true,\"routes_xml\":[{},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Support\",\"format\":\"\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:AccountSupport\",\"format\":\"support\",\"route_prefix\":\"account\",\"route_type\":\"public\",\"sub_name\":\"support\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:StaffSupport\",\"format\":\"staff\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"staff\"},{\"action_prefix\":\"\",\"context\":\"\",\"controller\":\"Gram\\\\Support:Pwa\",\"format\":\"service-worker\",\"route_prefix\":\"support\",\"route_type\":\"public\",\"sub_name\":\"service-worker\"}],\"slug\":\"newfi\",\"source_scan\":{\"permission_refs\":[\"assign\",\"create\",\"internalNotes\",\"manage\",\"replyOwn\",\"viewAll\",\"viewOwn\"],\"php_file_count\":39,\"signal_lines\":[{\"line\":30,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"&& $visitor->hasPermission('gramSupport', 'internalNotes')\"},{\"line\":32,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"$visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":33,\"path\":\"Attachment/TicketHandler.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Entity/Message.php\",\"text\":\"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],\"},{\"line\":11,\"path\":\"Listener/SourcePageContext.php\",\"text\":\"private const SESSION_KEY = 'gramSupportSourceContext';\"},{\"line\":27,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')\"},{\"line\":28,\"path\":\"Notification/AlertConsumer.php\",\"text\":\"|| $recipient->hasPermission('gramSupport', 'manage');\"},{\"line\":58,\"path\":\"Notification/Dispatcher.php\",\"text\":\"if (!$staff->hasPermission('gramSupport', 'viewAll')\"},{\"line\":59,\"path\":\"Notification/Dispatcher.php\",\"text\":\"&& !$staff->hasPermission('gramSupport', 'manage'))\"},{\"line\":12,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":14,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":31,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))\"},{\"line\":33,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":41,\"path\":\"Pub/Controller/AccountSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":12,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"|| (!$visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":13,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"&& !$visitor->hasPermission('gramSupport', 'viewAll')))\"},{\"line\":15,\"path\":\"Pub/Controller/Pwa.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":7,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"use Gram\\\\Support\\\\Service\\\\Ticket\\\\StaffUpdate;\"},{\"line\":17,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"? $visitor->hasPermission('gramSupport', 'manage')\"},{\"line\":18,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\": ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":19,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'));\"},{\"line\":23,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":71,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !\\\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))\"},{\"line\":73,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":99,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"/** @var StaffUpdate $staffUpdate */\"},{\"line\":100,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate = $this->service(StaffUpdate::class);\"},{\"line\":101,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);\"},{\"line\":105,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"if (!\\\\XF::visitor()->hasPermission('gramSupport', 'assign'))\"},{\"line\":107,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"return $this->noPermission();\"},{\"line\":112,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"|| (!$assigned->hasPermission('gramSupport', 'viewAll')\"},{\"line\":113,\"path\":\"Pub/Controller/StaffSupport.php\",\"text\":\"&& !$assigned->hasPermission('gramSupport', 'manage')))\"},{\"line\":31,\"path\":\"Pub/Controller/Support.php\",\"text\":\"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))\"},{\"line\":33,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":198,\"path\":\"Pub/Controller/Support.php\",\"text\":\"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))\"},{\"line\":200,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":205,\"path\":\"Pub/Controller/Support.php\",\"text\":\"return $this->noPermission();\"},{\"line\":231,\"path\":\"Pub/Controller/Support.php\",\"text\":\"throw $this->exception($this->noPermission());\"},{\"line\":9,\"path\":\"Security/GuestTicketSession.php\",\"text\":\"private const KEY = 'gramSupportGuestTickets';\"},{\"line\":12,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'viewAll')\"},{\"line\":13,\"path\":\"Security/TicketAccess.php\",\"text\":\"|| $visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":22,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'viewOwn');\"},{\"line\":35,\"path\":\"Security/TicketAccess.php\",\"text\":\"if ($visitor->hasPermission('gramSupport', 'manage'))\"},{\"line\":44,\"path\":\"Security/TicketAccess.php\",\"text\":\"return $visitor->hasPermission('gramSupport', 'replyOwn');\"},{\"line\":101,\"path\":\"Service/Ticket/Creator.php\",\"text\":\"$message->is_staff = 0;\"},{\"line\":34,\"path\":\"Service/Ticket/Reply.php\",\"text\":\"$message->is_staff = $isStaff ? 1 : 0;\"},{\"line\":7,\"path\":\"Service/Ticket/StaffUpdate.php\",\"text\":\"class StaffUpdate extends AbstractService\"},{\"line\":48,\"path\":\"Setup.php\",\"text\":\"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);\"},{\"line\":9,\"path\":\"Util/SiteConfig.php\",\"text\":\"$siteId = trim((string)\\\\XF::options()->gramSupportSiteId);\"},{\"line\":19,\"path\":\"Util/SiteConfig.php\",\"text\":\"$days = max(1, min(365, (int)\\\\XF::options()->gramSupportGuestTokenTtlDays));\"},{\"line\":25,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(1, min(100, (int)\\\\XF::options()->gramSupportGuestRateLimitCount));\"},{\"line\":30,\"path\":\"Util/SiteConfig.php\",\"text\":\"return max(60, min(86400, (int)\\\\XF::options()->gramSupportGuestRateLimitWindowSeconds));\"}],\"source_present\":true}}]},\"transport_rc\":0,\"transport_stderr_bytes\":0,\"transport_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}},\"undefined_permission_references\":[]}\nGRAM515R1_DECISION=PASS_RCA_EVIDENCE_CAPTURED\nGRAM515R1_NEXT_GATE=REVIEW_EXACT_PERMISSION_OR_CONTROLLER_CAUSE_BEFORE_ANY_CHANGE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index a5d1d288..22c344d9 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,36 +1,36 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260918-INFRA-MAIL-POSTBOX-FINAL-7OF7-CANARY-EVENT-RECONCILE-PRESEND-PROVEN-514R2R3 +COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1 STATUS=OK RC=0 HOST=pve01 -MODE=change -COMPONENT=infra-mail-postbox-final-7of7-canary-event-reconcile-presend-proven +MODE=read-only +COMPONENT=gram-support-access-permission-controller-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=cf0545627b9a5797b8053b7a511f2ea319d35fabfa0c249c432a58c29130f03b +COMMAND_SHA256=7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=true +CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=OK +RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE COMMAND_RC=0 -CHANGES_MADE=true +CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null -MUTATION_OUTCOME=MUTATED +MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=0672d8f63dd29a034a453d09cf666848a3d6e02bbd7e42e23cc6f16b1b3a5be9 -SANITIZED_OUTPUT_SHA256=0672d8f63dd29a034a453d09cf666848a3d6e02bbd7e42e23cc6f16b1b3a5be9 +RAW_EVIDENCE_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386 +SANITIZED_OUTPUT_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386 OUTPUT_BEGIN -MAIL514R2R3_SAFE_REPORT={"classification":{"delivery_events_7of7":true,"no_resend_enforced":true,"pre_send_baseline_clean":true,"send_attempts_exact_7":true,"send_events_7of7":true,"send_outcome_uncertain":false,"send_successes_exact_7":true,"stable_control_plane_anchor":true,"unexpected_negative_events":false,"ydb_cli_pinned":true,"ydb_table_proven":true},"cloud_control_plane_mutation":false,"command_id":"SUPPORT-260918-INFRA-MAIL-POSTBOX-FINAL-7OF7-CANARY-EVENT-RECONCILE-PRESEND-PROVEN-514R2R3","dns_mutation":false,"failure_code":null,"failure_stage":"EVENT_RECONCILIATION","iam_mutation":false,"local_temp_cleanup_complete":true,"max_send_attempts":7,"no_resend_enforced":true,"official_simulator":"success+tag@simulator.pstbx.ru","policy":{"automatic_resend_on_uncertain_outcome":false,"bounce_subscription_delay_semantics_anchor":"historical_446_452_455_plus_current_514R1R9_live_destination","current_send_delivery_event_path_proven_by_this_canary":true,"newsletter_one_click_unsubscribe_global_transactional_path_enabled":false,"postbox_global_suppression_provider_managed":true,"presend_authority":"514R2P2_PASS_FULL_PATH_ZERO_FUTURE_RECIPIENT_ROWS","xenforo_feedback_auto_mutations_enabled":false},"production_postbox_configuration_mutation":false,"schema_version":1,"scope":"FINAL_BOUNDED_7OF7_POSTBOX_SIMULATOR_SEND_PLUS_YDB_SEND_DELIVERY_RECONCILIATION_PRESEND_PROVEN","send_attempts":7,"send_outcome_uncertain":false,"send_remote_sha256":"bb7e742fa6c2394fdae18aac19a60975e9e9f7708b113e491df80fa09fdf65d4","send_successes":7,"simulator_real_recipient_delivery":false,"sites":[{"domain":"codevipe.ru","marker":"W2-260918-514R2R3-CODEVIPE","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+codevipe-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"codevipe","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["2473cfe550db16914dd749150dc10fbde5c8245c44576725c3efdb94fad06b2b","2aff46577885799a15d540b41681add6b9b603f1c397d48fc77e787016be7e46","5a34d3552a0e0949350fb6acf60a60691d5dbad8dfde8a4eb76f1fa0b9cda311"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false},{"domain":"dsmods.ru","marker":"W2-260918-514R2R3-DSMODS","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+dsmods-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"dsmods","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["5c65517f4c5bc5866f42c9d336b480969914071c9a4e8bf3196d06b28ff3546a","6b698e4df82a04e9e0a2d70239241401fa75d6f0f024ebee0d15de4ac472361e","fd9ff107194d1a99d7bd1e66380f6830311c75cac3225476b24009090c624080"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false},{"domain":"gamevipe.ru","marker":"W2-260918-514R2R3-GAMEVIPE","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+gamevipe-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"gamevipe","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["0c63e75b896f88be9441b1815035054e922aa4e44d0606eab951d98c6db93a80","7127569b0321b70a08b9b190fb44d07ff3f29b87a83ef09848bfd6609c5293c3","8e7793ff33d874b154269792abf15a272238356c183eff6d917dedc5ab0c97b9"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false},{"domain":"hkmods.ru","marker":"W2-260918-514R2R3-HKMODS","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+hkmods-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"hkmods","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["3ab31241fc11aa56c74f29506313113cd6520f6bc631f215d3e198661d64ee5e","a8fda4783781bfdf59502d25e48eb0e10fd8ce9e6cf0e114d975b6421e8cf793","da0e82488157f17b2c8ecc72ec4d5c618a4212b4b54429c02eb697d5110e9c0a"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false},{"domain":"kingofwolk.ru","marker":"W2-260918-514R2R3-KINGOFWOLK","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+kingofwolk-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"kingofwolk","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["54615cf24fd746b6ad35555c058b3e6f14700e4ed1d46b3647cb3afd411cdfd0","86c615beaf68a21683b15885821b2f40305d78027ebb30f2d5220cb2788cb502","96bbdcc6f3ea0c59e1832feb5b777517dc1cdea58e438e9a22dbdcef9db48391"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false},{"domain":"zakrutim.ru","marker":"W2-260918-514R2R3-ZAKRUTIM","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+zakrutim-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"zakrutim","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["3a3052bd38c5fac4a570d88f1deaeed2314fea755df4b8df85b9c4ff531b6219","56b84e44f808dda108f2ec3a42cf4606c5007a6286c8075032555701add59b67","7b43579df56a3624eb82ca595bde68a20e052df0fc3e2dff22683d189bb917af"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false},{"domain":"newfi.ru","marker":"W2-260918-514R2R3-NEWFI","queued_id_observed":false,"queued_id_sha256":null,"recipient":"success+newfi-260918-514r2r3@simulator.pstbx.ru","send_attempted":true,"send_rc":0,"send_success":true,"slug":"newfi","wrapper_sha_match":true,"ydb_delivery_event":true,"ydb_event_types":["DELIVERY","SEND"],"ydb_id_hashes":["48e2f22304a3333090a1d240a3a7cb56e415f66f95ea4f234390a270e14745a5","931fad04be886b620104e849e7e69336c29a73ab91cbd152b922b8a2cc04d277","f3a62a661986de4ef5b1267b70b5fb0c767e4f0d469adc60fac4297ee3d01ee1"],"ydb_matched_rows":2,"ydb_send_event":true,"ydb_unexpected_negative":false}],"smtp_credentials_touched":false,"stable_control_plane":{"anchor_ok":true,"database_id_sha256":"881913df70cf2918f09dacf3c12962cc25fee70126f4bde8e68524a45727fff3","database_name":"postbox-feedback-ydb","database_path_sha256":"57271235298bb8ab7e9576162a546dd839c7cbdc14a9c4f12ed230215f187a86","function_id_sha256":"739ab8f5291e67867d60e19618eb04264b4133dfa143bf1f1ce18214e2a03df9","trigger_id_sha256":"a45d7ef62d6598c16fe8d8a93a433e80ca05ab2984ed89e7dfebc37889f9a0bf"},"xenforo_mutation":false,"ydb_cli":{"actual_sha256":"f7ab3e098fca2b12d5fb88b54d08c271857e3d00bdb99f54a978aa22a581a994","expected_sha256":"f7ab3e098fca2b12d5fb88b54d08c271857e3d00bdb99f54a978aa22a581a994","historical_version":"2.31.0","official_url":"storage.yandexcloud.net/yandexcloud-ydb/release/2.31.0/windows/amd64/ydb.exe","pin_basis":"EXACT_SHA256_HISTORICAL_440R1_AND_514R2P2","pinned_ok":true},"ydb_feedback_table":{"baseline_clean":true,"baseline_row_count":14,"discovery_score":64,"expected_presend_path_sha256":"a118ff4233c3fa82ff269d37a066334d42ab4ad52771962bf51c7a54fac33594","final_row_count":28,"path_sha256":"a118ff4233c3fa82ff269d37a066334d42ab4ad52771962bf51c7a54fac33594","poll_complete":true,"poll_count":2,"proven":true}} -MAIL514R2R3_DECISION=PASS_FINAL_CURRENT_7OF7_POSTBOX_SEND_DELIVERY_EVENT_RECONCILIATION -MAIL514R2R3_NEXT_GATE=PROJECT_COMPLETE_CURRENT_POSTBOX_TRANSPORT_AND_FEEDBACK_PLANE_PROVEN_APP_ACTION_BRIDGE_REMAINS_POLICY_DEFERRED -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-INFRA-MAIL-POSTBOX-FINAL-7OF7-CANARY-EVENT-RECONCILE-PRESEND-PROVEN-514R2R3","status":"OK","changes_made":true,"rollback_started":false,"rollback_restored":null} +GRAM515R1_SAFE_REPORT={"classification":{"changes_made":false,"direct_user_overrides_present":false,"group2_entries_4_each":true,"group3_full_9_each":true,"group4_full_9_each":true,"permission_defs_9_each":true,"routes_4_each":true,"send_attempts":0,"site_count_7":true,"staff_effective_cache_issues_present":true,"undefined_permission_references_present":false},"controller_signal_sites":[{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"codevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"dsmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"gamevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"hkmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"kingofwolk"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"zakrutim"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"newfi"}],"direct_user_override_sites":[],"schema_version":1,"scope":"READ_ONLY_GRAM_SUPPORT_ACCESS_PERMISSION_CONTROLLER_RCA_7OF7","site_count":7,"sites":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}],"staff_effective_cache_issues":[{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"codevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"dsmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"gamevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"hkmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"kingofwolk","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"zakrutim","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"newfi","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}],"transport":{"vm160":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"vm210":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}},"undefined_permission_references":[]} +GRAM515R1_DECISION=PASS_RCA_EVIDENCE_CAPTURED +GRAM515R1_NEXT_GATE=REVIEW_EXACT_PERMISSION_OR_CONTROLLER_CAUSE_BEFORE_ANY_CHANGE +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END