39 lines
251 KiB
JSON
39 lines
251 KiB
JSON
{
|
|
"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"
|
|
}
|