CHAT_OUTPUT_BEGIN
COMMAND_ID=NEWFI-260919-NEWFDOM-NOTIFY213-CONTRACT172
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=newfi-newfdom-notify213-xenforo-alert-push-signatures-readonly
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=bda1140816eec82827d7d14464a8f4c170a8a77387d53dd4265102ee7c2c6b4c
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=5a429f5a36df397f1561ab9cf5a3ef10db191d7e304e6f9a7705cd2e7a703034
SANITIZED_OUTPUT_SHA256=5a429f5a36df397f1561ab9cf5a3ef10db191d7e304e6f9a7705cd2e7a703034
OUTPUT_BEGIN
NEWFI172_BEGIN=true
COMMAND_ID=NEWFI-260919-NEWFDOM-NOTIFY213-CONTRACT172
NEWFI172_FRAMEWORK={"command_id":"NEWFI-260919-NEWFDOM-NOTIFY213-CONTRACT172","controller_details":{"src/XF/Pub/Controller/AccountConfirmationController.php":{"bytes":2043,"matches":[{"context":[{"line":13,"text":"{"},{"line":14,"text":"\tpublic function actionEmail(ParameterBag $params)"},{"line":15,"text":"\t{"},{"line":16,"text":"\t\t/** @var User $user */"},{"line":17,"text":"\t\t$user = $this->assertRecordExists(User::class, $params->user_id);"},{"line":18,"text":""}],"line":14,"text":"\tpublic function actionEmail(ParameterBag $params)"},{"context":[{"line":49,"text":""},{"line":50,"text":"\tpublic function actionResend()"},{"line":51,"text":"\t{"},{"line":52,"text":"\t\t$visitor = \\XF::visitor();"},{"line":53,"text":"\t\tif (!$visitor->user_id)"},{"line":54,"text":"\t\t{"}],"line":50,"text":"\tpublic function actionResend()"}],"path":"/var/www/forums/newfi/public/src/XF/Pub/Controller/AccountConfirmationController.php","present":true,"sha256":"f9c19473d2620ec0e20ab435871f296af90d85daf49fb8211ad7dde7af08781d"},"src/XF/Pub/Controller/AccountController.php":{"bytes":54974,"matches":[{"context":[{"line":17,"text":"use XF\\Entity\\User;"},{"line":18,"text":"use XF\\Entity\\UserAlert;"},{"line":19,"text":"use XF\\Entity\\UserConnectedAccount;"},{"line":20,"text":"use XF\\Entity\\UsernameChange;"},{"line":21,"text":"use XF\\Entity\\UserProfile;"},{"line":22,"text":"use XF\\Entity\\UserTfa;"}],"line":18,"text":"use XF\\Entity\\UserAlert;"},{"context":[{"line":40,"text":"use XF\\Repository\\TfaRepository;"},{"line":41,"text":"use XF\\Repository\\UserAlertRepository;"},{"line":42,"text":"use XF\\Repository\\UserTfaTrustedRepository;"},{"line":43,"text":"use XF\\Repository\\UserUpgradeRepository;"},{"line":44,"text":"use XF\\Service\\Passkey\\ManagerService;"},{"line":45,"text":"use XF\\Service\\User\\AvatarService;"}],"line":41,"text":"use XF\\Repository\\UserAlertRepository;"},{"context":[{"line":66,"text":""},{"line":67,"text":"\tpublic function actionIndex()"},{"line":68,"text":"\t{"},{"line":69,"text":"\t\treturn $this->rerouteController(self::class, 'account-details');"},{"line":70,"text":"\t}"},{"line":71,"text":""}],"line":67,"text":"\tpublic function actionIndex()"},{"context":[{"line":77,"text":""},{"line":78,"text":"\tpublic function actionAccountDetails()"},{"line":79,"text":"\t{"},{"line":80,"text":"\t\t$visitor = \\XF::visitor();"},{"line":81,"text":""},{"line":82,"text":"\t\tif ($this->isPost())"}],"line":78,"text":"\tpublic function actionAccountDetails()"},{"context":[{"line":200,"text":""},{"line":201,"text":"\tpublic function actionUsername()"},{"line":202,"text":"\t{"},{"line":203,"text":"\t\t$visitor = \\XF::visitor();"},{"line":204,"text":""},{"line":205,"text":"\t\tif (!$visitor->canChangeUsername($error))"}],"line":201,"text":"\tpublic function actionUsername()"},{"context":[{"line":243,"text":""},{"line":244,"text":"\tpublic function actionEmail()"},{"line":245,"text":"\t{"},{"line":246,"text":"\t\t$visitor = \\XF::visitor();"},{"line":247,"text":"\t\t$auth = $visitor->Auth->getAuthenticationHandler();"},{"line":248,"text":"\t\tif (!$auth)"}],"line":244,"text":"\tpublic function actionEmail()"},{"context":[{"line":319,"text":""},{"line":320,"text":"\tpublic function actionSignature()"},{"line":321,"text":"\t{"},{"line":322,"text":"\t\t$visitor = \\XF::visitor();"},{"line":323,"text":"\t\tif (!$visitor->canEditSignature())"},{"line":324,"text":"\t\t{"}],"line":320,"text":"\tpublic function actionSignature()"},{"context":[{"line":372,"text":""},{"line":373,"text":"\tpublic function actionPrivacy()"},{"line":374,"text":"\t{"},{"line":375,"text":"\t\tif ($this->isPost())"},{"line":376,"text":"\t\t{"},{"line":377,"text":"\t\t\t$this->savePrivacyProcess(\\XF::visitor())->run();"}],"line":373,"text":"\tpublic function actionPrivacy()"},{"context":[{"line":376,"text":"\t\t{"},{"line":377,"text":"\t\t\t$this->savePrivacyProcess(\\XF::visitor())->run();"},{"line":378,"text":"\t\t\treturn $this->redirect($this->buildLink('account/privacy'));"},{"line":379,"text":"\t\t}"},{"line":380,"text":"\t\telse"},{"line":381,"text":"\t\t{"}],"line":377,"text":"\t\t\t$this->savePrivacyProcess(\\XF::visitor())->run();"},{"context":[{"line":377,"text":"\t\t\t$this->savePrivacyProcess(\\XF::visitor())->run();"},{"line":378,"text":"\t\t\treturn $this->redirect($this->buildLink('account/privacy'));"},{"line":379,"text":"\t\t}"},{"line":380,"text":"\t\telse"},{"line":381,"text":"\t\t{"},{"line":382,"text":"\t\t\t$view = $this->view('XF:Account\\Privacy', 'account_privacy');"}],"line":378,"text":"\t\t\treturn $this->redirect($this->buildLink('account/privacy'));"},{"context":[{"line":381,"text":"\t\t{"},{"line":382,"text":"\t\t\t$view = $this->view('XF:Account\\Privacy', 'account_privacy');"},{"line":383,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'privacy');"},{"line":384,"text":"\t\t}"},{"line":385,"text":"\t}"},{"line":386,"text":""}],"line":382,"text":"\t\t\t$view = $this->view('XF:Account\\Privacy', 'account_privacy');"},{"context":[{"line":382,"text":"\t\t\t$view = $this->view('XF:Account\\Privacy', 'account_privacy');"},{"line":383,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'privacy');"},{"line":384,"text":"\t\t}"},{"line":385,"text":"\t}"},{"line":386,"text":""},{"line":387,"text":"\tprotected function savePrivacyProcess(User $visitor)"}],"line":383,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'privacy');"},{"context":[{"line":386,"text":""},{"line":387,"text":"\tprotected function savePrivacyProcess(User $visitor)"},{"line":388,"text":"\t{"},{"line":389,"text":"\t\t$form = $this->formAction();"},{"line":390,"text":""},{"line":391,"text":"\t\t$input = $this->filter(["}],"line":387,"text":"\tprotected function savePrivacyProcess(User $visitor)"},{"context":[{"line":400,"text":"\t\t\t],"},{"line":401,"text":"\t\t\t'privacy' => ["},{"line":402,"text":"\t\t\t\t'allow_view_profile' => 'str',"},{"line":403,"text":"\t\t\t\t'allow_post_profile' => 'str',"},{"line":404,"text":"\t\t\t\t'allow_receive_news_feed' => 'str',"},{"line":405,"text":"\t\t\t\t'allow_send_personal_conversation' => 'str',"}],"line":401,"text":"\t\t\t'privacy' => ["},{"context":[{"line":419,"text":""},{"line":420,"text":"\t\t$userPrivacy = $visitor->getRelationOrDefault('Privacy');"},{"line":421,"text":"\t\t$form->setupEntityInput($userPrivacy, $input['privacy']);"},{"line":422,"text":""},{"line":423,"text":"\t\t$form->complete(function () use ($visitor)"},{"line":424,"text":"\t\t{"}],"line":420,"text":"\t\t$userPrivacy = $visitor->getRelationOrDefault('Privacy');"},{"context":[{"line":420,"text":"\t\t$userPrivacy = $visitor->getRelationOrDefault('Privacy');"},{"line":421,"text":"\t\t$form->setupEntityInput($userPrivacy, $input['privacy']);"},{"line":422,"text":""},{"line":423,"text":"\t\t$form->complete(function () use ($visitor)"},{"line":424,"text":"\t\t{"},{"line":425,"text":"\t\t\t$ipRepo = $this->repository(IpRepository::class);"}],"line":421,"text":"\t\t$form->setupEntityInput($userPrivacy, $input['privacy']);"},{"context":[{"line":425,"text":"\t\t\t$ipRepo = $this->repository(IpRepository::class);"},{"line":426,"text":"\t\t\t$ipRepo->logIp($visitor->user_id, $this->request->getIp(), 'user', $visitor->user_id, 'privacy_edit');"},{"line":427,"text":"\t\t});"},{"line":428,"text":""},{"line":429,"text":"\t\treturn $form;"},{"line":430,"text":"\t}"}],"line":426,"text":"\t\t\t$ipRepo->logIp($visitor->user_id, $this->request->getIp(), 'user', $visitor->user_id, 'privacy_edit');"},{"context":[{"line":431,"text":""},{"line":432,"text":"\tpublic function actionPreferences()"},{"line":433,"text":"\t{"},{"line":434,"text":"\t\tif ($this->isPost())"},{"line":435,"text":"\t\t{"},{"line":436,"text":"\t\t\t$this->preferencesSaveProcess(\\XF::visitor())->run();"}],"line":432,"text":"\tpublic function actionPreferences()"},{"context":[{"line":435,"text":"\t\t{"},{"line":436,"text":"\t\t\t$this->preferencesSaveProcess(\\XF::visitor())->run();"},{"line":437,"text":"\t\t\treturn $this->redirect($this->buildLink('account/preferences'));"},{"line":438,"text":"\t\t}"},{"line":439,"text":"\t\telse"},{"line":440,"text":"\t\t{"}],"line":436,"text":"\t\t\t$this->preferencesSaveProcess(\\XF::visitor())->run();"},{"context":[{"line":436,"text":"\t\t\t$this->preferencesSaveProcess(\\XF::visitor())->run();"},{"line":437,"text":"\t\t\treturn $this->redirect($this->buildLink('account/preferences'));"},{"line":438,"text":"\t\t}"},{"line":439,"text":"\t\telse"},{"line":440,"text":"\t\t{"},{"line":441,"text":"\t\t\t$styles = $this->repository(StyleRepository::class)->getUserSelectableStyles();"}],"line":437,"text":"\t\t\treturn $this->redirect($this->buildLink('account/preferences'));"},{"context":[{"line":447,"text":""},{"line":448,"text":"\t\t\t$alertRepo = $this->repository(UserAlertRepository::class);"},{"line":449,"text":""},{"line":450,"text":"\t\t\t$viewParams = ["},{"line":451,"text":"\t\t\t\t'styles' => $styles,"},{"line":452,"text":"\t\t\t\t'defaultStyle' => $styles[$this->app->options()->defaultStyleId] ?? [],"}],"line":448,"text":"\t\t\t$alertRepo = $this->repository(UserAlertRepository::class);"},{"context":[{"line":457,"text":""},{"line":458,"text":"\t\t\t\t'alertOptOuts' => $alertRepo->getAlertOptOuts(),"},{"line":459,"text":"\t\t\t];"},{"line":460,"text":""},{"line":461,"text":"\t\t\t$view = $this->view('XF:Account\\Preferences', 'account_preferences', $viewParams);"},{"line":462,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'preferences');"}],"line":458,"text":"\t\t\t\t'alertOptOuts' => $alertRepo->getAlertOptOuts(),"},{"context":[{"line":460,"text":""},{"line":461,"text":"\t\t\t$view = $this->view('XF:Account\\Preferences', 'account_preferences', $viewParams);"},{"line":462,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'preferences');"},{"line":463,"text":"\t\t}"},{"line":464,"text":"\t}"},{"line":465,"text":""}],"line":461,"text":"\t\t\t$view = $this->view('XF:Account\\Preferences', 'account_preferences', $viewParams);"},{"context":[{"line":461,"text":"\t\t\t$view = $this->view('XF:Account\\Preferences', 'account_preferences', $viewParams);"},{"line":462,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'preferences');"},{"line":463,"text":"\t\t}"},{"line":464,"text":"\t}"},{"line":465,"text":""},{"line":466,"text":"\tprotected function preferencesSaveProcess(User $visitor)"}],"line":462,"text":"\t\t\treturn $this->addAccountWrapperParams($view, 'preferences');"},{"context":[{"line":465,"text":""},{"line":466,"text":"\tprotected function preferencesSaveProcess(User $visitor)"},{"line":467,"text":"\t{"},{"line":468,"text":"\t\t$form = $this->formAction();"},{"line":469,"text":""},{"line":470,"text":"\t\t$input = $this->filter(["}],"line":466,"text":"\tprotected function preferencesSaveProcess(User $visitor)"},{"context":[{"line":484,"text":"\t\t\t\t'email_on_conversation' => 'bool',"},{"line":485,"text":"\t\t\t\t'push_on_conversation' => 'bool',"},{"line":486,"text":"\t\t\t],"},{"line":487,"text":"\t\t\t'moderator' => ["},{"line":488,"text":"\t\t\t\t'notify_report' => 'bool',"},{"line":489,"text":"\t\t\t\t'notify_approval' => 'bool',"}],"line":485,"text":"\t\t\t\t'push_on_conversation' => 'bool',"},{"context":[{"line":494,"text":""},{"line":495,"text":"\t\t$alertRepo = $this->repository(UserAlertRepository::class);"},{"line":496,"text":"\t\t$optOutActions = $alertRepo->getAlertOptOutActions();"},{"line":497,"text":"\t\t$alert = $this->filter('alert', 'array-bool');"},{"line":498,"text":"\t\t$push = $this->filter('push', 'array-bool');"},{"line":499,"text":"\t\t$pushShown = $this->filter('push_shown', 'array-bool');"}],"line":495,"text":"\t\t$alertRepo = $this->repository(UserAlertRepository::class);"},{"context":[{"line":495,"text":"\t\t$alertRepo = $this->repository(UserAlertRepository::class);"},{"line":496,"text":"\t\t$optOutActions = $alertRepo->getAlertOptOutActions();"},{"line":497,"text":"\t\t$alert = $this->filter('alert', 'array-bool');"},{"line":498,"text":"\t\t$push = $this->filter('push', 'array-bool');"},{"line":499,"text":"\t\t$pushShown = $this->filter('push_shown', 'array-bool');"},{"line":500,"text":""}],"line":496,"text":"\t\t$optOutActions = $alertRepo->getAlertOptOutActions();"},{"context":[{"line":496,"text":"\t\t$optOutActions = $alertRepo->getAlertOptOutActions();"},{"line":497,"text":"\t\t$alert = $this->filter('alert', 'array-bool');"},{"line":498,"text":"\t\t$push = $this->filter('push', 'array-bool');"},{"line":499,"text":"\t\t$pushShown = $this->filter('push_shown', 'array-bool');"},{"line":500,"text":""},{"line":501,"text":"\t\t$alertOptOuts = [];"}],"line":497,"text":"\t\t$alert = $this->filter('alert', 'array-bool');"},{"context":[{"line":497,"text":"\t\t$alert = $this->filter('alert', 'array-bool');"},{"line":498,"text":"\t\t$push = $this->filter('push', 'array-bool');"},{"line":499,"text":"\t\t$pushShown = $this->filter('push_shown', 'array-bool');"},{"line":500,"text":""},{"line":501,"text":"\t\t$alertOptOuts = [];"},{"line":502,"text":"\t\t$pushOptOuts = [];"}],"line":498,"text":"\t\t$push = $this->filter('push', 'array-bool');"},{"context":[{"line":498,"text":"\t\t$push = $this->filter('push', 'array-bool');"},{"line":499,"text":"\t\t$pushShown = $this->filter('push_shown', 'array-bool');"},{"line":500,"text":""},{"line":501,"text":"\t\t$alertOptOuts = [];"},{"line":502,"text":"\t\t$pushOptOuts = [];"},{"line":503,"text":"\t\tforeach (array_keys($optOutActions) AS $optOut)"}],"line":499,"text":"\t\t$pushShown = $this->filter('push_shown', 'array-bool');"},{"context":[{"line":500,"text":""},{"line":501,"text":"\t\t$alertOptOuts = [];"},{"line":502,"text":"\t\t$pushOptOuts = [];"},{"line":503,"text":"\t\tforeach (array_keys($optOutActions) AS $optOut)"},{"line":504,"text":"\t\t{"},{"line":505,"text":"\t\t\tif (empty($alert[$optOut]))"}],"line":501,"text":"\t\t$alertOptOuts = [];"},{"context":[{"line":501,"text":"\t\t$alertOptOuts = [];"},{"line":502,"text":"\t\t$pushOptOuts = [];"},{"line":503,"text":"\t\tforeach (array_keys($optOutActions) AS $optOut)"},{"line":504,"text":"\t\t{"},{"line":505,"text":"\t\t\tif (empty($alert[$optOut]))"},{"line":506,"text":"\t\t\t{"}],"line":502,"text":"\t\t$pushOptOuts = [];"},{"context":[{"line":504,"text":"\t\t{"},{"line":505,"text":"\t\t\tif (empty($alert[$optOut]))"},{"line":506,"text":"\t\t\t{"},{"line":507,"text":"\t\t\t\t$alertOptOuts[$optOut] = $optOut;"},{"line":508,"text":"\t\t\t}"},{"line":509,"text":"\t\t\tif (empty($push[$optOut]) && isset($pushShown[$optOut]))"}],"line":505,"text":"\t\t\tif (empty($alert[$optOut]))"},{"context":[{"line":506,"text":"\t\t\t{"},{"line":507,"text":"\t\t\t\t$alertOptOuts[$optOut] = $optOut;"},{"line":508,"text":"\t\t\t}"},{"line":509,"text":"\t\t\tif (empty($push[$optOut]) && isset($pushShown[$optOut]))"},{"line":510,"text":"\t\t\t{"},{"line":511,"text":"\t\t\t\t$pushOptOuts[$optOut] = $optOut;"}],"line":507,"text":"\t\t\t\t$alertOptOuts[$optOut] = $optOut;"},{"context":[{"line":508,"text":"\t\t\t}"},{"line":509,"text":"\t\t\tif (empty($push[$optOut]) && isset($pushShown[$optOut]))"},{"line":510,"text":"\t\t\t{"},{"line":511,"text":"\t\t\t\t$pushOptOuts[$optOut] = $optOut;"},{"line":512,"text":"\t\t\t}"},{"line":513,"text":"\t\t}"}],"line":509,"text":"\t\t\tif (empty($push[$optOut]) && isset($pushShown[$optOut]))"},{"context":[{"line":510,"text":"\t\t\t{"},{"line":511,"text":"\t\t\t\t$pushOptOuts[$optOut] = $optOut;"},{"line":512,"text":"\t\t\t}"},{"line":513,"text":"\t\t}"},{"line":514,"text":""},{"line":515,"text":"\t\t$input['option']['alert_optout'] = $alertOptOuts;"}],"line":511,"text":"\t\t\t\t$pushOptOuts[$optOut] = $optOut;"},{"context":[{"line":514,"text":""},{"line":515,"text":"\t\t$input['option']['alert_optout'] = $alertOptOuts;"},{"line":516,"text":""},{"line":517,"text":"\t\tif ($visitor->canUsePushNotifications())"},{"line":518,"text":"\t\t{"},{"line":519,"text":"\t\t\t$input['option']['push_optout'] = $pushOptOuts;"}],"line":515,"text":"\t\t$input['option']['alert_optout'] = $alertOptOuts;"},{"context":[{"line":516,"text":""},{"line":517,"text":"\t\tif ($visitor->canUsePushNotifications())"},{"line":518,"text":"\t\t{"},{"line":519,"text":"\t\t\t$input['option']['push_optout'] = $pushOptOuts;"},{"line":520,"text":"\t\t}"},{"line":521,"text":""}],"line":517,"text":"\t\tif ($visitor->canUsePushNotifications())"},{"context":[{"line":518,"text":"\t\t{"},{"line":519,"text":"\t\t\t$input['option']['push_optout'] = $pushOptOuts;"},{"line":520,"text":"\t\t}"},{"line":521,"text":""},{"line":522,"text":"\t\t$form->setup(function () use ($visitor, $input)"},{"line":523,"text":"\t\t{"}],"line":519,"text":"\t\t\t$input['option']['push_optout'] = $pushOptOuts;"},{"context":[{"line":542,"text":""},{"line":543,"text":"\t\t$this->customFieldsSaveProcess($form, 'preferences');"},{"line":544,"text":""},{"line":545,"text":"\t\t$form->apply(function () use ($input, $visitor)"},{"line":546,"text":"\t\t{"},{"line":547,"text":"\t\t\tif ($input['restore_notices'])"}],"line":543,"text":"\t\t$this->customFieldsSaveProcess($form, 'preferences');"},{"context":[{"line":555,"text":"\t\t\t$ipRepo = $this->repository(IpRepository::class);"},{"line":556,"text":"\t\t\t$ipRepo->logIp($visitor->user_id, $this->request->getIp(), 'user', $visitor->user_id, 'preferences_edit');"},{"line":557,"text":"\t\t});"},{"line":558,"text":""},{"line":559,"text":"\t\treturn $form;"},{"line":560,"text":"\t}"}],"line":556,"text":"\t\t\t$ipRepo->logIp($visitor->user_id, $this->request->getIp(), 'user', $visitor->user_id, 'preferences_edit');"},{"context":[{"line":561,"text":""},{"line":562,"text":"\tpublic function actionDismissNotice()"},{"line":563,"text":"\t{"},{"line":564,"text":"\t\t/** @var Notice $notice */"},{"line":565,"text":"\t\t$notice = $this->assertRecordExists(Notice::class, $this->filter('notice_id', 'uint'));"},{"line":566,"text":""}],"line":562,"text":"\tpublic function actionDismissNotice()"},{"context":[{"line":583,"text":""},{"line":584,"text":"\tpublic function actionAvatar()"},{"line":585,"text":"\t{"},{"line":586,"text":"\t\t$visitor = \\XF::visitor();"},{"line":587,"text":"\t\tif (!$visitor->canUploadAvatar())"},{"line":588,"text":"\t\t{"}],"line":584,"text":"\tpublic function actionAvatar()"},{"context":[{"line":685,"text":""},{"line":686,"text":"\tpublic function actionBanner()"},{"line":687,"text":"\t{"},{"line":688,"text":"\t\t$visitor = \\XF::visitor();"},{"line":689,"text":"\t\tif (!$visitor->canUploadProfileBanner())"},{"line":690,"text":"\t\t{"}],"line":686,"text":"\tpublic function actionBanner()"},{"context":[{"line":747,"text":""},{"line":748,"text":"\tpublic function actionFollowing()"},{"line":749,"text":"\t{"},{"line":750,"text":"\t\t$followingUsers = [];"},{"line":751,"text":"\t\t$visitor = \\XF::visitor();"},{"line":752,"text":"\t\tif ($following = $visitor->Profile->following)"}],"line":748,"text":"\tpublic function actionFollowing()"},{"context":[{"line":766,"text":""},{"line":767,"text":"\tpublic function actionIgnored()"},{"line":768,"text":"\t{"},{"line":769,"text":"\t\t$visitor = \\XF::visitor();"},{"line":770,"text":"\t\tif ($ignored = $visitor->Profile->ignored)"},{"line":771,"text":"\t\t{"}],"line":767,"text":"\tpublic function actionIgnored()"},{"context":[{"line":788,"text":""},{"line":789,"text":"\tpublic function actionReactions()"},{"line":790,"text":"\t{"},{"line":791,"text":"\t\t$this->assertNotEmbeddedImageRequest();"},{"line":792,"text":""},{"line":793,"text":"\t\t$visitor = \\XF::visitor();"}],"line":789,"text":"\tpublic function actionReactions()"},{"context":[{"line":844,"text":""},{"line":845,"text":"\tpublic function actionSecurity()"},{"line":846,"text":"\t{"},{"line":847,"text":"\t\t$visitor = \\XF::visitor();"},{"line":848,"text":"\t\t$auth = $visitor->Auth->getAuthenticationHandler();"},{"line":849,"text":"\t\tif (!$auth)"}],"line":845,"text":"\tpublic function actionSecurity()"},{"context":[{"line":937,"text":""},{"line":938,"text":"\tpublic function actionPasskeyAdd()"},{"line":939,"text":"\t{"},{"line":940,"text":"\t\tif (!$this->request->isSecure() && !$this->request->isHostLocal())"},{"line":941,"text":"\t\t{"},{"line":942,"text":"\t\t\treturn $this->notFound();"}],"line":938,"text":"\tpublic function actionPasskeyAdd()"},{"context":[{"line":989,"text":""},{"line":990,"text":"\tpublic function actionPasskeyEdit(ParameterBag $params)"},{"line":991,"text":"\t{"},{"line":992,"text":"\t\t$this->assertPasswordVerified(3600);"},{"line":993,"text":""},{"line":994,"text":"\t\t$passkey = $this->assertPasskeyExists($params->passkey_id);"}],"line":990,"text":"\tpublic function actionPasskeyEdit(ParameterBag $params)"},{"context":[{"line":1016,"text":""},{"line":1017,"text":"\tpublic function actionPasskeyDelete(ParameterBag $params)"},{"line":1018,"text":"\t{"},{"line":1019,"text":"\t\t$this->assertPasswordVerified(3600);"},{"line":1020,"text":""},{"line":1021,"text":"\t\t$passkey = $this->assertPasskeyExists($params->passkey_id);"}],"line":1017,"text":"\tpublic function actionPasskeyDelete(ParameterBag $params)"},{"context":[{"line":1036,"text":""},{"line":1037,"text":"\tpublic function actionConnectedAccount()"},{"line":1038,"text":"\t{"},{"line":1039,"text":"\t\t$visitor = \\XF::visitor();"},{"line":1040,"text":"\t\t$auth = $visitor->Auth->getAuthenticationHandler();"},{"line":1041,"text":""}],"line":1037,"text":"\tpublic function actionConnectedAccount()"},{"context":[{"line":1051,"text":""},{"line":1052,"text":"\tpublic function actionConnectedAccountDisassociate(ParameterBag $params)"},{"line":1053,"text":"\t{"},{"line":1054,"text":"\t\t$this->assertPostOnly();"},{"line":1055,"text":""},{"line":1056,"text":"\t\t$visitor = \\XF::visitor();"}],"line":1052,"text":"\tpublic function actionConnectedAccountDisassociate(ParameterBag $params)"},{"context":[{"line":1105,"text":""},{"line":1106,"text":"\tpublic function actionRequestPassword()"},{"line":1107,"text":"\t{"},{"line":1108,"text":"\t\t$visitor = \\XF::visitor();"},{"line":1109,"text":"\t\t$auth = $visitor->Auth->getAuthenticationHandler();"},{"line":1110,"text":"\t\tif (!$auth)"}],"line":1106,"text":"\tpublic function actionRequestPassword()"},{"context":[{"line":1138,"text":""},{"line":1139,"text":"\tpublic function actionTwoStep()"},{"line":1140,"text":"\t{"},{"line":1141,"text":"\t\t$this->assertTfaEnabled();"},{"line":1142,"text":"\t\t$this->assertTwoStepPasswordVerified();"},{"line":1143,"text":""}],"line":1139,"text":"\tpublic function actionTwoStep()"},{"context":[{"line":1176,"text":""},{"line":1177,"text":"\tpublic function actionTwoStepBackupCodes()"},{"line":1178,"text":"\t{"},{"line":1179,"text":"\t\t$this->assertTfaEnabled();"},{"line":1180,"text":"\t\t$this->assertTwoStepPasswordVerified();"},{"line":1181,"text":""}],"line":1177,"text":"\tpublic function actionTwoStepBackupCodes()"},{"context":[{"line":1203,"text":""},{"line":1204,"text":"\tpublic function actionTwoStepAdd(ParameterBag $params)"},{"line":1205,"text":"\t{"},{"line":1206,"text":"\t\t$this->assertTfaEnabled();"},{"line":1207,"text":"\t\t$this->assertTwoStepPasswordVerified();"},{"line":1208,"text":"\t\t$this->assertPostOnly();"}],"line":1204,"text":"\tpublic function actionTwoStepAdd(ParameterBag $params)"},{"context":[{"line":1287,"text":""},{"line":1288,"text":"\tpublic function actionTwoStepEnable(ParameterBag $params)"},{"line":1289,"text":"\t{"},{"line":1290,"text":"\t\t$this->assertTfaEnabled();"},{"line":1291,"text":"\t\t$this->assertTwoStepPasswordVerified();"},{"line":1292,"text":"\t\t$this->assertPostOnly();"}],"line":1288,"text":"\tpublic function actionTwoStepEnable(ParameterBag $params)"},{"context":[{"line":1368,"text":""},{"line":1369,"text":"\tpublic function actionTwoStepDisable(ParameterBag $params)"},{"line":1370,"text":"\t{"},{"line":1371,"text":"\t\t$this->assertTfaEnabled();"},{"line":1372,"text":"\t\t$this->assertTwoStepPasswordVerified();"},{"line":1373,"text":""}],"line":1369,"text":"\tpublic function actionTwoStepDisable(ParameterBag $params)"}],"path":"/var/www/forums/newfi/public/src/XF/Pub/Controller/AccountController.php","present":true,"sha256":"73e755ef485d737f1a74e576827af1a127ec95c153f3a818eb20b344f5243270"}},"controller_scan":["src/XF/Pub/Controller/AccountConfirmationController.php","src/XF/Pub/Controller/AccountController.php"],"exact":{"abstract_handler":{"bytes":4761,"matches":[{"context":[{"line":61,"text":"\t * @return string|null"},{"line":62,"text":"\t */"},{"line":63,"text":"\tpublic function getPushTemplateName($action)"},{"line":64,"text":"\t{"},{"line":65,"text":"\t\treturn 'public:push_' . $this->contentType . '_' . $action;"},{"line":66,"text":"\t}"},{"line":67,"text":""},{"line":68,"text":"\t/**"},{"line":69,"text":"\t * @param string $action"}],"line":63,"text":"\tpublic function getPushTemplateName($action)"},{"context":[{"line":71,"text":"\t * @return string"},{"line":72,"text":"\t */"},{"line":73,"text":"\tpublic function getTemplateName($action)"},{"line":74,"text":"\t{"},{"line":75,"text":"\t\treturn 'public:alert_' . $this->contentType . '_' . $action;"},{"line":76,"text":"\t}"},{"line":77,"text":""},{"line":78,"text":"\t/**"},{"line":79,"text":"\t * @param string $action"}],"line":73,"text":"\tpublic function getTemplateName($action)"},{"context":[{"line":87,"text":"\t * }"},{"line":88,"text":"\t */"},{"line":89,"text":"\tpublic function getTemplateData($action, UserAlert $alert, ?Entity $content = null)"},{"line":90,"text":"\t{"},{"line":91,"text":"\t\tif (!$content)"},{"line":92,"text":"\t\t{"},{"line":93,"text":"\t\t\t$content = $alert->Content;"},{"line":94,"text":"\t\t}"},{"line":95,"text":""}],"line":89,"text":"\tpublic function getTemplateData($action, UserAlert $alert, ?Entity $content = null)"},{"context":[{"line":107,"text":"\t * @return string"},{"line":108,"text":"\t */"},{"line":109,"text":"\tpublic function render(UserAlert $alert, ?Entity $content = null)"},{"line":110,"text":"\t{"},{"line":111,"text":"\t\tif (!$content)"},{"line":112,"text":"\t\t{"},{"line":113,"text":"\t\t\t$content = $alert->Content;"},{"line":114,"text":"\t\t\tif (!$content)"},{"line":115,"text":"\t\t\t{"}],"line":109,"text":"\tpublic function render(UserAlert $alert, ?Entity $content = null)"},{"context":[{"line":140,"text":"\t * }"},{"line":141,"text":"\t */"},{"line":142,"text":"\tpublic function getApiOutput(UserAlert $alert)"},{"line":143,"text":"\t{"},{"line":144,"text":"\t\t$templater = \\XF::app()->templater();"},{"line":145,"text":"\t\t$content = $alert->Content;"},{"line":146,"text":"\t\tif (!$content)"},{"line":147,"text":"\t\t{"},{"line":148,"text":"\t\t\treturn null;"}],"line":142,"text":"\tpublic function getApiOutput(UserAlert $alert)"},{"context":[{"line":192,"text":"\t * @return T|AbstractCollection<T>"},{"line":193,"text":"\t */"},{"line":194,"text":"\tpublic function getContent($id)"},{"line":195,"text":"\t{"},{"line":196,"text":"\t\treturn \\XF::app()->findByContentType($this->contentType, $id, $this->getEntityWith());"},{"line":197,"text":"\t}"},{"line":198,"text":""},{"line":199,"text":"\t/**"},{"line":200,"text":"\t * @return string"}],"line":194,"text":"\tpublic function getContent($id)"},{"context":[{"line":200,"text":"\t * @return string"},{"line":201,"text":"\t */"},{"line":202,"text":"\tpublic function getContentType()"},{"line":203,"text":"\t{"},{"line":204,"text":"\t\treturn $this->contentType;"},{"line":205,"text":"\t}"},{"line":206,"text":""},{"line":207,"text":"\t/**"},{"line":208,"text":"\t * An array of alert actions which can be opted out of for this type."}],"line":202,"text":"\tpublic function getContentType()"},{"context":[{"line":210,"text":"\t * @return list<string>"},{"line":211,"text":"\t */"},{"line":212,"text":"\tpublic function getOptOutActions()"},{"line":213,"text":"\t{"},{"line":214,"text":"\t\treturn [];"},{"line":215,"text":"\t}"},{"line":216,"text":""},{"line":217,"text":"\t/**"},{"line":218,"text":"\t * The display order of this type's alert opt outs."}],"line":212,"text":"\tpublic function getOptOutActions()"}],"path":"/var/www/forums/newfi/public/src/XF/Alert/AbstractHandler.php","present":true,"sha256":"1d48488be1e561809a8d53ea9f43a3de2f04e70c5cc7c7e9a334fe12abcd2992"},"post_handler":{"bytes":504,"matches":[{"context":[{"line":6,"text":" * @extends AbstractHandler<\\XF\\Entity\\Post>"},{"line":7,"text":" */"},{"line":8,"text":"class PostHandler extends AbstractHandler"},{"line":9,"text":"{"},{"line":10,"text":"\tpublic function getEntityWith()"},{"line":11,"text":"\t{"},{"line":12,"text":"\t\t$visitor = \\XF::visitor();"},{"line":13,"text":""},{"line":14,"text":"\t\treturn ['Thread', 'Thread.Forum', 'Thread.Forum.Node.Permissions|' . $visitor->permission_combination_id];"}],"line":8,"text":"class PostHandler extends AbstractHandler"},{"context":[{"line":8,"text":"class PostHandler extends AbstractHandler"},{"line":9,"text":"{"},{"line":10,"text":"\tpublic function getEntityWith()"},{"line":11,"text":"\t{"},{"line":12,"text":"\t\t$visitor = \\XF::visitor();"},{"line":13,"text":""},{"line":14,"text":"\t\treturn ['Thread', 'Thread.Forum', 'Thread.Forum.Node.Permissions|' . $visitor->permission_combination_id];"},{"line":15,"text":"\t}"},{"line":16,"text":""}],"line":10,"text":"\tpublic function getEntityWith()"},{"context":[{"line":15,"text":"\t}"},{"line":16,"text":""},{"line":17,"text":"\tpublic function getOptOutActions()"},{"line":18,"text":"\t{"},{"line":19,"text":"\t\treturn ["},{"line":20,"text":"\t\t\t'forumwatch_insert',"},{"line":21,"text":"\t\t\t'insert',"},{"line":22,"text":"\t\t\t'quote',"},{"line":23,"text":"\t\t\t'mention',"}],"line":17,"text":"\tpublic function getOptOutActions()"},{"context":[{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function getOptOutDisplayOrder()"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\treturn 100;"},{"line":31,"text":"\t}"},{"line":32,"text":"}"}],"line":28,"text":"\tpublic function getOptOutDisplayOrder()"}],"path":"/var/www/forums/newfi/public/src/XF/Alert/PostHandler.php","present":true,"sha256":"d74153b3b727580b34214db2d787695b04d7969a2f251d3575f5fad1389013b1"},"service_worker":{"bytes":6000,"matches":[{"context":[{"line":38,"text":"{"},{"line":39,"text":"\tconst clientId = event.source.id"},{"line":40,"text":"\tconst message = event.data"},{"line":41,"text":"\tif (typeof message !== 'object' || message === null)"},{"line":42,"text":"\t{"},{"line":43,"text":"\t\tconsole.error('Invalid message:', message)"},{"line":44,"text":"\t\treturn"},{"line":45,"text":"\t}"},{"line":46,"text":""}],"line":40,"text":"\tconst message = event.data"},{"context":[{"line":83,"text":"})"},{"line":84,"text":""},{"line":85,"text":"self.addEventListener('push', event =>"},{"line":86,"text":"{"},{"line":87,"text":"\tif (!(self.Notification && self.Notification.permission === 'granted'))"},{"line":88,"text":"\t{"},{"line":89,"text":"\t\treturn"},{"line":90,"text":"\t}"},{"line":91,"text":""}],"line":85,"text":"self.addEventListener('push', event =>"},{"context":[{"line":94,"text":"\ttry"},{"line":95,"text":"\t{"},{"line":96,"text":"\t\tdata = event.data.json()"},{"line":97,"text":"\t}"},{"line":98,"text":"\tcatch (e)"},{"line":99,"text":"\t{"},{"line":100,"text":"\t\tconsole.warn('Received push notification but payload not in the expected format.', e)"},{"line":101,"text":"\t\tconsole.warn('Received data:', event.data.text())"},{"line":102,"text":"\t\treturn"}],"line":96,"text":"\t\tdata = event.data.json()"},{"context":[{"line":99,"text":"\t{"},{"line":100,"text":"\t\tconsole.warn('Received push notification but payload not in the expected format.', e)"},{"line":101,"text":"\t\tconsole.warn('Received data:', event.data.text())"},{"line":102,"text":"\t\treturn"},{"line":103,"text":"\t}"},{"line":104,"text":""},{"line":105,"text":"\tif (!data || !data.title || !data.body)"},{"line":106,"text":"\t{"},{"line":107,"text":"\t\tconsole.warn('Received push notification but no payload data or required fields missing.', data)"}],"line":101,"text":"\t\tconsole.warn('Received data:', event.data.text())"},{"context":[{"line":123,"text":"\t}"},{"line":124,"text":""},{"line":125,"text":"\tconst notificationPromise = self.registration.showNotification(data.title, options)"},{"line":126,"text":""},{"line":127,"text":"\tif ('setAppBadge' in self.navigator && 'clearAppBadge' in self.navigator)"},{"line":128,"text":"\t{"},{"line":129,"text":"\t\tlet newCount = parseInt(String(data.total_unread).replace(/[,. ]/g, ''))"},{"line":130,"text":""},{"line":131,"text":"\t\tif (newCount)"}],"line":125,"text":"\tconst notificationPromise = self.registration.showNotification(data.title, options)"},{"context":[{"line":142,"text":"})"},{"line":143,"text":""},{"line":144,"text":"self.addEventListener('notificationclick', event =>"},{"line":145,"text":"{"},{"line":146,"text":"\tconst notification = event.notification"},{"line":147,"text":"\tnotification.close()"},{"line":148,"text":""},{"line":149,"text":"\tconst url = notification.data.url"},{"line":150,"text":"\tif (!url)"}],"line":144,"text":"self.addEventListener('notificationclick', event =>"},{"context":[{"line":147,"text":"\tnotification.close()"},{"line":148,"text":""},{"line":149,"text":"\tconst url = notification.data.url"},{"line":150,"text":"\tif (!url)"},{"line":151,"text":"\t{"},{"line":152,"text":"\t\treturn"},{"line":153,"text":"\t}"},{"line":154,"text":""},{"line":155,"text":"\tconst urlToOpen = new URL(url, self.location.origin).href"}],"line":149,"text":"\tconst url = notification.data.url"}],"path":"/var/www/forums/newfi/public/service_worker.js","present":true,"sha256":"e422cd54e00c05c4e7a7a803894b95826f2ada4a2e3e5129eba742d95dcfa4f9"},"user_alert_entity":{"bytes":6367,"matches":[{"context":[{"line":14,"text":" * @property int $user_id"},{"line":15,"text":" * @property string $username"},{"line":16,"text":" * @property string $content_type"},{"line":17,"text":" * @property int $content_id"},{"line":18,"text":" * @property string $action"},{"line":19,"text":" * @property int $event_date"},{"line":20,"text":" * @property int $view_date"},{"line":21,"text":" * @property int $read_date"},{"line":22,"text":" * @property bool $auto_read"}],"line":16,"text":" * @property string $content_type"},{"context":[{"line":15,"text":" * @property string $username"},{"line":16,"text":" * @property string $content_type"},{"line":17,"text":" * @property int $content_id"},{"line":18,"text":" * @property string $action"},{"line":19,"text":" * @property int $event_date"},{"line":20,"text":" * @property int $view_date"},{"line":21,"text":" * @property int $read_date"},{"line":22,"text":" * @property bool $auto_read"},{"line":23,"text":" * @property array|null $extra_data"}],"line":17,"text":" * @property int $content_id"},{"context":[{"line":16,"text":" * @property string $content_type"},{"line":17,"text":" * @property int $content_id"},{"line":18,"text":" * @property string $action"},{"line":19,"text":" * @property int $event_date"},{"line":20,"text":" * @property int $view_date"},{"line":21,"text":" * @property int $read_date"},{"line":22,"text":" * @property bool $auto_read"},{"line":23,"text":" * @property array|null $extra_data"},{"line":24,"text":" * @property string $depends_on_addon_id"}],"line":18,"text":" * @property string $action"},{"context":[{"line":21,"text":" * @property int $read_date"},{"line":22,"text":" * @property bool $auto_read"},{"line":23,"text":" * @property array|null $extra_data"},{"line":24,"text":" * @property string $depends_on_addon_id"},{"line":25,"text":" *"},{"line":26,"text":" * GETTERS"},{"line":27,"text":" * @property-read Entity|null $Content"},{"line":28,"text":" *"},{"line":29,"text":" * RELATIONS"}],"line":23,"text":" * @property array|null $extra_data"},{"context":[{"line":22,"text":" * @property bool $auto_read"},{"line":23,"text":" * @property array|null $extra_data"},{"line":24,"text":" * @property string $depends_on_addon_id"},{"line":25,"text":" *"},{"line":26,"text":" * GETTERS"},{"line":27,"text":" * @property-read Entity|null $Content"},{"line":28,"text":" *"},{"line":29,"text":" * RELATIONS"},{"line":30,"text":" * @property-read User|null $User"}],"line":24,"text":" * @property string $depends_on_addon_id"},{"context":[{"line":49,"text":"\t}"},{"line":50,"text":""},{"line":51,"text":"\tpublic function getHandler()"},{"line":52,"text":"\t{"},{"line":53,"text":"\t\treturn $this->getAlertRepo()->getAlertHandler($this->content_type);"},{"line":54,"text":"\t}"},{"line":55,"text":""},{"line":56,"text":"\t/**"},{"line":57,"text":"\t * @return Entity|null"}],"line":51,"text":"\tpublic function getHandler()"},{"context":[{"line":51,"text":"\tpublic function getHandler()"},{"line":52,"text":"\t{"},{"line":53,"text":"\t\treturn $this->getAlertRepo()->getAlertHandler($this->content_type);"},{"line":54,"text":"\t}"},{"line":55,"text":""},{"line":56,"text":"\t/**"},{"line":57,"text":"\t * @return Entity|null"},{"line":58,"text":"\t */"},{"line":59,"text":"\tpublic function getContent()"}],"line":53,"text":"\t\treturn $this->getAlertRepo()->getAlertHandler($this->content_type);"},{"context":[{"line":57,"text":"\t * @return Entity|null"},{"line":58,"text":"\t */"},{"line":59,"text":"\tpublic function getContent()"},{"line":60,"text":"\t{"},{"line":61,"text":"\t\t$handler = $this->getHandler();"},{"line":62,"text":"\t\treturn $handler ? $handler->getContent($this->content_id) : null;"},{"line":63,"text":"\t}"},{"line":64,"text":""},{"line":65,"text":"\tpublic function setContent(?Entity $content = null)"}],"line":59,"text":"\tpublic function getContent()"},{"context":[{"line":60,"text":"\t{"},{"line":61,"text":"\t\t$handler = $this->getHandler();"},{"line":62,"text":"\t\treturn $handler ? $handler->getContent($this->content_id) : null;"},{"line":63,"text":"\t}"},{"line":64,"text":""},{"line":65,"text":"\tpublic function setContent(?Entity $content = null)"},{"line":66,"text":"\t{"},{"line":67,"text":"\t\t$this->_getterCache['Content'] = $content;"},{"line":68,"text":"\t}"}],"line":62,"text":"\t\treturn $handler ? $handler->getContent($this->content_id) : null;"},{"context":[{"line":68,"text":"\t}"},{"line":69,"text":""},{"line":70,"text":"\tpublic function render()"},{"line":71,"text":"\t{"},{"line":72,"text":"\t\t$handler = $this->getHandler();"},{"line":73,"text":"\t\treturn $handler ? $handler->render($this) : '';"},{"line":74,"text":"\t}"},{"line":75,"text":""},{"line":76,"text":"\tpublic function isAlertRenderable()"}],"line":70,"text":"\tpublic function render()"},{"context":[{"line":209,"text":"\t}"},{"line":210,"text":""},{"line":211,"text":"\tpublic static function getStructure(Structure $structure)"},{"line":212,"text":"\t{"},{"line":213,"text":"\t\t$structure->table = 'xf_user_alert';"},{"line":214,"text":"\t\t$structure->shortName = 'XF:UserAlert';"},{"line":215,"text":"\t\t$structure->primaryKey = 'alert_id';"},{"line":216,"text":"\t\t$structure->columns = ["},{"line":217,"text":"\t\t\t'alert_id' => ['type' => self::UINT, 'autoIncrement' => true, 'nullable' => true],"}],"line":211,"text":"\tpublic static function getStructure(Structure $structure)"},{"context":[{"line":219,"text":"\t\t\t'user_id' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":220,"text":"\t\t\t'username' => ['type' => self::STR, 'maxLength' => 50, 'default' => '', 'api' => true],"},{"line":221,"text":"\t\t\t'content_type' => ['type' => self::STR, 'maxLength' => 25, 'required' => true, 'api' => true],"},{"line":222,"text":"\t\t\t'content_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":223,"text":"\t\t\t'action' => ['type' => self::STR, 'maxLength' => 30, 'required' => true, 'api' => true],"},{"line":224,"text":"\t\t\t'event_date' => ['type' => self::UINT, 'default' => \\XF::$time, 'api' => true],"},{"line":225,"text":"\t\t\t'view_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":226,"text":"\t\t\t'read_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":227,"text":"\t\t\t'auto_read' => ['type' => self::BOOL, 'default' => true, 'api' => true],"}],"line":221,"text":"\t\t\t'content_type' => ['type' => self::STR, 'maxLength' => 25, 'required' => true, 'api' => true],"},{"context":[{"line":220,"text":"\t\t\t'username' => ['type' => self::STR, 'maxLength' => 50, 'default' => '', 'api' => true],"},{"line":221,"text":"\t\t\t'content_type' => ['type' => self::STR, 'maxLength' => 25, 'required' => true, 'api' => true],"},{"line":222,"text":"\t\t\t'content_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":223,"text":"\t\t\t'action' => ['type' => self::STR, 'maxLength' => 30, 'required' => true, 'api' => true],"},{"line":224,"text":"\t\t\t'event_date' => ['type' => self::UINT, 'default' => \\XF::$time, 'api' => true],"},{"line":225,"text":"\t\t\t'view_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":226,"text":"\t\t\t'read_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":227,"text":"\t\t\t'auto_read' => ['type' => self::BOOL, 'default' => true, 'api' => true],"},{"line":228,"text":"\t\t\t'extra_data' => ['type' => self::JSON_ARRAY, 'default' => []],"}],"line":222,"text":"\t\t\t'content_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"context":[{"line":221,"text":"\t\t\t'content_type' => ['type' => self::STR, 'maxLength' => 25, 'required' => true, 'api' => true],"},{"line":222,"text":"\t\t\t'content_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":223,"text":"\t\t\t'action' => ['type' => self::STR, 'maxLength' => 30, 'required' => true, 'api' => true],"},{"line":224,"text":"\t\t\t'event_date' => ['type' => self::UINT, 'default' => \\XF::$time, 'api' => true],"},{"line":225,"text":"\t\t\t'view_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":226,"text":"\t\t\t'read_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":227,"text":"\t\t\t'auto_read' => ['type' => self::BOOL, 'default' => true, 'api' => true],"},{"line":228,"text":"\t\t\t'extra_data' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":229,"text":"\t\t\t'depends_on_addon_id' => ['type' => self::BINARY, 'maxLength' => 50, 'default' => ''],"}],"line":223,"text":"\t\t\t'action' => ['type' => self::STR, 'maxLength' => 30, 'required' => true, 'api' => true],"},{"context":[{"line":226,"text":"\t\t\t'read_date' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":227,"text":"\t\t\t'auto_read' => ['type' => self::BOOL, 'default' => true, 'api' => true],"},{"line":228,"text":"\t\t\t'extra_data' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":229,"text":"\t\t\t'depends_on_addon_id' => ['type' => self::BINARY, 'maxLength' => 50, 'default' => ''],"},{"line":230,"text":"\t\t];"},{"line":231,"text":"\t\t$structure->getters = ["},{"line":232,"text":"\t\t\t'Content' => true,"},{"line":233,"text":"\t\t];"},{"line":234,"text":"\t\t$structure->relations = ["}],"line":228,"text":"\t\t\t'extra_data' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"context":[{"line":227,"text":"\t\t\t'auto_read' => ['type' => self::BOOL, 'default' => true, 'api' => true],"},{"line":228,"text":"\t\t\t'extra_data' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":229,"text":"\t\t\t'depends_on_addon_id' => ['type' => self::BINARY, 'maxLength' => 50, 'default' => ''],"},{"line":230,"text":"\t\t];"},{"line":231,"text":"\t\t$structure->getters = ["},{"line":232,"text":"\t\t\t'Content' => true,"},{"line":233,"text":"\t\t];"},{"line":234,"text":"\t\t$structure->relations = ["},{"line":235,"text":"\t\t\t'User' => ["}],"line":229,"text":"\t\t\t'depends_on_addon_id' => ['type' => self::BINARY, 'maxLength' => 50, 'default' => ''],"},{"context":[{"line":249,"text":"\t\t\t\t'entity' => 'XF:AddOn',"},{"line":250,"text":"\t\t\t\t'type' => self::TO_ONE,"},{"line":251,"text":"\t\t\t\t'conditions' => [['addon_id', '=', '$depends_on_addon_id']],"},{"line":252,"text":"\t\t\t\t'primary' => true,"},{"line":253,"text":"\t\t\t],"},{"line":254,"text":"\t\t];"},{"line":255,"text":"\t\t$structure->options = ["},{"line":256,"text":"\t\t\t'force_unread_in_ui' => false,"},{"line":257,"text":"\t\t];"}],"line":251,"text":"\t\t\t\t'conditions' => [['addon_id', '=', '$depends_on_addon_id']],"}],"path":"/var/www/forums/newfi/public/src/XF/Entity/UserAlert.php","present":true,"sha256":"a749d5470269ec4fa9cc9fe419b9e4446208d8914e905ce5d8442292494a5cd2"},"user_alert_repo":{"bytes":21675,"matches":[{"context":[{"line":12,"text":"use XF\\Mvc\\Entity\\Finder;"},{"line":13,"text":"use XF\\Mvc\\Entity\\Repository;"},{"line":14,"text":"use XF\\Service\\Alert\\PusherService;"},{"line":15,"text":""},{"line":16,"text":"use function count, is_array;"},{"line":17,"text":""},{"line":18,"text":"class UserAlertRepository extends Repository"},{"line":19,"text":"{"},{"line":20,"text":"\t/**"}],"line":14,"text":"use XF\\Service\\Alert\\PusherService;"},{"context":[{"line":24,"text":"\t * @return UserAlertFinder"},{"line":25,"text":"\t */"},{"line":26,"text":"\tpublic function findAlertsForUser($userId, $cutOff = null)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$finder = $this->finder(UserAlertFinder::class)"},{"line":29,"text":"\t\t\t->where('alerted_user_id', $userId)"},{"line":30,"text":"\t\t\t->whereAddOnActive(["},{"line":31,"text":"\t\t\t\t'column' => 'depends_on_addon_id',"},{"line":32,"text":"\t\t\t])"}],"line":26,"text":"\tpublic function findAlertsForUser($userId, $cutOff = null)"},{"context":[{"line":55,"text":"\t * @return bool"},{"line":56,"text":"\t */"},{"line":57,"text":"\tpublic function userReceivesAlert(User $receiver, $senderId, $contentType, $action)"},{"line":58,"text":"\t{"},{"line":59,"text":"\t\tif (!$receiver->user_id || $receiver->is_banned)"},{"line":60,"text":"\t\t{"},{"line":61,"text":"\t\t\treturn false;"},{"line":62,"text":"\t\t}"},{"line":63,"text":""}],"line":57,"text":"\tpublic function userReceivesAlert(User $receiver, $senderId, $contentType, $action)"},{"context":[{"line":73,"text":""},{"line":74,"text":"\t\t$userOption = $receiver->Option;"},{"line":75,"text":"\t\treturn $userOption->doesReceiveAlert($contentType, $action);"},{"line":76,"text":"\t}"},{"line":77,"text":""},{"line":78,"text":"\t/**"},{"line":79,"text":"\t * @param int $senderId"},{"line":80,"text":"\t * @param string $contentType"},{"line":81,"text":"\t * @param string $action"}],"line":75,"text":"\t\treturn $userOption->doesReceiveAlert($contentType, $action);"},{"context":[{"line":83,"text":"\t * @return bool"},{"line":84,"text":"\t */"},{"line":85,"text":"\tpublic function userReceivesPush(User $receiver, $senderId, $contentType, $action)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\tif (!$receiver->user_id || $receiver->is_banned)"},{"line":88,"text":"\t\t{"},{"line":89,"text":"\t\t\treturn false;"},{"line":90,"text":"\t\t}"},{"line":91,"text":""}],"line":85,"text":"\tpublic function userReceivesPush(User $receiver, $senderId, $contentType, $action)"},{"context":[{"line":101,"text":""},{"line":102,"text":"\t\t$userOption = $receiver->Option;"},{"line":103,"text":"\t\treturn $userOption->doesReceivePush($contentType, $action);"},{"line":104,"text":"\t}"},{"line":105,"text":""},{"line":106,"text":"\t/**"},{"line":107,"text":"\t * @param string $contentType"},{"line":108,"text":"\t * @param int $contentId"},{"line":109,"text":"\t * @param string $action"}],"line":103,"text":"\t\treturn $userOption->doesReceivePush($contentType, $action);"},{"context":[{"line":113,"text":"\t * @return bool"},{"line":114,"text":"\t */"},{"line":115,"text":"\tpublic function alertFromUser("},{"line":116,"text":"\t\tUser $receiver,"},{"line":117,"text":"\t\t?User $sender,"},{"line":118,"text":"\t\t$contentType,"},{"line":119,"text":"\t\t$contentId,"},{"line":120,"text":"\t\t$action,"},{"line":121,"text":"\t\tarray $extra = [],"}],"line":115,"text":"\tpublic function alertFromUser("},{"context":[{"line":126,"text":"\t\t$senderName = $sender ? $sender->username : '';"},{"line":127,"text":""},{"line":128,"text":"\t\tif (!$this->userReceivesAlert($receiver, $senderId, $contentType, $action))"},{"line":129,"text":"\t\t{"},{"line":130,"text":"\t\t\treturn false;"},{"line":131,"text":"\t\t}"},{"line":132,"text":""},{"line":133,"text":"\t\treturn $this->insertAlert($receiver->user_id, $senderId, $senderName, $contentType, $contentId, $action, $extra, $options);"},{"line":134,"text":"\t}"}],"line":128,"text":"\t\tif (!$this->userReceivesAlert($receiver, $senderId, $contentType, $action))"},{"context":[{"line":131,"text":"\t\t}"},{"line":132,"text":""},{"line":133,"text":"\t\treturn $this->insertAlert($receiver->user_id, $senderId, $senderName, $contentType, $contentId, $action, $extra, $options);"},{"line":134,"text":"\t}"},{"line":135,"text":""},{"line":136,"text":"\t/**"},{"line":137,"text":"\t * @param int $senderId"},{"line":138,"text":"\t * @param string $senderName"},{"line":139,"text":"\t * @param string $contentType"}],"line":133,"text":"\t\treturn $this->insertAlert($receiver->user_id, $senderId, $senderName, $contentType, $contentId, $action, $extra, $options);"},{"context":[{"line":145,"text":"\t * @return bool"},{"line":146,"text":"\t */"},{"line":147,"text":"\tpublic function alert("},{"line":148,"text":"\t\tUser $receiver,"},{"line":149,"text":"\t\t$senderId,"},{"line":150,"text":"\t\t$senderName,"},{"line":151,"text":"\t\t$contentType,"},{"line":152,"text":"\t\t$contentId,"},{"line":153,"text":"\t\t$action,"}],"line":147,"text":"\tpublic function alert("},{"context":[{"line":156,"text":"\t)"},{"line":157,"text":"\t{"},{"line":158,"text":"\t\tif (!$this->userReceivesAlert($receiver, $senderId, $contentType, $action))"},{"line":159,"text":"\t\t{"},{"line":160,"text":"\t\t\treturn false;"},{"line":161,"text":"\t\t}"},{"line":162,"text":""},{"line":163,"text":"\t\treturn $this->insertAlert($receiver->user_id, $senderId, $senderName, $contentType, $contentId, $action, $extra, $options);"},{"line":164,"text":"\t}"}],"line":158,"text":"\t\tif (!$this->userReceivesAlert($receiver, $senderId, $contentType, $action))"},{"context":[{"line":161,"text":"\t\t}"},{"line":162,"text":""},{"line":163,"text":"\t\treturn $this->insertAlert($receiver->user_id, $senderId, $senderName, $contentType, $contentId, $action, $extra, $options);"},{"line":164,"text":"\t}"},{"line":165,"text":""},{"line":166,"text":"\t/**"},{"line":167,"text":"\t * @param int $receiverId"},{"line":168,"text":"\t * @param int $senderId"},{"line":169,"text":"\t * @param string $senderName"}],"line":163,"text":"\t\treturn $this->insertAlert($receiver->user_id, $senderId, $senderName, $contentType, $contentId, $action, $extra, $options);"},{"context":[{"line":176,"text":"\t * @return bool"},{"line":177,"text":"\t */"},{"line":178,"text":"\tpublic function insertAlert("},{"line":179,"text":"\t\t$receiverId,"},{"line":180,"text":"\t\t$senderId,"},{"line":181,"text":"\t\t$senderName,"},{"line":182,"text":"\t\t$contentType,"},{"line":183,"text":"\t\t$contentId,"},{"line":184,"text":"\t\t$action,"}],"line":178,"text":"\tpublic function insertAlert("},{"context":[{"line":210,"text":"\t\t}"},{"line":211,"text":""},{"line":212,"text":"\t\t$alert = $this->em->create(UserAlert::class);"},{"line":213,"text":"\t\t$alert->alerted_user_id = $receiverId;"},{"line":214,"text":"\t\t$alert->user_id = $senderId;"},{"line":215,"text":"\t\t$alert->username = $senderName;"},{"line":216,"text":"\t\t$alert->content_type = $contentType;"},{"line":217,"text":"\t\t$alert->content_id = $contentId;"},{"line":218,"text":"\t\t$alert->action = $action;"}],"line":212,"text":"\t\t$alert = $this->em->create(UserAlert::class);"},{"context":[{"line":223,"text":"\t\t$alert->save();"},{"line":224,"text":""},{"line":225,"text":"\t\tif ($alert->Receiver && $this->userReceivesPush($alert->Receiver, $senderId, $contentType, $action))"},{"line":226,"text":"\t\t{"},{"line":227,"text":"\t\t\t$pusher = $this->app()->service(PusherService::class, $alert->Receiver, $alert);"},{"line":228,"text":"\t\t\t$pusher->push();"},{"line":229,"text":"\t\t}"},{"line":230,"text":""},{"line":231,"text":"\t\treturn true;"}],"line":225,"text":"\t\tif ($alert->Receiver && $this->userReceivesPush($alert->Receiver, $senderId, $contentType, $action))"},{"context":[{"line":225,"text":"\t\tif ($alert->Receiver && $this->userReceivesPush($alert->Receiver, $senderId, $contentType, $action))"},{"line":226,"text":"\t\t{"},{"line":227,"text":"\t\t\t$pusher = $this->app()->service(PusherService::class, $alert->Receiver, $alert);"},{"line":228,"text":"\t\t\t$pusher->push();"},{"line":229,"text":"\t\t}"},{"line":230,"text":""},{"line":231,"text":"\t\treturn true;"},{"line":232,"text":"\t}"},{"line":233,"text":""}],"line":227,"text":"\t\t\t$pusher = $this->app()->service(PusherService::class, $alert->Receiver, $alert);"},{"context":[{"line":226,"text":"\t\t{"},{"line":227,"text":"\t\t\t$pusher = $this->app()->service(PusherService::class, $alert->Receiver, $alert);"},{"line":228,"text":"\t\t\t$pusher->push();"},{"line":229,"text":"\t\t}"},{"line":230,"text":""},{"line":231,"text":"\t\treturn true;"},{"line":232,"text":"\t}"},{"line":233,"text":""},{"line":234,"text":"\t/**"}],"line":228,"text":"\t\t\t$pusher->push();"},{"context":[{"line":238,"text":"\t * @param string $action"},{"line":239,"text":"\t */"},{"line":240,"text":"\tpublic function fastDeleteAlertsToUser($toUserId, $contentType, $contentId, $action)"},{"line":241,"text":"\t{"},{"line":242,"text":"\t\t$finder = $this->finder(UserAlertFinder::class)"},{"line":243,"text":"\t\t\t->where(["},{"line":244,"text":"\t\t\t\t'content_type' => $contentType,"},{"line":245,"text":"\t\t\t\t'content_id' => $contentId,"},{"line":246,"text":"\t\t\t\t'action' => $action,"}],"line":240,"text":"\tpublic function fastDeleteAlertsToUser($toUserId, $contentType, $contentId, $action)"},{"context":[{"line":258,"text":"\t * @param string $action"},{"line":259,"text":"\t */"},{"line":260,"text":"\tpublic function fastDeleteAlertsFromUser($fromUserId, $contentType, $contentId, $action)"},{"line":261,"text":"\t{"},{"line":262,"text":"\t\t$finder = $this->finder(UserAlertFinder::class)"},{"line":263,"text":"\t\t\t->where(["},{"line":264,"text":"\t\t\t\t'content_type' => $contentType,"},{"line":265,"text":"\t\t\t\t'content_id' => $contentId,"},{"line":266,"text":"\t\t\t\t'action' => $action,"}],"line":260,"text":"\tpublic function fastDeleteAlertsFromUser($fromUserId, $contentType, $contentId, $action)"},{"context":[{"line":276,"text":"\t * @param int[]|int $contentId"},{"line":277,"text":"\t */"},{"line":278,"text":"\tpublic function fastDeleteAlertsForContent($contentType, $contentId)"},{"line":279,"text":"\t{"},{"line":280,"text":"\t\t$finder = $this->finder(UserAlertFinder::class)"},{"line":281,"text":"\t\t\t->where(["},{"line":282,"text":"\t\t\t\t'content_type' => $contentType,"},{"line":283,"text":"\t\t\t\t'content_id' => $contentId,"},{"line":284,"text":"\t\t\t]);"}],"line":278,"text":"\tpublic function fastDeleteAlertsForContent($contentType, $contentId)"},{"context":[{"line":292,"text":"\t * @return int Number of alerts deleted"},{"line":293,"text":"\t */"},{"line":294,"text":"\tprotected function deleteAlertsInternal(Finder $matches)"},{"line":295,"text":"\t{"},{"line":296,"text":"\t\t$results = $matches->fetchColumns('alert_id', 'alerted_user_id', 'view_date', 'read_date');"},{"line":297,"text":"\t\tif (!$results)"},{"line":298,"text":"\t\t{"},{"line":299,"text":"\t\t\treturn 0;"},{"line":300,"text":"\t\t}"}],"line":294,"text":"\tprotected function deleteAlertsInternal(Finder $matches)"},{"context":[{"line":362,"text":"\t * @param int|null $viewDate"},{"line":363,"text":"\t */"},{"line":364,"text":"\tpublic function markUserAlertsViewed(User $user, $viewDate = null)"},{"line":365,"text":"\t{"},{"line":366,"text":"\t\t$this->markAllUserAlertsViewedOrRead($user, $viewDate);"},{"line":367,"text":"\t}"},{"line":368,"text":""},{"line":369,"text":"\t/**"},{"line":370,"text":"\t * @param int|null $viewDate"}],"line":364,"text":"\tpublic function markUserAlertsViewed(User $user, $viewDate = null)"},{"context":[{"line":370,"text":"\t * @param int|null $viewDate"},{"line":371,"text":"\t */"},{"line":372,"text":"\tpublic function markUserAlertViewed(UserAlert $alert, $viewDate = null)"},{"line":373,"text":"\t{"},{"line":374,"text":"\t\tif (!$alert->Receiver || !$alert->isUnviewed())"},{"line":375,"text":"\t\t{"},{"line":376,"text":"\t\t\treturn;"},{"line":377,"text":"\t\t}"},{"line":378,"text":""}],"line":372,"text":"\tpublic function markUserAlertViewed(UserAlert $alert, $viewDate = null)"},{"context":[{"line":387,"text":"\t * @param int|null $readDate"},{"line":388,"text":"\t */"},{"line":389,"text":"\tpublic function markUserAlertsRead(User $user, $readDate = null)"},{"line":390,"text":"\t{"},{"line":391,"text":"\t\t$this->markAllUserAlertsViewedOrRead($user, $readDate, true);"},{"line":392,"text":"\t}"},{"line":393,"text":""},{"line":394,"text":"\t/**"},{"line":395,"text":"\t * @param AbstractCollection<UserAlert> $alerts"}],"line":389,"text":"\tpublic function markUserAlertsRead(User $user, $readDate = null)"},{"context":[{"line":396,"text":"\t * @param int|null $readDate"},{"line":397,"text":"\t */"},{"line":398,"text":"\tpublic function autoMarkUserAlertsRead("},{"line":399,"text":"\t\tAbstractCollection $alerts,"},{"line":400,"text":"\t\tUser $user,"},{"line":401,"text":"\t\t$readDate = null"},{"line":402,"text":"\t)"},{"line":403,"text":"\t{"},{"line":404,"text":"\t\t$alerts = $alerts->filter(function (UserAlert $alert): bool"}],"line":398,"text":"\tpublic function autoMarkUserAlertsRead("},{"context":[{"line":413,"text":"\t * @param AbstractCollection<UserAlert> $alerts"},{"line":414,"text":"\t */"},{"line":415,"text":"\tprotected function markSpecificUserAlertsRead("},{"line":416,"text":"\t\tAbstractCollection $alerts,"},{"line":417,"text":"\t\tUser $user,"},{"line":418,"text":"\t\t?int $readDate = null"},{"line":419,"text":"\t)"},{"line":420,"text":"\t{"},{"line":421,"text":"\t\tif (!$user->user_id)"}],"line":415,"text":"\tprotected function markSpecificUserAlertsRead("},{"context":[{"line":455,"text":"\t * @param int|null $readDate"},{"line":456,"text":"\t */"},{"line":457,"text":"\tpublic function markUserAlertsReadForContent("},{"line":458,"text":"\t\t$contentType,"},{"line":459,"text":"\t\t$contentIds,"},{"line":460,"text":"\t\t$onlyActions = null,"},{"line":461,"text":"\t\t?User $user = null,"},{"line":462,"text":"\t\t$readDate = null"},{"line":463,"text":"\t)"}],"line":457,"text":"\tpublic function markUserAlertsReadForContent("},{"context":[{"line":517,"text":"\t * @param int|null $readDate"},{"line":518,"text":"\t */"},{"line":519,"text":"\tpublic function markUserAlertRead(UserAlert $alert, $readDate = null)"},{"line":520,"text":"\t{"},{"line":521,"text":"\t\tif (!$alert->Receiver || !$alert->isUnread())"},{"line":522,"text":"\t\t{"},{"line":523,"text":"\t\t\treturn;"},{"line":524,"text":"\t\t}"},{"line":525,"text":""}],"line":519,"text":"\tpublic function markUserAlertRead(UserAlert $alert, $readDate = null)"},{"context":[{"line":532,"text":"\t}"},{"line":533,"text":""},{"line":534,"text":"\tpublic function markUserAlertUnread("},{"line":535,"text":"\t\tUserAlert $alert,"},{"line":536,"text":"\t\tbool $disableAutoRead = true"},{"line":537,"text":"\t)"},{"line":538,"text":"\t{"},{"line":539,"text":"\t\tif (!$alert->Receiver || $alert->isUnread())"},{"line":540,"text":"\t\t{"}],"line":534,"text":"\tpublic function markUserAlertUnread("},{"context":[{"line":555,"text":"\t * not viewable."},{"line":556,"text":"\t */"},{"line":557,"text":"\tpublic function markInaccessibleAlertsRead(User $user)"},{"line":558,"text":"\t{"},{"line":559,"text":"\t\t$unreadAlerts = $this->finder(UserAlertFinder::class)"},{"line":560,"text":"\t\t\t->where(["},{"line":561,"text":"\t\t\t\t'alerted_user_id' => $user->user_id,"},{"line":562,"text":"\t\t\t\t'read_date' => 0,"},{"line":563,"text":"\t\t\t])"}],"line":557,"text":"\tpublic function markInaccessibleAlertsRead(User $user)"},{"context":[{"line":582,"text":"\t}"},{"line":583,"text":""},{"line":584,"text":"\tprotected function markAllUserAlertsViewedOrRead("},{"line":585,"text":"\t\tUser $user,"},{"line":586,"text":"\t\t?int $viewDate = null,"},{"line":587,"text":"\t\tbool $markRead = false"},{"line":588,"text":"\t): void"},{"line":589,"text":"\t{"},{"line":590,"text":"\t\tif ($this->app()->request()->isPrefetch())"}],"line":584,"text":"\tprotected function markAllUserAlertsViewedOrRead("},{"context":[{"line":652,"text":"\t * @param list<int> $alertIds"},{"line":653,"text":"\t */"},{"line":654,"text":"\tprotected function markUserAlertsViewedOrRead("},{"line":655,"text":"\t\tUser $user,"},{"line":656,"text":"\t\tarray $alertIds,"},{"line":657,"text":"\t\t?int $viewDate = null,"},{"line":658,"text":"\t\tbool $markRead = false,"},{"line":659,"text":"\t\tbool $updateAlertEntities = false"},{"line":660,"text":"\t): void"}],"line":654,"text":"\tprotected function markUserAlertsViewedOrRead("},{"context":[{"line":774,"text":"\t * @param list<int> $alertIds"},{"line":775,"text":"\t */"},{"line":776,"text":"\tprotected function markUserAlertsUnread("},{"line":777,"text":"\t\tUser $user,"},{"line":778,"text":"\t\tarray $alertIds,"},{"line":779,"text":"\t\tbool $disableAutoRead = true,"},{"line":780,"text":"\t\tbool $updateAlertEntities = false"},{"line":781,"text":"\t): void"},{"line":782,"text":"\t{"}],"line":776,"text":"\tprotected function markUserAlertsUnread("},{"context":[{"line":884,"text":"\t * @return int Number of alerts deleted"},{"line":885,"text":"\t */"},{"line":886,"text":"\tpublic function pruneViewedAlerts($cutOff = null)"},{"line":887,"text":"\t{"},{"line":888,"text":"\t\t$cutOff = $cutOff ?? \\XF::$time - $this->options()->alertExpiryDays * 86400;"},{"line":889,"text":""},{"line":890,"text":"\t\t$finder = $this->finder(UserAlertFinder::class)"},{"line":891,"text":"\t\t\t->where('view_date', '>', 0)"},{"line":892,"text":"\t\t\t->where('view_date', '<', $cutOff)"}],"line":886,"text":"\tpublic function pruneViewedAlerts($cutOff = null)"},{"context":[{"line":901,"text":"\t * @return int Number of alerts deleted"},{"line":902,"text":"\t */"},{"line":903,"text":"\tpublic function pruneUnviewedAlerts($cutOff = null)"},{"line":904,"text":"\t{"},{"line":905,"text":"\t\t$cutOff = $cutOff ?? \\XF::$time - 30 * 86400;"},{"line":906,"text":""},{"line":907,"text":"\t\t$finder = $this->finder(UserAlertFinder::class)"},{"line":908,"text":"\t\t\t->where('view_date', 0)"},{"line":909,"text":"\t\t\t->where('event_date', '<', $cutOff)"}],"line":903,"text":"\tpublic function pruneUnviewedAlerts($cutOff = null)"},{"context":[{"line":916,"text":"\t * @return bool"},{"line":917,"text":"\t */"},{"line":918,"text":"\tpublic function updateUnviewedCountForUser(User $user)"},{"line":919,"text":"\t{"},{"line":920,"text":"\t\tif (!$user->user_id)"},{"line":921,"text":"\t\t{"},{"line":922,"text":"\t\t\treturn false;"},{"line":923,"text":"\t\t}"},{"line":924,"text":""}],"line":918,"text":"\tpublic function updateUnviewedCountForUser(User $user)"},{"context":[{"line":936,"text":"\t * @return bool"},{"line":937,"text":"\t */"},{"line":938,"text":"\tpublic function updateUnreadCountForUser(User $user)"},{"line":939,"text":"\t{"},{"line":940,"text":"\t\tif (!$user->user_id)"},{"line":941,"text":"\t\t{"},{"line":942,"text":"\t\t\treturn false;"},{"line":943,"text":"\t\t}"},{"line":944,"text":""}],"line":938,"text":"\tpublic function updateUnreadCountForUser(User $user)"},{"context":[{"line":956,"text":"\t * @return array<string, AbstractHandler>"},{"line":957,"text":"\t */"},{"line":958,"text":"\tpublic function getAlertHandlers()"},{"line":959,"text":"\t{"},{"line":960,"text":"\t\t$handlers = [];"},{"line":961,"text":""},{"line":962,"text":"\t\tforeach (\\XF::app()->getContentTypeField('alert_handler_class') AS $contentType => $handlerClass)"},{"line":963,"text":"\t\t{"},{"line":964,"text":"\t\t\tif (!class_exists($handlerClass))"}],"line":958,"text":"\tpublic function getAlertHandlers()"},{"context":[{"line":980,"text":"\t * @return AbstractHandler|null"},{"line":981,"text":"\t */"},{"line":982,"text":"\tpublic function getAlertHandler($type, $throw = false)"},{"line":983,"text":"\t{"},{"line":984,"text":"\t\t$handlerClass = \\XF::app()->getContentTypeFieldValue($type, 'alert_handler_class');"},{"line":985,"text":"\t\tif (!$handlerClass)"},{"line":986,"text":"\t\t{"},{"line":987,"text":"\t\t\tif ($throw)"},{"line":988,"text":"\t\t\t{"}],"line":982,"text":"\tpublic function getAlertHandler($type, $throw = false)"},{"context":[{"line":1010,"text":"\t * @param AbstractCollection<UserAlert> $alerts"},{"line":1011,"text":"\t */"},{"line":1012,"text":"\tpublic function addContentToAlerts($alerts)"},{"line":1013,"text":"\t{"},{"line":1014,"text":"\t\t$contentMap = [];"},{"line":1015,"text":"\t\tforeach ($alerts AS $key => $alert)"},{"line":1016,"text":"\t\t{"},{"line":1017,"text":"\t\t\t$contentType = $alert->content_type;"},{"line":1018,"text":"\t\t\tif (!isset($contentMap[$contentType]))"}],"line":1012,"text":"\tpublic function addContentToAlerts($alerts)"},{"context":[{"line":1026,"text":"\t\tforeach ($contentMap AS $contentType => $contentIds)"},{"line":1027,"text":"\t\t{"},{"line":1028,"text":"\t\t\t$handler = $this->getAlertHandler($contentType);"},{"line":1029,"text":"\t\t\tif (!$handler)"},{"line":1030,"text":"\t\t\t{"},{"line":1031,"text":"\t\t\t\tcontinue;"},{"line":1032,"text":"\t\t\t}"},{"line":1033,"text":""},{"line":1034,"text":"\t\t\t$data = $handler->getContent($contentIds);"}],"line":1028,"text":"\t\t\t$handler = $this->getAlertHandler($contentType);"},{"context":[{"line":1044,"text":"\t * @return array<string, array<string, string|\\Stringable>>"},{"line":1045,"text":"\t */"},{"line":1046,"text":"\tpublic function getAlertOptOuts()"},{"line":1047,"text":"\t{"},{"line":1048,"text":"\t\t$handlers = $this->getAlertHandlers();"},{"line":1049,"text":""},{"line":1050,"text":"\t\t$alertOptOuts = [];"},{"line":1051,"text":"\t\t$orderedTypes = [];"},{"line":1052,"text":""}],"line":1046,"text":"\tpublic function getAlertOptOuts()"},{"context":[{"line":1046,"text":"\tpublic function getAlertOptOuts()"},{"line":1047,"text":"\t{"},{"line":1048,"text":"\t\t$handlers = $this->getAlertHandlers();"},{"line":1049,"text":""},{"line":1050,"text":"\t\t$alertOptOuts = [];"},{"line":1051,"text":"\t\t$orderedTypes = [];"},{"line":1052,"text":""},{"line":1053,"text":"\t\tforeach ($handlers AS $contentType => $handler)"},{"line":1054,"text":"\t\t{"}],"line":1048,"text":"\t\t$handlers = $this->getAlertHandlers();"},{"context":[{"line":1053,"text":"\t\tforeach ($handlers AS $contentType => $handler)"},{"line":1054,"text":"\t\t{"},{"line":1055,"text":"\t\t\t$optOuts = $handler->getOptOutsMap();"},{"line":1056,"text":"\t\t\tif (!$optOuts)"},{"line":1057,"text":"\t\t\t{"},{"line":1058,"text":"\t\t\t\tcontinue;"},{"line":1059,"text":"\t\t\t}"},{"line":1060,"text":""},{"line":1061,"text":"\t\t\t$alertOptOuts[$contentType] = $optOuts;"}],"line":1055,"text":"\t\t\t$optOuts = $handler->getOptOutsMap();"},{"context":[{"line":1060,"text":""},{"line":1061,"text":"\t\t\t$alertOptOuts[$contentType] = $optOuts;"},{"line":1062,"text":"\t\t\t$orderedTypes[$contentType] = $handler->getOptOutDisplayOrder();"},{"line":1063,"text":"\t\t}"},{"line":1064,"text":"\t\tasort($orderedTypes);"},{"line":1065,"text":""},{"line":1066,"text":"\t\t$orderedOptOuts = [];"},{"line":1067,"text":"\t\tforeach ($orderedTypes AS $contentType => $null)"},{"line":1068,"text":"\t\t{"}],"line":1062,"text":"\t\t\t$orderedTypes[$contentType] = $handler->getOptOutDisplayOrder();"},{"context":[{"line":1076,"text":"\t * @return array<string, true>"},{"line":1077,"text":"\t */"},{"line":1078,"text":"\tpublic function getAlertOptOutActions()"},{"line":1079,"text":"\t{"},{"line":1080,"text":"\t\t$handlers = $this->getAlertHandlers();"},{"line":1081,"text":""},{"line":1082,"text":"\t\t$actions = [];"},{"line":1083,"text":"\t\tforeach ($handlers AS $contentType => $handler)"},{"line":1084,"text":"\t\t{"}],"line":1078,"text":"\tpublic function getAlertOptOutActions()"},{"context":[{"line":1078,"text":"\tpublic function getAlertOptOutActions()"},{"line":1079,"text":"\t{"},{"line":1080,"text":"\t\t$handlers = $this->getAlertHandlers();"},{"line":1081,"text":""},{"line":1082,"text":"\t\t$actions = [];"},{"line":1083,"text":"\t\tforeach ($handlers AS $contentType => $handler)"},{"line":1084,"text":"\t\t{"},{"line":1085,"text":"\t\t\tforeach ($handler->getOptOutActions() AS $action)"},{"line":1086,"text":"\t\t\t{"}],"line":1080,"text":"\t\t$handlers = $this->getAlertHandlers();"},{"context":[{"line":1083,"text":"\t\tforeach ($handlers AS $contentType => $handler)"},{"line":1084,"text":"\t\t{"},{"line":1085,"text":"\t\t\tforeach ($handler->getOptOutActions() AS $action)"},{"line":1086,"text":"\t\t\t{"},{"line":1087,"text":"\t\t\t\t$actions[$contentType . '_' . $action] = true;"},{"line":1088,"text":"\t\t\t}"},{"line":1089,"text":"\t\t}"},{"line":1090,"text":""},{"line":1091,"text":"\t\treturn $actions;"}],"line":1085,"text":"\t\t\tforeach ($handler->getOptOutActions() AS $action)"}],"path":"/var/www/forums/newfi/public/src/XF/Repository/UserAlertRepository.php","present":true,"sha256":"5efd6dac58b2a42da3a64db6bc36aaee2cefea1394105aa872b672b835590cd9"},"user_entity_push":{"bytes":65143,"matches":[{"context":[{"line":1051,"text":"\t}"},{"line":1052,"text":""},{"line":1053,"text":"\tpublic function canUsePushNotifications()"},{"line":1054,"text":"\t{"},{"line":1055,"text":"\t\tif (!\\XF::isPushUsable())"},{"line":1056,"text":"\t\t{"},{"line":1057,"text":"\t\t\treturn false;"},{"line":1058,"text":"\t\t}"},{"line":1059,"text":""}],"line":1053,"text":"\tpublic function canUsePushNotifications()"},{"context":[{"line":1882,"text":"\t * @api-out <perm> bool $activity_visible"},{"line":1883,"text":"\t * @api-out <cond> int $age The user's current age. Only included if available."},{"line":1884,"text":"\t * @api-out <perm|verbose> array $alert_optout"},{"line":1885,"text":"\t * @api-out <perm|verbose> string $allow_post_profile"},{"line":1886,"text":"\t * @api-out <perm|verbose> string $allow_receive_news_feed"},{"line":1887,"text":"\t * @api-out <perm|verbose> string $allow_send_personal_conversation"},{"line":1888,"text":"\t * @api-out <perm|verbose> string $allow_view_identities"},{"line":1889,"text":"\t * @api-out <perm|verbose> string $allow_view_profile"},{"line":1890,"text":"\t * @api-out object $avatar_urls Maps from size types to URL."}],"line":1884,"text":"\t * @api-out <perm|verbose> array $alert_optout"},{"context":[{"line":1917,"text":"\t * @api-out <perm> int $last_activity Unix timestamp of user's last activity, if available."},{"line":1918,"text":"\t * @api-out str $location"},{"line":1919,"text":"\t * @api-out <perm|verbose> bool $push_on_conversation"},{"line":1920,"text":"\t * @api-out <perm|verbose> array $push_optout"},{"line":1921,"text":"\t * @api-out <perm|verbose> bool $receive_admin_email"},{"line":1922,"text":"\t * @api-out <perm> array $secondary_group_ids"},{"line":1923,"text":"\t * @api-out <perm|verbose> bool $show_dob_date"},{"line":1924,"text":"\t * @api-out <perm|verbose> bool $show_dob_year"},{"line":1925,"text":"\t * @api-out str $signature"}],"line":1919,"text":"\t * @api-out <perm|verbose> bool $push_on_conversation"},{"context":[{"line":1918,"text":"\t * @api-out str $location"},{"line":1919,"text":"\t * @api-out <perm|verbose> bool $push_on_conversation"},{"line":1920,"text":"\t * @api-out <perm|verbose> array $push_optout"},{"line":1921,"text":"\t * @api-out <perm|verbose> bool $receive_admin_email"},{"line":1922,"text":"\t * @api-out <perm> array $secondary_group_ids"},{"line":1923,"text":"\t * @api-out <perm|verbose> bool $show_dob_date"},{"line":1924,"text":"\t * @api-out <perm|verbose> bool $show_dob_year"},{"line":1925,"text":"\t * @api-out str $signature"},{"line":1926,"text":"\t * @api-out <perm|verbose> string $timezone"}],"line":1920,"text":"\t * @api-out <perm|verbose> array $push_optout"},{"context":[{"line":2076,"text":"\t\t\t\t\t\t'receive_admin_email' => $option->receive_admin_email,"},{"line":2077,"text":"\t\t\t\t\t\t'email_on_conversation' => $option->email_on_conversation,"},{"line":2078,"text":"\t\t\t\t\t\t'push_on_conversation' => $option->push_on_conversation,"},{"line":2079,"text":"\t\t\t\t\t\t'creation_watch_state' => $option->creation_watch_state,"},{"line":2080,"text":"\t\t\t\t\t\t'interaction_watch_state' => $option->interaction_watch_state,"},{"line":2081,"text":"\t\t\t\t\t\t'alert_optout' => $option->alert_optout,"},{"line":2082,"text":"\t\t\t\t\t\t'push_optout' => $option->push_optout,"},{"line":2083,"text":"\t\t\t\t\t\t'use_tfa' => $option->use_tfa,"},{"line":2084,"text":"\t\t\t\t\t]);"}],"line":2078,"text":"\t\t\t\t\t\t'push_on_conversation' => $option->push_on_conversation,"},{"context":[{"line":2079,"text":"\t\t\t\t\t\t'creation_watch_state' => $option->creation_watch_state,"},{"line":2080,"text":"\t\t\t\t\t\t'interaction_watch_state' => $option->interaction_watch_state,"},{"line":2081,"text":"\t\t\t\t\t\t'alert_optout' => $option->alert_optout,"},{"line":2082,"text":"\t\t\t\t\t\t'push_optout' => $option->push_optout,"},{"line":2083,"text":"\t\t\t\t\t\t'use_tfa' => $option->use_tfa,"},{"line":2084,"text":"\t\t\t\t\t]);"},{"line":2085,"text":"\t\t\t\t\t$result->includeExtra(["},{"line":2086,"text":"\t\t\t\t\t\t'allow_view_profile' => $privacy->allow_view_profile,"},{"line":2087,"text":"\t\t\t\t\t\t'allow_post_profile' => $privacy->allow_post_profile,"}],"line":2081,"text":"\t\t\t\t\t\t'alert_optout' => $option->alert_optout,"},{"context":[{"line":2080,"text":"\t\t\t\t\t\t'interaction_watch_state' => $option->interaction_watch_state,"},{"line":2081,"text":"\t\t\t\t\t\t'alert_optout' => $option->alert_optout,"},{"line":2082,"text":"\t\t\t\t\t\t'push_optout' => $option->push_optout,"},{"line":2083,"text":"\t\t\t\t\t\t'use_tfa' => $option->use_tfa,"},{"line":2084,"text":"\t\t\t\t\t]);"},{"line":2085,"text":"\t\t\t\t\t$result->includeExtra(["},{"line":2086,"text":"\t\t\t\t\t\t'allow_view_profile' => $privacy->allow_view_profile,"},{"line":2087,"text":"\t\t\t\t\t\t'allow_post_profile' => $privacy->allow_post_profile,"},{"line":2088,"text":"\t\t\t\t\t\t'allow_send_personal_conversation' => $privacy->allow_send_personal_conversation,"}],"line":2082,"text":"\t\t\t\t\t\t'push_optout' => $option->push_optout,"},{"context":[{"line":2125,"text":"\t\t\t\t'receive_admin_email' => $option->receive_admin_email,"},{"line":2126,"text":"\t\t\t\t'email_on_conversation' => $option->email_on_conversation,"},{"line":2127,"text":"\t\t\t\t'push_on_conversation' => $option->push_on_conversation,"},{"line":2128,"text":"\t\t\t\t'creation_watch_state' => $option->creation_watch_state,"},{"line":2129,"text":"\t\t\t\t'interaction_watch_state' => $option->interaction_watch_state,"},{"line":2130,"text":"\t\t\t\t'alert_optout' => $option->alert_optout,"},{"line":2131,"text":"\t\t\t\t'push_optout' => $option->push_optout,"},{"line":2132,"text":"\t\t\t\t'use_tfa' => $option->use_tfa,"},{"line":2133,"text":"\t\t\t]);"}],"line":2127,"text":"\t\t\t\t'push_on_conversation' => $option->push_on_conversation,"},{"context":[{"line":2128,"text":"\t\t\t\t'creation_watch_state' => $option->creation_watch_state,"},{"line":2129,"text":"\t\t\t\t'interaction_watch_state' => $option->interaction_watch_state,"},{"line":2130,"text":"\t\t\t\t'alert_optout' => $option->alert_optout,"},{"line":2131,"text":"\t\t\t\t'push_optout' => $option->push_optout,"},{"line":2132,"text":"\t\t\t\t'use_tfa' => $option->use_tfa,"},{"line":2133,"text":"\t\t\t]);"},{"line":2134,"text":""},{"line":2135,"text":"\t\t\t$fieldValues = $profile->custom_fields->getFieldValues();"},{"line":2136,"text":"\t\t\t$result->custom_fields = (object) $fieldValues;"}],"line":2130,"text":"\t\t\t\t'alert_optout' => $option->alert_optout,"},{"context":[{"line":2129,"text":"\t\t\t\t'interaction_watch_state' => $option->interaction_watch_state,"},{"line":2130,"text":"\t\t\t\t'alert_optout' => $option->alert_optout,"},{"line":2131,"text":"\t\t\t\t'push_optout' => $option->push_optout,"},{"line":2132,"text":"\t\t\t\t'use_tfa' => $option->use_tfa,"},{"line":2133,"text":"\t\t\t]);"},{"line":2134,"text":""},{"line":2135,"text":"\t\t\t$fieldValues = $profile->custom_fields->getFieldValues();"},{"line":2136,"text":"\t\t\t$result->custom_fields = (object) $fieldValues;"},{"line":2137,"text":"\t\t}"}],"line":2131,"text":"\t\t\t\t'push_optout' => $option->push_optout,"}],"path":"/var/www/forums/newfi/public/src/XF/Entity/User.php","present":true,"sha256":"1ea738d44993ad4cb7f5db12e8b2ee06c37bd2b2c7ae1714b068fb64bbb82758"},"user_push_repo":{"bytes":3366,"matches":[{"context":[{"line":8,"text":"use function intval, strlen;"},{"line":9,"text":""},{"line":10,"text":"class UserPushRepository extends Repository"},{"line":11,"text":"{"},{"line":12,"text":"\tpublic function validateSubscriptionDetails(array $subscription, &$error = null)"},{"line":13,"text":"\t{"},{"line":14,"text":"\t\t$endpoint = $subscription['endpoint'] ?? null;"},{"line":15,"text":"\t\tif ($endpoint === null)"},{"line":16,"text":"\t\t{"}],"line":10,"text":"class UserPushRepository extends Repository"},{"context":[{"line":10,"text":"class UserPushRepository extends Repository"},{"line":11,"text":"{"},{"line":12,"text":"\tpublic function validateSubscriptionDetails(array $subscription, &$error = null)"},{"line":13,"text":"\t{"},{"line":14,"text":"\t\t$endpoint = $subscription['endpoint'] ?? null;"},{"line":15,"text":"\t\tif ($endpoint === null)"},{"line":16,"text":"\t\t{"},{"line":17,"text":"\t\t\treturn false;"},{"line":18,"text":"\t\t}"}],"line":12,"text":"\tpublic function validateSubscriptionDetails(array $subscription, &$error = null)"},{"context":[{"line":12,"text":"\tpublic function validateSubscriptionDetails(array $subscription, &$error = null)"},{"line":13,"text":"\t{"},{"line":14,"text":"\t\t$endpoint = $subscription['endpoint'] ?? null;"},{"line":15,"text":"\t\tif ($endpoint === null)"},{"line":16,"text":"\t\t{"},{"line":17,"text":"\t\t\treturn false;"},{"line":18,"text":"\t\t}"},{"line":19,"text":""},{"line":20,"text":"\t\tif (!$this->isValidEndpoint($endpoint))"}],"line":14,"text":"\t\t$endpoint = $subscription['endpoint'] ?? null;"},{"context":[{"line":23,"text":"\t\t}"},{"line":24,"text":""},{"line":25,"text":"\t\tif (empty($subscription['key']) || empty($subscription['token']) || empty($subscription['encoding']))"},{"line":26,"text":"\t\t{"},{"line":27,"text":"\t\t\treturn false;"},{"line":28,"text":"\t\t}"},{"line":29,"text":""},{"line":30,"text":"\t\tif ("},{"line":31,"text":"\t\t\tstrlen($subscription['key']) > 1024"}],"line":25,"text":"\t\tif (empty($subscription['key']) || empty($subscription['token']) || empty($subscription['encoding']))"},{"context":[{"line":29,"text":""},{"line":30,"text":"\t\tif ("},{"line":31,"text":"\t\t\tstrlen($subscription['key']) > 1024"},{"line":32,"text":"\t\t\t|| strlen($subscription['token']) > 256"},{"line":33,"text":"\t\t\t|| strlen($subscription['encoding']) > 64"},{"line":34,"text":"\t\t)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\treturn false;"},{"line":37,"text":"\t\t}"}],"line":31,"text":"\t\t\tstrlen($subscription['key']) > 1024"},{"context":[{"line":30,"text":"\t\tif ("},{"line":31,"text":"\t\t\tstrlen($subscription['key']) > 1024"},{"line":32,"text":"\t\t\t|| strlen($subscription['token']) > 256"},{"line":33,"text":"\t\t\t|| strlen($subscription['encoding']) > 64"},{"line":34,"text":"\t\t)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\treturn false;"},{"line":37,"text":"\t\t}"},{"line":38,"text":""}],"line":32,"text":"\t\t\t|| strlen($subscription['token']) > 256"},{"context":[{"line":31,"text":"\t\t\tstrlen($subscription['key']) > 1024"},{"line":32,"text":"\t\t\t|| strlen($subscription['token']) > 256"},{"line":33,"text":"\t\t\t|| strlen($subscription['encoding']) > 64"},{"line":34,"text":"\t\t)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\treturn false;"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\treturn true;"}],"line":33,"text":"\t\t\t|| strlen($subscription['encoding']) > 64"},{"context":[{"line":40,"text":"\t}"},{"line":41,"text":""},{"line":42,"text":"\tpublic function insertUserPushSubscription(User $user, array $subscription)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$db = $this->db();"},{"line":45,"text":""},{"line":46,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":47,"text":""},{"line":48,"text":"\t\treturn $db->insert('xf_user_push_subscription', ["}],"line":42,"text":"\tpublic function insertUserPushSubscription(User $user, array $subscription)"},{"context":[{"line":44,"text":"\t\t$db = $this->db();"},{"line":45,"text":""},{"line":46,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":47,"text":""},{"line":48,"text":"\t\treturn $db->insert('xf_user_push_subscription', ["},{"line":49,"text":"\t\t\t'endpoint_hash' => $endpointHash,"},{"line":50,"text":"\t\t\t'endpoint' => $subscription['endpoint'],"},{"line":51,"text":"\t\t\t'user_id' => $user->user_id,"},{"line":52,"text":"\t\t\t'data' => json_encode(["}],"line":46,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"context":[{"line":46,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":47,"text":""},{"line":48,"text":"\t\treturn $db->insert('xf_user_push_subscription', ["},{"line":49,"text":"\t\t\t'endpoint_hash' => $endpointHash,"},{"line":50,"text":"\t\t\t'endpoint' => $subscription['endpoint'],"},{"line":51,"text":"\t\t\t'user_id' => $user->user_id,"},{"line":52,"text":"\t\t\t'data' => json_encode(["},{"line":53,"text":"\t\t\t\t'key' => $subscription['key'],"},{"line":54,"text":"\t\t\t\t'token' => $subscription['token'],"}],"line":48,"text":"\t\treturn $db->insert('xf_user_push_subscription', ["},{"context":[{"line":48,"text":"\t\treturn $db->insert('xf_user_push_subscription', ["},{"line":49,"text":"\t\t\t'endpoint_hash' => $endpointHash,"},{"line":50,"text":"\t\t\t'endpoint' => $subscription['endpoint'],"},{"line":51,"text":"\t\t\t'user_id' => $user->user_id,"},{"line":52,"text":"\t\t\t'data' => json_encode(["},{"line":53,"text":"\t\t\t\t'key' => $subscription['key'],"},{"line":54,"text":"\t\t\t\t'token' => $subscription['token'],"},{"line":55,"text":"\t\t\t\t'encoding' => $subscription['encoding'],"},{"line":56,"text":"\t\t\t]),"}],"line":50,"text":"\t\t\t'endpoint' => $subscription['endpoint'],"},{"context":[{"line":51,"text":"\t\t\t'user_id' => $user->user_id,"},{"line":52,"text":"\t\t\t'data' => json_encode(["},{"line":53,"text":"\t\t\t\t'key' => $subscription['key'],"},{"line":54,"text":"\t\t\t\t'token' => $subscription['token'],"},{"line":55,"text":"\t\t\t\t'encoding' => $subscription['encoding'],"},{"line":56,"text":"\t\t\t]),"},{"line":57,"text":"\t\t\t'last_seen' => time(),"},{"line":58,"text":"\t\t], false, '"},{"line":59,"text":"\t\t\tuser_id = VALUES(user_id),"}],"line":53,"text":"\t\t\t\t'key' => $subscription['key'],"},{"context":[{"line":52,"text":"\t\t\t'data' => json_encode(["},{"line":53,"text":"\t\t\t\t'key' => $subscription['key'],"},{"line":54,"text":"\t\t\t\t'token' => $subscription['token'],"},{"line":55,"text":"\t\t\t\t'encoding' => $subscription['encoding'],"},{"line":56,"text":"\t\t\t]),"},{"line":57,"text":"\t\t\t'last_seen' => time(),"},{"line":58,"text":"\t\t], false, '"},{"line":59,"text":"\t\t\tuser_id = VALUES(user_id),"},{"line":60,"text":"\t\t\tdata = VALUES(data),"}],"line":54,"text":"\t\t\t\t'token' => $subscription['token'],"},{"context":[{"line":53,"text":"\t\t\t\t'key' => $subscription['key'],"},{"line":54,"text":"\t\t\t\t'token' => $subscription['token'],"},{"line":55,"text":"\t\t\t\t'encoding' => $subscription['encoding'],"},{"line":56,"text":"\t\t\t]),"},{"line":57,"text":"\t\t\t'last_seen' => time(),"},{"line":58,"text":"\t\t], false, '"},{"line":59,"text":"\t\t\tuser_id = VALUES(user_id),"},{"line":60,"text":"\t\t\tdata = VALUES(data),"},{"line":61,"text":"\t\t\tlast_seen = VALUES(last_seen)"}],"line":55,"text":"\t\t\t\t'encoding' => $subscription['encoding'],"},{"context":[{"line":63,"text":"\t}"},{"line":64,"text":""},{"line":65,"text":"\tpublic function deletePushSubscription(array $subscription)"},{"line":66,"text":"\t{"},{"line":67,"text":"\t\t$db = $this->db();"},{"line":68,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":69,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ?', $endpointHash);"},{"line":70,"text":"\t}"},{"line":71,"text":""}],"line":65,"text":"\tpublic function deletePushSubscription(array $subscription)"},{"context":[{"line":66,"text":"\t{"},{"line":67,"text":"\t\t$db = $this->db();"},{"line":68,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":69,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ?', $endpointHash);"},{"line":70,"text":"\t}"},{"line":71,"text":""},{"line":72,"text":"\tpublic function deleteUserPushSubscription(User $user, array $subscription)"},{"line":73,"text":"\t{"},{"line":74,"text":"\t\t$db = $this->db();"}],"line":68,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"context":[{"line":67,"text":"\t\t$db = $this->db();"},{"line":68,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":69,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ?', $endpointHash);"},{"line":70,"text":"\t}"},{"line":71,"text":""},{"line":72,"text":"\tpublic function deleteUserPushSubscription(User $user, array $subscription)"},{"line":73,"text":"\t{"},{"line":74,"text":"\t\t$db = $this->db();"},{"line":75,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"}],"line":69,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ?', $endpointHash);"},{"context":[{"line":70,"text":"\t}"},{"line":71,"text":""},{"line":72,"text":"\tpublic function deleteUserPushSubscription(User $user, array $subscription)"},{"line":73,"text":"\t{"},{"line":74,"text":"\t\t$db = $this->db();"},{"line":75,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":76,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ? AND user_id = ?', ["},{"line":77,"text":"\t\t\t$endpointHash, $user->user_id,"},{"line":78,"text":"\t\t]);"}],"line":72,"text":"\tpublic function deleteUserPushSubscription(User $user, array $subscription)"},{"context":[{"line":73,"text":"\t{"},{"line":74,"text":"\t\t$db = $this->db();"},{"line":75,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":76,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ? AND user_id = ?', ["},{"line":77,"text":"\t\t\t$endpointHash, $user->user_id,"},{"line":78,"text":"\t\t]);"},{"line":79,"text":"\t}"},{"line":80,"text":""},{"line":81,"text":"\tpublic function limitUserPushSubscriptionCount(User $user, $maxAllowed)"}],"line":75,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"context":[{"line":74,"text":"\t\t$db = $this->db();"},{"line":75,"text":"\t\t$endpointHash = $this->getEndpointHash($subscription['endpoint']);"},{"line":76,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ? AND user_id = ?', ["},{"line":77,"text":"\t\t\t$endpointHash, $user->user_id,"},{"line":78,"text":"\t\t]);"},{"line":79,"text":"\t}"},{"line":80,"text":""},{"line":81,"text":"\tpublic function limitUserPushSubscriptionCount(User $user, $maxAllowed)"},{"line":82,"text":"\t{"}],"line":76,"text":"\t\treturn $db->delete('xf_user_push_subscription', 'endpoint_hash = ? AND user_id = ?', ["},{"context":[{"line":79,"text":"\t}"},{"line":80,"text":""},{"line":81,"text":"\tpublic function limitUserPushSubscriptionCount(User $user, $maxAllowed)"},{"line":82,"text":"\t{"},{"line":83,"text":"\t\t$cutOff = max(0, intval($maxAllowed)); // offset is 0 based, so this will give the max+1 row"},{"line":84,"text":""},{"line":85,"text":"\t\t$lastSeenCutOff = $this->db()->fetchOne(\""},{"line":86,"text":"\t\t\tSELECT last_seen"},{"line":87,"text":"\t\t\tFROM xf_user_push_subscription"}],"line":81,"text":"\tpublic function limitUserPushSubscriptionCount(User $user, $maxAllowed)"},{"context":[{"line":85,"text":"\t\t$lastSeenCutOff = $this->db()->fetchOne(\""},{"line":86,"text":"\t\t\tSELECT last_seen"},{"line":87,"text":"\t\t\tFROM xf_user_push_subscription"},{"line":88,"text":"\t\t\tWHERE user_id = ?"},{"line":89,"text":"\t\t\tORDER BY last_seen DESC"},{"line":90,"text":"\t\t\tLIMIT ?, 1"},{"line":91,"text":"\t\t\", [$user->user_id, $cutOff]);"},{"line":92,"text":"\t\tif ($lastSeenCutOff)"},{"line":93,"text":"\t\t{"}],"line":87,"text":"\t\t\tFROM xf_user_push_subscription"},{"context":[{"line":93,"text":"\t\t{"},{"line":94,"text":"\t\t\t$this->db()->delete("},{"line":95,"text":"\t\t\t\t'xf_user_push_subscription',"},{"line":96,"text":"\t\t\t\t'user_id = ? AND last_seen <= ?',"},{"line":97,"text":"\t\t\t\t[$user->user_id, $lastSeenCutOff]"},{"line":98,"text":"\t\t\t);"},{"line":99,"text":"\t\t}"},{"line":100,"text":"\t}"},{"line":101,"text":""}],"line":95,"text":"\t\t\t\t'xf_user_push_subscription',"},{"context":[{"line":100,"text":"\t}"},{"line":101,"text":""},{"line":102,"text":"\tpublic function getUserSubscriptions(User $user)"},{"line":103,"text":"\t{"},{"line":104,"text":"\t\treturn $this->db()->fetchAllKeyed("},{"line":105,"text":"\t\t\t'SELECT *"},{"line":106,"text":"\t\t\t\tFROM xf_user_push_subscription"},{"line":107,"text":"\t\t\t\tWHERE user_id = ?"},{"line":108,"text":"\t\t\t\tORDER BY endpoint_id',"}],"line":102,"text":"\tpublic function getUserSubscriptions(User $user)"},{"context":[{"line":104,"text":"\t\treturn $this->db()->fetchAllKeyed("},{"line":105,"text":"\t\t\t'SELECT *"},{"line":106,"text":"\t\t\t\tFROM xf_user_push_subscription"},{"line":107,"text":"\t\t\t\tWHERE user_id = ?"},{"line":108,"text":"\t\t\t\tORDER BY endpoint_id',"},{"line":109,"text":"\t\t\t'endpoint_hash',"},{"line":110,"text":"\t\t\t[$user->user_id]"},{"line":111,"text":"\t\t);"},{"line":112,"text":"\t}"}],"line":106,"text":"\t\t\t\tFROM xf_user_push_subscription"},{"context":[{"line":112,"text":"\t}"},{"line":113,"text":""},{"line":114,"text":"\tpublic function getEndpointHash($endpoint)"},{"line":115,"text":"\t{"},{"line":116,"text":"\t\treturn md5($endpoint);"},{"line":117,"text":"\t}"},{"line":118,"text":""},{"line":119,"text":"\tpublic function isValidEndpoint(string $endpoint): bool"},{"line":120,"text":"\t{"}],"line":114,"text":"\tpublic function getEndpointHash($endpoint)"},{"context":[{"line":117,"text":"\t}"},{"line":118,"text":""},{"line":119,"text":"\tpublic function isValidEndpoint(string $endpoint): bool"},{"line":120,"text":"\t{"},{"line":121,"text":"\t\tif (!preg_match('#https?://#i', $endpoint) || strlen($endpoint) > 2048)"},{"line":122,"text":"\t\t{"},{"line":123,"text":"\t\t\treturn false;"},{"line":124,"text":"\t\t}"},{"line":125,"text":""}],"line":119,"text":"\tpublic function isValidEndpoint(string $endpoint): bool"},{"context":[{"line":141,"text":"\t * @return list<string>"},{"line":142,"text":"\t */"},{"line":143,"text":"\tpublic function getInvalidEndpoints(): array"},{"line":144,"text":"\t{"},{"line":145,"text":"\t\treturn ["},{"line":146,"text":"\t\t\t'https://android.googleapis.com/gcm/send', // GCM"},{"line":147,"text":"\t\t\t'https://permanently-removed.invalid/fcm/send', // Chrome (XF-234461)"},{"line":148,"text":"\t\t];"},{"line":149,"text":"\t}"}],"line":143,"text":"\tpublic function getInvalidEndpoints(): array"},{"context":[{"line":144,"text":"\t{"},{"line":145,"text":"\t\treturn ["},{"line":146,"text":"\t\t\t'https://android.googleapis.com/gcm/send', // GCM"},{"line":147,"text":"\t\t\t'https://permanently-removed.invalid/fcm/send', // Chrome (XF-234461)"},{"line":148,"text":"\t\t];"},{"line":149,"text":"\t}"},{"line":150,"text":"}"}],"line":146,"text":"\t\t\t'https://android.googleapis.com/gcm/send', // GCM"},{"context":[{"line":145,"text":"\t\treturn ["},{"line":146,"text":"\t\t\t'https://android.googleapis.com/gcm/send', // GCM"},{"line":147,"text":"\t\t\t'https://permanently-removed.invalid/fcm/send', // Chrome (XF-234461)"},{"line":148,"text":"\t\t];"},{"line":149,"text":"\t}"},{"line":150,"text":"}"}],"line":147,"text":"\t\t\t'https://permanently-removed.invalid/fcm/send', // Chrome (XF-234461)"}],"path":"/var/www/forums/newfi/public/src/XF/Repository/UserPushRepository.php","present":true,"sha256":"19cd962e33aa63af754b4c72953d8545e197183e93e6e834e3d71d823cd0b6c6"},"xfrm_alert_handler":{"bytes":280,"matches":[{"context":[{"line":5,"text":"use XF\\Alert\\AbstractHandler;"},{"line":6,"text":""},{"line":7,"text":"class ResourceItem extends AbstractHandler"},{"line":8,"text":"{"},{"line":9,"text":"\tpublic function getEntityWith(): array"},{"line":10,"text":"\t{"},{"line":11,"text":"\t\t$visitor = \\XF::visitor();"},{"line":12,"text":""},{"line":13,"text":"\t\treturn ["}],"line":7,"text":"class ResourceItem extends AbstractHandler"},{"context":[{"line":7,"text":"class ResourceItem extends AbstractHandler"},{"line":8,"text":"{"},{"line":9,"text":"\tpublic function getEntityWith(): array"},{"line":10,"text":"\t{"},{"line":11,"text":"\t\t$visitor = \\XF::visitor();"},{"line":12,"text":""},{"line":13,"text":"\t\treturn ["},{"line":14,"text":"\t\t\t'Category',"},{"line":15,"text":"\t\t\t\"Category.Permissions|{$visitor->permission_combination_id}\","}],"line":9,"text":"\tpublic function getEntityWith(): array"}],"path":"/var/www/forums/newfi/public/src/addons/XFRM/Alert/ResourceItem.php","present":true,"sha256":"6c57bdaba8e5fa2a943222faf41c1f7acf9ffedc36427018707944226d7225a3"},"xfrm_alert_templates":{"bytes":244652,"matches":[{"context":[{"line":778,"text":"  <template type=\"public\" title=\"alert_resource_rating_pre_reg\" version_id=\"2020270\" version_string=\"2.2.2\"><![CDATA[<xf:if is=\"$extra.welcome\">"},{"line":779,"text":"\t{{ phrase('welcome_to_boardtitle', {'boardTitle': $xf.options.boardTitle}) }}"}],"line":778,"text":"  <template type=\"public\" title=\"alert_resource_rating_pre_reg\" version_id=\"2020270\" version_string=\"2.2.2\"><![CDATA[<xf:if is=\"$extra.welcome\">"},{"context":[{"line":784,"text":"  <template type=\"public\" title=\"alert_resource_rating_reply\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_replied_review_resource_y', {"},{"line":785,"text":"\t'name': username_link($user, false, {'defaultname': $alert.username}),"}],"line":784,"text":"  <template type=\"public\" title=\"alert_resource_rating_reply\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_replied_review_resource_y', {"},{"context":[{"line":788,"text":"  <template type=\"public\" title=\"alert_resource_rating_review\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_reviewed_resource_y', {"},{"line":789,"text":"\t'username': username_link($user, false, {'defaultname': $alert.username}),"}],"line":788,"text":"  <template type=\"public\" title=\"alert_resource_rating_review\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_reviewed_resource_y', {"},{"context":[{"line":792,"text":"  <template type=\"public\" title=\"alert_resource_team_member_add\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_added_you_as_team_member_for_resource_y', {"},{"line":793,"text":"\t'name': username_link($user, false, {'defaultname': $alert.username}),"}],"line":792,"text":"  <template type=\"public\" title=\"alert_resource_team_member_add\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_added_you_as_team_member_for_resource_y', {"},{"context":[{"line":796,"text":"  <template type=\"public\" title=\"alert_resource_team_member_leave\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_left_resource_team_for_resource_y', {"},{"line":797,"text":"\t'name': username_link($user, false, {'defaultname': $alert.username}),"}],"line":796,"text":"  <template type=\"public\" title=\"alert_resource_team_member_leave\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_left_resource_team_for_resource_y', {"},{"context":[{"line":800,"text":"  <template type=\"public\" title=\"alert_resource_update_insert\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"line":801,"text":"\t{{ phrase('xfrm_x_created_resource_y', {"}],"line":800,"text":"  <template type=\"public\" title=\"alert_resource_update_insert\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"context":[{"line":811,"text":"  <template type=\"public\" title=\"alert_resource_update_mention\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"line":812,"text":"\t{{ phrase('xfrm_x_mentioned_you_in_resource_y', {"}],"line":811,"text":"  <template type=\"public\" title=\"alert_resource_update_mention\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"context":[{"line":822,"text":"  <template type=\"public\" title=\"alert_resource_update_reaction\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"line":823,"text":"\t{{ phrase('xfrm_x_reacted_to_your_resource_y', {"}],"line":822,"text":"  <template type=\"public\" title=\"alert_resource_update_reaction\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"context":[{"line":835,"text":"  <template type=\"public\" title=\"alert_user_resource_delete\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_deleted', {"},{"line":836,"text":"\t'title': prefix('resource', $extra.prefix_id) . $extra.title"}],"line":835,"text":"  <template type=\"public\" title=\"alert_user_resource_delete\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_deleted', {"},{"context":[{"line":839,"text":"  <template type=\"public\" title=\"alert_user_resource_edit\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_edited', {"},{"line":840,"text":"\t'title': '<a href=\"' . base_url($extra.link) . '\" class=\"fauxBlockLink-blockLink\">' . prefix('resource', $extra.prefix_id) . $extra.title . '</a>'"}],"line":839,"text":"  <template type=\"public\" title=\"alert_user_resource_edit\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_edited', {"},{"context":[{"line":843,"text":"  <template type=\"public\" title=\"alert_user_resource_move\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_moved', {"},{"line":844,"text":"\t'title': '<a href=\"' . base_url($extra.link) . '\" class=\"fauxBlockLink-blockLink\">' . prefix('resource', $extra.prefix_id) . $extra.title . '</a>'"}],"line":843,"text":"  <template type=\"public\" title=\"alert_user_resource_move\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_moved', {"},{"context":[{"line":847,"text":"  <template type=\"public\" title=\"alert_user_resource_rating_delete\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_review_for_x_was_deleted', {"},{"line":848,"text":"\t'title': prefix('resource', $extra.prefix_id) . $extra.title"}],"line":847,"text":"  <template type=\"public\" title=\"alert_user_resource_rating_delete\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_review_for_x_was_deleted', {"},{"context":[{"line":851,"text":"  <template type=\"public\" title=\"alert_user_resource_reassign_from\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_reassigned_to_y', {"},{"line":852,"text":"\t'title': '<a href=\"' . base_url($extra.link) . '\" class=\"fauxBlockLink-blockLink\">' . prefix('resource', $extra.prefix_id) . $extra.title . '</a>',"}],"line":851,"text":"  <template type=\"public\" title=\"alert_user_resource_reassign_from\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_reassigned_to_y', {"},{"context":[{"line":856,"text":"  <template type=\"public\" title=\"alert_user_resource_reassign_to\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_resource_x_was_reassigned_to_you', {"},{"line":857,"text":"\t'title': '<a href=\"' . base_url($extra.link) . '\" class=\"fauxBlockLink-blockLink\">' . prefix('resource', $extra.prefix_id) . $extra.title . '</a>'"}],"line":856,"text":"  <template type=\"public\" title=\"alert_user_resource_reassign_to\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_resource_x_was_reassigned_to_you', {"},{"context":[{"line":860,"text":"  <template type=\"public\" title=\"alert_user_resource_update_delete\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_deleted', {"},{"line":861,"text":"\t'update': $extra.update,"}],"line":860,"text":"  <template type=\"public\" title=\"alert_user_resource_update_delete\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_deleted', {"},{"context":[{"line":865,"text":"  <template type=\"public\" title=\"alert_user_resource_update_edit\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_edited', {"},{"line":866,"text":"\t'update': $extra.update,"}],"line":865,"text":"  <template type=\"public\" title=\"alert_user_resource_update_edit\" version_id=\"2000010\" version_string=\"2.0.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_edited', {"},{"context":[{"line":1351,"text":"  <template type=\"public\" title=\"push_resource_rating_pre_reg\" version_id=\"2020270\" version_string=\"2.2.2\"><![CDATA[<xf:if is=\"$extra.welcome\">"},{"line":1352,"text":"\t{{ phrase('welcome_to_boardtitle', {'boardTitle': $xf.options.boardTitle}) }}"}],"line":1351,"text":"  <template type=\"public\" title=\"push_resource_rating_pre_reg\" version_id=\"2020270\" version_string=\"2.2.2\"><![CDATA[<xf:if is=\"$extra.welcome\">"},{"context":[{"line":1358,"text":"  <template type=\"public\" title=\"push_resource_rating_reply\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_replied_review_resource_y', {"},{"line":1359,"text":"\t'name': $user.username ?: $alert.username,"}],"line":1358,"text":"  <template type=\"public\" title=\"push_resource_rating_reply\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_replied_review_resource_y', {"},{"context":[{"line":1363,"text":"  <template type=\"public\" title=\"push_resource_rating_review\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_reviewed_resource_y', {"},{"line":1364,"text":"\t'username': $user.username ?: $alert.username,"}],"line":1363,"text":"  <template type=\"public\" title=\"push_resource_rating_review\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_reviewed_resource_y', {"},{"context":[{"line":1368,"text":"  <template type=\"public\" title=\"push_resource_team_member_add\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_added_you_as_team_member_for_resource_y', {"},{"line":1369,"text":"\t'name': $user.username ?: $alert.username,"}],"line":1368,"text":"  <template type=\"public\" title=\"push_resource_team_member_add\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_added_you_as_team_member_for_resource_y', {"},{"context":[{"line":1373,"text":"  <template type=\"public\" title=\"push_resource_team_member_leave\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_left_resource_team_for_resource_y', {"},{"line":1374,"text":"\t'name': $user.username ?: $alert.username,"}],"line":1373,"text":"  <template type=\"public\" title=\"push_resource_team_member_leave\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[{{ phrase('xfrm_x_left_resource_team_for_resource_y', {"},{"context":[{"line":1378,"text":"  <template type=\"public\" title=\"push_resource_update_insert\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"line":1379,"text":"\t{{ phrase('xfrm_x_created_resource_y', {"}],"line":1378,"text":"  <template type=\"public\" title=\"push_resource_update_insert\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"context":[{"line":1391,"text":"  <template type=\"public\" title=\"push_resource_update_mention\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"line":1392,"text":"\t{{ phrase('xfrm_x_mentioned_you_in_resource_y', {"}],"line":1391,"text":"  <template type=\"public\" title=\"push_resource_update_mention\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"context":[{"line":1404,"text":"  <template type=\"public\" title=\"push_resource_update_reaction\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"line":1405,"text":"\t{{ phrase('xfrm_x_reacted_to_your_resource_y', {"}],"line":1404,"text":"  <template type=\"public\" title=\"push_resource_update_reaction\" version_id=\"2020010\" version_string=\"2.2.0 Alpha\"><![CDATA[<xf:if is=\"$content.isDescription()\">"},{"context":[{"line":1423,"text":"  <template type=\"public\" title=\"push_user_resource_delete\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_deleted', {"},{"line":1424,"text":"\t'title': prefix('resource', $extra.prefix_id, 'plain') . $extra.title"}],"line":1423,"text":"  <template type=\"public\" title=\"push_user_resource_delete\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_deleted', {"},{"context":[{"line":1427,"text":"  <template type=\"public\" title=\"push_user_resource_edit\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_edited', {"},{"line":1428,"text":"\t'title': prefix('resource', $extra.prefix_id, 'plain') . $extra.title"}],"line":1427,"text":"  <template type=\"public\" title=\"push_user_resource_edit\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_edited', {"},{"context":[{"line":1432,"text":"  <template type=\"public\" title=\"push_user_resource_move\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_moved', {"},{"line":1433,"text":"\t'title': prefix('resource', $extra.prefix_id, 'plain') . $extra.title"}],"line":1432,"text":"  <template type=\"public\" title=\"push_user_resource_move\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_moved', {"},{"context":[{"line":1437,"text":"  <template type=\"public\" title=\"push_user_resource_rating_delete\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_review_for_x_was_deleted', {"},{"line":1438,"text":"\t'title': prefix('resource', $extra.prefix_id, 'plain') . $extra.title"}],"line":1437,"text":"  <template type=\"public\" title=\"push_user_resource_rating_delete\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_review_for_x_was_deleted', {"},{"context":[{"line":1441,"text":"  <template type=\"public\" title=\"push_user_resource_reassign_from\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_reassigned_to_y', {"},{"line":1442,"text":"\t'title': prefix('resource', $extra.prefix_id, 'plain') . $extra.title,"}],"line":1441,"text":"  <template type=\"public\" title=\"push_user_resource_reassign_from\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_resource_x_was_reassigned_to_y', {"},{"context":[{"line":1447,"text":"  <template type=\"public\" title=\"push_user_resource_reassign_to\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_resource_x_was_reassigned_to_you', {"},{"line":1448,"text":"\t'title': prefix('resource', $extra.prefix_id, 'plain') . $extra.title"}],"line":1447,"text":"  <template type=\"public\" title=\"push_user_resource_reassign_to\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_resource_x_was_reassigned_to_you', {"},{"context":[{"line":1452,"text":"  <template type=\"public\" title=\"push_user_resource_update_delete\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_deleted', {"},{"line":1453,"text":"\t'update': $extra.update,"}],"line":1452,"text":"  <template type=\"public\" title=\"push_user_resource_update_delete\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_deleted', {"},{"context":[{"line":1457,"text":"  <template type=\"public\" title=\"push_user_resource_update_edit\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_edited', {"},{"line":1458,"text":"\t'update': $extra.update,"}],"line":1457,"text":"  <template type=\"public\" title=\"push_user_resource_update_edit\" version_id=\"2010010\" version_string=\"2.1.0 Alpha\"><![CDATA[{{ phrase('xfrm_your_update_x_for_y_was_edited', {"}],"path":"/var/www/forums/newfi/public/src/addons/XFRM/_data/templates.xml","present":true,"sha256":"50950be731ba43367357081cd603c5d16caa8ba1a4155f8e4aa1cfb306d71ead"},"xfrm_content_type_fields":{"bytes":6442,"matches":[{"context":[{"line":2,"text":"<content_type_fields>"},{"line":3,"text":"  <field content_type=\"resource\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceItemHandler</field>"},{"line":4,"text":"  <field content_type=\"resource\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceItem</field>"},{"line":5,"text":"  <field content_type=\"resource\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceItem</field>"}],"line":3,"text":"  <field content_type=\"resource\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceItemHandler</field>"},{"context":[{"line":3,"text":"  <field content_type=\"resource\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceItemHandler</field>"},{"line":4,"text":"  <field content_type=\"resource\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceItem</field>"},{"line":5,"text":"  <field content_type=\"resource\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceItem</field>"},{"line":6,"text":"  <field content_type=\"resource\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceItem</field>"}],"line":4,"text":"  <field content_type=\"resource\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceItem</field>"},{"context":[{"line":4,"text":"  <field content_type=\"resource\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceItem</field>"},{"line":5,"text":"  <field content_type=\"resource\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceItem</field>"},{"line":6,"text":"  <field content_type=\"resource\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceItem</field>"},{"line":7,"text":"  <field content_type=\"resource\" field_name=\"email_stop_class\">XFRM\\EmailStop\\ResourceItem</field>"}],"line":5,"text":"  <field content_type=\"resource\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceItem</field>"},{"context":[{"line":5,"text":"  <field content_type=\"resource\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceItem</field>"},{"line":6,"text":"  <field content_type=\"resource\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceItem</field>"},{"line":7,"text":"  <field content_type=\"resource\" field_name=\"email_stop_class\">XFRM\\EmailStop\\ResourceItem</field>"},{"line":8,"text":"  <field content_type=\"resource\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceItem</field>"}],"line":6,"text":"  <field content_type=\"resource\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceItem</field>"},{"context":[{"line":6,"text":"  <field content_type=\"resource\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceItem</field>"},{"line":7,"text":"  <field content_type=\"resource\" field_name=\"email_stop_class\">XFRM\\EmailStop\\ResourceItem</field>"},{"line":8,"text":"  <field content_type=\"resource\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceItem</field>"},{"line":9,"text":"  <field content_type=\"resource\" field_name=\"entity\">XFRM:ResourceItem</field>"}],"line":7,"text":"  <field content_type=\"resource\" field_name=\"email_stop_class\">XFRM\\EmailStop\\ResourceItem</field>"},{"context":[{"line":7,"text":"  <field content_type=\"resource\" field_name=\"email_stop_class\">XFRM\\EmailStop\\ResourceItem</field>"},{"line":8,"text":"  <field content_type=\"resource\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceItem</field>"},{"line":9,"text":"  <field content_type=\"resource\" field_name=\"entity\">XFRM:ResourceItem</field>"},{"line":10,"text":"  <field content_type=\"resource\" field_name=\"featured_content_handler_class\">XFRM\\FeaturedContent\\ResourceItem</field>"}],"line":8,"text":"  <field content_type=\"resource\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceItem</field>"},{"context":[{"line":8,"text":"  <field content_type=\"resource\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceItem</field>"},{"line":9,"text":"  <field content_type=\"resource\" field_name=\"entity\">XFRM:ResourceItem</field>"},{"line":10,"text":"  <field content_type=\"resource\" field_name=\"featured_content_handler_class\">XFRM\\FeaturedContent\\ResourceItem</field>"},{"line":11,"text":"  <field content_type=\"resource\" field_name=\"find_new_handler_class\">XFRM\\FindNew\\ResourceItem</field>"}],"line":9,"text":"  <field content_type=\"resource\" field_name=\"entity\">XFRM:ResourceItem</field>"},{"context":[{"line":9,"text":"  <field content_type=\"resource\" field_name=\"entity\">XFRM:ResourceItem</field>"},{"line":10,"text":"  <field content_type=\"resource\" field_name=\"featured_content_handler_class\">XFRM\\FeaturedContent\\ResourceItem</field>"},{"line":11,"text":"  <field content_type=\"resource\" field_name=\"find_new_handler_class\">XFRM\\FindNew\\ResourceItem</field>"},{"line":12,"text":"  <field content_type=\"resource\" field_name=\"inline_mod_handler_class\">XFRM\\InlineMod\\ResourceItem</field>"}],"line":10,"text":"  <field content_type=\"resource\" field_name=\"featured_content_handler_class\">XFRM\\FeaturedContent\\ResourceItem</field>"},{"context":[{"line":10,"text":"  <field content_type=\"resource\" field_name=\"featured_content_handler_class\">XFRM\\FeaturedContent\\ResourceItem</field>"},{"line":11,"text":"  <field content_type=\"resource\" field_name=\"find_new_handler_class\">XFRM\\FindNew\\ResourceItem</field>"},{"line":12,"text":"  <field content_type=\"resource\" field_name=\"inline_mod_handler_class\">XFRM\\InlineMod\\ResourceItem</field>"},{"line":13,"text":"  <field content_type=\"resource\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceItem</field>"}],"line":11,"text":"  <field content_type=\"resource\" field_name=\"find_new_handler_class\">XFRM\\FindNew\\ResourceItem</field>"},{"context":[{"line":11,"text":"  <field content_type=\"resource\" field_name=\"find_new_handler_class\">XFRM\\FindNew\\ResourceItem</field>"},{"line":12,"text":"  <field content_type=\"resource\" field_name=\"inline_mod_handler_class\">XFRM\\InlineMod\\ResourceItem</field>"},{"line":13,"text":"  <field content_type=\"resource\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceItem</field>"},{"line":14,"text":"  <field content_type=\"resource\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceItem</field>"}],"line":12,"text":"  <field content_type=\"resource\" field_name=\"inline_mod_handler_class\">XFRM\\InlineMod\\ResourceItem</field>"},{"context":[{"line":12,"text":"  <field content_type=\"resource\" field_name=\"inline_mod_handler_class\">XFRM\\InlineMod\\ResourceItem</field>"},{"line":13,"text":"  <field content_type=\"resource\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceItem</field>"},{"line":14,"text":"  <field content_type=\"resource\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceItem</field>"},{"line":15,"text":"  <field content_type=\"resource\" field_name=\"phrase\">xfrm_resource</field>"}],"line":13,"text":"  <field content_type=\"resource\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceItem</field>"},{"context":[{"line":13,"text":"  <field content_type=\"resource\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceItem</field>"},{"line":14,"text":"  <field content_type=\"resource\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceItem</field>"},{"line":15,"text":"  <field content_type=\"resource\" field_name=\"phrase\">xfrm_resource</field>"},{"line":16,"text":"  <field content_type=\"resource\" field_name=\"phrase_plural\">xfrm_resources</field>"}],"line":14,"text":"  <field content_type=\"resource\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceItem</field>"},{"context":[{"line":14,"text":"  <field content_type=\"resource\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceItem</field>"},{"line":15,"text":"  <field content_type=\"resource\" field_name=\"phrase\">xfrm_resource</field>"},{"line":16,"text":"  <field content_type=\"resource\" field_name=\"phrase_plural\">xfrm_resources</field>"},{"line":17,"text":"  <field content_type=\"resource\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceItem</field>"}],"line":15,"text":"  <field content_type=\"resource\" field_name=\"phrase\">xfrm_resource</field>"},{"context":[{"line":15,"text":"  <field content_type=\"resource\" field_name=\"phrase\">xfrm_resource</field>"},{"line":16,"text":"  <field content_type=\"resource\" field_name=\"phrase_plural\">xfrm_resources</field>"},{"line":17,"text":"  <field content_type=\"resource\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceItem</field>"},{"line":18,"text":"  <field content_type=\"resource\" field_name=\"sitemap_handler_class\">XFRM\\Sitemap\\ResourceItem</field>"}],"line":16,"text":"  <field content_type=\"resource\" field_name=\"phrase_plural\">xfrm_resources</field>"},{"context":[{"line":16,"text":"  <field content_type=\"resource\" field_name=\"phrase_plural\">xfrm_resources</field>"},{"line":17,"text":"  <field content_type=\"resource\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceItem</field>"},{"line":18,"text":"  <field content_type=\"resource\" field_name=\"sitemap_handler_class\">XFRM\\Sitemap\\ResourceItem</field>"},{"line":19,"text":"  <field content_type=\"resource\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceItem</field>"}],"line":17,"text":"  <field content_type=\"resource\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceItem</field>"},{"context":[{"line":17,"text":"  <field content_type=\"resource\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceItem</field>"},{"line":18,"text":"  <field content_type=\"resource\" field_name=\"sitemap_handler_class\">XFRM\\Sitemap\\ResourceItem</field>"},{"line":19,"text":"  <field content_type=\"resource\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceItem</field>"},{"line":20,"text":"  <field content_type=\"resource\" field_name=\"stats_handler_class\">XFRM\\Stats\\ResourceItem</field>"}],"line":18,"text":"  <field content_type=\"resource\" field_name=\"sitemap_handler_class\">XFRM\\Sitemap\\ResourceItem</field>"},{"context":[{"line":18,"text":"  <field content_type=\"resource\" field_name=\"sitemap_handler_class\">XFRM\\Sitemap\\ResourceItem</field>"},{"line":19,"text":"  <field content_type=\"resource\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceItem</field>"},{"line":20,"text":"  <field content_type=\"resource\" field_name=\"stats_handler_class\">XFRM\\Stats\\ResourceItem</field>"},{"line":21,"text":"  <field content_type=\"resource\" field_name=\"tag_handler_class\">XFRM\\Tag\\ResourceItem</field>"}],"line":19,"text":"  <field content_type=\"resource\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceItem</field>"},{"context":[{"line":19,"text":"  <field content_type=\"resource\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceItem</field>"},{"line":20,"text":"  <field content_type=\"resource\" field_name=\"stats_handler_class\">XFRM\\Stats\\ResourceItem</field>"},{"line":21,"text":"  <field content_type=\"resource\" field_name=\"tag_handler_class\">XFRM\\Tag\\ResourceItem</field>"},{"line":22,"text":"  <field content_type=\"resource\" field_name=\"trending_content_handler_class\">XFRM\\TrendingContent\\ResourceItemHandler</field>"}],"line":20,"text":"  <field content_type=\"resource\" field_name=\"stats_handler_class\">XFRM\\Stats\\ResourceItem</field>"},{"context":[{"line":20,"text":"  <field content_type=\"resource\" field_name=\"stats_handler_class\">XFRM\\Stats\\ResourceItem</field>"},{"line":21,"text":"  <field content_type=\"resource\" field_name=\"tag_handler_class\">XFRM\\Tag\\ResourceItem</field>"},{"line":22,"text":"  <field content_type=\"resource\" field_name=\"trending_content_handler_class\">XFRM\\TrendingContent\\ResourceItemHandler</field>"},{"line":23,"text":"  <field content_type=\"resource\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceItem</field>"}],"line":21,"text":"  <field content_type=\"resource\" field_name=\"tag_handler_class\">XFRM\\Tag\\ResourceItem</field>"},{"context":[{"line":21,"text":"  <field content_type=\"resource\" field_name=\"tag_handler_class\">XFRM\\Tag\\ResourceItem</field>"},{"line":22,"text":"  <field content_type=\"resource\" field_name=\"trending_content_handler_class\">XFRM\\TrendingContent\\ResourceItemHandler</field>"},{"line":23,"text":"  <field content_type=\"resource\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceItem</field>"},{"line":24,"text":"  <field content_type=\"resource_category\" field_name=\"email_stop_class\">XFRM\\EmailStop\\Category</field>"}],"line":22,"text":"  <field content_type=\"resource\" field_name=\"trending_content_handler_class\">XFRM\\TrendingContent\\ResourceItemHandler</field>"},{"context":[{"line":22,"text":"  <field content_type=\"resource\" field_name=\"trending_content_handler_class\">XFRM\\TrendingContent\\ResourceItemHandler</field>"},{"line":23,"text":"  <field content_type=\"resource\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceItem</field>"},{"line":24,"text":"  <field content_type=\"resource_category\" field_name=\"email_stop_class\">XFRM\\EmailStop\\Category</field>"},{"line":25,"text":"  <field content_type=\"resource_category\" field_name=\"permission_handler_class\">XFRM\\Permission\\CategoryPermissions</field>"}],"line":23,"text":"  <field content_type=\"resource\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceItem</field>"},{"context":[{"line":23,"text":"  <field content_type=\"resource\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceItem</field>"},{"line":24,"text":"  <field content_type=\"resource_category\" field_name=\"email_stop_class\">XFRM\\EmailStop\\Category</field>"},{"line":25,"text":"  <field content_type=\"resource_category\" field_name=\"permission_handler_class\">XFRM\\Permission\\CategoryPermissions</field>"},{"line":26,"text":"  <field content_type=\"resource_category\" field_name=\"phrase\">xfrm_resource_category</field>"}],"line":24,"text":"  <field content_type=\"resource_category\" field_name=\"email_stop_class\">XFRM\\EmailStop\\Category</field>"},{"context":[{"line":24,"text":"  <field content_type=\"resource_category\" field_name=\"email_stop_class\">XFRM\\EmailStop\\Category</field>"},{"line":25,"text":"  <field content_type=\"resource_category\" field_name=\"permission_handler_class\">XFRM\\Permission\\CategoryPermissions</field>"},{"line":26,"text":"  <field content_type=\"resource_category\" field_name=\"phrase\">xfrm_resource_category</field>"},{"line":27,"text":"  <field content_type=\"resource_category\" field_name=\"phrase_plural\">xfrm_resource_categories</field>"}],"line":25,"text":"  <field content_type=\"resource_category\" field_name=\"permission_handler_class\">XFRM\\Permission\\CategoryPermissions</field>"},{"context":[{"line":25,"text":"  <field content_type=\"resource_category\" field_name=\"permission_handler_class\">XFRM\\Permission\\CategoryPermissions</field>"},{"line":26,"text":"  <field content_type=\"resource_category\" field_name=\"phrase\">xfrm_resource_category</field>"},{"line":27,"text":"  <field content_type=\"resource_category\" field_name=\"phrase_plural\">xfrm_resource_categories</field>"},{"line":28,"text":"  <field content_type=\"resource_rating\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceRating</field>"}],"line":26,"text":"  <field content_type=\"resource_category\" field_name=\"phrase\">xfrm_resource_category</field>"},{"context":[{"line":26,"text":"  <field content_type=\"resource_category\" field_name=\"phrase\">xfrm_resource_category</field>"},{"line":27,"text":"  <field content_type=\"resource_category\" field_name=\"phrase_plural\">xfrm_resource_categories</field>"},{"line":28,"text":"  <field content_type=\"resource_rating\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceRating</field>"},{"line":29,"text":"  <field content_type=\"resource_rating\" field_name=\"content_vote_handler_class\">XFRM\\ContentVote\\ResourceRating</field>"}],"line":27,"text":"  <field content_type=\"resource_category\" field_name=\"phrase_plural\">xfrm_resource_categories</field>"},{"context":[{"line":27,"text":"  <field content_type=\"resource_category\" field_name=\"phrase_plural\">xfrm_resource_categories</field>"},{"line":28,"text":"  <field content_type=\"resource_rating\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceRating</field>"},{"line":29,"text":"  <field content_type=\"resource_rating\" field_name=\"content_vote_handler_class\">XFRM\\ContentVote\\ResourceRating</field>"},{"line":30,"text":"  <field content_type=\"resource_rating\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceRating</field>"}],"line":28,"text":"  <field content_type=\"resource_rating\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceRating</field>"},{"context":[{"line":28,"text":"  <field content_type=\"resource_rating\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceRating</field>"},{"line":29,"text":"  <field content_type=\"resource_rating\" field_name=\"content_vote_handler_class\">XFRM\\ContentVote\\ResourceRating</field>"},{"line":30,"text":"  <field content_type=\"resource_rating\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceRating</field>"},{"line":31,"text":"  <field content_type=\"resource_rating\" field_name=\"entity\">XFRM:ResourceRating</field>"}],"line":29,"text":"  <field content_type=\"resource_rating\" field_name=\"content_vote_handler_class\">XFRM\\ContentVote\\ResourceRating</field>"},{"context":[{"line":29,"text":"  <field content_type=\"resource_rating\" field_name=\"content_vote_handler_class\">XFRM\\ContentVote\\ResourceRating</field>"},{"line":30,"text":"  <field content_type=\"resource_rating\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceRating</field>"},{"line":31,"text":"  <field content_type=\"resource_rating\" field_name=\"entity\">XFRM:ResourceRating</field>"},{"line":32,"text":"  <field content_type=\"resource_rating\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceRating</field>"}],"line":30,"text":"  <field content_type=\"resource_rating\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceRating</field>"},{"context":[{"line":30,"text":"  <field content_type=\"resource_rating\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceRating</field>"},{"line":31,"text":"  <field content_type=\"resource_rating\" field_name=\"entity\">XFRM:ResourceRating</field>"},{"line":32,"text":"  <field content_type=\"resource_rating\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceRating</field>"},{"line":33,"text":"  <field content_type=\"resource_rating\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceRating</field>"}],"line":31,"text":"  <field content_type=\"resource_rating\" field_name=\"entity\">XFRM:ResourceRating</field>"},{"context":[{"line":31,"text":"  <field content_type=\"resource_rating\" field_name=\"entity\">XFRM:ResourceRating</field>"},{"line":32,"text":"  <field content_type=\"resource_rating\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceRating</field>"},{"line":33,"text":"  <field content_type=\"resource_rating\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceRating</field>"},{"line":34,"text":"  <field content_type=\"resource_rating\" field_name=\"phrase\">xfrm_resource_rating</field>"}],"line":32,"text":"  <field content_type=\"resource_rating\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceRating</field>"},{"context":[{"line":32,"text":"  <field content_type=\"resource_rating\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceRating</field>"},{"line":33,"text":"  <field content_type=\"resource_rating\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceRating</field>"},{"line":34,"text":"  <field content_type=\"resource_rating\" field_name=\"phrase\">xfrm_resource_rating</field>"},{"line":35,"text":"  <field content_type=\"resource_rating\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceRating</field>"}],"line":33,"text":"  <field content_type=\"resource_rating\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceRating</field>"},{"context":[{"line":33,"text":"  <field content_type=\"resource_rating\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceRating</field>"},{"line":34,"text":"  <field content_type=\"resource_rating\" field_name=\"phrase\">xfrm_resource_rating</field>"},{"line":35,"text":"  <field content_type=\"resource_rating\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceRating</field>"},{"line":36,"text":"  <field content_type=\"resource_rating\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceRating</field>"}],"line":34,"text":"  <field content_type=\"resource_rating\" field_name=\"phrase\">xfrm_resource_rating</field>"},{"context":[{"line":34,"text":"  <field content_type=\"resource_rating\" field_name=\"phrase\">xfrm_resource_rating</field>"},{"line":35,"text":"  <field content_type=\"resource_rating\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceRating</field>"},{"line":36,"text":"  <field content_type=\"resource_rating\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceRating</field>"},{"line":37,"text":"  <field content_type=\"resource_rating\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceRating</field>"}],"line":35,"text":"  <field content_type=\"resource_rating\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceRating</field>"},{"context":[{"line":35,"text":"  <field content_type=\"resource_rating\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceRating</field>"},{"line":36,"text":"  <field content_type=\"resource_rating\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceRating</field>"},{"line":37,"text":"  <field content_type=\"resource_rating\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceRating</field>"},{"line":38,"text":"  <field content_type=\"resource_rating\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceRating</field>"}],"line":36,"text":"  <field content_type=\"resource_rating\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceRating</field>"},{"context":[{"line":36,"text":"  <field content_type=\"resource_rating\" field_name=\"spam_handler_class\">XFRM\\Spam\\Cleaner\\ResourceRating</field>"},{"line":37,"text":"  <field content_type=\"resource_rating\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceRating</field>"},{"line":38,"text":"  <field content_type=\"resource_rating\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceRating</field>"},{"line":39,"text":"  <field content_type=\"resource_update\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceUpdateHandler</field>"}],"line":37,"text":"  <field content_type=\"resource_rating\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceRating</field>"},{"context":[{"line":37,"text":"  <field content_type=\"resource_rating\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceRating</field>"},{"line":38,"text":"  <field content_type=\"resource_rating\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceRating</field>"},{"line":39,"text":"  <field content_type=\"resource_update\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceUpdateHandler</field>"},{"line":40,"text":"  <field content_type=\"resource_update\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceUpdate</field>"}],"line":38,"text":"  <field content_type=\"resource_rating\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceRating</field>"},{"context":[{"line":38,"text":"  <field content_type=\"resource_rating\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceRating</field>"},{"line":39,"text":"  <field content_type=\"resource_update\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceUpdateHandler</field>"},{"line":40,"text":"  <field content_type=\"resource_update\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceUpdate</field>"},{"line":41,"text":"  <field content_type=\"resource_update\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceUpdate</field>"}],"line":39,"text":"  <field content_type=\"resource_update\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceUpdateHandler</field>"},{"context":[{"line":39,"text":"  <field content_type=\"resource_update\" field_name=\"activity_log_handler_class\">XFRM\\ActivityLog\\ResourceUpdateHandler</field>"},{"line":40,"text":"  <field content_type=\"resource_update\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceUpdate</field>"},{"line":41,"text":"  <field content_type=\"resource_update\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceUpdate</field>"},{"line":42,"text":"  <field content_type=\"resource_update\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceUpdate</field>"}],"line":40,"text":"  <field content_type=\"resource_update\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceUpdate</field>"},{"context":[{"line":40,"text":"  <field content_type=\"resource_update\" field_name=\"alert_handler_class\">XFRM\\Alert\\ResourceUpdate</field>"},{"line":41,"text":"  <field content_type=\"resource_update\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceUpdate</field>"},{"line":42,"text":"  <field content_type=\"resource_update\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceUpdate</field>"},{"line":43,"text":"  <field content_type=\"resource_update\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceUpdate</field>"}],"line":41,"text":"  <field content_type=\"resource_update\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceUpdate</field>"},{"context":[{"line":41,"text":"  <field content_type=\"resource_update\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceUpdate</field>"},{"line":42,"text":"  <field content_type=\"resource_update\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceUpdate</field>"},{"line":43,"text":"  <field content_type=\"resource_update\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceUpdate</field>"},{"line":44,"text":"  <field content_type=\"resource_update\" field_name=\"edit_history_handler_class\">XFRM\\EditHistory\\ResourceUpdate</field>"}],"line":42,"text":"  <field content_type=\"resource_update\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceUpdate</field>"},{"context":[{"line":42,"text":"  <field content_type=\"resource_update\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceUpdate</field>"},{"line":43,"text":"  <field content_type=\"resource_update\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceUpdate</field>"},{"line":44,"text":"  <field content_type=\"resource_update\" field_name=\"edit_history_handler_class\">XFRM\\EditHistory\\ResourceUpdate</field>"},{"line":45,"text":"  <field content_type=\"resource_update\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceUpdate</field>"}],"line":43,"text":"  <field content_type=\"resource_update\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceUpdate</field>"},{"context":[{"line":43,"text":"  <field content_type=\"resource_update\" field_name=\"bookmark_handler_class\">XFRM\\Bookmark\\ResourceUpdate</field>"},{"line":44,"text":"  <field content_type=\"resource_update\" field_name=\"edit_history_handler_class\">XFRM\\EditHistory\\ResourceUpdate</field>"},{"line":45,"text":"  <field content_type=\"resource_update\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceUpdate</field>"},{"line":46,"text":"  <field content_type=\"resource_update\" field_name=\"entity\">XFRM:ResourceUpdate</field>"}],"line":44,"text":"  <field content_type=\"resource_update\" field_name=\"edit_history_handler_class\">XFRM\\EditHistory\\ResourceUpdate</field>"},{"context":[{"line":44,"text":"  <field content_type=\"resource_update\" field_name=\"edit_history_handler_class\">XFRM\\EditHistory\\ResourceUpdate</field>"},{"line":45,"text":"  <field content_type=\"resource_update\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceUpdate</field>"},{"line":46,"text":"  <field content_type=\"resource_update\" field_name=\"entity\">XFRM:ResourceUpdate</field>"},{"line":47,"text":"  <field content_type=\"resource_update\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceUpdate</field>"}],"line":45,"text":"  <field content_type=\"resource_update\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceUpdate</field>"},{"context":[{"line":45,"text":"  <field content_type=\"resource_update\" field_name=\"embed_resolver_class\">XFRM\\EmbedResolver\\ResourceUpdate</field>"},{"line":46,"text":"  <field content_type=\"resource_update\" field_name=\"entity\">XFRM:ResourceUpdate</field>"},{"line":47,"text":"  <field content_type=\"resource_update\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceUpdate</field>"},{"line":48,"text":"  <field content_type=\"resource_update\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceUpdate</field>"}],"line":46,"text":"  <field content_type=\"resource_update\" field_name=\"entity\">XFRM:ResourceUpdate</field>"},{"context":[{"line":46,"text":"  <field content_type=\"resource_update\" field_name=\"entity\">XFRM:ResourceUpdate</field>"},{"line":47,"text":"  <field content_type=\"resource_update\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceUpdate</field>"},{"line":48,"text":"  <field content_type=\"resource_update\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceUpdate</field>"},{"line":49,"text":"  <field content_type=\"resource_update\" field_name=\"phrase\">xfrm_resource_update</field>"}],"line":47,"text":"  <field content_type=\"resource_update\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceUpdate</field>"},{"context":[{"line":47,"text":"  <field content_type=\"resource_update\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceUpdate</field>"},{"line":48,"text":"  <field content_type=\"resource_update\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceUpdate</field>"},{"line":49,"text":"  <field content_type=\"resource_update\" field_name=\"phrase\">xfrm_resource_update</field>"},{"line":50,"text":"  <field content_type=\"resource_update\" field_name=\"phrase_plural\">xfrm_resource_updates</field>"}],"line":48,"text":"  <field content_type=\"resource_update\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceUpdate</field>"},{"context":[{"line":48,"text":"  <field content_type=\"resource_update\" field_name=\"news_feed_handler_class\">XFRM\\NewsFeed\\ResourceUpdate</field>"},{"line":49,"text":"  <field content_type=\"resource_update\" field_name=\"phrase\">xfrm_resource_update</field>"},{"line":50,"text":"  <field content_type=\"resource_update\" field_name=\"phrase_plural\">xfrm_resource_updates</field>"},{"line":51,"text":"  <field content_type=\"resource_update\" field_name=\"reaction_handler_class\">XFRM\\Reaction\\ResourceUpdate</field>"}],"line":49,"text":"  <field content_type=\"resource_update\" field_name=\"phrase\">xfrm_resource_update</field>"},{"context":[{"line":49,"text":"  <field content_type=\"resource_update\" field_name=\"phrase\">xfrm_resource_update</field>"},{"line":50,"text":"  <field content_type=\"resource_update\" field_name=\"phrase_plural\">xfrm_resource_updates</field>"},{"line":51,"text":"  <field content_type=\"resource_update\" field_name=\"reaction_handler_class\">XFRM\\Reaction\\ResourceUpdate</field>"},{"line":52,"text":"  <field content_type=\"resource_update\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceUpdate</field>"}],"line":50,"text":"  <field content_type=\"resource_update\" field_name=\"phrase_plural\">xfrm_resource_updates</field>"},{"context":[{"line":50,"text":"  <field content_type=\"resource_update\" field_name=\"phrase_plural\">xfrm_resource_updates</field>"},{"line":51,"text":"  <field content_type=\"resource_update\" field_name=\"reaction_handler_class\">XFRM\\Reaction\\ResourceUpdate</field>"},{"line":52,"text":"  <field content_type=\"resource_update\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceUpdate</field>"},{"line":53,"text":"  <field content_type=\"resource_update\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceUpdate</field>"}],"line":51,"text":"  <field content_type=\"resource_update\" field_name=\"reaction_handler_class\">XFRM\\Reaction\\ResourceUpdate</field>"},{"context":[{"line":51,"text":"  <field content_type=\"resource_update\" field_name=\"reaction_handler_class\">XFRM\\Reaction\\ResourceUpdate</field>"},{"line":52,"text":"  <field content_type=\"resource_update\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceUpdate</field>"},{"line":53,"text":"  <field content_type=\"resource_update\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceUpdate</field>"},{"line":54,"text":"  <field content_type=\"resource_update\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceUpdate</field>"}],"line":52,"text":"  <field content_type=\"resource_update\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceUpdate</field>"},{"context":[{"line":52,"text":"  <field content_type=\"resource_update\" field_name=\"report_handler_class\">XFRM\\Report\\ResourceUpdate</field>"},{"line":53,"text":"  <field content_type=\"resource_update\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceUpdate</field>"},{"line":54,"text":"  <field content_type=\"resource_update\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceUpdate</field>"},{"line":55,"text":"  <field content_type=\"resource_update\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceUpdate</field>"}],"line":53,"text":"  <field content_type=\"resource_update\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceUpdate</field>"},{"context":[{"line":53,"text":"  <field content_type=\"resource_update\" field_name=\"search_handler_class\">XFRM\\Search\\Data\\ResourceUpdate</field>"},{"line":54,"text":"  <field content_type=\"resource_update\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceUpdate</field>"},{"line":55,"text":"  <field content_type=\"resource_update\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceUpdate</field>"},{"line":56,"text":"  <field content_type=\"resource_version\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceVersion</field>"}],"line":54,"text":"  <field content_type=\"resource_update\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceUpdate</field>"},{"context":[{"line":54,"text":"  <field content_type=\"resource_update\" field_name=\"warning_handler_class\">XFRM\\Warning\\ResourceUpdate</field>"},{"line":55,"text":"  <field content_type=\"resource_update\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceUpdate</field>"},{"line":56,"text":"  <field content_type=\"resource_version\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceVersion</field>"},{"line":57,"text":"  <field content_type=\"resource_version\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceVersion</field>"}],"line":55,"text":"  <field content_type=\"resource_update\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceUpdate</field>"},{"context":[{"line":55,"text":"  <field content_type=\"resource_update\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceUpdate</field>"},{"line":56,"text":"  <field content_type=\"resource_version\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceVersion</field>"},{"line":57,"text":"  <field content_type=\"resource_version\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceVersion</field>"},{"line":58,"text":"  <field content_type=\"resource_version\" field_name=\"entity\">XFRM:ResourceVersion</field>"}],"line":56,"text":"  <field content_type=\"resource_version\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceVersion</field>"},{"context":[{"line":56,"text":"  <field content_type=\"resource_version\" field_name=\"approval_queue_handler_class\">XFRM\\ApprovalQueue\\ResourceVersion</field>"},{"line":57,"text":"  <field content_type=\"resource_version\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceVersion</field>"},{"line":58,"text":"  <field content_type=\"resource_version\" field_name=\"entity\">XFRM:ResourceVersion</field>"},{"line":59,"text":"  <field content_type=\"resource_version\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceVersion</field>"}],"line":57,"text":"  <field content_type=\"resource_version\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceVersion</field>"},{"context":[{"line":57,"text":"  <field content_type=\"resource_version\" field_name=\"attachment_handler_class\">XFRM\\Attachment\\ResourceVersion</field>"},{"line":58,"text":"  <field content_type=\"resource_version\" field_name=\"entity\">XFRM:ResourceVersion</field>"},{"line":59,"text":"  <field content_type=\"resource_version\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceVersion</field>"},{"line":60,"text":"  <field content_type=\"resource_version\" field_name=\"phrase\">xfrm_resource_version</field>"}],"line":58,"text":"  <field content_type=\"resource_version\" field_name=\"entity\">XFRM:ResourceVersion</field>"},{"context":[{"line":58,"text":"  <field content_type=\"resource_version\" field_name=\"entity\">XFRM:ResourceVersion</field>"},{"line":59,"text":"  <field content_type=\"resource_version\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceVersion</field>"},{"line":60,"text":"  <field content_type=\"resource_version\" field_name=\"phrase\">xfrm_resource_version</field>"},{"line":61,"text":"  <field content_type=\"resource_version\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceVersion</field>"}],"line":59,"text":"  <field content_type=\"resource_version\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceVersion</field>"},{"context":[{"line":59,"text":"  <field content_type=\"resource_version\" field_name=\"moderator_log_handler_class\">XFRM\\ModeratorLog\\ResourceVersion</field>"},{"line":60,"text":"  <field content_type=\"resource_version\" field_name=\"phrase\">xfrm_resource_version</field>"},{"line":61,"text":"  <field content_type=\"resource_version\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceVersion</field>"},{"line":62,"text":"</content_type_fields>"}],"line":60,"text":"  <field content_type=\"resource_version\" field_name=\"phrase\">xfrm_resource_version</field>"},{"context":[{"line":60,"text":"  <field content_type=\"resource_version\" field_name=\"phrase\">xfrm_resource_version</field>"},{"line":61,"text":"  <field content_type=\"resource_version\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceVersion</field>"},{"line":62,"text":"</content_type_fields>"}],"line":61,"text":"  <field content_type=\"resource_version\" field_name=\"webhook_handler_class\">XFRM\\Webhook\\Event\\ResourceVersion</field>"}],"path":"/var/www/forums/newfi/public/src/addons/XFRM/_data/content_type_fields.xml","present":true,"sha256":"0c55319843d04701f1f6fa7fdfeb1ae8883b6d3bb95fceb6e0cf245638543474"}},"role":"staging","status":"OK"}
NEWFI172_DECISION=PASS_NOTIFY213_EXACT_ALERT_PUSH_SIGNATURES
NEWFI172_NEXT_GATE=BUILD_NOTIFY213_STAGING_CANDIDATE
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260919-NEWFDOM-NOTIFY213-CONTRACT172","rollback_restored":null,"rollback_started":false,"status":"OK","version":1}

OUTPUT_END
CHAT_OUTPUT_END
