39 lines
43 KiB
JSON
39 lines
43 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"channel": "homelab-runtime",
|
|
"command_id": "SUPPORT-260920-PVEPRO-HOMEPAGE-PORTAL-INSTALL-LIFECYCLE-RCA-READONLY-783R1",
|
|
"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",
|
|
"reference_register_checked": true,
|
|
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
|
|
"error_register_checked": true,
|
|
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
|
|
"command_sha256": "3e979c32a397a411ac1e4144d432831e49d53b89bc5cfef8b70eca4ebe8c81b6",
|
|
"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": "8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182",
|
|
"sanitized_output_sha256": "8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182",
|
|
"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"
|
|
}
|