diff --git a/runtime/history/SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3.json b/runtime/history/SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3.json new file mode 100644 index 00000000..87a23e7b --- /dev/null +++ b/runtime/history/SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3", + "status": "FAIL", + "rc": 3, + "host": "pve01", + "mode": "read-only", + "component": "xenforo-template-merge-service-rca", + "started_at_utc": "2026-09-17T22:12:28Z", + "finished_at_utc": "2026-09-17T22:12:31Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "06f1a51b13672e688dbc22745f58c44ea570dcdb1082f6666f83ed2ed257d89c", + "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": 3, + "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": "bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517", + "sanitized_output_sha256": "bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "TPL495T3R3_WRAPPER_BEGIN=true\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nTPL495T3R3_BEGIN=true\nMODE=READ_ONLY_MERGE_SERVICE_RCA\nVM211_EXCLUDED=true\nTPL495T3R3_DECISION=HOLD_SITE_PROBE_FAILED\nTPL495T3R3_HOLD=[{\"site\":\"codevipe.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/codevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"dsmods.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/dsmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"gamevipe.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/gamevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"hkmods.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/hkmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"kingofwolk.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/kingofwolk/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"zakrutim.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/zakrutim/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"newfi.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/newfi/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"}]\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3\",\"status\":\"FAIL\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3.txt b/runtime/history/SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3.txt new file mode 100644 index 00000000..fd55c2b3 --- /dev/null +++ b/runtime/history/SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3.txt @@ -0,0 +1,42 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3 +STATUS=FAIL +RC=3 +HOST=pve01 +MODE=read-only +COMPONENT=xenforo-template-merge-service-rca +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=06f1a51b13672e688dbc22745f58c44ea570dcdb1082f6666f83ed2ed257d89c +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=3 +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=bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517 +SANITIZED_OUTPUT_SHA256=bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517 +OUTPUT_BEGIN +TPL495T3R3_WRAPPER_BEGIN=true +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +TPL495T3R3_BEGIN=true +MODE=READ_ONLY_MERGE_SERVICE_RCA +VM211_EXCLUDED=true +TPL495T3R3_DECISION=HOLD_SITE_PROBE_FAILED +TPL495T3R3_HOLD=[{"site":"codevipe.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/codevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"dsmods.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/dsmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"gamevipe.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/gamevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"hkmods.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/hkmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"kingofwolk.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/kingofwolk/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"zakrutim.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/zakrutim/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"newfi.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/newfi/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"}] +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3","status":"FAIL","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 5e22f4f6..87a23e7b 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260918-XENFORO-TEMPLATE-NATIVE-HISTORY-RCA-495T3R2", - "status": "OK", - "rc": 0, + "command_id": "SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3", + "status": "FAIL", + "rc": 3, "host": "pve01", "mode": "read-only", - "component": "xenforo-template-native-history-rca", - "started_at_utc": "2026-09-17T22:03:34Z", - "finished_at_utc": "2026-09-17T22:03:38Z", + "component": "xenforo-template-merge-service-rca", + "started_at_utc": "2026-09-17T22:12:28Z", + "finished_at_utc": "2026-09-17T22:12:31Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "dbced2707f675a917f31874231b4f3fbb05350f4bade851f4affe06d3dda7940", + "command_sha256": "06f1a51b13672e688dbc22745f58c44ea570dcdb1082f6666f83ed2ed257d89c", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -21,7 +21,7 @@ "result_contract_valid": true, "result_contract_status": null, "result_contract_error": null, - "command_rc": 0, + "command_rc": 3, "changes_made": false, "rollback_started": false, "rollback_restored": null, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "521f12b02c1a8371365c9ac87693c3280b9c9d393d97d5a51dcf6d807e37c9b1", - "sanitized_output_sha256": "521f12b02c1a8371365c9ac87693c3280b9c9d393d97d5a51dcf6d807e37c9b1", + "raw_evidence_sha256": "bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517", + "sanitized_output_sha256": "bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "TPL495T3R2_WRAPPER_BEGIN=true\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nTPL495T3R2_BEGIN=true\nMODE=READ_ONLY_NATIVE_HISTORY_RCA\nVM211_EXCLUDED=true\nTPL495T3R2_SAFE_REPORT={\"affected_sites\":5,\"affected_site_names\":[\"codevipe.ru\",\"dsmods.ru\",\"gamevipe.ru\",\"hkmods.ru\",\"zakrutim.ru\"],\"outdated_total\":5,\"xf_error_rows_total\":0,\"public_http_200\":7,\"sites\":[{\"site\":\"codevipe.ru\",\"root\":\"/var/www/forums/codevipe/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"2\",\"outdated_count_repo\":1,\"outdated\":[{\"meta\":{\"template_id\":1401,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1721849139,\"outdated_by_version\":1,\"outdated_by_date\":0},\"template\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":1401,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"ca051810957679432c36024c18f3adbf3a087c7a034cd46d72edfffbd4564b6c\",\"bytes\":2396,\"lines\":131}},\"style\":{\"style_id\":2,\"parent_id\":1,\"title\":\"Default style 2\",\"last_modified_date\":1789648610},\"parent\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":850,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1721849139,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"master\":{\"template_id\":850,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1721849139,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"history\":[],\"template_method\":{\"exists\":false},\"repo_method\":{\"exists\":false},\"template_call\":{\"exists\":false},\"repo_call\":{\"exists\":false}}],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}},{\"site\":\"dsmods.ru\",\"root\":\"/var/www/forums/dsmods/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"2\",\"outdated_count_repo\":1,\"outdated\":[{\"meta\":{\"template_id\":1317,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1728727128,\"outdated_by_version\":1,\"outdated_by_date\":0},\"template\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":1317,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"3898034b75b561c774b41f6e1d8dce66a171fe30c7c210d543b41a8133e42fa2\",\"bytes\":2402,\"lines\":131}},\"style\":{\"style_id\":2,\"parent_id\":1,\"title\":\"Default style 2\",\"last_modified_date\":1789649311},\"parent\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":850,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1728727128,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"master\":{\"template_id\":850,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1728727128,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"history\":[],\"template_method\":{\"exists\":false},\"repo_method\":{\"exists\":false},\"template_call\":{\"exists\":false},\"repo_call\":{\"exists\":false}}],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}},{\"site\":\"gamevipe.ru\",\"root\":\"/var/www/forums/gamevipe/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"2\",\"outdated_count_repo\":1,\"outdated\":[{\"meta\":{\"template_id\":1696,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1720986507,\"outdated_by_version\":1,\"outdated_by_date\":0},\"template\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":1696,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"fde07ae7d5f65a3cdee23b7f90834229c95495fb69db44727345b550441646ab\",\"bytes\":2410,\"lines\":131}},\"style\":{\"style_id\":2,\"parent_id\":1,\"title\":\"Default style 2\",\"last_modified_date\":1789649315},\"parent\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":803,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1720986507,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"master\":{\"template_id\":803,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1720986507,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"history\":[],\"template_method\":{\"exists\":false},\"repo_method\":{\"exists\":false},\"template_call\":{\"exists\":false},\"repo_call\":{\"exists\":false}}],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}},{\"site\":\"hkmods.ru\",\"root\":\"/var/www/forums/hkmods/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"2\",\"outdated_count_repo\":1,\"outdated\":[{\"meta\":{\"template_id\":2021,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1691944582,\"outdated_by_version\":1,\"outdated_by_date\":0},\"template\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":2021,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"2339326596eb8f77111df70fa4336809e67615942b4b7b1afb2777d8ee447bd3\",\"bytes\":2422,\"lines\":131}},\"style\":{\"style_id\":2,\"parent_id\":1,\"title\":\"Default style 2\",\"last_modified_date\":1789649318},\"parent\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":798,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1691944582,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"master\":{\"template_id\":798,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1691944582,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"history\":[],\"template_method\":{\"exists\":false},\"repo_method\":{\"exists\":false},\"template_call\":{\"exists\":false},\"repo_call\":{\"exists\":false}}],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}},{\"site\":\"kingofwolk.ru\",\"root\":\"/var/www/forums/kingofwolk/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"2\",\"outdated_count_repo\":0,\"outdated\":[],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}},{\"site\":\"zakrutim.ru\",\"root\":\"/var/www/forums/zakrutim/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"2\",\"outdated_count_repo\":1,\"outdated\":[{\"meta\":{\"template_id\":1921,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1692264832,\"outdated_by_version\":1,\"outdated_by_date\":0},\"template\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":1921,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"9662d1b57f5f6fcd2992fd9d150aeb887c242f792eb750cf6cb458d65b99a12d\",\"bytes\":2435,\"lines\":131}},\"style\":{\"style_id\":2,\"parent_id\":1,\"title\":\"Default style 2\",\"last_modified_date\":1789649326},\"parent\":{\"class\":\"XF\\\\Entity\\\\Template\",\"template_id\":803,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1692264832,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"master\":{\"template_id\":803,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":0,\"addon_id\":\"XF\",\"version_id\":2000010,\"version_string\":\"2.0.0 Alpha\",\"last_edit_date\":1692264832,\"body\":{\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"bytes\":0,\"lines\":1}},\"history\":[],\"template_method\":{\"exists\":false},\"repo_method\":{\"exists\":false},\"template_call\":{\"exists\":false},\"repo_call\":{\"exists\":false}}],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}},{\"site\":\"newfi.ru\",\"root\":\"/var/www/forums/newfi/public\",\"xf_error_rows\":0,\"board_active\":\"1\",\"default_style_id\":\"4\",\"outdated_count_repo\":0,\"outdated\":[],\"controller_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"actionMergeOutdated\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"variadic\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":439,\"end\":492,\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"actionAutoMerge\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"start\":494,\"end\":511,\"source_sha256\":\"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c\",\"token_skeleton\":\"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }\"}},\"repo_methods\":{\"getHistoryForMerge\":{\"exists\":false},\"getOutdatedTemplates\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":true,\"protected\":false,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":85,\"end\":110,\"source_sha256\":\"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16\",\"token_skeleton\":\"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }\"},\"getBaseOutdatedTemplateData\":{\"exists\":true,\"class\":\"XF\\\\Repository\\\\TemplateRepository\",\"public\":false,\"protected\":true,\"private\":false,\"static\":false,\"required\":0,\"total\":0,\"params\":[],\"file\":\"src/XF/Repository/TemplateRepository.php\",\"start\":112,\"end\":138,\"source_sha256\":\"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2\",\"token_skeleton\":\"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }\"}}}],\"http\":[{\"domain\":\"codevipe.ru\",\"rc\":0,\"http_code\":\"200\"},{\"domain\":\"dsmods.ru\",\"rc\":0,\"http_code\":\"200\"},{\"domain\":\"gamevipe.ru\",\"rc\":0,\"http_code\":\"200\"},{\"domain\":\"hkmods.ru\",\"rc\":0,\"http_code\":\"200\"},{\"domain\":\"kingofwolk.ru\",\"rc\":0,\"http_code\":\"200\"},{\"domain\":\"zakrutim.ru\",\"rc\":0,\"http_code\":\"200\"},{\"domain\":\"newfi.ru\",\"rc\":0,\"http_code\":\"200\"}],\"vm211_excluded\":true,\"scope\":\"READ_ONLY_NO_XENFORO_MUTATION\"}\nTPL495T3R2_DECISION=PASS_NATIVE_HISTORY_RCA_CAPTURE\nTPL495T3R2_NEXT_GATE=READY_FOR_OFFLINE_EXACT_BASE_ANALYSIS_THEN_BOUNDED_REPAIR_495T4\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-XENFORO-TEMPLATE-NATIVE-HISTORY-RCA-495T3R2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "TPL495T3R3_WRAPPER_BEGIN=true\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nTPL495T3R3_BEGIN=true\nMODE=READ_ONLY_MERGE_SERVICE_RCA\nVM211_EXCLUDED=true\nTPL495T3R3_DECISION=HOLD_SITE_PROBE_FAILED\nTPL495T3R3_HOLD=[{\"site\":\"codevipe.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/codevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"dsmods.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/dsmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"gamevipe.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/gamevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"hkmods.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/hkmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"kingofwolk.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/kingofwolk/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"zakrutim.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/zakrutim/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"},{\"site\":\"newfi.ru\",\"ok\":false,\"rc\":255,\"stderr\":\"PHP Fatal error: Cannot declare class XF\\\\Repository\\\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/newfi/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\\n\"}]\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3\",\"status\":\"FAIL\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 56de1f0c..fd55c2b3 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260918-XENFORO-TEMPLATE-NATIVE-HISTORY-RCA-495T3R2 -STATUS=OK -RC=0 +COMMAND_ID=SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3 +STATUS=FAIL +RC=3 HOST=pve01 MODE=read-only -COMPONENT=xenforo-template-native-history-rca +COMPONENT=xenforo-template-merge-service-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=dbced2707f675a917f31874231b4f3fbb05350f4bade851f4affe06d3dda7940 +COMMAND_SHA256=06f1a51b13672e688dbc22745f58c44ea570dcdb1082f6666f83ed2ed257d89c 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 +COMMAND_RC=3 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,20 +24,19 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=521f12b02c1a8371365c9ac87693c3280b9c9d393d97d5a51dcf6d807e37c9b1 -SANITIZED_OUTPUT_SHA256=521f12b02c1a8371365c9ac87693c3280b9c9d393d97d5a51dcf6d807e37c9b1 +RAW_EVIDENCE_SHA256=bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517 +SANITIZED_OUTPUT_SHA256=bfefffbff6a92b5898c0ea714aee9d0bfdc7e319ad9265c0f1af45b218a65517 OUTPUT_BEGIN -TPL495T3R2_WRAPPER_BEGIN=true +TPL495T3R3_WRAPPER_BEGIN=true ERROR_REGISTER_CHECK=OK REFERENCE_CHECK=OK AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -TPL495T3R2_BEGIN=true -MODE=READ_ONLY_NATIVE_HISTORY_RCA +TPL495T3R3_BEGIN=true +MODE=READ_ONLY_MERGE_SERVICE_RCA VM211_EXCLUDED=true -TPL495T3R2_SAFE_REPORT={"affected_sites":5,"affected_site_names":["codevipe.ru","dsmods.ru","gamevipe.ru","hkmods.ru","zakrutim.ru"],"outdated_total":5,"xf_error_rows_total":0,"public_http_200":7,"sites":[{"site":"codevipe.ru","root":"/var/www/forums/codevipe/public","xf_error_rows":0,"board_active":"1","default_style_id":"2","outdated_count_repo":1,"outdated":[{"meta":{"template_id":1401,"parent_version_string":"2.0.0 Alpha","parent_last_edit_date":1721849139,"outdated_by_version":1,"outdated_by_date":0},"template":{"class":"XF\\Entity\\Template","template_id":1401,"type":"public","title":"extra.less","style_id":2,"addon_id":"","version_id":0,"version_string":"","last_edit_date":1784195301,"body":{"sha256":"ca051810957679432c36024c18f3adbf3a087c7a034cd46d72edfffbd4564b6c","bytes":2396,"lines":131}},"style":{"style_id":2,"parent_id":1,"title":"Default style 2","last_modified_date":1789648610},"parent":{"class":"XF\\Entity\\Template","template_id":850,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1721849139,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"master":{"template_id":850,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1721849139,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"history":[],"template_method":{"exists":false},"repo_method":{"exists":false},"template_call":{"exists":false},"repo_call":{"exists":false}}],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}},{"site":"dsmods.ru","root":"/var/www/forums/dsmods/public","xf_error_rows":0,"board_active":"1","default_style_id":"2","outdated_count_repo":1,"outdated":[{"meta":{"template_id":1317,"parent_version_string":"2.0.0 Alpha","parent_last_edit_date":1728727128,"outdated_by_version":1,"outdated_by_date":0},"template":{"class":"XF\\Entity\\Template","template_id":1317,"type":"public","title":"extra.less","style_id":2,"addon_id":"","version_id":0,"version_string":"","last_edit_date":1784195301,"body":{"sha256":"3898034b75b561c774b41f6e1d8dce66a171fe30c7c210d543b41a8133e42fa2","bytes":2402,"lines":131}},"style":{"style_id":2,"parent_id":1,"title":"Default style 2","last_modified_date":1789649311},"parent":{"class":"XF\\Entity\\Template","template_id":850,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1728727128,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"master":{"template_id":850,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1728727128,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"history":[],"template_method":{"exists":false},"repo_method":{"exists":false},"template_call":{"exists":false},"repo_call":{"exists":false}}],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}},{"site":"gamevipe.ru","root":"/var/www/forums/gamevipe/public","xf_error_rows":0,"board_active":"1","default_style_id":"2","outdated_count_repo":1,"outdated":[{"meta":{"template_id":1696,"parent_version_string":"2.0.0 Alpha","parent_last_edit_date":1720986507,"outdated_by_version":1,"outdated_by_date":0},"template":{"class":"XF\\Entity\\Template","template_id":1696,"type":"public","title":"extra.less","style_id":2,"addon_id":"","version_id":0,"version_string":"","last_edit_date":1784195301,"body":{"sha256":"fde07ae7d5f65a3cdee23b7f90834229c95495fb69db44727345b550441646ab","bytes":2410,"lines":131}},"style":{"style_id":2,"parent_id":1,"title":"Default style 2","last_modified_date":1789649315},"parent":{"class":"XF\\Entity\\Template","template_id":803,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1720986507,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"master":{"template_id":803,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1720986507,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"history":[],"template_method":{"exists":false},"repo_method":{"exists":false},"template_call":{"exists":false},"repo_call":{"exists":false}}],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}},{"site":"hkmods.ru","root":"/var/www/forums/hkmods/public","xf_error_rows":0,"board_active":"1","default_style_id":"2","outdated_count_repo":1,"outdated":[{"meta":{"template_id":2021,"parent_version_string":"2.0.0 Alpha","parent_last_edit_date":1691944582,"outdated_by_version":1,"outdated_by_date":0},"template":{"class":"XF\\Entity\\Template","template_id":2021,"type":"public","title":"extra.less","style_id":2,"addon_id":"","version_id":0,"version_string":"","last_edit_date":1784195301,"body":{"sha256":"2339326596eb8f77111df70fa4336809e67615942b4b7b1afb2777d8ee447bd3","bytes":2422,"lines":131}},"style":{"style_id":2,"parent_id":1,"title":"Default style 2","last_modified_date":1789649318},"parent":{"class":"XF\\Entity\\Template","template_id":798,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1691944582,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"master":{"template_id":798,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1691944582,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"history":[],"template_method":{"exists":false},"repo_method":{"exists":false},"template_call":{"exists":false},"repo_call":{"exists":false}}],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}},{"site":"kingofwolk.ru","root":"/var/www/forums/kingofwolk/public","xf_error_rows":0,"board_active":"1","default_style_id":"2","outdated_count_repo":0,"outdated":[],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}},{"site":"zakrutim.ru","root":"/var/www/forums/zakrutim/public","xf_error_rows":0,"board_active":"1","default_style_id":"2","outdated_count_repo":1,"outdated":[{"meta":{"template_id":1921,"parent_version_string":"2.0.0 Alpha","parent_last_edit_date":1692264832,"outdated_by_version":1,"outdated_by_date":0},"template":{"class":"XF\\Entity\\Template","template_id":1921,"type":"public","title":"extra.less","style_id":2,"addon_id":"","version_id":0,"version_string":"","last_edit_date":1784195301,"body":{"sha256":"9662d1b57f5f6fcd2992fd9d150aeb887c242f792eb750cf6cb458d65b99a12d","bytes":2435,"lines":131}},"style":{"style_id":2,"parent_id":1,"title":"Default style 2","last_modified_date":1789649326},"parent":{"class":"XF\\Entity\\Template","template_id":803,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1692264832,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"master":{"template_id":803,"type":"public","title":"extra.less","style_id":0,"addon_id":"XF","version_id":2000010,"version_string":"2.0.0 Alpha","last_edit_date":1692264832,"body":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","bytes":0,"lines":1}},"history":[],"template_method":{"exists":false},"repo_method":{"exists":false},"template_call":{"exists":false},"repo_call":{"exists":false}}],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}},{"site":"newfi.ru","root":"/var/www/forums/newfi/public","xf_error_rows":0,"board_active":"1","default_style_id":"4","outdated_count_repo":0,"outdated":[],"controller_methods":{"getHistoryForMerge":{"exists":false},"actionMergeOutdated":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":1,"total":1,"params":[{"name":"params","optional":false,"variadic":false,"type":"XF\\Mvc\\ParameterBag"}],"file":"src/XF/Admin/Controller/TemplateController.php","start":439,"end":492,"source_sha256":"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61","token_skeleton":"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }"},"actionAutoMerge":{"exists":true,"class":"XF\\Admin\\Controller\\TemplateController","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Admin/Controller/TemplateController.php","start":494,"end":511,"source_sha256":"dafc6ff3ebb435f50860ed1de3d0569dcbb95771b88898885be8f56c01986a0c","token_skeleton":"public function actionAutoMerge ( ) { if ( $this -> isPost ( ) ) { $templateRepo = $this -> getTemplateRepo ( ) ; $templateIds = array_keys ( $templateRepo -> getOutdatedTemplates ( ) ) ; $this -> app -> jobManager ( ) -> enqueueUnique ( , TemplateMerge :: class , [ => $templateIds , ] ) ; return $this -> redirect ( $this -> buildLink ( , null , [ => ] ) ) ; } else { return $this -> view ( , ) ; } }"}},"repo_methods":{"getHistoryForMerge":{"exists":false},"getOutdatedTemplates":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":true,"protected":false,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":85,"end":110,"source_sha256":"d78b3772d6aa9d553902a10b90d692f184d3f56d08f3255defc88a9ce5b65b16","token_skeleton":"public function getOutdatedTemplates ( ) { $data = $this -> getBaseOutdatedTemplateData ( ) ; $templateIds = array_keys ( $data ) ; if ( ! $templateIds ) { return [ ] ; } $templates = $this -> em -> findByIds ( Template :: class , $templateIds ) ; $output = [ ] ; foreach ( $data AS $templateId => $outdated ) { if ( ! isset ( $templates [ $templateId ] ) ) { continue ; } $outdated [ ] = $templates [ $templateId ] ; $output [ $templateId ] = $outdated ; } return $output ; }"},"getBaseOutdatedTemplateData":{"exists":true,"class":"XF\\Repository\\TemplateRepository","public":false,"protected":true,"private":false,"static":false,"required":0,"total":0,"params":[],"file":"src/XF/Repository/TemplateRepository.php","start":112,"end":138,"source_sha256":"d5dc4e81e1834a500f3c5064cad55ee2eb03399d85a7c7a16561321039b2e6f2","token_skeleton":"protected function getBaseOutdatedTemplateData ( ) { $db = $this -> db ( ) ; return $db -> fetchAllKeyed ( , ) ; }"}}}],"http":[{"domain":"codevipe.ru","rc":0,"http_code":"200"},{"domain":"dsmods.ru","rc":0,"http_code":"200"},{"domain":"gamevipe.ru","rc":0,"http_code":"200"},{"domain":"hkmods.ru","rc":0,"http_code":"200"},{"domain":"kingofwolk.ru","rc":0,"http_code":"200"},{"domain":"zakrutim.ru","rc":0,"http_code":"200"},{"domain":"newfi.ru","rc":0,"http_code":"200"}],"vm211_excluded":true,"scope":"READ_ONLY_NO_XENFORO_MUTATION"} -TPL495T3R2_DECISION=PASS_NATIVE_HISTORY_RCA_CAPTURE -TPL495T3R2_NEXT_GATE=READY_FOR_OFFLINE_EXACT_BASE_ANALYSIS_THEN_BOUNDED_REPAIR_495T4 -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-XENFORO-TEMPLATE-NATIVE-HISTORY-RCA-495T3R2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +TPL495T3R3_DECISION=HOLD_SITE_PROBE_FAILED +TPL495T3R3_HOLD=[{"site":"codevipe.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/codevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"dsmods.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/dsmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"gamevipe.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/gamevipe/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"hkmods.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/hkmods/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"kingofwolk.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/kingofwolk/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"zakrutim.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/zakrutim/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"},{"site":"newfi.ru","ok":false,"rc":255,"stderr":"PHP Fatal error: Cannot declare class XF\\Repository\\TemplateHistoryRepository, because the name is already in use in /var/www/forums/newfi/public/src/XF/Repository/TemplateHistoryRepository.php on line 9\n"}] +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R3","status":"FAIL","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END