CHAT_OUTPUT_BEGIN
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
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=3e979c32a397a411ac1e4144d432831e49d53b89bc5cfef8b70eca4ebe8c81b6
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=8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182
SANITIZED_OUTPUT_SHA256=8589eaf4c34f96d8b68aa8d8288fd85613d415cf5fbeaae91a530568218dc182
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}

OUTPUT_END
CHAT_OUTPUT_END
