CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=gram-support-access-permission-controller-rca
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=7d3a6b18b5c6d8eac5ef21b15793546badf9c1ad2958a494efa4baac7adf440e
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386
SANITIZED_OUTPUT_SHA256=67c349ddcfb2f729c8610a48297a262a2fa3decb6113692be794d9227cf4d386
OUTPUT_BEGIN
GRAM515R1_SAFE_REPORT={"classification":{"changes_made":false,"direct_user_overrides_present":false,"group2_entries_4_each":true,"group3_full_9_each":true,"group4_full_9_each":true,"permission_defs_9_each":true,"routes_4_each":true,"send_attempts":0,"site_count_7":true,"staff_effective_cache_issues_present":true,"undefined_permission_references_present":false},"controller_signal_sites":[{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"codevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"dsmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"gamevipe"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"hkmods"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"kingofwolk"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"zakrutim"},{"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"slug":"newfi"}],"direct_user_override_sites":[],"schema_version":1,"scope":"READ_ONLY_GRAM_SUPPORT_ACCESS_PERMISSION_CONTROLLER_RCA_7OF7","site_count":7,"sites":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}],"staff_effective_cache_issues":[{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"codevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"dsmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"gamevipe","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"hkmods","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"kingofwolk","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"zakrutim","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"falseish_permissions":["assign","create","internalNotes","manage","replyOwn","view","viewAll","viewOwn","viewTechnicalContext"],"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"primary_group_id":2,"secondary_group_ids":[3,4],"slug":"newfi","user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}],"transport":{"vm160":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/codevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"codevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/dsmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"dsmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/gamevipe/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"gamevipe","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/hkmods/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"hkmods","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/kingofwolk/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"kingofwolk","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}},{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/zakrutim/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"zakrutim","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"vm210":{"guest_stderr_present":false,"inner_rc":0,"ok":true,"report":{"rows":[{"addon_present":true,"addon_tree_sha256":"d9e7166a5410b6364ceb5669e3294f75b033e9324cf2cab2159f49b05e093bd7","db":{"db_ok":true,"direct_override_summary":[],"errors":[],"group_entries":[{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":2,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":3,"user_id":0},{"permission_id":"assign","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"create","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"internalNotes","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"manage","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"replyOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"view","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewAll","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewOwn","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0},{"permission_id":"viewTechnicalContext","permission_value":"allow","permission_value_int":0,"user_group_id":4,"user_id":0}],"permissions":[{"depend_permission_id":"","display_order":60,"interface_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"depend_permission_id":"","display_order":20,"interface_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"depend_permission_id":"","display_order":80,"interface_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"depend_permission_id":"","display_order":50,"interface_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"depend_permission_id":"","display_order":40,"interface_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":10,"interface_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"depend_permission_id":"","display_order":70,"interface_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"depend_permission_id":"","display_order":30,"interface_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"depend_permission_id":"","display_order":90,"interface_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"routes":[{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"}],"staff_accounts":[{"gramSupport_effective":{"assign":null,"create":null,"internalNotes":null,"manage":null,"replyOwn":null,"view":null,"viewAll":null,"viewOwn":null,"viewTechnicalContext":null},"gramSupport_group_present_in_cache":false,"in_admin_group_3":true,"in_moderator_group_4":true,"is_admin":true,"is_moderator":true,"permission_combination_id_sha256":"e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683","primary_group_id":2,"secondary_group_ids":[3,4],"user_id_sha256":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"}]},"permissions_xml":[{},{"display_order":"10","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"view","permission_type":"flag"},{"display_order":"20","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"create","permission_type":"flag"},{"display_order":"30","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewOwn","permission_type":"flag"},{"display_order":"40","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"replyOwn","permission_type":"flag"},{"display_order":"50","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"manage","permission_type":"flag"},{"display_order":"60","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"assign","permission_type":"flag"},{"display_order":"70","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewAll","permission_type":"flag"},{"display_order":"80","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"internalNotes","permission_type":"flag"},{"display_order":"90","interface_group_id":"gramSupport","permission_group_id":"gramSupport","permission_id":"viewTechnicalContext","permission_type":"flag"}],"php_audit_rc":0,"php_audit_stderr_bytes":0,"php_audit_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","public":"/var/www/forums/newfi/public","public_present":true,"routes_xml":[{},{"action_prefix":"","context":"","controller":"Gram\\Support:Support","format":"","route_prefix":"support","route_type":"public","sub_name":""},{"action_prefix":"","context":"","controller":"Gram\\Support:AccountSupport","format":"support","route_prefix":"account","route_type":"public","sub_name":"support"},{"action_prefix":"","context":"","controller":"Gram\\Support:StaffSupport","format":"staff","route_prefix":"support","route_type":"public","sub_name":"staff"},{"action_prefix":"","context":"","controller":"Gram\\Support:Pwa","format":"service-worker","route_prefix":"support","route_type":"public","sub_name":"service-worker"}],"slug":"newfi","source_scan":{"permission_refs":["assign","create","internalNotes","manage","replyOwn","viewAll","viewOwn"],"php_file_count":39,"signal_lines":[{"line":30,"path":"Attachment/TicketHandler.php","text":"&& $visitor->hasPermission('gramSupport', 'internalNotes')"},{"line":32,"path":"Attachment/TicketHandler.php","text":"$visitor->hasPermission('gramSupport', 'viewAll')"},{"line":33,"path":"Attachment/TicketHandler.php","text":"|| $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Entity/Message.php","text":"'is_staff' => ['type' => self::BOOL, 'default' => 0, 'nullable' => false],"},{"line":11,"path":"Listener/SourcePageContext.php","text":"private const SESSION_KEY = 'gramSupportSourceContext';"},{"line":27,"path":"Notification/AlertConsumer.php","text":"$isStaff = $recipient->hasPermission('gramSupport', 'viewAll')"},{"line":28,"path":"Notification/AlertConsumer.php","text":"|| $recipient->hasPermission('gramSupport', 'manage');"},{"line":58,"path":"Notification/Dispatcher.php","text":"if (!$staff->hasPermission('gramSupport', 'viewAll')"},{"line":59,"path":"Notification/Dispatcher.php","text":"&& !$staff->hasPermission('gramSupport', 'manage'))"},{"line":12,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":14,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":31,"path":"Pub/Controller/AccountSupport.php","text":"if (!$visitor->user_id || !$visitor->hasPermission('gramSupport', 'viewOwn'))"},{"line":33,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":41,"path":"Pub/Controller/AccountSupport.php","text":"return $this->noPermission();"},{"line":12,"path":"Pub/Controller/Pwa.php","text":"|| (!$visitor->hasPermission('gramSupport', 'manage')"},{"line":13,"path":"Pub/Controller/Pwa.php","text":"&& !$visitor->hasPermission('gramSupport', 'viewAll')))"},{"line":15,"path":"Pub/Controller/Pwa.php","text":"throw $this->exception($this->noPermission());"},{"line":7,"path":"Pub/Controller/StaffSupport.php","text":"use Gram\\Support\\Service\\Ticket\\StaffUpdate;"},{"line":17,"path":"Pub/Controller/StaffSupport.php","text":"? $visitor->hasPermission('gramSupport', 'manage')"},{"line":18,"path":"Pub/Controller/StaffSupport.php","text":": ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":19,"path":"Pub/Controller/StaffSupport.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'));"},{"line":23,"path":"Pub/Controller/StaffSupport.php","text":"throw $this->exception($this->noPermission());"},{"line":71,"path":"Pub/Controller/StaffSupport.php","text":"&& !\\XF::visitor()->hasPermission('gramSupport', 'internalNotes'))"},{"line":73,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":99,"path":"Pub/Controller/StaffSupport.php","text":"/** @var StaffUpdate $staffUpdate */"},{"line":100,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate = $this->service(StaffUpdate::class);"},{"line":101,"path":"Pub/Controller/StaffSupport.php","text":"$staffUpdate->validateTransition((string)$ticket->status, $newStatus);"},{"line":105,"path":"Pub/Controller/StaffSupport.php","text":"if (!\\XF::visitor()->hasPermission('gramSupport', 'assign'))"},{"line":107,"path":"Pub/Controller/StaffSupport.php","text":"return $this->noPermission();"},{"line":112,"path":"Pub/Controller/StaffSupport.php","text":"|| (!$assigned->hasPermission('gramSupport', 'viewAll')"},{"line":113,"path":"Pub/Controller/StaffSupport.php","text":"&& !$assigned->hasPermission('gramSupport', 'manage')))"},{"line":31,"path":"Pub/Controller/Support.php","text":"if ($visitor->user_id && !$visitor->hasPermission('gramSupport', 'create'))"},{"line":33,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":198,"path":"Pub/Controller/Support.php","text":"|| !$visitor->hasPermission('gramSupport', 'replyOwn'))"},{"line":200,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":205,"path":"Pub/Controller/Support.php","text":"return $this->noPermission();"},{"line":231,"path":"Pub/Controller/Support.php","text":"throw $this->exception($this->noPermission());"},{"line":9,"path":"Security/GuestTicketSession.php","text":"private const KEY = 'gramSupportGuestTickets';"},{"line":12,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'viewAll')"},{"line":13,"path":"Security/TicketAccess.php","text":"|| $visitor->hasPermission('gramSupport', 'manage'))"},{"line":22,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'viewOwn');"},{"line":35,"path":"Security/TicketAccess.php","text":"if ($visitor->hasPermission('gramSupport', 'manage'))"},{"line":44,"path":"Security/TicketAccess.php","text":"return $visitor->hasPermission('gramSupport', 'replyOwn');"},{"line":101,"path":"Service/Ticket/Creator.php","text":"$message->is_staff = 0;"},{"line":34,"path":"Service/Ticket/Reply.php","text":"$message->is_staff = $isStaff ? 1 : 0;"},{"line":7,"path":"Service/Ticket/StaffUpdate.php","text":"class StaffUpdate extends AbstractService"},{"line":48,"path":"Setup.php","text":"$table->addColumn('is_staff', 'tinyint')->unsigned()->setDefault(0);"},{"line":9,"path":"Util/SiteConfig.php","text":"$siteId = trim((string)\\XF::options()->gramSupportSiteId);"},{"line":19,"path":"Util/SiteConfig.php","text":"$days = max(1, min(365, (int)\\XF::options()->gramSupportGuestTokenTtlDays));"},{"line":25,"path":"Util/SiteConfig.php","text":"return max(1, min(100, (int)\\XF::options()->gramSupportGuestRateLimitCount));"},{"line":30,"path":"Util/SiteConfig.php","text":"return max(60, min(86400, (int)\\XF::options()->gramSupportGuestRateLimitWindowSeconds));"}],"source_present":true}}]},"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}},"undefined_permission_references":[]}
GRAM515R1_DECISION=PASS_RCA_EVIDENCE_CAPTURED
GRAM515R1_NEXT_GATE=REVIEW_EXACT_PERMISSION_OR_CONTROLLER_CAUSE_BEFORE_ANY_CHANGE
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-ACCESS-PERMISSION-CONTROLLER-RCA-515R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}

OUTPUT_END
CHAT_OUTPUT_END
