From 18fc8550b7026a31ec911a299f037f5116fbf0e4 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sun, 20 Sep 2026 16:46:31 +0000 Subject: [PATCH] runtime: publish NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266 --- ...I-260920-NEWFDOM-MESSENGERS214-QGA266.json | 38 +++++++++++ ...FI-260920-NEWFDOM-MESSENGERS214-QGA266.txt | 66 +++++++++++++++++++ runtime/latest.json | 16 ++--- runtime/latest.txt | 57 +++++++++++----- 4 files changed, 151 insertions(+), 26 deletions(-) create mode 100644 runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.json create mode 100644 runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.txt diff --git a/runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.json b/runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.json new file mode 100644 index 00000000..af72bfa4 --- /dev/null +++ b/runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "newfi-messengers214-qga264-local-result-recovery", + "started_at_utc": "2026-09-20T16:46:31Z", + "finished_at_utc": "2026-09-20T16:46:31Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "100f254c4bd33c613be094a50f2f2ca56e0fb1eaa6910cd093a8896dd9959b87", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9", + "sanitized_output_sha256": "e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "NEWFI266_BEGIN=true\nCOMMAND_ID=NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266\nMODE=local-readonly-recovery\nCHANGES_MADE=false\nMUTATION_OUTCOME=NO_MUTATION\nIMMUTABLE_PLAN_CHECK=PASS\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_SHA_MATCH=true\nINPUT_PARSE_OK=true\nINPUT_CONTRACT_OK=true\nPREV_DIR_PRESENT=true\nREMOTE_PRESENT=true\nREMOTE_HASH_MATCH=true\nSTDOUT_PRESENT=true\nSTDERR_PRESENT=true\nSTDOUT_CONTRACT_FOUND=false\nLOCAL_ERROR=false\nSTDOUT_BYTES=39\nSTDERR_BYTES=0\nSTDOUT_SHA256=22d52cef09a22affbc21147e902dfa46cb1955458d5cacd0398a51241e16bfd6\nSTDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nSTDERR_CLASS=NONE\nPRE_RUNNER_STOP=NONE\nLOCAL_ERROR_CLASS=NONE\nLOCAL_ERROR_SHA256=NONE\nQGA264_LOCAL_RESULT_RECOVERED=false\nDECISION=HOLD_QGA266_QGA264_LOCAL_OUTPUT_UNCLASSIFIED\nNEXT_GATE=RECONCILE_QGA264_LOCAL_OUTPUT\nNEWFI266_END=true\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.txt b/runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.txt new file mode 100644 index 00000000..fec61104 --- /dev/null +++ b/runtime/history/NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266.txt @@ -0,0 +1,66 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=newfi-messengers214-qga264-local-result-recovery +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=100f254c4bd33c613be094a50f2f2ca56e0fb1eaa6910cd093a8896dd9959b87 +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=e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9 +SANITIZED_OUTPUT_SHA256=e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9 +OUTPUT_BEGIN +NEWFI266_BEGIN=true +COMMAND_ID=NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266 +MODE=local-readonly-recovery +CHANGES_MADE=false +MUTATION_OUTCOME=NO_MUTATION +IMMUTABLE_PLAN_CHECK=PASS +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +AUTHORITY_SHA_MATCH=true +INPUT_PARSE_OK=true +INPUT_CONTRACT_OK=true +PREV_DIR_PRESENT=true +REMOTE_PRESENT=true +REMOTE_HASH_MATCH=true +STDOUT_PRESENT=true +STDERR_PRESENT=true +STDOUT_CONTRACT_FOUND=false +LOCAL_ERROR=false +STDOUT_BYTES=39 +STDERR_BYTES=0 +STDOUT_SHA256=22d52cef09a22affbc21147e902dfa46cb1955458d5cacd0398a51241e16bfd6 +STDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +STDERR_CLASS=NONE +PRE_RUNNER_STOP=NONE +LOCAL_ERROR_CLASS=NONE +LOCAL_ERROR_SHA256=NONE +QGA264_LOCAL_RESULT_RECOVERED=false +DECISION=HOLD_QGA266_QGA264_LOCAL_OUTPUT_UNCLASSIFIED +NEXT_GATE=RECONCILE_QGA264_LOCAL_OUTPUT +NEWFI266_END=true +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 0bd80444..af72bfa4 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1", + "command_id": "NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "pvepro-homepage-portal-install-lifecycle-rca-readonly", - "started_at_utc": "2026-09-20T16:42:17Z", - "finished_at_utc": "2026-09-20T16:42:22Z", + "component": "newfi-messengers214-qga264-local-result-recovery", + "started_at_utc": "2026-09-20T16:46:31Z", + "finished_at_utc": "2026-09-20T16:46:31Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "3e979c32a397a411ac1e4144d432831e49d53b89bc5cfef8b70eca4ebe8c81b6", + "command_sha256": "100f254c4bd33c613be094a50f2f2ca56e0fb1eaa6910cd093a8896dd9959b87", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182", - "sanitized_output_sha256": "8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182", + "raw_evidence_sha256": "e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9", + "sanitized_output_sha256": "e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "COMMAND_ID=SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1\nMODE=read-only\nCOMPONENT=pvepro-homepage-portal-install-lifecycle-rca-readonly\nWINDOW_MODE=VISIBLE_SYNCHRONOUS_WAIT\n782_ERROR_DECODE={\"matches\":true,\"sha256\":\"51939ddaddcc4d67fdb44c0507c06186062f750225b49d7b937841700e8713a7\",\"string\":\"W2PORTAL782ENQUEUE_MARKER\"}\nPRODUCTION_HOST={\"all_link_down\":false,\"config_sha256\":\"ebd2b7d44ab58a222b4fd5a7dcd9358d3082e593bd70fb07c2331c70f22e82ab\",\"name\":\"pvepro-prod\",\"snapshots\":[],\"status\":\"running\"}\nSTAGING_HOST={\"all_link_down\":true,\"config_sha256\":\"9fd5f15119b54c8f83eb3c4bf47aac12f02e0cb9bc2bf593487a157d2d4840e3\",\"name\":\"pvepro-staging-v1\",\"snapshots\":[],\"status\":\"stopped\"}\nPRODUCTION_DB_PRESTATE={\"addons\":[{\"active\":1,\"addon_id\":\"XF\",\"is_processing\":0,\"last_pending_action\":null}],\"board_active\":\"1\",\"default_style\":\"2\",\"errors\":20,\"index_route\":\"forums/\",\"portal_addon_rows\":0,\"portal_job_rows\":0,\"portal_route_rows\":0,\"portal_template_rows\":0}\nXF_INSTALL_LIFECYCLE_SOURCE={\"likely\":{\"src/XF/AddOn/AddOn.php\":{\"hits\":[{\"context\":[{\"line\":536,\"text\":\"\"},{\"line\":537,\"text\":\"\\tpublic function updatePendingAction($action, $step)\"},{\"line\":538,\"text\":\"\\t{\"},{\"line\":539,\"text\":\"\\t\\tif ($this->installedAddOn)\"},{\"line\":540,\"text\":\"\\t\\t{\"},{\"line\":541,\"text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', \\\"$action:$step\\\");\"},{\"line\":542,\"text\":\"\\t\\t}\"},{\"line\":543,\"text\":\"\\t}\"},{\"line\":544,\"text\":\"\"},{\"line\":545,\"text\":\"\\tpublic function resetPendingAction()\"},{\"line\":546,\"text\":\"\\t{\"},{\"line\":547,\"text\":\"\\t\\tif ($this->installedAddOn)\"},{\"line\":548,\"text\":\"\\t\\t{\"},{\"line\":549,\"text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', null);\"},{\"line\":550,\"text\":\"\\t\\t}\"}],\"match_line\":541,\"match_text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', \\\"$action:$step\\\");\"},{\"context\":[{\"line\":540,\"text\":\"\\t\\t{\"},{\"line\":541,\"text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', \\\"$action:$step\\\");\"},{\"line\":542,\"text\":\"\\t\\t}\"},{\"line\":543,\"text\":\"\\t}\"},{\"line\":544,\"text\":\"\"},{\"line\":545,\"text\":\"\\tpublic function resetPendingAction()\"},{\"line\":546,\"text\":\"\\t{\"},{\"line\":547,\"text\":\"\\t\\tif ($this->installedAddOn)\"},{\"line\":548,\"text\":\"\\t\\t{\"},{\"line\":549,\"text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', null);\"},{\"line\":550,\"text\":\"\\t\\t}\"},{\"line\":551,\"text\":\"\\t}\"},{\"line\":552,\"text\":\"\"},{\"line\":553,\"text\":\"\\tpublic function preInstall()\"},{\"line\":554,\"text\":\"\\t{\"}],\"match_line\":545,\"match_text\":\"\\tpublic function resetPendingAction()\"},{\"context\":[{\"line\":544,\"text\":\"\"},{\"line\":545,\"text\":\"\\tpublic function resetPendingAction()\"},{\"line\":546,\"text\":\"\\t{\"},{\"line\":547,\"text\":\"\\t\\tif ($this->installedAddOn)\"},{\"line\":548,\"text\":\"\\t\\t{\"},{\"line\":549,\"text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', null);\"},{\"line\":550,\"text\":\"\\t\\t}\"},{\"line\":551,\"text\":\"\\t}\"},{\"line\":552,\"text\":\"\"},{\"line\":553,\"text\":\"\\tpublic function preInstall()\"},{\"line\":554,\"text\":\"\\t{\"},{\"line\":555,\"text\":\"\\t\\tif (!$this->installedAddOn)\"},{\"line\":556,\"text\":\"\\t\\t{\"},{\"line\":557,\"text\":\"\\t\\t\\t$json = $this->getJson();\"},{\"line\":558,\"text\":\"\"}],\"match_line\":549,\"match_text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', null);\"},{\"context\":[{\"line\":548,\"text\":\"\\t\\t{\"},{\"line\":549,\"text\":\"\\t\\t\\t$this->installedAddOn->fastUpdate('last_pending_action', null);\"},{\"line\":550,\"text\":\"\\t\\t}\"},{\"line\":551,\"text\":\"\\t}\"},{\"line\":552,\"text\":\"\"},{\"line\":553,\"text\":\"\\tpublic function preInstall()\"},{\"line\":554,\"text\":\"\\t{\"},{\"line\":555,\"text\":\"\\t\\tif (!$this->installedAddOn)\"},{\"line\":556,\"text\":\"\\t\\t{\"},{\"line\":557,\"text\":\"\\t\\t\\t$json = $this->getJson();\"},{\"line\":558,\"text\":\"\"},{\"line\":559,\"text\":\"\\t\\t\\t$installed = \\\\XF::em()->create(\\\\XF\\\\Entity\\\\AddOn::class);\"},{\"line\":560,\"text\":\"\\t\\t\\t$installed->bulkSet([\"},{\"line\":561,\"text\":\"\\t\\t\\t\\t'addon_id' => $this->getAddOnId(),\"},{\"line\":562,\"text\":\"\\t\\t\\t\\t'title' => $json['title'],\"}],\"match_line\":553,\"match_text\":\"\\tpublic function preInstall()\"},{\"context\":[{\"line\":561,\"text\":\"\\t\\t\\t\\t'addon_id' => $this->getAddOnId(),\"},{\"line\":562,\"text\":\"\\t\\t\\t\\t'title' => $json['title'],\"},{\"line\":563,\"text\":\"\\t\\t\\t\\t'version_string' => $json['version_string'],\"},{\"line\":564,\"text\":\"\\t\\t\\t\\t'version_id' => $json['version_id'],\"},{\"line\":565,\"text\":\"\\t\\t\\t\\t'active' => true,\"},{\"line\":566,\"text\":\"\\t\\t\\t\\t'is_processing' => true,\"},{\"line\":567,\"text\":\"\\t\\t\\t\\t'json_hash' => $this->getJsonHash(),\"},{\"line\":568,\"text\":\"\\t\\t\\t\\t'last_pending_action' => 'install:0',\"},{\"line\":569,\"text\":\"\\t\\t\\t]);\"},{\"line\":570,\"text\":\"\\t\\t\\t$installed->save();\"},{\"line\":571,\"text\":\"\"},{\"line\":572,\"text\":\"\\t\\t\\t$this->installedAddOn = $installed;\"},{\"line\":573,\"text\":\"\"},{\"line\":574,\"text\":\"\\t\\t\\t\\\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":575,\"text\":\"\\t\\t}\"}],\"match_line\":566,\"match_text\":\"\\t\\t\\t\\t'is_processing' => true,\"},{\"context\":[{\"line\":563,\"text\":\"\\t\\t\\t\\t'version_string' => $json['version_string'],\"},{\"line\":564,\"text\":\"\\t\\t\\t\\t'version_id' => $json['version_id'],\"},{\"line\":565,\"text\":\"\\t\\t\\t\\t'active' => true,\"},{\"line\":566,\"text\":\"\\t\\t\\t\\t'is_processing' => true,\"},{\"line\":567,\"text\":\"\\t\\t\\t\\t'json_hash' => $this->getJsonHash(),\"},{\"line\":568,\"text\":\"\\t\\t\\t\\t'last_pending_action' => 'install:0',\"},{\"line\":569,\"text\":\"\\t\\t\\t]);\"},{\"line\":570,\"text\":\"\\t\\t\\t$installed->save();\"},{\"line\":571,\"text\":\"\"},{\"line\":572,\"text\":\"\\t\\t\\t$this->installedAddOn = $installed;\"},{\"line\":573,\"text\":\"\"},{\"line\":574,\"text\":\"\\t\\t\\t\\\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":575,\"text\":\"\\t\\t}\"},{\"line\":576,\"text\":\"\\t}\"},{\"line\":577,\"text\":\"\"}],\"match_line\":568,\"match_text\":\"\\t\\t\\t\\t'last_pending_action' => 'install:0',\"},{\"context\":[{\"line\":573,\"text\":\"\"},{\"line\":574,\"text\":\"\\t\\t\\t\\\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":575,\"text\":\"\\t\\t}\"},{\"line\":576,\"text\":\"\\t}\"},{\"line\":577,\"text\":\"\"},{\"line\":578,\"text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"line\":579,\"text\":\"\\t{\"},{\"line\":580,\"text\":\"\\t\\t$setup = $this->getSetup();\"},{\"line\":581,\"text\":\"\\t\\tif ($setup)\"},{\"line\":582,\"text\":\"\\t\\t{\"},{\"line\":583,\"text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"line\":584,\"text\":\"\\t\\t}\"},{\"line\":585,\"text\":\"\"},{\"line\":586,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":587,\"text\":\"\"}],\"match_line\":578,\"match_text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"context\":[{\"line\":578,\"text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"line\":579,\"text\":\"\\t{\"},{\"line\":580,\"text\":\"\\t\\t$setup = $this->getSetup();\"},{\"line\":581,\"text\":\"\\t\\tif ($setup)\"},{\"line\":582,\"text\":\"\\t\\t{\"},{\"line\":583,\"text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"line\":584,\"text\":\"\\t\\t}\"},{\"line\":585,\"text\":\"\"},{\"line\":586,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":587,\"text\":\"\"},{\"line\":588,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":589,\"text\":\"\"},{\"line\":590,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":591,\"text\":\"\\t\\t\\\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);\"},{\"line\":592,\"text\":\"\\t}\"}],\"match_line\":583,\"match_text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"context\":[{\"line\":581,\"text\":\"\\t\\tif ($setup)\"},{\"line\":582,\"text\":\"\\t\\t{\"},{\"line\":583,\"text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"line\":584,\"text\":\"\\t\\t}\"},{\"line\":585,\"text\":\"\"},{\"line\":586,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":587,\"text\":\"\"},{\"line\":588,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":589,\"text\":\"\"},{\"line\":590,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":591,\"text\":\"\\t\\t\\\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);\"},{\"line\":592,\"text\":\"\\t}\"},{\"line\":593,\"text\":\"\"},{\"line\":594,\"text\":\"\\tpublic function preUpgrade()\"},{\"line\":595,\"text\":\"\\t{\"}],\"match_line\":586,\"match_text\":\"\\t\\t$this->resetPendingAction();\"},{\"context\":[{\"line\":612,\"text\":\"\\t\\t}\"},{\"line\":613,\"text\":\"\"},{\"line\":614,\"text\":\"\\t\\t// as we will be importing data after this, we don't need to bother doing this now\"},{\"line\":615,\"text\":\"\\t\\t$installed->setOption('rebuild_active_change', false);\"},{\"line\":616,\"text\":\"\\t\\t$installed->active = true;\"},{\"line\":617,\"text\":\"\\t\\t$installed->is_processing = true;\"},{\"line\":618,\"text\":\"\"},{\"line\":619,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":620,\"text\":\"\\t\\t$installed->resetOption('rebuild_active_change');\"},{\"line\":621,\"text\":\"\"},{\"line\":622,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":623,\"text\":\"\\t\\t\\\\XF::fire('addon_pre_upgrade', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":624,\"text\":\"\\t}\"},{\"line\":625,\"text\":\"\"},{\"line\":626,\"text\":\"\\tpublic function postUpgrade(array &$stateChanges)\"}],\"match_line\":617,\"match_text\":\"\\t\\t$installed->is_processing = true;\"},{\"context\":[{\"line\":632,\"text\":\"\\t\\t{\"},{\"line\":633,\"text\":\"\\t\\t\\t$previousVersion = $installed ? $installed->version_id : null;\"},{\"line\":634,\"text\":\"\\t\\t\\t$setup->postUpgrade($previousVersion, $stateChanges);\"},{\"line\":635,\"text\":\"\\t\\t}\"},{\"line\":636,\"text\":\"\"},{\"line\":637,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":638,\"text\":\"\\t\\t$this->syncFromJson();\"},{\"line\":639,\"text\":\"\"},{\"line\":640,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":641,\"text\":\"\\t\\t\\\\XF::fire('addon_post_upgrade', [$this, $installed, $json, &$stateChanges], $installed->addon_id);\"},{\"line\":642,\"text\":\"\\t}\"},{\"line\":643,\"text\":\"\"},{\"line\":644,\"text\":\"\\tpublic function preUninstall()\"},{\"line\":645,\"text\":\"\\t{\"},{\"line\":646,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"}],\"match_line\":637,\"match_text\":\"\\t\\t$this->resetPendingAction();\"},{\"context\":[{\"line\":647,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":648,\"text\":\"\\t\\t{\"},{\"line\":649,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":650,\"text\":\"\\t\\t}\"},{\"line\":651,\"text\":\"\"},{\"line\":652,\"text\":\"\\t\\t$installed->is_processing = true;\"},{\"line\":653,\"text\":\"\\t\\t$installed->last_pending_action = 'uninstall:0';\"},{\"line\":654,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":655,\"text\":\"\"},{\"line\":656,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":657,\"text\":\"\\t\\t\\\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":658,\"text\":\"\\t}\"},{\"line\":659,\"text\":\"\"},{\"line\":660,\"text\":\"\\tpublic function postUninstall()\"},{\"line\":661,\"text\":\"\\t{\"}],\"match_line\":652,\"match_text\":\"\\t\\t$installed->is_processing = true;\"},{\"context\":[{\"line\":648,\"text\":\"\\t\\t{\"},{\"line\":649,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":650,\"text\":\"\\t\\t}\"},{\"line\":651,\"text\":\"\"},{\"line\":652,\"text\":\"\\t\\t$installed->is_processing = true;\"},{\"line\":653,\"text\":\"\\t\\t$installed->last_pending_action = 'uninstall:0';\"},{\"line\":654,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":655,\"text\":\"\"},{\"line\":656,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":657,\"text\":\"\\t\\t\\\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":658,\"text\":\"\\t}\"},{\"line\":659,\"text\":\"\"},{\"line\":660,\"text\":\"\\tpublic function postUninstall()\"},{\"line\":661,\"text\":\"\\t{\"},{\"line\":662,\"text\":\"\\t\\t/** @var FileCheck $fileCheck */\"}],\"match_line\":653,\"match_text\":\"\\t\\t$installed->last_pending_action = 'uninstall:0';\"},{\"context\":[{\"line\":679,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":680,\"text\":\"\\t\\t{\"},{\"line\":681,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":682,\"text\":\"\\t\\t}\"},{\"line\":683,\"text\":\"\"},{\"line\":684,\"text\":\"\\t\\t$installed->is_processing = true;\"},{\"line\":685,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":686,\"text\":\"\"},{\"line\":687,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":688,\"text\":\"\\t\\t\\\\XF::fire('addon_pre_rebuild', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":689,\"text\":\"\\t}\"},{\"line\":690,\"text\":\"\"},{\"line\":691,\"text\":\"\\tpublic function postRebuild()\"},{\"line\":692,\"text\":\"\\t{\"},{\"line\":693,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"}],\"match_line\":684,\"match_text\":\"\\t\\t$installed->is_processing = true;\"},{\"context\":[{\"line\":711,\"text\":\"\\t\\t{\"},{\"line\":712,\"text\":\"\\t\\t\\t$setup->onActiveChange($newActive, $jobList);\"},{\"line\":713,\"text\":\"\\t\\t}\"},{\"line\":714,\"text\":\"\\t}\"},{\"line\":715,\"text\":\"\"},{\"line\":716,\"text\":\"\\tpublic function postDataImport()\"},{\"line\":717,\"text\":\"\\t{\"},{\"line\":718,\"text\":\"\\t\\t// all data will be imported, re-enable this so postX methods will have access to their methods\"},{\"line\":719,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":720,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":721,\"text\":\"\\t\\t{\"},{\"line\":722,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":723,\"text\":\"\\t\\t}\"},{\"line\":724,\"text\":\"\"},{\"line\":725,\"text\":\"\\t\\t$installed->is_processing = false;\"}],\"match_line\":716,\"match_text\":\"\\tpublic function postDataImport()\"},{\"context\":[{\"line\":720,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":721,\"text\":\"\\t\\t{\"},{\"line\":722,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":723,\"text\":\"\\t\\t}\"},{\"line\":724,\"text\":\"\"},{\"line\":725,\"text\":\"\\t\\t$installed->is_processing = false;\"},{\"line\":726,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":727,\"text\":\"\"},{\"line\":728,\"text\":\"\\t\\t\\\\XF::repository(OptionRepository::class)->updateOption('jsLastUpdate', \\\\XF::$time);\"},{\"line\":729,\"text\":\"\\t}\"},{\"line\":730,\"text\":\"\"},{\"line\":731,\"text\":\"\\tpublic function syncFromJson($extraChanges = [])\"},{\"line\":732,\"text\":\"\\t{\"},{\"line\":733,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":734,\"text\":\"\\t\\tif (!$installed)\"}],\"match_line\":725,\"match_text\":\"\\t\\t$installed->is_processing = false;\"}],\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"},\"src/XF/AddOn/DataManager.php\":{\"hits\":[{\"context\":[{\"line\":80,\"text\":\"\\t\\t}\"},{\"line\":81,\"text\":\"\"},{\"line\":82,\"text\":\"\\t\\treturn $document;\"},{\"line\":83,\"text\":\"\\t}\"},{\"line\":84,\"text\":\"\"},{\"line\":85,\"text\":\"\\tpublic function enqueueImportAddOnData(AddOn $addOn)\"},{\"line\":86,\"text\":\"\\t{\"},{\"line\":87,\"text\":\"\\t\\treturn \\\\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, [\"},{\"line\":88,\"text\":\"\\t\\t\\t'addon_id' => $addOn->addon_id,\"},{\"line\":89,\"text\":\"\\t\\t]);\"},{\"line\":90,\"text\":\"\\t}\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\tpublic function getImportDataJobId(AddOn $addOn)\"},{\"line\":93,\"text\":\"\\t{\"},{\"line\":94,\"text\":\"\\t\\treturn 'addOnData-' . $addOn->addon_id;\"}],\"match_line\":85,\"match_text\":\"\\tpublic function enqueueImportAddOnData(AddOn $addOn)\"}],\"sha256\":\"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0\"},\"src/XF/Admin/Controller/AddOnController.php\":{\"hits\":[{\"context\":[{\"line\":371,\"text\":\"\\t\\tif ($this->isPost())\"},{\"line\":372,\"text\":\"\\t\\t{\"},{\"line\":373,\"text\":\"\\t\\t\\t$addOn->preRebuild();\"},{\"line\":374,\"text\":\"\"},{\"line\":375,\"text\":\"\\t\\t\\t$dataManager = $this->app->addOnDataManager();\"},{\"line\":376,\"text\":\"\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"line\":377,\"text\":\"\"},{\"line\":378,\"text\":\"\\t\\t\\treturn $this->redirect($this->getFinalizeUrl($addOn, 'rebuild'));\"},{\"line\":379,\"text\":\"\\t\\t}\"},{\"line\":380,\"text\":\"\\t\\telse\"},{\"line\":381,\"text\":\"\\t\\t{\"},{\"line\":382,\"text\":\"\\t\\t\\t$viewParams = [\"},{\"line\":383,\"text\":\"\\t\\t\\t\\t'addOn' => $addOn,\"},{\"line\":384,\"text\":\"\\t\\t\\t\\t'warnings' => $warnings,\"},{\"line\":385,\"text\":\"\\t\\t\\t\\t'errors' => $errors,\"}],\"match_line\":376,\"match_text\":\"\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"context\":[{\"line\":411,\"text\":\"\\t\\t\\t]);\"},{\"line\":412,\"text\":\"\"},{\"line\":413,\"text\":\"\\t\\t\\tif ($input['finished'])\"},{\"line\":414,\"text\":\"\\t\\t\\t{\"},{\"line\":415,\"text\":\"\\t\\t\\t\\t$dataManager = $this->app->addOnDataManager();\"},{\"line\":416,\"text\":\"\\t\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"line\":417,\"text\":\"\"},{\"line\":418,\"text\":\"\\t\\t\\t\\treturn $this->redirect($this->getFinalizeUrl($addOn, 'install'));\"},{\"line\":419,\"text\":\"\\t\\t\\t}\"},{\"line\":420,\"text\":\"\\t\\t\\telse\"},{\"line\":421,\"text\":\"\\t\\t\\t{\"},{\"line\":422,\"text\":\"\\t\\t\\t\\t$setup = $addOn->getSetup();\"},{\"line\":423,\"text\":\"\"},{\"line\":424,\"text\":\"\\t\\t\\t\\tif ($input['_xfProcessing'])\"},{\"line\":425,\"text\":\"\\t\\t\\t\\t{\"}],\"match_line\":416,\"match_text\":\"\\t\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"context\":[{\"line\":431,\"text\":\"\\t\\t\\t\\t\\t$result = $setup ? $setup->install($input['params']) : null;\"},{\"line\":432,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":433,\"text\":\"\\t\\t\\t\\telse\"},{\"line\":434,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":435,\"text\":\"\\t\\t\\t\\t\\t$result = null;\"},{\"line\":436,\"text\":\"\\t\\t\\t\\t\\t$addOn->preInstall();\"},{\"line\":437,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":438,\"text\":\"\"},{\"line\":439,\"text\":\"\\t\\t\\t\\treturn $this->displayAddOnActionStep(\"},{\"line\":440,\"text\":\"\\t\\t\\t\\t\\t$addOn,\"},{\"line\":441,\"text\":\"\\t\\t\\t\\t\\t$result,\"},{\"line\":442,\"text\":\"\\t\\t\\t\\t\\t\\\\XF::phrase('installing'),\"},{\"line\":443,\"text\":\"\\t\\t\\t\\t\\t'add-ons/install',\"},{\"line\":444,\"text\":\"\\t\\t\\t\\t\\t$input['count']\"},{\"line\":445,\"text\":\"\\t\\t\\t\\t);\"}],\"match_line\":436,\"match_text\":\"\\t\\t\\t\\t\\t$addOn->preInstall();\"},{\"context\":[{\"line\":592,\"text\":\"\\t\\t\\t]);\"},{\"line\":593,\"text\":\"\"},{\"line\":594,\"text\":\"\\t\\t\\tif ($input['finished'])\"},{\"line\":595,\"text\":\"\\t\\t\\t{\"},{\"line\":596,\"text\":\"\\t\\t\\t\\t$dataManager = $this->app->addOnDataManager();\"},{\"line\":597,\"text\":\"\\t\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"line\":598,\"text\":\"\"},{\"line\":599,\"text\":\"\\t\\t\\t\\treturn $this->redirect($this->getFinalizeUrl($addOn, 'upgrade'));\"},{\"line\":600,\"text\":\"\\t\\t\\t}\"},{\"line\":601,\"text\":\"\\t\\t\\telse\"},{\"line\":602,\"text\":\"\\t\\t\\t{\"},{\"line\":603,\"text\":\"\\t\\t\\t\\t$setup = $addOn->getSetup();\"},{\"line\":604,\"text\":\"\"},{\"line\":605,\"text\":\"\\t\\t\\t\\tif ($input['_xfProcessing'])\"},{\"line\":606,\"text\":\"\\t\\t\\t\\t{\"}],\"match_line\":597,\"match_text\":\"\\t\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"context\":[{\"line\":774,\"text\":\"\\t\\t}\"},{\"line\":775,\"text\":\"\"},{\"line\":776,\"text\":\"\\t\\tif ($installed && $action != 'uninstall')\"},{\"line\":777,\"text\":\"\\t\\t{\"},{\"line\":778,\"text\":\"\\t\\t\\t// this is a sanity check, it shouldn't happen\"},{\"line\":779,\"text\":\"\\t\\t\\t$installed->is_processing = false;\"},{\"line\":780,\"text\":\"\\t\\t\\t$installed->save();\"},{\"line\":781,\"text\":\"\\t\\t}\"},{\"line\":782,\"text\":\"\"},{\"line\":783,\"text\":\"\\t\\t$redirect = $this->buildLink('add-ons');\"},{\"line\":784,\"text\":\"\\t\\t$stateChanges = [];\"},{\"line\":785,\"text\":\"\"},{\"line\":786,\"text\":\"\\t\\tif ($addOn)\"},{\"line\":787,\"text\":\"\\t\\t{\"},{\"line\":788,\"text\":\"\\t\\t\\tswitch ($action)\"}],\"match_line\":779,\"match_text\":\"\\t\\t\\t$installed->is_processing = false;\"},{\"context\":[{\"line\":789,\"text\":\"\\t\\t\\t{\"},{\"line\":790,\"text\":\"\\t\\t\\t\\tcase 'upgrade':\"},{\"line\":791,\"text\":\"\\t\\t\\t\\t\\t$addOn->postUpgrade($stateChanges);\"},{\"line\":792,\"text\":\"\\t\\t\\t\\t\\tbreak;\"},{\"line\":793,\"text\":\"\\t\\t\\t\\tcase 'install':\"},{\"line\":794,\"text\":\"\\t\\t\\t\\t\\t$addOn->postInstall($stateChanges);\"},{\"line\":795,\"text\":\"\\t\\t\\t\\t\\tbreak;\"},{\"line\":796,\"text\":\"\\t\\t\\t\\tcase 'uninstall':\"},{\"line\":797,\"text\":\"\\t\\t\\t\\t\\t$addOn->postUninstall();\"},{\"line\":798,\"text\":\"\\t\\t\\t\\t\\tbreak;\"},{\"line\":799,\"text\":\"\\t\\t\\t\\tcase 'rebuild':\"},{\"line\":800,\"text\":\"\\t\\t\\t\\t\\t$addOn->postRebuild();\"},{\"line\":801,\"text\":\"\\t\\t\\t\\t\\tbreak;\"},{\"line\":802,\"text\":\"\\t\\t\\t}\"},{\"line\":803,\"text\":\"\\t\\t}\"}],\"match_line\":794,\"match_text\":\"\\t\\t\\t\\t\\t$addOn->postInstall($stateChanges);\"}],\"sha256\":\"2f49d3d8edd5e288d43fff571b02c75b0f297d5ab0a0f934582b7dc11f913915\"},\"src/XF/Job/AddOnData.php\":{\"hits\":[{\"context\":[{\"line\":75,\"text\":\"\\t\\t\\t$this->data['current_type'] = array_shift($this->data['data_types']);\"},{\"line\":76,\"text\":\"\\t\\t\\tif (!$this->data['current_type'])\"},{\"line\":77,\"text\":\"\\t\\t\\t{\"},{\"line\":78,\"text\":\"\\t\\t\\t\\tif ($addOn)\"},{\"line\":79,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":80,\"text\":\"\\t\\t\\t\\t\\t$addOn->postDataImport();\"},{\"line\":81,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":82,\"text\":\"\"},{\"line\":83,\"text\":\"\\t\\t\\t\\t$repo = $this->app->repository(StyleRepository::class);\"},{\"line\":84,\"text\":\"\\t\\t\\t\\t$repo->updateAllStylesLastModifiedDateLater();\"},{\"line\":85,\"text\":\"\"},{\"line\":86,\"text\":\"\\t\\t\\t\\treturn $this->complete();\"},{\"line\":87,\"text\":\"\\t\\t\\t}\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\t\\t$this->data['start'] = 0;\"}],\"match_line\":80,\"match_text\":\"\\t\\t\\t\\t\\t$addOn->postDataImport();\"}],\"sha256\":\"3b34bd0837176ac8bef4e9d34152a9d776c4fa195aebf186a389deec75d36535\"}},\"methods\":{\"actionInstall\":[{\"context\":[{\"line\":713,\"text\":\"\\tpublic function actionInstallXfAddOn()\"},{\"line\":714,\"text\":\"\\t{\"},{\"line\":715,\"text\":\"\\t\\t$this->assertAdminPermission('upgradeXenForo');\"},{\"line\":716,\"text\":\"\\t\\t$this->assertAdminPermission('addOn');\"},{\"line\":717,\"text\":\"\\t\\t$this->assertUpgradeCheckingPossible();\"},{\"line\":718,\"text\":\"\\t\\t$this->assertCanOneClickUpgrade();\"},{\"line\":719,\"text\":\"\"},{\"line\":720,\"text\":\"\\t\\t$upgradeCheckRepo = $this->repository(UpgradeCheckRepository::class);\"},{\"line\":721,\"text\":\"\\t\\t$upgradeCheck = $upgradeCheckRepo->getLatestUpgradeCheck();\"},{\"line\":722,\"text\":\"\"},{\"line\":723,\"text\":\"\\t\\tif (!$upgradeCheck)\"},{\"line\":724,\"text\":\"\\t\\t{\"},{\"line\":725,\"text\":\"\\t\\t\\treturn $this->redirect($this->buildLink('tools/upgrade-check'));\"},{\"line\":726,\"text\":\"\\t\\t}\"},{\"line\":727,\"text\":\"\\t\\tif (!$upgradeCheck->canDownload())\"},{\"line\":728,\"text\":\"\\t\\t{\"},{\"line\":729,\"text\":\"\\t\\t\\treturn $this->error(\\\\XF::phrase('issues_with_license_must_resolve_before_upgrading'));\"},{\"line\":730,\"text\":\"\\t\\t}\"},{\"line\":731,\"text\":\"\"},{\"line\":732,\"text\":\"\\t\\t$addOnRepo = $this->repository(AddOnRepository::class);\"},{\"line\":733,\"text\":\"\\t\\tif (!$addOnRepo->canInstallFromArchive($error, true))\"},{\"line\":734,\"text\":\"\\t\\t{\"},{\"line\":735,\"text\":\"\\t\\t\\treturn $this->error(\\\\XF::phrase('following_issue_found_one_click_upgrade_x', ['error' => $error]));\"},{\"line\":736,\"text\":\"\\t\\t}\"},{\"line\":737,\"text\":\"\"},{\"line\":738,\"text\":\"\\t\\t$installableAddOns = [];\"},{\"line\":739,\"text\":\"\"},{\"line\":740,\"text\":\"\\t\\tforeach ($upgradeCheck->installable_add_ons AS $addOnId => $install)\"},{\"line\":741,\"text\":\"\\t\\t{\"},{\"line\":742,\"text\":\"\\t\\t\\t$installableAddOns[$addOnId] = $install;\"},{\"line\":743,\"text\":\"\\t\\t}\"},{\"line\":744,\"text\":\"\"},{\"line\":745,\"text\":\"\\t\\tif ($this->isPost())\"},{\"line\":746,\"text\":\"\\t\\t{\"},{\"line\":747,\"text\":\"\\t\\t\\t$confirmInstalls = $this->filter('confirm_install', 'array-uint');\"},{\"line\":748,\"text\":\"\\t\\t\\t$filesToDownload = [];\"},{\"line\":749,\"text\":\"\\t\\t\\tforeach ($confirmInstalls AS $addOnId => $versionId)\"},{\"line\":750,\"text\":\"\\t\\t\\t{\"},{\"line\":751,\"text\":\"\\t\\t\\t\\t$filesToDownload[$addOnId] = $installableAddOns[$addOnId];\"},{\"line\":752,\"text\":\"\\t\\t\\t}\"},{\"line\":753,\"text\":\"\"},{\"line\":754,\"text\":\"\\t\\t\\tif (!$filesToDownload)\"},{\"line\":755,\"text\":\"\\t\\t\\t{\"},{\"line\":756,\"text\":\"\\t\\t\\t\\treturn $this->error(\\\\XF::phrase('no_installs_were_selected_for_download'));\"},{\"line\":757,\"text\":\"\\t\\t\\t}\"},{\"line\":758,\"text\":\"\"},{\"line\":759,\"text\":\"\\t\\t\\tif ($upgradeCheck->license_agreement_required)\"},{\"line\":760,\"text\":\"\\t\\t\\t{\"},{\"line\":761,\"text\":\"\\t\\t\\t\\t$agree = $this->filter('agree', 'bool');\"},{\"line\":762,\"text\":\"\\t\\t\\t\\tif (!$agree)\"},{\"line\":763,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":764,\"text\":\"\\t\\t\\t\\t\\treturn $this->error(\\\\XF::phrase('you_must_agree_to_terms_of_xenforo_license_agreement_to_continue'));\"},{\"line\":765,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":766,\"text\":\"\\t\\t\\t}\"},{\"line\":767,\"text\":\"\"},{\"line\":768,\"text\":\"\\t\\t\\t$addOnBatch = $this->downloadAndCreateAddOnBatch($filesToDownload, $upgradeCheck->license_agreement_required);\"},{\"line\":769,\"text\":\"\"},{\"line\":770,\"text\":\"\\t\\t\\t// note: this will bypass the install from archive config check intentionally\"},{\"line\":771,\"text\":\"\\t\\t\\treturn $this->redirect(\"},{\"line\":772,\"text\":\"\\t\\t\\t\\t$this->buildLink('add-ons/install-from-archive-confirm', null, ['batch_id' => $addOnBatch->batch_id])\"},{\"line\":773,\"text\":\"\\t\\t\\t);\"},{\"line\":774,\"text\":\"\\t\\t}\"},{\"line\":775,\"text\":\"\\t\\telse\"},{\"line\":776,\"text\":\"\\t\\t{\"},{\"line\":777,\"text\":\"\\t\\t\\t$viewParams = [\"},{\"line\":778,\"text\":\"\\t\\t\\t\\t'upgradeCheck' => $upgradeCheck,\"},{\"line\":779,\"text\":\"\\t\\t\\t\\t'installableAddOns' => $installableAddOns,\"},{\"line\":780,\"text\":\"\\t\\t\\t];\"},{\"line\":781,\"text\":\"\\t\\t\\treturn $this->view(\"},{\"line\":782,\"text\":\"\\t\\t\\t\\t'XF:Tools\\\\InstallXfAddOn',\"},{\"line\":783,\"text\":\"\\t\\t\\t\\t'tools_install_xf_addon',\"},{\"line\":784,\"text\":\"\\t\\t\\t\\t$viewParams\"},{\"line\":785,\"text\":\"\\t\\t\\t);\"},{\"line\":786,\"text\":\"\\t\\t}\"},{\"line\":787,\"text\":\"\\t}\"}],\"path\":\"src/XF/Admin/Controller/ToolsController.php\",\"sha256\":\"eeb900c4158b215003adfdb3849c083a4c95c32cb4a04ed3f7d9d5283b6157a9\"},{\"context\":[{\"line\":391,\"text\":\"\\tpublic function actionInstall(ParameterBag $params)\"},{\"line\":392,\"text\":\"\\t{\"},{\"line\":393,\"text\":\"\\t\\t$addOn = $this->assertAddOnAvailable($params->addon_id_url);\"},{\"line\":394,\"text\":\"\\t\\tif (!$addOn->canInstall())\"},{\"line\":395,\"text\":\"\\t\\t{\"},{\"line\":396,\"text\":\"\\t\\t\\treturn $this->error(\\\\XF::phrase('this_add_on_cannot_be_installed'));\"},{\"line\":397,\"text\":\"\\t\\t}\"},{\"line\":398,\"text\":\"\"},{\"line\":399,\"text\":\"\\t\\t[$warnings, $errors] = $this->getAddOnWarningsAndErrors($addOn);\"},{\"line\":400,\"text\":\"\"},{\"line\":401,\"text\":\"\\t\\tif ($this->isPost())\"},{\"line\":402,\"text\":\"\\t\\t{\"},{\"line\":403,\"text\":\"\\t\\t\\t// this applies to add-on changes as well, so we want to ensure errors here are shown and logged\"},{\"line\":404,\"text\":\"\\t\\t\\t\\\\XF::app()->error()->setIgnorePendingUpgrade(true);\"},{\"line\":405,\"text\":\"\"},{\"line\":406,\"text\":\"\\t\\t\\t$input = $this->filter([\"},{\"line\":407,\"text\":\"\\t\\t\\t\\t'_xfProcessing' => 'bool',\"},{\"line\":408,\"text\":\"\\t\\t\\t\\t'params' => 'json-array',\"},{\"line\":409,\"text\":\"\\t\\t\\t\\t'count' => 'uint',\"},{\"line\":410,\"text\":\"\\t\\t\\t\\t'finished' => 'bool',\"},{\"line\":411,\"text\":\"\\t\\t\\t]);\"},{\"line\":412,\"text\":\"\"},{\"line\":413,\"text\":\"\\t\\t\\tif ($input['finished'])\"},{\"line\":414,\"text\":\"\\t\\t\\t{\"},{\"line\":415,\"text\":\"\\t\\t\\t\\t$dataManager = $this->app->addOnDataManager();\"},{\"line\":416,\"text\":\"\\t\\t\\t\\t$dataManager->enqueueImportAddOnData($addOn);\"},{\"line\":417,\"text\":\"\"},{\"line\":418,\"text\":\"\\t\\t\\t\\treturn $this->redirect($this->getFinalizeUrl($addOn, 'install'));\"},{\"line\":419,\"text\":\"\\t\\t\\t}\"},{\"line\":420,\"text\":\"\\t\\t\\telse\"},{\"line\":421,\"text\":\"\\t\\t\\t{\"},{\"line\":422,\"text\":\"\\t\\t\\t\\t$setup = $addOn->getSetup();\"},{\"line\":423,\"text\":\"\"},{\"line\":424,\"text\":\"\\t\\t\\t\\tif ($input['_xfProcessing'])\"},{\"line\":425,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":426,\"text\":\"\\t\\t\\t\\t\\tif ($setup)\"},{\"line\":427,\"text\":\"\\t\\t\\t\\t\\t{\"},{\"line\":428,\"text\":\"\\t\\t\\t\\t\\t\\t$setup->prepareForAction('install');\"},{\"line\":429,\"text\":\"\\t\\t\\t\\t\\t}\"},{\"line\":430,\"text\":\"\"},{\"line\":431,\"text\":\"\\t\\t\\t\\t\\t$result = $setup ? $setup->install($input['params']) : null;\"},{\"line\":432,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":433,\"text\":\"\\t\\t\\t\\telse\"},{\"line\":434,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":435,\"text\":\"\\t\\t\\t\\t\\t$result = null;\"},{\"line\":436,\"text\":\"\\t\\t\\t\\t\\t$addOn->preInstall();\"},{\"line\":437,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":438,\"text\":\"\"},{\"line\":439,\"text\":\"\\t\\t\\t\\treturn $this->displayAddOnActionStep(\"},{\"line\":440,\"text\":\"\\t\\t\\t\\t\\t$addOn,\"},{\"line\":441,\"text\":\"\\t\\t\\t\\t\\t$result,\"},{\"line\":442,\"text\":\"\\t\\t\\t\\t\\t\\\\XF::phrase('installing'),\"},{\"line\":443,\"text\":\"\\t\\t\\t\\t\\t'add-ons/install',\"},{\"line\":444,\"text\":\"\\t\\t\\t\\t\\t$input['count']\"},{\"line\":445,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":446,\"text\":\"\\t\\t\\t}\"},{\"line\":447,\"text\":\"\\t\\t}\"},{\"line\":448,\"text\":\"\\t\\telse\"},{\"line\":449,\"text\":\"\\t\\t{\"},{\"line\":450,\"text\":\"\\t\\t\\t$viewParams = [\"},{\"line\":451,\"text\":\"\\t\\t\\t\\t'addOn' => $addOn,\"},{\"line\":452,\"text\":\"\\t\\t\\t\\t'warnings' => $warnings,\"},{\"line\":453,\"text\":\"\\t\\t\\t\\t'errors' => $errors,\"},{\"line\":454,\"text\":\"\\t\\t\\t];\"},{\"line\":455,\"text\":\"\\t\\t\\treturn $this->view('XF:AddOn\\\\Install', 'addon_install', $viewParams);\"},{\"line\":456,\"text\":\"\\t\\t}\"},{\"line\":457,\"text\":\"\\t}\"}],\"path\":\"src/XF/Admin/Controller/AddOnController.php\",\"sha256\":\"2f49d3d8edd5e288d43fff571b02c75b0f297d5ab0a0f934582b7dc11f913915\"}],\"actionUninstall\":[{\"context\":[{\"line\":640,\"text\":\"\\tpublic function actionUninstall(ParameterBag $params)\"},{\"line\":641,\"text\":\"\\t{\"},{\"line\":642,\"text\":\"\\t\\t$addOn = $this->assertAddOnAvailable($params->addon_id_url);\"},{\"line\":643,\"text\":\"\\t\\tif (!$addOn->canUninstall())\"},{\"line\":644,\"text\":\"\\t\\t{\"},{\"line\":645,\"text\":\"\\t\\t\\treturn $this->error(\\\\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing'));\"},{\"line\":646,\"text\":\"\\t\\t}\"},{\"line\":647,\"text\":\"\"},{\"line\":648,\"text\":\"\\t\\tif ($this->isPost())\"},{\"line\":649,\"text\":\"\\t\\t{\"},{\"line\":650,\"text\":\"\\t\\t\\t// this applies to add-on changes as well, so we want to ensure errors here are shown and logged\"},{\"line\":651,\"text\":\"\\t\\t\\t\\\\XF::app()->error()->setIgnorePendingUpgrade(true);\"},{\"line\":652,\"text\":\"\"},{\"line\":653,\"text\":\"\\t\\t\\t$input = $this->filter([\"},{\"line\":654,\"text\":\"\\t\\t\\t\\t'_xfProcessing' => 'bool',\"},{\"line\":655,\"text\":\"\\t\\t\\t\\t'params' => 'json-array',\"},{\"line\":656,\"text\":\"\\t\\t\\t\\t'count' => 'uint',\"},{\"line\":657,\"text\":\"\\t\\t\\t\\t'finished' => 'bool',\"},{\"line\":658,\"text\":\"\\t\\t\\t]);\"},{\"line\":659,\"text\":\"\"},{\"line\":660,\"text\":\"\\t\\t\\tif ($input['finished'])\"},{\"line\":661,\"text\":\"\\t\\t\\t{\"},{\"line\":662,\"text\":\"\\t\\t\\t\\t$addOn->getInstalledAddOn()->delete();\"},{\"line\":663,\"text\":\"\\t\\t\\t\\treturn $this->redirect($this->getFinalizeUrl($addOn, 'uninstall'));\"},{\"line\":664,\"text\":\"\\t\\t\\t}\"},{\"line\":665,\"text\":\"\\t\\t\\telse\"},{\"line\":666,\"text\":\"\\t\\t\\t{\"},{\"line\":667,\"text\":\"\\t\\t\\t\\t$setup = $addOn->getSetup();\"},{\"line\":668,\"text\":\"\"},{\"line\":669,\"text\":\"\\t\\t\\t\\tif ($input['_xfProcessing'])\"},{\"line\":670,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":671,\"text\":\"\\t\\t\\t\\t\\tif ($setup)\"},{\"line\":672,\"text\":\"\\t\\t\\t\\t\\t{\"},{\"line\":673,\"text\":\"\\t\\t\\t\\t\\t\\t$setup->prepareForAction('uninstall');\"},{\"line\":674,\"text\":\"\\t\\t\\t\\t\\t}\"},{\"line\":675,\"text\":\"\"},{\"line\":676,\"text\":\"\\t\\t\\t\\t\\t$result = $setup ? $setup->uninstall($input['params']) : null;\"},{\"line\":677,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":678,\"text\":\"\\t\\t\\t\\telse\"},{\"line\":679,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":680,\"text\":\"\\t\\t\\t\\t\\t$result = null;\"},{\"line\":681,\"text\":\"\\t\\t\\t\\t\\t$addOn->preUninstall();\"},{\"line\":682,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":683,\"text\":\"\"},{\"line\":684,\"text\":\"\\t\\t\\t\\treturn $this->displayAddOnActionStep(\"},{\"line\":685,\"text\":\"\\t\\t\\t\\t\\t$addOn,\"},{\"line\":686,\"text\":\"\\t\\t\\t\\t\\t$result,\"},{\"line\":687,\"text\":\"\\t\\t\\t\\t\\t\\\\XF::phrase('uninstalling'),\"},{\"line\":688,\"text\":\"\\t\\t\\t\\t\\t'add-ons/uninstall',\"},{\"line\":689,\"text\":\"\\t\\t\\t\\t\\t$input['count']\"},{\"line\":690,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":691,\"text\":\"\\t\\t\\t}\"},{\"line\":692,\"text\":\"\\t\\t}\"},{\"line\":693,\"text\":\"\\t\\telse\"},{\"line\":694,\"text\":\"\\t\\t{\"},{\"line\":695,\"text\":\"\\t\\t\\t$viewParams = [\"},{\"line\":696,\"text\":\"\\t\\t\\t\\t'addOn' => $addOn,\"},{\"line\":697,\"text\":\"\\t\\t\\t];\"},{\"line\":698,\"text\":\"\\t\\t\\treturn $this->view('XF:AddOn\\\\Uninstall', 'addon_uninstall', $viewParams);\"},{\"line\":699,\"text\":\"\\t\\t}\"},{\"line\":700,\"text\":\"\\t}\"}],\"path\":\"src/XF/Admin/Controller/AddOnController.php\",\"sha256\":\"2f49d3d8edd5e288d43fff571b02c75b0f297d5ab0a0f934582b7dc11f913915\"}],\"enqueueImportAddOnData\":[{\"context\":[{\"line\":85,\"text\":\"\\tpublic function enqueueImportAddOnData(AddOn $addOn)\"},{\"line\":86,\"text\":\"\\t{\"},{\"line\":87,\"text\":\"\\t\\treturn \\\\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, [\"},{\"line\":88,\"text\":\"\\t\\t\\t'addon_id' => $addOn->addon_id,\"},{\"line\":89,\"text\":\"\\t\\t]);\"},{\"line\":90,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/DataManager.php\",\"sha256\":\"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0\"}],\"enqueueRemoveAddOnData\":[{\"context\":[{\"line\":271,\"text\":\"\\tpublic function enqueueRemoveAddOnData($id)\"},{\"line\":272,\"text\":\"\\t{\"},{\"line\":273,\"text\":\"\\t\\treturn \\\\XF::app()->jobManager()->enqueueUnique($id . 'AddOnUnInstall', AddOnUninstallData::class, [\"},{\"line\":274,\"text\":\"\\t\\t\\t'addon_id' => $id,\"},{\"line\":275,\"text\":\"\\t\\t]);\"},{\"line\":276,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/DataManager.php\",\"sha256\":\"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0\"}],\"isInstalled\":[{\"context\":[{\"line\":339,\"text\":\"\\tpublic function isInstalled()\"},{\"line\":340,\"text\":\"\\t{\"},{\"line\":341,\"text\":\"\\t\\tif ($this->installedAddOn === null)\"},{\"line\":342,\"text\":\"\\t\\t{\"},{\"line\":343,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":344,\"text\":\"\\t\\t}\"},{\"line\":345,\"text\":\"\"},{\"line\":346,\"text\":\"\\t\\t$lastAction = $this->installedAddOn->getLastActionStep('install');\"},{\"line\":347,\"text\":\"\\t\\tif ($lastAction !== null)\"},{\"line\":348,\"text\":\"\\t\\t{\"},{\"line\":349,\"text\":\"\\t\\t\\t// we haven't completed the install steps yet, don't consider as installed\"},{\"line\":350,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":351,\"text\":\"\\t\\t}\"},{\"line\":352,\"text\":\"\"},{\"line\":353,\"text\":\"\\t\\treturn true;\"},{\"line\":354,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/AddOn.php\",\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"},{\"context\":[{\"line\":546,\"text\":\"\\tpublic function isInstalled()\"},{\"line\":547,\"text\":\"\\t{\"},{\"line\":548,\"text\":\"\\t\\treturn (\"},{\"line\":549,\"text\":\"\\t\\t\\tFile::installLockExists()\"},{\"line\":550,\"text\":\"\\t\\t\\t&& ($this->app->config('exists') || $this->app->config('legacyExists'))\"},{\"line\":551,\"text\":\"\\t\\t);\"},{\"line\":552,\"text\":\"\\t}\"}],\"path\":\"src/XF/Install/Helper.php\",\"sha256\":\"582a775e5bd3bd75cb1a6b5f0c4efdbe96301400a3bc6f89e75778d652022cf8\"}],\"postDataImport\":[{\"context\":[{\"line\":716,\"text\":\"\\tpublic function postDataImport()\"},{\"line\":717,\"text\":\"\\t{\"},{\"line\":718,\"text\":\"\\t\\t// all data will be imported, re-enable this so postX methods will have access to their methods\"},{\"line\":719,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":720,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":721,\"text\":\"\\t\\t{\"},{\"line\":722,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":723,\"text\":\"\\t\\t}\"},{\"line\":724,\"text\":\"\"},{\"line\":725,\"text\":\"\\t\\t$installed->is_processing = false;\"},{\"line\":726,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":727,\"text\":\"\"},{\"line\":728,\"text\":\"\\t\\t\\\\XF::repository(OptionRepository::class)->updateOption('jsLastUpdate', \\\\XF::$time);\"},{\"line\":729,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/AddOn.php\",\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"}],\"postInstall\":[{\"context\":[{\"line\":578,\"text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"line\":579,\"text\":\"\\t{\"},{\"line\":580,\"text\":\"\\t\\t$setup = $this->getSetup();\"},{\"line\":581,\"text\":\"\\t\\tif ($setup)\"},{\"line\":582,\"text\":\"\\t\\t{\"},{\"line\":583,\"text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"line\":584,\"text\":\"\\t\\t}\"},{\"line\":585,\"text\":\"\"},{\"line\":586,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":587,\"text\":\"\"},{\"line\":588,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":589,\"text\":\"\"},{\"line\":590,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":591,\"text\":\"\\t\\t\\\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);\"},{\"line\":592,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/AddOn.php\",\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"},{\"context\":[{\"line\":60,\"text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"line\":61,\"text\":\"\\t{\"},{\"line\":62,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/AbstractSetup.php\",\"sha256\":\"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88\"}],\"preInstall\":[{\"context\":[{\"line\":553,\"text\":\"\\tpublic function preInstall()\"},{\"line\":554,\"text\":\"\\t{\"},{\"line\":555,\"text\":\"\\t\\tif (!$this->installedAddOn)\"},{\"line\":556,\"text\":\"\\t\\t{\"},{\"line\":557,\"text\":\"\\t\\t\\t$json = $this->getJson();\"},{\"line\":558,\"text\":\"\"},{\"line\":559,\"text\":\"\\t\\t\\t$installed = \\\\XF::em()->create(\\\\XF\\\\Entity\\\\AddOn::class);\"},{\"line\":560,\"text\":\"\\t\\t\\t$installed->bulkSet([\"},{\"line\":561,\"text\":\"\\t\\t\\t\\t'addon_id' => $this->getAddOnId(),\"},{\"line\":562,\"text\":\"\\t\\t\\t\\t'title' => $json['title'],\"},{\"line\":563,\"text\":\"\\t\\t\\t\\t'version_string' => $json['version_string'],\"},{\"line\":564,\"text\":\"\\t\\t\\t\\t'version_id' => $json['version_id'],\"},{\"line\":565,\"text\":\"\\t\\t\\t\\t'active' => true,\"},{\"line\":566,\"text\":\"\\t\\t\\t\\t'is_processing' => true,\"},{\"line\":567,\"text\":\"\\t\\t\\t\\t'json_hash' => $this->getJsonHash(),\"},{\"line\":568,\"text\":\"\\t\\t\\t\\t'last_pending_action' => 'install:0',\"},{\"line\":569,\"text\":\"\\t\\t\\t]);\"},{\"line\":570,\"text\":\"\\t\\t\\t$installed->save();\"},{\"line\":571,\"text\":\"\"},{\"line\":572,\"text\":\"\\t\\t\\t$this->installedAddOn = $installed;\"},{\"line\":573,\"text\":\"\"},{\"line\":574,\"text\":\"\\t\\t\\t\\\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":575,\"text\":\"\\t\\t}\"},{\"line\":576,\"text\":\"\\t}\"}],\"path\":\"src/XF/AddOn/AddOn.php\",\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"}]}}\nNO_MUTATION=True\nPRODUCT_CHECKPOINTS_REMAINING=18\nTASK_RESULT=PASS_PVEPRO_HOMEPAGE_PORTAL_INSTALL_LIFECYCLE_RCA\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n" + "output": "NEWFI266_BEGIN=true\nCOMMAND_ID=NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266\nMODE=local-readonly-recovery\nCHANGES_MADE=false\nMUTATION_OUTCOME=NO_MUTATION\nIMMUTABLE_PLAN_CHECK=PASS\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_SHA_MATCH=true\nINPUT_PARSE_OK=true\nINPUT_CONTRACT_OK=true\nPREV_DIR_PRESENT=true\nREMOTE_PRESENT=true\nREMOTE_HASH_MATCH=true\nSTDOUT_PRESENT=true\nSTDERR_PRESENT=true\nSTDOUT_CONTRACT_FOUND=false\nLOCAL_ERROR=false\nSTDOUT_BYTES=39\nSTDERR_BYTES=0\nSTDOUT_SHA256=22d52cef09a22affbc21147e902dfa46cb1955458d5cacd0398a51241e16bfd6\nSTDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nSTDERR_CLASS=NONE\nPRE_RUNNER_STOP=NONE\nLOCAL_ERROR_CLASS=NONE\nLOCAL_ERROR_SHA256=NONE\nQGA264_LOCAL_RESULT_RECOVERED=false\nDECISION=HOLD_QGA266_QGA264_LOCAL_OUTPUT_UNCLASSIFIED\nNEXT_GATE=RECONCILE_QGA264_LOCAL_OUTPUT\nNEWFI266_END=true\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index a004e4c8..fec61104 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1 +COMMAND_ID=NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=pvepro-homepage-portal-install-lifecycle-rca-readonly +COMPONENT=newfi-messengers214-qga264-local-result-recovery REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=3e979c32a397a411ac1e4144d432831e49d53b89bc5cfef8b70eca4ebe8c81b6 +COMMAND_SHA256=100f254c4bd33c613be094a50f2f2ca56e0fb1eaa6910cd093a8896dd9959b87 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,22 +24,43 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182 -SANITIZED_OUTPUT_SHA256=8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182 +RAW_EVIDENCE_SHA256=e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9 +SANITIZED_OUTPUT_SHA256=e5d77bce3cc9b4ebb3f50a244690c7d538e600ddf924044dcbf78c07e65778c9 OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1 -MODE=read-only -COMPONENT=pvepro-homepage-portal-install-lifecycle-rca-readonly -WINDOW_MODE=VISIBLE_SYNCHRONOUS_WAIT -782_ERROR_DECODE={"matches":true,"sha256":"51939ddaddcc4d67fdb44c0507c06186062f750225b49d7b937841700e8713a7","string":"W2PORTAL782ENQUEUE_MARKER"} -PRODUCTION_HOST={"all_link_down":false,"config_sha256":"ebd2b7d44ab58a222b4fd5a7dcd9358d3082e593bd70fb07c2331c70f22e82ab","name":"pvepro-prod","snapshots":[],"status":"running"} -STAGING_HOST={"all_link_down":true,"config_sha256":"9fd5f15119b54c8f83eb3c4bf47aac12f02e0cb9bc2bf593487a157d2d4840e3","name":"pvepro-staging-v1","snapshots":[],"status":"stopped"} -PRODUCTION_DB_PRESTATE={"addons":[{"active":1,"addon_id":"XF","is_processing":0,"last_pending_action":null}],"board_active":"1","default_style":"2","errors":20,"index_route":"forums/","portal_addon_rows":0,"portal_job_rows":0,"portal_route_rows":0,"portal_template_rows":0} -XF_INSTALL_LIFECYCLE_SOURCE={"likely":{"src/XF/AddOn/AddOn.php":{"hits":[{"context":[{"line":536,"text":""},{"line":537,"text":"\tpublic function updatePendingAction($action, $step)"},{"line":538,"text":"\t{"},{"line":539,"text":"\t\tif ($this->installedAddOn)"},{"line":540,"text":"\t\t{"},{"line":541,"text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', \"$action:$step\");"},{"line":542,"text":"\t\t}"},{"line":543,"text":"\t}"},{"line":544,"text":""},{"line":545,"text":"\tpublic function resetPendingAction()"},{"line":546,"text":"\t{"},{"line":547,"text":"\t\tif ($this->installedAddOn)"},{"line":548,"text":"\t\t{"},{"line":549,"text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', null);"},{"line":550,"text":"\t\t}"}],"match_line":541,"match_text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', \"$action:$step\");"},{"context":[{"line":540,"text":"\t\t{"},{"line":541,"text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', \"$action:$step\");"},{"line":542,"text":"\t\t}"},{"line":543,"text":"\t}"},{"line":544,"text":""},{"line":545,"text":"\tpublic function resetPendingAction()"},{"line":546,"text":"\t{"},{"line":547,"text":"\t\tif ($this->installedAddOn)"},{"line":548,"text":"\t\t{"},{"line":549,"text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', null);"},{"line":550,"text":"\t\t}"},{"line":551,"text":"\t}"},{"line":552,"text":""},{"line":553,"text":"\tpublic function preInstall()"},{"line":554,"text":"\t{"}],"match_line":545,"match_text":"\tpublic function resetPendingAction()"},{"context":[{"line":544,"text":""},{"line":545,"text":"\tpublic function resetPendingAction()"},{"line":546,"text":"\t{"},{"line":547,"text":"\t\tif ($this->installedAddOn)"},{"line":548,"text":"\t\t{"},{"line":549,"text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', null);"},{"line":550,"text":"\t\t}"},{"line":551,"text":"\t}"},{"line":552,"text":""},{"line":553,"text":"\tpublic function preInstall()"},{"line":554,"text":"\t{"},{"line":555,"text":"\t\tif (!$this->installedAddOn)"},{"line":556,"text":"\t\t{"},{"line":557,"text":"\t\t\t$json = $this->getJson();"},{"line":558,"text":""}],"match_line":549,"match_text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', null);"},{"context":[{"line":548,"text":"\t\t{"},{"line":549,"text":"\t\t\t$this->installedAddOn->fastUpdate('last_pending_action', null);"},{"line":550,"text":"\t\t}"},{"line":551,"text":"\t}"},{"line":552,"text":""},{"line":553,"text":"\tpublic function preInstall()"},{"line":554,"text":"\t{"},{"line":555,"text":"\t\tif (!$this->installedAddOn)"},{"line":556,"text":"\t\t{"},{"line":557,"text":"\t\t\t$json = $this->getJson();"},{"line":558,"text":""},{"line":559,"text":"\t\t\t$installed = \\XF::em()->create(\\XF\\Entity\\AddOn::class);"},{"line":560,"text":"\t\t\t$installed->bulkSet(["},{"line":561,"text":"\t\t\t\t'addon_id' => $this->getAddOnId(),"},{"line":562,"text":"\t\t\t\t'title' => $json['title'],"}],"match_line":553,"match_text":"\tpublic function preInstall()"},{"context":[{"line":561,"text":"\t\t\t\t'addon_id' => $this->getAddOnId(),"},{"line":562,"text":"\t\t\t\t'title' => $json['title'],"},{"line":563,"text":"\t\t\t\t'version_string' => $json['version_string'],"},{"line":564,"text":"\t\t\t\t'version_id' => $json['version_id'],"},{"line":565,"text":"\t\t\t\t'active' => true,"},{"line":566,"text":"\t\t\t\t'is_processing' => true,"},{"line":567,"text":"\t\t\t\t'json_hash' => $this->getJsonHash(),"},{"line":568,"text":"\t\t\t\t'last_pending_action' => 'install:0',"},{"line":569,"text":"\t\t\t]);"},{"line":570,"text":"\t\t\t$installed->save();"},{"line":571,"text":""},{"line":572,"text":"\t\t\t$this->installedAddOn = $installed;"},{"line":573,"text":""},{"line":574,"text":"\t\t\t\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);"},{"line":575,"text":"\t\t}"}],"match_line":566,"match_text":"\t\t\t\t'is_processing' => true,"},{"context":[{"line":563,"text":"\t\t\t\t'version_string' => $json['version_string'],"},{"line":564,"text":"\t\t\t\t'version_id' => $json['version_id'],"},{"line":565,"text":"\t\t\t\t'active' => true,"},{"line":566,"text":"\t\t\t\t'is_processing' => true,"},{"line":567,"text":"\t\t\t\t'json_hash' => $this->getJsonHash(),"},{"line":568,"text":"\t\t\t\t'last_pending_action' => 'install:0',"},{"line":569,"text":"\t\t\t]);"},{"line":570,"text":"\t\t\t$installed->save();"},{"line":571,"text":""},{"line":572,"text":"\t\t\t$this->installedAddOn = $installed;"},{"line":573,"text":""},{"line":574,"text":"\t\t\t\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);"},{"line":575,"text":"\t\t}"},{"line":576,"text":"\t}"},{"line":577,"text":""}],"match_line":568,"match_text":"\t\t\t\t'last_pending_action' => 'install:0',"},{"context":[{"line":573,"text":""},{"line":574,"text":"\t\t\t\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);"},{"line":575,"text":"\t\t}"},{"line":576,"text":"\t}"},{"line":577,"text":""},{"line":578,"text":"\tpublic function postInstall(array &$stateChanges)"},{"line":579,"text":"\t{"},{"line":580,"text":"\t\t$setup = $this->getSetup();"},{"line":581,"text":"\t\tif ($setup)"},{"line":582,"text":"\t\t{"},{"line":583,"text":"\t\t\t$setup->postInstall($stateChanges);"},{"line":584,"text":"\t\t}"},{"line":585,"text":""},{"line":586,"text":"\t\t$this->resetPendingAction();"},{"line":587,"text":""}],"match_line":578,"match_text":"\tpublic function postInstall(array &$stateChanges)"},{"context":[{"line":578,"text":"\tpublic function postInstall(array &$stateChanges)"},{"line":579,"text":"\t{"},{"line":580,"text":"\t\t$setup = $this->getSetup();"},{"line":581,"text":"\t\tif ($setup)"},{"line":582,"text":"\t\t{"},{"line":583,"text":"\t\t\t$setup->postInstall($stateChanges);"},{"line":584,"text":"\t\t}"},{"line":585,"text":""},{"line":586,"text":"\t\t$this->resetPendingAction();"},{"line":587,"text":""},{"line":588,"text":"\t\t$installed = $this->installedAddOn;"},{"line":589,"text":""},{"line":590,"text":"\t\t$json = $this->getJson();"},{"line":591,"text":"\t\t\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);"},{"line":592,"text":"\t}"}],"match_line":583,"match_text":"\t\t\t$setup->postInstall($stateChanges);"},{"context":[{"line":581,"text":"\t\tif ($setup)"},{"line":582,"text":"\t\t{"},{"line":583,"text":"\t\t\t$setup->postInstall($stateChanges);"},{"line":584,"text":"\t\t}"},{"line":585,"text":""},{"line":586,"text":"\t\t$this->resetPendingAction();"},{"line":587,"text":""},{"line":588,"text":"\t\t$installed = $this->installedAddOn;"},{"line":589,"text":""},{"line":590,"text":"\t\t$json = $this->getJson();"},{"line":591,"text":"\t\t\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);"},{"line":592,"text":"\t}"},{"line":593,"text":""},{"line":594,"text":"\tpublic function preUpgrade()"},{"line":595,"text":"\t{"}],"match_line":586,"match_text":"\t\t$this->resetPendingAction();"},{"context":[{"line":612,"text":"\t\t}"},{"line":613,"text":""},{"line":614,"text":"\t\t// as we will be importing data after this, we don't need to bother doing this now"},{"line":615,"text":"\t\t$installed->setOption('rebuild_active_change', false);"},{"line":616,"text":"\t\t$installed->active = true;"},{"line":617,"text":"\t\t$installed->is_processing = true;"},{"line":618,"text":""},{"line":619,"text":"\t\t$installed->saveIfChanged();"},{"line":620,"text":"\t\t$installed->resetOption('rebuild_active_change');"},{"line":621,"text":""},{"line":622,"text":"\t\t$json = $this->getJson();"},{"line":623,"text":"\t\t\\XF::fire('addon_pre_upgrade', [$this, $installed, $json], $installed->addon_id);"},{"line":624,"text":"\t}"},{"line":625,"text":""},{"line":626,"text":"\tpublic function postUpgrade(array &$stateChanges)"}],"match_line":617,"match_text":"\t\t$installed->is_processing = true;"},{"context":[{"line":632,"text":"\t\t{"},{"line":633,"text":"\t\t\t$previousVersion = $installed ? $installed->version_id : null;"},{"line":634,"text":"\t\t\t$setup->postUpgrade($previousVersion, $stateChanges);"},{"line":635,"text":"\t\t}"},{"line":636,"text":""},{"line":637,"text":"\t\t$this->resetPendingAction();"},{"line":638,"text":"\t\t$this->syncFromJson();"},{"line":639,"text":""},{"line":640,"text":"\t\t$json = $this->getJson();"},{"line":641,"text":"\t\t\\XF::fire('addon_post_upgrade', [$this, $installed, $json, &$stateChanges], $installed->addon_id);"},{"line":642,"text":"\t}"},{"line":643,"text":""},{"line":644,"text":"\tpublic function preUninstall()"},{"line":645,"text":"\t{"},{"line":646,"text":"\t\t$installed = $this->installedAddOn;"}],"match_line":637,"match_text":"\t\t$this->resetPendingAction();"},{"context":[{"line":647,"text":"\t\tif (!$installed)"},{"line":648,"text":"\t\t{"},{"line":649,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":650,"text":"\t\t}"},{"line":651,"text":""},{"line":652,"text":"\t\t$installed->is_processing = true;"},{"line":653,"text":"\t\t$installed->last_pending_action = 'uninstall:0';"},{"line":654,"text":"\t\t$installed->saveIfChanged();"},{"line":655,"text":""},{"line":656,"text":"\t\t$json = $this->getJson();"},{"line":657,"text":"\t\t\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);"},{"line":658,"text":"\t}"},{"line":659,"text":""},{"line":660,"text":"\tpublic function postUninstall()"},{"line":661,"text":"\t{"}],"match_line":652,"match_text":"\t\t$installed->is_processing = true;"},{"context":[{"line":648,"text":"\t\t{"},{"line":649,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":650,"text":"\t\t}"},{"line":651,"text":""},{"line":652,"text":"\t\t$installed->is_processing = true;"},{"line":653,"text":"\t\t$installed->last_pending_action = 'uninstall:0';"},{"line":654,"text":"\t\t$installed->saveIfChanged();"},{"line":655,"text":""},{"line":656,"text":"\t\t$json = $this->getJson();"},{"line":657,"text":"\t\t\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);"},{"line":658,"text":"\t}"},{"line":659,"text":""},{"line":660,"text":"\tpublic function postUninstall()"},{"line":661,"text":"\t{"},{"line":662,"text":"\t\t/** @var FileCheck $fileCheck */"}],"match_line":653,"match_text":"\t\t$installed->last_pending_action = 'uninstall:0';"},{"context":[{"line":679,"text":"\t\tif (!$installed)"},{"line":680,"text":"\t\t{"},{"line":681,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":682,"text":"\t\t}"},{"line":683,"text":""},{"line":684,"text":"\t\t$installed->is_processing = true;"},{"line":685,"text":"\t\t$installed->saveIfChanged();"},{"line":686,"text":""},{"line":687,"text":"\t\t$json = $this->getJson();"},{"line":688,"text":"\t\t\\XF::fire('addon_pre_rebuild', [$this, $installed, $json], $installed->addon_id);"},{"line":689,"text":"\t}"},{"line":690,"text":""},{"line":691,"text":"\tpublic function postRebuild()"},{"line":692,"text":"\t{"},{"line":693,"text":"\t\t$installed = $this->installedAddOn;"}],"match_line":684,"match_text":"\t\t$installed->is_processing = true;"},{"context":[{"line":711,"text":"\t\t{"},{"line":712,"text":"\t\t\t$setup->onActiveChange($newActive, $jobList);"},{"line":713,"text":"\t\t}"},{"line":714,"text":"\t}"},{"line":715,"text":""},{"line":716,"text":"\tpublic function postDataImport()"},{"line":717,"text":"\t{"},{"line":718,"text":"\t\t// all data will be imported, re-enable this so postX methods will have access to their methods"},{"line":719,"text":"\t\t$installed = $this->installedAddOn;"},{"line":720,"text":"\t\tif (!$installed)"},{"line":721,"text":"\t\t{"},{"line":722,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":723,"text":"\t\t}"},{"line":724,"text":""},{"line":725,"text":"\t\t$installed->is_processing = false;"}],"match_line":716,"match_text":"\tpublic function postDataImport()"},{"context":[{"line":720,"text":"\t\tif (!$installed)"},{"line":721,"text":"\t\t{"},{"line":722,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":723,"text":"\t\t}"},{"line":724,"text":""},{"line":725,"text":"\t\t$installed->is_processing = false;"},{"line":726,"text":"\t\t$installed->saveIfChanged();"},{"line":727,"text":""},{"line":728,"text":"\t\t\\XF::repository(OptionRepository::class)->updateOption('jsLastUpdate', \\XF::$time);"},{"line":729,"text":"\t}"},{"line":730,"text":""},{"line":731,"text":"\tpublic function syncFromJson($extraChanges = [])"},{"line":732,"text":"\t{"},{"line":733,"text":"\t\t$installed = $this->installedAddOn;"},{"line":734,"text":"\t\tif (!$installed)"}],"match_line":725,"match_text":"\t\t$installed->is_processing = false;"}],"sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},"src/XF/AddOn/DataManager.php":{"hits":[{"context":[{"line":80,"text":"\t\t}"},{"line":81,"text":""},{"line":82,"text":"\t\treturn $document;"},{"line":83,"text":"\t}"},{"line":84,"text":""},{"line":85,"text":"\tpublic function enqueueImportAddOnData(AddOn $addOn)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\treturn \\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, ["},{"line":88,"text":"\t\t\t'addon_id' => $addOn->addon_id,"},{"line":89,"text":"\t\t]);"},{"line":90,"text":"\t}"},{"line":91,"text":""},{"line":92,"text":"\tpublic function getImportDataJobId(AddOn $addOn)"},{"line":93,"text":"\t{"},{"line":94,"text":"\t\treturn 'addOnData-' . $addOn->addon_id;"}],"match_line":85,"match_text":"\tpublic function enqueueImportAddOnData(AddOn $addOn)"}],"sha256":"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0"},"src/XF/Admin/Controller/AddOnController.php":{"hits":[{"context":[{"line":371,"text":"\t\tif ($this->isPost())"},{"line":372,"text":"\t\t{"},{"line":373,"text":"\t\t\t$addOn->preRebuild();"},{"line":374,"text":""},{"line":375,"text":"\t\t\t$dataManager = $this->app->addOnDataManager();"},{"line":376,"text":"\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"line":377,"text":""},{"line":378,"text":"\t\t\treturn $this->redirect($this->getFinalizeUrl($addOn, 'rebuild'));"},{"line":379,"text":"\t\t}"},{"line":380,"text":"\t\telse"},{"line":381,"text":"\t\t{"},{"line":382,"text":"\t\t\t$viewParams = ["},{"line":383,"text":"\t\t\t\t'addOn' => $addOn,"},{"line":384,"text":"\t\t\t\t'warnings' => $warnings,"},{"line":385,"text":"\t\t\t\t'errors' => $errors,"}],"match_line":376,"match_text":"\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"context":[{"line":411,"text":"\t\t\t]);"},{"line":412,"text":""},{"line":413,"text":"\t\t\tif ($input['finished'])"},{"line":414,"text":"\t\t\t{"},{"line":415,"text":"\t\t\t\t$dataManager = $this->app->addOnDataManager();"},{"line":416,"text":"\t\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"line":417,"text":""},{"line":418,"text":"\t\t\t\treturn $this->redirect($this->getFinalizeUrl($addOn, 'install'));"},{"line":419,"text":"\t\t\t}"},{"line":420,"text":"\t\t\telse"},{"line":421,"text":"\t\t\t{"},{"line":422,"text":"\t\t\t\t$setup = $addOn->getSetup();"},{"line":423,"text":""},{"line":424,"text":"\t\t\t\tif ($input['_xfProcessing'])"},{"line":425,"text":"\t\t\t\t{"}],"match_line":416,"match_text":"\t\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"context":[{"line":431,"text":"\t\t\t\t\t$result = $setup ? $setup->install($input['params']) : null;"},{"line":432,"text":"\t\t\t\t}"},{"line":433,"text":"\t\t\t\telse"},{"line":434,"text":"\t\t\t\t{"},{"line":435,"text":"\t\t\t\t\t$result = null;"},{"line":436,"text":"\t\t\t\t\t$addOn->preInstall();"},{"line":437,"text":"\t\t\t\t}"},{"line":438,"text":""},{"line":439,"text":"\t\t\t\treturn $this->displayAddOnActionStep("},{"line":440,"text":"\t\t\t\t\t$addOn,"},{"line":441,"text":"\t\t\t\t\t$result,"},{"line":442,"text":"\t\t\t\t\t\\XF::phrase('installing'),"},{"line":443,"text":"\t\t\t\t\t'add-ons/install',"},{"line":444,"text":"\t\t\t\t\t$input['count']"},{"line":445,"text":"\t\t\t\t);"}],"match_line":436,"match_text":"\t\t\t\t\t$addOn->preInstall();"},{"context":[{"line":592,"text":"\t\t\t]);"},{"line":593,"text":""},{"line":594,"text":"\t\t\tif ($input['finished'])"},{"line":595,"text":"\t\t\t{"},{"line":596,"text":"\t\t\t\t$dataManager = $this->app->addOnDataManager();"},{"line":597,"text":"\t\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"line":598,"text":""},{"line":599,"text":"\t\t\t\treturn $this->redirect($this->getFinalizeUrl($addOn, 'upgrade'));"},{"line":600,"text":"\t\t\t}"},{"line":601,"text":"\t\t\telse"},{"line":602,"text":"\t\t\t{"},{"line":603,"text":"\t\t\t\t$setup = $addOn->getSetup();"},{"line":604,"text":""},{"line":605,"text":"\t\t\t\tif ($input['_xfProcessing'])"},{"line":606,"text":"\t\t\t\t{"}],"match_line":597,"match_text":"\t\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"context":[{"line":774,"text":"\t\t}"},{"line":775,"text":""},{"line":776,"text":"\t\tif ($installed && $action != 'uninstall')"},{"line":777,"text":"\t\t{"},{"line":778,"text":"\t\t\t// this is a sanity check, it shouldn't happen"},{"line":779,"text":"\t\t\t$installed->is_processing = false;"},{"line":780,"text":"\t\t\t$installed->save();"},{"line":781,"text":"\t\t}"},{"line":782,"text":""},{"line":783,"text":"\t\t$redirect = $this->buildLink('add-ons');"},{"line":784,"text":"\t\t$stateChanges = [];"},{"line":785,"text":""},{"line":786,"text":"\t\tif ($addOn)"},{"line":787,"text":"\t\t{"},{"line":788,"text":"\t\t\tswitch ($action)"}],"match_line":779,"match_text":"\t\t\t$installed->is_processing = false;"},{"context":[{"line":789,"text":"\t\t\t{"},{"line":790,"text":"\t\t\t\tcase 'upgrade':"},{"line":791,"text":"\t\t\t\t\t$addOn->postUpgrade($stateChanges);"},{"line":792,"text":"\t\t\t\t\tbreak;"},{"line":793,"text":"\t\t\t\tcase 'install':"},{"line":794,"text":"\t\t\t\t\t$addOn->postInstall($stateChanges);"},{"line":795,"text":"\t\t\t\t\tbreak;"},{"line":796,"text":"\t\t\t\tcase 'uninstall':"},{"line":797,"text":"\t\t\t\t\t$addOn->postUninstall();"},{"line":798,"text":"\t\t\t\t\tbreak;"},{"line":799,"text":"\t\t\t\tcase 'rebuild':"},{"line":800,"text":"\t\t\t\t\t$addOn->postRebuild();"},{"line":801,"text":"\t\t\t\t\tbreak;"},{"line":802,"text":"\t\t\t}"},{"line":803,"text":"\t\t}"}],"match_line":794,"match_text":"\t\t\t\t\t$addOn->postInstall($stateChanges);"}],"sha256":"2f49d3d8edd5e288d43fff571b02c75b0f297d5ab0a0f934582b7dc11f913915"},"src/XF/Job/AddOnData.php":{"hits":[{"context":[{"line":75,"text":"\t\t\t$this->data['current_type'] = array_shift($this->data['data_types']);"},{"line":76,"text":"\t\t\tif (!$this->data['current_type'])"},{"line":77,"text":"\t\t\t{"},{"line":78,"text":"\t\t\t\tif ($addOn)"},{"line":79,"text":"\t\t\t\t{"},{"line":80,"text":"\t\t\t\t\t$addOn->postDataImport();"},{"line":81,"text":"\t\t\t\t}"},{"line":82,"text":""},{"line":83,"text":"\t\t\t\t$repo = $this->app->repository(StyleRepository::class);"},{"line":84,"text":"\t\t\t\t$repo->updateAllStylesLastModifiedDateLater();"},{"line":85,"text":""},{"line":86,"text":"\t\t\t\treturn $this->complete();"},{"line":87,"text":"\t\t\t}"},{"line":88,"text":""},{"line":89,"text":"\t\t\t$this->data['start'] = 0;"}],"match_line":80,"match_text":"\t\t\t\t\t$addOn->postDataImport();"}],"sha256":"3b34bd0837176ac8bef4e9d34152a9d776c4fa195aebf186a389deec75d36535"}},"methods":{"actionInstall":[{"context":[{"line":713,"text":"\tpublic function actionInstallXfAddOn()"},{"line":714,"text":"\t{"},{"line":715,"text":"\t\t$this->assertAdminPermission('upgradeXenForo');"},{"line":716,"text":"\t\t$this->assertAdminPermission('addOn');"},{"line":717,"text":"\t\t$this->assertUpgradeCheckingPossible();"},{"line":718,"text":"\t\t$this->assertCanOneClickUpgrade();"},{"line":719,"text":""},{"line":720,"text":"\t\t$upgradeCheckRepo = $this->repository(UpgradeCheckRepository::class);"},{"line":721,"text":"\t\t$upgradeCheck = $upgradeCheckRepo->getLatestUpgradeCheck();"},{"line":722,"text":""},{"line":723,"text":"\t\tif (!$upgradeCheck)"},{"line":724,"text":"\t\t{"},{"line":725,"text":"\t\t\treturn $this->redirect($this->buildLink('tools/upgrade-check'));"},{"line":726,"text":"\t\t}"},{"line":727,"text":"\t\tif (!$upgradeCheck->canDownload())"},{"line":728,"text":"\t\t{"},{"line":729,"text":"\t\t\treturn $this->error(\\XF::phrase('issues_with_license_must_resolve_before_upgrading'));"},{"line":730,"text":"\t\t}"},{"line":731,"text":""},{"line":732,"text":"\t\t$addOnRepo = $this->repository(AddOnRepository::class);"},{"line":733,"text":"\t\tif (!$addOnRepo->canInstallFromArchive($error, true))"},{"line":734,"text":"\t\t{"},{"line":735,"text":"\t\t\treturn $this->error(\\XF::phrase('following_issue_found_one_click_upgrade_x', ['error' => $error]));"},{"line":736,"text":"\t\t}"},{"line":737,"text":""},{"line":738,"text":"\t\t$installableAddOns = [];"},{"line":739,"text":""},{"line":740,"text":"\t\tforeach ($upgradeCheck->installable_add_ons AS $addOnId => $install)"},{"line":741,"text":"\t\t{"},{"line":742,"text":"\t\t\t$installableAddOns[$addOnId] = $install;"},{"line":743,"text":"\t\t}"},{"line":744,"text":""},{"line":745,"text":"\t\tif ($this->isPost())"},{"line":746,"text":"\t\t{"},{"line":747,"text":"\t\t\t$confirmInstalls = $this->filter('confirm_install', 'array-uint');"},{"line":748,"text":"\t\t\t$filesToDownload = [];"},{"line":749,"text":"\t\t\tforeach ($confirmInstalls AS $addOnId => $versionId)"},{"line":750,"text":"\t\t\t{"},{"line":751,"text":"\t\t\t\t$filesToDownload[$addOnId] = $installableAddOns[$addOnId];"},{"line":752,"text":"\t\t\t}"},{"line":753,"text":""},{"line":754,"text":"\t\t\tif (!$filesToDownload)"},{"line":755,"text":"\t\t\t{"},{"line":756,"text":"\t\t\t\treturn $this->error(\\XF::phrase('no_installs_were_selected_for_download'));"},{"line":757,"text":"\t\t\t}"},{"line":758,"text":""},{"line":759,"text":"\t\t\tif ($upgradeCheck->license_agreement_required)"},{"line":760,"text":"\t\t\t{"},{"line":761,"text":"\t\t\t\t$agree = $this->filter('agree', 'bool');"},{"line":762,"text":"\t\t\t\tif (!$agree)"},{"line":763,"text":"\t\t\t\t{"},{"line":764,"text":"\t\t\t\t\treturn $this->error(\\XF::phrase('you_must_agree_to_terms_of_xenforo_license_agreement_to_continue'));"},{"line":765,"text":"\t\t\t\t}"},{"line":766,"text":"\t\t\t}"},{"line":767,"text":""},{"line":768,"text":"\t\t\t$addOnBatch = $this->downloadAndCreateAddOnBatch($filesToDownload, $upgradeCheck->license_agreement_required);"},{"line":769,"text":""},{"line":770,"text":"\t\t\t// note: this will bypass the install from archive config check intentionally"},{"line":771,"text":"\t\t\treturn $this->redirect("},{"line":772,"text":"\t\t\t\t$this->buildLink('add-ons/install-from-archive-confirm', null, ['batch_id' => $addOnBatch->batch_id])"},{"line":773,"text":"\t\t\t);"},{"line":774,"text":"\t\t}"},{"line":775,"text":"\t\telse"},{"line":776,"text":"\t\t{"},{"line":777,"text":"\t\t\t$viewParams = ["},{"line":778,"text":"\t\t\t\t'upgradeCheck' => $upgradeCheck,"},{"line":779,"text":"\t\t\t\t'installableAddOns' => $installableAddOns,"},{"line":780,"text":"\t\t\t];"},{"line":781,"text":"\t\t\treturn $this->view("},{"line":782,"text":"\t\t\t\t'XF:Tools\\InstallXfAddOn',"},{"line":783,"text":"\t\t\t\t'tools_install_xf_addon',"},{"line":784,"text":"\t\t\t\t$viewParams"},{"line":785,"text":"\t\t\t);"},{"line":786,"text":"\t\t}"},{"line":787,"text":"\t}"}],"path":"src/XF/Admin/Controller/ToolsController.php","sha256":"eeb900c4158b215003adfdb3849c083a4c95c32cb4a04ed3f7d9d5283b6157a9"},{"context":[{"line":391,"text":"\tpublic function actionInstall(ParameterBag $params)"},{"line":392,"text":"\t{"},{"line":393,"text":"\t\t$addOn = $this->assertAddOnAvailable($params->addon_id_url);"},{"line":394,"text":"\t\tif (!$addOn->canInstall())"},{"line":395,"text":"\t\t{"},{"line":396,"text":"\t\t\treturn $this->error(\\XF::phrase('this_add_on_cannot_be_installed'));"},{"line":397,"text":"\t\t}"},{"line":398,"text":""},{"line":399,"text":"\t\t[$warnings, $errors] = $this->getAddOnWarningsAndErrors($addOn);"},{"line":400,"text":""},{"line":401,"text":"\t\tif ($this->isPost())"},{"line":402,"text":"\t\t{"},{"line":403,"text":"\t\t\t// this applies to add-on changes as well, so we want to ensure errors here are shown and logged"},{"line":404,"text":"\t\t\t\\XF::app()->error()->setIgnorePendingUpgrade(true);"},{"line":405,"text":""},{"line":406,"text":"\t\t\t$input = $this->filter(["},{"line":407,"text":"\t\t\t\t'_xfProcessing' => 'bool',"},{"line":408,"text":"\t\t\t\t'params' => 'json-array',"},{"line":409,"text":"\t\t\t\t'count' => 'uint',"},{"line":410,"text":"\t\t\t\t'finished' => 'bool',"},{"line":411,"text":"\t\t\t]);"},{"line":412,"text":""},{"line":413,"text":"\t\t\tif ($input['finished'])"},{"line":414,"text":"\t\t\t{"},{"line":415,"text":"\t\t\t\t$dataManager = $this->app->addOnDataManager();"},{"line":416,"text":"\t\t\t\t$dataManager->enqueueImportAddOnData($addOn);"},{"line":417,"text":""},{"line":418,"text":"\t\t\t\treturn $this->redirect($this->getFinalizeUrl($addOn, 'install'));"},{"line":419,"text":"\t\t\t}"},{"line":420,"text":"\t\t\telse"},{"line":421,"text":"\t\t\t{"},{"line":422,"text":"\t\t\t\t$setup = $addOn->getSetup();"},{"line":423,"text":""},{"line":424,"text":"\t\t\t\tif ($input['_xfProcessing'])"},{"line":425,"text":"\t\t\t\t{"},{"line":426,"text":"\t\t\t\t\tif ($setup)"},{"line":427,"text":"\t\t\t\t\t{"},{"line":428,"text":"\t\t\t\t\t\t$setup->prepareForAction('install');"},{"line":429,"text":"\t\t\t\t\t}"},{"line":430,"text":""},{"line":431,"text":"\t\t\t\t\t$result = $setup ? $setup->install($input['params']) : null;"},{"line":432,"text":"\t\t\t\t}"},{"line":433,"text":"\t\t\t\telse"},{"line":434,"text":"\t\t\t\t{"},{"line":435,"text":"\t\t\t\t\t$result = null;"},{"line":436,"text":"\t\t\t\t\t$addOn->preInstall();"},{"line":437,"text":"\t\t\t\t}"},{"line":438,"text":""},{"line":439,"text":"\t\t\t\treturn $this->displayAddOnActionStep("},{"line":440,"text":"\t\t\t\t\t$addOn,"},{"line":441,"text":"\t\t\t\t\t$result,"},{"line":442,"text":"\t\t\t\t\t\\XF::phrase('installing'),"},{"line":443,"text":"\t\t\t\t\t'add-ons/install',"},{"line":444,"text":"\t\t\t\t\t$input['count']"},{"line":445,"text":"\t\t\t\t);"},{"line":446,"text":"\t\t\t}"},{"line":447,"text":"\t\t}"},{"line":448,"text":"\t\telse"},{"line":449,"text":"\t\t{"},{"line":450,"text":"\t\t\t$viewParams = ["},{"line":451,"text":"\t\t\t\t'addOn' => $addOn,"},{"line":452,"text":"\t\t\t\t'warnings' => $warnings,"},{"line":453,"text":"\t\t\t\t'errors' => $errors,"},{"line":454,"text":"\t\t\t];"},{"line":455,"text":"\t\t\treturn $this->view('XF:AddOn\\Install', 'addon_install', $viewParams);"},{"line":456,"text":"\t\t}"},{"line":457,"text":"\t}"}],"path":"src/XF/Admin/Controller/AddOnController.php","sha256":"2f49d3d8edd5e288d43fff571b02c75b0f297d5ab0a0f934582b7dc11f913915"}],"actionUninstall":[{"context":[{"line":640,"text":"\tpublic function actionUninstall(ParameterBag $params)"},{"line":641,"text":"\t{"},{"line":642,"text":"\t\t$addOn = $this->assertAddOnAvailable($params->addon_id_url);"},{"line":643,"text":"\t\tif (!$addOn->canUninstall())"},{"line":644,"text":"\t\t{"},{"line":645,"text":"\t\t\treturn $this->error(\\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing'));"},{"line":646,"text":"\t\t}"},{"line":647,"text":""},{"line":648,"text":"\t\tif ($this->isPost())"},{"line":649,"text":"\t\t{"},{"line":650,"text":"\t\t\t// this applies to add-on changes as well, so we want to ensure errors here are shown and logged"},{"line":651,"text":"\t\t\t\\XF::app()->error()->setIgnorePendingUpgrade(true);"},{"line":652,"text":""},{"line":653,"text":"\t\t\t$input = $this->filter(["},{"line":654,"text":"\t\t\t\t'_xfProcessing' => 'bool',"},{"line":655,"text":"\t\t\t\t'params' => 'json-array',"},{"line":656,"text":"\t\t\t\t'count' => 'uint',"},{"line":657,"text":"\t\t\t\t'finished' => 'bool',"},{"line":658,"text":"\t\t\t]);"},{"line":659,"text":""},{"line":660,"text":"\t\t\tif ($input['finished'])"},{"line":661,"text":"\t\t\t{"},{"line":662,"text":"\t\t\t\t$addOn->getInstalledAddOn()->delete();"},{"line":663,"text":"\t\t\t\treturn $this->redirect($this->getFinalizeUrl($addOn, 'uninstall'));"},{"line":664,"text":"\t\t\t}"},{"line":665,"text":"\t\t\telse"},{"line":666,"text":"\t\t\t{"},{"line":667,"text":"\t\t\t\t$setup = $addOn->getSetup();"},{"line":668,"text":""},{"line":669,"text":"\t\t\t\tif ($input['_xfProcessing'])"},{"line":670,"text":"\t\t\t\t{"},{"line":671,"text":"\t\t\t\t\tif ($setup)"},{"line":672,"text":"\t\t\t\t\t{"},{"line":673,"text":"\t\t\t\t\t\t$setup->prepareForAction('uninstall');"},{"line":674,"text":"\t\t\t\t\t}"},{"line":675,"text":""},{"line":676,"text":"\t\t\t\t\t$result = $setup ? $setup->uninstall($input['params']) : null;"},{"line":677,"text":"\t\t\t\t}"},{"line":678,"text":"\t\t\t\telse"},{"line":679,"text":"\t\t\t\t{"},{"line":680,"text":"\t\t\t\t\t$result = null;"},{"line":681,"text":"\t\t\t\t\t$addOn->preUninstall();"},{"line":682,"text":"\t\t\t\t}"},{"line":683,"text":""},{"line":684,"text":"\t\t\t\treturn $this->displayAddOnActionStep("},{"line":685,"text":"\t\t\t\t\t$addOn,"},{"line":686,"text":"\t\t\t\t\t$result,"},{"line":687,"text":"\t\t\t\t\t\\XF::phrase('uninstalling'),"},{"line":688,"text":"\t\t\t\t\t'add-ons/uninstall',"},{"line":689,"text":"\t\t\t\t\t$input['count']"},{"line":690,"text":"\t\t\t\t);"},{"line":691,"text":"\t\t\t}"},{"line":692,"text":"\t\t}"},{"line":693,"text":"\t\telse"},{"line":694,"text":"\t\t{"},{"line":695,"text":"\t\t\t$viewParams = ["},{"line":696,"text":"\t\t\t\t'addOn' => $addOn,"},{"line":697,"text":"\t\t\t];"},{"line":698,"text":"\t\t\treturn $this->view('XF:AddOn\\Uninstall', 'addon_uninstall', $viewParams);"},{"line":699,"text":"\t\t}"},{"line":700,"text":"\t}"}],"path":"src/XF/Admin/Controller/AddOnController.php","sha256":"2f49d3d8edd5e288d43fff571b02c75b0f297d5ab0a0f934582b7dc11f913915"}],"enqueueImportAddOnData":[{"context":[{"line":85,"text":"\tpublic function enqueueImportAddOnData(AddOn $addOn)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\treturn \\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, ["},{"line":88,"text":"\t\t\t'addon_id' => $addOn->addon_id,"},{"line":89,"text":"\t\t]);"},{"line":90,"text":"\t}"}],"path":"src/XF/AddOn/DataManager.php","sha256":"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0"}],"enqueueRemoveAddOnData":[{"context":[{"line":271,"text":"\tpublic function enqueueRemoveAddOnData($id)"},{"line":272,"text":"\t{"},{"line":273,"text":"\t\treturn \\XF::app()->jobManager()->enqueueUnique($id . 'AddOnUnInstall', AddOnUninstallData::class, ["},{"line":274,"text":"\t\t\t'addon_id' => $id,"},{"line":275,"text":"\t\t]);"},{"line":276,"text":"\t}"}],"path":"src/XF/AddOn/DataManager.php","sha256":"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0"}],"isInstalled":[{"context":[{"line":339,"text":"\tpublic function isInstalled()"},{"line":340,"text":"\t{"},{"line":341,"text":"\t\tif ($this->installedAddOn === null)"},{"line":342,"text":"\t\t{"},{"line":343,"text":"\t\t\treturn false;"},{"line":344,"text":"\t\t}"},{"line":345,"text":""},{"line":346,"text":"\t\t$lastAction = $this->installedAddOn->getLastActionStep('install');"},{"line":347,"text":"\t\tif ($lastAction !== null)"},{"line":348,"text":"\t\t{"},{"line":349,"text":"\t\t\t// we haven't completed the install steps yet, don't consider as installed"},{"line":350,"text":"\t\t\treturn false;"},{"line":351,"text":"\t\t}"},{"line":352,"text":""},{"line":353,"text":"\t\treturn true;"},{"line":354,"text":"\t}"}],"path":"src/XF/AddOn/AddOn.php","sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},{"context":[{"line":546,"text":"\tpublic function isInstalled()"},{"line":547,"text":"\t{"},{"line":548,"text":"\t\treturn ("},{"line":549,"text":"\t\t\tFile::installLockExists()"},{"line":550,"text":"\t\t\t&& ($this->app->config('exists') || $this->app->config('legacyExists'))"},{"line":551,"text":"\t\t);"},{"line":552,"text":"\t}"}],"path":"src/XF/Install/Helper.php","sha256":"582a775e5bd3bd75cb1a6b5f0c4efdbe96301400a3bc6f89e75778d652022cf8"}],"postDataImport":[{"context":[{"line":716,"text":"\tpublic function postDataImport()"},{"line":717,"text":"\t{"},{"line":718,"text":"\t\t// all data will be imported, re-enable this so postX methods will have access to their methods"},{"line":719,"text":"\t\t$installed = $this->installedAddOn;"},{"line":720,"text":"\t\tif (!$installed)"},{"line":721,"text":"\t\t{"},{"line":722,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":723,"text":"\t\t}"},{"line":724,"text":""},{"line":725,"text":"\t\t$installed->is_processing = false;"},{"line":726,"text":"\t\t$installed->saveIfChanged();"},{"line":727,"text":""},{"line":728,"text":"\t\t\\XF::repository(OptionRepository::class)->updateOption('jsLastUpdate', \\XF::$time);"},{"line":729,"text":"\t}"}],"path":"src/XF/AddOn/AddOn.php","sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"}],"postInstall":[{"context":[{"line":578,"text":"\tpublic function postInstall(array &$stateChanges)"},{"line":579,"text":"\t{"},{"line":580,"text":"\t\t$setup = $this->getSetup();"},{"line":581,"text":"\t\tif ($setup)"},{"line":582,"text":"\t\t{"},{"line":583,"text":"\t\t\t$setup->postInstall($stateChanges);"},{"line":584,"text":"\t\t}"},{"line":585,"text":""},{"line":586,"text":"\t\t$this->resetPendingAction();"},{"line":587,"text":""},{"line":588,"text":"\t\t$installed = $this->installedAddOn;"},{"line":589,"text":""},{"line":590,"text":"\t\t$json = $this->getJson();"},{"line":591,"text":"\t\t\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);"},{"line":592,"text":"\t}"}],"path":"src/XF/AddOn/AddOn.php","sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},{"context":[{"line":60,"text":"\tpublic function postInstall(array &$stateChanges)"},{"line":61,"text":"\t{"},{"line":62,"text":"\t}"}],"path":"src/XF/AddOn/AbstractSetup.php","sha256":"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88"}],"preInstall":[{"context":[{"line":553,"text":"\tpublic function preInstall()"},{"line":554,"text":"\t{"},{"line":555,"text":"\t\tif (!$this->installedAddOn)"},{"line":556,"text":"\t\t{"},{"line":557,"text":"\t\t\t$json = $this->getJson();"},{"line":558,"text":""},{"line":559,"text":"\t\t\t$installed = \\XF::em()->create(\\XF\\Entity\\AddOn::class);"},{"line":560,"text":"\t\t\t$installed->bulkSet(["},{"line":561,"text":"\t\t\t\t'addon_id' => $this->getAddOnId(),"},{"line":562,"text":"\t\t\t\t'title' => $json['title'],"},{"line":563,"text":"\t\t\t\t'version_string' => $json['version_string'],"},{"line":564,"text":"\t\t\t\t'version_id' => $json['version_id'],"},{"line":565,"text":"\t\t\t\t'active' => true,"},{"line":566,"text":"\t\t\t\t'is_processing' => true,"},{"line":567,"text":"\t\t\t\t'json_hash' => $this->getJsonHash(),"},{"line":568,"text":"\t\t\t\t'last_pending_action' => 'install:0',"},{"line":569,"text":"\t\t\t]);"},{"line":570,"text":"\t\t\t$installed->save();"},{"line":571,"text":""},{"line":572,"text":"\t\t\t$this->installedAddOn = $installed;"},{"line":573,"text":""},{"line":574,"text":"\t\t\t\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);"},{"line":575,"text":"\t\t}"},{"line":576,"text":"\t}"}],"path":"src/XF/AddOn/AddOn.php","sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"}]}} -NO_MUTATION=True -PRODUCT_CHECKPOINTS_REMAINING=18 -TASK_RESULT=PASS_PVEPRO_HOMEPAGE_PORTAL_INSTALL_LIFECYCLE_RCA -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +NEWFI266_BEGIN=true +COMMAND_ID=NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266 +MODE=local-readonly-recovery +CHANGES_MADE=false +MUTATION_OUTCOME=NO_MUTATION +IMMUTABLE_PLAN_CHECK=PASS +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +AUTHORITY_SHA_MATCH=true +INPUT_PARSE_OK=true +INPUT_CONTRACT_OK=true +PREV_DIR_PRESENT=true +REMOTE_PRESENT=true +REMOTE_HASH_MATCH=true +STDOUT_PRESENT=true +STDERR_PRESENT=true +STDOUT_CONTRACT_FOUND=false +LOCAL_ERROR=false +STDOUT_BYTES=39 +STDERR_BYTES=0 +STDOUT_SHA256=22d52cef09a22affbc21147e902dfa46cb1955458d5cacd0398a51241e16bfd6 +STDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +STDERR_CLASS=NONE +PRE_RUNNER_STOP=NONE +LOCAL_ERROR_CLASS=NONE +LOCAL_ERROR_SHA256=NONE +QGA264_LOCAL_RESULT_RECOVERED=false +DECISION=HOLD_QGA266_QGA264_LOCAL_OUTPUT_UNCLASSIFIED +NEXT_GATE=RECONCILE_QGA264_LOCAL_OUTPUT +NEWFI266_END=true +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"NEWFI-260920-NEWFDOM-MESSENGERS214-QGA266","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END