diff --git a/runtime/history/NEWFI-260918-NEWFDOM-KB204-APPLY96.json b/runtime/history/NEWFI-260918-NEWFDOM-KB204-APPLY96.json new file mode 100644 index 00000000..e65cf965 --- /dev/null +++ b/runtime/history/NEWFI-260918-NEWFDOM-KB204-APPLY96.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260918-NEWFDOM-KB204-APPLY96", + "status": "FAIL", + "rc": 3, + "host": "pve01", + "mode": "change", + "component": "newfi-newfdom-kb204-taxonomy-editorial-workflow-staging-rollback-production-git-last", + "started_at_utc": "2026-09-18T20:04:13Z", + "finished_at_utc": "2026-09-18T20:04:33Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "64266fdf780ce82c3b36a6771d5cd64af8da2bef67991661c50c440750d1813b", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": true, + "result_contract_valid": true, + "result_contract_status": "FAIL", + "result_contract_error": null, + "command_rc": 3, + "changes_made": true, + "rollback_started": true, + "rollback_restored": true, + "mutation_outcome": "ROLLED_BACK", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025", + "sanitized_output_sha256": "4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "NEWFI96_BEGIN\nCOMMAND_ID=NEWFI-260918-NEWFDOM-KB204-APPLY96\nNEWFI96_GIT_PRESTATE={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\",\"remote\":\"origin\",\"remote_head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\"}\nNEWFI96_PRESTATE={\"production\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0,\"tag_content\":0,\"tags\":0},\"staging\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0,\"tag_content\":0,\"tags\":0},\"tagging\":\"0\"}\nNEWFI96_BACKUPS_2OF2=PASS\nNEWFI96_STAGING_APPLY1=PASS\nNEWFI96_STAGING_PLANNED_ROLLBACK=PASS\nNEWFI96_STAGING_REAPPLY=PASS\nNEWFI96_PRODUCTION_APPLY=PASS\nNEWFI96_SAFE_REPORT={\"changes_made\":true,\"command_id\":\"NEWFI-260918-NEWFDOM-KB204-APPLY96\",\"decision\":\"FAIL_KB204_APPLY96_HOLD\",\"error\":\"RuntimeError:PUBLIC_TAXONOMY_TITLES:{\\\"Вода и безопасность\\\":0,\\\"Воспитание и поведение\\\":0,\\\"Выставки и хендлинг\\\":0,\\\"Документы и правила\\\":0,\\\"Здоровье и ветеринария\\\":0,\\\"О породе и стандарте\\\":0,\\\"Питание\\\":0,\\\"Разведение и генетика\\\":0,\\\"Уход и груминг\\\":0,\\\"Щенок и взросление\\\":0}\",\"push_outcome_uncertain\":false,\"rollback_restored\":true,\"rollback_started\":true}\nNEWFI96_DECISION=FAIL_KB204_APPLY96_HOLD\nNEWFI96_NEXT_GATE=READ_EXACT_FAILURE_BEFORE_ANY_RETRY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":true,\"command_id\":\"NEWFI-260918-NEWFDOM-KB204-APPLY96\",\"rollback_restored\":true,\"rollback_started\":true,\"status\":\"FAIL\",\"version\":1}\n" +} diff --git a/runtime/history/NEWFI-260918-NEWFDOM-KB204-APPLY96.txt b/runtime/history/NEWFI-260918-NEWFDOM-KB204-APPLY96.txt new file mode 100644 index 00000000..a53ba7f9 --- /dev/null +++ b/runtime/history/NEWFI-260918-NEWFDOM-KB204-APPLY96.txt @@ -0,0 +1,45 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260918-NEWFDOM-KB204-APPLY96 +STATUS=FAIL +RC=3 +HOST=pve01 +MODE=change +COMPONENT=newfi-newfdom-kb204-taxonomy-editorial-workflow-staging-rollback-production-git-last +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=64266fdf780ce82c3b36a6771d5cd64af8da2bef67991661c50c440750d1813b +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=true +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=FAIL +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=3 +CHANGES_MADE=true +ROLLBACK_STARTED=true +ROLLBACK_RESTORED=true +MUTATION_OUTCOME=ROLLED_BACK +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025 +SANITIZED_OUTPUT_SHA256=4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025 +OUTPUT_BEGIN +NEWFI96_BEGIN +COMMAND_ID=NEWFI-260918-NEWFDOM-KB204-APPLY96 +NEWFI96_GIT_PRESTATE={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0","remote":"origin","remote_head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0"} +NEWFI96_PRESTATE={"production":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0,"tag_content":0,"tags":0},"staging":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0,"tag_content":0,"tags":0},"tagging":"0"} +NEWFI96_BACKUPS_2OF2=PASS +NEWFI96_STAGING_APPLY1=PASS +NEWFI96_STAGING_PLANNED_ROLLBACK=PASS +NEWFI96_STAGING_REAPPLY=PASS +NEWFI96_PRODUCTION_APPLY=PASS +NEWFI96_SAFE_REPORT={"changes_made":true,"command_id":"NEWFI-260918-NEWFDOM-KB204-APPLY96","decision":"FAIL_KB204_APPLY96_HOLD","error":"RuntimeError:PUBLIC_TAXONOMY_TITLES:{\"Вода и безопасность\":0,\"Воспитание и поведение\":0,\"Выставки и хендлинг\":0,\"Документы и правила\":0,\"Здоровье и ветеринария\":0,\"О породе и стандарте\":0,\"Питание\":0,\"Разведение и генетика\":0,\"Уход и груминг\":0,\"Щенок и взросление\":0}","push_outcome_uncertain":false,"rollback_restored":true,"rollback_started":true} +NEWFI96_DECISION=FAIL_KB204_APPLY96_HOLD +NEWFI96_NEXT_GATE=READ_EXACT_FAILURE_BEFORE_ANY_RETRY +HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"NEWFI-260918-NEWFDOM-KB204-APPLY96","rollback_restored":true,"rollback_started":true,"status":"FAIL","version":1} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 0ad4ff08..e65cf965 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260918-NEWFDOM-KB204-AUDIT95", - "status": "OK", - "rc": 0, + "command_id": "NEWFI-260918-NEWFDOM-KB204-APPLY96", + "status": "FAIL", + "rc": 3, "host": "pve01", - "mode": "read-only", - "component": "newfi-newfdom-kb204-xfrm-taxonomy-editorial-contract-audit-readonly", - "started_at_utc": "2026-09-18T19:27:24Z", - "finished_at_utc": "2026-09-18T19:27:28Z", + "mode": "change", + "component": "newfi-newfdom-kb204-taxonomy-editorial-workflow-staging-rollback-production-git-last", + "started_at_utc": "2026-09-18T20:04:13Z", + "finished_at_utc": "2026-09-18T20:04:33Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "8785f2a354ef4d5cab3d5dc4f901a21a579b611ce80b845a568c501bb02168e3", + "command_sha256": "64266fdf780ce82c3b36a6771d5cd64af8da2bef67991661c50c440750d1813b", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": false, + "change_declared": true, "result_contract_valid": true, - "result_contract_status": null, + "result_contract_status": "FAIL", "result_contract_error": null, - "command_rc": 0, - "changes_made": false, - "rollback_started": false, - "rollback_restored": null, - "mutation_outcome": "NO_MUTATION", + "command_rc": 3, + "changes_made": true, + "rollback_started": true, + "rollback_restored": true, + "mutation_outcome": "ROLLED_BACK", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "6789d0a730d8fcb56a708b3df769f18f8db8820c30f35edade22f93f61f863d9", - "sanitized_output_sha256": "6789d0a730d8fcb56a708b3df769f18f8db8820c30f35edade22f93f61f863d9", + "raw_evidence_sha256": "4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025", + "sanitized_output_sha256": "4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "NEWFI95_BEGIN\nCOMMAND_ID=NEWFI-260918-NEWFDOM-KB204-AUDIT95\nNEWFI95_GIT={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\",\"remote\":\"origin\",\"remote_head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\"}\nNEWFI95_STAGING={\"addons\":[{\"active\":1,\"addon_id\":\"XF\",\"title\":\"XenForo\",\"version_id\":2031270,\"version_string\":\"2.3.12\"},{\"active\":1,\"addon_id\":\"XFRM\",\"title\":\"XenForo Resource Manager\",\"version_id\":2031170,\"version_string\":\"2.3.11\"}],\"boardActive\":\"0\",\"counts\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0},\"errors\":{\"count\":21,\"ids\":[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],\"new\":[{\"error_id\":49,\"exception_type\":\"XF\\\\Db\\\\Exception\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"MySQL statement prepare error [1054]: Unknown column 'sub_name_format' in 'SELECT'\"},{\"error_id\":50,\"exception_type\":\"XF\\\\Db\\\\Exception\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT'\"},{\"error_id\":51,\"exception_type\":\"ErrorException\",\"filename\":\"Command line code\",\"line\":32,\"message\":\"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:32 Stack trace: #0 Command line code(32): XF::handlePhpError(2, '...', '...', 32) #1 {main} thrown\"},{\"error_id\":52,\"exception_type\":\"ErrorException\",\"filename\":\"Command line code\",\"line\":16,\"message\":\"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:16 Stack trace: #0 Command line code(16): XF::handlePhpError(2, '...', '...', 16) #1 {main} thrown\"},{\"error_id\":53,\"exception_type\":\"ErrorException\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"Fatal Error: Uncaught XF\\\\Db\\\\Exception: MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT' in /var/www/forums/newfi/public/src/XF/Db/AbstractStatement.php:225 Stack trace: #0 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(207): XF\\\\Db\\\\AbstractStatement->getException('...', 1054, '...') #1 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(43): XF\\\\Db\\\\Mysqli\\\\Statement->getException('...', 1054, '...') #2 /var/www/forums/newfi/public/src/XF/Db/Mys\"}],\"old_fp\":\"e739c2c309539a508e20eba89b0ebc688640ef6ff9f919bbb419b2faad819f80\"},\"hostname\":\"newfi-staging\",\"indexRoute\":\"portal/\",\"options\":[{\"option_id\":\"enableTagging\",\"option_value\":\"0\"},{\"option_id\":\"xfrmAllowAnonReview\",\"option_value\":\"0\"},{\"option_id\":\"xfrmAllowIcons\",\"option_value\":\"1\"},{\"option_id\":\"xfrmAuthorOtherResourcesCount\",\"option_value\":\"5\"},{\"option_id\":\"xfrmEnableTeams\",\"option_value\":\"0\"},{\"option_id\":\"xfrmFilelessViewFull\",\"option_value\":\"{\\\"limit\\\":\\\"1\\\",\\\"length\\\":\\\"250\\\"}\"},{\"option_id\":\"xfrmListDefaultOrder\",\"option_value\":\"last_update\"},{\"option_id\":\"xfrmMinimumReviewLength\",\"option_value\":\"0\"},{\"option_id\":\"xfrmPaidResourceThreadTitleTemplate\",\"option_value\":\"{title} [Paid]\"},{\"option_id\":\"xfrmRecentReviewsCount\",\"option_value\":\"10\"},{\"option_id\":\"xfrmRecentUpdatesCount\",\"option_value\":\"3\"},{\"option_id\":\"xfrmRequireDownloadToRate\",\"option_value\":\"1\"},{\"option_id\":\"xfrmResourceCurrencies\",\"option_value\":\"usd\\ncad\\naud\\ngbp\\neur\"},{\"option_id\":\"xfrmResourceDeleteThreadAction\",\"option_value\":\"{\\\"action\\\":\\\"close\\\",\\\"update_title\\\":\\\"1\\\",\\\"title_template\\\":\\\"{title} [Deleted]\\\",\\\"add_post\\\":\\\"1\\\"}\"},{\"option_id\":\"xfrmResourceExtensions\",\"option_value\":\"zip\\ntxt\\npdf\\npng\\njpg\\njpeg\\njpe\\ngif\\npsd\\ntif\\nwebp\"},{\"option_id\":\"xfrmResourceMaxFileSize\",\"option_value\":\"2048\"},{\"option_id\":\"xfrmResourceMaxFiles\",\"option_value\":\"5\"},{\"option_id\":\"xfrmResourcesPerPage\",\"option_value\":\"20\"},{\"option_id\":\"xfrmReviewRequired\",\"option_value\":\"1\"},{\"option_id\":\"xfrmReviewVoting\",\"option_value\":\"yes\"},{\"option_id\":\"xfrmReviewsPerPage\",\"option_value\":\"20\"},{\"option_id\":\"xfrmUpdateMaxLength\",\"option_value\":\"50000\"},{\"option_id\":\"xfrmUpdatesPerPage\",\"option_value\":\"10\"}],\"rows\":{\"xf_rm_category\":[{\"allow_commercial_external\":1,\"allow_external\":1,\"allow_fileless\":1,\"allow_local\":1,\"always_moderate_create\":0,\"always_moderate_update\":0,\"auto_feature\":0,\"breadcrumb_data\":\"[]\",\"depth\":0,\"description\":\"\",\"display_order\":10,\"enable_support_url\":1,\"enable_versioning\":1,\"featured_count\":0,\"field_cache\":\"\",\"last_resource_id\":0,\"last_resource_title\":\"\",\"last_update\":0,\"lft\":1,\"min_tags\":0,\"parent_category_id\":0,\"prefix_cache\":\"\",\"require_prefix\":0,\"resource_category_id\":1,\"resource_count\":0,\"review_field_cache\":\"\",\"rgt\":2,\"thread_node_id\":0,\"thread_prefix_id\":0,\"title\":\"База знаний\"}],\"xf_rm_category_field\":[],\"xf_rm_category_prefix\":[],\"xf_rm_resource_field\":[],\"xf_rm_resource_prefix\":[]},\"schemas\":{\"xf_draft\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"draft_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"draft_key\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varbinary(75)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"user_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"message\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumtext\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"extra_data\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"}],\"xf_rm_category\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"description\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"parent_category_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"lft\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rgt\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"depth\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"breadcrumb_data\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"resource_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"featured_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"last_resource_title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_resource_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"review_field_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"require_prefix\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"thread_node_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"thread_prefix_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_local\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_external\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_commercial_external\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_fileless\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"always_moderate_create\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"always_moderate_update\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"min_tags\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"enable_versioning\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"enable_support_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"auto_feature\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_category_field\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}],\"xf_rm_category_prefix\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}],\"xf_rm_resource\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"resource_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"tag_line\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"user_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"username\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"team_member_user_ids\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"visible\",\"Extra\":\"\",\"Field\":\"resource_state\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"enum('visible','moderated','deleted')\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"current_version_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"description_update_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"discussion_thread_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"external_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"external_purchase_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":\"0.00\",\"Extra\":\"\",\"Field\":\"price\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"decimal(10,2) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"currency\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(3)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"view_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"download_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_sum\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_avg\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"float unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_weighted\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"float unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"rating_split\",\"Key\":\"\",\"Null\":\"YES\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"update_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"review_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"alt_support_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"custom_fields\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"prefix_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"icon_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"icon_optimized\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tags\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"featured\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_resource_field\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":\"above_info\",\"Extra\":\"\",\"Field\":\"display_group\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varchar(25)\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"textbox\",\"Extra\":\"\",\"Field\":\"field_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_choices\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"none\",\"Extra\":\"\",\"Field\":\"match_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"match_params\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"max_length\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"required\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"display_template\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"wrapper_template\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"viewable_resource\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_resource_field_value\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_value\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumtext\"}],\"xf_rm_resource_prefix\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"prefix_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_group_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"materialized_order\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"css_class\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(50)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"allowed_user_group_ids\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"}],\"xf_tag\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"tag_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag\",\"Key\":\"UNI\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag_url\",\"Key\":\"UNI\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"use_count\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_use_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"permanent\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_tag_content\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"tag_content_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_type\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"add_user_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"add_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"visible\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}]},\"source\":{\"abstract_field_entity\":{\"bytes\":13332,\"hits\":[{\"line\":14,\"text\":\"* COLUMNS\"},{\"line\":15,\"text\":\"* @property string $field_id\"},{\"line\":16,\"text\":\"* @property int $display_order\"},{\"line\":17,\"text\":\"* @property string $field_type\"},{\"line\":18,\"text\":\"* @property array $field_choices\"},{\"line\":19,\"text\":\"* @property string $match_type\"},{\"line\":20,\"text\":\"* @property array $match_params\"},{\"line\":21,\"text\":\"* @property int $max_length\"},{\"line\":22,\"text\":\"* @property bool $required\"},{\"line\":24,\"text\":\"* @property string $display_group\"},{\"line\":25,\"text\":\"* @property string $user_editable\"},{\"line\":49,\"text\":\"return static::getPhrasePrefix() . '_' . ($title ? 'title' : 'desc') . '.' . $this->field_id;\"},{\"line\":91,\"text\":\"if (isset($types[$this->field_type]))\"},{\"line\":93,\"text\":\"$type = $types[$this->field_type]['type'];\"},{\"line\":104,\"text\":\"if (!isset($this->field_choices[$choice]))\"},{\"line\":126,\"text\":\"return static::getPhrasePrefix() . '_' . 'choice' . '.' . $this->field_id . '_' . $choice;\"},{\"line\":156,\"text\":\"$this->error(\\\\XF::phrase('please_enter_text_for_each_choice'), 'field_choices');\"},{\"line\":162,\"text\":\"$this->error(\\\\XF::phrase('please_enter_an_id_using_only_alphanumeric'), 'field_choices');\"},{\"line\":289,\"text\":\"protected function _preSave()\"},{\"line\":291,\"text\":\"if ($this->isUpdate() && $this->isChanged('field_id'))\"},{\"line\":293,\"text\":\"$this->error('The field ID cannot be changed once set.', 'field_id');\"},{\"line\":296,\"text\":\"if ($this->isChanged(['match_type', 'match_params']))\"},{\"line\":298,\"text\":\"$validateMatchTypeMethod = '_validateMatchType' . Php::camelCase($this->get('match_type'));\"},{\"line\":301,\"text\":\"$matchParams = $this->match_params;\"},{\"line\":304,\"text\":\"$this->match_params = $matchParams;\"},{\"line\":308,\"text\":\"$this->error($error, 'match_params');\"},{\"line\":313,\"text\":\"if ($this->isUpdate() && $this->isChanged('field_type'))\"},{\"line\":316,\"text\":\"if ($typeMap[$this->get('field_type')]['compatible'] != $typeMap[$this->getExistingValue('field_type')]['compatible'])\"},{\"line\":318,\"text\":\"$this->error(\\\\XF::phrase('you_may_not_change_field_to_different_type_after_it_has_been_created'), 'field_type');\"},{\"line\":324,\"text\":\"if (($this->isInsert() && !$this->field_choices) || (is_array($this->field_choices) && !$this->field_choices))\"},{\"line\":326,\"text\":\"$this->error(\\\\XF::phrase('please_enter_at_least_one_choice'), 'field_choices', false);\"},{\"line\":331,\"text\":\"protected function _postSave()\"},{\"line\":333,\"text\":\"if ($this->isChanged('field_choices'))\"},{\"line\":338,\"text\":\"$newValues = $this->getValue('field_choices');\"},{\"line\":339,\"text\":\"$oldValues = $this->getExistingValue('field_choices');\"},{\"line\":373,\"text\":\"$phrase->save(true, false);\"},{\"line\":390,\"text\":\"$this->deleteChoicePhrases(array_keys($this->field_choices));\"},{\"line\":411,\"text\":\"\\\\XF::runOnce('rebuildFieldCache' . $this->field_id, function ()\"},{\"line\":422,\"text\":\"* @api-out str $field_id\"},{\"line\":425,\"text\":\"* @api-out int $display_order\"},{\"line\":426,\"text\":\"* @api-out str $field_type\"},{\"line\":427,\"text\":\"* @api-out object $field_choices For choice types, an ordered list of choices, with \\\"option\\\" and \\\"name\\\" keys for each.\"},{\"line\":428,\"text\":\"* @api-out str $match_type\"},{\"line\":429,\"text\":\"* @api-out array $match_params\"},{\"line\":430,\"text\":\"* @api-out int $max_length\"},{\"line\":431,\"text\":\"* @api-out bool $required\"},{\"line\":432,\"text\":\"* @api-out str $display_group If this field type supports grouping, the group this field belongs to.\"},{\"line\":446,\"text\":\"foreach ($this->field_choices AS $option => $printable)\"},{\"line\":453,\"text\":\"$result->field_choices = $choices;\"},{\"line\":456,\"text\":\"$result->match_params = (object) $this->match_params;\"},{\"line\":463,\"text\":\"'has_user_editable' => false,\"},{\"line\":464,\"text\":\"'has_user_editable_once' => false,\"},{\"line\":472,\"text\":\"$structure->primaryKey = 'field_id';\"},{\"line\":473,\"text\":\"$structure->columns = [\"},{\"line\":474,\"text\":\"'field_id' => ['type' => self::STR, 'maxLength' => 25,\"},{\"line\":475,\"text\":\"'required' => 'please_enter_valid_field_id',\"},{\"line\":476,\"text\":\"'unique' => 'field_ids_must_be_unique',\"},{\"line\":480,\"text\":\"'display_order' => ['type' => self::UINT, 'default' => 1, 'api' => true],\"},{\"line\":481,\"text\":\"'field_type' => ['type' => self::STR, 'default' => 'textbox',\"},{\"line\":485,\"text\":\"'field_choices' => ['type' => self::JSON_ARRAY, 'default' => []],\"},{\"line\":486,\"text\":\"'match_type' => ['type' => self::STR, 'default' => 'none',\"},{\"line\":490,\"text\":\"'match_params' => ['type' => self::JSON_ARRAY, 'default' => []],\"},{\"line\":491,\"text\":\"'max_length' => ['type' => self::UINT, 'default' => 0, 'api' => true],\"},{\"line\":492,\"text\":\"'required' => ['type' => self::BOOL, 'default' => false, 'api' => true],\"},{\"line\":499,\"text\":\"$structure->columns['display_group'] = ['type' => self::STR, 'default' => $firstOption,\"},{\"line\":504,\"text\":\"if ($options['has_user_editable'])\"},{\"line\":506,\"text\":\"$userEditAllowedValues = $options['has_user_editable_once'] ? ['yes', 'once', 'never'] : ['yes', 'never'];\"},{\"line\":507,\"text\":\"$structure->columns['user_editable'] = ['type' => self::STR, 'default' => 'yes',\"},{\"line\":513,\"text\":\"$structure->columns['moderator_editable'] = ['type' => self::BOOL, 'default' => true];\"},{\"line\":517,\"text\":\"$structure->columns['editable_user_group_ids'] = [\"},{\"line\":529,\"text\":\"$structure->columns['wrapper_template'] = ['type' => self::STR, 'default' => ''];\"},{\"line\":544,\"text\":\"['title', '=', $phrasePrefix . '_title.', '$field_id'],\"},{\"line\":552,\"text\":\"['title', '=', $phrasePrefix . '_desc.', '$field_id'],\"}],\"present\":true,\"sha256\":\"f5a7d03f0b656ecae7a225aafe363eb79a925054a3d2fefdcc0bdf4e6a41695f\"},\"category_admin\":{\"bytes\":5702,\"hits\":[{\"line\":59,\"text\":\"$availableFields = $availableFields->pluckNamed('title', 'field_id');\"},{\"line\":87,\"text\":\"protected function categorySaveProcess(\\\\XFRM\\\\Entity\\\\Category $category)\"},{\"line\":93,\"text\":\"'display_order' => 'uint',\"},{\"line\":100,\"text\":\"'always_moderate_create' => 'bool',\"},{\"line\":101,\"text\":\"'always_moderate_update' => 'bool',\"},{\"line\":102,\"text\":\"'min_tags' => 'uint',\"},{\"line\":110,\"text\":\"$form->basicEntitySave($category, $entityInput);\"},{\"line\":117,\"text\":\"$repo->updateContentAssociations($category->resource_category_id, $prefixIds);\"},{\"line\":120,\"text\":\"$fieldIds = $this->filter('available_fields', 'array-str');\"},{\"line\":125,\"text\":\"$repo->updateContentAssociations($category->resource_category_id, $fieldIds);\"},{\"line\":131,\"text\":\"public function actionSave(ParameterBag $params)\"},{\"line\":144,\"text\":\"$this->categorySaveProcess($category)->run();\"},{\"line\":184,\"text\":\"public function actionPermissionsSave(ParameterBag $params)\"},{\"line\":186,\"text\":\"return $this->getCategoryPermissionPlugin()->actionSave($params);\"}],\"present\":true,\"sha256\":\"4896715a8a0d00b8f4bf09dd0e28458f410ef8b27d1125711a5d1da3bc661ad6\"},\"category_entity\":{\"bytes\":15749,\"hits\":[{\"line\":6,\"text\":\"use XF\\\\Draft;\"},{\"line\":12,\"text\":\"use XF\\\\Entity\\\\ViewableInterface;\"},{\"line\":18,\"text\":\"* COLUMNS\"},{\"line\":38,\"text\":\"* @property bool $always_moderate_create\"},{\"line\":39,\"text\":\"* @property bool $always_moderate_update\"},{\"line\":40,\"text\":\"* @property int $min_tags\"},{\"line\":45,\"text\":\"* @property int $display_order\"},{\"line\":53,\"text\":\"* @property-read Draft $draft_resource\"},{\"line\":58,\"text\":\"* @property-read AbstractCollection<\\\\XF\\\\Entity\\\\Draft> $DraftResources\"},{\"line\":61,\"text\":\"class Category extends AbstractCategoryTree implements LinkableInterface, ViewableInterface\"},{\"line\":63,\"text\":\"protected $_viewableDescendants = [];\"},{\"line\":70,\"text\":\"public function canViewDeletedResources()\"},{\"line\":72,\"text\":\"return $this->hasPermission('viewDeleted');\"},{\"line\":75,\"text\":\"public function canViewModeratedResources()\"},{\"line\":77,\"text\":\"return $this->hasPermission('viewModerated');\"},{\"line\":173,\"text\":\"public function getViewableDescendants()\"},{\"line\":176,\"text\":\"if (!isset($this->_viewableDescendants[$userId]))\"},{\"line\":178,\"text\":\"$viewable = $this->repository('XFRM:Category')->getViewableCategories($this);\"},{\"line\":179,\"text\":\"$this->_viewableDescendants[$userId] = $viewable->toArray();\"},{\"line\":182,\"text\":\"return $this->_viewableDescendants[$userId];\"},{\"line\":185,\"text\":\"public function cacheViewableDescendents(array $descendents, $userId = null)\"},{\"line\":192,\"text\":\"$this->_viewableDescendants[$userId] = $descendents;\"},{\"line\":196,\"text\":\"* @return Draft\"},{\"line\":198,\"text\":\"public function getDraftResource()\"},{\"line\":200,\"text\":\"return Draft::createFromEntity($this, 'DraftResources');\"},{\"line\":309,\"text\":\"return 'visible';\"},{\"line\":314,\"text\":\"return 'moderated';\"},{\"line\":319,\"text\":\"return $this->always_moderate_update ? 'moderated' : 'visible';\"},{\"line\":323,\"text\":\"return $this->always_moderate_create ? 'moderated' : 'visible';\"},{\"line\":405,\"text\":\"AND resource_state = 'visible'\"},{\"line\":417,\"text\":\"AND resource.resource_state = 'visible'\\\",\"},{\"line\":430,\"text\":\"AND resource_state = 'visible'\"},{\"line\":448,\"text\":\"protected function _preSave()\"},{\"line\":547,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":553,\"text\":\"$structure->columns = [\"},{\"line\":556,\"text\":\"'required' => 'please_enter_valid_title', 'api' => true,\"},{\"line\":576,\"text\":\"'always_moderate_create' => ['type' => self::BOOL, 'default' => false],\"},{\"line\":577,\"text\":\"'always_moderate_update' => ['type' => self::BOOL, 'default' => false],\"},{\"line\":578,\"text\":\"'min_tags' => ['type' => self::UINT, 'forced' => true, 'default' => 0, 'max' => 100, 'api' => true],\"},{\"line\":585,\"text\":\"'draft_resource' => true,\"},{\"line\":603,\"text\":\"'DraftResources' => [\"},{\"line\":604,\"text\":\"'entity' => 'XF:Draft',\"},{\"line\":607,\"text\":\"['draft_key', '=', 'xfrm-category-', '$resource_category_id'],\"}],\"present\":true,\"sha256\":\"73763c6c3b7d56da646cf04b1f19106b33643daa9bbb6e775141e692b9cf36c2\"},\"category_field_repo\":{\"bytes\":729,\"hits\":[{\"line\":30,\"text\":\"$category->saveIfChanged();\"}],\"present\":true,\"sha256\":\"533bd6390f94189f752059bfa611e53e6ca4711c72a18c7b34322cecc9fe2228\"},\"relevant_files\":[\"src/addons/XFRM/Entity/Category.php\",\"src/addons/XFRM/Entity/CategoryField.php\",\"src/addons/XFRM/Entity/CategoryPrefix.php\",\"src/addons/XFRM/Entity/CategoryReviewField.php\",\"src/addons/XFRM/Entity/CategoryWatch.php\",\"src/addons/XFRM/Entity/ResourceDownload.php\",\"src/addons/XFRM/Entity/ResourceField.php\",\"src/addons/XFRM/Entity/ResourceFieldValue.php\",\"src/addons/XFRM/Entity/ResourceItem.php\",\"src/addons/XFRM/Entity/ResourcePrefix.php\",\"src/addons/XFRM/Entity/ResourcePrefixGroup.php\",\"src/addons/XFRM/Entity/ResourceRating.php\",\"src/addons/XFRM/Entity/ResourceReviewField.php\",\"src/addons/XFRM/Entity/ResourceReviewFieldValue.php\",\"src/addons/XFRM/Entity/ResourceTeamMember.php\",\"src/addons/XFRM/Entity/ResourceUpdate.php\",\"src/addons/XFRM/Entity/ResourceVersion.php\",\"src/addons/XFRM/Entity/ResourceWatch.php\",\"src/addons/XFRM/Repository/Category.php\",\"src/addons/XFRM/Repository/CategoryField.php\",\"src/addons/XFRM/Repository/CategoryPrefix.php\",\"src/addons/XFRM/Repository/CategoryReviewField.php\",\"src/addons/XFRM/Repository/CategoryWatch.php\",\"src/addons/XFRM/Repository/ResourceField.php\",\"src/addons/XFRM/Repository/ResourceItem.php\",\"src/addons/XFRM/Repository/ResourcePrefix.php\",\"src/addons/XFRM/Repository/ResourceRating.php\",\"src/addons/XFRM/Repository/ResourceReviewField.php\",\"src/addons/XFRM/Repository/ResourceUpdate.php\",\"src/addons/XFRM/Repository/ResourceVersion.php\",\"src/addons/XFRM/Repository/ResourceWatch.php\"],\"resource_create_service\":{\"bytes\":9106,\"hits\":[{\"line\":85,\"text\":\"$this->resource->addCascadedSave($this->description);\"},{\"line\":88,\"text\":\"$this->resource->addCascadedSave($this->version);\"},{\"line\":97,\"text\":\"$this->resource->resource_state = $this->category->getNewContentState();\"},{\"line\":98,\"text\":\"$this->description->message_state = 'visible';\"},{\"line\":137,\"text\":\"public function setTitle($title)\"},{\"line\":143,\"text\":\"public function setContent($title, $description, $format = true)\"},{\"line\":145,\"text\":\"$this->setTitle($title);\"},{\"line\":168,\"text\":\"public function setDescriptionAttachmentHash($hash)\"},{\"line\":227,\"text\":\"if ($this->resource->resource_state == 'visible' && \\\\XF::visitor()->isSpamCheckRequired())\"},{\"line\":257,\"text\":\"$resource->preSave();\"},{\"line\":292,\"text\":\"protected function _save()\"},{\"line\":302,\"text\":\"$resource->save(true, false);\"},{\"line\":303,\"text\":\"// update and version will also be saved now\"},{\"line\":316,\"text\":\"->setContentId($resource->resource_id, true)\"},{\"line\":317,\"text\":\"->save($this->performValidations);\"},{\"line\":325,\"text\":\"$thread = $creator->save();\"},{\"line\":344,\"text\":\"$creator->setContent($this->resource->getExpectedThreadTitle(), $this->getThreadMessage(), false);\"},{\"line\":350,\"text\":\"$thread->discussion_state = $this->resource->resource_state;\"},{\"line\":385,\"text\":\"if ($this->resource->isVisible())\"}],\"present\":true,\"sha256\":\"2c72b9811646927b8abc0ffaee0b2d0358576b4b5cfc359da6fc5c7c13d9e66c\"},\"resource_edit_service\":{\"bytes\":5900,\"hits\":[{\"line\":59,\"text\":\"public function setTitle($title)\"},{\"line\":62,\"text\":\"$this->getDescriptionEditor()->setTitle($title);\"},{\"line\":133,\"text\":\"$this->resource->addCascadedSave($currentVersion);\"},{\"line\":148,\"text\":\"$this->resource->addCascadedSave($currentVersion);\"},{\"line\":217,\"text\":\"$resource->preSave();\"},{\"line\":252,\"text\":\"protected function _save()\"},{\"line\":256,\"text\":\"$resource->save(true, false);\"},{\"line\":260,\"text\":\"$this->descriptionEditor->save();\"},{\"line\":265,\"text\":\"$this->tagChanger->save($this->performValidations);\"},{\"line\":268,\"text\":\"if ($resource->isVisible() && $this->alert && $resource->user_id != \\\\XF::visitor()->user_id)\"}],\"present\":true,\"sha256\":\"b837cb9e5883ad74cc46c417bf5f5490506aecc26a3e458c035078e44964931d\"},\"resource_field_admin\":{\"bytes\":1905,\"hits\":[{\"line\":32,\"text\":\"return 'xfrm_resource_field';\"},{\"line\":59,\"text\":\"protected function saveAdditionalData(FormAction $form, \\\\XF\\\\Entity\\\\AbstractField $field)\"},{\"line\":62,\"text\":\"'viewable_resource' => 'bool',\"},{\"line\":65,\"text\":\"$form->basicEntitySave($field, $input);\"}],\"present\":true,\"sha256\":\"70af86b0164a4d9089bf740857557a5d1d26063b7b7496ae78cd7c7e2e64f9c3\"},\"resource_field_entity\":{\"bytes\":2019,\"hits\":[{\"line\":12,\"text\":\"* COLUMNS\"},{\"line\":13,\"text\":\"* @property string $field_id\"},{\"line\":14,\"text\":\"* @property int $display_order\"},{\"line\":15,\"text\":\"* @property string $field_type\"},{\"line\":16,\"text\":\"* @property array|null $field_choices\"},{\"line\":17,\"text\":\"* @property string $match_type\"},{\"line\":18,\"text\":\"* @property array|null $match_params\"},{\"line\":19,\"text\":\"* @property int $max_length\"},{\"line\":20,\"text\":\"* @property bool $required\"},{\"line\":22,\"text\":\"* @property string $display_group\"},{\"line\":24,\"text\":\"* @property bool $viewable_resource\"},{\"line\":44,\"text\":\"return 'xfrm_resource_field';\"},{\"line\":53,\"text\":\"$this->db()->delete('xf_rm_resource_field_value', 'field_id = ?', $this->field_id);\"},{\"line\":58,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":62,\"text\":\"'xf_rm_resource_field',\"},{\"line\":73,\"text\":\"$structure->columns += [\"},{\"line\":74,\"text\":\"'viewable_resource' => ['type' => self::BOOL, 'default' => true],\"},{\"line\":80,\"text\":\"'conditions' => 'field_id',\"}],\"present\":true,\"sha256\":\"c4cb2a33b80db12e54a010609140e1c9735b9055812b0d70d64827fe16c34246\"},\"resource_item_controller\":{\"bytes\":49966,\"hits\":[{\"line\":6,\"text\":\"use XF\\\\ControllerPlugin\\\\DraftPlugin;\"},{\"line\":72,\"text\":\"$viewableCategoryIds = $categoryParams['categories']->keys();\"},{\"line\":74,\"text\":\"$listParams = $overviewPlugin->getCoreListData($viewableCategoryIds);\"},{\"line\":103,\"text\":\"$viewableCategoryIds = $this->getCategoryRepo()->getViewableCategoryIds();\"},{\"line\":106,\"text\":\"$finder = $ratingRepo->findLatestReviews($viewableCategoryIds);\"},{\"line\":116,\"text\":\"$reviews = $reviews->filterViewable();\"},{\"line\":140,\"text\":\"$categories = $categoryRepo->getViewableCategories();\"},{\"line\":186,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":230,\"text\":\"$authorOthers = $authorOthers->filterViewable();\"},{\"line\":301,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":316,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":339,\"text\":\"return $this->view('XFRM:ResourceItem\\\\Field', 'xfrm_resource_field', $viewParams);\"},{\"line\":346,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":391,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":510,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":587,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":597,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":638,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":716,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $extraWith);\"},{\"line\":764,\"text\":\"$rating = $rater->save();\"},{\"line\":851,\"text\":\"$updateCreator->setTitle($this->filter('update_title', 'str'));\"},{\"line\":868,\"text\":\"$updater->getResource()->draft_update->delete();\"},{\"line\":873,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":893,\"text\":\"$teamManager->save();\"},{\"line\":913,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":947,\"text\":\"$teamManager->save();\"},{\"line\":971,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":989,\"text\":\"$updater->save();\"},{\"line\":1006,\"text\":\"$draft = $resource->draft_update;\"},{\"line\":1010,\"text\":\"$updateAttachData = $attachmentRepo->getEditorData('resource_update', $resource, $draft->attachment_hash);\"},{\"line\":1029,\"text\":\"public function actionPostUpdateDraft(ParameterBag $params)\"},{\"line\":1031,\"text\":\"$this->assertDraftsEnabled();\"},{\"line\":1033,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1044,\"text\":\"/** @var DraftPlugin $draftPlugin */\"},{\"line\":1045,\"text\":\"$draftPlugin = $this->plugin('XF:Draft');\"},{\"line\":1046,\"text\":\"return $draftPlugin->actionDraftMessage($resource->draft_update, $extraData, 'update_message');\"},{\"line\":1051,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1062,\"text\":\"$updateCreator->setTitle($this->filter('update_title', 'str'));\"},{\"line\":1108,\"text\":\"$editor->setTitle($this->filter('title', 'str'));\"},{\"line\":1162,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1180,\"text\":\"$editor->save();\"},{\"line\":1229,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1267,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1352,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1367,\"text\":\"$typeChanger->save();\"},{\"line\":1429,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1455,\"text\":\"$categories = $categoryRepo->getViewableCategories();\"},{\"line\":1469,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1486,\"text\":\"$tagger->save();\"},{\"line\":1494,\"text\":\"$reply->setJsonParam('message', \\\\XF::phrase('your_changes_have_been_saved'));\"},{\"line\":1518,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1562,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1600,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1640,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1653,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1700,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1709,\"text\":\"'resource_state'\"},{\"line\":1715,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1732,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1747,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1774,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1828,\"text\":\"protected function assertViewableResource($resourceId, array $extraWith = [])\"},{\"line\":1861,\"text\":\"$this->setContentKey('resource-' . $resource->resource_id);\"},{\"line\":1899,\"text\":\"foreach ($resources->filterViewable() AS $id => $resource)\"}],\"present\":true,\"sha256\":\"78aaaaaf3ad95aedde7b4a1e4d8ec026b9a305dd4a2a23172d28a756244b9f67\"},\"resource_item_entity\":{\"bytes\":55733,\"hits\":[{\"line\":8,\"text\":\"use XF\\\\Draft;\"},{\"line\":24,\"text\":\"use XF\\\\Entity\\\\ViewableInterface;\"},{\"line\":40,\"text\":\"* COLUMNS\"},{\"line\":49,\"text\":\"* @property string $resource_state\"},{\"line\":88,\"text\":\"* @property-read Draft $draft_update\"},{\"line\":102,\"text\":\"* @property-read AbstractCollection<\\\\XF\\\\Entity\\\\Draft> $DraftUpdates\"},{\"line\":106,\"text\":\"class ResourceItem extends Entity implements ContainableInterface, DatableInterface, LinkableInterface, ViewableInterface\"},{\"line\":132,\"text\":\"public function getStructuredData(): array\"},{\"line\":156,\"text\":\"'discussionUrl' => $this->hasViewableDiscussion()\"},{\"line\":265,\"text\":\"if ($this->resource_state == 'moderated')\"},{\"line\":268,\"text\":\"!$this->hasPermission('viewModerated')\"},{\"line\":276,\"text\":\"else if ($this->resource_state == 'deleted')\"},{\"line\":278,\"text\":\"if (!$this->hasPermission('viewDeleted'))\"},{\"line\":288,\"text\":\"public function canViewDeletedContent()\"},{\"line\":290,\"text\":\"return $this->hasPermission('viewDeleted');\"},{\"line\":293,\"text\":\"public function canViewModeratedContent()\"},{\"line\":296,\"text\":\"if ($this->hasPermission('viewModerated'))\"},{\"line\":336,\"text\":\"public function canRate($checkDownloadIfRequired = true, &$error = null)\"},{\"line\":338,\"text\":\"if (!$this->isVisible())\"},{\"line\":355,\"text\":\"if ($checkDownloadIfRequired && $this->isDownloadable() && $this->app()->options()->xfrmRequireDownloadToRate)\"},{\"line\":368,\"text\":\"public function canRatePreReg($checkDownloadIfRequired = true)\"},{\"line\":378,\"text\":\"function () use ($checkDownloadIfRequired) { return $this->canRate($checkDownloadIfRequired); }\"},{\"line\":564,\"text\":\"|| !$this->isVisible()\"},{\"line\":635,\"text\":\"return $this->isVisible();\"},{\"line\":684,\"text\":\"&& $this->resource_state == 'visible'\"},{\"line\":737,\"text\":\"public function isVisible()\"},{\"line\":739,\"text\":\"return ($this->resource_state == 'visible');\"},{\"line\":859,\"text\":\"public function hasViewableDiscussion()\"},{\"line\":923,\"text\":\"$state = $currentValues ? $this->getValue('resource_state') : $this->getExistingValue('resource_state');\"},{\"line\":933,\"text\":\"if ($state != 'visible' && $options->xfrmResourceDeleteThreadAction['update_title'])\"},{\"line\":964,\"text\":\"}, 'save');\"},{\"line\":984,\"text\":\"}, 'save');\"},{\"line\":993,\"text\":\"* @return Draft\"},{\"line\":995,\"text\":\"public function getDraftUpdate()\"},{\"line\":997,\"text\":\"return Draft::createFromEntity($this, 'DraftUpdates');\"},{\"line\":1055,\"text\":\"if (!$this->canViewDeletedContent() && !$this->canViewModeratedContent())\"},{\"line\":1072,\"text\":\"if (!$this->canViewDeletedContent())\"},{\"line\":1139,\"text\":\"AND message_state = 'visible'\"},{\"line\":1160,\"text\":\"AND message_state = 'visible'\"},{\"line\":1173,\"text\":\"AND rating_state = 'visible'\"},{\"line\":1187,\"text\":\"AND rating_state = 'visible'\"},{\"line\":1218,\"text\":\"AND version_state = 'visible'\"},{\"line\":1275,\"text\":\"protected function _preSave()\"},{\"line\":1310,\"text\":\"protected function _postSave()\"},{\"line\":1312,\"text\":\"$visibilityChange = $this->isStateChanged('resource_state', 'visible');\"},{\"line\":1313,\"text\":\"$approvalChange = $this->isStateChanged('resource_state', 'moderated');\"},{\"line\":1314,\"text\":\"$deletionChange = $this->isStateChanged('resource_state', 'deleted');\"},{\"line\":1320,\"text\":\"$this->resourceMadeVisible();\"},{\"line\":1354,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1356,\"text\":\"$this->resourceInsertedVisible();\"},{\"line\":1377,\"text\":\"$oldDiscussion->save(false, false);\"},{\"line\":1388,\"text\":\"$this->Discussion->save(false, false);\"},{\"line\":1401,\"text\":\"$this->Discussion->saveIfChanged($saved, false, false);\"},{\"line\":1410,\"text\":\"$approvalQueue->save();\"},{\"line\":1416,\"text\":\"$delLog->save();\"},{\"line\":1426,\"text\":\"$this->_postSaveBookmarks();\"},{\"line\":1429,\"text\":\"protected function resourceMadeVisible()\"},{\"line\":1440,\"text\":\"$thread->discussion_state = 'visible';\"},{\"line\":1449,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1468,\"text\":\"$thread->discussion_state = 'deleted';\"},{\"line\":1477,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1494,\"text\":\"protected function resourceInsertedVisible()\"},{\"line\":1512,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1581,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1584,\"text\":\"$category->save();\"},{\"line\":1587,\"text\":\"if ($this->getExistingValue('resource_state') == 'visible')\"},{\"line\":1594,\"text\":\"$oldCategory->save();\"},{\"line\":1605,\"text\":\"if ($this->resource_state == 'visible' && $thread->discussion_state == 'deleted')\"},{\"line\":1607,\"text\":\"// presumably the thread was soft deleted by being moved to a category without a thread\"},{\"line\":1608,\"text\":\"$thread->discussion_state = 'visible';\"},{\"line\":1614,\"text\":\"$thread->discussion_state = 'deleted';\"},{\"line\":1617,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1623,\"text\":\"// check for entering/leaving visible\"},{\"line\":1624,\"text\":\"$visibilityChange = $this->isStateChanged('resource_state', 'visible');\"},{\"line\":1628,\"text\":\"$category->save();\"},{\"line\":1633,\"text\":\"$category->save();\"},{\"line\":1635,\"text\":\"else if ($this->isUpdate() && $this->resource_state == 'visible')\"},{\"line\":1638,\"text\":\"$category->save();\"},{\"line\":1644,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1649,\"text\":\"if ($this->Category && $this->resource_state == 'visible')\"},{\"line\":1652,\"text\":\"$this->Category->save();\"},{\"line\":1655,\"text\":\"if ($this->resource_state == 'deleted' && $this->DeletionLog)\"},{\"line\":1660,\"text\":\"if ($this->resource_state == 'moderated' && $this->ApprovalQueue)\"},{\"line\":1744,\"text\":\"if ($this->resource_state == 'deleted')\"},{\"line\":1749,\"text\":\"$this->resource_state = 'deleted';\"},{\"line\":1756,\"text\":\"$this->save();\"},{\"line\":1820,\"text\":\"'discussionUrl' => $this->hasViewableDiscussion()\"},{\"line\":2009,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":2015,\"text\":\"$structure->columns = [\"},{\"line\":2018,\"text\":\"'required' => 'please_enter_valid_title',\"},{\"line\":2023,\"text\":\"'required' => 'xfrm_please_enter_valid_tag_line',\"},{\"line\":2027,\"text\":\"'user_id' => ['type' => self::UINT, 'required' => true, 'api' => true],\"},{\"line\":2029,\"text\":\"'required' => 'please_enter_valid_name',\"},{\"line\":2034,\"text\":\"'resource_state' => ['type' => self::STR, 'default' => 'visible',\"},{\"line\":2035,\"text\":\"'allowedValues' => ['visible', 'moderated', 'deleted'], 'api' => true,\"},{\"line\":2037,\"text\":\"'resource_type' => ['type' => self::STR, 'required' => true,\"},{\"line\":2041,\"text\":\"'resource_category_id' => ['type' => self::UINT, 'required' => true, 'api' => true],\"},{\"line\":2084,\"text\":\"'draft_update' => true,\"},{\"line\":2088,\"text\":\"'XF:Taggable' => ['stateField' => 'resource_state'],\"},{\"line\":2090,\"text\":\"'checkForUpdates' => ['title', 'resource_category_id', 'user_id', 'prefix_id', 'tags', 'resource_state'],\"},{\"line\":2096,\"text\":\"'checkForUpdates' => ['resource_category_id', 'resource_state', 'prefix_id'],\"},{\"line\":2103,\"text\":\"'stateField' => 'resource_state',\"},{\"line\":2106,\"text\":\"'valueTable' => 'xf_rm_resource_field_value',\"},{\"line\":2113,\"text\":\"'stateField' => 'resource_state',\"},{\"line\":2189,\"text\":\"'DraftUpdates' => [\"},{\"line\":2190,\"text\":\"'entity' => 'XF:Draft',\"},{\"line\":2193,\"text\":\"['draft_key', '=', 'xfrm-resource-', '$resource_id'],\"}],\"present\":true,\"sha256\":\"703773471dd35c876a0fed578a60dfc51e1dafc9520ad1493282b50fd9e05262\"}},\"tables\":{\"xf_draft\":true,\"xf_rm_category\":true,\"xf_rm_category_field\":true,\"xf_rm_category_prefix\":true,\"xf_rm_resource\":true,\"xf_rm_resource_field\":true,\"xf_rm_resource_field_value\":true,\"xf_rm_resource_prefix\":true,\"xf_tag\":true,\"xf_tag_content\":true},\"user1\":{\"admin_row_count\":1,\"is_staff\":1,\"permission_combination_id\":6,\"user_id\":1,\"user_state\":\"valid\",\"username\":\"NewfiAdmin\"}}\nNEWFI95_PRODUCTION={\"addons\":[{\"active\":1,\"addon_id\":\"XF\",\"title\":\"XenForo\",\"version_id\":2031270,\"version_string\":\"2.3.12\"},{\"active\":1,\"addon_id\":\"XFRM\",\"title\":\"XenForo Resource Manager\",\"version_id\":2031170,\"version_string\":\"2.3.11\"}],\"boardActive\":\"1\",\"counts\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0},\"errors\":{\"count\":0,\"ids\":[],\"new\":[],\"old_fp\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"hostname\":\"newfi-prod\",\"indexRoute\":\"portal/\",\"options\":[{\"option_id\":\"enableTagging\",\"option_value\":\"0\"},{\"option_id\":\"xfrmAllowAnonReview\",\"option_value\":\"0\"},{\"option_id\":\"xfrmAllowIcons\",\"option_value\":\"1\"},{\"option_id\":\"xfrmAuthorOtherResourcesCount\",\"option_value\":\"5\"},{\"option_id\":\"xfrmEnableTeams\",\"option_value\":\"0\"},{\"option_id\":\"xfrmFilelessViewFull\",\"option_value\":\"{\\\"limit\\\":\\\"1\\\",\\\"length\\\":\\\"250\\\"}\"},{\"option_id\":\"xfrmListDefaultOrder\",\"option_value\":\"last_update\"},{\"option_id\":\"xfrmMinimumReviewLength\",\"option_value\":\"0\"},{\"option_id\":\"xfrmPaidResourceThreadTitleTemplate\",\"option_value\":\"{title} [Paid]\"},{\"option_id\":\"xfrmRecentReviewsCount\",\"option_value\":\"10\"},{\"option_id\":\"xfrmRecentUpdatesCount\",\"option_value\":\"3\"},{\"option_id\":\"xfrmRequireDownloadToRate\",\"option_value\":\"1\"},{\"option_id\":\"xfrmResourceCurrencies\",\"option_value\":\"usd\\ncad\\naud\\ngbp\\neur\"},{\"option_id\":\"xfrmResourceDeleteThreadAction\",\"option_value\":\"{\\\"action\\\":\\\"close\\\",\\\"update_title\\\":\\\"1\\\",\\\"title_template\\\":\\\"{title} [Deleted]\\\",\\\"add_post\\\":\\\"1\\\"}\"},{\"option_id\":\"xfrmResourceExtensions\",\"option_value\":\"zip\\ntxt\\npdf\\npng\\njpg\\njpeg\\njpe\\ngif\\npsd\\ntif\\nwebp\"},{\"option_id\":\"xfrmResourceMaxFileSize\",\"option_value\":\"2048\"},{\"option_id\":\"xfrmResourceMaxFiles\",\"option_value\":\"5\"},{\"option_id\":\"xfrmResourcesPerPage\",\"option_value\":\"20\"},{\"option_id\":\"xfrmReviewRequired\",\"option_value\":\"1\"},{\"option_id\":\"xfrmReviewVoting\",\"option_value\":\"yes\"},{\"option_id\":\"xfrmReviewsPerPage\",\"option_value\":\"20\"},{\"option_id\":\"xfrmUpdateMaxLength\",\"option_value\":\"50000\"},{\"option_id\":\"xfrmUpdatesPerPage\",\"option_value\":\"10\"}],\"rows\":{\"xf_rm_category\":[{\"allow_commercial_external\":1,\"allow_external\":1,\"allow_fileless\":1,\"allow_local\":1,\"always_moderate_create\":0,\"always_moderate_update\":0,\"auto_feature\":0,\"breadcrumb_data\":\"[]\",\"depth\":0,\"description\":\"\",\"display_order\":10,\"enable_support_url\":1,\"enable_versioning\":1,\"featured_count\":0,\"field_cache\":\"\",\"last_resource_id\":0,\"last_resource_title\":\"\",\"last_update\":0,\"lft\":1,\"min_tags\":0,\"parent_category_id\":0,\"prefix_cache\":\"\",\"require_prefix\":0,\"resource_category_id\":1,\"resource_count\":0,\"review_field_cache\":\"\",\"rgt\":2,\"thread_node_id\":0,\"thread_prefix_id\":0,\"title\":\"База знаний\"}],\"xf_rm_category_field\":[],\"xf_rm_category_prefix\":[],\"xf_rm_resource_field\":[],\"xf_rm_resource_prefix\":[]},\"schemas\":{\"xf_draft\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"draft_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"draft_key\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varbinary(75)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"user_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"message\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumtext\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"extra_data\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"}],\"xf_rm_category\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"description\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"parent_category_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"lft\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rgt\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"depth\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"breadcrumb_data\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"resource_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"featured_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"last_resource_title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_resource_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"review_field_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"require_prefix\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"thread_node_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"thread_prefix_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_local\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_external\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_commercial_external\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_fileless\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"always_moderate_create\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"always_moderate_update\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"min_tags\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"enable_versioning\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"enable_support_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"auto_feature\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_category_field\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}],\"xf_rm_category_prefix\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}],\"xf_rm_resource\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"resource_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"tag_line\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"user_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"username\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"team_member_user_ids\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"visible\",\"Extra\":\"\",\"Field\":\"resource_state\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"enum('visible','moderated','deleted')\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"current_version_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"description_update_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"discussion_thread_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"external_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"external_purchase_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":\"0.00\",\"Extra\":\"\",\"Field\":\"price\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"decimal(10,2) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"currency\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(3)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"view_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"download_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_sum\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_avg\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"float unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_weighted\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"float unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"rating_split\",\"Key\":\"\",\"Null\":\"YES\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"update_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"review_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"alt_support_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"custom_fields\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"prefix_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"icon_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"icon_optimized\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tags\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"featured\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_resource_field\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":\"above_info\",\"Extra\":\"\",\"Field\":\"display_group\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varchar(25)\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"textbox\",\"Extra\":\"\",\"Field\":\"field_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_choices\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"none\",\"Extra\":\"\",\"Field\":\"match_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"match_params\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"max_length\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"required\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"display_template\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"wrapper_template\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"viewable_resource\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_resource_field_value\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_value\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumtext\"}],\"xf_rm_resource_prefix\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"prefix_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_group_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"materialized_order\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"css_class\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(50)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"allowed_user_group_ids\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"}],\"xf_tag\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"tag_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag\",\"Key\":\"UNI\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag_url\",\"Key\":\"UNI\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"use_count\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_use_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"permanent\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_tag_content\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"tag_content_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_type\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"add_user_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"add_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"visible\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}]},\"source\":{\"abstract_field_entity\":{\"bytes\":13332,\"hits\":[{\"line\":14,\"text\":\"* COLUMNS\"},{\"line\":15,\"text\":\"* @property string $field_id\"},{\"line\":16,\"text\":\"* @property int $display_order\"},{\"line\":17,\"text\":\"* @property string $field_type\"},{\"line\":18,\"text\":\"* @property array $field_choices\"},{\"line\":19,\"text\":\"* @property string $match_type\"},{\"line\":20,\"text\":\"* @property array $match_params\"},{\"line\":21,\"text\":\"* @property int $max_length\"},{\"line\":22,\"text\":\"* @property bool $required\"},{\"line\":24,\"text\":\"* @property string $display_group\"},{\"line\":25,\"text\":\"* @property string $user_editable\"},{\"line\":49,\"text\":\"return static::getPhrasePrefix() . '_' . ($title ? 'title' : 'desc') . '.' . $this->field_id;\"},{\"line\":91,\"text\":\"if (isset($types[$this->field_type]))\"},{\"line\":93,\"text\":\"$type = $types[$this->field_type]['type'];\"},{\"line\":104,\"text\":\"if (!isset($this->field_choices[$choice]))\"},{\"line\":126,\"text\":\"return static::getPhrasePrefix() . '_' . 'choice' . '.' . $this->field_id . '_' . $choice;\"},{\"line\":156,\"text\":\"$this->error(\\\\XF::phrase('please_enter_text_for_each_choice'), 'field_choices');\"},{\"line\":162,\"text\":\"$this->error(\\\\XF::phrase('please_enter_an_id_using_only_alphanumeric'), 'field_choices');\"},{\"line\":289,\"text\":\"protected function _preSave()\"},{\"line\":291,\"text\":\"if ($this->isUpdate() && $this->isChanged('field_id'))\"},{\"line\":293,\"text\":\"$this->error('The field ID cannot be changed once set.', 'field_id');\"},{\"line\":296,\"text\":\"if ($this->isChanged(['match_type', 'match_params']))\"},{\"line\":298,\"text\":\"$validateMatchTypeMethod = '_validateMatchType' . Php::camelCase($this->get('match_type'));\"},{\"line\":301,\"text\":\"$matchParams = $this->match_params;\"},{\"line\":304,\"text\":\"$this->match_params = $matchParams;\"},{\"line\":308,\"text\":\"$this->error($error, 'match_params');\"},{\"line\":313,\"text\":\"if ($this->isUpdate() && $this->isChanged('field_type'))\"},{\"line\":316,\"text\":\"if ($typeMap[$this->get('field_type')]['compatible'] != $typeMap[$this->getExistingValue('field_type')]['compatible'])\"},{\"line\":318,\"text\":\"$this->error(\\\\XF::phrase('you_may_not_change_field_to_different_type_after_it_has_been_created'), 'field_type');\"},{\"line\":324,\"text\":\"if (($this->isInsert() && !$this->field_choices) || (is_array($this->field_choices) && !$this->field_choices))\"},{\"line\":326,\"text\":\"$this->error(\\\\XF::phrase('please_enter_at_least_one_choice'), 'field_choices', false);\"},{\"line\":331,\"text\":\"protected function _postSave()\"},{\"line\":333,\"text\":\"if ($this->isChanged('field_choices'))\"},{\"line\":338,\"text\":\"$newValues = $this->getValue('field_choices');\"},{\"line\":339,\"text\":\"$oldValues = $this->getExistingValue('field_choices');\"},{\"line\":373,\"text\":\"$phrase->save(true, false);\"},{\"line\":390,\"text\":\"$this->deleteChoicePhrases(array_keys($this->field_choices));\"},{\"line\":411,\"text\":\"\\\\XF::runOnce('rebuildFieldCache' . $this->field_id, function ()\"},{\"line\":422,\"text\":\"* @api-out str $field_id\"},{\"line\":425,\"text\":\"* @api-out int $display_order\"},{\"line\":426,\"text\":\"* @api-out str $field_type\"},{\"line\":427,\"text\":\"* @api-out object $field_choices For choice types, an ordered list of choices, with \\\"option\\\" and \\\"name\\\" keys for each.\"},{\"line\":428,\"text\":\"* @api-out str $match_type\"},{\"line\":429,\"text\":\"* @api-out array $match_params\"},{\"line\":430,\"text\":\"* @api-out int $max_length\"},{\"line\":431,\"text\":\"* @api-out bool $required\"},{\"line\":432,\"text\":\"* @api-out str $display_group If this field type supports grouping, the group this field belongs to.\"},{\"line\":446,\"text\":\"foreach ($this->field_choices AS $option => $printable)\"},{\"line\":453,\"text\":\"$result->field_choices = $choices;\"},{\"line\":456,\"text\":\"$result->match_params = (object) $this->match_params;\"},{\"line\":463,\"text\":\"'has_user_editable' => false,\"},{\"line\":464,\"text\":\"'has_user_editable_once' => false,\"},{\"line\":472,\"text\":\"$structure->primaryKey = 'field_id';\"},{\"line\":473,\"text\":\"$structure->columns = [\"},{\"line\":474,\"text\":\"'field_id' => ['type' => self::STR, 'maxLength' => 25,\"},{\"line\":475,\"text\":\"'required' => 'please_enter_valid_field_id',\"},{\"line\":476,\"text\":\"'unique' => 'field_ids_must_be_unique',\"},{\"line\":480,\"text\":\"'display_order' => ['type' => self::UINT, 'default' => 1, 'api' => true],\"},{\"line\":481,\"text\":\"'field_type' => ['type' => self::STR, 'default' => 'textbox',\"},{\"line\":485,\"text\":\"'field_choices' => ['type' => self::JSON_ARRAY, 'default' => []],\"},{\"line\":486,\"text\":\"'match_type' => ['type' => self::STR, 'default' => 'none',\"},{\"line\":490,\"text\":\"'match_params' => ['type' => self::JSON_ARRAY, 'default' => []],\"},{\"line\":491,\"text\":\"'max_length' => ['type' => self::UINT, 'default' => 0, 'api' => true],\"},{\"line\":492,\"text\":\"'required' => ['type' => self::BOOL, 'default' => false, 'api' => true],\"},{\"line\":499,\"text\":\"$structure->columns['display_group'] = ['type' => self::STR, 'default' => $firstOption,\"},{\"line\":504,\"text\":\"if ($options['has_user_editable'])\"},{\"line\":506,\"text\":\"$userEditAllowedValues = $options['has_user_editable_once'] ? ['yes', 'once', 'never'] : ['yes', 'never'];\"},{\"line\":507,\"text\":\"$structure->columns['user_editable'] = ['type' => self::STR, 'default' => 'yes',\"},{\"line\":513,\"text\":\"$structure->columns['moderator_editable'] = ['type' => self::BOOL, 'default' => true];\"},{\"line\":517,\"text\":\"$structure->columns['editable_user_group_ids'] = [\"},{\"line\":529,\"text\":\"$structure->columns['wrapper_template'] = ['type' => self::STR, 'default' => ''];\"},{\"line\":544,\"text\":\"['title', '=', $phrasePrefix . '_title.', '$field_id'],\"},{\"line\":552,\"text\":\"['title', '=', $phrasePrefix . '_desc.', '$field_id'],\"}],\"present\":true,\"sha256\":\"f5a7d03f0b656ecae7a225aafe363eb79a925054a3d2fefdcc0bdf4e6a41695f\"},\"category_admin\":{\"bytes\":5702,\"hits\":[{\"line\":59,\"text\":\"$availableFields = $availableFields->pluckNamed('title', 'field_id');\"},{\"line\":87,\"text\":\"protected function categorySaveProcess(\\\\XFRM\\\\Entity\\\\Category $category)\"},{\"line\":93,\"text\":\"'display_order' => 'uint',\"},{\"line\":100,\"text\":\"'always_moderate_create' => 'bool',\"},{\"line\":101,\"text\":\"'always_moderate_update' => 'bool',\"},{\"line\":102,\"text\":\"'min_tags' => 'uint',\"},{\"line\":110,\"text\":\"$form->basicEntitySave($category, $entityInput);\"},{\"line\":117,\"text\":\"$repo->updateContentAssociations($category->resource_category_id, $prefixIds);\"},{\"line\":120,\"text\":\"$fieldIds = $this->filter('available_fields', 'array-str');\"},{\"line\":125,\"text\":\"$repo->updateContentAssociations($category->resource_category_id, $fieldIds);\"},{\"line\":131,\"text\":\"public function actionSave(ParameterBag $params)\"},{\"line\":144,\"text\":\"$this->categorySaveProcess($category)->run();\"},{\"line\":184,\"text\":\"public function actionPermissionsSave(ParameterBag $params)\"},{\"line\":186,\"text\":\"return $this->getCategoryPermissionPlugin()->actionSave($params);\"}],\"present\":true,\"sha256\":\"4896715a8a0d00b8f4bf09dd0e28458f410ef8b27d1125711a5d1da3bc661ad6\"},\"category_entity\":{\"bytes\":15749,\"hits\":[{\"line\":6,\"text\":\"use XF\\\\Draft;\"},{\"line\":12,\"text\":\"use XF\\\\Entity\\\\ViewableInterface;\"},{\"line\":18,\"text\":\"* COLUMNS\"},{\"line\":38,\"text\":\"* @property bool $always_moderate_create\"},{\"line\":39,\"text\":\"* @property bool $always_moderate_update\"},{\"line\":40,\"text\":\"* @property int $min_tags\"},{\"line\":45,\"text\":\"* @property int $display_order\"},{\"line\":53,\"text\":\"* @property-read Draft $draft_resource\"},{\"line\":58,\"text\":\"* @property-read AbstractCollection<\\\\XF\\\\Entity\\\\Draft> $DraftResources\"},{\"line\":61,\"text\":\"class Category extends AbstractCategoryTree implements LinkableInterface, ViewableInterface\"},{\"line\":63,\"text\":\"protected $_viewableDescendants = [];\"},{\"line\":70,\"text\":\"public function canViewDeletedResources()\"},{\"line\":72,\"text\":\"return $this->hasPermission('viewDeleted');\"},{\"line\":75,\"text\":\"public function canViewModeratedResources()\"},{\"line\":77,\"text\":\"return $this->hasPermission('viewModerated');\"},{\"line\":173,\"text\":\"public function getViewableDescendants()\"},{\"line\":176,\"text\":\"if (!isset($this->_viewableDescendants[$userId]))\"},{\"line\":178,\"text\":\"$viewable = $this->repository('XFRM:Category')->getViewableCategories($this);\"},{\"line\":179,\"text\":\"$this->_viewableDescendants[$userId] = $viewable->toArray();\"},{\"line\":182,\"text\":\"return $this->_viewableDescendants[$userId];\"},{\"line\":185,\"text\":\"public function cacheViewableDescendents(array $descendents, $userId = null)\"},{\"line\":192,\"text\":\"$this->_viewableDescendants[$userId] = $descendents;\"},{\"line\":196,\"text\":\"* @return Draft\"},{\"line\":198,\"text\":\"public function getDraftResource()\"},{\"line\":200,\"text\":\"return Draft::createFromEntity($this, 'DraftResources');\"},{\"line\":309,\"text\":\"return 'visible';\"},{\"line\":314,\"text\":\"return 'moderated';\"},{\"line\":319,\"text\":\"return $this->always_moderate_update ? 'moderated' : 'visible';\"},{\"line\":323,\"text\":\"return $this->always_moderate_create ? 'moderated' : 'visible';\"},{\"line\":405,\"text\":\"AND resource_state = 'visible'\"},{\"line\":417,\"text\":\"AND resource.resource_state = 'visible'\\\",\"},{\"line\":430,\"text\":\"AND resource_state = 'visible'\"},{\"line\":448,\"text\":\"protected function _preSave()\"},{\"line\":547,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":553,\"text\":\"$structure->columns = [\"},{\"line\":556,\"text\":\"'required' => 'please_enter_valid_title', 'api' => true,\"},{\"line\":576,\"text\":\"'always_moderate_create' => ['type' => self::BOOL, 'default' => false],\"},{\"line\":577,\"text\":\"'always_moderate_update' => ['type' => self::BOOL, 'default' => false],\"},{\"line\":578,\"text\":\"'min_tags' => ['type' => self::UINT, 'forced' => true, 'default' => 0, 'max' => 100, 'api' => true],\"},{\"line\":585,\"text\":\"'draft_resource' => true,\"},{\"line\":603,\"text\":\"'DraftResources' => [\"},{\"line\":604,\"text\":\"'entity' => 'XF:Draft',\"},{\"line\":607,\"text\":\"['draft_key', '=', 'xfrm-category-', '$resource_category_id'],\"}],\"present\":true,\"sha256\":\"73763c6c3b7d56da646cf04b1f19106b33643daa9bbb6e775141e692b9cf36c2\"},\"category_field_repo\":{\"bytes\":729,\"hits\":[{\"line\":30,\"text\":\"$category->saveIfChanged();\"}],\"present\":true,\"sha256\":\"533bd6390f94189f752059bfa611e53e6ca4711c72a18c7b34322cecc9fe2228\"},\"relevant_files\":[\"src/addons/XFRM/Entity/Category.php\",\"src/addons/XFRM/Entity/CategoryField.php\",\"src/addons/XFRM/Entity/CategoryPrefix.php\",\"src/addons/XFRM/Entity/CategoryReviewField.php\",\"src/addons/XFRM/Entity/CategoryWatch.php\",\"src/addons/XFRM/Entity/ResourceDownload.php\",\"src/addons/XFRM/Entity/ResourceField.php\",\"src/addons/XFRM/Entity/ResourceFieldValue.php\",\"src/addons/XFRM/Entity/ResourceItem.php\",\"src/addons/XFRM/Entity/ResourcePrefix.php\",\"src/addons/XFRM/Entity/ResourcePrefixGroup.php\",\"src/addons/XFRM/Entity/ResourceRating.php\",\"src/addons/XFRM/Entity/ResourceReviewField.php\",\"src/addons/XFRM/Entity/ResourceReviewFieldValue.php\",\"src/addons/XFRM/Entity/ResourceTeamMember.php\",\"src/addons/XFRM/Entity/ResourceUpdate.php\",\"src/addons/XFRM/Entity/ResourceVersion.php\",\"src/addons/XFRM/Entity/ResourceWatch.php\",\"src/addons/XFRM/Repository/Category.php\",\"src/addons/XFRM/Repository/CategoryField.php\",\"src/addons/XFRM/Repository/CategoryPrefix.php\",\"src/addons/XFRM/Repository/CategoryReviewField.php\",\"src/addons/XFRM/Repository/CategoryWatch.php\",\"src/addons/XFRM/Repository/ResourceField.php\",\"src/addons/XFRM/Repository/ResourceItem.php\",\"src/addons/XFRM/Repository/ResourcePrefix.php\",\"src/addons/XFRM/Repository/ResourceRating.php\",\"src/addons/XFRM/Repository/ResourceReviewField.php\",\"src/addons/XFRM/Repository/ResourceUpdate.php\",\"src/addons/XFRM/Repository/ResourceVersion.php\",\"src/addons/XFRM/Repository/ResourceWatch.php\"],\"resource_create_service\":{\"bytes\":9106,\"hits\":[{\"line\":85,\"text\":\"$this->resource->addCascadedSave($this->description);\"},{\"line\":88,\"text\":\"$this->resource->addCascadedSave($this->version);\"},{\"line\":97,\"text\":\"$this->resource->resource_state = $this->category->getNewContentState();\"},{\"line\":98,\"text\":\"$this->description->message_state = 'visible';\"},{\"line\":137,\"text\":\"public function setTitle($title)\"},{\"line\":143,\"text\":\"public function setContent($title, $description, $format = true)\"},{\"line\":145,\"text\":\"$this->setTitle($title);\"},{\"line\":168,\"text\":\"public function setDescriptionAttachmentHash($hash)\"},{\"line\":227,\"text\":\"if ($this->resource->resource_state == 'visible' && \\\\XF::visitor()->isSpamCheckRequired())\"},{\"line\":257,\"text\":\"$resource->preSave();\"},{\"line\":292,\"text\":\"protected function _save()\"},{\"line\":302,\"text\":\"$resource->save(true, false);\"},{\"line\":303,\"text\":\"// update and version will also be saved now\"},{\"line\":316,\"text\":\"->setContentId($resource->resource_id, true)\"},{\"line\":317,\"text\":\"->save($this->performValidations);\"},{\"line\":325,\"text\":\"$thread = $creator->save();\"},{\"line\":344,\"text\":\"$creator->setContent($this->resource->getExpectedThreadTitle(), $this->getThreadMessage(), false);\"},{\"line\":350,\"text\":\"$thread->discussion_state = $this->resource->resource_state;\"},{\"line\":385,\"text\":\"if ($this->resource->isVisible())\"}],\"present\":true,\"sha256\":\"2c72b9811646927b8abc0ffaee0b2d0358576b4b5cfc359da6fc5c7c13d9e66c\"},\"resource_edit_service\":{\"bytes\":5900,\"hits\":[{\"line\":59,\"text\":\"public function setTitle($title)\"},{\"line\":62,\"text\":\"$this->getDescriptionEditor()->setTitle($title);\"},{\"line\":133,\"text\":\"$this->resource->addCascadedSave($currentVersion);\"},{\"line\":148,\"text\":\"$this->resource->addCascadedSave($currentVersion);\"},{\"line\":217,\"text\":\"$resource->preSave();\"},{\"line\":252,\"text\":\"protected function _save()\"},{\"line\":256,\"text\":\"$resource->save(true, false);\"},{\"line\":260,\"text\":\"$this->descriptionEditor->save();\"},{\"line\":265,\"text\":\"$this->tagChanger->save($this->performValidations);\"},{\"line\":268,\"text\":\"if ($resource->isVisible() && $this->alert && $resource->user_id != \\\\XF::visitor()->user_id)\"}],\"present\":true,\"sha256\":\"b837cb9e5883ad74cc46c417bf5f5490506aecc26a3e458c035078e44964931d\"},\"resource_field_admin\":{\"bytes\":1905,\"hits\":[{\"line\":32,\"text\":\"return 'xfrm_resource_field';\"},{\"line\":59,\"text\":\"protected function saveAdditionalData(FormAction $form, \\\\XF\\\\Entity\\\\AbstractField $field)\"},{\"line\":62,\"text\":\"'viewable_resource' => 'bool',\"},{\"line\":65,\"text\":\"$form->basicEntitySave($field, $input);\"}],\"present\":true,\"sha256\":\"70af86b0164a4d9089bf740857557a5d1d26063b7b7496ae78cd7c7e2e64f9c3\"},\"resource_field_entity\":{\"bytes\":2019,\"hits\":[{\"line\":12,\"text\":\"* COLUMNS\"},{\"line\":13,\"text\":\"* @property string $field_id\"},{\"line\":14,\"text\":\"* @property int $display_order\"},{\"line\":15,\"text\":\"* @property string $field_type\"},{\"line\":16,\"text\":\"* @property array|null $field_choices\"},{\"line\":17,\"text\":\"* @property string $match_type\"},{\"line\":18,\"text\":\"* @property array|null $match_params\"},{\"line\":19,\"text\":\"* @property int $max_length\"},{\"line\":20,\"text\":\"* @property bool $required\"},{\"line\":22,\"text\":\"* @property string $display_group\"},{\"line\":24,\"text\":\"* @property bool $viewable_resource\"},{\"line\":44,\"text\":\"return 'xfrm_resource_field';\"},{\"line\":53,\"text\":\"$this->db()->delete('xf_rm_resource_field_value', 'field_id = ?', $this->field_id);\"},{\"line\":58,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":62,\"text\":\"'xf_rm_resource_field',\"},{\"line\":73,\"text\":\"$structure->columns += [\"},{\"line\":74,\"text\":\"'viewable_resource' => ['type' => self::BOOL, 'default' => true],\"},{\"line\":80,\"text\":\"'conditions' => 'field_id',\"}],\"present\":true,\"sha256\":\"c4cb2a33b80db12e54a010609140e1c9735b9055812b0d70d64827fe16c34246\"},\"resource_item_controller\":{\"bytes\":49966,\"hits\":[{\"line\":6,\"text\":\"use XF\\\\ControllerPlugin\\\\DraftPlugin;\"},{\"line\":72,\"text\":\"$viewableCategoryIds = $categoryParams['categories']->keys();\"},{\"line\":74,\"text\":\"$listParams = $overviewPlugin->getCoreListData($viewableCategoryIds);\"},{\"line\":103,\"text\":\"$viewableCategoryIds = $this->getCategoryRepo()->getViewableCategoryIds();\"},{\"line\":106,\"text\":\"$finder = $ratingRepo->findLatestReviews($viewableCategoryIds);\"},{\"line\":116,\"text\":\"$reviews = $reviews->filterViewable();\"},{\"line\":140,\"text\":\"$categories = $categoryRepo->getViewableCategories();\"},{\"line\":186,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":230,\"text\":\"$authorOthers = $authorOthers->filterViewable();\"},{\"line\":301,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":316,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":339,\"text\":\"return $this->view('XFRM:ResourceItem\\\\Field', 'xfrm_resource_field', $viewParams);\"},{\"line\":346,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":391,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":510,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":587,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":597,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":638,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":716,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $extraWith);\"},{\"line\":764,\"text\":\"$rating = $rater->save();\"},{\"line\":851,\"text\":\"$updateCreator->setTitle($this->filter('update_title', 'str'));\"},{\"line\":868,\"text\":\"$updater->getResource()->draft_update->delete();\"},{\"line\":873,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":893,\"text\":\"$teamManager->save();\"},{\"line\":913,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":947,\"text\":\"$teamManager->save();\"},{\"line\":971,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":989,\"text\":\"$updater->save();\"},{\"line\":1006,\"text\":\"$draft = $resource->draft_update;\"},{\"line\":1010,\"text\":\"$updateAttachData = $attachmentRepo->getEditorData('resource_update', $resource, $draft->attachment_hash);\"},{\"line\":1029,\"text\":\"public function actionPostUpdateDraft(ParameterBag $params)\"},{\"line\":1031,\"text\":\"$this->assertDraftsEnabled();\"},{\"line\":1033,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1044,\"text\":\"/** @var DraftPlugin $draftPlugin */\"},{\"line\":1045,\"text\":\"$draftPlugin = $this->plugin('XF:Draft');\"},{\"line\":1046,\"text\":\"return $draftPlugin->actionDraftMessage($resource->draft_update, $extraData, 'update_message');\"},{\"line\":1051,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1062,\"text\":\"$updateCreator->setTitle($this->filter('update_title', 'str'));\"},{\"line\":1108,\"text\":\"$editor->setTitle($this->filter('title', 'str'));\"},{\"line\":1162,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1180,\"text\":\"$editor->save();\"},{\"line\":1229,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1267,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1352,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1367,\"text\":\"$typeChanger->save();\"},{\"line\":1429,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1455,\"text\":\"$categories = $categoryRepo->getViewableCategories();\"},{\"line\":1469,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1486,\"text\":\"$tagger->save();\"},{\"line\":1494,\"text\":\"$reply->setJsonParam('message', \\\\XF::phrase('your_changes_have_been_saved'));\"},{\"line\":1518,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1562,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1600,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1640,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1653,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1700,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1709,\"text\":\"'resource_state'\"},{\"line\":1715,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1732,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1747,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1774,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1828,\"text\":\"protected function assertViewableResource($resourceId, array $extraWith = [])\"},{\"line\":1861,\"text\":\"$this->setContentKey('resource-' . $resource->resource_id);\"},{\"line\":1899,\"text\":\"foreach ($resources->filterViewable() AS $id => $resource)\"}],\"present\":true,\"sha256\":\"78aaaaaf3ad95aedde7b4a1e4d8ec026b9a305dd4a2a23172d28a756244b9f67\"},\"resource_item_entity\":{\"bytes\":55733,\"hits\":[{\"line\":8,\"text\":\"use XF\\\\Draft;\"},{\"line\":24,\"text\":\"use XF\\\\Entity\\\\ViewableInterface;\"},{\"line\":40,\"text\":\"* COLUMNS\"},{\"line\":49,\"text\":\"* @property string $resource_state\"},{\"line\":88,\"text\":\"* @property-read Draft $draft_update\"},{\"line\":102,\"text\":\"* @property-read AbstractCollection<\\\\XF\\\\Entity\\\\Draft> $DraftUpdates\"},{\"line\":106,\"text\":\"class ResourceItem extends Entity implements ContainableInterface, DatableInterface, LinkableInterface, ViewableInterface\"},{\"line\":132,\"text\":\"public function getStructuredData(): array\"},{\"line\":156,\"text\":\"'discussionUrl' => $this->hasViewableDiscussion()\"},{\"line\":265,\"text\":\"if ($this->resource_state == 'moderated')\"},{\"line\":268,\"text\":\"!$this->hasPermission('viewModerated')\"},{\"line\":276,\"text\":\"else if ($this->resource_state == 'deleted')\"},{\"line\":278,\"text\":\"if (!$this->hasPermission('viewDeleted'))\"},{\"line\":288,\"text\":\"public function canViewDeletedContent()\"},{\"line\":290,\"text\":\"return $this->hasPermission('viewDeleted');\"},{\"line\":293,\"text\":\"public function canViewModeratedContent()\"},{\"line\":296,\"text\":\"if ($this->hasPermission('viewModerated'))\"},{\"line\":336,\"text\":\"public function canRate($checkDownloadIfRequired = true, &$error = null)\"},{\"line\":338,\"text\":\"if (!$this->isVisible())\"},{\"line\":355,\"text\":\"if ($checkDownloadIfRequired && $this->isDownloadable() && $this->app()->options()->xfrmRequireDownloadToRate)\"},{\"line\":368,\"text\":\"public function canRatePreReg($checkDownloadIfRequired = true)\"},{\"line\":378,\"text\":\"function () use ($checkDownloadIfRequired) { return $this->canRate($checkDownloadIfRequired); }\"},{\"line\":564,\"text\":\"|| !$this->isVisible()\"},{\"line\":635,\"text\":\"return $this->isVisible();\"},{\"line\":684,\"text\":\"&& $this->resource_state == 'visible'\"},{\"line\":737,\"text\":\"public function isVisible()\"},{\"line\":739,\"text\":\"return ($this->resource_state == 'visible');\"},{\"line\":859,\"text\":\"public function hasViewableDiscussion()\"},{\"line\":923,\"text\":\"$state = $currentValues ? $this->getValue('resource_state') : $this->getExistingValue('resource_state');\"},{\"line\":933,\"text\":\"if ($state != 'visible' && $options->xfrmResourceDeleteThreadAction['update_title'])\"},{\"line\":964,\"text\":\"}, 'save');\"},{\"line\":984,\"text\":\"}, 'save');\"},{\"line\":993,\"text\":\"* @return Draft\"},{\"line\":995,\"text\":\"public function getDraftUpdate()\"},{\"line\":997,\"text\":\"return Draft::createFromEntity($this, 'DraftUpdates');\"},{\"line\":1055,\"text\":\"if (!$this->canViewDeletedContent() && !$this->canViewModeratedContent())\"},{\"line\":1072,\"text\":\"if (!$this->canViewDeletedContent())\"},{\"line\":1139,\"text\":\"AND message_state = 'visible'\"},{\"line\":1160,\"text\":\"AND message_state = 'visible'\"},{\"line\":1173,\"text\":\"AND rating_state = 'visible'\"},{\"line\":1187,\"text\":\"AND rating_state = 'visible'\"},{\"line\":1218,\"text\":\"AND version_state = 'visible'\"},{\"line\":1275,\"text\":\"protected function _preSave()\"},{\"line\":1310,\"text\":\"protected function _postSave()\"},{\"line\":1312,\"text\":\"$visibilityChange = $this->isStateChanged('resource_state', 'visible');\"},{\"line\":1313,\"text\":\"$approvalChange = $this->isStateChanged('resource_state', 'moderated');\"},{\"line\":1314,\"text\":\"$deletionChange = $this->isStateChanged('resource_state', 'deleted');\"},{\"line\":1320,\"text\":\"$this->resourceMadeVisible();\"},{\"line\":1354,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1356,\"text\":\"$this->resourceInsertedVisible();\"},{\"line\":1377,\"text\":\"$oldDiscussion->save(false, false);\"},{\"line\":1388,\"text\":\"$this->Discussion->save(false, false);\"},{\"line\":1401,\"text\":\"$this->Discussion->saveIfChanged($saved, false, false);\"},{\"line\":1410,\"text\":\"$approvalQueue->save();\"},{\"line\":1416,\"text\":\"$delLog->save();\"},{\"line\":1426,\"text\":\"$this->_postSaveBookmarks();\"},{\"line\":1429,\"text\":\"protected function resourceMadeVisible()\"},{\"line\":1440,\"text\":\"$thread->discussion_state = 'visible';\"},{\"line\":1449,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1468,\"text\":\"$thread->discussion_state = 'deleted';\"},{\"line\":1477,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1494,\"text\":\"protected function resourceInsertedVisible()\"},{\"line\":1512,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1581,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1584,\"text\":\"$category->save();\"},{\"line\":1587,\"text\":\"if ($this->getExistingValue('resource_state') == 'visible')\"},{\"line\":1594,\"text\":\"$oldCategory->save();\"},{\"line\":1605,\"text\":\"if ($this->resource_state == 'visible' && $thread->discussion_state == 'deleted')\"},{\"line\":1607,\"text\":\"// presumably the thread was soft deleted by being moved to a category without a thread\"},{\"line\":1608,\"text\":\"$thread->discussion_state = 'visible';\"},{\"line\":1614,\"text\":\"$thread->discussion_state = 'deleted';\"},{\"line\":1617,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1623,\"text\":\"// check for entering/leaving visible\"},{\"line\":1624,\"text\":\"$visibilityChange = $this->isStateChanged('resource_state', 'visible');\"},{\"line\":1628,\"text\":\"$category->save();\"},{\"line\":1633,\"text\":\"$category->save();\"},{\"line\":1635,\"text\":\"else if ($this->isUpdate() && $this->resource_state == 'visible')\"},{\"line\":1638,\"text\":\"$category->save();\"},{\"line\":1644,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1649,\"text\":\"if ($this->Category && $this->resource_state == 'visible')\"},{\"line\":1652,\"text\":\"$this->Category->save();\"},{\"line\":1655,\"text\":\"if ($this->resource_state == 'deleted' && $this->DeletionLog)\"},{\"line\":1660,\"text\":\"if ($this->resource_state == 'moderated' && $this->ApprovalQueue)\"},{\"line\":1744,\"text\":\"if ($this->resource_state == 'deleted')\"},{\"line\":1749,\"text\":\"$this->resource_state = 'deleted';\"},{\"line\":1756,\"text\":\"$this->save();\"},{\"line\":1820,\"text\":\"'discussionUrl' => $this->hasViewableDiscussion()\"},{\"line\":2009,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":2015,\"text\":\"$structure->columns = [\"},{\"line\":2018,\"text\":\"'required' => 'please_enter_valid_title',\"},{\"line\":2023,\"text\":\"'required' => 'xfrm_please_enter_valid_tag_line',\"},{\"line\":2027,\"text\":\"'user_id' => ['type' => self::UINT, 'required' => true, 'api' => true],\"},{\"line\":2029,\"text\":\"'required' => 'please_enter_valid_name',\"},{\"line\":2034,\"text\":\"'resource_state' => ['type' => self::STR, 'default' => 'visible',\"},{\"line\":2035,\"text\":\"'allowedValues' => ['visible', 'moderated', 'deleted'], 'api' => true,\"},{\"line\":2037,\"text\":\"'resource_type' => ['type' => self::STR, 'required' => true,\"},{\"line\":2041,\"text\":\"'resource_category_id' => ['type' => self::UINT, 'required' => true, 'api' => true],\"},{\"line\":2084,\"text\":\"'draft_update' => true,\"},{\"line\":2088,\"text\":\"'XF:Taggable' => ['stateField' => 'resource_state'],\"},{\"line\":2090,\"text\":\"'checkForUpdates' => ['title', 'resource_category_id', 'user_id', 'prefix_id', 'tags', 'resource_state'],\"},{\"line\":2096,\"text\":\"'checkForUpdates' => ['resource_category_id', 'resource_state', 'prefix_id'],\"},{\"line\":2103,\"text\":\"'stateField' => 'resource_state',\"},{\"line\":2106,\"text\":\"'valueTable' => 'xf_rm_resource_field_value',\"},{\"line\":2113,\"text\":\"'stateField' => 'resource_state',\"},{\"line\":2189,\"text\":\"'DraftUpdates' => [\"},{\"line\":2190,\"text\":\"'entity' => 'XF:Draft',\"},{\"line\":2193,\"text\":\"['draft_key', '=', 'xfrm-resource-', '$resource_id'],\"}],\"present\":true,\"sha256\":\"703773471dd35c876a0fed578a60dfc51e1dafc9520ad1493282b50fd9e05262\"}},\"tables\":{\"xf_draft\":true,\"xf_rm_category\":true,\"xf_rm_category_field\":true,\"xf_rm_category_prefix\":true,\"xf_rm_resource\":true,\"xf_rm_resource_field\":true,\"xf_rm_resource_field_value\":true,\"xf_rm_resource_prefix\":true,\"xf_tag\":true,\"xf_tag_content\":true},\"user1\":{\"admin_row_count\":1,\"is_staff\":1,\"permission_combination_id\":6,\"user_id\":1,\"user_state\":\"valid\",\"username\":\"Newfi\"}}\nNEWFI95_PUBLIC_RESOURCE={\"effective\":\"https://newfi.ru/resources/\",\"http\":200}\nNEWFI95_SAFE_REPORT={\"changes_made\":false,\"counts\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0},\"decision\":\"PASS_KB204_XFRM_CONTRACT_AUDIT_CAPTURED\",\"git_head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\",\"options\":[{\"option_id\":\"enableTagging\",\"option_value\":\"0\"},{\"option_id\":\"xfrmAllowAnonReview\",\"option_value\":\"0\"},{\"option_id\":\"xfrmAllowIcons\",\"option_value\":\"1\"},{\"option_id\":\"xfrmAuthorOtherResourcesCount\",\"option_value\":\"5\"},{\"option_id\":\"xfrmEnableTeams\",\"option_value\":\"0\"},{\"option_id\":\"xfrmFilelessViewFull\",\"option_value\":\"{\\\"limit\\\":\\\"1\\\",\\\"length\\\":\\\"250\\\"}\"},{\"option_id\":\"xfrmListDefaultOrder\",\"option_value\":\"last_update\"},{\"option_id\":\"xfrmMinimumReviewLength\",\"option_value\":\"0\"},{\"option_id\":\"xfrmPaidResourceThreadTitleTemplate\",\"option_value\":\"{title} [Paid]\"},{\"option_id\":\"xfrmRecentReviewsCount\",\"option_value\":\"10\"},{\"option_id\":\"xfrmRecentUpdatesCount\",\"option_value\":\"3\"},{\"option_id\":\"xfrmRequireDownloadToRate\",\"option_value\":\"1\"},{\"option_id\":\"xfrmResourceCurrencies\",\"option_value\":\"usd\\ncad\\naud\\ngbp\\neur\"},{\"option_id\":\"xfrmResourceDeleteThreadAction\",\"option_value\":\"{\\\"action\\\":\\\"close\\\",\\\"update_title\\\":\\\"1\\\",\\\"title_template\\\":\\\"{title} [Deleted]\\\",\\\"add_post\\\":\\\"1\\\"}\"},{\"option_id\":\"xfrmResourceExtensions\",\"option_value\":\"zip\\ntxt\\npdf\\npng\\njpg\\njpeg\\njpe\\ngif\\npsd\\ntif\\nwebp\"},{\"option_id\":\"xfrmResourceMaxFileSize\",\"option_value\":\"2048\"},{\"option_id\":\"xfrmResourceMaxFiles\",\"option_value\":\"5\"},{\"option_id\":\"xfrmResourcesPerPage\",\"option_value\":\"20\"},{\"option_id\":\"xfrmReviewRequired\",\"option_value\":\"1\"},{\"option_id\":\"xfrmReviewVoting\",\"option_value\":\"yes\"},{\"option_id\":\"xfrmReviewsPerPage\",\"option_value\":\"20\"},{\"option_id\":\"xfrmUpdateMaxLength\",\"option_value\":\"50000\"},{\"option_id\":\"xfrmUpdatesPerPage\",\"option_value\":\"10\"}],\"public_resource\":{\"effective\":\"https://newfi.ru/resources/\",\"http\":200},\"rows\":{\"xf_rm_category\":[{\"allow_commercial_external\":1,\"allow_external\":1,\"allow_fileless\":1,\"allow_local\":1,\"always_moderate_create\":0,\"always_moderate_update\":0,\"auto_feature\":0,\"breadcrumb_data\":\"[]\",\"depth\":0,\"description\":\"\",\"display_order\":10,\"enable_support_url\":1,\"enable_versioning\":1,\"featured_count\":0,\"field_cache\":\"\",\"last_resource_id\":0,\"last_resource_title\":\"\",\"last_update\":0,\"lft\":1,\"min_tags\":0,\"parent_category_id\":0,\"prefix_cache\":\"\",\"require_prefix\":0,\"resource_category_id\":1,\"resource_count\":0,\"review_field_cache\":\"\",\"rgt\":2,\"thread_node_id\":0,\"thread_prefix_id\":0,\"title\":\"База знаний\"}],\"xf_rm_category_field\":[],\"xf_rm_category_prefix\":[],\"xf_rm_resource_field\":[],\"xf_rm_resource_prefix\":[]},\"schemas\":{\"xf_draft\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"draft_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"draft_key\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varbinary(75)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"user_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"message\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumtext\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"extra_data\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"}],\"xf_rm_category\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"description\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"parent_category_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"lft\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rgt\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"depth\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"breadcrumb_data\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"resource_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"featured_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"last_resource_title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_resource_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"review_field_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_cache\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"require_prefix\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"thread_node_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"thread_prefix_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_local\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_external\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_commercial_external\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"allow_fileless\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"always_moderate_create\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"always_moderate_update\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"min_tags\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"smallint(5) unsigned\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"enable_versioning\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"enable_support_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"auto_feature\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_category_field\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}],\"xf_rm_category_prefix\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}],\"xf_rm_resource\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"resource_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"title\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"tag_line\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"user_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"username\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"team_member_user_ids\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"visible\",\"Extra\":\"\",\"Field\":\"resource_state\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"enum('visible','moderated','deleted')\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_category_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"current_version_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"description_update_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"discussion_thread_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"external_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"external_purchase_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":\"0.00\",\"Extra\":\"\",\"Field\":\"price\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"decimal(10,2) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"currency\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(3)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"view_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"download_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_sum\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_avg\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"float unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"rating_weighted\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"float unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"rating_split\",\"Key\":\"\",\"Null\":\"YES\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"update_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"review_count\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"last_update\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"alt_support_url\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(500)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"custom_fields\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"prefix_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"icon_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"icon_optimized\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tags\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumblob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"featured\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_resource_field\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":\"above_info\",\"Extra\":\"\",\"Field\":\"display_group\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varchar(25)\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"textbox\",\"Extra\":\"\",\"Field\":\"field_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_choices\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"none\",\"Extra\":\"\",\"Field\":\"match_type\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"match_params\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"max_length\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"required\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"display_template\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"wrapper_template\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"text\"},{\"Default\":\"1\",\"Extra\":\"\",\"Field\":\"viewable_resource\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_rm_resource_field_value\":[{\"Default\":null,\"Extra\":\"\",\"Field\":\"resource_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"field_value\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"mediumtext\"}],\"xf_rm_resource_prefix\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"prefix_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"prefix_group_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"display_order\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"materialized_order\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"\",\"Extra\":\"\",\"Field\":\"css_class\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"varchar(50)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"allowed_user_group_ids\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"blob\"}],\"xf_tag\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"tag_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag\",\"Key\":\"UNI\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag_url\",\"Key\":\"UNI\",\"Null\":\"NO\",\"Type\":\"varchar(100)\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"use_count\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"last_use_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":\"0\",\"Extra\":\"\",\"Field\":\"permanent\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"}],\"xf_tag_content\":[{\"Default\":null,\"Extra\":\"auto_increment\",\"Field\":\"tag_content_id\",\"Key\":\"PRI\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_type\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"varbinary(25)\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"tag_id\",\"Key\":\"MUL\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"add_user_id\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"add_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"visible\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"tinyint(3) unsigned\"},{\"Default\":null,\"Extra\":\"\",\"Field\":\"content_date\",\"Key\":\"\",\"Null\":\"NO\",\"Type\":\"int(10) unsigned\"}]},\"source\":{\"abstract_field_entity\":{\"bytes\":13332,\"hits\":[{\"line\":14,\"text\":\"* COLUMNS\"},{\"line\":15,\"text\":\"* @property string $field_id\"},{\"line\":16,\"text\":\"* @property int $display_order\"},{\"line\":17,\"text\":\"* @property string $field_type\"},{\"line\":18,\"text\":\"* @property array $field_choices\"},{\"line\":19,\"text\":\"* @property string $match_type\"},{\"line\":20,\"text\":\"* @property array $match_params\"},{\"line\":21,\"text\":\"* @property int $max_length\"},{\"line\":22,\"text\":\"* @property bool $required\"},{\"line\":24,\"text\":\"* @property string $display_group\"},{\"line\":25,\"text\":\"* @property string $user_editable\"},{\"line\":49,\"text\":\"return static::getPhrasePrefix() . '_' . ($title ? 'title' : 'desc') . '.' . $this->field_id;\"},{\"line\":91,\"text\":\"if (isset($types[$this->field_type]))\"},{\"line\":93,\"text\":\"$type = $types[$this->field_type]['type'];\"},{\"line\":104,\"text\":\"if (!isset($this->field_choices[$choice]))\"},{\"line\":126,\"text\":\"return static::getPhrasePrefix() . '_' . 'choice' . '.' . $this->field_id . '_' . $choice;\"},{\"line\":156,\"text\":\"$this->error(\\\\XF::phrase('please_enter_text_for_each_choice'), 'field_choices');\"},{\"line\":162,\"text\":\"$this->error(\\\\XF::phrase('please_enter_an_id_using_only_alphanumeric'), 'field_choices');\"},{\"line\":289,\"text\":\"protected function _preSave()\"},{\"line\":291,\"text\":\"if ($this->isUpdate() && $this->isChanged('field_id'))\"},{\"line\":293,\"text\":\"$this->error('The field ID cannot be changed once set.', 'field_id');\"},{\"line\":296,\"text\":\"if ($this->isChanged(['match_type', 'match_params']))\"},{\"line\":298,\"text\":\"$validateMatchTypeMethod = '_validateMatchType' . Php::camelCase($this->get('match_type'));\"},{\"line\":301,\"text\":\"$matchParams = $this->match_params;\"},{\"line\":304,\"text\":\"$this->match_params = $matchParams;\"},{\"line\":308,\"text\":\"$this->error($error, 'match_params');\"},{\"line\":313,\"text\":\"if ($this->isUpdate() && $this->isChanged('field_type'))\"},{\"line\":316,\"text\":\"if ($typeMap[$this->get('field_type')]['compatible'] != $typeMap[$this->getExistingValue('field_type')]['compatible'])\"},{\"line\":318,\"text\":\"$this->error(\\\\XF::phrase('you_may_not_change_field_to_different_type_after_it_has_been_created'), 'field_type');\"},{\"line\":324,\"text\":\"if (($this->isInsert() && !$this->field_choices) || (is_array($this->field_choices) && !$this->field_choices))\"},{\"line\":326,\"text\":\"$this->error(\\\\XF::phrase('please_enter_at_least_one_choice'), 'field_choices', false);\"},{\"line\":331,\"text\":\"protected function _postSave()\"},{\"line\":333,\"text\":\"if ($this->isChanged('field_choices'))\"},{\"line\":338,\"text\":\"$newValues = $this->getValue('field_choices');\"},{\"line\":339,\"text\":\"$oldValues = $this->getExistingValue('field_choices');\"},{\"line\":373,\"text\":\"$phrase->save(true, false);\"},{\"line\":390,\"text\":\"$this->deleteChoicePhrases(array_keys($this->field_choices));\"},{\"line\":411,\"text\":\"\\\\XF::runOnce('rebuildFieldCache' . $this->field_id, function ()\"},{\"line\":422,\"text\":\"* @api-out str $field_id\"},{\"line\":425,\"text\":\"* @api-out int $display_order\"},{\"line\":426,\"text\":\"* @api-out str $field_type\"},{\"line\":427,\"text\":\"* @api-out object $field_choices For choice types, an ordered list of choices, with \\\"option\\\" and \\\"name\\\" keys for each.\"},{\"line\":428,\"text\":\"* @api-out str $match_type\"},{\"line\":429,\"text\":\"* @api-out array $match_params\"},{\"line\":430,\"text\":\"* @api-out int $max_length\"},{\"line\":431,\"text\":\"* @api-out bool $required\"},{\"line\":432,\"text\":\"* @api-out str $display_group If this field type supports grouping, the group this field belongs to.\"},{\"line\":446,\"text\":\"foreach ($this->field_choices AS $option => $printable)\"},{\"line\":453,\"text\":\"$result->field_choices = $choices;\"},{\"line\":456,\"text\":\"$result->match_params = (object) $this->match_params;\"},{\"line\":463,\"text\":\"'has_user_editable' => false,\"},{\"line\":464,\"text\":\"'has_user_editable_once' => false,\"},{\"line\":472,\"text\":\"$structure->primaryKey = 'field_id';\"},{\"line\":473,\"text\":\"$structure->columns = [\"},{\"line\":474,\"text\":\"'field_id' => ['type' => self::STR, 'maxLength' => 25,\"},{\"line\":475,\"text\":\"'required' => 'please_enter_valid_field_id',\"},{\"line\":476,\"text\":\"'unique' => 'field_ids_must_be_unique',\"},{\"line\":480,\"text\":\"'display_order' => ['type' => self::UINT, 'default' => 1, 'api' => true],\"},{\"line\":481,\"text\":\"'field_type' => ['type' => self::STR, 'default' => 'textbox',\"},{\"line\":485,\"text\":\"'field_choices' => ['type' => self::JSON_ARRAY, 'default' => []],\"},{\"line\":486,\"text\":\"'match_type' => ['type' => self::STR, 'default' => 'none',\"},{\"line\":490,\"text\":\"'match_params' => ['type' => self::JSON_ARRAY, 'default' => []],\"},{\"line\":491,\"text\":\"'max_length' => ['type' => self::UINT, 'default' => 0, 'api' => true],\"},{\"line\":492,\"text\":\"'required' => ['type' => self::BOOL, 'default' => false, 'api' => true],\"},{\"line\":499,\"text\":\"$structure->columns['display_group'] = ['type' => self::STR, 'default' => $firstOption,\"},{\"line\":504,\"text\":\"if ($options['has_user_editable'])\"},{\"line\":506,\"text\":\"$userEditAllowedValues = $options['has_user_editable_once'] ? ['yes', 'once', 'never'] : ['yes', 'never'];\"},{\"line\":507,\"text\":\"$structure->columns['user_editable'] = ['type' => self::STR, 'default' => 'yes',\"},{\"line\":513,\"text\":\"$structure->columns['moderator_editable'] = ['type' => self::BOOL, 'default' => true];\"},{\"line\":517,\"text\":\"$structure->columns['editable_user_group_ids'] = [\"},{\"line\":529,\"text\":\"$structure->columns['wrapper_template'] = ['type' => self::STR, 'default' => ''];\"},{\"line\":544,\"text\":\"['title', '=', $phrasePrefix . '_title.', '$field_id'],\"},{\"line\":552,\"text\":\"['title', '=', $phrasePrefix . '_desc.', '$field_id'],\"}],\"present\":true,\"sha256\":\"f5a7d03f0b656ecae7a225aafe363eb79a925054a3d2fefdcc0bdf4e6a41695f\"},\"category_admin\":{\"bytes\":5702,\"hits\":[{\"line\":59,\"text\":\"$availableFields = $availableFields->pluckNamed('title', 'field_id');\"},{\"line\":87,\"text\":\"protected function categorySaveProcess(\\\\XFRM\\\\Entity\\\\Category $category)\"},{\"line\":93,\"text\":\"'display_order' => 'uint',\"},{\"line\":100,\"text\":\"'always_moderate_create' => 'bool',\"},{\"line\":101,\"text\":\"'always_moderate_update' => 'bool',\"},{\"line\":102,\"text\":\"'min_tags' => 'uint',\"},{\"line\":110,\"text\":\"$form->basicEntitySave($category, $entityInput);\"},{\"line\":117,\"text\":\"$repo->updateContentAssociations($category->resource_category_id, $prefixIds);\"},{\"line\":120,\"text\":\"$fieldIds = $this->filter('available_fields', 'array-str');\"},{\"line\":125,\"text\":\"$repo->updateContentAssociations($category->resource_category_id, $fieldIds);\"},{\"line\":131,\"text\":\"public function actionSave(ParameterBag $params)\"},{\"line\":144,\"text\":\"$this->categorySaveProcess($category)->run();\"},{\"line\":184,\"text\":\"public function actionPermissionsSave(ParameterBag $params)\"},{\"line\":186,\"text\":\"return $this->getCategoryPermissionPlugin()->actionSave($params);\"}],\"present\":true,\"sha256\":\"4896715a8a0d00b8f4bf09dd0e28458f410ef8b27d1125711a5d1da3bc661ad6\"},\"category_entity\":{\"bytes\":15749,\"hits\":[{\"line\":6,\"text\":\"use XF\\\\Draft;\"},{\"line\":12,\"text\":\"use XF\\\\Entity\\\\ViewableInterface;\"},{\"line\":18,\"text\":\"* COLUMNS\"},{\"line\":38,\"text\":\"* @property bool $always_moderate_create\"},{\"line\":39,\"text\":\"* @property bool $always_moderate_update\"},{\"line\":40,\"text\":\"* @property int $min_tags\"},{\"line\":45,\"text\":\"* @property int $display_order\"},{\"line\":53,\"text\":\"* @property-read Draft $draft_resource\"},{\"line\":58,\"text\":\"* @property-read AbstractCollection<\\\\XF\\\\Entity\\\\Draft> $DraftResources\"},{\"line\":61,\"text\":\"class Category extends AbstractCategoryTree implements LinkableInterface, ViewableInterface\"},{\"line\":63,\"text\":\"protected $_viewableDescendants = [];\"},{\"line\":70,\"text\":\"public function canViewDeletedResources()\"},{\"line\":72,\"text\":\"return $this->hasPermission('viewDeleted');\"},{\"line\":75,\"text\":\"public function canViewModeratedResources()\"},{\"line\":77,\"text\":\"return $this->hasPermission('viewModerated');\"},{\"line\":173,\"text\":\"public function getViewableDescendants()\"},{\"line\":176,\"text\":\"if (!isset($this->_viewableDescendants[$userId]))\"},{\"line\":178,\"text\":\"$viewable = $this->repository('XFRM:Category')->getViewableCategories($this);\"},{\"line\":179,\"text\":\"$this->_viewableDescendants[$userId] = $viewable->toArray();\"},{\"line\":182,\"text\":\"return $this->_viewableDescendants[$userId];\"},{\"line\":185,\"text\":\"public function cacheViewableDescendents(array $descendents, $userId = null)\"},{\"line\":192,\"text\":\"$this->_viewableDescendants[$userId] = $descendents;\"},{\"line\":196,\"text\":\"* @return Draft\"},{\"line\":198,\"text\":\"public function getDraftResource()\"},{\"line\":200,\"text\":\"return Draft::createFromEntity($this, 'DraftResources');\"},{\"line\":309,\"text\":\"return 'visible';\"},{\"line\":314,\"text\":\"return 'moderated';\"},{\"line\":319,\"text\":\"return $this->always_moderate_update ? 'moderated' : 'visible';\"},{\"line\":323,\"text\":\"return $this->always_moderate_create ? 'moderated' : 'visible';\"},{\"line\":405,\"text\":\"AND resource_state = 'visible'\"},{\"line\":417,\"text\":\"AND resource.resource_state = 'visible'\\\",\"},{\"line\":430,\"text\":\"AND resource_state = 'visible'\"},{\"line\":448,\"text\":\"protected function _preSave()\"},{\"line\":547,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":553,\"text\":\"$structure->columns = [\"},{\"line\":556,\"text\":\"'required' => 'please_enter_valid_title', 'api' => true,\"},{\"line\":576,\"text\":\"'always_moderate_create' => ['type' => self::BOOL, 'default' => false],\"},{\"line\":577,\"text\":\"'always_moderate_update' => ['type' => self::BOOL, 'default' => false],\"},{\"line\":578,\"text\":\"'min_tags' => ['type' => self::UINT, 'forced' => true, 'default' => 0, 'max' => 100, 'api' => true],\"},{\"line\":585,\"text\":\"'draft_resource' => true,\"},{\"line\":603,\"text\":\"'DraftResources' => [\"},{\"line\":604,\"text\":\"'entity' => 'XF:Draft',\"},{\"line\":607,\"text\":\"['draft_key', '=', 'xfrm-category-', '$resource_category_id'],\"}],\"present\":true,\"sha256\":\"73763c6c3b7d56da646cf04b1f19106b33643daa9bbb6e775141e692b9cf36c2\"},\"category_field_repo\":{\"bytes\":729,\"hits\":[{\"line\":30,\"text\":\"$category->saveIfChanged();\"}],\"present\":true,\"sha256\":\"533bd6390f94189f752059bfa611e53e6ca4711c72a18c7b34322cecc9fe2228\"},\"relevant_files\":[\"src/addons/XFRM/Entity/Category.php\",\"src/addons/XFRM/Entity/CategoryField.php\",\"src/addons/XFRM/Entity/CategoryPrefix.php\",\"src/addons/XFRM/Entity/CategoryReviewField.php\",\"src/addons/XFRM/Entity/CategoryWatch.php\",\"src/addons/XFRM/Entity/ResourceDownload.php\",\"src/addons/XFRM/Entity/ResourceField.php\",\"src/addons/XFRM/Entity/ResourceFieldValue.php\",\"src/addons/XFRM/Entity/ResourceItem.php\",\"src/addons/XFRM/Entity/ResourcePrefix.php\",\"src/addons/XFRM/Entity/ResourcePrefixGroup.php\",\"src/addons/XFRM/Entity/ResourceRating.php\",\"src/addons/XFRM/Entity/ResourceReviewField.php\",\"src/addons/XFRM/Entity/ResourceReviewFieldValue.php\",\"src/addons/XFRM/Entity/ResourceTeamMember.php\",\"src/addons/XFRM/Entity/ResourceUpdate.php\",\"src/addons/XFRM/Entity/ResourceVersion.php\",\"src/addons/XFRM/Entity/ResourceWatch.php\",\"src/addons/XFRM/Repository/Category.php\",\"src/addons/XFRM/Repository/CategoryField.php\",\"src/addons/XFRM/Repository/CategoryPrefix.php\",\"src/addons/XFRM/Repository/CategoryReviewField.php\",\"src/addons/XFRM/Repository/CategoryWatch.php\",\"src/addons/XFRM/Repository/ResourceField.php\",\"src/addons/XFRM/Repository/ResourceItem.php\",\"src/addons/XFRM/Repository/ResourcePrefix.php\",\"src/addons/XFRM/Repository/ResourceRating.php\",\"src/addons/XFRM/Repository/ResourceReviewField.php\",\"src/addons/XFRM/Repository/ResourceUpdate.php\",\"src/addons/XFRM/Repository/ResourceVersion.php\",\"src/addons/XFRM/Repository/ResourceWatch.php\"],\"resource_create_service\":{\"bytes\":9106,\"hits\":[{\"line\":85,\"text\":\"$this->resource->addCascadedSave($this->description);\"},{\"line\":88,\"text\":\"$this->resource->addCascadedSave($this->version);\"},{\"line\":97,\"text\":\"$this->resource->resource_state = $this->category->getNewContentState();\"},{\"line\":98,\"text\":\"$this->description->message_state = 'visible';\"},{\"line\":137,\"text\":\"public function setTitle($title)\"},{\"line\":143,\"text\":\"public function setContent($title, $description, $format = true)\"},{\"line\":145,\"text\":\"$this->setTitle($title);\"},{\"line\":168,\"text\":\"public function setDescriptionAttachmentHash($hash)\"},{\"line\":227,\"text\":\"if ($this->resource->resource_state == 'visible' && \\\\XF::visitor()->isSpamCheckRequired())\"},{\"line\":257,\"text\":\"$resource->preSave();\"},{\"line\":292,\"text\":\"protected function _save()\"},{\"line\":302,\"text\":\"$resource->save(true, false);\"},{\"line\":303,\"text\":\"// update and version will also be saved now\"},{\"line\":316,\"text\":\"->setContentId($resource->resource_id, true)\"},{\"line\":317,\"text\":\"->save($this->performValidations);\"},{\"line\":325,\"text\":\"$thread = $creator->save();\"},{\"line\":344,\"text\":\"$creator->setContent($this->resource->getExpectedThreadTitle(), $this->getThreadMessage(), false);\"},{\"line\":350,\"text\":\"$thread->discussion_state = $this->resource->resource_state;\"},{\"line\":385,\"text\":\"if ($this->resource->isVisible())\"}],\"present\":true,\"sha256\":\"2c72b9811646927b8abc0ffaee0b2d0358576b4b5cfc359da6fc5c7c13d9e66c\"},\"resource_edit_service\":{\"bytes\":5900,\"hits\":[{\"line\":59,\"text\":\"public function setTitle($title)\"},{\"line\":62,\"text\":\"$this->getDescriptionEditor()->setTitle($title);\"},{\"line\":133,\"text\":\"$this->resource->addCascadedSave($currentVersion);\"},{\"line\":148,\"text\":\"$this->resource->addCascadedSave($currentVersion);\"},{\"line\":217,\"text\":\"$resource->preSave();\"},{\"line\":252,\"text\":\"protected function _save()\"},{\"line\":256,\"text\":\"$resource->save(true, false);\"},{\"line\":260,\"text\":\"$this->descriptionEditor->save();\"},{\"line\":265,\"text\":\"$this->tagChanger->save($this->performValidations);\"},{\"line\":268,\"text\":\"if ($resource->isVisible() && $this->alert && $resource->user_id != \\\\XF::visitor()->user_id)\"}],\"present\":true,\"sha256\":\"b837cb9e5883ad74cc46c417bf5f5490506aecc26a3e458c035078e44964931d\"},\"resource_field_admin\":{\"bytes\":1905,\"hits\":[{\"line\":32,\"text\":\"return 'xfrm_resource_field';\"},{\"line\":59,\"text\":\"protected function saveAdditionalData(FormAction $form, \\\\XF\\\\Entity\\\\AbstractField $field)\"},{\"line\":62,\"text\":\"'viewable_resource' => 'bool',\"},{\"line\":65,\"text\":\"$form->basicEntitySave($field, $input);\"}],\"present\":true,\"sha256\":\"70af86b0164a4d9089bf740857557a5d1d26063b7b7496ae78cd7c7e2e64f9c3\"},\"resource_field_entity\":{\"bytes\":2019,\"hits\":[{\"line\":12,\"text\":\"* COLUMNS\"},{\"line\":13,\"text\":\"* @property string $field_id\"},{\"line\":14,\"text\":\"* @property int $display_order\"},{\"line\":15,\"text\":\"* @property string $field_type\"},{\"line\":16,\"text\":\"* @property array|null $field_choices\"},{\"line\":17,\"text\":\"* @property string $match_type\"},{\"line\":18,\"text\":\"* @property array|null $match_params\"},{\"line\":19,\"text\":\"* @property int $max_length\"},{\"line\":20,\"text\":\"* @property bool $required\"},{\"line\":22,\"text\":\"* @property string $display_group\"},{\"line\":24,\"text\":\"* @property bool $viewable_resource\"},{\"line\":44,\"text\":\"return 'xfrm_resource_field';\"},{\"line\":53,\"text\":\"$this->db()->delete('xf_rm_resource_field_value', 'field_id = ?', $this->field_id);\"},{\"line\":58,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":62,\"text\":\"'xf_rm_resource_field',\"},{\"line\":73,\"text\":\"$structure->columns += [\"},{\"line\":74,\"text\":\"'viewable_resource' => ['type' => self::BOOL, 'default' => true],\"},{\"line\":80,\"text\":\"'conditions' => 'field_id',\"}],\"present\":true,\"sha256\":\"c4cb2a33b80db12e54a010609140e1c9735b9055812b0d70d64827fe16c34246\"},\"resource_item_controller\":{\"bytes\":49966,\"hits\":[{\"line\":6,\"text\":\"use XF\\\\ControllerPlugin\\\\DraftPlugin;\"},{\"line\":72,\"text\":\"$viewableCategoryIds = $categoryParams['categories']->keys();\"},{\"line\":74,\"text\":\"$listParams = $overviewPlugin->getCoreListData($viewableCategoryIds);\"},{\"line\":103,\"text\":\"$viewableCategoryIds = $this->getCategoryRepo()->getViewableCategoryIds();\"},{\"line\":106,\"text\":\"$finder = $ratingRepo->findLatestReviews($viewableCategoryIds);\"},{\"line\":116,\"text\":\"$reviews = $reviews->filterViewable();\"},{\"line\":140,\"text\":\"$categories = $categoryRepo->getViewableCategories();\"},{\"line\":186,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":230,\"text\":\"$authorOthers = $authorOthers->filterViewable();\"},{\"line\":301,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":316,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":339,\"text\":\"return $this->view('XFRM:ResourceItem\\\\Field', 'xfrm_resource_field', $viewParams);\"},{\"line\":346,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":391,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":510,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":587,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":597,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());\"},{\"line\":638,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":716,\"text\":\"$resource = $this->assertViewableResource($params->resource_id, $extraWith);\"},{\"line\":764,\"text\":\"$rating = $rater->save();\"},{\"line\":851,\"text\":\"$updateCreator->setTitle($this->filter('update_title', 'str'));\"},{\"line\":868,\"text\":\"$updater->getResource()->draft_update->delete();\"},{\"line\":873,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":893,\"text\":\"$teamManager->save();\"},{\"line\":913,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":947,\"text\":\"$teamManager->save();\"},{\"line\":971,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":989,\"text\":\"$updater->save();\"},{\"line\":1006,\"text\":\"$draft = $resource->draft_update;\"},{\"line\":1010,\"text\":\"$updateAttachData = $attachmentRepo->getEditorData('resource_update', $resource, $draft->attachment_hash);\"},{\"line\":1029,\"text\":\"public function actionPostUpdateDraft(ParameterBag $params)\"},{\"line\":1031,\"text\":\"$this->assertDraftsEnabled();\"},{\"line\":1033,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1044,\"text\":\"/** @var DraftPlugin $draftPlugin */\"},{\"line\":1045,\"text\":\"$draftPlugin = $this->plugin('XF:Draft');\"},{\"line\":1046,\"text\":\"return $draftPlugin->actionDraftMessage($resource->draft_update, $extraData, 'update_message');\"},{\"line\":1051,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1062,\"text\":\"$updateCreator->setTitle($this->filter('update_title', 'str'));\"},{\"line\":1108,\"text\":\"$editor->setTitle($this->filter('title', 'str'));\"},{\"line\":1162,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1180,\"text\":\"$editor->save();\"},{\"line\":1229,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1267,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1352,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1367,\"text\":\"$typeChanger->save();\"},{\"line\":1429,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1455,\"text\":\"$categories = $categoryRepo->getViewableCategories();\"},{\"line\":1469,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1486,\"text\":\"$tagger->save();\"},{\"line\":1494,\"text\":\"$reply->setJsonParam('message', \\\\XF::phrase('your_changes_have_been_saved'));\"},{\"line\":1518,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1562,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1600,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1640,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1653,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1700,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1709,\"text\":\"'resource_state'\"},{\"line\":1715,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1732,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1747,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1774,\"text\":\"$resource = $this->assertViewableResource($params->resource_id);\"},{\"line\":1828,\"text\":\"protected function assertViewableResource($resourceId, array $extraWith = [])\"},{\"line\":1861,\"text\":\"$this->setContentKey('resource-' . $resource->resource_id);\"},{\"line\":1899,\"text\":\"foreach ($resources->filterViewable() AS $id => $resource)\"}],\"present\":true,\"sha256\":\"78aaaaaf3ad95aedde7b4a1e4d8ec026b9a305dd4a2a23172d28a756244b9f67\"},\"resource_item_entity\":{\"bytes\":55733,\"hits\":[{\"line\":8,\"text\":\"use XF\\\\Draft;\"},{\"line\":24,\"text\":\"use XF\\\\Entity\\\\ViewableInterface;\"},{\"line\":40,\"text\":\"* COLUMNS\"},{\"line\":49,\"text\":\"* @property string $resource_state\"},{\"line\":88,\"text\":\"* @property-read Draft $draft_update\"},{\"line\":102,\"text\":\"* @property-read AbstractCollection<\\\\XF\\\\Entity\\\\Draft> $DraftUpdates\"},{\"line\":106,\"text\":\"class ResourceItem extends Entity implements ContainableInterface, DatableInterface, LinkableInterface, ViewableInterface\"},{\"line\":132,\"text\":\"public function getStructuredData(): array\"},{\"line\":156,\"text\":\"'discussionUrl' => $this->hasViewableDiscussion()\"},{\"line\":265,\"text\":\"if ($this->resource_state == 'moderated')\"},{\"line\":268,\"text\":\"!$this->hasPermission('viewModerated')\"},{\"line\":276,\"text\":\"else if ($this->resource_state == 'deleted')\"},{\"line\":278,\"text\":\"if (!$this->hasPermission('viewDeleted'))\"},{\"line\":288,\"text\":\"public function canViewDeletedContent()\"},{\"line\":290,\"text\":\"return $this->hasPermission('viewDeleted');\"},{\"line\":293,\"text\":\"public function canViewModeratedContent()\"},{\"line\":296,\"text\":\"if ($this->hasPermission('viewModerated'))\"},{\"line\":336,\"text\":\"public function canRate($checkDownloadIfRequired = true, &$error = null)\"},{\"line\":338,\"text\":\"if (!$this->isVisible())\"},{\"line\":355,\"text\":\"if ($checkDownloadIfRequired && $this->isDownloadable() && $this->app()->options()->xfrmRequireDownloadToRate)\"},{\"line\":368,\"text\":\"public function canRatePreReg($checkDownloadIfRequired = true)\"},{\"line\":378,\"text\":\"function () use ($checkDownloadIfRequired) { return $this->canRate($checkDownloadIfRequired); }\"},{\"line\":564,\"text\":\"|| !$this->isVisible()\"},{\"line\":635,\"text\":\"return $this->isVisible();\"},{\"line\":684,\"text\":\"&& $this->resource_state == 'visible'\"},{\"line\":737,\"text\":\"public function isVisible()\"},{\"line\":739,\"text\":\"return ($this->resource_state == 'visible');\"},{\"line\":859,\"text\":\"public function hasViewableDiscussion()\"},{\"line\":923,\"text\":\"$state = $currentValues ? $this->getValue('resource_state') : $this->getExistingValue('resource_state');\"},{\"line\":933,\"text\":\"if ($state != 'visible' && $options->xfrmResourceDeleteThreadAction['update_title'])\"},{\"line\":964,\"text\":\"}, 'save');\"},{\"line\":984,\"text\":\"}, 'save');\"},{\"line\":993,\"text\":\"* @return Draft\"},{\"line\":995,\"text\":\"public function getDraftUpdate()\"},{\"line\":997,\"text\":\"return Draft::createFromEntity($this, 'DraftUpdates');\"},{\"line\":1055,\"text\":\"if (!$this->canViewDeletedContent() && !$this->canViewModeratedContent())\"},{\"line\":1072,\"text\":\"if (!$this->canViewDeletedContent())\"},{\"line\":1139,\"text\":\"AND message_state = 'visible'\"},{\"line\":1160,\"text\":\"AND message_state = 'visible'\"},{\"line\":1173,\"text\":\"AND rating_state = 'visible'\"},{\"line\":1187,\"text\":\"AND rating_state = 'visible'\"},{\"line\":1218,\"text\":\"AND version_state = 'visible'\"},{\"line\":1275,\"text\":\"protected function _preSave()\"},{\"line\":1310,\"text\":\"protected function _postSave()\"},{\"line\":1312,\"text\":\"$visibilityChange = $this->isStateChanged('resource_state', 'visible');\"},{\"line\":1313,\"text\":\"$approvalChange = $this->isStateChanged('resource_state', 'moderated');\"},{\"line\":1314,\"text\":\"$deletionChange = $this->isStateChanged('resource_state', 'deleted');\"},{\"line\":1320,\"text\":\"$this->resourceMadeVisible();\"},{\"line\":1354,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1356,\"text\":\"$this->resourceInsertedVisible();\"},{\"line\":1377,\"text\":\"$oldDiscussion->save(false, false);\"},{\"line\":1388,\"text\":\"$this->Discussion->save(false, false);\"},{\"line\":1401,\"text\":\"$this->Discussion->saveIfChanged($saved, false, false);\"},{\"line\":1410,\"text\":\"$approvalQueue->save();\"},{\"line\":1416,\"text\":\"$delLog->save();\"},{\"line\":1426,\"text\":\"$this->_postSaveBookmarks();\"},{\"line\":1429,\"text\":\"protected function resourceMadeVisible()\"},{\"line\":1440,\"text\":\"$thread->discussion_state = 'visible';\"},{\"line\":1449,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1468,\"text\":\"$thread->discussion_state = 'deleted';\"},{\"line\":1477,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1494,\"text\":\"protected function resourceInsertedVisible()\"},{\"line\":1512,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1581,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1584,\"text\":\"$category->save();\"},{\"line\":1587,\"text\":\"if ($this->getExistingValue('resource_state') == 'visible')\"},{\"line\":1594,\"text\":\"$oldCategory->save();\"},{\"line\":1605,\"text\":\"if ($this->resource_state == 'visible' && $thread->discussion_state == 'deleted')\"},{\"line\":1607,\"text\":\"// presumably the thread was soft deleted by being moved to a category without a thread\"},{\"line\":1608,\"text\":\"$thread->discussion_state = 'visible';\"},{\"line\":1614,\"text\":\"$thread->discussion_state = 'deleted';\"},{\"line\":1617,\"text\":\"$thread->saveIfChanged($saved, false, false);\"},{\"line\":1623,\"text\":\"// check for entering/leaving visible\"},{\"line\":1624,\"text\":\"$visibilityChange = $this->isStateChanged('resource_state', 'visible');\"},{\"line\":1628,\"text\":\"$category->save();\"},{\"line\":1633,\"text\":\"$category->save();\"},{\"line\":1635,\"text\":\"else if ($this->isUpdate() && $this->resource_state == 'visible')\"},{\"line\":1638,\"text\":\"$category->save();\"},{\"line\":1644,\"text\":\"if ($this->resource_state == 'visible')\"},{\"line\":1649,\"text\":\"if ($this->Category && $this->resource_state == 'visible')\"},{\"line\":1652,\"text\":\"$this->Category->save();\"},{\"line\":1655,\"text\":\"if ($this->resource_state == 'deleted' && $this->DeletionLog)\"},{\"line\":1660,\"text\":\"if ($this->resource_state == 'moderated' && $this->ApprovalQueue)\"},{\"line\":1744,\"text\":\"if ($this->resource_state == 'deleted')\"},{\"line\":1749,\"text\":\"$this->resource_state = 'deleted';\"},{\"line\":1756,\"text\":\"$this->save();\"},{\"line\":1820,\"text\":\"'discussionUrl' => $this->hasViewableDiscussion()\"},{\"line\":2009,\"text\":\"public static function getStructure(Structure $structure)\"},{\"line\":2015,\"text\":\"$structure->columns = [\"},{\"line\":2018,\"text\":\"'required' => 'please_enter_valid_title',\"},{\"line\":2023,\"text\":\"'required' => 'xfrm_please_enter_valid_tag_line',\"},{\"line\":2027,\"text\":\"'user_id' => ['type' => self::UINT, 'required' => true, 'api' => true],\"},{\"line\":2029,\"text\":\"'required' => 'please_enter_valid_name',\"},{\"line\":2034,\"text\":\"'resource_state' => ['type' => self::STR, 'default' => 'visible',\"},{\"line\":2035,\"text\":\"'allowedValues' => ['visible', 'moderated', 'deleted'], 'api' => true,\"},{\"line\":2037,\"text\":\"'resource_type' => ['type' => self::STR, 'required' => true,\"},{\"line\":2041,\"text\":\"'resource_category_id' => ['type' => self::UINT, 'required' => true, 'api' => true],\"},{\"line\":2084,\"text\":\"'draft_update' => true,\"},{\"line\":2088,\"text\":\"'XF:Taggable' => ['stateField' => 'resource_state'],\"},{\"line\":2090,\"text\":\"'checkForUpdates' => ['title', 'resource_category_id', 'user_id', 'prefix_id', 'tags', 'resource_state'],\"},{\"line\":2096,\"text\":\"'checkForUpdates' => ['resource_category_id', 'resource_state', 'prefix_id'],\"},{\"line\":2103,\"text\":\"'stateField' => 'resource_state',\"},{\"line\":2106,\"text\":\"'valueTable' => 'xf_rm_resource_field_value',\"},{\"line\":2113,\"text\":\"'stateField' => 'resource_state',\"},{\"line\":2189,\"text\":\"'DraftUpdates' => [\"},{\"line\":2190,\"text\":\"'entity' => 'XF:Draft',\"},{\"line\":2193,\"text\":\"['draft_key', '=', 'xfrm-resource-', '$resource_id'],\"}],\"present\":true,\"sha256\":\"703773471dd35c876a0fed578a60dfc51e1dafc9520ad1493282b50fd9e05262\"}},\"xfrm_tables\":{\"xf_draft\":true,\"xf_rm_category\":true,\"xf_rm_category_field\":true,\"xf_rm_category_prefix\":true,\"xf_rm_resource\":true,\"xf_rm_resource_field\":true,\"xf_rm_resource_field_value\":true,\"xf_rm_resource_prefix\":true,\"xf_tag\":true,\"xf_tag_content\":true}}\nNEWFI95_DECISION=PASS_KB204_XFRM_CONTRACT_AUDIT_CAPTURED\nNEWFI95_NEXT_GATE=BUILD_KB204_TAXONOMY_EDITORIAL_CHANGE_FROM_EXACT_XFRM_CONTRACT\n" + "output": "NEWFI96_BEGIN\nCOMMAND_ID=NEWFI-260918-NEWFDOM-KB204-APPLY96\nNEWFI96_GIT_PRESTATE={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\",\"remote\":\"origin\",\"remote_head\":\"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0\"}\nNEWFI96_PRESTATE={\"production\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0,\"tag_content\":0,\"tags\":0},\"staging\":{\"categories\":1,\"category_fields\":0,\"drafts\":0,\"resource_fields\":0,\"resources\":0,\"tag_content\":0,\"tags\":0},\"tagging\":\"0\"}\nNEWFI96_BACKUPS_2OF2=PASS\nNEWFI96_STAGING_APPLY1=PASS\nNEWFI96_STAGING_PLANNED_ROLLBACK=PASS\nNEWFI96_STAGING_REAPPLY=PASS\nNEWFI96_PRODUCTION_APPLY=PASS\nNEWFI96_SAFE_REPORT={\"changes_made\":true,\"command_id\":\"NEWFI-260918-NEWFDOM-KB204-APPLY96\",\"decision\":\"FAIL_KB204_APPLY96_HOLD\",\"error\":\"RuntimeError:PUBLIC_TAXONOMY_TITLES:{\\\"Вода и безопасность\\\":0,\\\"Воспитание и поведение\\\":0,\\\"Выставки и хендлинг\\\":0,\\\"Документы и правила\\\":0,\\\"Здоровье и ветеринария\\\":0,\\\"О породе и стандарте\\\":0,\\\"Питание\\\":0,\\\"Разведение и генетика\\\":0,\\\"Уход и груминг\\\":0,\\\"Щенок и взросление\\\":0}\",\"push_outcome_uncertain\":false,\"rollback_restored\":true,\"rollback_started\":true}\nNEWFI96_DECISION=FAIL_KB204_APPLY96_HOLD\nNEWFI96_NEXT_GATE=READ_EXACT_FAILURE_BEFORE_ANY_RETRY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":true,\"command_id\":\"NEWFI-260918-NEWFDOM-KB204-APPLY96\",\"rollback_restored\":true,\"rollback_started\":true,\"status\":\"FAIL\",\"version\":1}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 1722be02..a53ba7f9 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,41 +1,45 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260918-NEWFDOM-KB204-AUDIT95 -STATUS=OK -RC=0 +COMMAND_ID=NEWFI-260918-NEWFDOM-KB204-APPLY96 +STATUS=FAIL +RC=3 HOST=pve01 -MODE=read-only -COMPONENT=newfi-newfdom-kb204-xfrm-taxonomy-editorial-contract-audit-readonly +MODE=change +COMPONENT=newfi-newfdom-kb204-taxonomy-editorial-workflow-staging-rollback-production-git-last REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=8785f2a354ef4d5cab3d5dc4f901a21a579b611ce80b845a568c501bb02168e3 +COMMAND_SHA256=64266fdf780ce82c3b36a6771d5cd64af8da2bef67991661c50c440750d1813b DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=false +CHANGE_DECLARED=true RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_STATUS=FAIL RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=0 -CHANGES_MADE=false -ROLLBACK_STARTED=false -ROLLBACK_RESTORED=null -MUTATION_OUTCOME=NO_MUTATION +COMMAND_RC=3 +CHANGES_MADE=true +ROLLBACK_STARTED=true +ROLLBACK_RESTORED=true +MUTATION_OUTCOME=ROLLED_BACK SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=6789d0a730d8fcb56a708b3df769f18f8db8820c30f35edade22f93f61f863d9 -SANITIZED_OUTPUT_SHA256=6789d0a730d8fcb56a708b3df769f18f8db8820c30f35edade22f93f61f863d9 +RAW_EVIDENCE_SHA256=4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025 +SANITIZED_OUTPUT_SHA256=4af8f471866287ee37dd547c5b44d174b53b75e190fba1de111d0c36f7116025 OUTPUT_BEGIN -NEWFI95_BEGIN -COMMAND_ID=NEWFI-260918-NEWFDOM-KB204-AUDIT95 -NEWFI95_GIT={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0","remote":"origin","remote_head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0"} -NEWFI95_STAGING={"addons":[{"active":1,"addon_id":"XF","title":"XenForo","version_id":2031270,"version_string":"2.3.12"},{"active":1,"addon_id":"XFRM","title":"XenForo Resource Manager","version_id":2031170,"version_string":"2.3.11"}],"boardActive":"0","counts":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0},"errors":{"count":21,"ids":[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"new":[{"error_id":49,"exception_type":"XF\\Db\\Exception","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"MySQL statement prepare error [1054]: Unknown column 'sub_name_format' in 'SELECT'"},{"error_id":50,"exception_type":"XF\\Db\\Exception","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT'"},{"error_id":51,"exception_type":"ErrorException","filename":"Command line code","line":32,"message":"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:32 Stack trace: #0 Command line code(32): XF::handlePhpError(2, '...', '...', 32) #1 {main} thrown"},{"error_id":52,"exception_type":"ErrorException","filename":"Command line code","line":16,"message":"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:16 Stack trace: #0 Command line code(16): XF::handlePhpError(2, '...', '...', 16) #1 {main} thrown"},{"error_id":53,"exception_type":"ErrorException","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"Fatal Error: Uncaught XF\\Db\\Exception: MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT' in /var/www/forums/newfi/public/src/XF/Db/AbstractStatement.php:225 Stack trace: #0 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(207): XF\\Db\\AbstractStatement->getException('...', 1054, '...') #1 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(43): XF\\Db\\Mysqli\\Statement->getException('...', 1054, '...') #2 /var/www/forums/newfi/public/src/XF/Db/Mys"}],"old_fp":"e739c2c309539a508e20eba89b0ebc688640ef6ff9f919bbb419b2faad819f80"},"hostname":"newfi-staging","indexRoute":"portal/","options":[{"option_id":"enableTagging","option_value":"0"},{"option_id":"xfrmAllowAnonReview","option_value":"0"},{"option_id":"xfrmAllowIcons","option_value":"1"},{"option_id":"xfrmAuthorOtherResourcesCount","option_value":"5"},{"option_id":"xfrmEnableTeams","option_value":"0"},{"option_id":"xfrmFilelessViewFull","option_value":"{\"limit\":\"1\",\"length\":\"250\"}"},{"option_id":"xfrmListDefaultOrder","option_value":"last_update"},{"option_id":"xfrmMinimumReviewLength","option_value":"0"},{"option_id":"xfrmPaidResourceThreadTitleTemplate","option_value":"{title} [Paid]"},{"option_id":"xfrmRecentReviewsCount","option_value":"10"},{"option_id":"xfrmRecentUpdatesCount","option_value":"3"},{"option_id":"xfrmRequireDownloadToRate","option_value":"1"},{"option_id":"xfrmResourceCurrencies","option_value":"usd\ncad\naud\ngbp\neur"},{"option_id":"xfrmResourceDeleteThreadAction","option_value":"{\"action\":\"close\",\"update_title\":\"1\",\"title_template\":\"{title} [Deleted]\",\"add_post\":\"1\"}"},{"option_id":"xfrmResourceExtensions","option_value":"zip\ntxt\npdf\npng\njpg\njpeg\njpe\ngif\npsd\ntif\nwebp"},{"option_id":"xfrmResourceMaxFileSize","option_value":"2048"},{"option_id":"xfrmResourceMaxFiles","option_value":"5"},{"option_id":"xfrmResourcesPerPage","option_value":"20"},{"option_id":"xfrmReviewRequired","option_value":"1"},{"option_id":"xfrmReviewVoting","option_value":"yes"},{"option_id":"xfrmReviewsPerPage","option_value":"20"},{"option_id":"xfrmUpdateMaxLength","option_value":"50000"},{"option_id":"xfrmUpdatesPerPage","option_value":"10"}],"rows":{"xf_rm_category":[{"allow_commercial_external":1,"allow_external":1,"allow_fileless":1,"allow_local":1,"always_moderate_create":0,"always_moderate_update":0,"auto_feature":0,"breadcrumb_data":"[]","depth":0,"description":"","display_order":10,"enable_support_url":1,"enable_versioning":1,"featured_count":0,"field_cache":"","last_resource_id":0,"last_resource_title":"","last_update":0,"lft":1,"min_tags":0,"parent_category_id":0,"prefix_cache":"","require_prefix":0,"resource_category_id":1,"resource_count":0,"review_field_cache":"","rgt":2,"thread_node_id":0,"thread_prefix_id":0,"title":"База знаний"}],"xf_rm_category_field":[],"xf_rm_category_prefix":[],"xf_rm_resource_field":[],"xf_rm_resource_prefix":[]},"schemas":{"xf_draft":[{"Default":null,"Extra":"auto_increment","Field":"draft_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"draft_key","Key":"MUL","Null":"NO","Type":"varbinary(75)"},{"Default":null,"Extra":"","Field":"user_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"last_update","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"message","Key":"","Null":"NO","Type":"mediumtext"},{"Default":null,"Extra":"","Field":"extra_data","Key":"","Null":"NO","Type":"mediumblob"}],"xf_rm_category":[{"Default":null,"Extra":"auto_increment","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"description","Key":"","Null":"NO","Type":"text"},{"Default":"0","Extra":"","Field":"parent_category_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"lft","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rgt","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"depth","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":null,"Extra":"","Field":"breadcrumb_data","Key":"","Null":"NO","Type":"blob"},{"Default":"0","Extra":"","Field":"resource_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"featured_count","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":"0","Extra":"","Field":"last_update","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"last_resource_title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":"0","Extra":"","Field":"last_resource_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"field_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":null,"Extra":"","Field":"review_field_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":null,"Extra":"","Field":"prefix_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"require_prefix","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"thread_node_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"thread_prefix_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"allow_local","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_external","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_commercial_external","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_fileless","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"always_moderate_create","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"always_moderate_update","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"min_tags","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":"1","Extra":"","Field":"enable_versioning","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"1","Extra":"","Field":"enable_support_url","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"auto_feature","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_category_field":[{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"}],"xf_rm_category_prefix":[{"Default":null,"Extra":"","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"prefix_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"}],"xf_rm_resource":[{"Default":null,"Extra":"auto_increment","Field":"resource_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":"","Extra":"","Field":"tag_line","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"user_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"username","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"team_member_user_ids","Key":"","Null":"NO","Type":"blob"},{"Default":"visible","Extra":"","Field":"resource_state","Key":"","Null":"NO","Type":"enum('visible','moderated','deleted')"},{"Default":null,"Extra":"","Field":"resource_type","Key":"","Null":"NO","Type":"varchar(25)"},{"Default":null,"Extra":"","Field":"resource_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"resource_category_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"current_version_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"description_update_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"discussion_thread_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"external_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":"","Extra":"","Field":"external_purchase_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":"0.00","Extra":"","Field":"price","Key":"","Null":"NO","Type":"decimal(10,2) unsigned"},{"Default":"","Extra":"","Field":"currency","Key":"","Null":"NO","Type":"varchar(3)"},{"Default":"0","Extra":"","Field":"view_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"download_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_sum","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_avg","Key":"","Null":"NO","Type":"float unsigned"},{"Default":"0","Extra":"","Field":"rating_weighted","Key":"MUL","Null":"NO","Type":"float unsigned"},{"Default":null,"Extra":"","Field":"rating_split","Key":"","Null":"YES","Type":"blob"},{"Default":"0","Extra":"","Field":"update_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"review_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"last_update","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"alt_support_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":null,"Extra":"","Field":"custom_fields","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"prefix_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"icon_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"icon_optimized","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"tags","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"featured","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_resource_field":[{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":"above_info","Extra":"","Field":"display_group","Key":"MUL","Null":"NO","Type":"varchar(25)"},{"Default":"1","Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"textbox","Extra":"","Field":"field_type","Key":"","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"field_choices","Key":"","Null":"NO","Type":"blob"},{"Default":"none","Extra":"","Field":"match_type","Key":"","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"match_params","Key":"","Null":"NO","Type":"blob"},{"Default":"0","Extra":"","Field":"max_length","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"required","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"display_template","Key":"","Null":"NO","Type":"text"},{"Default":null,"Extra":"","Field":"wrapper_template","Key":"","Null":"NO","Type":"text"},{"Default":"1","Extra":"","Field":"viewable_resource","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_resource_field_value":[{"Default":null,"Extra":"","Field":"resource_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"field_value","Key":"","Null":"NO","Type":"mediumtext"}],"xf_rm_resource_prefix":[{"Default":null,"Extra":"auto_increment","Field":"prefix_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"prefix_group_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"materialized_order","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"css_class","Key":"","Null":"NO","Type":"varchar(50)"},{"Default":null,"Extra":"","Field":"allowed_user_group_ids","Key":"","Null":"NO","Type":"blob"}],"xf_tag":[{"Default":null,"Extra":"auto_increment","Field":"tag_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"tag","Key":"UNI","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"tag_url","Key":"UNI","Null":"NO","Type":"varchar(100)"},{"Default":"0","Extra":"","Field":"use_count","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"last_use_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"permanent","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_tag_content":[{"Default":null,"Extra":"auto_increment","Field":"tag_content_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"content_type","Key":"MUL","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"content_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"tag_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"add_user_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"add_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"visible","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"content_date","Key":"","Null":"NO","Type":"int(10) unsigned"}]},"source":{"abstract_field_entity":{"bytes":13332,"hits":[{"line":14,"text":"* COLUMNS"},{"line":15,"text":"* @property string $field_id"},{"line":16,"text":"* @property int $display_order"},{"line":17,"text":"* @property string $field_type"},{"line":18,"text":"* @property array $field_choices"},{"line":19,"text":"* @property string $match_type"},{"line":20,"text":"* @property array $match_params"},{"line":21,"text":"* @property int $max_length"},{"line":22,"text":"* @property bool $required"},{"line":24,"text":"* @property string $display_group"},{"line":25,"text":"* @property string $user_editable"},{"line":49,"text":"return static::getPhrasePrefix() . '_' . ($title ? 'title' : 'desc') . '.' . $this->field_id;"},{"line":91,"text":"if (isset($types[$this->field_type]))"},{"line":93,"text":"$type = $types[$this->field_type]['type'];"},{"line":104,"text":"if (!isset($this->field_choices[$choice]))"},{"line":126,"text":"return static::getPhrasePrefix() . '_' . 'choice' . '.' . $this->field_id . '_' . $choice;"},{"line":156,"text":"$this->error(\\XF::phrase('please_enter_text_for_each_choice'), 'field_choices');"},{"line":162,"text":"$this->error(\\XF::phrase('please_enter_an_id_using_only_alphanumeric'), 'field_choices');"},{"line":289,"text":"protected function _preSave()"},{"line":291,"text":"if ($this->isUpdate() && $this->isChanged('field_id'))"},{"line":293,"text":"$this->error('The field ID cannot be changed once set.', 'field_id');"},{"line":296,"text":"if ($this->isChanged(['match_type', 'match_params']))"},{"line":298,"text":"$validateMatchTypeMethod = '_validateMatchType' . Php::camelCase($this->get('match_type'));"},{"line":301,"text":"$matchParams = $this->match_params;"},{"line":304,"text":"$this->match_params = $matchParams;"},{"line":308,"text":"$this->error($error, 'match_params');"},{"line":313,"text":"if ($this->isUpdate() && $this->isChanged('field_type'))"},{"line":316,"text":"if ($typeMap[$this->get('field_type')]['compatible'] != $typeMap[$this->getExistingValue('field_type')]['compatible'])"},{"line":318,"text":"$this->error(\\XF::phrase('you_may_not_change_field_to_different_type_after_it_has_been_created'), 'field_type');"},{"line":324,"text":"if (($this->isInsert() && !$this->field_choices) || (is_array($this->field_choices) && !$this->field_choices))"},{"line":326,"text":"$this->error(\\XF::phrase('please_enter_at_least_one_choice'), 'field_choices', false);"},{"line":331,"text":"protected function _postSave()"},{"line":333,"text":"if ($this->isChanged('field_choices'))"},{"line":338,"text":"$newValues = $this->getValue('field_choices');"},{"line":339,"text":"$oldValues = $this->getExistingValue('field_choices');"},{"line":373,"text":"$phrase->save(true, false);"},{"line":390,"text":"$this->deleteChoicePhrases(array_keys($this->field_choices));"},{"line":411,"text":"\\XF::runOnce('rebuildFieldCache' . $this->field_id, function ()"},{"line":422,"text":"* @api-out str $field_id"},{"line":425,"text":"* @api-out int $display_order"},{"line":426,"text":"* @api-out str $field_type"},{"line":427,"text":"* @api-out object $field_choices For choice types, an ordered list of choices, with \"option\" and \"name\" keys for each."},{"line":428,"text":"* @api-out str $match_type"},{"line":429,"text":"* @api-out array $match_params"},{"line":430,"text":"* @api-out int $max_length"},{"line":431,"text":"* @api-out bool $required"},{"line":432,"text":"* @api-out str $display_group If this field type supports grouping, the group this field belongs to."},{"line":446,"text":"foreach ($this->field_choices AS $option => $printable)"},{"line":453,"text":"$result->field_choices = $choices;"},{"line":456,"text":"$result->match_params = (object) $this->match_params;"},{"line":463,"text":"'has_user_editable' => false,"},{"line":464,"text":"'has_user_editable_once' => false,"},{"line":472,"text":"$structure->primaryKey = 'field_id';"},{"line":473,"text":"$structure->columns = ["},{"line":474,"text":"'field_id' => ['type' => self::STR, 'maxLength' => 25,"},{"line":475,"text":"'required' => 'please_enter_valid_field_id',"},{"line":476,"text":"'unique' => 'field_ids_must_be_unique',"},{"line":480,"text":"'display_order' => ['type' => self::UINT, 'default' => 1, 'api' => true],"},{"line":481,"text":"'field_type' => ['type' => self::STR, 'default' => 'textbox',"},{"line":485,"text":"'field_choices' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":486,"text":"'match_type' => ['type' => self::STR, 'default' => 'none',"},{"line":490,"text":"'match_params' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":491,"text":"'max_length' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":492,"text":"'required' => ['type' => self::BOOL, 'default' => false, 'api' => true],"},{"line":499,"text":"$structure->columns['display_group'] = ['type' => self::STR, 'default' => $firstOption,"},{"line":504,"text":"if ($options['has_user_editable'])"},{"line":506,"text":"$userEditAllowedValues = $options['has_user_editable_once'] ? ['yes', 'once', 'never'] : ['yes', 'never'];"},{"line":507,"text":"$structure->columns['user_editable'] = ['type' => self::STR, 'default' => 'yes',"},{"line":513,"text":"$structure->columns['moderator_editable'] = ['type' => self::BOOL, 'default' => true];"},{"line":517,"text":"$structure->columns['editable_user_group_ids'] = ["},{"line":529,"text":"$structure->columns['wrapper_template'] = ['type' => self::STR, 'default' => ''];"},{"line":544,"text":"['title', '=', $phrasePrefix . '_title.', '$field_id'],"},{"line":552,"text":"['title', '=', $phrasePrefix . '_desc.', '$field_id'],"}],"present":true,"sha256":"f5a7d03f0b656ecae7a225aafe363eb79a925054a3d2fefdcc0bdf4e6a41695f"},"category_admin":{"bytes":5702,"hits":[{"line":59,"text":"$availableFields = $availableFields->pluckNamed('title', 'field_id');"},{"line":87,"text":"protected function categorySaveProcess(\\XFRM\\Entity\\Category $category)"},{"line":93,"text":"'display_order' => 'uint',"},{"line":100,"text":"'always_moderate_create' => 'bool',"},{"line":101,"text":"'always_moderate_update' => 'bool',"},{"line":102,"text":"'min_tags' => 'uint',"},{"line":110,"text":"$form->basicEntitySave($category, $entityInput);"},{"line":117,"text":"$repo->updateContentAssociations($category->resource_category_id, $prefixIds);"},{"line":120,"text":"$fieldIds = $this->filter('available_fields', 'array-str');"},{"line":125,"text":"$repo->updateContentAssociations($category->resource_category_id, $fieldIds);"},{"line":131,"text":"public function actionSave(ParameterBag $params)"},{"line":144,"text":"$this->categorySaveProcess($category)->run();"},{"line":184,"text":"public function actionPermissionsSave(ParameterBag $params)"},{"line":186,"text":"return $this->getCategoryPermissionPlugin()->actionSave($params);"}],"present":true,"sha256":"4896715a8a0d00b8f4bf09dd0e28458f410ef8b27d1125711a5d1da3bc661ad6"},"category_entity":{"bytes":15749,"hits":[{"line":6,"text":"use XF\\Draft;"},{"line":12,"text":"use XF\\Entity\\ViewableInterface;"},{"line":18,"text":"* COLUMNS"},{"line":38,"text":"* @property bool $always_moderate_create"},{"line":39,"text":"* @property bool $always_moderate_update"},{"line":40,"text":"* @property int $min_tags"},{"line":45,"text":"* @property int $display_order"},{"line":53,"text":"* @property-read Draft $draft_resource"},{"line":58,"text":"* @property-read AbstractCollection<\\XF\\Entity\\Draft> $DraftResources"},{"line":61,"text":"class Category extends AbstractCategoryTree implements LinkableInterface, ViewableInterface"},{"line":63,"text":"protected $_viewableDescendants = [];"},{"line":70,"text":"public function canViewDeletedResources()"},{"line":72,"text":"return $this->hasPermission('viewDeleted');"},{"line":75,"text":"public function canViewModeratedResources()"},{"line":77,"text":"return $this->hasPermission('viewModerated');"},{"line":173,"text":"public function getViewableDescendants()"},{"line":176,"text":"if (!isset($this->_viewableDescendants[$userId]))"},{"line":178,"text":"$viewable = $this->repository('XFRM:Category')->getViewableCategories($this);"},{"line":179,"text":"$this->_viewableDescendants[$userId] = $viewable->toArray();"},{"line":182,"text":"return $this->_viewableDescendants[$userId];"},{"line":185,"text":"public function cacheViewableDescendents(array $descendents, $userId = null)"},{"line":192,"text":"$this->_viewableDescendants[$userId] = $descendents;"},{"line":196,"text":"* @return Draft"},{"line":198,"text":"public function getDraftResource()"},{"line":200,"text":"return Draft::createFromEntity($this, 'DraftResources');"},{"line":309,"text":"return 'visible';"},{"line":314,"text":"return 'moderated';"},{"line":319,"text":"return $this->always_moderate_update ? 'moderated' : 'visible';"},{"line":323,"text":"return $this->always_moderate_create ? 'moderated' : 'visible';"},{"line":405,"text":"AND resource_state = 'visible'"},{"line":417,"text":"AND resource.resource_state = 'visible'\","},{"line":430,"text":"AND resource_state = 'visible'"},{"line":448,"text":"protected function _preSave()"},{"line":547,"text":"public static function getStructure(Structure $structure)"},{"line":553,"text":"$structure->columns = ["},{"line":556,"text":"'required' => 'please_enter_valid_title', 'api' => true,"},{"line":576,"text":"'always_moderate_create' => ['type' => self::BOOL, 'default' => false],"},{"line":577,"text":"'always_moderate_update' => ['type' => self::BOOL, 'default' => false],"},{"line":578,"text":"'min_tags' => ['type' => self::UINT, 'forced' => true, 'default' => 0, 'max' => 100, 'api' => true],"},{"line":585,"text":"'draft_resource' => true,"},{"line":603,"text":"'DraftResources' => ["},{"line":604,"text":"'entity' => 'XF:Draft',"},{"line":607,"text":"['draft_key', '=', 'xfrm-category-', '$resource_category_id'],"}],"present":true,"sha256":"73763c6c3b7d56da646cf04b1f19106b33643daa9bbb6e775141e692b9cf36c2"},"category_field_repo":{"bytes":729,"hits":[{"line":30,"text":"$category->saveIfChanged();"}],"present":true,"sha256":"533bd6390f94189f752059bfa611e53e6ca4711c72a18c7b34322cecc9fe2228"},"relevant_files":["src/addons/XFRM/Entity/Category.php","src/addons/XFRM/Entity/CategoryField.php","src/addons/XFRM/Entity/CategoryPrefix.php","src/addons/XFRM/Entity/CategoryReviewField.php","src/addons/XFRM/Entity/CategoryWatch.php","src/addons/XFRM/Entity/ResourceDownload.php","src/addons/XFRM/Entity/ResourceField.php","src/addons/XFRM/Entity/ResourceFieldValue.php","src/addons/XFRM/Entity/ResourceItem.php","src/addons/XFRM/Entity/ResourcePrefix.php","src/addons/XFRM/Entity/ResourcePrefixGroup.php","src/addons/XFRM/Entity/ResourceRating.php","src/addons/XFRM/Entity/ResourceReviewField.php","src/addons/XFRM/Entity/ResourceReviewFieldValue.php","src/addons/XFRM/Entity/ResourceTeamMember.php","src/addons/XFRM/Entity/ResourceUpdate.php","src/addons/XFRM/Entity/ResourceVersion.php","src/addons/XFRM/Entity/ResourceWatch.php","src/addons/XFRM/Repository/Category.php","src/addons/XFRM/Repository/CategoryField.php","src/addons/XFRM/Repository/CategoryPrefix.php","src/addons/XFRM/Repository/CategoryReviewField.php","src/addons/XFRM/Repository/CategoryWatch.php","src/addons/XFRM/Repository/ResourceField.php","src/addons/XFRM/Repository/ResourceItem.php","src/addons/XFRM/Repository/ResourcePrefix.php","src/addons/XFRM/Repository/ResourceRating.php","src/addons/XFRM/Repository/ResourceReviewField.php","src/addons/XFRM/Repository/ResourceUpdate.php","src/addons/XFRM/Repository/ResourceVersion.php","src/addons/XFRM/Repository/ResourceWatch.php"],"resource_create_service":{"bytes":9106,"hits":[{"line":85,"text":"$this->resource->addCascadedSave($this->description);"},{"line":88,"text":"$this->resource->addCascadedSave($this->version);"},{"line":97,"text":"$this->resource->resource_state = $this->category->getNewContentState();"},{"line":98,"text":"$this->description->message_state = 'visible';"},{"line":137,"text":"public function setTitle($title)"},{"line":143,"text":"public function setContent($title, $description, $format = true)"},{"line":145,"text":"$this->setTitle($title);"},{"line":168,"text":"public function setDescriptionAttachmentHash($hash)"},{"line":227,"text":"if ($this->resource->resource_state == 'visible' && \\XF::visitor()->isSpamCheckRequired())"},{"line":257,"text":"$resource->preSave();"},{"line":292,"text":"protected function _save()"},{"line":302,"text":"$resource->save(true, false);"},{"line":303,"text":"// update and version will also be saved now"},{"line":316,"text":"->setContentId($resource->resource_id, true)"},{"line":317,"text":"->save($this->performValidations);"},{"line":325,"text":"$thread = $creator->save();"},{"line":344,"text":"$creator->setContent($this->resource->getExpectedThreadTitle(), $this->getThreadMessage(), false);"},{"line":350,"text":"$thread->discussion_state = $this->resource->resource_state;"},{"line":385,"text":"if ($this->resource->isVisible())"}],"present":true,"sha256":"2c72b9811646927b8abc0ffaee0b2d0358576b4b5cfc359da6fc5c7c13d9e66c"},"resource_edit_service":{"bytes":5900,"hits":[{"line":59,"text":"public function setTitle($title)"},{"line":62,"text":"$this->getDescriptionEditor()->setTitle($title);"},{"line":133,"text":"$this->resource->addCascadedSave($currentVersion);"},{"line":148,"text":"$this->resource->addCascadedSave($currentVersion);"},{"line":217,"text":"$resource->preSave();"},{"line":252,"text":"protected function _save()"},{"line":256,"text":"$resource->save(true, false);"},{"line":260,"text":"$this->descriptionEditor->save();"},{"line":265,"text":"$this->tagChanger->save($this->performValidations);"},{"line":268,"text":"if ($resource->isVisible() && $this->alert && $resource->user_id != \\XF::visitor()->user_id)"}],"present":true,"sha256":"b837cb9e5883ad74cc46c417bf5f5490506aecc26a3e458c035078e44964931d"},"resource_field_admin":{"bytes":1905,"hits":[{"line":32,"text":"return 'xfrm_resource_field';"},{"line":59,"text":"protected function saveAdditionalData(FormAction $form, \\XF\\Entity\\AbstractField $field)"},{"line":62,"text":"'viewable_resource' => 'bool',"},{"line":65,"text":"$form->basicEntitySave($field, $input);"}],"present":true,"sha256":"70af86b0164a4d9089bf740857557a5d1d26063b7b7496ae78cd7c7e2e64f9c3"},"resource_field_entity":{"bytes":2019,"hits":[{"line":12,"text":"* COLUMNS"},{"line":13,"text":"* @property string $field_id"},{"line":14,"text":"* @property int $display_order"},{"line":15,"text":"* @property string $field_type"},{"line":16,"text":"* @property array|null $field_choices"},{"line":17,"text":"* @property string $match_type"},{"line":18,"text":"* @property array|null $match_params"},{"line":19,"text":"* @property int $max_length"},{"line":20,"text":"* @property bool $required"},{"line":22,"text":"* @property string $display_group"},{"line":24,"text":"* @property bool $viewable_resource"},{"line":44,"text":"return 'xfrm_resource_field';"},{"line":53,"text":"$this->db()->delete('xf_rm_resource_field_value', 'field_id = ?', $this->field_id);"},{"line":58,"text":"public static function getStructure(Structure $structure)"},{"line":62,"text":"'xf_rm_resource_field',"},{"line":73,"text":"$structure->columns += ["},{"line":74,"text":"'viewable_resource' => ['type' => self::BOOL, 'default' => true],"},{"line":80,"text":"'conditions' => 'field_id',"}],"present":true,"sha256":"c4cb2a33b80db12e54a010609140e1c9735b9055812b0d70d64827fe16c34246"},"resource_item_controller":{"bytes":49966,"hits":[{"line":6,"text":"use XF\\ControllerPlugin\\DraftPlugin;"},{"line":72,"text":"$viewableCategoryIds = $categoryParams['categories']->keys();"},{"line":74,"text":"$listParams = $overviewPlugin->getCoreListData($viewableCategoryIds);"},{"line":103,"text":"$viewableCategoryIds = $this->getCategoryRepo()->getViewableCategoryIds();"},{"line":106,"text":"$finder = $ratingRepo->findLatestReviews($viewableCategoryIds);"},{"line":116,"text":"$reviews = $reviews->filterViewable();"},{"line":140,"text":"$categories = $categoryRepo->getViewableCategories();"},{"line":186,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":230,"text":"$authorOthers = $authorOthers->filterViewable();"},{"line":301,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":316,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":339,"text":"return $this->view('XFRM:ResourceItem\\Field', 'xfrm_resource_field', $viewParams);"},{"line":346,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":391,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":510,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":587,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":597,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":638,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":716,"text":"$resource = $this->assertViewableResource($params->resource_id, $extraWith);"},{"line":764,"text":"$rating = $rater->save();"},{"line":851,"text":"$updateCreator->setTitle($this->filter('update_title', 'str'));"},{"line":868,"text":"$updater->getResource()->draft_update->delete();"},{"line":873,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":893,"text":"$teamManager->save();"},{"line":913,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":947,"text":"$teamManager->save();"},{"line":971,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":989,"text":"$updater->save();"},{"line":1006,"text":"$draft = $resource->draft_update;"},{"line":1010,"text":"$updateAttachData = $attachmentRepo->getEditorData('resource_update', $resource, $draft->attachment_hash);"},{"line":1029,"text":"public function actionPostUpdateDraft(ParameterBag $params)"},{"line":1031,"text":"$this->assertDraftsEnabled();"},{"line":1033,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1044,"text":"/** @var DraftPlugin $draftPlugin */"},{"line":1045,"text":"$draftPlugin = $this->plugin('XF:Draft');"},{"line":1046,"text":"return $draftPlugin->actionDraftMessage($resource->draft_update, $extraData, 'update_message');"},{"line":1051,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1062,"text":"$updateCreator->setTitle($this->filter('update_title', 'str'));"},{"line":1108,"text":"$editor->setTitle($this->filter('title', 'str'));"},{"line":1162,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1180,"text":"$editor->save();"},{"line":1229,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1267,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1352,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1367,"text":"$typeChanger->save();"},{"line":1429,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1455,"text":"$categories = $categoryRepo->getViewableCategories();"},{"line":1469,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1486,"text":"$tagger->save();"},{"line":1494,"text":"$reply->setJsonParam('message', \\XF::phrase('your_changes_have_been_saved'));"},{"line":1518,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1562,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1600,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1640,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1653,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1700,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1709,"text":"'resource_state'"},{"line":1715,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1732,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1747,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1774,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1828,"text":"protected function assertViewableResource($resourceId, array $extraWith = [])"},{"line":1861,"text":"$this->setContentKey('resource-' . $resource->resource_id);"},{"line":1899,"text":"foreach ($resources->filterViewable() AS $id => $resource)"}],"present":true,"sha256":"78aaaaaf3ad95aedde7b4a1e4d8ec026b9a305dd4a2a23172d28a756244b9f67"},"resource_item_entity":{"bytes":55733,"hits":[{"line":8,"text":"use XF\\Draft;"},{"line":24,"text":"use XF\\Entity\\ViewableInterface;"},{"line":40,"text":"* COLUMNS"},{"line":49,"text":"* @property string $resource_state"},{"line":88,"text":"* @property-read Draft $draft_update"},{"line":102,"text":"* @property-read AbstractCollection<\\XF\\Entity\\Draft> $DraftUpdates"},{"line":106,"text":"class ResourceItem extends Entity implements ContainableInterface, DatableInterface, LinkableInterface, ViewableInterface"},{"line":132,"text":"public function getStructuredData(): array"},{"line":156,"text":"'discussionUrl' => $this->hasViewableDiscussion()"},{"line":265,"text":"if ($this->resource_state == 'moderated')"},{"line":268,"text":"!$this->hasPermission('viewModerated')"},{"line":276,"text":"else if ($this->resource_state == 'deleted')"},{"line":278,"text":"if (!$this->hasPermission('viewDeleted'))"},{"line":288,"text":"public function canViewDeletedContent()"},{"line":290,"text":"return $this->hasPermission('viewDeleted');"},{"line":293,"text":"public function canViewModeratedContent()"},{"line":296,"text":"if ($this->hasPermission('viewModerated'))"},{"line":336,"text":"public function canRate($checkDownloadIfRequired = true, &$error = null)"},{"line":338,"text":"if (!$this->isVisible())"},{"line":355,"text":"if ($checkDownloadIfRequired && $this->isDownloadable() && $this->app()->options()->xfrmRequireDownloadToRate)"},{"line":368,"text":"public function canRatePreReg($checkDownloadIfRequired = true)"},{"line":378,"text":"function () use ($checkDownloadIfRequired) { return $this->canRate($checkDownloadIfRequired); }"},{"line":564,"text":"|| !$this->isVisible()"},{"line":635,"text":"return $this->isVisible();"},{"line":684,"text":"&& $this->resource_state == 'visible'"},{"line":737,"text":"public function isVisible()"},{"line":739,"text":"return ($this->resource_state == 'visible');"},{"line":859,"text":"public function hasViewableDiscussion()"},{"line":923,"text":"$state = $currentValues ? $this->getValue('resource_state') : $this->getExistingValue('resource_state');"},{"line":933,"text":"if ($state != 'visible' && $options->xfrmResourceDeleteThreadAction['update_title'])"},{"line":964,"text":"}, 'save');"},{"line":984,"text":"}, 'save');"},{"line":993,"text":"* @return Draft"},{"line":995,"text":"public function getDraftUpdate()"},{"line":997,"text":"return Draft::createFromEntity($this, 'DraftUpdates');"},{"line":1055,"text":"if (!$this->canViewDeletedContent() && !$this->canViewModeratedContent())"},{"line":1072,"text":"if (!$this->canViewDeletedContent())"},{"line":1139,"text":"AND message_state = 'visible'"},{"line":1160,"text":"AND message_state = 'visible'"},{"line":1173,"text":"AND rating_state = 'visible'"},{"line":1187,"text":"AND rating_state = 'visible'"},{"line":1218,"text":"AND version_state = 'visible'"},{"line":1275,"text":"protected function _preSave()"},{"line":1310,"text":"protected function _postSave()"},{"line":1312,"text":"$visibilityChange = $this->isStateChanged('resource_state', 'visible');"},{"line":1313,"text":"$approvalChange = $this->isStateChanged('resource_state', 'moderated');"},{"line":1314,"text":"$deletionChange = $this->isStateChanged('resource_state', 'deleted');"},{"line":1320,"text":"$this->resourceMadeVisible();"},{"line":1354,"text":"if ($this->resource_state == 'visible')"},{"line":1356,"text":"$this->resourceInsertedVisible();"},{"line":1377,"text":"$oldDiscussion->save(false, false);"},{"line":1388,"text":"$this->Discussion->save(false, false);"},{"line":1401,"text":"$this->Discussion->saveIfChanged($saved, false, false);"},{"line":1410,"text":"$approvalQueue->save();"},{"line":1416,"text":"$delLog->save();"},{"line":1426,"text":"$this->_postSaveBookmarks();"},{"line":1429,"text":"protected function resourceMadeVisible()"},{"line":1440,"text":"$thread->discussion_state = 'visible';"},{"line":1449,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1468,"text":"$thread->discussion_state = 'deleted';"},{"line":1477,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1494,"text":"protected function resourceInsertedVisible()"},{"line":1512,"text":"if ($this->resource_state == 'visible')"},{"line":1581,"text":"if ($this->resource_state == 'visible')"},{"line":1584,"text":"$category->save();"},{"line":1587,"text":"if ($this->getExistingValue('resource_state') == 'visible')"},{"line":1594,"text":"$oldCategory->save();"},{"line":1605,"text":"if ($this->resource_state == 'visible' && $thread->discussion_state == 'deleted')"},{"line":1607,"text":"// presumably the thread was soft deleted by being moved to a category without a thread"},{"line":1608,"text":"$thread->discussion_state = 'visible';"},{"line":1614,"text":"$thread->discussion_state = 'deleted';"},{"line":1617,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1623,"text":"// check for entering/leaving visible"},{"line":1624,"text":"$visibilityChange = $this->isStateChanged('resource_state', 'visible');"},{"line":1628,"text":"$category->save();"},{"line":1633,"text":"$category->save();"},{"line":1635,"text":"else if ($this->isUpdate() && $this->resource_state == 'visible')"},{"line":1638,"text":"$category->save();"},{"line":1644,"text":"if ($this->resource_state == 'visible')"},{"line":1649,"text":"if ($this->Category && $this->resource_state == 'visible')"},{"line":1652,"text":"$this->Category->save();"},{"line":1655,"text":"if ($this->resource_state == 'deleted' && $this->DeletionLog)"},{"line":1660,"text":"if ($this->resource_state == 'moderated' && $this->ApprovalQueue)"},{"line":1744,"text":"if ($this->resource_state == 'deleted')"},{"line":1749,"text":"$this->resource_state = 'deleted';"},{"line":1756,"text":"$this->save();"},{"line":1820,"text":"'discussionUrl' => $this->hasViewableDiscussion()"},{"line":2009,"text":"public static function getStructure(Structure $structure)"},{"line":2015,"text":"$structure->columns = ["},{"line":2018,"text":"'required' => 'please_enter_valid_title',"},{"line":2023,"text":"'required' => 'xfrm_please_enter_valid_tag_line',"},{"line":2027,"text":"'user_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":2029,"text":"'required' => 'please_enter_valid_name',"},{"line":2034,"text":"'resource_state' => ['type' => self::STR, 'default' => 'visible',"},{"line":2035,"text":"'allowedValues' => ['visible', 'moderated', 'deleted'], 'api' => true,"},{"line":2037,"text":"'resource_type' => ['type' => self::STR, 'required' => true,"},{"line":2041,"text":"'resource_category_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":2084,"text":"'draft_update' => true,"},{"line":2088,"text":"'XF:Taggable' => ['stateField' => 'resource_state'],"},{"line":2090,"text":"'checkForUpdates' => ['title', 'resource_category_id', 'user_id', 'prefix_id', 'tags', 'resource_state'],"},{"line":2096,"text":"'checkForUpdates' => ['resource_category_id', 'resource_state', 'prefix_id'],"},{"line":2103,"text":"'stateField' => 'resource_state',"},{"line":2106,"text":"'valueTable' => 'xf_rm_resource_field_value',"},{"line":2113,"text":"'stateField' => 'resource_state',"},{"line":2189,"text":"'DraftUpdates' => ["},{"line":2190,"text":"'entity' => 'XF:Draft',"},{"line":2193,"text":"['draft_key', '=', 'xfrm-resource-', '$resource_id'],"}],"present":true,"sha256":"703773471dd35c876a0fed578a60dfc51e1dafc9520ad1493282b50fd9e05262"}},"tables":{"xf_draft":true,"xf_rm_category":true,"xf_rm_category_field":true,"xf_rm_category_prefix":true,"xf_rm_resource":true,"xf_rm_resource_field":true,"xf_rm_resource_field_value":true,"xf_rm_resource_prefix":true,"xf_tag":true,"xf_tag_content":true},"user1":{"admin_row_count":1,"is_staff":1,"permission_combination_id":6,"user_id":1,"user_state":"valid","username":"NewfiAdmin"}} -NEWFI95_PRODUCTION={"addons":[{"active":1,"addon_id":"XF","title":"XenForo","version_id":2031270,"version_string":"2.3.12"},{"active":1,"addon_id":"XFRM","title":"XenForo Resource Manager","version_id":2031170,"version_string":"2.3.11"}],"boardActive":"1","counts":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0},"errors":{"count":0,"ids":[],"new":[],"old_fp":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"hostname":"newfi-prod","indexRoute":"portal/","options":[{"option_id":"enableTagging","option_value":"0"},{"option_id":"xfrmAllowAnonReview","option_value":"0"},{"option_id":"xfrmAllowIcons","option_value":"1"},{"option_id":"xfrmAuthorOtherResourcesCount","option_value":"5"},{"option_id":"xfrmEnableTeams","option_value":"0"},{"option_id":"xfrmFilelessViewFull","option_value":"{\"limit\":\"1\",\"length\":\"250\"}"},{"option_id":"xfrmListDefaultOrder","option_value":"last_update"},{"option_id":"xfrmMinimumReviewLength","option_value":"0"},{"option_id":"xfrmPaidResourceThreadTitleTemplate","option_value":"{title} [Paid]"},{"option_id":"xfrmRecentReviewsCount","option_value":"10"},{"option_id":"xfrmRecentUpdatesCount","option_value":"3"},{"option_id":"xfrmRequireDownloadToRate","option_value":"1"},{"option_id":"xfrmResourceCurrencies","option_value":"usd\ncad\naud\ngbp\neur"},{"option_id":"xfrmResourceDeleteThreadAction","option_value":"{\"action\":\"close\",\"update_title\":\"1\",\"title_template\":\"{title} [Deleted]\",\"add_post\":\"1\"}"},{"option_id":"xfrmResourceExtensions","option_value":"zip\ntxt\npdf\npng\njpg\njpeg\njpe\ngif\npsd\ntif\nwebp"},{"option_id":"xfrmResourceMaxFileSize","option_value":"2048"},{"option_id":"xfrmResourceMaxFiles","option_value":"5"},{"option_id":"xfrmResourcesPerPage","option_value":"20"},{"option_id":"xfrmReviewRequired","option_value":"1"},{"option_id":"xfrmReviewVoting","option_value":"yes"},{"option_id":"xfrmReviewsPerPage","option_value":"20"},{"option_id":"xfrmUpdateMaxLength","option_value":"50000"},{"option_id":"xfrmUpdatesPerPage","option_value":"10"}],"rows":{"xf_rm_category":[{"allow_commercial_external":1,"allow_external":1,"allow_fileless":1,"allow_local":1,"always_moderate_create":0,"always_moderate_update":0,"auto_feature":0,"breadcrumb_data":"[]","depth":0,"description":"","display_order":10,"enable_support_url":1,"enable_versioning":1,"featured_count":0,"field_cache":"","last_resource_id":0,"last_resource_title":"","last_update":0,"lft":1,"min_tags":0,"parent_category_id":0,"prefix_cache":"","require_prefix":0,"resource_category_id":1,"resource_count":0,"review_field_cache":"","rgt":2,"thread_node_id":0,"thread_prefix_id":0,"title":"База знаний"}],"xf_rm_category_field":[],"xf_rm_category_prefix":[],"xf_rm_resource_field":[],"xf_rm_resource_prefix":[]},"schemas":{"xf_draft":[{"Default":null,"Extra":"auto_increment","Field":"draft_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"draft_key","Key":"MUL","Null":"NO","Type":"varbinary(75)"},{"Default":null,"Extra":"","Field":"user_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"last_update","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"message","Key":"","Null":"NO","Type":"mediumtext"},{"Default":null,"Extra":"","Field":"extra_data","Key":"","Null":"NO","Type":"mediumblob"}],"xf_rm_category":[{"Default":null,"Extra":"auto_increment","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"description","Key":"","Null":"NO","Type":"text"},{"Default":"0","Extra":"","Field":"parent_category_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"lft","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rgt","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"depth","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":null,"Extra":"","Field":"breadcrumb_data","Key":"","Null":"NO","Type":"blob"},{"Default":"0","Extra":"","Field":"resource_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"featured_count","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":"0","Extra":"","Field":"last_update","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"last_resource_title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":"0","Extra":"","Field":"last_resource_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"field_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":null,"Extra":"","Field":"review_field_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":null,"Extra":"","Field":"prefix_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"require_prefix","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"thread_node_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"thread_prefix_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"allow_local","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_external","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_commercial_external","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_fileless","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"always_moderate_create","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"always_moderate_update","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"min_tags","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":"1","Extra":"","Field":"enable_versioning","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"1","Extra":"","Field":"enable_support_url","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"auto_feature","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_category_field":[{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"}],"xf_rm_category_prefix":[{"Default":null,"Extra":"","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"prefix_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"}],"xf_rm_resource":[{"Default":null,"Extra":"auto_increment","Field":"resource_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":"","Extra":"","Field":"tag_line","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"user_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"username","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"team_member_user_ids","Key":"","Null":"NO","Type":"blob"},{"Default":"visible","Extra":"","Field":"resource_state","Key":"","Null":"NO","Type":"enum('visible','moderated','deleted')"},{"Default":null,"Extra":"","Field":"resource_type","Key":"","Null":"NO","Type":"varchar(25)"},{"Default":null,"Extra":"","Field":"resource_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"resource_category_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"current_version_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"description_update_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"discussion_thread_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"external_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":"","Extra":"","Field":"external_purchase_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":"0.00","Extra":"","Field":"price","Key":"","Null":"NO","Type":"decimal(10,2) unsigned"},{"Default":"","Extra":"","Field":"currency","Key":"","Null":"NO","Type":"varchar(3)"},{"Default":"0","Extra":"","Field":"view_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"download_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_sum","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_avg","Key":"","Null":"NO","Type":"float unsigned"},{"Default":"0","Extra":"","Field":"rating_weighted","Key":"MUL","Null":"NO","Type":"float unsigned"},{"Default":null,"Extra":"","Field":"rating_split","Key":"","Null":"YES","Type":"blob"},{"Default":"0","Extra":"","Field":"update_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"review_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"last_update","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"alt_support_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":null,"Extra":"","Field":"custom_fields","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"prefix_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"icon_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"icon_optimized","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"tags","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"featured","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_resource_field":[{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":"above_info","Extra":"","Field":"display_group","Key":"MUL","Null":"NO","Type":"varchar(25)"},{"Default":"1","Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"textbox","Extra":"","Field":"field_type","Key":"","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"field_choices","Key":"","Null":"NO","Type":"blob"},{"Default":"none","Extra":"","Field":"match_type","Key":"","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"match_params","Key":"","Null":"NO","Type":"blob"},{"Default":"0","Extra":"","Field":"max_length","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"required","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"display_template","Key":"","Null":"NO","Type":"text"},{"Default":null,"Extra":"","Field":"wrapper_template","Key":"","Null":"NO","Type":"text"},{"Default":"1","Extra":"","Field":"viewable_resource","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_resource_field_value":[{"Default":null,"Extra":"","Field":"resource_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"field_value","Key":"","Null":"NO","Type":"mediumtext"}],"xf_rm_resource_prefix":[{"Default":null,"Extra":"auto_increment","Field":"prefix_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"prefix_group_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"materialized_order","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"css_class","Key":"","Null":"NO","Type":"varchar(50)"},{"Default":null,"Extra":"","Field":"allowed_user_group_ids","Key":"","Null":"NO","Type":"blob"}],"xf_tag":[{"Default":null,"Extra":"auto_increment","Field":"tag_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"tag","Key":"UNI","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"tag_url","Key":"UNI","Null":"NO","Type":"varchar(100)"},{"Default":"0","Extra":"","Field":"use_count","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"last_use_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"permanent","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_tag_content":[{"Default":null,"Extra":"auto_increment","Field":"tag_content_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"content_type","Key":"MUL","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"content_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"tag_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"add_user_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"add_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"visible","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"content_date","Key":"","Null":"NO","Type":"int(10) unsigned"}]},"source":{"abstract_field_entity":{"bytes":13332,"hits":[{"line":14,"text":"* COLUMNS"},{"line":15,"text":"* @property string $field_id"},{"line":16,"text":"* @property int $display_order"},{"line":17,"text":"* @property string $field_type"},{"line":18,"text":"* @property array $field_choices"},{"line":19,"text":"* @property string $match_type"},{"line":20,"text":"* @property array $match_params"},{"line":21,"text":"* @property int $max_length"},{"line":22,"text":"* @property bool $required"},{"line":24,"text":"* @property string $display_group"},{"line":25,"text":"* @property string $user_editable"},{"line":49,"text":"return static::getPhrasePrefix() . '_' . ($title ? 'title' : 'desc') . '.' . $this->field_id;"},{"line":91,"text":"if (isset($types[$this->field_type]))"},{"line":93,"text":"$type = $types[$this->field_type]['type'];"},{"line":104,"text":"if (!isset($this->field_choices[$choice]))"},{"line":126,"text":"return static::getPhrasePrefix() . '_' . 'choice' . '.' . $this->field_id . '_' . $choice;"},{"line":156,"text":"$this->error(\\XF::phrase('please_enter_text_for_each_choice'), 'field_choices');"},{"line":162,"text":"$this->error(\\XF::phrase('please_enter_an_id_using_only_alphanumeric'), 'field_choices');"},{"line":289,"text":"protected function _preSave()"},{"line":291,"text":"if ($this->isUpdate() && $this->isChanged('field_id'))"},{"line":293,"text":"$this->error('The field ID cannot be changed once set.', 'field_id');"},{"line":296,"text":"if ($this->isChanged(['match_type', 'match_params']))"},{"line":298,"text":"$validateMatchTypeMethod = '_validateMatchType' . Php::camelCase($this->get('match_type'));"},{"line":301,"text":"$matchParams = $this->match_params;"},{"line":304,"text":"$this->match_params = $matchParams;"},{"line":308,"text":"$this->error($error, 'match_params');"},{"line":313,"text":"if ($this->isUpdate() && $this->isChanged('field_type'))"},{"line":316,"text":"if ($typeMap[$this->get('field_type')]['compatible'] != $typeMap[$this->getExistingValue('field_type')]['compatible'])"},{"line":318,"text":"$this->error(\\XF::phrase('you_may_not_change_field_to_different_type_after_it_has_been_created'), 'field_type');"},{"line":324,"text":"if (($this->isInsert() && !$this->field_choices) || (is_array($this->field_choices) && !$this->field_choices))"},{"line":326,"text":"$this->error(\\XF::phrase('please_enter_at_least_one_choice'), 'field_choices', false);"},{"line":331,"text":"protected function _postSave()"},{"line":333,"text":"if ($this->isChanged('field_choices'))"},{"line":338,"text":"$newValues = $this->getValue('field_choices');"},{"line":339,"text":"$oldValues = $this->getExistingValue('field_choices');"},{"line":373,"text":"$phrase->save(true, false);"},{"line":390,"text":"$this->deleteChoicePhrases(array_keys($this->field_choices));"},{"line":411,"text":"\\XF::runOnce('rebuildFieldCache' . $this->field_id, function ()"},{"line":422,"text":"* @api-out str $field_id"},{"line":425,"text":"* @api-out int $display_order"},{"line":426,"text":"* @api-out str $field_type"},{"line":427,"text":"* @api-out object $field_choices For choice types, an ordered list of choices, with \"option\" and \"name\" keys for each."},{"line":428,"text":"* @api-out str $match_type"},{"line":429,"text":"* @api-out array $match_params"},{"line":430,"text":"* @api-out int $max_length"},{"line":431,"text":"* @api-out bool $required"},{"line":432,"text":"* @api-out str $display_group If this field type supports grouping, the group this field belongs to."},{"line":446,"text":"foreach ($this->field_choices AS $option => $printable)"},{"line":453,"text":"$result->field_choices = $choices;"},{"line":456,"text":"$result->match_params = (object) $this->match_params;"},{"line":463,"text":"'has_user_editable' => false,"},{"line":464,"text":"'has_user_editable_once' => false,"},{"line":472,"text":"$structure->primaryKey = 'field_id';"},{"line":473,"text":"$structure->columns = ["},{"line":474,"text":"'field_id' => ['type' => self::STR, 'maxLength' => 25,"},{"line":475,"text":"'required' => 'please_enter_valid_field_id',"},{"line":476,"text":"'unique' => 'field_ids_must_be_unique',"},{"line":480,"text":"'display_order' => ['type' => self::UINT, 'default' => 1, 'api' => true],"},{"line":481,"text":"'field_type' => ['type' => self::STR, 'default' => 'textbox',"},{"line":485,"text":"'field_choices' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":486,"text":"'match_type' => ['type' => self::STR, 'default' => 'none',"},{"line":490,"text":"'match_params' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":491,"text":"'max_length' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":492,"text":"'required' => ['type' => self::BOOL, 'default' => false, 'api' => true],"},{"line":499,"text":"$structure->columns['display_group'] = ['type' => self::STR, 'default' => $firstOption,"},{"line":504,"text":"if ($options['has_user_editable'])"},{"line":506,"text":"$userEditAllowedValues = $options['has_user_editable_once'] ? ['yes', 'once', 'never'] : ['yes', 'never'];"},{"line":507,"text":"$structure->columns['user_editable'] = ['type' => self::STR, 'default' => 'yes',"},{"line":513,"text":"$structure->columns['moderator_editable'] = ['type' => self::BOOL, 'default' => true];"},{"line":517,"text":"$structure->columns['editable_user_group_ids'] = ["},{"line":529,"text":"$structure->columns['wrapper_template'] = ['type' => self::STR, 'default' => ''];"},{"line":544,"text":"['title', '=', $phrasePrefix . '_title.', '$field_id'],"},{"line":552,"text":"['title', '=', $phrasePrefix . '_desc.', '$field_id'],"}],"present":true,"sha256":"f5a7d03f0b656ecae7a225aafe363eb79a925054a3d2fefdcc0bdf4e6a41695f"},"category_admin":{"bytes":5702,"hits":[{"line":59,"text":"$availableFields = $availableFields->pluckNamed('title', 'field_id');"},{"line":87,"text":"protected function categorySaveProcess(\\XFRM\\Entity\\Category $category)"},{"line":93,"text":"'display_order' => 'uint',"},{"line":100,"text":"'always_moderate_create' => 'bool',"},{"line":101,"text":"'always_moderate_update' => 'bool',"},{"line":102,"text":"'min_tags' => 'uint',"},{"line":110,"text":"$form->basicEntitySave($category, $entityInput);"},{"line":117,"text":"$repo->updateContentAssociations($category->resource_category_id, $prefixIds);"},{"line":120,"text":"$fieldIds = $this->filter('available_fields', 'array-str');"},{"line":125,"text":"$repo->updateContentAssociations($category->resource_category_id, $fieldIds);"},{"line":131,"text":"public function actionSave(ParameterBag $params)"},{"line":144,"text":"$this->categorySaveProcess($category)->run();"},{"line":184,"text":"public function actionPermissionsSave(ParameterBag $params)"},{"line":186,"text":"return $this->getCategoryPermissionPlugin()->actionSave($params);"}],"present":true,"sha256":"4896715a8a0d00b8f4bf09dd0e28458f410ef8b27d1125711a5d1da3bc661ad6"},"category_entity":{"bytes":15749,"hits":[{"line":6,"text":"use XF\\Draft;"},{"line":12,"text":"use XF\\Entity\\ViewableInterface;"},{"line":18,"text":"* COLUMNS"},{"line":38,"text":"* @property bool $always_moderate_create"},{"line":39,"text":"* @property bool $always_moderate_update"},{"line":40,"text":"* @property int $min_tags"},{"line":45,"text":"* @property int $display_order"},{"line":53,"text":"* @property-read Draft $draft_resource"},{"line":58,"text":"* @property-read AbstractCollection<\\XF\\Entity\\Draft> $DraftResources"},{"line":61,"text":"class Category extends AbstractCategoryTree implements LinkableInterface, ViewableInterface"},{"line":63,"text":"protected $_viewableDescendants = [];"},{"line":70,"text":"public function canViewDeletedResources()"},{"line":72,"text":"return $this->hasPermission('viewDeleted');"},{"line":75,"text":"public function canViewModeratedResources()"},{"line":77,"text":"return $this->hasPermission('viewModerated');"},{"line":173,"text":"public function getViewableDescendants()"},{"line":176,"text":"if (!isset($this->_viewableDescendants[$userId]))"},{"line":178,"text":"$viewable = $this->repository('XFRM:Category')->getViewableCategories($this);"},{"line":179,"text":"$this->_viewableDescendants[$userId] = $viewable->toArray();"},{"line":182,"text":"return $this->_viewableDescendants[$userId];"},{"line":185,"text":"public function cacheViewableDescendents(array $descendents, $userId = null)"},{"line":192,"text":"$this->_viewableDescendants[$userId] = $descendents;"},{"line":196,"text":"* @return Draft"},{"line":198,"text":"public function getDraftResource()"},{"line":200,"text":"return Draft::createFromEntity($this, 'DraftResources');"},{"line":309,"text":"return 'visible';"},{"line":314,"text":"return 'moderated';"},{"line":319,"text":"return $this->always_moderate_update ? 'moderated' : 'visible';"},{"line":323,"text":"return $this->always_moderate_create ? 'moderated' : 'visible';"},{"line":405,"text":"AND resource_state = 'visible'"},{"line":417,"text":"AND resource.resource_state = 'visible'\","},{"line":430,"text":"AND resource_state = 'visible'"},{"line":448,"text":"protected function _preSave()"},{"line":547,"text":"public static function getStructure(Structure $structure)"},{"line":553,"text":"$structure->columns = ["},{"line":556,"text":"'required' => 'please_enter_valid_title', 'api' => true,"},{"line":576,"text":"'always_moderate_create' => ['type' => self::BOOL, 'default' => false],"},{"line":577,"text":"'always_moderate_update' => ['type' => self::BOOL, 'default' => false],"},{"line":578,"text":"'min_tags' => ['type' => self::UINT, 'forced' => true, 'default' => 0, 'max' => 100, 'api' => true],"},{"line":585,"text":"'draft_resource' => true,"},{"line":603,"text":"'DraftResources' => ["},{"line":604,"text":"'entity' => 'XF:Draft',"},{"line":607,"text":"['draft_key', '=', 'xfrm-category-', '$resource_category_id'],"}],"present":true,"sha256":"73763c6c3b7d56da646cf04b1f19106b33643daa9bbb6e775141e692b9cf36c2"},"category_field_repo":{"bytes":729,"hits":[{"line":30,"text":"$category->saveIfChanged();"}],"present":true,"sha256":"533bd6390f94189f752059bfa611e53e6ca4711c72a18c7b34322cecc9fe2228"},"relevant_files":["src/addons/XFRM/Entity/Category.php","src/addons/XFRM/Entity/CategoryField.php","src/addons/XFRM/Entity/CategoryPrefix.php","src/addons/XFRM/Entity/CategoryReviewField.php","src/addons/XFRM/Entity/CategoryWatch.php","src/addons/XFRM/Entity/ResourceDownload.php","src/addons/XFRM/Entity/ResourceField.php","src/addons/XFRM/Entity/ResourceFieldValue.php","src/addons/XFRM/Entity/ResourceItem.php","src/addons/XFRM/Entity/ResourcePrefix.php","src/addons/XFRM/Entity/ResourcePrefixGroup.php","src/addons/XFRM/Entity/ResourceRating.php","src/addons/XFRM/Entity/ResourceReviewField.php","src/addons/XFRM/Entity/ResourceReviewFieldValue.php","src/addons/XFRM/Entity/ResourceTeamMember.php","src/addons/XFRM/Entity/ResourceUpdate.php","src/addons/XFRM/Entity/ResourceVersion.php","src/addons/XFRM/Entity/ResourceWatch.php","src/addons/XFRM/Repository/Category.php","src/addons/XFRM/Repository/CategoryField.php","src/addons/XFRM/Repository/CategoryPrefix.php","src/addons/XFRM/Repository/CategoryReviewField.php","src/addons/XFRM/Repository/CategoryWatch.php","src/addons/XFRM/Repository/ResourceField.php","src/addons/XFRM/Repository/ResourceItem.php","src/addons/XFRM/Repository/ResourcePrefix.php","src/addons/XFRM/Repository/ResourceRating.php","src/addons/XFRM/Repository/ResourceReviewField.php","src/addons/XFRM/Repository/ResourceUpdate.php","src/addons/XFRM/Repository/ResourceVersion.php","src/addons/XFRM/Repository/ResourceWatch.php"],"resource_create_service":{"bytes":9106,"hits":[{"line":85,"text":"$this->resource->addCascadedSave($this->description);"},{"line":88,"text":"$this->resource->addCascadedSave($this->version);"},{"line":97,"text":"$this->resource->resource_state = $this->category->getNewContentState();"},{"line":98,"text":"$this->description->message_state = 'visible';"},{"line":137,"text":"public function setTitle($title)"},{"line":143,"text":"public function setContent($title, $description, $format = true)"},{"line":145,"text":"$this->setTitle($title);"},{"line":168,"text":"public function setDescriptionAttachmentHash($hash)"},{"line":227,"text":"if ($this->resource->resource_state == 'visible' && \\XF::visitor()->isSpamCheckRequired())"},{"line":257,"text":"$resource->preSave();"},{"line":292,"text":"protected function _save()"},{"line":302,"text":"$resource->save(true, false);"},{"line":303,"text":"// update and version will also be saved now"},{"line":316,"text":"->setContentId($resource->resource_id, true)"},{"line":317,"text":"->save($this->performValidations);"},{"line":325,"text":"$thread = $creator->save();"},{"line":344,"text":"$creator->setContent($this->resource->getExpectedThreadTitle(), $this->getThreadMessage(), false);"},{"line":350,"text":"$thread->discussion_state = $this->resource->resource_state;"},{"line":385,"text":"if ($this->resource->isVisible())"}],"present":true,"sha256":"2c72b9811646927b8abc0ffaee0b2d0358576b4b5cfc359da6fc5c7c13d9e66c"},"resource_edit_service":{"bytes":5900,"hits":[{"line":59,"text":"public function setTitle($title)"},{"line":62,"text":"$this->getDescriptionEditor()->setTitle($title);"},{"line":133,"text":"$this->resource->addCascadedSave($currentVersion);"},{"line":148,"text":"$this->resource->addCascadedSave($currentVersion);"},{"line":217,"text":"$resource->preSave();"},{"line":252,"text":"protected function _save()"},{"line":256,"text":"$resource->save(true, false);"},{"line":260,"text":"$this->descriptionEditor->save();"},{"line":265,"text":"$this->tagChanger->save($this->performValidations);"},{"line":268,"text":"if ($resource->isVisible() && $this->alert && $resource->user_id != \\XF::visitor()->user_id)"}],"present":true,"sha256":"b837cb9e5883ad74cc46c417bf5f5490506aecc26a3e458c035078e44964931d"},"resource_field_admin":{"bytes":1905,"hits":[{"line":32,"text":"return 'xfrm_resource_field';"},{"line":59,"text":"protected function saveAdditionalData(FormAction $form, \\XF\\Entity\\AbstractField $field)"},{"line":62,"text":"'viewable_resource' => 'bool',"},{"line":65,"text":"$form->basicEntitySave($field, $input);"}],"present":true,"sha256":"70af86b0164a4d9089bf740857557a5d1d26063b7b7496ae78cd7c7e2e64f9c3"},"resource_field_entity":{"bytes":2019,"hits":[{"line":12,"text":"* COLUMNS"},{"line":13,"text":"* @property string $field_id"},{"line":14,"text":"* @property int $display_order"},{"line":15,"text":"* @property string $field_type"},{"line":16,"text":"* @property array|null $field_choices"},{"line":17,"text":"* @property string $match_type"},{"line":18,"text":"* @property array|null $match_params"},{"line":19,"text":"* @property int $max_length"},{"line":20,"text":"* @property bool $required"},{"line":22,"text":"* @property string $display_group"},{"line":24,"text":"* @property bool $viewable_resource"},{"line":44,"text":"return 'xfrm_resource_field';"},{"line":53,"text":"$this->db()->delete('xf_rm_resource_field_value', 'field_id = ?', $this->field_id);"},{"line":58,"text":"public static function getStructure(Structure $structure)"},{"line":62,"text":"'xf_rm_resource_field',"},{"line":73,"text":"$structure->columns += ["},{"line":74,"text":"'viewable_resource' => ['type' => self::BOOL, 'default' => true],"},{"line":80,"text":"'conditions' => 'field_id',"}],"present":true,"sha256":"c4cb2a33b80db12e54a010609140e1c9735b9055812b0d70d64827fe16c34246"},"resource_item_controller":{"bytes":49966,"hits":[{"line":6,"text":"use XF\\ControllerPlugin\\DraftPlugin;"},{"line":72,"text":"$viewableCategoryIds = $categoryParams['categories']->keys();"},{"line":74,"text":"$listParams = $overviewPlugin->getCoreListData($viewableCategoryIds);"},{"line":103,"text":"$viewableCategoryIds = $this->getCategoryRepo()->getViewableCategoryIds();"},{"line":106,"text":"$finder = $ratingRepo->findLatestReviews($viewableCategoryIds);"},{"line":116,"text":"$reviews = $reviews->filterViewable();"},{"line":140,"text":"$categories = $categoryRepo->getViewableCategories();"},{"line":186,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":230,"text":"$authorOthers = $authorOthers->filterViewable();"},{"line":301,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":316,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":339,"text":"return $this->view('XFRM:ResourceItem\\Field', 'xfrm_resource_field', $viewParams);"},{"line":346,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":391,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":510,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":587,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":597,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":638,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":716,"text":"$resource = $this->assertViewableResource($params->resource_id, $extraWith);"},{"line":764,"text":"$rating = $rater->save();"},{"line":851,"text":"$updateCreator->setTitle($this->filter('update_title', 'str'));"},{"line":868,"text":"$updater->getResource()->draft_update->delete();"},{"line":873,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":893,"text":"$teamManager->save();"},{"line":913,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":947,"text":"$teamManager->save();"},{"line":971,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":989,"text":"$updater->save();"},{"line":1006,"text":"$draft = $resource->draft_update;"},{"line":1010,"text":"$updateAttachData = $attachmentRepo->getEditorData('resource_update', $resource, $draft->attachment_hash);"},{"line":1029,"text":"public function actionPostUpdateDraft(ParameterBag $params)"},{"line":1031,"text":"$this->assertDraftsEnabled();"},{"line":1033,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1044,"text":"/** @var DraftPlugin $draftPlugin */"},{"line":1045,"text":"$draftPlugin = $this->plugin('XF:Draft');"},{"line":1046,"text":"return $draftPlugin->actionDraftMessage($resource->draft_update, $extraData, 'update_message');"},{"line":1051,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1062,"text":"$updateCreator->setTitle($this->filter('update_title', 'str'));"},{"line":1108,"text":"$editor->setTitle($this->filter('title', 'str'));"},{"line":1162,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1180,"text":"$editor->save();"},{"line":1229,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1267,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1352,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1367,"text":"$typeChanger->save();"},{"line":1429,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1455,"text":"$categories = $categoryRepo->getViewableCategories();"},{"line":1469,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1486,"text":"$tagger->save();"},{"line":1494,"text":"$reply->setJsonParam('message', \\XF::phrase('your_changes_have_been_saved'));"},{"line":1518,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1562,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1600,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1640,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1653,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1700,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1709,"text":"'resource_state'"},{"line":1715,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1732,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1747,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1774,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1828,"text":"protected function assertViewableResource($resourceId, array $extraWith = [])"},{"line":1861,"text":"$this->setContentKey('resource-' . $resource->resource_id);"},{"line":1899,"text":"foreach ($resources->filterViewable() AS $id => $resource)"}],"present":true,"sha256":"78aaaaaf3ad95aedde7b4a1e4d8ec026b9a305dd4a2a23172d28a756244b9f67"},"resource_item_entity":{"bytes":55733,"hits":[{"line":8,"text":"use XF\\Draft;"},{"line":24,"text":"use XF\\Entity\\ViewableInterface;"},{"line":40,"text":"* COLUMNS"},{"line":49,"text":"* @property string $resource_state"},{"line":88,"text":"* @property-read Draft $draft_update"},{"line":102,"text":"* @property-read AbstractCollection<\\XF\\Entity\\Draft> $DraftUpdates"},{"line":106,"text":"class ResourceItem extends Entity implements ContainableInterface, DatableInterface, LinkableInterface, ViewableInterface"},{"line":132,"text":"public function getStructuredData(): array"},{"line":156,"text":"'discussionUrl' => $this->hasViewableDiscussion()"},{"line":265,"text":"if ($this->resource_state == 'moderated')"},{"line":268,"text":"!$this->hasPermission('viewModerated')"},{"line":276,"text":"else if ($this->resource_state == 'deleted')"},{"line":278,"text":"if (!$this->hasPermission('viewDeleted'))"},{"line":288,"text":"public function canViewDeletedContent()"},{"line":290,"text":"return $this->hasPermission('viewDeleted');"},{"line":293,"text":"public function canViewModeratedContent()"},{"line":296,"text":"if ($this->hasPermission('viewModerated'))"},{"line":336,"text":"public function canRate($checkDownloadIfRequired = true, &$error = null)"},{"line":338,"text":"if (!$this->isVisible())"},{"line":355,"text":"if ($checkDownloadIfRequired && $this->isDownloadable() && $this->app()->options()->xfrmRequireDownloadToRate)"},{"line":368,"text":"public function canRatePreReg($checkDownloadIfRequired = true)"},{"line":378,"text":"function () use ($checkDownloadIfRequired) { return $this->canRate($checkDownloadIfRequired); }"},{"line":564,"text":"|| !$this->isVisible()"},{"line":635,"text":"return $this->isVisible();"},{"line":684,"text":"&& $this->resource_state == 'visible'"},{"line":737,"text":"public function isVisible()"},{"line":739,"text":"return ($this->resource_state == 'visible');"},{"line":859,"text":"public function hasViewableDiscussion()"},{"line":923,"text":"$state = $currentValues ? $this->getValue('resource_state') : $this->getExistingValue('resource_state');"},{"line":933,"text":"if ($state != 'visible' && $options->xfrmResourceDeleteThreadAction['update_title'])"},{"line":964,"text":"}, 'save');"},{"line":984,"text":"}, 'save');"},{"line":993,"text":"* @return Draft"},{"line":995,"text":"public function getDraftUpdate()"},{"line":997,"text":"return Draft::createFromEntity($this, 'DraftUpdates');"},{"line":1055,"text":"if (!$this->canViewDeletedContent() && !$this->canViewModeratedContent())"},{"line":1072,"text":"if (!$this->canViewDeletedContent())"},{"line":1139,"text":"AND message_state = 'visible'"},{"line":1160,"text":"AND message_state = 'visible'"},{"line":1173,"text":"AND rating_state = 'visible'"},{"line":1187,"text":"AND rating_state = 'visible'"},{"line":1218,"text":"AND version_state = 'visible'"},{"line":1275,"text":"protected function _preSave()"},{"line":1310,"text":"protected function _postSave()"},{"line":1312,"text":"$visibilityChange = $this->isStateChanged('resource_state', 'visible');"},{"line":1313,"text":"$approvalChange = $this->isStateChanged('resource_state', 'moderated');"},{"line":1314,"text":"$deletionChange = $this->isStateChanged('resource_state', 'deleted');"},{"line":1320,"text":"$this->resourceMadeVisible();"},{"line":1354,"text":"if ($this->resource_state == 'visible')"},{"line":1356,"text":"$this->resourceInsertedVisible();"},{"line":1377,"text":"$oldDiscussion->save(false, false);"},{"line":1388,"text":"$this->Discussion->save(false, false);"},{"line":1401,"text":"$this->Discussion->saveIfChanged($saved, false, false);"},{"line":1410,"text":"$approvalQueue->save();"},{"line":1416,"text":"$delLog->save();"},{"line":1426,"text":"$this->_postSaveBookmarks();"},{"line":1429,"text":"protected function resourceMadeVisible()"},{"line":1440,"text":"$thread->discussion_state = 'visible';"},{"line":1449,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1468,"text":"$thread->discussion_state = 'deleted';"},{"line":1477,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1494,"text":"protected function resourceInsertedVisible()"},{"line":1512,"text":"if ($this->resource_state == 'visible')"},{"line":1581,"text":"if ($this->resource_state == 'visible')"},{"line":1584,"text":"$category->save();"},{"line":1587,"text":"if ($this->getExistingValue('resource_state') == 'visible')"},{"line":1594,"text":"$oldCategory->save();"},{"line":1605,"text":"if ($this->resource_state == 'visible' && $thread->discussion_state == 'deleted')"},{"line":1607,"text":"// presumably the thread was soft deleted by being moved to a category without a thread"},{"line":1608,"text":"$thread->discussion_state = 'visible';"},{"line":1614,"text":"$thread->discussion_state = 'deleted';"},{"line":1617,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1623,"text":"// check for entering/leaving visible"},{"line":1624,"text":"$visibilityChange = $this->isStateChanged('resource_state', 'visible');"},{"line":1628,"text":"$category->save();"},{"line":1633,"text":"$category->save();"},{"line":1635,"text":"else if ($this->isUpdate() && $this->resource_state == 'visible')"},{"line":1638,"text":"$category->save();"},{"line":1644,"text":"if ($this->resource_state == 'visible')"},{"line":1649,"text":"if ($this->Category && $this->resource_state == 'visible')"},{"line":1652,"text":"$this->Category->save();"},{"line":1655,"text":"if ($this->resource_state == 'deleted' && $this->DeletionLog)"},{"line":1660,"text":"if ($this->resource_state == 'moderated' && $this->ApprovalQueue)"},{"line":1744,"text":"if ($this->resource_state == 'deleted')"},{"line":1749,"text":"$this->resource_state = 'deleted';"},{"line":1756,"text":"$this->save();"},{"line":1820,"text":"'discussionUrl' => $this->hasViewableDiscussion()"},{"line":2009,"text":"public static function getStructure(Structure $structure)"},{"line":2015,"text":"$structure->columns = ["},{"line":2018,"text":"'required' => 'please_enter_valid_title',"},{"line":2023,"text":"'required' => 'xfrm_please_enter_valid_tag_line',"},{"line":2027,"text":"'user_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":2029,"text":"'required' => 'please_enter_valid_name',"},{"line":2034,"text":"'resource_state' => ['type' => self::STR, 'default' => 'visible',"},{"line":2035,"text":"'allowedValues' => ['visible', 'moderated', 'deleted'], 'api' => true,"},{"line":2037,"text":"'resource_type' => ['type' => self::STR, 'required' => true,"},{"line":2041,"text":"'resource_category_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":2084,"text":"'draft_update' => true,"},{"line":2088,"text":"'XF:Taggable' => ['stateField' => 'resource_state'],"},{"line":2090,"text":"'checkForUpdates' => ['title', 'resource_category_id', 'user_id', 'prefix_id', 'tags', 'resource_state'],"},{"line":2096,"text":"'checkForUpdates' => ['resource_category_id', 'resource_state', 'prefix_id'],"},{"line":2103,"text":"'stateField' => 'resource_state',"},{"line":2106,"text":"'valueTable' => 'xf_rm_resource_field_value',"},{"line":2113,"text":"'stateField' => 'resource_state',"},{"line":2189,"text":"'DraftUpdates' => ["},{"line":2190,"text":"'entity' => 'XF:Draft',"},{"line":2193,"text":"['draft_key', '=', 'xfrm-resource-', '$resource_id'],"}],"present":true,"sha256":"703773471dd35c876a0fed578a60dfc51e1dafc9520ad1493282b50fd9e05262"}},"tables":{"xf_draft":true,"xf_rm_category":true,"xf_rm_category_field":true,"xf_rm_category_prefix":true,"xf_rm_resource":true,"xf_rm_resource_field":true,"xf_rm_resource_field_value":true,"xf_rm_resource_prefix":true,"xf_tag":true,"xf_tag_content":true},"user1":{"admin_row_count":1,"is_staff":1,"permission_combination_id":6,"user_id":1,"user_state":"valid","username":"Newfi"}} -NEWFI95_PUBLIC_RESOURCE={"effective":"https://newfi.ru/resources/","http":200} -NEWFI95_SAFE_REPORT={"changes_made":false,"counts":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0},"decision":"PASS_KB204_XFRM_CONTRACT_AUDIT_CAPTURED","git_head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0","options":[{"option_id":"enableTagging","option_value":"0"},{"option_id":"xfrmAllowAnonReview","option_value":"0"},{"option_id":"xfrmAllowIcons","option_value":"1"},{"option_id":"xfrmAuthorOtherResourcesCount","option_value":"5"},{"option_id":"xfrmEnableTeams","option_value":"0"},{"option_id":"xfrmFilelessViewFull","option_value":"{\"limit\":\"1\",\"length\":\"250\"}"},{"option_id":"xfrmListDefaultOrder","option_value":"last_update"},{"option_id":"xfrmMinimumReviewLength","option_value":"0"},{"option_id":"xfrmPaidResourceThreadTitleTemplate","option_value":"{title} [Paid]"},{"option_id":"xfrmRecentReviewsCount","option_value":"10"},{"option_id":"xfrmRecentUpdatesCount","option_value":"3"},{"option_id":"xfrmRequireDownloadToRate","option_value":"1"},{"option_id":"xfrmResourceCurrencies","option_value":"usd\ncad\naud\ngbp\neur"},{"option_id":"xfrmResourceDeleteThreadAction","option_value":"{\"action\":\"close\",\"update_title\":\"1\",\"title_template\":\"{title} [Deleted]\",\"add_post\":\"1\"}"},{"option_id":"xfrmResourceExtensions","option_value":"zip\ntxt\npdf\npng\njpg\njpeg\njpe\ngif\npsd\ntif\nwebp"},{"option_id":"xfrmResourceMaxFileSize","option_value":"2048"},{"option_id":"xfrmResourceMaxFiles","option_value":"5"},{"option_id":"xfrmResourcesPerPage","option_value":"20"},{"option_id":"xfrmReviewRequired","option_value":"1"},{"option_id":"xfrmReviewVoting","option_value":"yes"},{"option_id":"xfrmReviewsPerPage","option_value":"20"},{"option_id":"xfrmUpdateMaxLength","option_value":"50000"},{"option_id":"xfrmUpdatesPerPage","option_value":"10"}],"public_resource":{"effective":"https://newfi.ru/resources/","http":200},"rows":{"xf_rm_category":[{"allow_commercial_external":1,"allow_external":1,"allow_fileless":1,"allow_local":1,"always_moderate_create":0,"always_moderate_update":0,"auto_feature":0,"breadcrumb_data":"[]","depth":0,"description":"","display_order":10,"enable_support_url":1,"enable_versioning":1,"featured_count":0,"field_cache":"","last_resource_id":0,"last_resource_title":"","last_update":0,"lft":1,"min_tags":0,"parent_category_id":0,"prefix_cache":"","require_prefix":0,"resource_category_id":1,"resource_count":0,"review_field_cache":"","rgt":2,"thread_node_id":0,"thread_prefix_id":0,"title":"База знаний"}],"xf_rm_category_field":[],"xf_rm_category_prefix":[],"xf_rm_resource_field":[],"xf_rm_resource_prefix":[]},"schemas":{"xf_draft":[{"Default":null,"Extra":"auto_increment","Field":"draft_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"draft_key","Key":"MUL","Null":"NO","Type":"varbinary(75)"},{"Default":null,"Extra":"","Field":"user_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"last_update","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"message","Key":"","Null":"NO","Type":"mediumtext"},{"Default":null,"Extra":"","Field":"extra_data","Key":"","Null":"NO","Type":"mediumblob"}],"xf_rm_category":[{"Default":null,"Extra":"auto_increment","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"description","Key":"","Null":"NO","Type":"text"},{"Default":"0","Extra":"","Field":"parent_category_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"lft","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rgt","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"depth","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":null,"Extra":"","Field":"breadcrumb_data","Key":"","Null":"NO","Type":"blob"},{"Default":"0","Extra":"","Field":"resource_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"featured_count","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":"0","Extra":"","Field":"last_update","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"last_resource_title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":"0","Extra":"","Field":"last_resource_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"field_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":null,"Extra":"","Field":"review_field_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":null,"Extra":"","Field":"prefix_cache","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"require_prefix","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"thread_node_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"thread_prefix_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"allow_local","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_external","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_commercial_external","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"allow_fileless","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"always_moderate_create","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"always_moderate_update","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"min_tags","Key":"","Null":"NO","Type":"smallint(5) unsigned"},{"Default":"1","Extra":"","Field":"enable_versioning","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"1","Extra":"","Field":"enable_support_url","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":"0","Extra":"","Field":"auto_feature","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_category_field":[{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"}],"xf_rm_category_prefix":[{"Default":null,"Extra":"","Field":"resource_category_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"prefix_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"}],"xf_rm_resource":[{"Default":null,"Extra":"auto_increment","Field":"resource_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"title","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":"","Extra":"","Field":"tag_line","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"user_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"username","Key":"","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"team_member_user_ids","Key":"","Null":"NO","Type":"blob"},{"Default":"visible","Extra":"","Field":"resource_state","Key":"","Null":"NO","Type":"enum('visible','moderated','deleted')"},{"Default":null,"Extra":"","Field":"resource_type","Key":"","Null":"NO","Type":"varchar(25)"},{"Default":null,"Extra":"","Field":"resource_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"resource_category_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"current_version_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"description_update_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"discussion_thread_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"external_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":"","Extra":"","Field":"external_purchase_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":"0.00","Extra":"","Field":"price","Key":"","Null":"NO","Type":"decimal(10,2) unsigned"},{"Default":"","Extra":"","Field":"currency","Key":"","Null":"NO","Type":"varchar(3)"},{"Default":"0","Extra":"","Field":"view_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"download_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_sum","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"rating_avg","Key":"","Null":"NO","Type":"float unsigned"},{"Default":"0","Extra":"","Field":"rating_weighted","Key":"MUL","Null":"NO","Type":"float unsigned"},{"Default":null,"Extra":"","Field":"rating_split","Key":"","Null":"YES","Type":"blob"},{"Default":"0","Extra":"","Field":"update_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"review_count","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"last_update","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"alt_support_url","Key":"","Null":"NO","Type":"varchar(500)"},{"Default":null,"Extra":"","Field":"custom_fields","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"prefix_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"icon_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"icon_optimized","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"tags","Key":"","Null":"NO","Type":"mediumblob"},{"Default":"0","Extra":"","Field":"featured","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_resource_field":[{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":"above_info","Extra":"","Field":"display_group","Key":"MUL","Null":"NO","Type":"varchar(25)"},{"Default":"1","Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"textbox","Extra":"","Field":"field_type","Key":"","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"field_choices","Key":"","Null":"NO","Type":"blob"},{"Default":"none","Extra":"","Field":"match_type","Key":"","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"match_params","Key":"","Null":"NO","Type":"blob"},{"Default":"0","Extra":"","Field":"max_length","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"required","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"display_template","Key":"","Null":"NO","Type":"text"},{"Default":null,"Extra":"","Field":"wrapper_template","Key":"","Null":"NO","Type":"text"},{"Default":"1","Extra":"","Field":"viewable_resource","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_rm_resource_field_value":[{"Default":null,"Extra":"","Field":"resource_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"field_id","Key":"PRI","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"field_value","Key":"","Null":"NO","Type":"mediumtext"}],"xf_rm_resource_prefix":[{"Default":null,"Extra":"auto_increment","Field":"prefix_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"prefix_group_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"display_order","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"materialized_order","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"","Extra":"","Field":"css_class","Key":"","Null":"NO","Type":"varchar(50)"},{"Default":null,"Extra":"","Field":"allowed_user_group_ids","Key":"","Null":"NO","Type":"blob"}],"xf_tag":[{"Default":null,"Extra":"auto_increment","Field":"tag_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"tag","Key":"UNI","Null":"NO","Type":"varchar(100)"},{"Default":null,"Extra":"","Field":"tag_url","Key":"UNI","Null":"NO","Type":"varchar(100)"},{"Default":"0","Extra":"","Field":"use_count","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"last_use_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":"0","Extra":"","Field":"permanent","Key":"","Null":"NO","Type":"tinyint(3) unsigned"}],"xf_tag_content":[{"Default":null,"Extra":"auto_increment","Field":"tag_content_id","Key":"PRI","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"content_type","Key":"MUL","Null":"NO","Type":"varbinary(25)"},{"Default":null,"Extra":"","Field":"content_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"tag_id","Key":"MUL","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"add_user_id","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"add_date","Key":"","Null":"NO","Type":"int(10) unsigned"},{"Default":null,"Extra":"","Field":"visible","Key":"","Null":"NO","Type":"tinyint(3) unsigned"},{"Default":null,"Extra":"","Field":"content_date","Key":"","Null":"NO","Type":"int(10) unsigned"}]},"source":{"abstract_field_entity":{"bytes":13332,"hits":[{"line":14,"text":"* COLUMNS"},{"line":15,"text":"* @property string $field_id"},{"line":16,"text":"* @property int $display_order"},{"line":17,"text":"* @property string $field_type"},{"line":18,"text":"* @property array $field_choices"},{"line":19,"text":"* @property string $match_type"},{"line":20,"text":"* @property array $match_params"},{"line":21,"text":"* @property int $max_length"},{"line":22,"text":"* @property bool $required"},{"line":24,"text":"* @property string $display_group"},{"line":25,"text":"* @property string $user_editable"},{"line":49,"text":"return static::getPhrasePrefix() . '_' . ($title ? 'title' : 'desc') . '.' . $this->field_id;"},{"line":91,"text":"if (isset($types[$this->field_type]))"},{"line":93,"text":"$type = $types[$this->field_type]['type'];"},{"line":104,"text":"if (!isset($this->field_choices[$choice]))"},{"line":126,"text":"return static::getPhrasePrefix() . '_' . 'choice' . '.' . $this->field_id . '_' . $choice;"},{"line":156,"text":"$this->error(\\XF::phrase('please_enter_text_for_each_choice'), 'field_choices');"},{"line":162,"text":"$this->error(\\XF::phrase('please_enter_an_id_using_only_alphanumeric'), 'field_choices');"},{"line":289,"text":"protected function _preSave()"},{"line":291,"text":"if ($this->isUpdate() && $this->isChanged('field_id'))"},{"line":293,"text":"$this->error('The field ID cannot be changed once set.', 'field_id');"},{"line":296,"text":"if ($this->isChanged(['match_type', 'match_params']))"},{"line":298,"text":"$validateMatchTypeMethod = '_validateMatchType' . Php::camelCase($this->get('match_type'));"},{"line":301,"text":"$matchParams = $this->match_params;"},{"line":304,"text":"$this->match_params = $matchParams;"},{"line":308,"text":"$this->error($error, 'match_params');"},{"line":313,"text":"if ($this->isUpdate() && $this->isChanged('field_type'))"},{"line":316,"text":"if ($typeMap[$this->get('field_type')]['compatible'] != $typeMap[$this->getExistingValue('field_type')]['compatible'])"},{"line":318,"text":"$this->error(\\XF::phrase('you_may_not_change_field_to_different_type_after_it_has_been_created'), 'field_type');"},{"line":324,"text":"if (($this->isInsert() && !$this->field_choices) || (is_array($this->field_choices) && !$this->field_choices))"},{"line":326,"text":"$this->error(\\XF::phrase('please_enter_at_least_one_choice'), 'field_choices', false);"},{"line":331,"text":"protected function _postSave()"},{"line":333,"text":"if ($this->isChanged('field_choices'))"},{"line":338,"text":"$newValues = $this->getValue('field_choices');"},{"line":339,"text":"$oldValues = $this->getExistingValue('field_choices');"},{"line":373,"text":"$phrase->save(true, false);"},{"line":390,"text":"$this->deleteChoicePhrases(array_keys($this->field_choices));"},{"line":411,"text":"\\XF::runOnce('rebuildFieldCache' . $this->field_id, function ()"},{"line":422,"text":"* @api-out str $field_id"},{"line":425,"text":"* @api-out int $display_order"},{"line":426,"text":"* @api-out str $field_type"},{"line":427,"text":"* @api-out object $field_choices For choice types, an ordered list of choices, with \"option\" and \"name\" keys for each."},{"line":428,"text":"* @api-out str $match_type"},{"line":429,"text":"* @api-out array $match_params"},{"line":430,"text":"* @api-out int $max_length"},{"line":431,"text":"* @api-out bool $required"},{"line":432,"text":"* @api-out str $display_group If this field type supports grouping, the group this field belongs to."},{"line":446,"text":"foreach ($this->field_choices AS $option => $printable)"},{"line":453,"text":"$result->field_choices = $choices;"},{"line":456,"text":"$result->match_params = (object) $this->match_params;"},{"line":463,"text":"'has_user_editable' => false,"},{"line":464,"text":"'has_user_editable_once' => false,"},{"line":472,"text":"$structure->primaryKey = 'field_id';"},{"line":473,"text":"$structure->columns = ["},{"line":474,"text":"'field_id' => ['type' => self::STR, 'maxLength' => 25,"},{"line":475,"text":"'required' => 'please_enter_valid_field_id',"},{"line":476,"text":"'unique' => 'field_ids_must_be_unique',"},{"line":480,"text":"'display_order' => ['type' => self::UINT, 'default' => 1, 'api' => true],"},{"line":481,"text":"'field_type' => ['type' => self::STR, 'default' => 'textbox',"},{"line":485,"text":"'field_choices' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":486,"text":"'match_type' => ['type' => self::STR, 'default' => 'none',"},{"line":490,"text":"'match_params' => ['type' => self::JSON_ARRAY, 'default' => []],"},{"line":491,"text":"'max_length' => ['type' => self::UINT, 'default' => 0, 'api' => true],"},{"line":492,"text":"'required' => ['type' => self::BOOL, 'default' => false, 'api' => true],"},{"line":499,"text":"$structure->columns['display_group'] = ['type' => self::STR, 'default' => $firstOption,"},{"line":504,"text":"if ($options['has_user_editable'])"},{"line":506,"text":"$userEditAllowedValues = $options['has_user_editable_once'] ? ['yes', 'once', 'never'] : ['yes', 'never'];"},{"line":507,"text":"$structure->columns['user_editable'] = ['type' => self::STR, 'default' => 'yes',"},{"line":513,"text":"$structure->columns['moderator_editable'] = ['type' => self::BOOL, 'default' => true];"},{"line":517,"text":"$structure->columns['editable_user_group_ids'] = ["},{"line":529,"text":"$structure->columns['wrapper_template'] = ['type' => self::STR, 'default' => ''];"},{"line":544,"text":"['title', '=', $phrasePrefix . '_title.', '$field_id'],"},{"line":552,"text":"['title', '=', $phrasePrefix . '_desc.', '$field_id'],"}],"present":true,"sha256":"f5a7d03f0b656ecae7a225aafe363eb79a925054a3d2fefdcc0bdf4e6a41695f"},"category_admin":{"bytes":5702,"hits":[{"line":59,"text":"$availableFields = $availableFields->pluckNamed('title', 'field_id');"},{"line":87,"text":"protected function categorySaveProcess(\\XFRM\\Entity\\Category $category)"},{"line":93,"text":"'display_order' => 'uint',"},{"line":100,"text":"'always_moderate_create' => 'bool',"},{"line":101,"text":"'always_moderate_update' => 'bool',"},{"line":102,"text":"'min_tags' => 'uint',"},{"line":110,"text":"$form->basicEntitySave($category, $entityInput);"},{"line":117,"text":"$repo->updateContentAssociations($category->resource_category_id, $prefixIds);"},{"line":120,"text":"$fieldIds = $this->filter('available_fields', 'array-str');"},{"line":125,"text":"$repo->updateContentAssociations($category->resource_category_id, $fieldIds);"},{"line":131,"text":"public function actionSave(ParameterBag $params)"},{"line":144,"text":"$this->categorySaveProcess($category)->run();"},{"line":184,"text":"public function actionPermissionsSave(ParameterBag $params)"},{"line":186,"text":"return $this->getCategoryPermissionPlugin()->actionSave($params);"}],"present":true,"sha256":"4896715a8a0d00b8f4bf09dd0e28458f410ef8b27d1125711a5d1da3bc661ad6"},"category_entity":{"bytes":15749,"hits":[{"line":6,"text":"use XF\\Draft;"},{"line":12,"text":"use XF\\Entity\\ViewableInterface;"},{"line":18,"text":"* COLUMNS"},{"line":38,"text":"* @property bool $always_moderate_create"},{"line":39,"text":"* @property bool $always_moderate_update"},{"line":40,"text":"* @property int $min_tags"},{"line":45,"text":"* @property int $display_order"},{"line":53,"text":"* @property-read Draft $draft_resource"},{"line":58,"text":"* @property-read AbstractCollection<\\XF\\Entity\\Draft> $DraftResources"},{"line":61,"text":"class Category extends AbstractCategoryTree implements LinkableInterface, ViewableInterface"},{"line":63,"text":"protected $_viewableDescendants = [];"},{"line":70,"text":"public function canViewDeletedResources()"},{"line":72,"text":"return $this->hasPermission('viewDeleted');"},{"line":75,"text":"public function canViewModeratedResources()"},{"line":77,"text":"return $this->hasPermission('viewModerated');"},{"line":173,"text":"public function getViewableDescendants()"},{"line":176,"text":"if (!isset($this->_viewableDescendants[$userId]))"},{"line":178,"text":"$viewable = $this->repository('XFRM:Category')->getViewableCategories($this);"},{"line":179,"text":"$this->_viewableDescendants[$userId] = $viewable->toArray();"},{"line":182,"text":"return $this->_viewableDescendants[$userId];"},{"line":185,"text":"public function cacheViewableDescendents(array $descendents, $userId = null)"},{"line":192,"text":"$this->_viewableDescendants[$userId] = $descendents;"},{"line":196,"text":"* @return Draft"},{"line":198,"text":"public function getDraftResource()"},{"line":200,"text":"return Draft::createFromEntity($this, 'DraftResources');"},{"line":309,"text":"return 'visible';"},{"line":314,"text":"return 'moderated';"},{"line":319,"text":"return $this->always_moderate_update ? 'moderated' : 'visible';"},{"line":323,"text":"return $this->always_moderate_create ? 'moderated' : 'visible';"},{"line":405,"text":"AND resource_state = 'visible'"},{"line":417,"text":"AND resource.resource_state = 'visible'\","},{"line":430,"text":"AND resource_state = 'visible'"},{"line":448,"text":"protected function _preSave()"},{"line":547,"text":"public static function getStructure(Structure $structure)"},{"line":553,"text":"$structure->columns = ["},{"line":556,"text":"'required' => 'please_enter_valid_title', 'api' => true,"},{"line":576,"text":"'always_moderate_create' => ['type' => self::BOOL, 'default' => false],"},{"line":577,"text":"'always_moderate_update' => ['type' => self::BOOL, 'default' => false],"},{"line":578,"text":"'min_tags' => ['type' => self::UINT, 'forced' => true, 'default' => 0, 'max' => 100, 'api' => true],"},{"line":585,"text":"'draft_resource' => true,"},{"line":603,"text":"'DraftResources' => ["},{"line":604,"text":"'entity' => 'XF:Draft',"},{"line":607,"text":"['draft_key', '=', 'xfrm-category-', '$resource_category_id'],"}],"present":true,"sha256":"73763c6c3b7d56da646cf04b1f19106b33643daa9bbb6e775141e692b9cf36c2"},"category_field_repo":{"bytes":729,"hits":[{"line":30,"text":"$category->saveIfChanged();"}],"present":true,"sha256":"533bd6390f94189f752059bfa611e53e6ca4711c72a18c7b34322cecc9fe2228"},"relevant_files":["src/addons/XFRM/Entity/Category.php","src/addons/XFRM/Entity/CategoryField.php","src/addons/XFRM/Entity/CategoryPrefix.php","src/addons/XFRM/Entity/CategoryReviewField.php","src/addons/XFRM/Entity/CategoryWatch.php","src/addons/XFRM/Entity/ResourceDownload.php","src/addons/XFRM/Entity/ResourceField.php","src/addons/XFRM/Entity/ResourceFieldValue.php","src/addons/XFRM/Entity/ResourceItem.php","src/addons/XFRM/Entity/ResourcePrefix.php","src/addons/XFRM/Entity/ResourcePrefixGroup.php","src/addons/XFRM/Entity/ResourceRating.php","src/addons/XFRM/Entity/ResourceReviewField.php","src/addons/XFRM/Entity/ResourceReviewFieldValue.php","src/addons/XFRM/Entity/ResourceTeamMember.php","src/addons/XFRM/Entity/ResourceUpdate.php","src/addons/XFRM/Entity/ResourceVersion.php","src/addons/XFRM/Entity/ResourceWatch.php","src/addons/XFRM/Repository/Category.php","src/addons/XFRM/Repository/CategoryField.php","src/addons/XFRM/Repository/CategoryPrefix.php","src/addons/XFRM/Repository/CategoryReviewField.php","src/addons/XFRM/Repository/CategoryWatch.php","src/addons/XFRM/Repository/ResourceField.php","src/addons/XFRM/Repository/ResourceItem.php","src/addons/XFRM/Repository/ResourcePrefix.php","src/addons/XFRM/Repository/ResourceRating.php","src/addons/XFRM/Repository/ResourceReviewField.php","src/addons/XFRM/Repository/ResourceUpdate.php","src/addons/XFRM/Repository/ResourceVersion.php","src/addons/XFRM/Repository/ResourceWatch.php"],"resource_create_service":{"bytes":9106,"hits":[{"line":85,"text":"$this->resource->addCascadedSave($this->description);"},{"line":88,"text":"$this->resource->addCascadedSave($this->version);"},{"line":97,"text":"$this->resource->resource_state = $this->category->getNewContentState();"},{"line":98,"text":"$this->description->message_state = 'visible';"},{"line":137,"text":"public function setTitle($title)"},{"line":143,"text":"public function setContent($title, $description, $format = true)"},{"line":145,"text":"$this->setTitle($title);"},{"line":168,"text":"public function setDescriptionAttachmentHash($hash)"},{"line":227,"text":"if ($this->resource->resource_state == 'visible' && \\XF::visitor()->isSpamCheckRequired())"},{"line":257,"text":"$resource->preSave();"},{"line":292,"text":"protected function _save()"},{"line":302,"text":"$resource->save(true, false);"},{"line":303,"text":"// update and version will also be saved now"},{"line":316,"text":"->setContentId($resource->resource_id, true)"},{"line":317,"text":"->save($this->performValidations);"},{"line":325,"text":"$thread = $creator->save();"},{"line":344,"text":"$creator->setContent($this->resource->getExpectedThreadTitle(), $this->getThreadMessage(), false);"},{"line":350,"text":"$thread->discussion_state = $this->resource->resource_state;"},{"line":385,"text":"if ($this->resource->isVisible())"}],"present":true,"sha256":"2c72b9811646927b8abc0ffaee0b2d0358576b4b5cfc359da6fc5c7c13d9e66c"},"resource_edit_service":{"bytes":5900,"hits":[{"line":59,"text":"public function setTitle($title)"},{"line":62,"text":"$this->getDescriptionEditor()->setTitle($title);"},{"line":133,"text":"$this->resource->addCascadedSave($currentVersion);"},{"line":148,"text":"$this->resource->addCascadedSave($currentVersion);"},{"line":217,"text":"$resource->preSave();"},{"line":252,"text":"protected function _save()"},{"line":256,"text":"$resource->save(true, false);"},{"line":260,"text":"$this->descriptionEditor->save();"},{"line":265,"text":"$this->tagChanger->save($this->performValidations);"},{"line":268,"text":"if ($resource->isVisible() && $this->alert && $resource->user_id != \\XF::visitor()->user_id)"}],"present":true,"sha256":"b837cb9e5883ad74cc46c417bf5f5490506aecc26a3e458c035078e44964931d"},"resource_field_admin":{"bytes":1905,"hits":[{"line":32,"text":"return 'xfrm_resource_field';"},{"line":59,"text":"protected function saveAdditionalData(FormAction $form, \\XF\\Entity\\AbstractField $field)"},{"line":62,"text":"'viewable_resource' => 'bool',"},{"line":65,"text":"$form->basicEntitySave($field, $input);"}],"present":true,"sha256":"70af86b0164a4d9089bf740857557a5d1d26063b7b7496ae78cd7c7e2e64f9c3"},"resource_field_entity":{"bytes":2019,"hits":[{"line":12,"text":"* COLUMNS"},{"line":13,"text":"* @property string $field_id"},{"line":14,"text":"* @property int $display_order"},{"line":15,"text":"* @property string $field_type"},{"line":16,"text":"* @property array|null $field_choices"},{"line":17,"text":"* @property string $match_type"},{"line":18,"text":"* @property array|null $match_params"},{"line":19,"text":"* @property int $max_length"},{"line":20,"text":"* @property bool $required"},{"line":22,"text":"* @property string $display_group"},{"line":24,"text":"* @property bool $viewable_resource"},{"line":44,"text":"return 'xfrm_resource_field';"},{"line":53,"text":"$this->db()->delete('xf_rm_resource_field_value', 'field_id = ?', $this->field_id);"},{"line":58,"text":"public static function getStructure(Structure $structure)"},{"line":62,"text":"'xf_rm_resource_field',"},{"line":73,"text":"$structure->columns += ["},{"line":74,"text":"'viewable_resource' => ['type' => self::BOOL, 'default' => true],"},{"line":80,"text":"'conditions' => 'field_id',"}],"present":true,"sha256":"c4cb2a33b80db12e54a010609140e1c9735b9055812b0d70d64827fe16c34246"},"resource_item_controller":{"bytes":49966,"hits":[{"line":6,"text":"use XF\\ControllerPlugin\\DraftPlugin;"},{"line":72,"text":"$viewableCategoryIds = $categoryParams['categories']->keys();"},{"line":74,"text":"$listParams = $overviewPlugin->getCoreListData($viewableCategoryIds);"},{"line":103,"text":"$viewableCategoryIds = $this->getCategoryRepo()->getViewableCategoryIds();"},{"line":106,"text":"$finder = $ratingRepo->findLatestReviews($viewableCategoryIds);"},{"line":116,"text":"$reviews = $reviews->filterViewable();"},{"line":140,"text":"$categories = $categoryRepo->getViewableCategories();"},{"line":186,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":230,"text":"$authorOthers = $authorOthers->filterViewable();"},{"line":301,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":316,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":339,"text":"return $this->view('XFRM:ResourceItem\\Field', 'xfrm_resource_field', $viewParams);"},{"line":346,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":391,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":510,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":587,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":597,"text":"$resource = $this->assertViewableResource($params->resource_id, $this->getResourceViewExtraWith());"},{"line":638,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":716,"text":"$resource = $this->assertViewableResource($params->resource_id, $extraWith);"},{"line":764,"text":"$rating = $rater->save();"},{"line":851,"text":"$updateCreator->setTitle($this->filter('update_title', 'str'));"},{"line":868,"text":"$updater->getResource()->draft_update->delete();"},{"line":873,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":893,"text":"$teamManager->save();"},{"line":913,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":947,"text":"$teamManager->save();"},{"line":971,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":989,"text":"$updater->save();"},{"line":1006,"text":"$draft = $resource->draft_update;"},{"line":1010,"text":"$updateAttachData = $attachmentRepo->getEditorData('resource_update', $resource, $draft->attachment_hash);"},{"line":1029,"text":"public function actionPostUpdateDraft(ParameterBag $params)"},{"line":1031,"text":"$this->assertDraftsEnabled();"},{"line":1033,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1044,"text":"/** @var DraftPlugin $draftPlugin */"},{"line":1045,"text":"$draftPlugin = $this->plugin('XF:Draft');"},{"line":1046,"text":"return $draftPlugin->actionDraftMessage($resource->draft_update, $extraData, 'update_message');"},{"line":1051,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1062,"text":"$updateCreator->setTitle($this->filter('update_title', 'str'));"},{"line":1108,"text":"$editor->setTitle($this->filter('title', 'str'));"},{"line":1162,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1180,"text":"$editor->save();"},{"line":1229,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1267,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1352,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1367,"text":"$typeChanger->save();"},{"line":1429,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1455,"text":"$categories = $categoryRepo->getViewableCategories();"},{"line":1469,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1486,"text":"$tagger->save();"},{"line":1494,"text":"$reply->setJsonParam('message', \\XF::phrase('your_changes_have_been_saved'));"},{"line":1518,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1562,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1600,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1640,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1653,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1700,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1709,"text":"'resource_state'"},{"line":1715,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1732,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1747,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1774,"text":"$resource = $this->assertViewableResource($params->resource_id);"},{"line":1828,"text":"protected function assertViewableResource($resourceId, array $extraWith = [])"},{"line":1861,"text":"$this->setContentKey('resource-' . $resource->resource_id);"},{"line":1899,"text":"foreach ($resources->filterViewable() AS $id => $resource)"}],"present":true,"sha256":"78aaaaaf3ad95aedde7b4a1e4d8ec026b9a305dd4a2a23172d28a756244b9f67"},"resource_item_entity":{"bytes":55733,"hits":[{"line":8,"text":"use XF\\Draft;"},{"line":24,"text":"use XF\\Entity\\ViewableInterface;"},{"line":40,"text":"* COLUMNS"},{"line":49,"text":"* @property string $resource_state"},{"line":88,"text":"* @property-read Draft $draft_update"},{"line":102,"text":"* @property-read AbstractCollection<\\XF\\Entity\\Draft> $DraftUpdates"},{"line":106,"text":"class ResourceItem extends Entity implements ContainableInterface, DatableInterface, LinkableInterface, ViewableInterface"},{"line":132,"text":"public function getStructuredData(): array"},{"line":156,"text":"'discussionUrl' => $this->hasViewableDiscussion()"},{"line":265,"text":"if ($this->resource_state == 'moderated')"},{"line":268,"text":"!$this->hasPermission('viewModerated')"},{"line":276,"text":"else if ($this->resource_state == 'deleted')"},{"line":278,"text":"if (!$this->hasPermission('viewDeleted'))"},{"line":288,"text":"public function canViewDeletedContent()"},{"line":290,"text":"return $this->hasPermission('viewDeleted');"},{"line":293,"text":"public function canViewModeratedContent()"},{"line":296,"text":"if ($this->hasPermission('viewModerated'))"},{"line":336,"text":"public function canRate($checkDownloadIfRequired = true, &$error = null)"},{"line":338,"text":"if (!$this->isVisible())"},{"line":355,"text":"if ($checkDownloadIfRequired && $this->isDownloadable() && $this->app()->options()->xfrmRequireDownloadToRate)"},{"line":368,"text":"public function canRatePreReg($checkDownloadIfRequired = true)"},{"line":378,"text":"function () use ($checkDownloadIfRequired) { return $this->canRate($checkDownloadIfRequired); }"},{"line":564,"text":"|| !$this->isVisible()"},{"line":635,"text":"return $this->isVisible();"},{"line":684,"text":"&& $this->resource_state == 'visible'"},{"line":737,"text":"public function isVisible()"},{"line":739,"text":"return ($this->resource_state == 'visible');"},{"line":859,"text":"public function hasViewableDiscussion()"},{"line":923,"text":"$state = $currentValues ? $this->getValue('resource_state') : $this->getExistingValue('resource_state');"},{"line":933,"text":"if ($state != 'visible' && $options->xfrmResourceDeleteThreadAction['update_title'])"},{"line":964,"text":"}, 'save');"},{"line":984,"text":"}, 'save');"},{"line":993,"text":"* @return Draft"},{"line":995,"text":"public function getDraftUpdate()"},{"line":997,"text":"return Draft::createFromEntity($this, 'DraftUpdates');"},{"line":1055,"text":"if (!$this->canViewDeletedContent() && !$this->canViewModeratedContent())"},{"line":1072,"text":"if (!$this->canViewDeletedContent())"},{"line":1139,"text":"AND message_state = 'visible'"},{"line":1160,"text":"AND message_state = 'visible'"},{"line":1173,"text":"AND rating_state = 'visible'"},{"line":1187,"text":"AND rating_state = 'visible'"},{"line":1218,"text":"AND version_state = 'visible'"},{"line":1275,"text":"protected function _preSave()"},{"line":1310,"text":"protected function _postSave()"},{"line":1312,"text":"$visibilityChange = $this->isStateChanged('resource_state', 'visible');"},{"line":1313,"text":"$approvalChange = $this->isStateChanged('resource_state', 'moderated');"},{"line":1314,"text":"$deletionChange = $this->isStateChanged('resource_state', 'deleted');"},{"line":1320,"text":"$this->resourceMadeVisible();"},{"line":1354,"text":"if ($this->resource_state == 'visible')"},{"line":1356,"text":"$this->resourceInsertedVisible();"},{"line":1377,"text":"$oldDiscussion->save(false, false);"},{"line":1388,"text":"$this->Discussion->save(false, false);"},{"line":1401,"text":"$this->Discussion->saveIfChanged($saved, false, false);"},{"line":1410,"text":"$approvalQueue->save();"},{"line":1416,"text":"$delLog->save();"},{"line":1426,"text":"$this->_postSaveBookmarks();"},{"line":1429,"text":"protected function resourceMadeVisible()"},{"line":1440,"text":"$thread->discussion_state = 'visible';"},{"line":1449,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1468,"text":"$thread->discussion_state = 'deleted';"},{"line":1477,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1494,"text":"protected function resourceInsertedVisible()"},{"line":1512,"text":"if ($this->resource_state == 'visible')"},{"line":1581,"text":"if ($this->resource_state == 'visible')"},{"line":1584,"text":"$category->save();"},{"line":1587,"text":"if ($this->getExistingValue('resource_state') == 'visible')"},{"line":1594,"text":"$oldCategory->save();"},{"line":1605,"text":"if ($this->resource_state == 'visible' && $thread->discussion_state == 'deleted')"},{"line":1607,"text":"// presumably the thread was soft deleted by being moved to a category without a thread"},{"line":1608,"text":"$thread->discussion_state = 'visible';"},{"line":1614,"text":"$thread->discussion_state = 'deleted';"},{"line":1617,"text":"$thread->saveIfChanged($saved, false, false);"},{"line":1623,"text":"// check for entering/leaving visible"},{"line":1624,"text":"$visibilityChange = $this->isStateChanged('resource_state', 'visible');"},{"line":1628,"text":"$category->save();"},{"line":1633,"text":"$category->save();"},{"line":1635,"text":"else if ($this->isUpdate() && $this->resource_state == 'visible')"},{"line":1638,"text":"$category->save();"},{"line":1644,"text":"if ($this->resource_state == 'visible')"},{"line":1649,"text":"if ($this->Category && $this->resource_state == 'visible')"},{"line":1652,"text":"$this->Category->save();"},{"line":1655,"text":"if ($this->resource_state == 'deleted' && $this->DeletionLog)"},{"line":1660,"text":"if ($this->resource_state == 'moderated' && $this->ApprovalQueue)"},{"line":1744,"text":"if ($this->resource_state == 'deleted')"},{"line":1749,"text":"$this->resource_state = 'deleted';"},{"line":1756,"text":"$this->save();"},{"line":1820,"text":"'discussionUrl' => $this->hasViewableDiscussion()"},{"line":2009,"text":"public static function getStructure(Structure $structure)"},{"line":2015,"text":"$structure->columns = ["},{"line":2018,"text":"'required' => 'please_enter_valid_title',"},{"line":2023,"text":"'required' => 'xfrm_please_enter_valid_tag_line',"},{"line":2027,"text":"'user_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":2029,"text":"'required' => 'please_enter_valid_name',"},{"line":2034,"text":"'resource_state' => ['type' => self::STR, 'default' => 'visible',"},{"line":2035,"text":"'allowedValues' => ['visible', 'moderated', 'deleted'], 'api' => true,"},{"line":2037,"text":"'resource_type' => ['type' => self::STR, 'required' => true,"},{"line":2041,"text":"'resource_category_id' => ['type' => self::UINT, 'required' => true, 'api' => true],"},{"line":2084,"text":"'draft_update' => true,"},{"line":2088,"text":"'XF:Taggable' => ['stateField' => 'resource_state'],"},{"line":2090,"text":"'checkForUpdates' => ['title', 'resource_category_id', 'user_id', 'prefix_id', 'tags', 'resource_state'],"},{"line":2096,"text":"'checkForUpdates' => ['resource_category_id', 'resource_state', 'prefix_id'],"},{"line":2103,"text":"'stateField' => 'resource_state',"},{"line":2106,"text":"'valueTable' => 'xf_rm_resource_field_value',"},{"line":2113,"text":"'stateField' => 'resource_state',"},{"line":2189,"text":"'DraftUpdates' => ["},{"line":2190,"text":"'entity' => 'XF:Draft',"},{"line":2193,"text":"['draft_key', '=', 'xfrm-resource-', '$resource_id'],"}],"present":true,"sha256":"703773471dd35c876a0fed578a60dfc51e1dafc9520ad1493282b50fd9e05262"}},"xfrm_tables":{"xf_draft":true,"xf_rm_category":true,"xf_rm_category_field":true,"xf_rm_category_prefix":true,"xf_rm_resource":true,"xf_rm_resource_field":true,"xf_rm_resource_field_value":true,"xf_rm_resource_prefix":true,"xf_tag":true,"xf_tag_content":true}} -NEWFI95_DECISION=PASS_KB204_XFRM_CONTRACT_AUDIT_CAPTURED -NEWFI95_NEXT_GATE=BUILD_KB204_TAXONOMY_EDITORIAL_CHANGE_FROM_EXACT_XFRM_CONTRACT +NEWFI96_BEGIN +COMMAND_ID=NEWFI-260918-NEWFDOM-KB204-APPLY96 +NEWFI96_GIT_PRESTATE={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0","remote":"origin","remote_head":"4a7b85eca9c1d6393dbf15f9c9bfa4703072beb0"} +NEWFI96_PRESTATE={"production":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0,"tag_content":0,"tags":0},"staging":{"categories":1,"category_fields":0,"drafts":0,"resource_fields":0,"resources":0,"tag_content":0,"tags":0},"tagging":"0"} +NEWFI96_BACKUPS_2OF2=PASS +NEWFI96_STAGING_APPLY1=PASS +NEWFI96_STAGING_PLANNED_ROLLBACK=PASS +NEWFI96_STAGING_REAPPLY=PASS +NEWFI96_PRODUCTION_APPLY=PASS +NEWFI96_SAFE_REPORT={"changes_made":true,"command_id":"NEWFI-260918-NEWFDOM-KB204-APPLY96","decision":"FAIL_KB204_APPLY96_HOLD","error":"RuntimeError:PUBLIC_TAXONOMY_TITLES:{\"Вода и безопасность\":0,\"Воспитание и поведение\":0,\"Выставки и хендлинг\":0,\"Документы и правила\":0,\"Здоровье и ветеринария\":0,\"О породе и стандарте\":0,\"Питание\":0,\"Разведение и генетика\":0,\"Уход и груминг\":0,\"Щенок и взросление\":0}","push_outcome_uncertain":false,"rollback_restored":true,"rollback_started":true} +NEWFI96_DECISION=FAIL_KB204_APPLY96_HOLD +NEWFI96_NEXT_GATE=READ_EXACT_FAILURE_BEFORE_ANY_RETRY +HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"NEWFI-260918-NEWFDOM-KB204-APPLY96","rollback_restored":true,"rollback_started":true,"status":"FAIL","version":1} OUTPUT_END CHAT_OUTPUT_END