From 0212fda6634ba2e89e459fd2f8833ea89ba55287 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Fri, 18 Sep 2026 04:15:42 +0000 Subject: [PATCH] runtime: publish SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2 --- ...UPPORT-PERMISSION-CACHE-REBUILD-515R2.json | 38 +++++++++++++++++++ ...SUPPORT-PERMISSION-CACHE-REBUILD-515R2.txt | 36 ++++++++++++++++++ runtime/latest.json | 32 ++++++++-------- runtime/latest.txt | 34 ++++++++--------- 4 files changed, 107 insertions(+), 33 deletions(-) create mode 100644 runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.json create mode 100644 runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.txt diff --git a/runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.json b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.json new file mode 100644 index 00000000..a2fa5495 --- /dev/null +++ b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2", + "status": "FAIL", + "rc": 3, + "host": "pve01", + "mode": "change", + "component": "gram-support-permission-cache-rebuild", + "started_at_utc": "2026-09-18T04:15:35Z", + "finished_at_utc": "2026-09-18T04:15:41Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "36cdaea6a355cd3f64851595fd1f340301d0fc23c7023e5cef97f06717525fb7", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": true, + "result_contract_valid": true, + "result_contract_status": "FAIL", + "result_contract_error": null, + "command_rc": 3, + "changes_made": true, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "MUTATED", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1", + "sanitized_output_sha256": "faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "GRAM515R2_SAFE_REPORT={\"classification\":{\"addon_files_unchanged\":true,\"all_site_rc0\":false,\"all_staff_all_9_true_after\":false,\"changes_made\":true,\"forensic_prestate_backups_7of7\":false,\"permission_jobs_clear_7of7\":false,\"send_attempts\":0,\"site_count_7\":false,\"source_permission_entries_unchanged\":true,\"staff_route_exact_7of7\":false,\"xenforo_native_permission_rebuild_used\":true},\"mutation_started\":true,\"preflight_7of7\":true,\"rollback_policy\":\"NOT_APPLICABLE_DERIVED_PERMISSION_CACHE_REBUILD_AUTHORITATIVE_ENTRIES_UNCHANGED\",\"schema_version\":1,\"scope\":\"GRAM_SUPPORT_PERMISSION_CACHE_REBUILD_7OF7\",\"sites\":[{\"all_staff_all_9_true_after\":false,\"backup_path_sha256\":\"f87a51288c50c98e9ab4b2530cf736931f3d216967482444e56dd11c73a02c94\",\"backup_written\":true,\"cache_changed\":true,\"direct_user_override_count\":0,\"error\":\"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE\",\"group_counts\":{\"2\":4,\"3\":9,\"4\":9},\"ok\":false,\"permission_job_loops\":2,\"permission_job_remaining\":0,\"post_cache_hash\":\"2a3d979f27cb5d88cd448bd99781ed8d64d3b10ab3f5e6cefaff1dff2eb7376d\",\"pre_cache_hash\":\"ed09d00f986eecf0157e4321f11a90294bc49048c038a78370cc0626349840f4\",\"rc\":3,\"slug\":\"codevipe\",\"staff_accounts_after\":[{\"all_9_true\":false,\"effective\":{\"assign\":false,\"create\":false,\"internalNotes\":false,\"manage\":false,\"replyOwn\":false,\"view\":false,\"viewAll\":false,\"viewOwn\":false,\"viewTechnicalContext\":false},\"gramSupport_group_present\":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\"}],\"staff_route_exact\":true},{\"all_staff_all_9_true_after\":false,\"backup_path_sha256\":\"6c0d51977e43977883e46587b6600f56107b8bac33cee770a8de6cfc9207d445\",\"backup_written\":true,\"cache_changed\":true,\"direct_user_override_count\":0,\"error\":\"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE\",\"group_counts\":{\"2\":4,\"3\":9,\"4\":9},\"ok\":false,\"permission_job_loops\":2,\"permission_job_remaining\":0,\"post_cache_hash\":\"06ddbbfc02aa65b5cb3706120a9e342783821bd767cb17bb9683ef52274dc30d\",\"pre_cache_hash\":\"2763b3d9a0f04f5e045d361426c6a21438570ec1d6c71aca6bc34474c831debc\",\"rc\":3,\"slug\":\"newfi\",\"staff_accounts_after\":[{\"all_9_true\":false,\"effective\":{\"assign\":false,\"create\":false,\"internalNotes\":false,\"manage\":false,\"replyOwn\":false,\"view\":false,\"viewAll\":false,\"viewOwn\":false,\"viewTechnicalContext\":false},\"gramSupport_group_present\":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\"}],\"staff_route_exact\":true}],\"staff_url_pattern\":\"/support/staff/\"}\nGRAM515R2_DECISION=HOLD_PERMISSION_CACHE_REBUILD_INCOMPLETE\nGRAM515R2_NEXT_GATE=STOP_REVIEW_DO_NOT_REAPPLY_PERMISSIONS\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2\",\"status\":\"FAIL\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.txt b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.txt new file mode 100644 index 00000000..e7c37c23 --- /dev/null +++ b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2.txt @@ -0,0 +1,36 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2 +STATUS=FAIL +RC=3 +HOST=pve01 +MODE=change +COMPONENT=gram-support-permission-cache-rebuild +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=36cdaea6a355cd3f64851595fd1f340301d0fc23c7023e5cef97f06717525fb7 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=true +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=FAIL +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=3 +CHANGES_MADE=true +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=MUTATED +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1 +SANITIZED_OUTPUT_SHA256=faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1 +OUTPUT_BEGIN +GRAM515R2_SAFE_REPORT={"classification":{"addon_files_unchanged":true,"all_site_rc0":false,"all_staff_all_9_true_after":false,"changes_made":true,"forensic_prestate_backups_7of7":false,"permission_jobs_clear_7of7":false,"send_attempts":0,"site_count_7":false,"source_permission_entries_unchanged":true,"staff_route_exact_7of7":false,"xenforo_native_permission_rebuild_used":true},"mutation_started":true,"preflight_7of7":true,"rollback_policy":"NOT_APPLICABLE_DERIVED_PERMISSION_CACHE_REBUILD_AUTHORITATIVE_ENTRIES_UNCHANGED","schema_version":1,"scope":"GRAM_SUPPORT_PERMISSION_CACHE_REBUILD_7OF7","sites":[{"all_staff_all_9_true_after":false,"backup_path_sha256":"f87a51288c50c98e9ab4b2530cf736931f3d216967482444e56dd11c73a02c94","backup_written":true,"cache_changed":true,"direct_user_override_count":0,"error":"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE","group_counts":{"2":4,"3":9,"4":9},"ok":false,"permission_job_loops":2,"permission_job_remaining":0,"post_cache_hash":"2a3d979f27cb5d88cd448bd99781ed8d64d3b10ab3f5e6cefaff1dff2eb7376d","pre_cache_hash":"ed09d00f986eecf0157e4321f11a90294bc49048c038a78370cc0626349840f4","rc":3,"slug":"codevipe","staff_accounts_after":[{"all_9_true":false,"effective":{"assign":false,"create":false,"internalNotes":false,"manage":false,"replyOwn":false,"view":false,"viewAll":false,"viewOwn":false,"viewTechnicalContext":false},"gramSupport_group_present":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"}],"staff_route_exact":true},{"all_staff_all_9_true_after":false,"backup_path_sha256":"6c0d51977e43977883e46587b6600f56107b8bac33cee770a8de6cfc9207d445","backup_written":true,"cache_changed":true,"direct_user_override_count":0,"error":"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE","group_counts":{"2":4,"3":9,"4":9},"ok":false,"permission_job_loops":2,"permission_job_remaining":0,"post_cache_hash":"06ddbbfc02aa65b5cb3706120a9e342783821bd767cb17bb9683ef52274dc30d","pre_cache_hash":"2763b3d9a0f04f5e045d361426c6a21438570ec1d6c71aca6bc34474c831debc","rc":3,"slug":"newfi","staff_accounts_after":[{"all_9_true":false,"effective":{"assign":false,"create":false,"internalNotes":false,"manage":false,"replyOwn":false,"view":false,"viewAll":false,"viewOwn":false,"viewTechnicalContext":false},"gramSupport_group_present":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"}],"staff_route_exact":true}],"staff_url_pattern":"/support/staff/"} +GRAM515R2_DECISION=HOLD_PERMISSION_CACHE_REBUILD_INCOMPLETE +GRAM515R2_NEXT_GATE=STOP_REVIEW_DO_NOT_REAPPLY_PERMISSIONS +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2","status":"FAIL","changes_made":true,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 7fd0bcac..a2fa5495 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1", - "status": "OK", - "rc": 0, + "command_id": "SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2", + "status": "FAIL", + "rc": 3, "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", + "mode": "change", + "component": "gram-support-permission-cache-rebuild", + "started_at_utc": "2026-09-18T04:15:35Z", + "finished_at_utc": "2026-09-18T04:15:41Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e", + "command_sha256": "36cdaea6a355cd3f64851595fd1f340301d0fc23c7023e5cef97f06717525fb7", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": false, + "change_declared": true, "result_contract_valid": true, - "result_contract_status": null, + "result_contract_status": "FAIL", "result_contract_error": null, - "command_rc": 0, - "changes_made": false, + "command_rc": 3, + "changes_made": true, "rollback_started": false, "rollback_restored": null, - "mutation_outcome": "NO_MUTATION", + "mutation_outcome": "MUTATED", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386", - "sanitized_output_sha256": "67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386", + "raw_evidence_sha256": "faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1", + "sanitized_output_sha256": "faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1", "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" + "output": "GRAM515R2_SAFE_REPORT={\"classification\":{\"addon_files_unchanged\":true,\"all_site_rc0\":false,\"all_staff_all_9_true_after\":false,\"changes_made\":true,\"forensic_prestate_backups_7of7\":false,\"permission_jobs_clear_7of7\":false,\"send_attempts\":0,\"site_count_7\":false,\"source_permission_entries_unchanged\":true,\"staff_route_exact_7of7\":false,\"xenforo_native_permission_rebuild_used\":true},\"mutation_started\":true,\"preflight_7of7\":true,\"rollback_policy\":\"NOT_APPLICABLE_DERIVED_PERMISSION_CACHE_REBUILD_AUTHORITATIVE_ENTRIES_UNCHANGED\",\"schema_version\":1,\"scope\":\"GRAM_SUPPORT_PERMISSION_CACHE_REBUILD_7OF7\",\"sites\":[{\"all_staff_all_9_true_after\":false,\"backup_path_sha256\":\"f87a51288c50c98e9ab4b2530cf736931f3d216967482444e56dd11c73a02c94\",\"backup_written\":true,\"cache_changed\":true,\"direct_user_override_count\":0,\"error\":\"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE\",\"group_counts\":{\"2\":4,\"3\":9,\"4\":9},\"ok\":false,\"permission_job_loops\":2,\"permission_job_remaining\":0,\"post_cache_hash\":\"2a3d979f27cb5d88cd448bd99781ed8d64d3b10ab3f5e6cefaff1dff2eb7376d\",\"pre_cache_hash\":\"ed09d00f986eecf0157e4321f11a90294bc49048c038a78370cc0626349840f4\",\"rc\":3,\"slug\":\"codevipe\",\"staff_accounts_after\":[{\"all_9_true\":false,\"effective\":{\"assign\":false,\"create\":false,\"internalNotes\":false,\"manage\":false,\"replyOwn\":false,\"view\":false,\"viewAll\":false,\"viewOwn\":false,\"viewTechnicalContext\":false},\"gramSupport_group_present\":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\"}],\"staff_route_exact\":true},{\"all_staff_all_9_true_after\":false,\"backup_path_sha256\":\"6c0d51977e43977883e46587b6600f56107b8bac33cee770a8de6cfc9207d445\",\"backup_written\":true,\"cache_changed\":true,\"direct_user_override_count\":0,\"error\":\"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE\",\"group_counts\":{\"2\":4,\"3\":9,\"4\":9},\"ok\":false,\"permission_job_loops\":2,\"permission_job_remaining\":0,\"post_cache_hash\":\"06ddbbfc02aa65b5cb3706120a9e342783821bd767cb17bb9683ef52274dc30d\",\"pre_cache_hash\":\"2763b3d9a0f04f5e045d361426c6a21438570ec1d6c71aca6bc34474c831debc\",\"rc\":3,\"slug\":\"newfi\",\"staff_accounts_after\":[{\"all_9_true\":false,\"effective\":{\"assign\":false,\"create\":false,\"internalNotes\":false,\"manage\":false,\"replyOwn\":false,\"view\":false,\"viewAll\":false,\"viewOwn\":false,\"viewTechnicalContext\":false},\"gramSupport_group_present\":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\"}],\"staff_route_exact\":true}],\"staff_url_pattern\":\"/support/staff/\"}\nGRAM515R2_DECISION=HOLD_PERMISSION_CACHE_REBUILD_INCOMPLETE\nGRAM515R2_NEXT_GATE=STOP_REVIEW_DO_NOT_REAPPLY_PERMISSIONS\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2\",\"status\":\"FAIL\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 22c344d9..e7c37c23 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,36 +1,36 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1 -STATUS=OK -RC=0 +COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2 +STATUS=FAIL +RC=3 HOST=pve01 -MODE=read-only -COMPONENT=gram-support-access-permission-controller-rca +MODE=change +COMPONENT=gram-support-permission-cache-rebuild REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e +COMMAND_SHA256=36cdaea6a355cd3f64851595fd1f340301d0fc23c7023e5cef97f06717525fb7 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=false +CHANGE_DECLARED=true RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_STATUS=FAIL RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=0 -CHANGES_MADE=false +COMMAND_RC=3 +CHANGES_MADE=true ROLLBACK_STARTED=false ROLLBACK_RESTORED=null -MUTATION_OUTCOME=NO_MUTATION +MUTATION_OUTCOME=MUTATED SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386 -SANITIZED_OUTPUT_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386 +RAW_EVIDENCE_SHA256=faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1 +SANITIZED_OUTPUT_SHA256=faf104bed5dbb9d03c670084893314eab459ddc941b2653055ca3d040438f9f1 OUTPUT_BEGIN -GRAM515R1_SAFE_REPORT={"classification":{"changes_made":false,"direct_user_overrides_present":false,"group2_entries_4_each":true,"group3_full_9_each":true,"group4_full_9_each":true,"permission_defs_9_each":true,"routes_4_each":true,"send_attempts":0,"site_count_7":true,"staff_effective_cache_issues_present":true,"undefined_permission_references_present":false},"controller_signal_sites":[{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"codevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"dsmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"gamevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"hkmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"kingofwolk"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"zakrutim"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"newfi"}],"direct_user_override_sites":[],"schema_version":1,"scope":"READ_ONLY_GRAM_SUPPORT_ACCESS_PERMISSION_CONTROLLER_RCA_7OF7","site_count":7,"sites":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}],"staff_effective_cache_issues":[{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"codevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"dsmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"gamevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"hkmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"kingofwolk","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"zakrutim","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"newfi","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}],"transport":{"vm160":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"vm210":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}},"undefined_permission_references":[]} -GRAM515R1_DECISION=PASS_RCA_EVIDENCE_CAPTURED -GRAM515R1_NEXT_GATE=REVIEW_EXACT_PERMISSION_OR_CONTROLLER_CAUSE_BEFORE_ANY_CHANGE -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +GRAM515R2_SAFE_REPORT={"classification":{"addon_files_unchanged":true,"all_site_rc0":false,"all_staff_all_9_true_after":false,"changes_made":true,"forensic_prestate_backups_7of7":false,"permission_jobs_clear_7of7":false,"send_attempts":0,"site_count_7":false,"source_permission_entries_unchanged":true,"staff_route_exact_7of7":false,"xenforo_native_permission_rebuild_used":true},"mutation_started":true,"preflight_7of7":true,"rollback_policy":"NOT_APPLICABLE_DERIVED_PERMISSION_CACHE_REBUILD_AUTHORITATIVE_ENTRIES_UNCHANGED","schema_version":1,"scope":"GRAM_SUPPORT_PERMISSION_CACHE_REBUILD_7OF7","sites":[{"all_staff_all_9_true_after":false,"backup_path_sha256":"f87a51288c50c98e9ab4b2530cf736931f3d216967482444e56dd11c73a02c94","backup_written":true,"cache_changed":true,"direct_user_override_count":0,"error":"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE","group_counts":{"2":4,"3":9,"4":9},"ok":false,"permission_job_loops":2,"permission_job_remaining":0,"post_cache_hash":"2a3d979f27cb5d88cd448bd99781ed8d64d3b10ab3f5e6cefaff1dff2eb7376d","pre_cache_hash":"ed09d00f986eecf0157e4321f11a90294bc49048c038a78370cc0626349840f4","rc":3,"slug":"codevipe","staff_accounts_after":[{"all_9_true":false,"effective":{"assign":false,"create":false,"internalNotes":false,"manage":false,"replyOwn":false,"view":false,"viewAll":false,"viewOwn":false,"viewTechnicalContext":false},"gramSupport_group_present":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"}],"staff_route_exact":true},{"all_staff_all_9_true_after":false,"backup_path_sha256":"6c0d51977e43977883e46587b6600f56107b8bac33cee770a8de6cfc9207d445","backup_written":true,"cache_changed":true,"direct_user_override_count":0,"error":"POST_REBUILD_EFFECTIVE_PERMISSIONS_NOT_ALL_TRUE","group_counts":{"2":4,"3":9,"4":9},"ok":false,"permission_job_loops":2,"permission_job_remaining":0,"post_cache_hash":"06ddbbfc02aa65b5cb3706120a9e342783821bd767cb17bb9683ef52274dc30d","pre_cache_hash":"2763b3d9a0f04f5e045d361426c6a21438570ec1d6c71aca6bc34474c831debc","rc":3,"slug":"newfi","staff_accounts_after":[{"all_9_true":false,"effective":{"assign":false,"create":false,"internalNotes":false,"manage":false,"replyOwn":false,"view":false,"viewAll":false,"viewOwn":false,"viewTechnicalContext":false},"gramSupport_group_present":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"}],"staff_route_exact":true}],"staff_url_pattern":"/support/staff/"} +GRAM515R2_DECISION=HOLD_PERMISSION_CACHE_REBUILD_INCOMPLETE +GRAM515R2_NEXT_GATE=STOP_REVIEW_DO_NOT_REAPPLY_PERMISSIONS +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-PERMISSION-CACHE-REBUILD-515R2","status":"FAIL","changes_made":true,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END