From ca92d836046d692e729a48e02855e3bcc6fd2c73 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Wed, 9 Sep 2026 10:39:01 +0000 Subject: [PATCH] runtime: publish SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042 --- ...T-260909-GRAM-XF-STAGING-FORENSIC-042.json | 38 +++++++++++++++ ...RT-260909-GRAM-XF-STAGING-FORENSIC-042.txt | 47 +++++++++++++++++++ runtime/latest.json | 16 +++---- runtime/latest.txt | 30 ++++++------ 4 files changed, 109 insertions(+), 22 deletions(-) create mode 100644 runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.json create mode 100644 runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.txt diff --git a/runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.json b/runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.json new file mode 100644 index 00000000..7099ba10 --- /dev/null +++ b/runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "gram-support-vm211-staging-forensic-corrected", + "started_at_utc": "2026-09-09T10:38:58Z", + "finished_at_utc": "2026-09-09T10:39:00Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "15b23b8177dd6de06c36b0bff7d6d33adb5d96f9f6016643f8795cfb1c404f88", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3", + "sanitized_output_sha256": "d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "SUPPORT042_BEGIN\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nSUPPORT042_SOURCE_POSTROLLBACK={\"source_exists\":false,\"tmp_exists\":false}\nSUPPORT042_QGA_STATE={\"exitcode\":0,\"state\":\"COMPLETE\"}\nSUPPORT042_VM211={\"addon_path\":{\"state\":\"ABSENT\"},\"cli\":{\"commands\":[\"xf:addon-disable\",\"xf:addon-enable\",\"xf:addon-install\",\"xf:addon-list\",\"xf:addon-rebuild\",\"xf:addon-uninstall\",\"xf:addon-upgrade\"],\"help\":{\"xf:addon-install\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--verbose\",\"--version\"],\"rc\":0},\"xf:addon-rebuild\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--verbose\",\"--version\"],\"rc\":0},\"xf:addon-uninstall\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--verbose\",\"--version\"],\"rc\":0},\"xf:addon-upgrade\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--skip-unavailable\",\"--verbose\",\"--version\"],\"rc\":0}},\"rc\":0},\"collection\":\"COMPLETE\",\"command_id\":\"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042\",\"datatype_contract\":{\"AbstractDataType.php\":{\"exists\":true,\"methods\":[[{\"line\":30,\"text\":\"\\tabstract public function getContainerTag();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\tabstract public function getChildTag();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":32,\"text\":\"\\tabstract public function getChildTag();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":174,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":175,\"text\":\"\\t{\"},{\"line\":176,\"text\":\"\\t\\treturn [];\"},{\"line\":177,\"text\":\"\\t}\"}],[{\"line\":184,\"text\":\"\\tprotected function exportArrayToAttributes(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":185,\"text\":\"\\t{\"},{\"line\":186,\"text\":\"\\t\\tforeach ($entity->$attr AS $key => $value)\"},{\"line\":187,\"text\":\"\\t\\t{\"},{\"line\":188,\"text\":\"\\t\\t\\tif ($value === '')\"},{\"line\":189,\"text\":\"\\t\\t\\t{\"},{\"line\":190,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":191,\"text\":\"\\t\\t\\t}\"},{\"line\":192,\"text\":\"\\t\\t\\tif (is_bool($value))\"},{\"line\":193,\"text\":\"\\t\\t\\t{\"},{\"line\":194,\"text\":\"\\t\\t\\t\\t$value = $value ? 1 : 0;\"},{\"line\":195,\"text\":\"\\t\\t\\t}\"},{\"line\":196,\"text\":\"\\t\\t\\t$tag->setAttribute($attr . '_' . $key, $value);\"},{\"line\":197,\"text\":\"\\t\\t}\"},{\"line\":198,\"text\":\"\\t}\"}],[{\"line\":200,\"text\":\"\\tprotected function exportCdataToNewNode(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":201,\"text\":\"\\t{\"},{\"line\":202,\"text\":\"\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\"},{\"line\":203,\"text\":\"\\t\\t$this->exportCdata($newNode, $entity->{$attr});\"},{\"line\":204,\"text\":\"\\t\\t$tag->appendChild($newNode);\"},{\"line\":205,\"text\":\"\\t}\"}],[{\"line\":207,\"text\":\"\\tprotected function exportMappedAttributes(\\\\DOMElement $tag, Entity $entity)\"},{\"line\":208,\"text\":\"\\t{\"},{\"line\":209,\"text\":\"\\t\\tforeach ($this->getMappedAttributes() AS $attr)\"},{\"line\":210,\"text\":\"\\t\\t{\"},{\"line\":211,\"text\":\"\\t\\t\\t$value = $entity->getValue($attr);\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tif ($value !== '')\"},{\"line\":214,\"text\":\"\\t\\t\\t{\"},{\"line\":215,\"text\":\"\\t\\t\\t\\tif (is_bool($value))\"},{\"line\":216,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":217,\"text\":\"\\t\\t\\t\\t\\t$value = $value ? 1 : 0;\"},{\"line\":218,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":219,\"text\":\"\"},{\"line\":220,\"text\":\"\\t\\t\\t\\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\"},{\"line\":221,\"text\":\"\\t\\t\\t\\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\\\"]*$/si', $value))\"},{\"line\":222,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":223,\"text\":\"\\t\\t\\t\\t\\t// This exports CDATA, but does not escape `]]>` like \\\\XF\\\\Util\\\\XML::createDomCdataSection(),\"},{\"line\":224,\"text\":\"\\t\\t\\t\\t\\t// because it needs to be transparently importable.\"},{\"line\":225,\"text\":\"\\t\\t\\t\\t\\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\"},{\"line\":226,\"text\":\"\\t\\t\\t\\t\\t// and remove this attribute from exportMappedAttributes()\"},{\"line\":227,\"text\":\"\"},{\"line\":228,\"text\":\"\\t\\t\\t\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t\\t\\t\\t$newNode->appendChild(\"},{\"line\":231,\"text\":\"\\t\\t\\t\\t\\t\\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\"},{\"line\":232,\"text\":\"\\t\\t\\t\\t\\t);\"},{\"line\":233,\"text\":\"\"},{\"line\":234,\"text\":\"\\t\\t\\t\\t\\t$tag->appendChild($newNode);\"},{\"line\":235,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":236,\"text\":\"\\t\\t\\t\\telse\"},{\"line\":237,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":238,\"text\":\"\\t\\t\\t\\t\\t$tag->setAttribute($attr, $value);\"},{\"line\":239,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":240,\"text\":\"\\t\\t\\t}\"},{\"line\":241,\"text\":\"\\t\\t}\"},{\"line\":242,\"text\":\"\\t}\"}],[{\"line\":244,\"text\":\"\\tprotected function importMappedAttributes(\\\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\"},{\"line\":245,\"text\":\"\\t{\"},{\"line\":246,\"text\":\"\\t\\tif ($entity->exists() && $allowMaintained)\"},{\"line\":247,\"text\":\"\\t\\t{\"},{\"line\":248,\"text\":\"\\t\\t\\t$maintained = $this->getMaintainedAttributes();\"},{\"line\":249,\"text\":\"\\t\\t}\"},{\"line\":250,\"text\":\"\\t\\telse\"},{\"line\":251,\"text\":\"\\t\\t{\"},{\"line\":252,\"text\":\"\\t\\t\\t$maintained = [];\"},{\"line\":253,\"text\":\"\\t\\t}\"},{\"line\":254,\"text\":\"\"},{\"line\":255,\"text\":\"\\t\\tforeach ($this->getMappedAttributes() AS $attr)\"},{\"line\":256,\"text\":\"\\t\\t{\"},{\"line\":257,\"text\":\"\\t\\t\\tif (in_array($attr, $maintained))\"},{\"line\":258,\"text\":\"\\t\\t\\t{\"},{\"line\":259,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":260,\"text\":\"\\t\\t\\t}\"},{\"line\":261,\"text\":\"\"},{\"line\":262,\"text\":\"\\t\\t\\tif (self::USE_AUTO_CDATA)\"},{\"line\":263,\"text\":\"\\t\\t\\t{\"},{\"line\":264,\"text\":\"\\t\\t\\t\\tif (isset($el[$attr]))\"},{\"line\":265,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":266,\"text\":\"\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\"},{\"line\":267,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":268,\"text\":\"\\t\\t\\t\\telse if (isset($el->{$attr}))\"},{\"line\":269,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":270,\"text\":\"\\t\\t\\t\\t\\t$entity->$attr = (string) $el->{$attr};\"},{\"line\":271,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":272,\"text\":\"\\t\\t\\t}\"},{\"line\":273,\"text\":\"\\t\\t\\telse\"},{\"line\":274,\"text\":\"\\t\\t\\t{\"},{\"line\":275,\"text\":\"\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\"},{\"line\":276,\"text\":\"\\t\\t\\t}\"},{\"line\":277,\"text\":\"\\t\\t}\"},{\"line\":278,\"text\":\"\\t}\"}],[{\"line\":302,\"text\":\"\\tprotected function exportCdata(\\\\DOMElement $parent, $value)\"},{\"line\":303,\"text\":\"\\t{\"},{\"line\":304,\"text\":\"\\t\\t$cdata = Xml::createDomCdataSection($parent->ownerDocument, $value);\"},{\"line\":305,\"text\":\"\\t\\t$parent->appendChild($cdata);\"},{\"line\":306,\"text\":\"\\t}\"}]],\"sha256\":\"a4f6ec14e4009be0029548b07272dc77c6ad96f4cca4e067a7d3ea0004126815\"},\"CodeEventListener.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'code_event_listeners';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'listener';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":40,\"text\":\"\\t}\"}],[{\"line\":42,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":47,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$existing = [];\"},{\"line\":53,\"text\":\"\\t\\tforeach ($this->findAllForType($addOnId)->fetch() AS $listener)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\t$existing[$listener->getAddOnUniqueKey()] = $listener;\"},{\"line\":56,\"text\":\"\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t$i = 0;\"},{\"line\":59,\"text\":\"\\t\\t$last = 0;\"},{\"line\":60,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":61,\"text\":\"\\t\\t{\"},{\"line\":62,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":63,\"text\":\"\"},{\"line\":64,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":65,\"text\":\"\\t\\t\\t{\"},{\"line\":66,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":67,\"text\":\"\\t\\t\\t}\"},{\"line\":68,\"text\":\"\"},{\"line\":69,\"text\":\"\\t\\t\\t$key = $this->getAddOnUniqueKeyFromXml($entry);\"},{\"line\":70,\"text\":\"\\t\\t\\t$entity = $existing[$key] ?? $this->create();\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":73,\"text\":\"\\t\\t\\t$entity->setOption('check_duplicate', false);\"},{\"line\":74,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":75,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":80,\"text\":\"\\t\\t\\t{\"},{\"line\":81,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":82,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":83,\"text\":\"\\t\\t\\t}\"},{\"line\":84,\"text\":\"\\t\\t}\"},{\"line\":85,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":86,\"text\":\"\\t}\"}],[{\"line\":127,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":128,\"text\":\"\\t{\"},{\"line\":129,\"text\":\"\\t\\treturn [\"},{\"line\":130,\"text\":\"\\t\\t\\t'event_id',\"},{\"line\":131,\"text\":\"\\t\\t\\t'execute_order',\"},{\"line\":132,\"text\":\"\\t\\t\\t'callback_class',\"},{\"line\":133,\"text\":\"\\t\\t\\t'callback_method',\"},{\"line\":134,\"text\":\"\\t\\t\\t'active',\"},{\"line\":135,\"text\":\"\\t\\t\\t'hint',\"},{\"line\":136,\"text\":\"\\t\\t\\t'description',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}]],\"sha256\":\"eba1c2560c9c5c48d1185886609203bf73665d664c2ae0f2db0ff17dbad574ab\"},\"ContentTypeField.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'content_type_fields';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'field';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['content_type', 'field_name'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $doc->createElement($this->getChildTag());\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":39,\"text\":\"\\t\\t\\t$node->appendChild($doc->createTextNode($entry->field_value));\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":42,\"text\":\"\\t\\t}\"},{\"line\":43,\"text\":\"\"},{\"line\":44,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":45,\"text\":\"\\t}\"}],[{\"line\":47,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":48,\"text\":\"\\t{\"},{\"line\":49,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":52,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":53,\"text\":\"\\t\\t{\"},{\"line\":54,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":55,\"text\":\"\\t\\t}\"},{\"line\":56,\"text\":\"\"},{\"line\":57,\"text\":\"\\t\\t$existing = $this->finder()->fetch()->groupBy('content_type', 'field_name');\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\t$i = 0;\"},{\"line\":60,\"text\":\"\\t\\t$last = 0;\"},{\"line\":61,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":62,\"text\":\"\\t\\t{\"},{\"line\":63,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":66,\"text\":\"\\t\\t\\t{\"},{\"line\":67,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":68,\"text\":\"\\t\\t\\t}\"},{\"line\":69,\"text\":\"\"},{\"line\":70,\"text\":\"\\t\\t\\t$type = (string) $entry['content_type'];\"},{\"line\":71,\"text\":\"\\t\\t\\t$name = (string) $entry['field_name'];\"},{\"line\":72,\"text\":\"\\t\\t\\t$entity = $existing[$type][$name] ?? $this->create();\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":75,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":76,\"text\":\"\\t\\t\\t$entity->field_value = (string) $entry;\"},{\"line\":77,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":82,\"text\":\"\\t\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":84,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":85,\"text\":\"\\t\\t\\t}\"},{\"line\":86,\"text\":\"\\t\\t}\"},{\"line\":87,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":88,\"text\":\"\\t}\"}],[{\"line\":132,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":133,\"text\":\"\\t{\"},{\"line\":134,\"text\":\"\\t\\treturn [\"},{\"line\":135,\"text\":\"\\t\\t\\t'content_type',\"},{\"line\":136,\"text\":\"\\t\\t\\t'field_name',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}]],\"sha256\":\"6c954db974138ac73a76ba87a119c4efdfb85f922a81832928e9ee022e23f594\"},\"Option.php\":{\"exists\":true,\"methods\":[[{\"line\":17,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":18,\"text\":\"\\t{\"},{\"line\":19,\"text\":\"\\t\\treturn 'options';\"},{\"line\":20,\"text\":\"\\t}\"}],[{\"line\":22,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\treturn 'option';\"},{\"line\":25,\"text\":\"\\t}\"}],[{\"line\":27,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('option_id')->fetch();\"},{\"line\":32,\"text\":\"\"},{\"line\":33,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":36,\"text\":\"\\t\\t{\"},{\"line\":37,\"text\":\"\\t\\t\\t$node = $doc->createElement($this->getChildTag());\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":40,\"text\":\"\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));\"},{\"line\":41,\"text\":\"\\t\\t\\tif ($entry->edit_format_params !== '')\"},{\"line\":42,\"text\":\"\\t\\t\\t{\"},{\"line\":43,\"text\":\"\\t\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'edit_format_params', $entry->edit_format_params));\"},{\"line\":44,\"text\":\"\\t\\t\\t}\"},{\"line\":45,\"text\":\"\\t\\t\\tif ($entry->sub_options)\"},{\"line\":46,\"text\":\"\\t\\t\\t{\"},{\"line\":47,\"text\":\"\\t\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'sub_options', implode(\\\"\\\\n\\\", $entry->sub_options)));\"},{\"line\":48,\"text\":\"\\t\\t\\t}\"},{\"line\":49,\"text\":\"\"},{\"line\":50,\"text\":\"\\t\\t\\tforeach ($entry->Relations AS $relation)\"},{\"line\":51,\"text\":\"\\t\\t\\t{\"},{\"line\":52,\"text\":\"\\t\\t\\t\\t$relationNode = $doc->createElement('relation');\"},{\"line\":53,\"text\":\"\\t\\t\\t\\t$relationNode->setAttribute('group_id', $relation->group_id);\"},{\"line\":54,\"text\":\"\\t\\t\\t\\t$relationNode->setAttribute('display_order', $relation->display_order);\"},{\"line\":55,\"text\":\"\\t\\t\\t\\t$node->appendChild($relationNode);\"},{\"line\":56,\"text\":\"\\t\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":59,\"text\":\"\\t\\t}\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":62,\"text\":\"\\t}\"}],[{\"line\":64,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":65,\"text\":\"\\t{\"},{\"line\":66,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":69,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":70,\"text\":\"\\t\\t{\"},{\"line\":71,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":72,\"text\":\"\\t\\t}\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'option_id');\"},{\"line\":75,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t$i = 0;\"},{\"line\":78,\"text\":\"\\t\\t$last = 0;\"},{\"line\":79,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":80,\"text\":\"\\t\\t{\"},{\"line\":81,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":82,\"text\":\"\"},{\"line\":83,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":84,\"text\":\"\\t\\t\\t{\"},{\"line\":85,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":86,\"text\":\"\\t\\t\\t}\"},{\"line\":87,\"text\":\"\"},{\"line\":88,\"text\":\"\\t\\t\\t/** @var \\\\XF\\\\Entity\\\\Option $entity */\"},{\"line\":89,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":90,\"text\":\"\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->setOptions([\"},{\"line\":92,\"text\":\"\\t\\t\\t\\t'verify_validation_callback' => false,\"},{\"line\":93,\"text\":\"\\t\\t\\t\\t'verify_value' => false,\"},{\"line\":94,\"text\":\"\\t\\t\\t]);\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":96,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":97,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":98,\"text\":\"\\t\\t\\t$entity->default_value = (string) $entry->default_value;\"},{\"line\":99,\"text\":\"\\t\\t\\t$entity->edit_format_params = (string) $entry->edit_format_params;\"},{\"line\":100,\"text\":\"\"},{\"line\":101,\"text\":\"\\t\\t\\t$subOptions = (string) $entry->sub_options;\"},{\"line\":102,\"text\":\"\\t\\t\\t$entity->sub_options = strlen($subOptions) ? explode(\\\"\\\\n\\\", $subOptions) : [];\"},{\"line\":103,\"text\":\"\"},{\"line\":104,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":105,\"text\":\"\"},{\"line\":106,\"text\":\"\\t\\t\\t$relations = [];\"},{\"line\":107,\"text\":\"\\t\\t\\tforeach ($entry->relation AS $relation)\"},{\"line\":108,\"text\":\"\\t\\t\\t{\"},{\"line\":109,\"text\":\"\\t\\t\\t\\t$relations[(string) $relation['group_id']] = (string) $relation['display_order'];\"},{\"line\":110,\"text\":\"\\t\\t\\t}\"},{\"line\":111,\"text\":\"\"},{\"line\":112,\"text\":\"\\t\\t\\t$entity->updateRelations($relations);\"},{\"line\":113,\"text\":\"\"},{\"line\":114,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":115,\"text\":\"\\t\\t\\t{\"},{\"line\":116,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":117,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":118,\"text\":\"\\t\\t\\t}\"},{\"line\":119,\"text\":\"\\t\\t}\"},{\"line\":120,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":121,\"text\":\"\\t}\"}],[{\"line\":128,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":129,\"text\":\"\\t{\"},{\"line\":130,\"text\":\"\\t\\treturn [\"},{\"line\":131,\"text\":\"\\t\\t\\t'option_id',\"},{\"line\":132,\"text\":\"\\t\\t\\t'edit_format',\"},{\"line\":133,\"text\":\"\\t\\t\\t'data_type',\"},{\"line\":134,\"text\":\"\\t\\t\\t'validation_class',\"},{\"line\":135,\"text\":\"\\t\\t\\t'validation_method',\"},{\"line\":136,\"text\":\"\\t\\t\\t'advanced',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}]],\"sha256\":\"d2a6129dbd3f40dde334388d185aec02a74e33e010b5f81305211f093d1e4e60\"},\"OptionGroup.php\":{\"exists\":true,\"methods\":[[{\"line\":14,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":15,\"text\":\"\\t{\"},{\"line\":16,\"text\":\"\\t\\treturn 'option_groups';\"},{\"line\":17,\"text\":\"\\t}\"}],[{\"line\":19,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":20,\"text\":\"\\t{\"},{\"line\":21,\"text\":\"\\t\\treturn 'group';\"},{\"line\":22,\"text\":\"\\t}\"}],[{\"line\":24,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":27,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":28,\"text\":\"\\t\\t\\t->order('group_id')->fetch();\"},{\"line\":29,\"text\":\"\"},{\"line\":30,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":31,\"text\":\"\\t\\t{\"},{\"line\":32,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":40,\"text\":\"\\t}\"}],[{\"line\":42,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":47,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'group_id');\"},{\"line\":53,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\t\\t$i = 0;\"},{\"line\":56,\"text\":\"\\t\\t$last = 0;\"},{\"line\":57,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":58,\"text\":\"\\t\\t{\"},{\"line\":59,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":62,\"text\":\"\\t\\t\\t{\"},{\"line\":63,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":64,\"text\":\"\\t\\t\\t}\"},{\"line\":65,\"text\":\"\"},{\"line\":66,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":69,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":70,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":75,\"text\":\"\\t\\t\\t{\"},{\"line\":76,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":77,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":78,\"text\":\"\\t\\t\\t}\"},{\"line\":79,\"text\":\"\\t\\t}\"},{\"line\":80,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":81,\"text\":\"\\t}\"}],[{\"line\":88,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":89,\"text\":\"\\t{\"},{\"line\":90,\"text\":\"\\t\\treturn [\"},{\"line\":91,\"text\":\"\\t\\t\\t'group_id',\"},{\"line\":92,\"text\":\"\\t\\t\\t'icon',\"},{\"line\":93,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":94,\"text\":\"\\t\\t\\t'debug_only',\"},{\"line\":95,\"text\":\"\\t\\t];\"},{\"line\":96,\"text\":\"\\t}\"}]],\"sha256\":\"9d75fc1cf5be6c69063ecaed7e0d89a5a2e29ff560e6e57125b59f90405718da\"},\"Permission.php\":{\"exists\":true,\"methods\":[[{\"line\":18,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":19,\"text\":\"\\t{\"},{\"line\":20,\"text\":\"\\t\\treturn 'permissions';\"},{\"line\":21,\"text\":\"\\t}\"}],[{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'permission';\"},{\"line\":26,\"text\":\"\\t}\"}],[{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['permission_group_id', 'permission_id'])->fetch();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":41,\"text\":\"\\t\\t}\"},{\"line\":42,\"text\":\"\"},{\"line\":43,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":44,\"text\":\"\\t}\"}],[{\"line\":46,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":47,\"text\":\"\\t{\"},{\"line\":48,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":49,\"text\":\"\"},{\"line\":50,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":51,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":52,\"text\":\"\\t\\t{\"},{\"line\":53,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":54,\"text\":\"\\t\\t}\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":57,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":58,\"text\":\"\\t\\t{\"},{\"line\":59,\"text\":\"\\t\\t\\t$conditions[] = [\"},{\"line\":60,\"text\":\"\\t\\t\\t\\t'permission_group_id' => (string) $entry['permission_group_id'],\"},{\"line\":61,\"text\":\"\\t\\t\\t\\t'permission_id' => (string) $entry['permission_id'],\"},{\"line\":62,\"text\":\"\\t\\t\\t];\"},{\"line\":63,\"text\":\"\\t\\t}\"},{\"line\":64,\"text\":\"\\t\\tif ($conditions)\"},{\"line\":65,\"text\":\"\\t\\t{\"},{\"line\":66,\"text\":\"\\t\\t\\t$existing = $this->finder()->whereOr($conditions)->fetch()->groupBy('permission_group_id', 'permission_id');\"},{\"line\":67,\"text\":\"\\t\\t}\"},{\"line\":68,\"text\":\"\\t\\telse\"},{\"line\":69,\"text\":\"\\t\\t{\"},{\"line\":70,\"text\":\"\\t\\t\\t$existing = [];\"},{\"line\":71,\"text\":\"\\t\\t}\"},{\"line\":72,\"text\":\"\"},{\"line\":73,\"text\":\"\\t\\t$i = 0;\"},{\"line\":74,\"text\":\"\\t\\t$last = 0;\"},{\"line\":75,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":76,\"text\":\"\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":80,\"text\":\"\\t\\t\\t{\"},{\"line\":81,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":82,\"text\":\"\\t\\t\\t}\"},{\"line\":83,\"text\":\"\"},{\"line\":84,\"text\":\"\\t\\t\\t$groupId = (string) $entry['permission_group_id'];\"},{\"line\":85,\"text\":\"\\t\\t\\t$permissionId = (string) $entry['permission_id'];\"},{\"line\":86,\"text\":\"\\t\\t\\t$entity = $existing[$groupId][$permissionId] ?? $this->create();\"},{\"line\":87,\"text\":\"\"},{\"line\":88,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":89,\"text\":\"\\t\\t\\t$entity->setOption('dependent_check', false);\"},{\"line\":90,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":92,\"text\":\"\"},{\"line\":93,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":94,\"text\":\"\"},{\"line\":95,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":96,\"text\":\"\\t\\t\\t{\"},{\"line\":97,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":98,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":99,\"text\":\"\\t\\t\\t}\"},{\"line\":100,\"text\":\"\\t\\t}\"},{\"line\":101,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":102,\"text\":\"\\t}\"}],[{\"line\":149,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":150,\"text\":\"\\t{\"},{\"line\":151,\"text\":\"\\t\\treturn [\"},{\"line\":152,\"text\":\"\\t\\t\\t'permission_group_id',\"},{\"line\":153,\"text\":\"\\t\\t\\t'permission_id',\"},{\"line\":154,\"text\":\"\\t\\t\\t'permission_type',\"},{\"line\":155,\"text\":\"\\t\\t\\t'depend_permission_id',\"},{\"line\":156,\"text\":\"\\t\\t\\t'interface_group_id',\"},{\"line\":157,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":158,\"text\":\"\\t\\t];\"},{\"line\":159,\"text\":\"\\t}\"}]],\"sha256\":\"8d6b8657e8585eb8da7f1401df882e0033f93e07179ce4df398b95d22d74c477\"},\"PermissionInterfaceGroup.php\":{\"exists\":true,\"methods\":[[{\"line\":15,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":16,\"text\":\"\\t{\"},{\"line\":17,\"text\":\"\\t\\treturn 'permission_interface_groups';\"},{\"line\":18,\"text\":\"\\t}\"}],[{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'interface_group';\"},{\"line\":23,\"text\":\"\\t}\"}],[{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->order('interface_group_id')->fetch();\"},{\"line\":30,\"text\":\"\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":38,\"text\":\"\\t\\t}\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":41,\"text\":\"\\t}\"}],[{\"line\":43,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":44,\"text\":\"\\t{\"},{\"line\":45,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":48,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'interface_group_id');\"},{\"line\":54,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$i = 0;\"},{\"line\":57,\"text\":\"\\t\\t$last = 0;\"},{\"line\":58,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":59,\"text\":\"\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":61,\"text\":\"\"},{\"line\":62,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":63,\"text\":\"\\t\\t\\t{\"},{\"line\":64,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":65,\"text\":\"\\t\\t\\t}\"},{\"line\":66,\"text\":\"\"},{\"line\":67,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":68,\"text\":\"\"},{\"line\":69,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":70,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":71,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":72,\"text\":\"\"},{\"line\":73,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":76,\"text\":\"\\t\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":78,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":79,\"text\":\"\\t\\t\\t}\"},{\"line\":80,\"text\":\"\\t\\t}\"},{\"line\":81,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":82,\"text\":\"\\t}\"}],[{\"line\":95,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":96,\"text\":\"\\t{\"},{\"line\":97,\"text\":\"\\t\\treturn [\"},{\"line\":98,\"text\":\"\\t\\t\\t'interface_group_id',\"},{\"line\":99,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":100,\"text\":\"\\t\\t\\t'is_moderator',\"},{\"line\":101,\"text\":\"\\t\\t];\"},{\"line\":102,\"text\":\"\\t}\"}]],\"sha256\":\"b2b1397ba1dc3174f680ebe4796a88904aa577db969177485d56cd7568c1f8d6\"},\"Phrase.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'phrases';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'phrase';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('language_id', 0)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('title')->fetch();\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":37,\"text\":\"\\t\\t\\tif ($entry['global_cache'])\"},{\"line\":38,\"text\":\"\\t\\t\\t{\"},{\"line\":39,\"text\":\"\\t\\t\\t\\t$node->setAttribute('global_cache', '1');\"},{\"line\":40,\"text\":\"\\t\\t\\t}\"},{\"line\":41,\"text\":\"\\t\\t\\t$this->exportCdata($node, $entry->phrase_text);\"},{\"line\":42,\"text\":\"\"},{\"line\":43,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":44,\"text\":\"\\t\\t}\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":47,\"text\":\"\\t}\"}],[{\"line\":49,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":50,\"text\":\"\\t{\"},{\"line\":51,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":54,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":55,\"text\":\"\\t\\t{\"},{\"line\":56,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":57,\"text\":\"\\t\\t}\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'title');\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\t// This chucking approach has been taken due to a MariaDB performance regression with large\"},{\"line\":62,\"text\":\"\\t\\t// IN clauses (see #187523). However, this may have benefits on some slower servers as this\"},{\"line\":63,\"text\":\"\\t\\t// will reduce the number of times we attempt to instantiate phrase entities that won't be\"},{\"line\":64,\"text\":\"\\t\\t// processed in this run.\"},{\"line\":65,\"text\":\"\\t\\t$chunkSize = 200;\"},{\"line\":66,\"text\":\"\\t\\t$nextFetch = null;\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$i = 0;\"},{\"line\":69,\"text\":\"\\t\\t$last = 0;\"},{\"line\":70,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":71,\"text\":\"\\t\\t{\"},{\"line\":72,\"text\":\"\\t\\t\\t$originalI = $i;\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":75,\"text\":\"\"},{\"line\":76,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":77,\"text\":\"\\t\\t\\t{\"},{\"line\":78,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":79,\"text\":\"\\t\\t\\t}\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\t\\tif ($nextFetch === null || $originalI >= $nextFetch)\"},{\"line\":82,\"text\":\"\\t\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t\\t$slice = array_slice($ids, $originalI, $chunkSize);\"},{\"line\":84,\"text\":\"\\t\\t\\t\\t$nextFetch = $originalI + $chunkSize;\"},{\"line\":85,\"text\":\"\"},{\"line\":86,\"text\":\"\\t\\t\\t\\t$existing = $this->finder()\"},{\"line\":87,\"text\":\"\\t\\t\\t\\t\\t->where('title', $slice)\"},{\"line\":88,\"text\":\"\\t\\t\\t\\t\\t->where('language_id', 0)\"},{\"line\":89,\"text\":\"\\t\\t\\t\\t\\t->keyedBy('title')\"},{\"line\":90,\"text\":\"\\t\\t\\t\\t\\t->fetch();\"},{\"line\":91,\"text\":\"\\t\\t\\t}\"},{\"line\":92,\"text\":\"\"},{\"line\":93,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":94,\"text\":\"\\t\\t\\t$entity->setOption('check_duplicate', false);\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":96,\"text\":\"\"},{\"line\":97,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":98,\"text\":\"\\t\\t\\t$entity->language_id = 0;\"},{\"line\":99,\"text\":\"\\t\\t\\t$entity->global_cache = (int) $entry['global_cache'];\"},{\"line\":100,\"text\":\"\\t\\t\\t$entity->phrase_text = $this->getCdataValue($entry);\"},{\"line\":101,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":102,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":103,\"text\":\"\"},{\"line\":104,\"text\":\"\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\"},{\"line\":105,\"text\":\"\"},{\"line\":106,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":107,\"text\":\"\\t\\t\\t{\"},{\"line\":108,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":109,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":110,\"text\":\"\\t\\t\\t}\"},{\"line\":111,\"text\":\"\\t\\t}\"},{\"line\":112,\"text\":\"\"},{\"line\":113,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":114,\"text\":\"\\t}\"}],[{\"line\":121,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":122,\"text\":\"\\t{\"},{\"line\":123,\"text\":\"\\t\\treturn [\"},{\"line\":124,\"text\":\"\\t\\t\\t'title',\"},{\"line\":125,\"text\":\"\\t\\t\\t'version_id',\"},{\"line\":126,\"text\":\"\\t\\t\\t'version_string',\"},{\"line\":127,\"text\":\"\\t\\t];\"},{\"line\":128,\"text\":\"\\t}\"}]],\"sha256\":\"af1d53936447b820d9f3dc3e50a7058dfe96890417f5fd466fb1361d99988266\"},\"Route.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'routes';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'route';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":38,\"text\":\"\\t\\t}\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":41,\"text\":\"\\t}\"}],[{\"line\":43,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":44,\"text\":\"\\t{\"},{\"line\":45,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":48,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":54,\"text\":\"\\t\\t$existing = [];\"},{\"line\":55,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":56,\"text\":\"\\t\\t{\"},{\"line\":57,\"text\":\"\\t\\t\\t$conditions[] = [\"},{\"line\":58,\"text\":\"\\t\\t\\t\\t'route_type' => (string) $entry['route_type'],\"},{\"line\":59,\"text\":\"\\t\\t\\t\\t'route_prefix' => (string) $entry['route_prefix'],\"},{\"line\":60,\"text\":\"\\t\\t\\t\\t'sub_name' => (string) $entry['sub_name'],\"},{\"line\":61,\"text\":\"\\t\\t\\t];\"},{\"line\":62,\"text\":\"\\t\\t}\"},{\"line\":63,\"text\":\"\\t\\tif ($conditions)\"},{\"line\":64,\"text\":\"\\t\\t{\"},{\"line\":65,\"text\":\"\\t\\t\\tforeach ($this->finder()->whereOr($conditions)->fetch() AS $route)\"},{\"line\":66,\"text\":\"\\t\\t\\t{\"},{\"line\":67,\"text\":\"\\t\\t\\t\\t$existing[$route->route_type][$route->route_prefix][$route->sub_name] = $route;\"},{\"line\":68,\"text\":\"\\t\\t\\t}\"},{\"line\":69,\"text\":\"\\t\\t}\"},{\"line\":70,\"text\":\"\"},{\"line\":71,\"text\":\"\\t\\t$i = 0;\"},{\"line\":72,\"text\":\"\\t\\t$last = 0;\"},{\"line\":73,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":74,\"text\":\"\\t\\t{\"},{\"line\":75,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":78,\"text\":\"\\t\\t\\t{\"},{\"line\":79,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":80,\"text\":\"\\t\\t\\t}\"},{\"line\":81,\"text\":\"\"},{\"line\":82,\"text\":\"\\t\\t\\t$type = (string) $entry['route_type'];\"},{\"line\":83,\"text\":\"\\t\\t\\t$prefix = (string) $entry['route_prefix'];\"},{\"line\":84,\"text\":\"\\t\\t\\t$subName = (string) $entry['sub_name'];\"},{\"line\":85,\"text\":\"\\t\\t\\t$entity = $existing[$type][$prefix][$subName] ?? $this->create();\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t\\t$entity->setOptions([\"},{\"line\":88,\"text\":\"\\t\\t\\t\\t'check_duplicate' => false,\"},{\"line\":89,\"text\":\"\\t\\t\\t]);\"},{\"line\":90,\"text\":\"\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":92,\"text\":\"\"},{\"line\":93,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":94,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":96,\"text\":\"\"},{\"line\":97,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":98,\"text\":\"\\t\\t\\t{\"},{\"line\":99,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":100,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":101,\"text\":\"\\t\\t\\t}\"},{\"line\":102,\"text\":\"\\t\\t}\"},{\"line\":103,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":104,\"text\":\"\\t}\"}],[{\"line\":154,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":155,\"text\":\"\\t{\"},{\"line\":156,\"text\":\"\\t\\treturn [\"},{\"line\":157,\"text\":\"\\t\\t\\t'route_type',\"},{\"line\":158,\"text\":\"\\t\\t\\t'route_prefix',\"},{\"line\":159,\"text\":\"\\t\\t\\t'sub_name',\"},{\"line\":160,\"text\":\"\\t\\t\\t'format',\"},{\"line\":161,\"text\":\"\\t\\t\\t'build_class',\"},{\"line\":162,\"text\":\"\\t\\t\\t'build_method',\"},{\"line\":163,\"text\":\"\\t\\t\\t'controller',\"},{\"line\":164,\"text\":\"\\t\\t\\t'context',\"},{\"line\":165,\"text\":\"\\t\\t\\t'action_prefix',\"},{\"line\":166,\"text\":\"\\t\\t];\"},{\"line\":167,\"text\":\"\\t}\"}]],\"sha256\":\"ffd5dc9411b761a264810af2241af71c553ab2b409f670305687e9d4d75a34bb\"},\"Template.php\":{\"exists\":true,\"methods\":[[{\"line\":15,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":16,\"text\":\"\\t{\"},{\"line\":17,\"text\":\"\\t\\treturn 'templates';\"},{\"line\":18,\"text\":\"\\t}\"}],[{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'template';\"},{\"line\":23,\"text\":\"\\t}\"}],[{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('style_id', 0)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['type', 'title'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\\t\\t\\t$this->exportCdata($node, $entry->template);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":39,\"text\":\"\\t\\t}\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":42,\"text\":\"\\t}\"}],[{\"line\":44,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":45,\"text\":\"\\t{\"},{\"line\":46,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":47,\"text\":\"\"},{\"line\":48,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":49,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":50,\"text\":\"\\t\\t{\"},{\"line\":51,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":52,\"text\":\"\\t\\t}\"},{\"line\":53,\"text\":\"\"},{\"line\":54,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":55,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":56,\"text\":\"\\t\\t{\"},{\"line\":57,\"text\":\"\\t\\t\\t$conditions[] = [\"},{\"line\":58,\"text\":\"\\t\\t\\t\\t'type' => (string) $entry['type'],\"},{\"line\":59,\"text\":\"\\t\\t\\t\\t'title' => (string) $entry['title'],\"},{\"line\":60,\"text\":\"\\t\\t\\t];\"},{\"line\":61,\"text\":\"\\t\\t}\"},{\"line\":62,\"text\":\"\\t\\tif ($conditions)\"},{\"line\":63,\"text\":\"\\t\\t{\"},{\"line\":64,\"text\":\"\\t\\t\\t$existing = $this->finder()\"},{\"line\":65,\"text\":\"\\t\\t\\t\\t->whereOr($conditions)\"},{\"line\":66,\"text\":\"\\t\\t\\t\\t->where('style_id', 0)\"},{\"line\":67,\"text\":\"\\t\\t\\t\\t->fetch()\"},{\"line\":68,\"text\":\"\\t\\t\\t\\t->groupBy('type', 'title');\"},{\"line\":69,\"text\":\"\\t\\t}\"},{\"line\":70,\"text\":\"\\t\\telse\"},{\"line\":71,\"text\":\"\\t\\t{\"},{\"line\":72,\"text\":\"\\t\\t\\t$existing = [];\"},{\"line\":73,\"text\":\"\\t\\t}\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\t$i = 0;\"},{\"line\":76,\"text\":\"\\t\\t$last = 0;\"},{\"line\":77,\"text\":\"\"},{\"line\":78,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":79,\"text\":\"\\t\\t{\"},{\"line\":80,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":81,\"text\":\"\"},{\"line\":82,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":83,\"text\":\"\\t\\t\\t{\"},{\"line\":84,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":85,\"text\":\"\\t\\t\\t}\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t\\t$type = (string) $entry['type'];\"},{\"line\":88,\"text\":\"\\t\\t\\t$title = (string) $entry['title'];\"},{\"line\":89,\"text\":\"\\t\\t\\t$entity = $existing[$type][$title] ?? $this->create();\"},{\"line\":90,\"text\":\"\\t\\t\\t$entity->setOption('check_duplicate', false);\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->setOption('report_modification_errors', false);\"},{\"line\":92,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":93,\"text\":\"\"},{\"line\":94,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->style_id = 0;\"},{\"line\":96,\"text\":\"\\t\\t\\t$entity->template = $this->getCdataValue($entry);\"},{\"line\":97,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":98,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":99,\"text\":\"\"},{\"line\":100,\"text\":\"\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\"},{\"line\":101,\"text\":\"\"},{\"line\":102,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":103,\"text\":\"\\t\\t\\t{\"},{\"line\":104,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":105,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":106,\"text\":\"\\t\\t\\t}\"},{\"line\":107,\"text\":\"\\t\\t}\"},{\"line\":108,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":109,\"text\":\"\\t}\"}],[{\"line\":156,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":157,\"text\":\"\\t{\"},{\"line\":158,\"text\":\"\\t\\treturn [\"},{\"line\":159,\"text\":\"\\t\\t\\t'type',\"},{\"line\":160,\"text\":\"\\t\\t\\t'title',\"},{\"line\":161,\"text\":\"\\t\\t\\t'version_id',\"},{\"line\":162,\"text\":\"\\t\\t\\t'version_string',\"},{\"line\":163,\"text\":\"\\t\\t];\"},{\"line\":164,\"text\":\"\\t}\"}]],\"sha256\":\"fecae5772cfd98cb53672180957a3a50a521d6ee6194dd5d7a346630afb3933a\"},\"TemplateModification.php\":{\"exists\":true,\"methods\":[[{\"line\":18,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":19,\"text\":\"\\t{\"},{\"line\":20,\"text\":\"\\t\\treturn 'template_modifications';\"},{\"line\":21,\"text\":\"\\t}\"}],[{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'modification';\"},{\"line\":26,\"text\":\"\\t}\"}],[{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['template', 'modification_key'])->fetch();\"},{\"line\":33,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":34,\"text\":\"\\t\\t{\"},{\"line\":35,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t\\t$this->exportCdataToNewNode($node, 'find', $entry);\"},{\"line\":40,\"text\":\"\\t\\t\\t$this->exportCdataToNewNode($node, 'replace', $entry);\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":43,\"text\":\"\\t\\t}\"},{\"line\":44,\"text\":\"\"},{\"line\":45,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":48,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":49,\"text\":\"\\t{\"},{\"line\":50,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":53,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":56,\"text\":\"\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t$keys = $this->pluckXmlAttribute($entries, 'modification_key');\"},{\"line\":59,\"text\":\"\\t\\t$existing = $this->finder()\"},{\"line\":60,\"text\":\"\\t\\t\\t->where('modification_key', $keys)\"},{\"line\":61,\"text\":\"\\t\\t\\t->keyedBy('modification_key')\"},{\"line\":62,\"text\":\"\\t\\t\\t->fetch();\"},{\"line\":63,\"text\":\"\"},{\"line\":64,\"text\":\"\\t\\t$i = 0;\"},{\"line\":65,\"text\":\"\\t\\t$last = 0;\"},{\"line\":66,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":67,\"text\":\"\\t\\t{\"},{\"line\":68,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":69,\"text\":\"\"},{\"line\":70,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":71,\"text\":\"\\t\\t\\t{\"},{\"line\":72,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":73,\"text\":\"\\t\\t\\t}\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\t\\t$entity = $existing[(string) $entry['modification_key']] ?? $this->create();\"},{\"line\":76,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":77,\"text\":\"\\t\\t\\t$entity->setOption('hide_errors', true);\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\t\\t$entity->find = $this->getCdataValue($entry->find);\"},{\"line\":82,\"text\":\"\\t\\t\\t$entity->replace = $this->getCdataValue($entry->replace);\"},{\"line\":83,\"text\":\"\"},{\"line\":84,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":85,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":90,\"text\":\"\\t\\t\\t{\"},{\"line\":91,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":92,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":93,\"text\":\"\\t\\t\\t}\"},{\"line\":94,\"text\":\"\\t\\t}\"},{\"line\":95,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":96,\"text\":\"\\t}\"}],[{\"line\":140,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":141,\"text\":\"\\t{\"},{\"line\":142,\"text\":\"\\t\\treturn [\"},{\"line\":143,\"text\":\"\\t\\t\\t'type',\"},{\"line\":144,\"text\":\"\\t\\t\\t'template',\"},{\"line\":145,\"text\":\"\\t\\t\\t'modification_key',\"},{\"line\":146,\"text\":\"\\t\\t\\t'description',\"},{\"line\":147,\"text\":\"\\t\\t\\t'execution_order',\"},{\"line\":148,\"text\":\"\\t\\t\\t'enabled',\"},{\"line\":149,\"text\":\"\\t\\t\\t'action',\"},{\"line\":150,\"text\":\"\\t\\t];\"},{\"line\":151,\"text\":\"\\t}\"}]],\"sha256\":\"c27e2bb5baa379dcaf0eab73f35fcc62f5ce656fbccbcb4d6ded095d83b4b31a\"}},\"db\":{\"addon_rows\":0,\"board_active\":\"0\",\"content_type_field_rows\":0,\"error_count_after_baseline\":0,\"error_max\":43,\"listener_addon_rows\":0,\"option_group_rows\":0,\"option_rows\":0,\"permission_rows\":0,\"phrase_addon_rows\":0,\"phrase_prefix_rows\":0,\"route_addon_rows\":0,\"route_prefix_rows\":0,\"table_rows\":0,\"template_addon_rows\":0,\"template_mod_addon_rows\":0,\"template_prefix_rows\":0},\"db_probe\":{\"rc\":0,\"stderr_sha256\":\"\",\"stdout_lines\":1},\"error_probe\":{\"rc\":0,\"stderr_sha256\":\"\",\"stdout_lines\":1},\"errors_after_baseline\":[],\"guest\":\"newfi-staging\",\"identity_ok\":true,\"lifecycle_contract\":{\"src/XF/AddOn/AbstractSetup.php\":{\"blocks\":[[{\"line\":25,\"text\":\"\\tabstract public function install(array $stepParams = []);\"},{\"line\":26,\"text\":\"\"},{\"line\":27,\"text\":\"\\t/**\"},{\"line\":28,\"text\":\"\\t * @param array $stepParams\"},{\"line\":29,\"text\":\"\\t *\"},{\"line\":30,\"text\":\"\\t * @return null|StepResult\"},{\"line\":31,\"text\":\"\\t */\"},{\"line\":32,\"text\":\"\\tabstract public function upgrade(array $stepParams = []);\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t/**\"},{\"line\":35,\"text\":\"\\t * @param array $stepParams\"},{\"line\":36,\"text\":\"\\t *\"},{\"line\":37,\"text\":\"\\t * @return null|StepResult\"},{\"line\":38,\"text\":\"\\t */\"},{\"line\":39,\"text\":\"\\tabstract public function uninstall(array $stepParams = []);\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\tpublic function __construct(AddOn $addOn, App $app)\"},{\"line\":42,\"text\":\"\\t{\"},{\"line\":43,\"text\":\"\\t\\t$this->addOn = $addOn;\"},{\"line\":44,\"text\":\"\\t\\t$this->app = $app;\"},{\"line\":45,\"text\":\"\\t}\"}],[{\"line\":39,\"text\":\"\\tabstract public function uninstall(array $stepParams = []);\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\tpublic function __construct(AddOn $addOn, App $app)\"},{\"line\":42,\"text\":\"\\t{\"},{\"line\":43,\"text\":\"\\t\\t$this->addOn = $addOn;\"},{\"line\":44,\"text\":\"\\t\\t$this->app = $app;\"},{\"line\":45,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88\"},\"src/XF/AddOn/AddOn.php\":{\"blocks\":[[{\"line\":553,\"text\":\"\\tpublic function preInstall()\"},{\"line\":554,\"text\":\"\\t{\"},{\"line\":555,\"text\":\"\\t\\tif (!$this->installedAddOn)\"},{\"line\":556,\"text\":\"\\t\\t{\"},{\"line\":557,\"text\":\"\\t\\t\\t$json = $this->getJson();\"},{\"line\":558,\"text\":\"\"},{\"line\":559,\"text\":\"\\t\\t\\t$installed = \\\\XF::em()->create(\\\\XF\\\\Entity\\\\AddOn::class);\"},{\"line\":560,\"text\":\"\\t\\t\\t$installed->bulkSet([\"},{\"line\":561,\"text\":\"\\t\\t\\t\\t'addon_id' => $this->getAddOnId(),\"},{\"line\":562,\"text\":\"\\t\\t\\t\\t'title' => $json['title'],\"},{\"line\":563,\"text\":\"\\t\\t\\t\\t'version_string' => $json['version_string'],\"},{\"line\":564,\"text\":\"\\t\\t\\t\\t'version_id' => $json['version_id'],\"},{\"line\":565,\"text\":\"\\t\\t\\t\\t'active' => true,\"},{\"line\":566,\"text\":\"\\t\\t\\t\\t'is_processing' => true,\"},{\"line\":567,\"text\":\"\\t\\t\\t\\t'json_hash' => $this->getJsonHash(),\"},{\"line\":568,\"text\":\"\\t\\t\\t\\t'last_pending_action' => 'install:0',\"},{\"line\":569,\"text\":\"\\t\\t\\t]);\"},{\"line\":570,\"text\":\"\\t\\t\\t$installed->save();\"},{\"line\":571,\"text\":\"\"},{\"line\":572,\"text\":\"\\t\\t\\t$this->installedAddOn = $installed;\"},{\"line\":573,\"text\":\"\"},{\"line\":574,\"text\":\"\\t\\t\\t\\\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":575,\"text\":\"\\t\\t}\"},{\"line\":576,\"text\":\"\\t}\"}],[{\"line\":578,\"text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"line\":579,\"text\":\"\\t{\"},{\"line\":580,\"text\":\"\\t\\t$setup = $this->getSetup();\"},{\"line\":581,\"text\":\"\\t\\tif ($setup)\"},{\"line\":582,\"text\":\"\\t\\t{\"},{\"line\":583,\"text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"line\":584,\"text\":\"\\t\\t}\"},{\"line\":585,\"text\":\"\"},{\"line\":586,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":587,\"text\":\"\"},{\"line\":588,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":589,\"text\":\"\"},{\"line\":590,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":591,\"text\":\"\\t\\t\\\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);\"},{\"line\":592,\"text\":\"\\t}\"}],[{\"line\":644,\"text\":\"\\tpublic function preUninstall()\"},{\"line\":645,\"text\":\"\\t{\"},{\"line\":646,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":647,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":648,\"text\":\"\\t\\t{\"},{\"line\":649,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":650,\"text\":\"\\t\\t}\"},{\"line\":651,\"text\":\"\"},{\"line\":652,\"text\":\"\\t\\t$installed->is_processing = true;\"},{\"line\":653,\"text\":\"\\t\\t$installed->last_pending_action = 'uninstall:0';\"},{\"line\":654,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":655,\"text\":\"\"},{\"line\":656,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":657,\"text\":\"\\t\\t\\\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":658,\"text\":\"\\t}\"}],[{\"line\":660,\"text\":\"\\tpublic function postUninstall()\"},{\"line\":661,\"text\":\"\\t{\"},{\"line\":662,\"text\":\"\\t\\t/** @var FileCheck $fileCheck */\"},{\"line\":663,\"text\":\"\\t\\t$fileCheck = \\\\XF::em()->create(FileCheck::class);\"},{\"line\":664,\"text\":\"\\t\\t$fileCheck->save();\"},{\"line\":665,\"text\":\"\"},{\"line\":666,\"text\":\"\\t\\t\\\\XF::app()->jobManager()->enqueueUnique('fileCheck', \\\\XF\\\\Job\\\\FileCheck::class, [\"},{\"line\":667,\"text\":\"\\t\\t\\t'check_id' => $fileCheck->check_id,\"},{\"line\":668,\"text\":\"\\t\\t\\t'automated' => true,\"},{\"line\":669,\"text\":\"\\t\\t], false);\"},{\"line\":670,\"text\":\"\"},{\"line\":671,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":672,\"text\":\"\"},{\"line\":673,\"text\":\"\\t\\t\\\\XF::fire('addon_post_uninstall', [$this, $this->addOnId, $json], $this->addOnId);\"},{\"line\":674,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"},\"src/XF/AddOn/DataManager.php\":{\"blocks\":[[{\"line\":85,\"text\":\"\\tpublic function enqueueImportAddOnData(AddOn $addOn)\"},{\"line\":86,\"text\":\"\\t{\"},{\"line\":87,\"text\":\"\\t\\treturn \\\\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, [\"},{\"line\":88,\"text\":\"\\t\\t\\t'addon_id' => $addOn->addon_id,\"},{\"line\":89,\"text\":\"\\t\\t]);\"},{\"line\":90,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0\"},\"src/XF/Cli/Command/AddOnInstall.php\":{\"blocks\":[[{\"line\":36,\"text\":\"\\tprotected function execute(InputInterface $input, OutputInterface $output)\"},{\"line\":37,\"text\":\"\\t{\"},{\"line\":38,\"text\":\"\\t\\t$id = $input->getArgument('id');\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t$addOnManager = \\\\XF::app()->addOnManager();\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\t\\tif ($this->isAZipFile($id))\"},{\"line\":43,\"text\":\"\\t\\t{\"},{\"line\":44,\"text\":\"\\t\\t\\t$id = $this->validateAndExtractAddOnZip($id, $error);\"},{\"line\":45,\"text\":\"\\t\\t\\tif (!$id)\"},{\"line\":46,\"text\":\"\\t\\t\\t{\"},{\"line\":47,\"text\":\"\\t\\t\\t\\t$output->writeln('' . $error . '');\"},{\"line\":48,\"text\":\"\\t\\t\\t\\treturn 1;\"},{\"line\":49,\"text\":\"\\t\\t\\t}\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$addOn = $addOnManager->getById($id);\"},{\"line\":53,\"text\":\"\\t\\tif (!$addOn)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\t$output->writeln(\\\"\\\" . \\\"The add-on '$id' could be found.\\\" . \\\"\\\");\"},{\"line\":56,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":57,\"text\":\"\\t\\t}\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\tif (!$addOn->canInstall())\"},{\"line\":60,\"text\":\"\\t\\t{\"},{\"line\":61,\"text\":\"\\t\\t\\tif ($addOn)\"},{\"line\":62,\"text\":\"\\t\\t\\t{\"},{\"line\":63,\"text\":\"\\t\\t\\t\\t$output->writeln(\\\"\\\" . \\\\XF::phrase('this_add_on_already_installed_upgrade_instead') . \\\"\\\");\"},{\"line\":64,\"text\":\"\\t\\t\\t}\"},{\"line\":65,\"text\":\"\\t\\t\\telse\"},{\"line\":66,\"text\":\"\\t\\t\\t{\"},{\"line\":67,\"text\":\"\\t\\t\\t\\t$output->writeln(\\\"\\\" . \\\\XF::phrase('this_add_on_cannot_be_installed') . \\\"\\\");\"},{\"line\":68,\"text\":\"\\t\\t\\t}\"},{\"line\":69,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":70,\"text\":\"\\t\\t}\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\tif (!$this->verifyAddOnAction($input, $output, $addOn))\"},{\"line\":73,\"text\":\"\\t\\t{\"},{\"line\":74,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":75,\"text\":\"\\t\\t}\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t/** @var QuestionHelper $helper */\"},{\"line\":78,\"text\":\"\\t\\t$helper = $this->getHelper('question');\"},{\"line\":79,\"text\":\"\"},{\"line\":80,\"text\":\"\\t\\t$question = new ConfirmationQuestion(\\\"\\\" . \\\\XF::phrase('please_confirm_that_you_want_to_install_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \\\") (y/n)\\\");\"},{\"line\":81,\"text\":\"\\t\\t$response = $helper->ask($input, $output, $question);\"},{\"line\":82,\"text\":\"\\t\\tif (!$response)\"},{\"line\":83,\"text\":\"\\t\\t{\"},{\"line\":84,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":85,\"text\":\"\\t\\t}\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t// make sure any errors get logged here\"},{\"line\":88,\"text\":\"\\t\\t\\\\XF::app()->error()->setIgnorePendingUpgrade(true);\"},{\"line\":89,\"text\":\"\"},{\"line\":90,\"text\":\"\\t\\t$addOn->preInstall();\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'install');\"},{\"line\":93,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'import');\"},{\"line\":94,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'post-install');\"},{\"line\":95,\"text\":\"\"},{\"line\":96,\"text\":\"\\t\\treturn 0;\"},{\"line\":97,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"2407ad9ae20ca8ac1ca84b456ac2adc537f39c79534da5e258167a4d0df2a54f\"},\"src/XF/Cli/Command/AddOnUninstall.php\":{\"blocks\":[[{\"line\":36,\"text\":\"\\tprotected function execute(InputInterface $input, OutputInterface $output)\"},{\"line\":37,\"text\":\"\\t{\"},{\"line\":38,\"text\":\"\\t\\t$id = $input->getArgument('id');\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t$addOn = $this->checkInstalledAddOn($id, $error);\"},{\"line\":41,\"text\":\"\\t\\tif (!$addOn)\"},{\"line\":42,\"text\":\"\\t\\t{\"},{\"line\":43,\"text\":\"\\t\\t\\t$output->writeln('' . $error . '');\"},{\"line\":44,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":45,\"text\":\"\\t\\t}\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\tif (!$addOn->canUninstall() && !$input->getOption('force'))\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\t$output->writeln(\\\"\\\" . \\\\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing') . \\\"\\\");\"},{\"line\":50,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t/** @var QuestionHelper $helper */\"},{\"line\":54,\"text\":\"\\t\\t$helper = $this->getHelper('question');\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$question = new ConfirmationQuestion(\\\"\\\" . \\\\XF::phrase('please_confirm_that_you_want_to_uninstall_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \\\") (y/n)\\\");\"},{\"line\":57,\"text\":\"\\t\\t$response = $helper->ask($input, $output, $question);\"},{\"line\":58,\"text\":\"\\t\\tif (!$response)\"},{\"line\":59,\"text\":\"\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":61,\"text\":\"\\t\\t}\"},{\"line\":62,\"text\":\"\"},{\"line\":63,\"text\":\"\\t\\t// make sure any errors get logged here\"},{\"line\":64,\"text\":\"\\t\\t\\\\XF::app()->error()->setIgnorePendingUpgrade(true);\"},{\"line\":65,\"text\":\"\"},{\"line\":66,\"text\":\"\\t\\t$addOn->preUninstall();\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'uninstall');\"},{\"line\":69,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'uninstall-data');\"},{\"line\":70,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'post-uninstall');\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\treturn 0;\"},{\"line\":73,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"6dc768f60efd4af161b549cd54c01ae8922326cf7fd230b8ef93403bf8dba90c\"}},\"runtime\":{\"http_code\":\"503\",\"http_rc\":0,\"services\":{\"mariadb\":{\"rc\":0,\"state\":\"active\"},\"nginx\":{\"rc\":0,\"state\":\"active\"},\"php8.3-fpm\":{\"rc\":0,\"state\":\"active\"}}},\"scope\":\"READ_ONLY_NO_MUTATION\",\"stage039\":{\"state\":\"ABSENT\"}}\nSUPPORT042_RESIDUAL_SUM=0\nSUPPORT042_NEW_ERROR_COUNT=0\nSUPPORT042_POSTROLLBACK_CLEAN=True\nSUPPORT042_DECISION=FORENSIC_CAPTURE_COMPLETE\nSUPPORT042_MUTATION_SCOPE=NONE_READ_ONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nSUPPORT042_END\n" +} diff --git a/runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.txt b/runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.txt new file mode 100644 index 00000000..2ab340c6 --- /dev/null +++ b/runtime/history/SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042.txt @@ -0,0 +1,47 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=gram-support-vm211-staging-forensic-corrected +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=15b23b8177dd6de06c36b0bff7d6d33adb5d96f9f6016643f8795cfb1c404f88 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3 +SANITIZED_OUTPUT_SHA256=d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3 +OUTPUT_BEGIN +SUPPORT042_BEGIN +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d +SUPPORT042_SOURCE_POSTROLLBACK={"source_exists":false,"tmp_exists":false} +SUPPORT042_QGA_STATE={"exitcode":0,"state":"COMPLETE"} +SUPPORT042_VM211={"addon_path":{"state":"ABSENT"},"cli":{"commands":["xf:addon-disable","xf:addon-enable","xf:addon-install","xf:addon-list","xf:addon-rebuild","xf:addon-uninstall","xf:addon-upgrade"],"help":{"xf:addon-install":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--verbose","--version"],"rc":0},"xf:addon-rebuild":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--verbose","--version"],"rc":0},"xf:addon-uninstall":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--verbose","--version"],"rc":0},"xf:addon-upgrade":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--skip-unavailable","--verbose","--version"],"rc":0}},"rc":0},"collection":"COMPLETE","command_id":"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042","datatype_contract":{"AbstractDataType.php":{"exists":true,"methods":[[{"line":30,"text":"\tabstract public function getContainerTag();"},{"line":31,"text":""},{"line":32,"text":"\tabstract public function getChildTag();"},{"line":33,"text":""},{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":32,"text":"\tabstract public function getChildTag();"},{"line":33,"text":""},{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":174,"text":"\tprotected function getMappedAttributes()"},{"line":175,"text":"\t{"},{"line":176,"text":"\t\treturn [];"},{"line":177,"text":"\t}"}],[{"line":184,"text":"\tprotected function exportArrayToAttributes(\\DOMElement $tag, $attr, Entity $entity)"},{"line":185,"text":"\t{"},{"line":186,"text":"\t\tforeach ($entity->$attr AS $key => $value)"},{"line":187,"text":"\t\t{"},{"line":188,"text":"\t\t\tif ($value === '')"},{"line":189,"text":"\t\t\t{"},{"line":190,"text":"\t\t\t\tcontinue;"},{"line":191,"text":"\t\t\t}"},{"line":192,"text":"\t\t\tif (is_bool($value))"},{"line":193,"text":"\t\t\t{"},{"line":194,"text":"\t\t\t\t$value = $value ? 1 : 0;"},{"line":195,"text":"\t\t\t}"},{"line":196,"text":"\t\t\t$tag->setAttribute($attr . '_' . $key, $value);"},{"line":197,"text":"\t\t}"},{"line":198,"text":"\t}"}],[{"line":200,"text":"\tprotected function exportCdataToNewNode(\\DOMElement $tag, $attr, Entity $entity)"},{"line":201,"text":"\t{"},{"line":202,"text":"\t\t$newNode = $tag->ownerDocument->createElement($attr);"},{"line":203,"text":"\t\t$this->exportCdata($newNode, $entity->{$attr});"},{"line":204,"text":"\t\t$tag->appendChild($newNode);"},{"line":205,"text":"\t}"}],[{"line":207,"text":"\tprotected function exportMappedAttributes(\\DOMElement $tag, Entity $entity)"},{"line":208,"text":"\t{"},{"line":209,"text":"\t\tforeach ($this->getMappedAttributes() AS $attr)"},{"line":210,"text":"\t\t{"},{"line":211,"text":"\t\t\t$value = $entity->getValue($attr);"},{"line":212,"text":""},{"line":213,"text":"\t\t\tif ($value !== '')"},{"line":214,"text":"\t\t\t{"},{"line":215,"text":"\t\t\t\tif (is_bool($value))"},{"line":216,"text":"\t\t\t\t{"},{"line":217,"text":"\t\t\t\t\t$value = $value ? 1 : 0;"},{"line":218,"text":"\t\t\t\t}"},{"line":219,"text":""},{"line":220,"text":"\t\t\t\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4"},{"line":221,"text":"\t\t\t\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\"]*$/si', $value))"},{"line":222,"text":"\t\t\t\t{"},{"line":223,"text":"\t\t\t\t\t// This exports CDATA, but does not escape `]]>` like \\XF\\Util\\XML::createDomCdataSection(),"},{"line":224,"text":"\t\t\t\t\t// because it needs to be transparently importable."},{"line":225,"text":"\t\t\t\t\t// If you need to export values containing `]]>`, use exportCdataToNewNode()"},{"line":226,"text":"\t\t\t\t\t// and remove this attribute from exportMappedAttributes()"},{"line":227,"text":""},{"line":228,"text":"\t\t\t\t\t$newNode = $tag->ownerDocument->createElement($attr);"},{"line":229,"text":""},{"line":230,"text":"\t\t\t\t\t$newNode->appendChild("},{"line":231,"text":"\t\t\t\t\t\t$newNode->ownerDocument->createCDATASection($entity->{$attr})"},{"line":232,"text":"\t\t\t\t\t);"},{"line":233,"text":""},{"line":234,"text":"\t\t\t\t\t$tag->appendChild($newNode);"},{"line":235,"text":"\t\t\t\t}"},{"line":236,"text":"\t\t\t\telse"},{"line":237,"text":"\t\t\t\t{"},{"line":238,"text":"\t\t\t\t\t$tag->setAttribute($attr, $value);"},{"line":239,"text":"\t\t\t\t}"},{"line":240,"text":"\t\t\t}"},{"line":241,"text":"\t\t}"},{"line":242,"text":"\t}"}],[{"line":244,"text":"\tprotected function importMappedAttributes(\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)"},{"line":245,"text":"\t{"},{"line":246,"text":"\t\tif ($entity->exists() && $allowMaintained)"},{"line":247,"text":"\t\t{"},{"line":248,"text":"\t\t\t$maintained = $this->getMaintainedAttributes();"},{"line":249,"text":"\t\t}"},{"line":250,"text":"\t\telse"},{"line":251,"text":"\t\t{"},{"line":252,"text":"\t\t\t$maintained = [];"},{"line":253,"text":"\t\t}"},{"line":254,"text":""},{"line":255,"text":"\t\tforeach ($this->getMappedAttributes() AS $attr)"},{"line":256,"text":"\t\t{"},{"line":257,"text":"\t\t\tif (in_array($attr, $maintained))"},{"line":258,"text":"\t\t\t{"},{"line":259,"text":"\t\t\t\tcontinue;"},{"line":260,"text":"\t\t\t}"},{"line":261,"text":""},{"line":262,"text":"\t\t\tif (self::USE_AUTO_CDATA)"},{"line":263,"text":"\t\t\t{"},{"line":264,"text":"\t\t\t\tif (isset($el[$attr]))"},{"line":265,"text":"\t\t\t\t{"},{"line":266,"text":"\t\t\t\t\t$entity->$attr = (string) $el[$attr];"},{"line":267,"text":"\t\t\t\t}"},{"line":268,"text":"\t\t\t\telse if (isset($el->{$attr}))"},{"line":269,"text":"\t\t\t\t{"},{"line":270,"text":"\t\t\t\t\t$entity->$attr = (string) $el->{$attr};"},{"line":271,"text":"\t\t\t\t}"},{"line":272,"text":"\t\t\t}"},{"line":273,"text":"\t\t\telse"},{"line":274,"text":"\t\t\t{"},{"line":275,"text":"\t\t\t\t$entity->$attr = (string) $el[$attr];"},{"line":276,"text":"\t\t\t}"},{"line":277,"text":"\t\t}"},{"line":278,"text":"\t}"}],[{"line":302,"text":"\tprotected function exportCdata(\\DOMElement $parent, $value)"},{"line":303,"text":"\t{"},{"line":304,"text":"\t\t$cdata = Xml::createDomCdataSection($parent->ownerDocument, $value);"},{"line":305,"text":"\t\t$parent->appendChild($cdata);"},{"line":306,"text":"\t}"}]],"sha256":"a4f6ec14e4009be0029548b07272dc77c6ad96f4cca4e067a7d3ea0004126815"},"CodeEventListener.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'code_event_listeners';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'listener';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":"\t\t\t$container->appendChild($node);"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\treturn $entries->count() ? true : false;"},{"line":40,"text":"\t}"}],[{"line":42,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$startTime = microtime(true);"},{"line":45,"text":""},{"line":46,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":47,"text":"\t\tif (!$entries)"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\treturn false;"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$existing = [];"},{"line":53,"text":"\t\tforeach ($this->findAllForType($addOnId)->fetch() AS $listener)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\t$existing[$listener->getAddOnUniqueKey()] = $listener;"},{"line":56,"text":"\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t$i = 0;"},{"line":59,"text":"\t\t$last = 0;"},{"line":60,"text":"\t\tforeach ($entries AS $entry)"},{"line":61,"text":"\t\t{"},{"line":62,"text":"\t\t\t$i++;"},{"line":63,"text":""},{"line":64,"text":"\t\t\tif ($i <= $start)"},{"line":65,"text":"\t\t\t{"},{"line":66,"text":"\t\t\t\tcontinue;"},{"line":67,"text":"\t\t\t}"},{"line":68,"text":""},{"line":69,"text":"\t\t\t$key = $this->getAddOnUniqueKeyFromXml($entry);"},{"line":70,"text":"\t\t\t$entity = $existing[$key] ?? $this->create();"},{"line":71,"text":""},{"line":72,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":73,"text":"\t\t\t$entity->setOption('check_duplicate', false);"},{"line":74,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":75,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":76,"text":""},{"line":77,"text":"\t\t\t$entity->save(true, false);"},{"line":78,"text":""},{"line":79,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":80,"text":"\t\t\t{"},{"line":81,"text":"\t\t\t\t$last = $i;"},{"line":82,"text":"\t\t\t\tbreak;"},{"line":83,"text":"\t\t\t}"},{"line":84,"text":"\t\t}"},{"line":85,"text":"\t\treturn ($last ?: false);"},{"line":86,"text":"\t}"}],[{"line":127,"text":"\tprotected function getMappedAttributes()"},{"line":128,"text":"\t{"},{"line":129,"text":"\t\treturn ["},{"line":130,"text":"\t\t\t'event_id',"},{"line":131,"text":"\t\t\t'execute_order',"},{"line":132,"text":"\t\t\t'callback_class',"},{"line":133,"text":"\t\t\t'callback_method',"},{"line":134,"text":"\t\t\t'active',"},{"line":135,"text":"\t\t\t'hint',"},{"line":136,"text":"\t\t\t'description',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}]],"sha256":"eba1c2560c9c5c48d1185886609203bf73665d664c2ae0f2db0ff17dbad574ab"},"ContentTypeField.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'content_type_fields';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'field';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['content_type', 'field_name'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\t$doc = $container->ownerDocument;"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $doc->createElement($this->getChildTag());"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":39,"text":"\t\t\t$node->appendChild($doc->createTextNode($entry->field_value));"},{"line":40,"text":""},{"line":41,"text":"\t\t\t$container->appendChild($node);"},{"line":42,"text":"\t\t}"},{"line":43,"text":""},{"line":44,"text":"\t\treturn $entries->count() ? true : false;"},{"line":45,"text":"\t}"}],[{"line":47,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":48,"text":"\t{"},{"line":49,"text":"\t\t$startTime = microtime(true);"},{"line":50,"text":""},{"line":51,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":52,"text":"\t\tif (!$entries)"},{"line":53,"text":"\t\t{"},{"line":54,"text":"\t\t\treturn false;"},{"line":55,"text":"\t\t}"},{"line":56,"text":""},{"line":57,"text":"\t\t$existing = $this->finder()->fetch()->groupBy('content_type', 'field_name');"},{"line":58,"text":""},{"line":59,"text":"\t\t$i = 0;"},{"line":60,"text":"\t\t$last = 0;"},{"line":61,"text":"\t\tforeach ($entries AS $entry)"},{"line":62,"text":"\t\t{"},{"line":63,"text":"\t\t\t$i++;"},{"line":64,"text":""},{"line":65,"text":"\t\t\tif ($i <= $start)"},{"line":66,"text":"\t\t\t{"},{"line":67,"text":"\t\t\t\tcontinue;"},{"line":68,"text":"\t\t\t}"},{"line":69,"text":""},{"line":70,"text":"\t\t\t$type = (string) $entry['content_type'];"},{"line":71,"text":"\t\t\t$name = (string) $entry['field_name'];"},{"line":72,"text":"\t\t\t$entity = $existing[$type][$name] ?? $this->create();"},{"line":73,"text":""},{"line":74,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":75,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":76,"text":"\t\t\t$entity->field_value = (string) $entry;"},{"line":77,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":78,"text":""},{"line":79,"text":"\t\t\t$entity->save(true, false);"},{"line":80,"text":""},{"line":81,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":82,"text":"\t\t\t{"},{"line":83,"text":"\t\t\t\t$last = $i;"},{"line":84,"text":"\t\t\t\tbreak;"},{"line":85,"text":"\t\t\t}"},{"line":86,"text":"\t\t}"},{"line":87,"text":"\t\treturn ($last ?: false);"},{"line":88,"text":"\t}"}],[{"line":132,"text":"\tprotected function getMappedAttributes()"},{"line":133,"text":"\t{"},{"line":134,"text":"\t\treturn ["},{"line":135,"text":"\t\t\t'content_type',"},{"line":136,"text":"\t\t\t'field_name',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}]],"sha256":"6c954db974138ac73a76ba87a119c4efdfb85f922a81832928e9ee022e23f594"},"Option.php":{"exists":true,"methods":[[{"line":17,"text":"\tpublic function getContainerTag()"},{"line":18,"text":"\t{"},{"line":19,"text":"\t\treturn 'options';"},{"line":20,"text":"\t}"}],[{"line":22,"text":"\tpublic function getChildTag()"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\treturn 'option';"},{"line":25,"text":"\t}"}],[{"line":27,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\t$entries = $this->finder()"},{"line":30,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":31,"text":"\t\t\t->order('option_id')->fetch();"},{"line":32,"text":""},{"line":33,"text":"\t\t$doc = $container->ownerDocument;"},{"line":34,"text":""},{"line":35,"text":"\t\tforeach ($entries AS $entry)"},{"line":36,"text":"\t\t{"},{"line":37,"text":"\t\t\t$node = $doc->createElement($this->getChildTag());"},{"line":38,"text":""},{"line":39,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":40,"text":"\t\t\t$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));"},{"line":41,"text":"\t\t\tif ($entry->edit_format_params !== '')"},{"line":42,"text":"\t\t\t{"},{"line":43,"text":"\t\t\t\t$node->appendChild(Xml::createDomElement($doc, 'edit_format_params', $entry->edit_format_params));"},{"line":44,"text":"\t\t\t}"},{"line":45,"text":"\t\t\tif ($entry->sub_options)"},{"line":46,"text":"\t\t\t{"},{"line":47,"text":"\t\t\t\t$node->appendChild(Xml::createDomElement($doc, 'sub_options', implode(\"\\n\", $entry->sub_options)));"},{"line":48,"text":"\t\t\t}"},{"line":49,"text":""},{"line":50,"text":"\t\t\tforeach ($entry->Relations AS $relation)"},{"line":51,"text":"\t\t\t{"},{"line":52,"text":"\t\t\t\t$relationNode = $doc->createElement('relation');"},{"line":53,"text":"\t\t\t\t$relationNode->setAttribute('group_id', $relation->group_id);"},{"line":54,"text":"\t\t\t\t$relationNode->setAttribute('display_order', $relation->display_order);"},{"line":55,"text":"\t\t\t\t$node->appendChild($relationNode);"},{"line":56,"text":"\t\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t\t$container->appendChild($node);"},{"line":59,"text":"\t\t}"},{"line":60,"text":""},{"line":61,"text":"\t\treturn $entries->count() ? true : false;"},{"line":62,"text":"\t}"}],[{"line":64,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":65,"text":"\t{"},{"line":66,"text":"\t\t$startTime = microtime(true);"},{"line":67,"text":""},{"line":68,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":69,"text":"\t\tif (!$entries)"},{"line":70,"text":"\t\t{"},{"line":71,"text":"\t\t\treturn false;"},{"line":72,"text":"\t\t}"},{"line":73,"text":""},{"line":74,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'option_id');"},{"line":75,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":76,"text":""},{"line":77,"text":"\t\t$i = 0;"},{"line":78,"text":"\t\t$last = 0;"},{"line":79,"text":"\t\tforeach ($entries AS $entry)"},{"line":80,"text":"\t\t{"},{"line":81,"text":"\t\t\t$id = $ids[$i++];"},{"line":82,"text":""},{"line":83,"text":"\t\t\tif ($i <= $start)"},{"line":84,"text":"\t\t\t{"},{"line":85,"text":"\t\t\t\tcontinue;"},{"line":86,"text":"\t\t\t}"},{"line":87,"text":""},{"line":88,"text":"\t\t\t/** @var \\XF\\Entity\\Option $entity */"},{"line":89,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":90,"text":""},{"line":91,"text":"\t\t\t$entity->setOptions(["},{"line":92,"text":"\t\t\t\t'verify_validation_callback' => false,"},{"line":93,"text":"\t\t\t\t'verify_value' => false,"},{"line":94,"text":"\t\t\t]);"},{"line":95,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":96,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":97,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":98,"text":"\t\t\t$entity->default_value = (string) $entry->default_value;"},{"line":99,"text":"\t\t\t$entity->edit_format_params = (string) $entry->edit_format_params;"},{"line":100,"text":""},{"line":101,"text":"\t\t\t$subOptions = (string) $entry->sub_options;"},{"line":102,"text":"\t\t\t$entity->sub_options = strlen($subOptions) ? explode(\"\\n\", $subOptions) : [];"},{"line":103,"text":""},{"line":104,"text":"\t\t\t$entity->save(true, false);"},{"line":105,"text":""},{"line":106,"text":"\t\t\t$relations = [];"},{"line":107,"text":"\t\t\tforeach ($entry->relation AS $relation)"},{"line":108,"text":"\t\t\t{"},{"line":109,"text":"\t\t\t\t$relations[(string) $relation['group_id']] = (string) $relation['display_order'];"},{"line":110,"text":"\t\t\t}"},{"line":111,"text":""},{"line":112,"text":"\t\t\t$entity->updateRelations($relations);"},{"line":113,"text":""},{"line":114,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":115,"text":"\t\t\t{"},{"line":116,"text":"\t\t\t\t$last = $i;"},{"line":117,"text":"\t\t\t\tbreak;"},{"line":118,"text":"\t\t\t}"},{"line":119,"text":"\t\t}"},{"line":120,"text":"\t\treturn ($last ?: false);"},{"line":121,"text":"\t}"}],[{"line":128,"text":"\tprotected function getMappedAttributes()"},{"line":129,"text":"\t{"},{"line":130,"text":"\t\treturn ["},{"line":131,"text":"\t\t\t'option_id',"},{"line":132,"text":"\t\t\t'edit_format',"},{"line":133,"text":"\t\t\t'data_type',"},{"line":134,"text":"\t\t\t'validation_class',"},{"line":135,"text":"\t\t\t'validation_method',"},{"line":136,"text":"\t\t\t'advanced',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}]],"sha256":"d2a6129dbd3f40dde334388d185aec02a74e33e010b5f81305211f093d1e4e60"},"OptionGroup.php":{"exists":true,"methods":[[{"line":14,"text":"\tpublic function getContainerTag()"},{"line":15,"text":"\t{"},{"line":16,"text":"\t\treturn 'option_groups';"},{"line":17,"text":"\t}"}],[{"line":19,"text":"\tpublic function getChildTag()"},{"line":20,"text":"\t{"},{"line":21,"text":"\t\treturn 'group';"},{"line":22,"text":"\t}"}],[{"line":24,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\t$entries = $this->finder()"},{"line":27,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":28,"text":"\t\t\t->order('group_id')->fetch();"},{"line":29,"text":""},{"line":30,"text":"\t\tforeach ($entries AS $entry)"},{"line":31,"text":"\t\t{"},{"line":32,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":33,"text":""},{"line":34,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":35,"text":""},{"line":36,"text":"\t\t\t$container->appendChild($node);"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\treturn $entries->count() ? true : false;"},{"line":40,"text":"\t}"}],[{"line":42,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$startTime = microtime(true);"},{"line":45,"text":""},{"line":46,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":47,"text":"\t\tif (!$entries)"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\treturn false;"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'group_id');"},{"line":53,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":54,"text":""},{"line":55,"text":"\t\t$i = 0;"},{"line":56,"text":"\t\t$last = 0;"},{"line":57,"text":"\t\tforeach ($entries AS $entry)"},{"line":58,"text":"\t\t{"},{"line":59,"text":"\t\t\t$id = $ids[$i++];"},{"line":60,"text":""},{"line":61,"text":"\t\t\tif ($i <= $start)"},{"line":62,"text":"\t\t\t{"},{"line":63,"text":"\t\t\t\tcontinue;"},{"line":64,"text":"\t\t\t}"},{"line":65,"text":""},{"line":66,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":67,"text":""},{"line":68,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":69,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":70,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":71,"text":""},{"line":72,"text":"\t\t\t$entity->save(true, false);"},{"line":73,"text":""},{"line":74,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":75,"text":"\t\t\t{"},{"line":76,"text":"\t\t\t\t$last = $i;"},{"line":77,"text":"\t\t\t\tbreak;"},{"line":78,"text":"\t\t\t}"},{"line":79,"text":"\t\t}"},{"line":80,"text":"\t\treturn ($last ?: false);"},{"line":81,"text":"\t}"}],[{"line":88,"text":"\tprotected function getMappedAttributes()"},{"line":89,"text":"\t{"},{"line":90,"text":"\t\treturn ["},{"line":91,"text":"\t\t\t'group_id',"},{"line":92,"text":"\t\t\t'icon',"},{"line":93,"text":"\t\t\t'display_order',"},{"line":94,"text":"\t\t\t'debug_only',"},{"line":95,"text":"\t\t];"},{"line":96,"text":"\t}"}]],"sha256":"9d75fc1cf5be6c69063ecaed7e0d89a5a2e29ff560e6e57125b59f90405718da"},"Permission.php":{"exists":true,"methods":[[{"line":18,"text":"\tpublic function getContainerTag()"},{"line":19,"text":"\t{"},{"line":20,"text":"\t\treturn 'permissions';"},{"line":21,"text":"\t}"}],[{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'permission';"},{"line":26,"text":"\t}"}],[{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['permission_group_id', 'permission_id'])->fetch();"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":39,"text":""},{"line":40,"text":"\t\t\t$container->appendChild($node);"},{"line":41,"text":"\t\t}"},{"line":42,"text":""},{"line":43,"text":"\t\treturn $entries->count() ? true : false;"},{"line":44,"text":"\t}"}],[{"line":46,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":47,"text":"\t{"},{"line":48,"text":"\t\t$startTime = microtime(true);"},{"line":49,"text":""},{"line":50,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":51,"text":"\t\tif (!$entries)"},{"line":52,"text":"\t\t{"},{"line":53,"text":"\t\t\treturn false;"},{"line":54,"text":"\t\t}"},{"line":55,"text":""},{"line":56,"text":"\t\t$conditions = [];"},{"line":57,"text":"\t\tforeach ($entries AS $entry)"},{"line":58,"text":"\t\t{"},{"line":59,"text":"\t\t\t$conditions[] = ["},{"line":60,"text":"\t\t\t\t'permission_group_id' => (string) $entry['permission_group_id'],"},{"line":61,"text":"\t\t\t\t'permission_id' => (string) $entry['permission_id'],"},{"line":62,"text":"\t\t\t];"},{"line":63,"text":"\t\t}"},{"line":64,"text":"\t\tif ($conditions)"},{"line":65,"text":"\t\t{"},{"line":66,"text":"\t\t\t$existing = $this->finder()->whereOr($conditions)->fetch()->groupBy('permission_group_id', 'permission_id');"},{"line":67,"text":"\t\t}"},{"line":68,"text":"\t\telse"},{"line":69,"text":"\t\t{"},{"line":70,"text":"\t\t\t$existing = [];"},{"line":71,"text":"\t\t}"},{"line":72,"text":""},{"line":73,"text":"\t\t$i = 0;"},{"line":74,"text":"\t\t$last = 0;"},{"line":75,"text":"\t\tforeach ($entries AS $entry)"},{"line":76,"text":"\t\t{"},{"line":77,"text":"\t\t\t$i++;"},{"line":78,"text":""},{"line":79,"text":"\t\t\tif ($i <= $start)"},{"line":80,"text":"\t\t\t{"},{"line":81,"text":"\t\t\t\tcontinue;"},{"line":82,"text":"\t\t\t}"},{"line":83,"text":""},{"line":84,"text":"\t\t\t$groupId = (string) $entry['permission_group_id'];"},{"line":85,"text":"\t\t\t$permissionId = (string) $entry['permission_id'];"},{"line":86,"text":"\t\t\t$entity = $existing[$groupId][$permissionId] ?? $this->create();"},{"line":87,"text":""},{"line":88,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":89,"text":"\t\t\t$entity->setOption('dependent_check', false);"},{"line":90,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":91,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":92,"text":""},{"line":93,"text":"\t\t\t$entity->save(true, false);"},{"line":94,"text":""},{"line":95,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":96,"text":"\t\t\t{"},{"line":97,"text":"\t\t\t\t$last = $i;"},{"line":98,"text":"\t\t\t\tbreak;"},{"line":99,"text":"\t\t\t}"},{"line":100,"text":"\t\t}"},{"line":101,"text":"\t\treturn ($last ?: false);"},{"line":102,"text":"\t}"}],[{"line":149,"text":"\tprotected function getMappedAttributes()"},{"line":150,"text":"\t{"},{"line":151,"text":"\t\treturn ["},{"line":152,"text":"\t\t\t'permission_group_id',"},{"line":153,"text":"\t\t\t'permission_id',"},{"line":154,"text":"\t\t\t'permission_type',"},{"line":155,"text":"\t\t\t'depend_permission_id',"},{"line":156,"text":"\t\t\t'interface_group_id',"},{"line":157,"text":"\t\t\t'display_order',"},{"line":158,"text":"\t\t];"},{"line":159,"text":"\t}"}]],"sha256":"8d6b8657e8585eb8da7f1401df882e0033f93e07179ce4df398b95d22d74c477"},"PermissionInterfaceGroup.php":{"exists":true,"methods":[[{"line":15,"text":"\tpublic function getContainerTag()"},{"line":16,"text":"\t{"},{"line":17,"text":"\t\treturn 'permission_interface_groups';"},{"line":18,"text":"\t}"}],[{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'interface_group';"},{"line":23,"text":"\t}"}],[{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->order('interface_group_id')->fetch();"},{"line":30,"text":""},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$container->appendChild($node);"},{"line":38,"text":"\t\t}"},{"line":39,"text":""},{"line":40,"text":"\t\treturn $entries->count() ? true : false;"},{"line":41,"text":"\t}"}],[{"line":43,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":44,"text":"\t{"},{"line":45,"text":"\t\t$startTime = microtime(true);"},{"line":46,"text":""},{"line":47,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":48,"text":"\t\tif (!$entries)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\treturn false;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'interface_group_id');"},{"line":54,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":55,"text":""},{"line":56,"text":"\t\t$i = 0;"},{"line":57,"text":"\t\t$last = 0;"},{"line":58,"text":"\t\tforeach ($entries AS $entry)"},{"line":59,"text":"\t\t{"},{"line":60,"text":"\t\t\t$id = $ids[$i++];"},{"line":61,"text":""},{"line":62,"text":"\t\t\tif ($i <= $start)"},{"line":63,"text":"\t\t\t{"},{"line":64,"text":"\t\t\t\tcontinue;"},{"line":65,"text":"\t\t\t}"},{"line":66,"text":""},{"line":67,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":68,"text":""},{"line":69,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":70,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":71,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":72,"text":""},{"line":73,"text":"\t\t\t$entity->save(true, false);"},{"line":74,"text":""},{"line":75,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":76,"text":"\t\t\t{"},{"line":77,"text":"\t\t\t\t$last = $i;"},{"line":78,"text":"\t\t\t\tbreak;"},{"line":79,"text":"\t\t\t}"},{"line":80,"text":"\t\t}"},{"line":81,"text":"\t\treturn ($last ?: false);"},{"line":82,"text":"\t}"}],[{"line":95,"text":"\tprotected function getMappedAttributes()"},{"line":96,"text":"\t{"},{"line":97,"text":"\t\treturn ["},{"line":98,"text":"\t\t\t'interface_group_id',"},{"line":99,"text":"\t\t\t'display_order',"},{"line":100,"text":"\t\t\t'is_moderator',"},{"line":101,"text":"\t\t];"},{"line":102,"text":"\t}"}]],"sha256":"b2b1397ba1dc3174f680ebe4796a88904aa577db969177485d56cd7568c1f8d6"},"Phrase.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'phrases';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'phrase';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->where('language_id', 0)"},{"line":31,"text":"\t\t\t->order('title')->fetch();"},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":35,"text":""},{"line":36,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":37,"text":"\t\t\tif ($entry['global_cache'])"},{"line":38,"text":"\t\t\t{"},{"line":39,"text":"\t\t\t\t$node->setAttribute('global_cache', '1');"},{"line":40,"text":"\t\t\t}"},{"line":41,"text":"\t\t\t$this->exportCdata($node, $entry->phrase_text);"},{"line":42,"text":""},{"line":43,"text":"\t\t\t$container->appendChild($node);"},{"line":44,"text":"\t\t}"},{"line":45,"text":""},{"line":46,"text":"\t\treturn $entries->count() ? true : false;"},{"line":47,"text":"\t}"}],[{"line":49,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":50,"text":"\t{"},{"line":51,"text":"\t\t$startTime = microtime(true);"},{"line":52,"text":""},{"line":53,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":54,"text":"\t\tif (!$entries)"},{"line":55,"text":"\t\t{"},{"line":56,"text":"\t\t\treturn false;"},{"line":57,"text":"\t\t}"},{"line":58,"text":""},{"line":59,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'title');"},{"line":60,"text":""},{"line":61,"text":"\t\t// This chucking approach has been taken due to a MariaDB performance regression with large"},{"line":62,"text":"\t\t// IN clauses (see #187523). However, this may have benefits on some slower servers as this"},{"line":63,"text":"\t\t// will reduce the number of times we attempt to instantiate phrase entities that won't be"},{"line":64,"text":"\t\t// processed in this run."},{"line":65,"text":"\t\t$chunkSize = 200;"},{"line":66,"text":"\t\t$nextFetch = null;"},{"line":67,"text":""},{"line":68,"text":"\t\t$i = 0;"},{"line":69,"text":"\t\t$last = 0;"},{"line":70,"text":"\t\tforeach ($entries AS $entry)"},{"line":71,"text":"\t\t{"},{"line":72,"text":"\t\t\t$originalI = $i;"},{"line":73,"text":""},{"line":74,"text":"\t\t\t$id = $ids[$i++];"},{"line":75,"text":""},{"line":76,"text":"\t\t\tif ($i <= $start)"},{"line":77,"text":"\t\t\t{"},{"line":78,"text":"\t\t\t\tcontinue;"},{"line":79,"text":"\t\t\t}"},{"line":80,"text":""},{"line":81,"text":"\t\t\tif ($nextFetch === null || $originalI >= $nextFetch)"},{"line":82,"text":"\t\t\t{"},{"line":83,"text":"\t\t\t\t$slice = array_slice($ids, $originalI, $chunkSize);"},{"line":84,"text":"\t\t\t\t$nextFetch = $originalI + $chunkSize;"},{"line":85,"text":""},{"line":86,"text":"\t\t\t\t$existing = $this->finder()"},{"line":87,"text":"\t\t\t\t\t->where('title', $slice)"},{"line":88,"text":"\t\t\t\t\t->where('language_id', 0)"},{"line":89,"text":"\t\t\t\t\t->keyedBy('title')"},{"line":90,"text":"\t\t\t\t\t->fetch();"},{"line":91,"text":"\t\t\t}"},{"line":92,"text":""},{"line":93,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":94,"text":"\t\t\t$entity->setOption('check_duplicate', false);"},{"line":95,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":96,"text":""},{"line":97,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":98,"text":"\t\t\t$entity->language_id = 0;"},{"line":99,"text":"\t\t\t$entity->global_cache = (int) $entry['global_cache'];"},{"line":100,"text":"\t\t\t$entity->phrase_text = $this->getCdataValue($entry);"},{"line":101,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":102,"text":"\t\t\t$entity->save(true, false);"},{"line":103,"text":""},{"line":104,"text":"\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');"},{"line":105,"text":""},{"line":106,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":107,"text":"\t\t\t{"},{"line":108,"text":"\t\t\t\t$last = $i;"},{"line":109,"text":"\t\t\t\tbreak;"},{"line":110,"text":"\t\t\t}"},{"line":111,"text":"\t\t}"},{"line":112,"text":""},{"line":113,"text":"\t\treturn ($last ?: false);"},{"line":114,"text":"\t}"}],[{"line":121,"text":"\tprotected function getMappedAttributes()"},{"line":122,"text":"\t{"},{"line":123,"text":"\t\treturn ["},{"line":124,"text":"\t\t\t'title',"},{"line":125,"text":"\t\t\t'version_id',"},{"line":126,"text":"\t\t\t'version_string',"},{"line":127,"text":"\t\t];"},{"line":128,"text":"\t}"}]],"sha256":"af1d53936447b820d9f3dc3e50a7058dfe96890417f5fd466fb1361d99988266"},"Route.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'routes';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'route';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$container->appendChild($node);"},{"line":38,"text":"\t\t}"},{"line":39,"text":""},{"line":40,"text":"\t\treturn $entries->count() ? true : false;"},{"line":41,"text":"\t}"}],[{"line":43,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":44,"text":"\t{"},{"line":45,"text":"\t\t$startTime = microtime(true);"},{"line":46,"text":""},{"line":47,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":48,"text":"\t\tif (!$entries)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\treturn false;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t$conditions = [];"},{"line":54,"text":"\t\t$existing = [];"},{"line":55,"text":"\t\tforeach ($entries AS $entry)"},{"line":56,"text":"\t\t{"},{"line":57,"text":"\t\t\t$conditions[] = ["},{"line":58,"text":"\t\t\t\t'route_type' => (string) $entry['route_type'],"},{"line":59,"text":"\t\t\t\t'route_prefix' => (string) $entry['route_prefix'],"},{"line":60,"text":"\t\t\t\t'sub_name' => (string) $entry['sub_name'],"},{"line":61,"text":"\t\t\t];"},{"line":62,"text":"\t\t}"},{"line":63,"text":"\t\tif ($conditions)"},{"line":64,"text":"\t\t{"},{"line":65,"text":"\t\t\tforeach ($this->finder()->whereOr($conditions)->fetch() AS $route)"},{"line":66,"text":"\t\t\t{"},{"line":67,"text":"\t\t\t\t$existing[$route->route_type][$route->route_prefix][$route->sub_name] = $route;"},{"line":68,"text":"\t\t\t}"},{"line":69,"text":"\t\t}"},{"line":70,"text":""},{"line":71,"text":"\t\t$i = 0;"},{"line":72,"text":"\t\t$last = 0;"},{"line":73,"text":"\t\tforeach ($entries AS $entry)"},{"line":74,"text":"\t\t{"},{"line":75,"text":"\t\t\t$i++;"},{"line":76,"text":""},{"line":77,"text":"\t\t\tif ($i <= $start)"},{"line":78,"text":"\t\t\t{"},{"line":79,"text":"\t\t\t\tcontinue;"},{"line":80,"text":"\t\t\t}"},{"line":81,"text":""},{"line":82,"text":"\t\t\t$type = (string) $entry['route_type'];"},{"line":83,"text":"\t\t\t$prefix = (string) $entry['route_prefix'];"},{"line":84,"text":"\t\t\t$subName = (string) $entry['sub_name'];"},{"line":85,"text":"\t\t\t$entity = $existing[$type][$prefix][$subName] ?? $this->create();"},{"line":86,"text":""},{"line":87,"text":"\t\t\t$entity->setOptions(["},{"line":88,"text":"\t\t\t\t'check_duplicate' => false,"},{"line":89,"text":"\t\t\t]);"},{"line":90,"text":""},{"line":91,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":92,"text":""},{"line":93,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":94,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":95,"text":"\t\t\t$entity->save(true, false);"},{"line":96,"text":""},{"line":97,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":98,"text":"\t\t\t{"},{"line":99,"text":"\t\t\t\t$last = $i;"},{"line":100,"text":"\t\t\t\tbreak;"},{"line":101,"text":"\t\t\t}"},{"line":102,"text":"\t\t}"},{"line":103,"text":"\t\treturn ($last ?: false);"},{"line":104,"text":"\t}"}],[{"line":154,"text":"\tprotected function getMappedAttributes()"},{"line":155,"text":"\t{"},{"line":156,"text":"\t\treturn ["},{"line":157,"text":"\t\t\t'route_type',"},{"line":158,"text":"\t\t\t'route_prefix',"},{"line":159,"text":"\t\t\t'sub_name',"},{"line":160,"text":"\t\t\t'format',"},{"line":161,"text":"\t\t\t'build_class',"},{"line":162,"text":"\t\t\t'build_method',"},{"line":163,"text":"\t\t\t'controller',"},{"line":164,"text":"\t\t\t'context',"},{"line":165,"text":"\t\t\t'action_prefix',"},{"line":166,"text":"\t\t];"},{"line":167,"text":"\t}"}]],"sha256":"ffd5dc9411b761a264810af2241af71c553ab2b409f670305687e9d4d75a34bb"},"Template.php":{"exists":true,"methods":[[{"line":15,"text":"\tpublic function getContainerTag()"},{"line":16,"text":"\t{"},{"line":17,"text":"\t\treturn 'templates';"},{"line":18,"text":"\t}"}],[{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'template';"},{"line":23,"text":"\t}"}],[{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->where('style_id', 0)"},{"line":30,"text":"\t\t\t->order(['type', 'title'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":"\t\t\t$this->exportCdata($node, $entry->template);"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$container->appendChild($node);"},{"line":39,"text":"\t\t}"},{"line":40,"text":""},{"line":41,"text":"\t\treturn $entries->count() ? true : false;"},{"line":42,"text":"\t}"}],[{"line":44,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":45,"text":"\t{"},{"line":46,"text":"\t\t$startTime = microtime(true);"},{"line":47,"text":""},{"line":48,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":49,"text":"\t\tif (!$entries)"},{"line":50,"text":"\t\t{"},{"line":51,"text":"\t\t\treturn false;"},{"line":52,"text":"\t\t}"},{"line":53,"text":""},{"line":54,"text":"\t\t$conditions = [];"},{"line":55,"text":"\t\tforeach ($entries AS $entry)"},{"line":56,"text":"\t\t{"},{"line":57,"text":"\t\t\t$conditions[] = ["},{"line":58,"text":"\t\t\t\t'type' => (string) $entry['type'],"},{"line":59,"text":"\t\t\t\t'title' => (string) $entry['title'],"},{"line":60,"text":"\t\t\t];"},{"line":61,"text":"\t\t}"},{"line":62,"text":"\t\tif ($conditions)"},{"line":63,"text":"\t\t{"},{"line":64,"text":"\t\t\t$existing = $this->finder()"},{"line":65,"text":"\t\t\t\t->whereOr($conditions)"},{"line":66,"text":"\t\t\t\t->where('style_id', 0)"},{"line":67,"text":"\t\t\t\t->fetch()"},{"line":68,"text":"\t\t\t\t->groupBy('type', 'title');"},{"line":69,"text":"\t\t}"},{"line":70,"text":"\t\telse"},{"line":71,"text":"\t\t{"},{"line":72,"text":"\t\t\t$existing = [];"},{"line":73,"text":"\t\t}"},{"line":74,"text":""},{"line":75,"text":"\t\t$i = 0;"},{"line":76,"text":"\t\t$last = 0;"},{"line":77,"text":""},{"line":78,"text":"\t\tforeach ($entries AS $entry)"},{"line":79,"text":"\t\t{"},{"line":80,"text":"\t\t\t$i++;"},{"line":81,"text":""},{"line":82,"text":"\t\t\tif ($i <= $start)"},{"line":83,"text":"\t\t\t{"},{"line":84,"text":"\t\t\t\tcontinue;"},{"line":85,"text":"\t\t\t}"},{"line":86,"text":""},{"line":87,"text":"\t\t\t$type = (string) $entry['type'];"},{"line":88,"text":"\t\t\t$title = (string) $entry['title'];"},{"line":89,"text":"\t\t\t$entity = $existing[$type][$title] ?? $this->create();"},{"line":90,"text":"\t\t\t$entity->setOption('check_duplicate', false);"},{"line":91,"text":"\t\t\t$entity->setOption('report_modification_errors', false);"},{"line":92,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":93,"text":""},{"line":94,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":95,"text":"\t\t\t$entity->style_id = 0;"},{"line":96,"text":"\t\t\t$entity->template = $this->getCdataValue($entry);"},{"line":97,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":98,"text":"\t\t\t$entity->save(true, false);"},{"line":99,"text":""},{"line":100,"text":"\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');"},{"line":101,"text":""},{"line":102,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":103,"text":"\t\t\t{"},{"line":104,"text":"\t\t\t\t$last = $i;"},{"line":105,"text":"\t\t\t\tbreak;"},{"line":106,"text":"\t\t\t}"},{"line":107,"text":"\t\t}"},{"line":108,"text":"\t\treturn ($last ?: false);"},{"line":109,"text":"\t}"}],[{"line":156,"text":"\tprotected function getMappedAttributes()"},{"line":157,"text":"\t{"},{"line":158,"text":"\t\treturn ["},{"line":159,"text":"\t\t\t'type',"},{"line":160,"text":"\t\t\t'title',"},{"line":161,"text":"\t\t\t'version_id',"},{"line":162,"text":"\t\t\t'version_string',"},{"line":163,"text":"\t\t];"},{"line":164,"text":"\t}"}]],"sha256":"fecae5772cfd98cb53672180957a3a50a521d6ee6194dd5d7a346630afb3933a"},"TemplateModification.php":{"exists":true,"methods":[[{"line":18,"text":"\tpublic function getContainerTag()"},{"line":19,"text":"\t{"},{"line":20,"text":"\t\treturn 'template_modifications';"},{"line":21,"text":"\t}"}],[{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'modification';"},{"line":26,"text":"\t}"}],[{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['template', 'modification_key'])->fetch();"},{"line":33,"text":"\t\tforeach ($entries AS $entry)"},{"line":34,"text":"\t\t{"},{"line":35,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":38,"text":""},{"line":39,"text":"\t\t\t$this->exportCdataToNewNode($node, 'find', $entry);"},{"line":40,"text":"\t\t\t$this->exportCdataToNewNode($node, 'replace', $entry);"},{"line":41,"text":""},{"line":42,"text":"\t\t\t$container->appendChild($node);"},{"line":43,"text":"\t\t}"},{"line":44,"text":""},{"line":45,"text":"\t\treturn $entries->count() ? true : false;"},{"line":46,"text":"\t}"}],[{"line":48,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":49,"text":"\t{"},{"line":50,"text":"\t\t$startTime = microtime(true);"},{"line":51,"text":""},{"line":52,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":53,"text":"\t\tif (!$entries)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\treturn false;"},{"line":56,"text":"\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t$keys = $this->pluckXmlAttribute($entries, 'modification_key');"},{"line":59,"text":"\t\t$existing = $this->finder()"},{"line":60,"text":"\t\t\t->where('modification_key', $keys)"},{"line":61,"text":"\t\t\t->keyedBy('modification_key')"},{"line":62,"text":"\t\t\t->fetch();"},{"line":63,"text":""},{"line":64,"text":"\t\t$i = 0;"},{"line":65,"text":"\t\t$last = 0;"},{"line":66,"text":"\t\tforeach ($entries AS $entry)"},{"line":67,"text":"\t\t{"},{"line":68,"text":"\t\t\t$i++;"},{"line":69,"text":""},{"line":70,"text":"\t\t\tif ($i <= $start)"},{"line":71,"text":"\t\t\t{"},{"line":72,"text":"\t\t\t\tcontinue;"},{"line":73,"text":"\t\t\t}"},{"line":74,"text":""},{"line":75,"text":"\t\t\t$entity = $existing[(string) $entry['modification_key']] ?? $this->create();"},{"line":76,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":77,"text":"\t\t\t$entity->setOption('hide_errors', true);"},{"line":78,"text":""},{"line":79,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":80,"text":""},{"line":81,"text":"\t\t\t$entity->find = $this->getCdataValue($entry->find);"},{"line":82,"text":"\t\t\t$entity->replace = $this->getCdataValue($entry->replace);"},{"line":83,"text":""},{"line":84,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":85,"text":"\t\t\t$entity->save(true, false);"},{"line":86,"text":""},{"line":87,"text":"\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');"},{"line":88,"text":""},{"line":89,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":90,"text":"\t\t\t{"},{"line":91,"text":"\t\t\t\t$last = $i;"},{"line":92,"text":"\t\t\t\tbreak;"},{"line":93,"text":"\t\t\t}"},{"line":94,"text":"\t\t}"},{"line":95,"text":"\t\treturn ($last ?: false);"},{"line":96,"text":"\t}"}],[{"line":140,"text":"\tprotected function getMappedAttributes()"},{"line":141,"text":"\t{"},{"line":142,"text":"\t\treturn ["},{"line":143,"text":"\t\t\t'type',"},{"line":144,"text":"\t\t\t'template',"},{"line":145,"text":"\t\t\t'modification_key',"},{"line":146,"text":"\t\t\t'description',"},{"line":147,"text":"\t\t\t'execution_order',"},{"line":148,"text":"\t\t\t'enabled',"},{"line":149,"text":"\t\t\t'action',"},{"line":150,"text":"\t\t];"},{"line":151,"text":"\t}"}]],"sha256":"c27e2bb5baa379dcaf0eab73f35fcc62f5ce656fbccbcb4d6ded095d83b4b31a"}},"db":{"addon_rows":0,"board_active":"0","content_type_field_rows":0,"error_count_after_baseline":0,"error_max":43,"listener_addon_rows":0,"option_group_rows":0,"option_rows":0,"permission_rows":0,"phrase_addon_rows":0,"phrase_prefix_rows":0,"route_addon_rows":0,"route_prefix_rows":0,"table_rows":0,"template_addon_rows":0,"template_mod_addon_rows":0,"template_prefix_rows":0},"db_probe":{"rc":0,"stderr_sha256":"","stdout_lines":1},"error_probe":{"rc":0,"stderr_sha256":"","stdout_lines":1},"errors_after_baseline":[],"guest":"newfi-staging","identity_ok":true,"lifecycle_contract":{"src/XF/AddOn/AbstractSetup.php":{"blocks":[[{"line":25,"text":"\tabstract public function install(array $stepParams = []);"},{"line":26,"text":""},{"line":27,"text":"\t/**"},{"line":28,"text":"\t * @param array $stepParams"},{"line":29,"text":"\t *"},{"line":30,"text":"\t * @return null|StepResult"},{"line":31,"text":"\t */"},{"line":32,"text":"\tabstract public function upgrade(array $stepParams = []);"},{"line":33,"text":""},{"line":34,"text":"\t/**"},{"line":35,"text":"\t * @param array $stepParams"},{"line":36,"text":"\t *"},{"line":37,"text":"\t * @return null|StepResult"},{"line":38,"text":"\t */"},{"line":39,"text":"\tabstract public function uninstall(array $stepParams = []);"},{"line":40,"text":""},{"line":41,"text":"\tpublic function __construct(AddOn $addOn, App $app)"},{"line":42,"text":"\t{"},{"line":43,"text":"\t\t$this->addOn = $addOn;"},{"line":44,"text":"\t\t$this->app = $app;"},{"line":45,"text":"\t}"}],[{"line":39,"text":"\tabstract public function uninstall(array $stepParams = []);"},{"line":40,"text":""},{"line":41,"text":"\tpublic function __construct(AddOn $addOn, App $app)"},{"line":42,"text":"\t{"},{"line":43,"text":"\t\t$this->addOn = $addOn;"},{"line":44,"text":"\t\t$this->app = $app;"},{"line":45,"text":"\t}"}]],"exists":true,"sha256":"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88"},"src/XF/AddOn/AddOn.php":{"blocks":[[{"line":553,"text":"\tpublic function preInstall()"},{"line":554,"text":"\t{"},{"line":555,"text":"\t\tif (!$this->installedAddOn)"},{"line":556,"text":"\t\t{"},{"line":557,"text":"\t\t\t$json = $this->getJson();"},{"line":558,"text":""},{"line":559,"text":"\t\t\t$installed = \\XF::em()->create(\\XF\\Entity\\AddOn::class);"},{"line":560,"text":"\t\t\t$installed->bulkSet(["},{"line":561,"text":"\t\t\t\t'addon_id' => $this->getAddOnId(),"},{"line":562,"text":"\t\t\t\t'title' => $json['title'],"},{"line":563,"text":"\t\t\t\t'version_string' => $json['version_string'],"},{"line":564,"text":"\t\t\t\t'version_id' => $json['version_id'],"},{"line":565,"text":"\t\t\t\t'active' => true,"},{"line":566,"text":"\t\t\t\t'is_processing' => true,"},{"line":567,"text":"\t\t\t\t'json_hash' => $this->getJsonHash(),"},{"line":568,"text":"\t\t\t\t'last_pending_action' => 'install:0',"},{"line":569,"text":"\t\t\t]);"},{"line":570,"text":"\t\t\t$installed->save();"},{"line":571,"text":""},{"line":572,"text":"\t\t\t$this->installedAddOn = $installed;"},{"line":573,"text":""},{"line":574,"text":"\t\t\t\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);"},{"line":575,"text":"\t\t}"},{"line":576,"text":"\t}"}],[{"line":578,"text":"\tpublic function postInstall(array &$stateChanges)"},{"line":579,"text":"\t{"},{"line":580,"text":"\t\t$setup = $this->getSetup();"},{"line":581,"text":"\t\tif ($setup)"},{"line":582,"text":"\t\t{"},{"line":583,"text":"\t\t\t$setup->postInstall($stateChanges);"},{"line":584,"text":"\t\t}"},{"line":585,"text":""},{"line":586,"text":"\t\t$this->resetPendingAction();"},{"line":587,"text":""},{"line":588,"text":"\t\t$installed = $this->installedAddOn;"},{"line":589,"text":""},{"line":590,"text":"\t\t$json = $this->getJson();"},{"line":591,"text":"\t\t\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);"},{"line":592,"text":"\t}"}],[{"line":644,"text":"\tpublic function preUninstall()"},{"line":645,"text":"\t{"},{"line":646,"text":"\t\t$installed = $this->installedAddOn;"},{"line":647,"text":"\t\tif (!$installed)"},{"line":648,"text":"\t\t{"},{"line":649,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":650,"text":"\t\t}"},{"line":651,"text":""},{"line":652,"text":"\t\t$installed->is_processing = true;"},{"line":653,"text":"\t\t$installed->last_pending_action = 'uninstall:0';"},{"line":654,"text":"\t\t$installed->saveIfChanged();"},{"line":655,"text":""},{"line":656,"text":"\t\t$json = $this->getJson();"},{"line":657,"text":"\t\t\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);"},{"line":658,"text":"\t}"}],[{"line":660,"text":"\tpublic function postUninstall()"},{"line":661,"text":"\t{"},{"line":662,"text":"\t\t/** @var FileCheck $fileCheck */"},{"line":663,"text":"\t\t$fileCheck = \\XF::em()->create(FileCheck::class);"},{"line":664,"text":"\t\t$fileCheck->save();"},{"line":665,"text":""},{"line":666,"text":"\t\t\\XF::app()->jobManager()->enqueueUnique('fileCheck', \\XF\\Job\\FileCheck::class, ["},{"line":667,"text":"\t\t\t'check_id' => $fileCheck->check_id,"},{"line":668,"text":"\t\t\t'automated' => true,"},{"line":669,"text":"\t\t], false);"},{"line":670,"text":""},{"line":671,"text":"\t\t$json = $this->getJson();"},{"line":672,"text":""},{"line":673,"text":"\t\t\\XF::fire('addon_post_uninstall', [$this, $this->addOnId, $json], $this->addOnId);"},{"line":674,"text":"\t}"}]],"exists":true,"sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},"src/XF/AddOn/DataManager.php":{"blocks":[[{"line":85,"text":"\tpublic function enqueueImportAddOnData(AddOn $addOn)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\treturn \\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, ["},{"line":88,"text":"\t\t\t'addon_id' => $addOn->addon_id,"},{"line":89,"text":"\t\t]);"},{"line":90,"text":"\t}"}]],"exists":true,"sha256":"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0"},"src/XF/Cli/Command/AddOnInstall.php":{"blocks":[[{"line":36,"text":"\tprotected function execute(InputInterface $input, OutputInterface $output)"},{"line":37,"text":"\t{"},{"line":38,"text":"\t\t$id = $input->getArgument('id');"},{"line":39,"text":""},{"line":40,"text":"\t\t$addOnManager = \\XF::app()->addOnManager();"},{"line":41,"text":""},{"line":42,"text":"\t\tif ($this->isAZipFile($id))"},{"line":43,"text":"\t\t{"},{"line":44,"text":"\t\t\t$id = $this->validateAndExtractAddOnZip($id, $error);"},{"line":45,"text":"\t\t\tif (!$id)"},{"line":46,"text":"\t\t\t{"},{"line":47,"text":"\t\t\t\t$output->writeln('' . $error . '');"},{"line":48,"text":"\t\t\t\treturn 1;"},{"line":49,"text":"\t\t\t}"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$addOn = $addOnManager->getById($id);"},{"line":53,"text":"\t\tif (!$addOn)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\t$output->writeln(\"\" . \"The add-on '$id' could be found.\" . \"\");"},{"line":56,"text":"\t\t\treturn 1;"},{"line":57,"text":"\t\t}"},{"line":58,"text":""},{"line":59,"text":"\t\tif (!$addOn->canInstall())"},{"line":60,"text":"\t\t{"},{"line":61,"text":"\t\t\tif ($addOn)"},{"line":62,"text":"\t\t\t{"},{"line":63,"text":"\t\t\t\t$output->writeln(\"\" . \\XF::phrase('this_add_on_already_installed_upgrade_instead') . \"\");"},{"line":64,"text":"\t\t\t}"},{"line":65,"text":"\t\t\telse"},{"line":66,"text":"\t\t\t{"},{"line":67,"text":"\t\t\t\t$output->writeln(\"\" . \\XF::phrase('this_add_on_cannot_be_installed') . \"\");"},{"line":68,"text":"\t\t\t}"},{"line":69,"text":"\t\t\treturn 1;"},{"line":70,"text":"\t\t}"},{"line":71,"text":""},{"line":72,"text":"\t\tif (!$this->verifyAddOnAction($input, $output, $addOn))"},{"line":73,"text":"\t\t{"},{"line":74,"text":"\t\t\treturn 1;"},{"line":75,"text":"\t\t}"},{"line":76,"text":""},{"line":77,"text":"\t\t/** @var QuestionHelper $helper */"},{"line":78,"text":"\t\t$helper = $this->getHelper('question');"},{"line":79,"text":""},{"line":80,"text":"\t\t$question = new ConfirmationQuestion(\"\" . \\XF::phrase('please_confirm_that_you_want_to_install_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \") (y/n)\");"},{"line":81,"text":"\t\t$response = $helper->ask($input, $output, $question);"},{"line":82,"text":"\t\tif (!$response)"},{"line":83,"text":"\t\t{"},{"line":84,"text":"\t\t\treturn 1;"},{"line":85,"text":"\t\t}"},{"line":86,"text":""},{"line":87,"text":"\t\t// make sure any errors get logged here"},{"line":88,"text":"\t\t\\XF::app()->error()->setIgnorePendingUpgrade(true);"},{"line":89,"text":""},{"line":90,"text":"\t\t$addOn->preInstall();"},{"line":91,"text":""},{"line":92,"text":"\t\t$this->runSubAction($output, $addOn, 'install');"},{"line":93,"text":"\t\t$this->runSubAction($output, $addOn, 'import');"},{"line":94,"text":"\t\t$this->runSubAction($output, $addOn, 'post-install');"},{"line":95,"text":""},{"line":96,"text":"\t\treturn 0;"},{"line":97,"text":"\t}"}]],"exists":true,"sha256":"2407ad9ae20ca8ac1ca84b456ac2adc537f39c79534da5e258167a4d0df2a54f"},"src/XF/Cli/Command/AddOnUninstall.php":{"blocks":[[{"line":36,"text":"\tprotected function execute(InputInterface $input, OutputInterface $output)"},{"line":37,"text":"\t{"},{"line":38,"text":"\t\t$id = $input->getArgument('id');"},{"line":39,"text":""},{"line":40,"text":"\t\t$addOn = $this->checkInstalledAddOn($id, $error);"},{"line":41,"text":"\t\tif (!$addOn)"},{"line":42,"text":"\t\t{"},{"line":43,"text":"\t\t\t$output->writeln('' . $error . '');"},{"line":44,"text":"\t\t\treturn 1;"},{"line":45,"text":"\t\t}"},{"line":46,"text":""},{"line":47,"text":"\t\tif (!$addOn->canUninstall() && !$input->getOption('force'))"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\t$output->writeln(\"\" . \\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing') . \"\");"},{"line":50,"text":"\t\t\treturn 1;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t/** @var QuestionHelper $helper */"},{"line":54,"text":"\t\t$helper = $this->getHelper('question');"},{"line":55,"text":""},{"line":56,"text":"\t\t$question = new ConfirmationQuestion(\"\" . \\XF::phrase('please_confirm_that_you_want_to_uninstall_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \") (y/n)\");"},{"line":57,"text":"\t\t$response = $helper->ask($input, $output, $question);"},{"line":58,"text":"\t\tif (!$response)"},{"line":59,"text":"\t\t{"},{"line":60,"text":"\t\t\treturn 1;"},{"line":61,"text":"\t\t}"},{"line":62,"text":""},{"line":63,"text":"\t\t// make sure any errors get logged here"},{"line":64,"text":"\t\t\\XF::app()->error()->setIgnorePendingUpgrade(true);"},{"line":65,"text":""},{"line":66,"text":"\t\t$addOn->preUninstall();"},{"line":67,"text":""},{"line":68,"text":"\t\t$this->runSubAction($output, $addOn, 'uninstall');"},{"line":69,"text":"\t\t$this->runSubAction($output, $addOn, 'uninstall-data');"},{"line":70,"text":"\t\t$this->runSubAction($output, $addOn, 'post-uninstall');"},{"line":71,"text":""},{"line":72,"text":"\t\treturn 0;"},{"line":73,"text":"\t}"}]],"exists":true,"sha256":"6dc768f60efd4af161b549cd54c01ae8922326cf7fd230b8ef93403bf8dba90c"}},"runtime":{"http_code":"503","http_rc":0,"services":{"mariadb":{"rc":0,"state":"active"},"nginx":{"rc":0,"state":"active"},"php8.3-fpm":{"rc":0,"state":"active"}}},"scope":"READ_ONLY_NO_MUTATION","stage039":{"state":"ABSENT"}} +SUPPORT042_RESIDUAL_SUM=0 +SUPPORT042_NEW_ERROR_COUNT=0 +SUPPORT042_POSTROLLBACK_CLEAN=True +SUPPORT042_DECISION=FORENSIC_CAPTURE_COMPLETE +SUPPORT042_MUTATION_SCOPE=NONE_READ_ONLY +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +SUPPORT042_END + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 9e6643df..7099ba10 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-041", + "command_id": "SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "gram-support-vm211-staging-forensic", - "started_at_utc": "2026-09-09T10:35:16Z", - "finished_at_utc": "2026-09-09T10:35:19Z", + "component": "gram-support-vm211-staging-forensic-corrected", + "started_at_utc": "2026-09-09T10:38:58Z", + "finished_at_utc": "2026-09-09T10:39:00Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "d31b61b5d80966157f8fd0416a1b84da417446fd716707606be2c40794e947e8", + "command_sha256": "15b23b8177dd6de06c36b0bff7d6d33adb5d96f9f6016643f8795cfb1c404f88", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "ca9e03a257db6318511bb3fc6ceedcb81edc9ac133b13de2e30f1d49e5091c20", - "sanitized_output_sha256": "ca9e03a257db6318511bb3fc6ceedcb81edc9ac133b13de2e30f1d49e5091c20", + "raw_evidence_sha256": "d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3", + "sanitized_output_sha256": "d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "SUPPORT041_BEGIN\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nSUPPORT041_SOURCE_POSTROLLBACK={\"source_exists\":false,\"tmp_exists\":false}\nSUPPORT041_QGA_STATE={\"exitcode\":0,\"state\":\"COMPLETE\"}\nSUPPORT041_VM211={\"addon_path\":{\"state\":\"ABSENT\"},\"cli\":{\"commands\":[\"xf:addon-disable\",\"xf:addon-enable\",\"xf:addon-install\",\"xf:addon-list\",\"xf:addon-rebuild\",\"xf:addon-uninstall\",\"xf:addon-upgrade\"],\"help\":{\"xf:addon-disable\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"aad85d19723401a92a03a7824069597c7729f537fbba1d9037e5c7ea46e2d057\"},\"xf:addon-enable\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"d55071cb0200757dba0a2a8f2c4427f8cf8f525103a9584c61a20d79aea1ca44\"},\"xf:addon-install\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"9dac6d249cac5938d1d908affe66cc652d0deaa1b24d9233f7bdebec96151104\"},\"xf:addon-list\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"7934a7143d5b6907a69f477063324e9c53e99f7404fd83af0887a828928e6dbe\"},\"xf:addon-rebuild\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"36c4af0714bfa9f732f46c004f0bd3ea109340b8b737ba0217dbce50330669c9\"},\"xf:addon-uninstall\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"c8f2162162c47f832d6c25822395cd2db42d260774e00ebc3bf765532f12ac97\"},\"xf:addon-upgrade\":{\"mentions_no_interaction\":true,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"834372348cafa33db19e7545b6ae3f9f47d822c8ef3c5cadeb97d0bbbd6a4e40\"}},\"rc\":0},\"collection\":\"COMPLETE\",\"command_id\":\"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-041\",\"datatype_contract\":{\"AbstractDataType.php\":{\"exists\":true,\"sha256\":\"a4f6ec14e4009be0029548b07272dc77c6ad96f4cca4e067a7d3ea0004126815\",\"snippets\":[[{\"line\":30,\"text\":\"\\tabstract public function getContainerTag();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\tabstract public function getChildTag();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"}],[{\"line\":32,\"text\":\"\\tabstract public function getChildTag();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"}],[{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"},{\"line\":47,\"text\":\"\"}],[{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"},{\"line\":47,\"text\":\"\"},{\"line\":48,\"text\":\"\\tpublic function getTypeFileName()\"},{\"line\":49,\"text\":\"\\t{\"}],[{\"line\":174,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":175,\"text\":\"\\t{\"},{\"line\":176,\"text\":\"\\t\\treturn [];\"},{\"line\":177,\"text\":\"\\t}\"},{\"line\":178,\"text\":\"\"},{\"line\":179,\"text\":\"\\tprotected function getMaintainedAttributes()\"},{\"line\":180,\"text\":\"\\t{\"},{\"line\":181,\"text\":\"\\t\\treturn [];\"},{\"line\":182,\"text\":\"\\t}\"},{\"line\":183,\"text\":\"\"},{\"line\":184,\"text\":\"\\tprotected function exportArrayToAttributes(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":185,\"text\":\"\\t{\"},{\"line\":186,\"text\":\"\\t\\tforeach ($entity->$attr AS $key => $value)\"},{\"line\":187,\"text\":\"\\t\\t{\"}],[{\"line\":184,\"text\":\"\\tprotected function exportArrayToAttributes(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":185,\"text\":\"\\t{\"},{\"line\":186,\"text\":\"\\t\\tforeach ($entity->$attr AS $key => $value)\"},{\"line\":187,\"text\":\"\\t\\t{\"},{\"line\":188,\"text\":\"\\t\\t\\tif ($value === '')\"},{\"line\":189,\"text\":\"\\t\\t\\t{\"},{\"line\":190,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":191,\"text\":\"\\t\\t\\t}\"},{\"line\":192,\"text\":\"\\t\\t\\tif (is_bool($value))\"},{\"line\":193,\"text\":\"\\t\\t\\t{\"},{\"line\":194,\"text\":\"\\t\\t\\t\\t$value = $value ? 1 : 0;\"},{\"line\":195,\"text\":\"\\t\\t\\t}\"},{\"line\":196,\"text\":\"\\t\\t\\t$tag->setAttribute($attr . '_' . $key, $value);\"},{\"line\":197,\"text\":\"\\t\\t}\"}],[{\"line\":200,\"text\":\"\\tprotected function exportCdataToNewNode(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":201,\"text\":\"\\t{\"},{\"line\":202,\"text\":\"\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\"},{\"line\":203,\"text\":\"\\t\\t$this->exportCdata($newNode, $entity->{$attr});\"},{\"line\":204,\"text\":\"\\t\\t$tag->appendChild($newNode);\"},{\"line\":205,\"text\":\"\\t}\"},{\"line\":206,\"text\":\"\"},{\"line\":207,\"text\":\"\\tprotected function exportMappedAttributes(\\\\DOMElement $tag, Entity $entity)\"},{\"line\":208,\"text\":\"\\t{\"},{\"line\":209,\"text\":\"\\t\\tforeach ($this->getMappedAttributes() AS $attr)\"},{\"line\":210,\"text\":\"\\t\\t{\"},{\"line\":211,\"text\":\"\\t\\t\\t$value = $entity->getValue($attr);\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tif ($value !== '')\"}],[{\"line\":207,\"text\":\"\\tprotected function exportMappedAttributes(\\\\DOMElement $tag, Entity $entity)\"},{\"line\":208,\"text\":\"\\t{\"},{\"line\":209,\"text\":\"\\t\\tforeach ($this->getMappedAttributes() AS $attr)\"},{\"line\":210,\"text\":\"\\t\\t{\"},{\"line\":211,\"text\":\"\\t\\t\\t$value = $entity->getValue($attr);\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tif ($value !== '')\"},{\"line\":214,\"text\":\"\\t\\t\\t{\"},{\"line\":215,\"text\":\"\\t\\t\\t\\tif (is_bool($value))\"},{\"line\":216,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":217,\"text\":\"\\t\\t\\t\\t\\t$value = $value ? 1 : 0;\"},{\"line\":218,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":219,\"text\":\"\"},{\"line\":220,\"text\":\"\\t\\t\\t\\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\"}]]},\"CodeEventListener.php\":{\"exists\":true,\"sha256\":\"eba1c2560c9c5c48d1185886609203bf73665d664c2ae0f2db0ff17dbad574ab\",\"snippets\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'code_event_listeners';\"},{\"line\":19,\"text\":\"\\t}\"},{\"line\":20,\"text\":\"\"},{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'listener';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'listener';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"}],[{\"line\":42,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":47,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$existing = [];\"},{\"line\":53,\"text\":\"\\t\\tforeach ($this->findAllForType($addOnId)->fetch() AS $listener)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\t$existing[$listener->getAddOnUniqueKey()] = $listener;\"}],[{\"line\":127,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":128,\"text\":\"\\t{\"},{\"line\":129,\"text\":\"\\t\\treturn [\"},{\"line\":130,\"text\":\"\\t\\t\\t'event_id',\"},{\"line\":131,\"text\":\"\\t\\t\\t'execute_order',\"},{\"line\":132,\"text\":\"\\t\\t\\t'callback_class',\"},{\"line\":133,\"text\":\"\\t\\t\\t'callback_method',\"},{\"line\":134,\"text\":\"\\t\\t\\t'active',\"},{\"line\":135,\"text\":\"\\t\\t\\t'hint',\"},{\"line\":136,\"text\":\"\\t\\t\\t'description',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"},{\"line\":139,\"text\":\"\"},{\"line\":140,\"text\":\"\\tprotected function getAddOnUniqueKeyFromXml(\\\\SimpleXMLElement $entry)\"}]]},\"ContentTypeField.php\":{\"exists\":true,\"sha256\":\"6c954db974138ac73a76ba87a119c4efdfb85f922a81832928e9ee022e23f594\",\"snippets\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'content_type_fields';\"},{\"line\":19,\"text\":\"\\t}\"},{\"line\":20,\"text\":\"\"},{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'field';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'field';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['content_type', 'field_name'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['content_type', 'field_name'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $doc->createElement($this->getChildTag());\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":39,\"text\":\"\\t\\t\\t$node->appendChild($doc->createTextNode($entry->field_value));\"}],[{\"line\":47,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":48,\"text\":\"\\t{\"},{\"line\":49,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":52,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":53,\"text\":\"\\t\\t{\"},{\"line\":54,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":55,\"text\":\"\\t\\t}\"},{\"line\":56,\"text\":\"\"},{\"line\":57,\"text\":\"\\t\\t$existing = $this->finder()->fetch()->groupBy('content_type', 'field_name');\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\t$i = 0;\"},{\"line\":60,\"text\":\"\\t\\t$last = 0;\"}],[{\"line\":132,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":133,\"text\":\"\\t{\"},{\"line\":134,\"text\":\"\\t\\treturn [\"},{\"line\":135,\"text\":\"\\t\\t\\t'content_type',\"},{\"line\":136,\"text\":\"\\t\\t\\t'field_name',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"},{\"line\":139,\"text\":\"}\"}]]},\"Option.php\":{\"exists\":true,\"sha256\":\"d2a6129dbd3f40dde334388d185aec02a74e33e010b5f81305211f093d1e4e60\",\"snippets\":[[{\"line\":17,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":18,\"text\":\"\\t{\"},{\"line\":19,\"text\":\"\\t\\treturn 'options';\"},{\"line\":20,\"text\":\"\\t}\"},{\"line\":21,\"text\":\"\"},{\"line\":22,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\treturn 'option';\"},{\"line\":25,\"text\":\"\\t}\"},{\"line\":26,\"text\":\"\"},{\"line\":27,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":22,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\treturn 'option';\"},{\"line\":25,\"text\":\"\\t}\"},{\"line\":26,\"text\":\"\"},{\"line\":27,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('option_id')->fetch();\"},{\"line\":32,\"text\":\"\"},{\"line\":33,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\tforeach ($entries AS $entry)\"}],[{\"line\":27,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('option_id')->fetch();\"},{\"line\":32,\"text\":\"\"},{\"line\":33,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":36,\"text\":\"\\t\\t{\"},{\"line\":37,\"text\":\"\\t\\t\\t$node = $doc->createElement($this->getChildTag());\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":40,\"text\":\"\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));\"}],[{\"line\":64,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":65,\"text\":\"\\t{\"},{\"line\":66,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":69,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":70,\"text\":\"\\t\\t{\"},{\"line\":71,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":72,\"text\":\"\\t\\t}\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'option_id');\"},{\"line\":75,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t$i = 0;\"}],[{\"line\":128,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":129,\"text\":\"\\t{\"},{\"line\":130,\"text\":\"\\t\\treturn [\"},{\"line\":131,\"text\":\"\\t\\t\\t'option_id',\"},{\"line\":132,\"text\":\"\\t\\t\\t'edit_format',\"},{\"line\":133,\"text\":\"\\t\\t\\t'data_type',\"},{\"line\":134,\"text\":\"\\t\\t\\t'validation_class',\"},{\"line\":135,\"text\":\"\\t\\t\\t'validation_method',\"},{\"line\":136,\"text\":\"\\t\\t\\t'advanced',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"},{\"line\":139,\"text\":\"}\"}]]},\"OptionGroup.php\":{\"exists\":true,\"sha256\":\"9d75fc1cf5be6c69063ecaed7e0d89a5a2e29ff560e6e57125b59f90405718da\",\"snippets\":[[{\"line\":14,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":15,\"text\":\"\\t{\"},{\"line\":16,\"text\":\"\\t\\treturn 'option_groups';\"},{\"line\":17,\"text\":\"\\t}\"},{\"line\":18,\"text\":\"\"},{\"line\":19,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":20,\"text\":\"\\t{\"},{\"line\":21,\"text\":\"\\t\\treturn 'group';\"},{\"line\":22,\"text\":\"\\t}\"},{\"line\":23,\"text\":\"\"},{\"line\":24,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":27,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":19,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":20,\"text\":\"\\t{\"},{\"line\":21,\"text\":\"\\t\\treturn 'group';\"},{\"line\":22,\"text\":\"\\t}\"},{\"line\":23,\"text\":\"\"},{\"line\":24,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":27,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":28,\"text\":\"\\t\\t\\t->order('group_id')->fetch();\"},{\"line\":29,\"text\":\"\"},{\"line\":30,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":31,\"text\":\"\\t\\t{\"},{\"line\":32,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"}],[{\"line\":24,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":27,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":28,\"text\":\"\\t\\t\\t->order('group_id')->fetch();\"},{\"line\":29,\"text\":\"\"},{\"line\":30,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":31,\"text\":\"\\t\\t{\"},{\"line\":32,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":37,\"text\":\"\\t\\t}\"}],[{\"line\":42,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":47,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'group_id');\"},{\"line\":53,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\t\\t$i = 0;\"}],[{\"line\":88,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":89,\"text\":\"\\t{\"},{\"line\":90,\"text\":\"\\t\\treturn [\"},{\"line\":91,\"text\":\"\\t\\t\\t'group_id',\"},{\"line\":92,\"text\":\"\\t\\t\\t'icon',\"},{\"line\":93,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":94,\"text\":\"\\t\\t\\t'debug_only',\"},{\"line\":95,\"text\":\"\\t\\t];\"},{\"line\":96,\"text\":\"\\t}\"},{\"line\":97,\"text\":\"}\"}]]},\"Permission.php\":{\"exists\":true,\"sha256\":\"8d6b8657e8585eb8da7f1401df882e0033f93e07179ce4df398b95d22d74c477\",\"snippets\":[[{\"line\":18,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":19,\"text\":\"\\t{\"},{\"line\":20,\"text\":\"\\t\\treturn 'permissions';\"},{\"line\":21,\"text\":\"\\t}\"},{\"line\":22,\"text\":\"\"},{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'permission';\"},{\"line\":26,\"text\":\"\\t}\"},{\"line\":27,\"text\":\"\"},{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'permission';\"},{\"line\":26,\"text\":\"\\t}\"},{\"line\":27,\"text\":\"\"},{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['permission_group_id', 'permission_id'])->fetch();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"}],[{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['permission_group_id', 'permission_id'])->fetch();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":41,\"text\":\"\\t\\t}\"}],[{\"line\":46,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":47,\"text\":\"\\t{\"},{\"line\":48,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":49,\"text\":\"\"},{\"line\":50,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":51,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":52,\"text\":\"\\t\\t{\"},{\"line\":53,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":54,\"text\":\"\\t\\t}\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":57,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":58,\"text\":\"\\t\\t{\"},{\"line\":59,\"text\":\"\\t\\t\\t$conditions[] = [\"}],[{\"line\":149,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":150,\"text\":\"\\t{\"},{\"line\":151,\"text\":\"\\t\\treturn [\"},{\"line\":152,\"text\":\"\\t\\t\\t'permission_group_id',\"},{\"line\":153,\"text\":\"\\t\\t\\t'permission_id',\"},{\"line\":154,\"text\":\"\\t\\t\\t'permission_type',\"},{\"line\":155,\"text\":\"\\t\\t\\t'depend_permission_id',\"},{\"line\":156,\"text\":\"\\t\\t\\t'interface_group_id',\"},{\"line\":157,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":158,\"text\":\"\\t\\t];\"},{\"line\":159,\"text\":\"\\t}\"},{\"line\":160,\"text\":\"}\"}]]},\"PermissionInterfaceGroup.php\":{\"exists\":true,\"sha256\":\"b2b1397ba1dc3174f680ebe4796a88904aa577db969177485d56cd7568c1f8d6\",\"snippets\":[[{\"line\":15,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":16,\"text\":\"\\t{\"},{\"line\":17,\"text\":\"\\t\\treturn 'permission_interface_groups';\"},{\"line\":18,\"text\":\"\\t}\"},{\"line\":19,\"text\":\"\"},{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'interface_group';\"},{\"line\":23,\"text\":\"\\t}\"},{\"line\":24,\"text\":\"\"},{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'interface_group';\"},{\"line\":23,\"text\":\"\\t}\"},{\"line\":24,\"text\":\"\"},{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->order('interface_group_id')->fetch();\"},{\"line\":30,\"text\":\"\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"}],[{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->order('interface_group_id')->fetch();\"},{\"line\":30,\"text\":\"\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":38,\"text\":\"\\t\\t}\"}],[{\"line\":43,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":44,\"text\":\"\\t{\"},{\"line\":45,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":48,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'interface_group_id');\"},{\"line\":54,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$i = 0;\"}],[{\"line\":95,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":96,\"text\":\"\\t{\"},{\"line\":97,\"text\":\"\\t\\treturn [\"},{\"line\":98,\"text\":\"\\t\\t\\t'interface_group_id',\"},{\"line\":99,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":100,\"text\":\"\\t\\t\\t'is_moderator',\"},{\"line\":101,\"text\":\"\\t\\t];\"},{\"line\":102,\"text\":\"\\t}\"},{\"line\":103,\"text\":\"}\"}]]},\"Phrase.php\":{\"exists\":true,\"sha256\":\"af1d53936447b820d9f3dc3e50a7058dfe96890417f5fd466fb1361d99988266\",\"snippets\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'phrases';\"},{\"line\":19,\"text\":\"\\t}\"},{\"line\":20,\"text\":\"\"},{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'phrase';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'phrase';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('language_id', 0)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('title')->fetch();\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('language_id', 0)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('title')->fetch();\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":37,\"text\":\"\\t\\t\\tif ($entry['global_cache'])\"},{\"line\":38,\"text\":\"\\t\\t\\t{\"},{\"line\":39,\"text\":\"\\t\\t\\t\\t$node->setAttribute('global_cache', '1');\"}],[{\"line\":49,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":50,\"text\":\"\\t{\"},{\"line\":51,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":54,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":55,\"text\":\"\\t\\t{\"},{\"line\":56,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":57,\"text\":\"\\t\\t}\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'title');\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\t// This chucking approach has been taken due to a MariaDB performance regression with large\"},{\"line\":62,\"text\":\"\\t\\t// IN clauses (see #187523). However, this may have benefits on some slower servers as this\"}],[{\"line\":121,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":122,\"text\":\"\\t{\"},{\"line\":123,\"text\":\"\\t\\treturn [\"},{\"line\":124,\"text\":\"\\t\\t\\t'title',\"},{\"line\":125,\"text\":\"\\t\\t\\t'version_id',\"},{\"line\":126,\"text\":\"\\t\\t\\t'version_string',\"},{\"line\":127,\"text\":\"\\t\\t];\"},{\"line\":128,\"text\":\"\\t}\"},{\"line\":129,\"text\":\"}\"}]]},\"Route.php\":{\"exists\":true,\"sha256\":\"ffd5dc9411b761a264810af2241af71c553ab2b409f670305687e9d4d75a34bb\",\"snippets\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'routes';\"},{\"line\":19,\"text\":\"\\t}\"},{\"line\":20,\"text\":\"\"},{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'route';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'route';\"},{\"line\":24,\"text\":\"\\t}\"},{\"line\":25,\"text\":\"\"},{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":38,\"text\":\"\\t\\t}\"},{\"line\":39,\"text\":\"\"}],[{\"line\":43,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":44,\"text\":\"\\t{\"},{\"line\":45,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":48,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":54,\"text\":\"\\t\\t$existing = [];\"},{\"line\":55,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":56,\"text\":\"\\t\\t{\"}],[{\"line\":154,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":155,\"text\":\"\\t{\"},{\"line\":156,\"text\":\"\\t\\treturn [\"},{\"line\":157,\"text\":\"\\t\\t\\t'route_type',\"},{\"line\":158,\"text\":\"\\t\\t\\t'route_prefix',\"},{\"line\":159,\"text\":\"\\t\\t\\t'sub_name',\"},{\"line\":160,\"text\":\"\\t\\t\\t'format',\"},{\"line\":161,\"text\":\"\\t\\t\\t'build_class',\"},{\"line\":162,\"text\":\"\\t\\t\\t'build_method',\"},{\"line\":163,\"text\":\"\\t\\t\\t'controller',\"},{\"line\":164,\"text\":\"\\t\\t\\t'context',\"},{\"line\":165,\"text\":\"\\t\\t\\t'action_prefix',\"},{\"line\":166,\"text\":\"\\t\\t];\"},{\"line\":167,\"text\":\"\\t}\"}]]},\"Template.php\":{\"exists\":true,\"sha256\":\"fecae5772cfd98cb53672180957a3a50a521d6ee6194dd5d7a346630afb3933a\",\"snippets\":[[{\"line\":15,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":16,\"text\":\"\\t{\"},{\"line\":17,\"text\":\"\\t\\treturn 'templates';\"},{\"line\":18,\"text\":\"\\t}\"},{\"line\":19,\"text\":\"\"},{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'template';\"},{\"line\":23,\"text\":\"\\t}\"},{\"line\":24,\"text\":\"\"},{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'template';\"},{\"line\":23,\"text\":\"\\t}\"},{\"line\":24,\"text\":\"\"},{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('style_id', 0)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['type', 'title'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"}],[{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('style_id', 0)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['type', 'title'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\\t\\t\\t$this->exportCdata($node, $entry->template);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$container->appendChild($node);\"}],[{\"line\":44,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":45,\"text\":\"\\t{\"},{\"line\":46,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":47,\"text\":\"\"},{\"line\":48,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":49,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":50,\"text\":\"\\t\\t{\"},{\"line\":51,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":52,\"text\":\"\\t\\t}\"},{\"line\":53,\"text\":\"\"},{\"line\":54,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":55,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":56,\"text\":\"\\t\\t{\"},{\"line\":57,\"text\":\"\\t\\t\\t$conditions[] = [\"}],[{\"line\":156,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":157,\"text\":\"\\t{\"},{\"line\":158,\"text\":\"\\t\\treturn [\"},{\"line\":159,\"text\":\"\\t\\t\\t'type',\"},{\"line\":160,\"text\":\"\\t\\t\\t'title',\"},{\"line\":161,\"text\":\"\\t\\t\\t'version_id',\"},{\"line\":162,\"text\":\"\\t\\t\\t'version_string',\"},{\"line\":163,\"text\":\"\\t\\t];\"},{\"line\":164,\"text\":\"\\t}\"},{\"line\":165,\"text\":\"}\"}]]},\"TemplateModification.php\":{\"exists\":true,\"sha256\":\"c27e2bb5baa379dcaf0eab73f35fcc62f5ce656fbccbcb4d6ded095d83b4b31a\",\"snippets\":[[{\"line\":18,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":19,\"text\":\"\\t{\"},{\"line\":20,\"text\":\"\\t\\treturn 'template_modifications';\"},{\"line\":21,\"text\":\"\\t}\"},{\"line\":22,\"text\":\"\"},{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'modification';\"},{\"line\":26,\"text\":\"\\t}\"},{\"line\":27,\"text\":\"\"},{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"}],[{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'modification';\"},{\"line\":26,\"text\":\"\\t}\"},{\"line\":27,\"text\":\"\"},{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['template', 'modification_key'])->fetch();\"},{\"line\":33,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":34,\"text\":\"\\t\\t{\"},{\"line\":35,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":36,\"text\":\"\"}],[{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['template', 'modification_key'])->fetch();\"},{\"line\":33,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":34,\"text\":\"\\t\\t{\"},{\"line\":35,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t\\t$this->exportCdataToNewNode($node, 'find', $entry);\"},{\"line\":40,\"text\":\"\\t\\t\\t$this->exportCdataToNewNode($node, 'replace', $entry);\"},{\"line\":41,\"text\":\"\"}],[{\"line\":48,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":49,\"text\":\"\\t{\"},{\"line\":50,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":53,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":56,\"text\":\"\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t$keys = $this->pluckXmlAttribute($entries, 'modification_key');\"},{\"line\":59,\"text\":\"\\t\\t$existing = $this->finder()\"},{\"line\":60,\"text\":\"\\t\\t\\t->where('modification_key', $keys)\"},{\"line\":61,\"text\":\"\\t\\t\\t->keyedBy('modification_key')\"}],[{\"line\":140,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":141,\"text\":\"\\t{\"},{\"line\":142,\"text\":\"\\t\\treturn [\"},{\"line\":143,\"text\":\"\\t\\t\\t'type',\"},{\"line\":144,\"text\":\"\\t\\t\\t'template',\"},{\"line\":145,\"text\":\"\\t\\t\\t'modification_key',\"},{\"line\":146,\"text\":\"\\t\\t\\t'description',\"},{\"line\":147,\"text\":\"\\t\\t\\t'execution_order',\"},{\"line\":148,\"text\":\"\\t\\t\\t'enabled',\"},{\"line\":149,\"text\":\"\\t\\t\\t'action',\"},{\"line\":150,\"text\":\"\\t\\t];\"},{\"line\":151,\"text\":\"\\t}\"},{\"line\":152,\"text\":\"\"},{\"line\":153,\"text\":\"\\tprotected function getMaintainedAttributes()\"}]]}},\"db\":null,\"db_probe\":{\"rc\":0,\"stderr_sha256\":\"\"},\"error_probe\":{\"rc\":0,\"stderr_sha256\":\"\"},\"errors_after_43\":null,\"guest\":\"newfi-staging\",\"identity_ok\":true,\"root\":{\"state\":\"DIR\"},\"runtime\":{\"http_code\":\"503\",\"http_rc\":0,\"services\":{\"mariadb\":{\"rc\":0,\"state\":\"active\"},\"nginx\":{\"rc\":0,\"state\":\"active\"},\"php8.3-fpm\":{\"rc\":0,\"state\":\"active\"}}},\"scope\":\"READ_ONLY_NO_MUTATION\",\"setup_contract\":{\"src/XF/AddOn/AbstractSetup.php\":{\"exists\":true,\"hits\":[{\"line\":25,\"text\":\"abstract public function install(array $stepParams = []);\"},{\"line\":39,\"text\":\"abstract public function uninstall(array $stepParams = []);\"}],\"sha256\":\"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88\"},\"src/XF/AddOn/StepRunnerInstallTrait.php\":{\"exists\":true,\"hits\":[{\"line\":17,\"text\":\"public function install(array $stepParams = [])\"},{\"line\":53,\"text\":\"private function installStepRunner($step, array $stepParams)\"}],\"sha256\":\"1f441b8a3101b97009ae04e62c04e79062a89f1e01a08ae9e07c5e629c76d5f2\"},\"src/XF/AddOn/StepRunnerUninstallTrait.php\":{\"exists\":true,\"hits\":[{\"line\":17,\"text\":\"public function uninstall(array $stepParams = [])\"},{\"line\":52,\"text\":\"private function uninstallStepRunner($step, array $stepParams)\"}],\"sha256\":\"e58a9ab9c30e3cf3c41a0be392e8c5ac37f744578f7b91f76d663139649c49a9\"},\"src/XF/Db/Schema/Column.php\":{\"exists\":true,\"hits\":[{\"line\":254,\"text\":\"public function unsigned($unsigned = null)\"},{\"line\":276,\"text\":\"public function setDefault($default)\"},{\"line\":283,\"text\":\"public function autoIncrement($autoIncrement = null, $setAsPrimary = true)\"}],\"sha256\":\"d6749157309835460b98e3e09d33533409850a1fb808417f28e89a97a3775730\"},\"src/XF/Db/Schema/Create.php\":{\"exists\":true,\"hits\":[],\"sha256\":\"4b2f0bf31fc3f133b10577c24024f2883c80296478ee4adf5c91930c6b896ddd\"}},\"stage039\":{\"state\":\"ABSENT\"},\"xml_exemplars\":{\"code_event_listeners.xml\":[],\"content_type_fields.xml\":[],\"option_groups.xml\":[],\"options.xml\":[],\"permission_interface_groups.xml\":[],\"permissions.xml\":[],\"phrases.xml\":[{\"addon\":\"src/addons/Newfi/Portal\",\"child_count\":1,\"first\":[{\"attrs\":{\"title\":\"nav.newfiPortal\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"tag\":\"phrase\",\"text_len\":5,\"text_sha256\":\"661a914783b315dcc04a526122b417b6cfe9b77f351a51c9cab31baf158bdcba\"}],\"root\":\"phrases\",\"root_attrs\":{}}],\"routes.xml\":[{\"addon\":\"src/addons/Newfi/Dogs\",\"child_count\":1,\"first\":[{\"attrs\":{\"controller\":\"Newfi\\\\Dogs:Dogs\",\"route_prefix\":\"dogs\",\"route_type\":\"public\"},\"tag\":\"route\"}],\"root\":\"routes\",\"root_attrs\":{}},{\"addon\":\"src/addons/Newfi/Events\",\"child_count\":1,\"first\":[{\"attrs\":{\"controller\":\"Newfi\\\\Events:Events\",\"route_prefix\":\"events\",\"route_type\":\"public\"},\"tag\":\"route\"}],\"root\":\"routes\",\"root_attrs\":{}}],\"template_modifications.xml\":[],\"templates.xml\":[{\"addon\":\"src/addons/Newfi/Dogs\",\"child_count\":1,\"first\":[{\"attrs\":{\"title\":\"newfi_dogs\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"tag\":\"template\",\"text_len\":670,\"text_sha256\":\"02296119da34471dde7d4ef03b599fd0338d4fa5853d43e55bb163bb9921a229\"}],\"root\":\"templates\",\"root_attrs\":{}},{\"addon\":\"src/addons/Newfi/Events\",\"child_count\":1,\"first\":[{\"attrs\":{\"title\":\"newfi_events\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"tag\":\"template\",\"text_len\":590,\"text_sha256\":\"5c6d907b5b263765bf4d1d34f025aaf26cf6a268675028224826ca2882a947e9\"}],\"root\":\"templates\",\"root_attrs\":{}}]}}\nSUPPORT041_RESIDUAL_SUM=0\nSUPPORT041_DECISION=HOLD_POSTROLLBACK_OR_RUNTIME_DRIFT\nSUPPORT041_MUTATION_SCOPE=NONE_READ_ONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-041\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nSUPPORT041_END\n" + "output": "SUPPORT042_BEGIN\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nSUPPORT042_SOURCE_POSTROLLBACK={\"source_exists\":false,\"tmp_exists\":false}\nSUPPORT042_QGA_STATE={\"exitcode\":0,\"state\":\"COMPLETE\"}\nSUPPORT042_VM211={\"addon_path\":{\"state\":\"ABSENT\"},\"cli\":{\"commands\":[\"xf:addon-disable\",\"xf:addon-enable\",\"xf:addon-install\",\"xf:addon-list\",\"xf:addon-rebuild\",\"xf:addon-uninstall\",\"xf:addon-upgrade\"],\"help\":{\"xf:addon-install\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--verbose\",\"--version\"],\"rc\":0},\"xf:addon-rebuild\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--verbose\",\"--version\"],\"rc\":0},\"xf:addon-uninstall\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--verbose\",\"--version\"],\"rc\":0},\"xf:addon-upgrade\":{\"options\":[\"--ansi\",\"--force\",\"--help\",\"--no-ansi\",\"--no-interaction\",\"--quiet\",\"--skip-unavailable\",\"--verbose\",\"--version\"],\"rc\":0}},\"rc\":0},\"collection\":\"COMPLETE\",\"command_id\":\"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042\",\"datatype_contract\":{\"AbstractDataType.php\":{\"exists\":true,\"methods\":[[{\"line\":30,\"text\":\"\\tabstract public function getContainerTag();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\tabstract public function getChildTag();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":32,\"text\":\"\\tabstract public function getChildTag();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":34,\"text\":\"\\tabstract public function exportAddOnData($addOnId, \\\\DOMElement $container);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":36,\"text\":\"\\tabstract public function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\tabstract public function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\tpublic const USE_AUTO_CDATA = false;\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\tpublic function __construct(Manager $em)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$this->em = $em;\"},{\"line\":45,\"text\":\"\\t\\t$this->structure = $em->getEntityStructure($this->getShortName());\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":174,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":175,\"text\":\"\\t{\"},{\"line\":176,\"text\":\"\\t\\treturn [];\"},{\"line\":177,\"text\":\"\\t}\"}],[{\"line\":184,\"text\":\"\\tprotected function exportArrayToAttributes(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":185,\"text\":\"\\t{\"},{\"line\":186,\"text\":\"\\t\\tforeach ($entity->$attr AS $key => $value)\"},{\"line\":187,\"text\":\"\\t\\t{\"},{\"line\":188,\"text\":\"\\t\\t\\tif ($value === '')\"},{\"line\":189,\"text\":\"\\t\\t\\t{\"},{\"line\":190,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":191,\"text\":\"\\t\\t\\t}\"},{\"line\":192,\"text\":\"\\t\\t\\tif (is_bool($value))\"},{\"line\":193,\"text\":\"\\t\\t\\t{\"},{\"line\":194,\"text\":\"\\t\\t\\t\\t$value = $value ? 1 : 0;\"},{\"line\":195,\"text\":\"\\t\\t\\t}\"},{\"line\":196,\"text\":\"\\t\\t\\t$tag->setAttribute($attr . '_' . $key, $value);\"},{\"line\":197,\"text\":\"\\t\\t}\"},{\"line\":198,\"text\":\"\\t}\"}],[{\"line\":200,\"text\":\"\\tprotected function exportCdataToNewNode(\\\\DOMElement $tag, $attr, Entity $entity)\"},{\"line\":201,\"text\":\"\\t{\"},{\"line\":202,\"text\":\"\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\"},{\"line\":203,\"text\":\"\\t\\t$this->exportCdata($newNode, $entity->{$attr});\"},{\"line\":204,\"text\":\"\\t\\t$tag->appendChild($newNode);\"},{\"line\":205,\"text\":\"\\t}\"}],[{\"line\":207,\"text\":\"\\tprotected function exportMappedAttributes(\\\\DOMElement $tag, Entity $entity)\"},{\"line\":208,\"text\":\"\\t{\"},{\"line\":209,\"text\":\"\\t\\tforeach ($this->getMappedAttributes() AS $attr)\"},{\"line\":210,\"text\":\"\\t\\t{\"},{\"line\":211,\"text\":\"\\t\\t\\t$value = $entity->getValue($attr);\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tif ($value !== '')\"},{\"line\":214,\"text\":\"\\t\\t\\t{\"},{\"line\":215,\"text\":\"\\t\\t\\t\\tif (is_bool($value))\"},{\"line\":216,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":217,\"text\":\"\\t\\t\\t\\t\\t$value = $value ? 1 : 0;\"},{\"line\":218,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":219,\"text\":\"\"},{\"line\":220,\"text\":\"\\t\\t\\t\\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\"},{\"line\":221,\"text\":\"\\t\\t\\t\\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\\\"]*$/si', $value))\"},{\"line\":222,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":223,\"text\":\"\\t\\t\\t\\t\\t// This exports CDATA, but does not escape `]]>` like \\\\XF\\\\Util\\\\XML::createDomCdataSection(),\"},{\"line\":224,\"text\":\"\\t\\t\\t\\t\\t// because it needs to be transparently importable.\"},{\"line\":225,\"text\":\"\\t\\t\\t\\t\\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\"},{\"line\":226,\"text\":\"\\t\\t\\t\\t\\t// and remove this attribute from exportMappedAttributes()\"},{\"line\":227,\"text\":\"\"},{\"line\":228,\"text\":\"\\t\\t\\t\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t\\t\\t\\t$newNode->appendChild(\"},{\"line\":231,\"text\":\"\\t\\t\\t\\t\\t\\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\"},{\"line\":232,\"text\":\"\\t\\t\\t\\t\\t);\"},{\"line\":233,\"text\":\"\"},{\"line\":234,\"text\":\"\\t\\t\\t\\t\\t$tag->appendChild($newNode);\"},{\"line\":235,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":236,\"text\":\"\\t\\t\\t\\telse\"},{\"line\":237,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":238,\"text\":\"\\t\\t\\t\\t\\t$tag->setAttribute($attr, $value);\"},{\"line\":239,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":240,\"text\":\"\\t\\t\\t}\"},{\"line\":241,\"text\":\"\\t\\t}\"},{\"line\":242,\"text\":\"\\t}\"}],[{\"line\":244,\"text\":\"\\tprotected function importMappedAttributes(\\\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\"},{\"line\":245,\"text\":\"\\t{\"},{\"line\":246,\"text\":\"\\t\\tif ($entity->exists() && $allowMaintained)\"},{\"line\":247,\"text\":\"\\t\\t{\"},{\"line\":248,\"text\":\"\\t\\t\\t$maintained = $this->getMaintainedAttributes();\"},{\"line\":249,\"text\":\"\\t\\t}\"},{\"line\":250,\"text\":\"\\t\\telse\"},{\"line\":251,\"text\":\"\\t\\t{\"},{\"line\":252,\"text\":\"\\t\\t\\t$maintained = [];\"},{\"line\":253,\"text\":\"\\t\\t}\"},{\"line\":254,\"text\":\"\"},{\"line\":255,\"text\":\"\\t\\tforeach ($this->getMappedAttributes() AS $attr)\"},{\"line\":256,\"text\":\"\\t\\t{\"},{\"line\":257,\"text\":\"\\t\\t\\tif (in_array($attr, $maintained))\"},{\"line\":258,\"text\":\"\\t\\t\\t{\"},{\"line\":259,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":260,\"text\":\"\\t\\t\\t}\"},{\"line\":261,\"text\":\"\"},{\"line\":262,\"text\":\"\\t\\t\\tif (self::USE_AUTO_CDATA)\"},{\"line\":263,\"text\":\"\\t\\t\\t{\"},{\"line\":264,\"text\":\"\\t\\t\\t\\tif (isset($el[$attr]))\"},{\"line\":265,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":266,\"text\":\"\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\"},{\"line\":267,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":268,\"text\":\"\\t\\t\\t\\telse if (isset($el->{$attr}))\"},{\"line\":269,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":270,\"text\":\"\\t\\t\\t\\t\\t$entity->$attr = (string) $el->{$attr};\"},{\"line\":271,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":272,\"text\":\"\\t\\t\\t}\"},{\"line\":273,\"text\":\"\\t\\t\\telse\"},{\"line\":274,\"text\":\"\\t\\t\\t{\"},{\"line\":275,\"text\":\"\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\"},{\"line\":276,\"text\":\"\\t\\t\\t}\"},{\"line\":277,\"text\":\"\\t\\t}\"},{\"line\":278,\"text\":\"\\t}\"}],[{\"line\":302,\"text\":\"\\tprotected function exportCdata(\\\\DOMElement $parent, $value)\"},{\"line\":303,\"text\":\"\\t{\"},{\"line\":304,\"text\":\"\\t\\t$cdata = Xml::createDomCdataSection($parent->ownerDocument, $value);\"},{\"line\":305,\"text\":\"\\t\\t$parent->appendChild($cdata);\"},{\"line\":306,\"text\":\"\\t}\"}]],\"sha256\":\"a4f6ec14e4009be0029548b07272dc77c6ad96f4cca4e067a7d3ea0004126815\"},\"CodeEventListener.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'code_event_listeners';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'listener';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":40,\"text\":\"\\t}\"}],[{\"line\":42,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":47,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$existing = [];\"},{\"line\":53,\"text\":\"\\t\\tforeach ($this->findAllForType($addOnId)->fetch() AS $listener)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\t$existing[$listener->getAddOnUniqueKey()] = $listener;\"},{\"line\":56,\"text\":\"\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t$i = 0;\"},{\"line\":59,\"text\":\"\\t\\t$last = 0;\"},{\"line\":60,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":61,\"text\":\"\\t\\t{\"},{\"line\":62,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":63,\"text\":\"\"},{\"line\":64,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":65,\"text\":\"\\t\\t\\t{\"},{\"line\":66,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":67,\"text\":\"\\t\\t\\t}\"},{\"line\":68,\"text\":\"\"},{\"line\":69,\"text\":\"\\t\\t\\t$key = $this->getAddOnUniqueKeyFromXml($entry);\"},{\"line\":70,\"text\":\"\\t\\t\\t$entity = $existing[$key] ?? $this->create();\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":73,\"text\":\"\\t\\t\\t$entity->setOption('check_duplicate', false);\"},{\"line\":74,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":75,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":80,\"text\":\"\\t\\t\\t{\"},{\"line\":81,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":82,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":83,\"text\":\"\\t\\t\\t}\"},{\"line\":84,\"text\":\"\\t\\t}\"},{\"line\":85,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":86,\"text\":\"\\t}\"}],[{\"line\":127,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":128,\"text\":\"\\t{\"},{\"line\":129,\"text\":\"\\t\\treturn [\"},{\"line\":130,\"text\":\"\\t\\t\\t'event_id',\"},{\"line\":131,\"text\":\"\\t\\t\\t'execute_order',\"},{\"line\":132,\"text\":\"\\t\\t\\t'callback_class',\"},{\"line\":133,\"text\":\"\\t\\t\\t'callback_method',\"},{\"line\":134,\"text\":\"\\t\\t\\t'active',\"},{\"line\":135,\"text\":\"\\t\\t\\t'hint',\"},{\"line\":136,\"text\":\"\\t\\t\\t'description',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}]],\"sha256\":\"eba1c2560c9c5c48d1185886609203bf73665d664c2ae0f2db0ff17dbad574ab\"},\"ContentTypeField.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'content_type_fields';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'field';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['content_type', 'field_name'])->fetch();\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $doc->createElement($this->getChildTag());\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":39,\"text\":\"\\t\\t\\t$node->appendChild($doc->createTextNode($entry->field_value));\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":42,\"text\":\"\\t\\t}\"},{\"line\":43,\"text\":\"\"},{\"line\":44,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":45,\"text\":\"\\t}\"}],[{\"line\":47,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":48,\"text\":\"\\t{\"},{\"line\":49,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":52,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":53,\"text\":\"\\t\\t{\"},{\"line\":54,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":55,\"text\":\"\\t\\t}\"},{\"line\":56,\"text\":\"\"},{\"line\":57,\"text\":\"\\t\\t$existing = $this->finder()->fetch()->groupBy('content_type', 'field_name');\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\t$i = 0;\"},{\"line\":60,\"text\":\"\\t\\t$last = 0;\"},{\"line\":61,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":62,\"text\":\"\\t\\t{\"},{\"line\":63,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":66,\"text\":\"\\t\\t\\t{\"},{\"line\":67,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":68,\"text\":\"\\t\\t\\t}\"},{\"line\":69,\"text\":\"\"},{\"line\":70,\"text\":\"\\t\\t\\t$type = (string) $entry['content_type'];\"},{\"line\":71,\"text\":\"\\t\\t\\t$name = (string) $entry['field_name'];\"},{\"line\":72,\"text\":\"\\t\\t\\t$entity = $existing[$type][$name] ?? $this->create();\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":75,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":76,\"text\":\"\\t\\t\\t$entity->field_value = (string) $entry;\"},{\"line\":77,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":82,\"text\":\"\\t\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":84,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":85,\"text\":\"\\t\\t\\t}\"},{\"line\":86,\"text\":\"\\t\\t}\"},{\"line\":87,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":88,\"text\":\"\\t}\"}],[{\"line\":132,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":133,\"text\":\"\\t{\"},{\"line\":134,\"text\":\"\\t\\treturn [\"},{\"line\":135,\"text\":\"\\t\\t\\t'content_type',\"},{\"line\":136,\"text\":\"\\t\\t\\t'field_name',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}]],\"sha256\":\"6c954db974138ac73a76ba87a119c4efdfb85f922a81832928e9ee022e23f594\"},\"Option.php\":{\"exists\":true,\"methods\":[[{\"line\":17,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":18,\"text\":\"\\t{\"},{\"line\":19,\"text\":\"\\t\\treturn 'options';\"},{\"line\":20,\"text\":\"\\t}\"}],[{\"line\":22,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\treturn 'option';\"},{\"line\":25,\"text\":\"\\t}\"}],[{\"line\":27,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('option_id')->fetch();\"},{\"line\":32,\"text\":\"\"},{\"line\":33,\"text\":\"\\t\\t$doc = $container->ownerDocument;\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":36,\"text\":\"\\t\\t{\"},{\"line\":37,\"text\":\"\\t\\t\\t$node = $doc->createElement($this->getChildTag());\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":40,\"text\":\"\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));\"},{\"line\":41,\"text\":\"\\t\\t\\tif ($entry->edit_format_params !== '')\"},{\"line\":42,\"text\":\"\\t\\t\\t{\"},{\"line\":43,\"text\":\"\\t\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'edit_format_params', $entry->edit_format_params));\"},{\"line\":44,\"text\":\"\\t\\t\\t}\"},{\"line\":45,\"text\":\"\\t\\t\\tif ($entry->sub_options)\"},{\"line\":46,\"text\":\"\\t\\t\\t{\"},{\"line\":47,\"text\":\"\\t\\t\\t\\t$node->appendChild(Xml::createDomElement($doc, 'sub_options', implode(\\\"\\\\n\\\", $entry->sub_options)));\"},{\"line\":48,\"text\":\"\\t\\t\\t}\"},{\"line\":49,\"text\":\"\"},{\"line\":50,\"text\":\"\\t\\t\\tforeach ($entry->Relations AS $relation)\"},{\"line\":51,\"text\":\"\\t\\t\\t{\"},{\"line\":52,\"text\":\"\\t\\t\\t\\t$relationNode = $doc->createElement('relation');\"},{\"line\":53,\"text\":\"\\t\\t\\t\\t$relationNode->setAttribute('group_id', $relation->group_id);\"},{\"line\":54,\"text\":\"\\t\\t\\t\\t$relationNode->setAttribute('display_order', $relation->display_order);\"},{\"line\":55,\"text\":\"\\t\\t\\t\\t$node->appendChild($relationNode);\"},{\"line\":56,\"text\":\"\\t\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":59,\"text\":\"\\t\\t}\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":62,\"text\":\"\\t}\"}],[{\"line\":64,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":65,\"text\":\"\\t{\"},{\"line\":66,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":69,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":70,\"text\":\"\\t\\t{\"},{\"line\":71,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":72,\"text\":\"\\t\\t}\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'option_id');\"},{\"line\":75,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t$i = 0;\"},{\"line\":78,\"text\":\"\\t\\t$last = 0;\"},{\"line\":79,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":80,\"text\":\"\\t\\t{\"},{\"line\":81,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":82,\"text\":\"\"},{\"line\":83,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":84,\"text\":\"\\t\\t\\t{\"},{\"line\":85,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":86,\"text\":\"\\t\\t\\t}\"},{\"line\":87,\"text\":\"\"},{\"line\":88,\"text\":\"\\t\\t\\t/** @var \\\\XF\\\\Entity\\\\Option $entity */\"},{\"line\":89,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":90,\"text\":\"\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->setOptions([\"},{\"line\":92,\"text\":\"\\t\\t\\t\\t'verify_validation_callback' => false,\"},{\"line\":93,\"text\":\"\\t\\t\\t\\t'verify_value' => false,\"},{\"line\":94,\"text\":\"\\t\\t\\t]);\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":96,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":97,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":98,\"text\":\"\\t\\t\\t$entity->default_value = (string) $entry->default_value;\"},{\"line\":99,\"text\":\"\\t\\t\\t$entity->edit_format_params = (string) $entry->edit_format_params;\"},{\"line\":100,\"text\":\"\"},{\"line\":101,\"text\":\"\\t\\t\\t$subOptions = (string) $entry->sub_options;\"},{\"line\":102,\"text\":\"\\t\\t\\t$entity->sub_options = strlen($subOptions) ? explode(\\\"\\\\n\\\", $subOptions) : [];\"},{\"line\":103,\"text\":\"\"},{\"line\":104,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":105,\"text\":\"\"},{\"line\":106,\"text\":\"\\t\\t\\t$relations = [];\"},{\"line\":107,\"text\":\"\\t\\t\\tforeach ($entry->relation AS $relation)\"},{\"line\":108,\"text\":\"\\t\\t\\t{\"},{\"line\":109,\"text\":\"\\t\\t\\t\\t$relations[(string) $relation['group_id']] = (string) $relation['display_order'];\"},{\"line\":110,\"text\":\"\\t\\t\\t}\"},{\"line\":111,\"text\":\"\"},{\"line\":112,\"text\":\"\\t\\t\\t$entity->updateRelations($relations);\"},{\"line\":113,\"text\":\"\"},{\"line\":114,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":115,\"text\":\"\\t\\t\\t{\"},{\"line\":116,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":117,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":118,\"text\":\"\\t\\t\\t}\"},{\"line\":119,\"text\":\"\\t\\t}\"},{\"line\":120,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":121,\"text\":\"\\t}\"}],[{\"line\":128,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":129,\"text\":\"\\t{\"},{\"line\":130,\"text\":\"\\t\\treturn [\"},{\"line\":131,\"text\":\"\\t\\t\\t'option_id',\"},{\"line\":132,\"text\":\"\\t\\t\\t'edit_format',\"},{\"line\":133,\"text\":\"\\t\\t\\t'data_type',\"},{\"line\":134,\"text\":\"\\t\\t\\t'validation_class',\"},{\"line\":135,\"text\":\"\\t\\t\\t'validation_method',\"},{\"line\":136,\"text\":\"\\t\\t\\t'advanced',\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}]],\"sha256\":\"d2a6129dbd3f40dde334388d185aec02a74e33e010b5f81305211f093d1e4e60\"},\"OptionGroup.php\":{\"exists\":true,\"methods\":[[{\"line\":14,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":15,\"text\":\"\\t{\"},{\"line\":16,\"text\":\"\\t\\treturn 'option_groups';\"},{\"line\":17,\"text\":\"\\t}\"}],[{\"line\":19,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":20,\"text\":\"\\t{\"},{\"line\":21,\"text\":\"\\t\\treturn 'group';\"},{\"line\":22,\"text\":\"\\t}\"}],[{\"line\":24,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":27,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":28,\"text\":\"\\t\\t\\t->order('group_id')->fetch();\"},{\"line\":29,\"text\":\"\"},{\"line\":30,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":31,\"text\":\"\\t\\t{\"},{\"line\":32,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":40,\"text\":\"\\t}\"}],[{\"line\":42,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":43,\"text\":\"\\t{\"},{\"line\":44,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":47,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'group_id');\"},{\"line\":53,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\t\\t$i = 0;\"},{\"line\":56,\"text\":\"\\t\\t$last = 0;\"},{\"line\":57,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":58,\"text\":\"\\t\\t{\"},{\"line\":59,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":62,\"text\":\"\\t\\t\\t{\"},{\"line\":63,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":64,\"text\":\"\\t\\t\\t}\"},{\"line\":65,\"text\":\"\"},{\"line\":66,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":69,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":70,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":75,\"text\":\"\\t\\t\\t{\"},{\"line\":76,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":77,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":78,\"text\":\"\\t\\t\\t}\"},{\"line\":79,\"text\":\"\\t\\t}\"},{\"line\":80,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":81,\"text\":\"\\t}\"}],[{\"line\":88,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":89,\"text\":\"\\t{\"},{\"line\":90,\"text\":\"\\t\\treturn [\"},{\"line\":91,\"text\":\"\\t\\t\\t'group_id',\"},{\"line\":92,\"text\":\"\\t\\t\\t'icon',\"},{\"line\":93,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":94,\"text\":\"\\t\\t\\t'debug_only',\"},{\"line\":95,\"text\":\"\\t\\t];\"},{\"line\":96,\"text\":\"\\t}\"}]],\"sha256\":\"9d75fc1cf5be6c69063ecaed7e0d89a5a2e29ff560e6e57125b59f90405718da\"},\"Permission.php\":{\"exists\":true,\"methods\":[[{\"line\":18,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":19,\"text\":\"\\t{\"},{\"line\":20,\"text\":\"\\t\\treturn 'permissions';\"},{\"line\":21,\"text\":\"\\t}\"}],[{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'permission';\"},{\"line\":26,\"text\":\"\\t}\"}],[{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['permission_group_id', 'permission_id'])->fetch();\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":41,\"text\":\"\\t\\t}\"},{\"line\":42,\"text\":\"\"},{\"line\":43,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":44,\"text\":\"\\t}\"}],[{\"line\":46,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":47,\"text\":\"\\t{\"},{\"line\":48,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":49,\"text\":\"\"},{\"line\":50,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":51,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":52,\"text\":\"\\t\\t{\"},{\"line\":53,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":54,\"text\":\"\\t\\t}\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":57,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":58,\"text\":\"\\t\\t{\"},{\"line\":59,\"text\":\"\\t\\t\\t$conditions[] = [\"},{\"line\":60,\"text\":\"\\t\\t\\t\\t'permission_group_id' => (string) $entry['permission_group_id'],\"},{\"line\":61,\"text\":\"\\t\\t\\t\\t'permission_id' => (string) $entry['permission_id'],\"},{\"line\":62,\"text\":\"\\t\\t\\t];\"},{\"line\":63,\"text\":\"\\t\\t}\"},{\"line\":64,\"text\":\"\\t\\tif ($conditions)\"},{\"line\":65,\"text\":\"\\t\\t{\"},{\"line\":66,\"text\":\"\\t\\t\\t$existing = $this->finder()->whereOr($conditions)->fetch()->groupBy('permission_group_id', 'permission_id');\"},{\"line\":67,\"text\":\"\\t\\t}\"},{\"line\":68,\"text\":\"\\t\\telse\"},{\"line\":69,\"text\":\"\\t\\t{\"},{\"line\":70,\"text\":\"\\t\\t\\t$existing = [];\"},{\"line\":71,\"text\":\"\\t\\t}\"},{\"line\":72,\"text\":\"\"},{\"line\":73,\"text\":\"\\t\\t$i = 0;\"},{\"line\":74,\"text\":\"\\t\\t$last = 0;\"},{\"line\":75,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":76,\"text\":\"\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":80,\"text\":\"\\t\\t\\t{\"},{\"line\":81,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":82,\"text\":\"\\t\\t\\t}\"},{\"line\":83,\"text\":\"\"},{\"line\":84,\"text\":\"\\t\\t\\t$groupId = (string) $entry['permission_group_id'];\"},{\"line\":85,\"text\":\"\\t\\t\\t$permissionId = (string) $entry['permission_id'];\"},{\"line\":86,\"text\":\"\\t\\t\\t$entity = $existing[$groupId][$permissionId] ?? $this->create();\"},{\"line\":87,\"text\":\"\"},{\"line\":88,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":89,\"text\":\"\\t\\t\\t$entity->setOption('dependent_check', false);\"},{\"line\":90,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":92,\"text\":\"\"},{\"line\":93,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":94,\"text\":\"\"},{\"line\":95,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":96,\"text\":\"\\t\\t\\t{\"},{\"line\":97,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":98,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":99,\"text\":\"\\t\\t\\t}\"},{\"line\":100,\"text\":\"\\t\\t}\"},{\"line\":101,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":102,\"text\":\"\\t}\"}],[{\"line\":149,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":150,\"text\":\"\\t{\"},{\"line\":151,\"text\":\"\\t\\treturn [\"},{\"line\":152,\"text\":\"\\t\\t\\t'permission_group_id',\"},{\"line\":153,\"text\":\"\\t\\t\\t'permission_id',\"},{\"line\":154,\"text\":\"\\t\\t\\t'permission_type',\"},{\"line\":155,\"text\":\"\\t\\t\\t'depend_permission_id',\"},{\"line\":156,\"text\":\"\\t\\t\\t'interface_group_id',\"},{\"line\":157,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":158,\"text\":\"\\t\\t];\"},{\"line\":159,\"text\":\"\\t}\"}]],\"sha256\":\"8d6b8657e8585eb8da7f1401df882e0033f93e07179ce4df398b95d22d74c477\"},\"PermissionInterfaceGroup.php\":{\"exists\":true,\"methods\":[[{\"line\":15,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":16,\"text\":\"\\t{\"},{\"line\":17,\"text\":\"\\t\\treturn 'permission_interface_groups';\"},{\"line\":18,\"text\":\"\\t}\"}],[{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'interface_group';\"},{\"line\":23,\"text\":\"\\t}\"}],[{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->order('interface_group_id')->fetch();\"},{\"line\":30,\"text\":\"\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":38,\"text\":\"\\t\\t}\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":41,\"text\":\"\\t}\"}],[{\"line\":43,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":44,\"text\":\"\\t{\"},{\"line\":45,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":48,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'interface_group_id');\"},{\"line\":54,\"text\":\"\\t\\t$existing = $this->findByIds($ids);\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$i = 0;\"},{\"line\":57,\"text\":\"\\t\\t$last = 0;\"},{\"line\":58,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":59,\"text\":\"\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":61,\"text\":\"\"},{\"line\":62,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":63,\"text\":\"\\t\\t\\t{\"},{\"line\":64,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":65,\"text\":\"\\t\\t\\t}\"},{\"line\":66,\"text\":\"\"},{\"line\":67,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":68,\"text\":\"\"},{\"line\":69,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":70,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":71,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":72,\"text\":\"\"},{\"line\":73,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":76,\"text\":\"\\t\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":78,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":79,\"text\":\"\\t\\t\\t}\"},{\"line\":80,\"text\":\"\\t\\t}\"},{\"line\":81,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":82,\"text\":\"\\t}\"}],[{\"line\":95,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":96,\"text\":\"\\t{\"},{\"line\":97,\"text\":\"\\t\\treturn [\"},{\"line\":98,\"text\":\"\\t\\t\\t'interface_group_id',\"},{\"line\":99,\"text\":\"\\t\\t\\t'display_order',\"},{\"line\":100,\"text\":\"\\t\\t\\t'is_moderator',\"},{\"line\":101,\"text\":\"\\t\\t];\"},{\"line\":102,\"text\":\"\\t}\"}]],\"sha256\":\"b2b1397ba1dc3174f680ebe4796a88904aa577db969177485d56cd7568c1f8d6\"},\"Phrase.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'phrases';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'phrase';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->where('language_id', 0)\"},{\"line\":31,\"text\":\"\\t\\t\\t->order('title')->fetch();\"},{\"line\":32,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":33,\"text\":\"\\t\\t{\"},{\"line\":34,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":37,\"text\":\"\\t\\t\\tif ($entry['global_cache'])\"},{\"line\":38,\"text\":\"\\t\\t\\t{\"},{\"line\":39,\"text\":\"\\t\\t\\t\\t$node->setAttribute('global_cache', '1');\"},{\"line\":40,\"text\":\"\\t\\t\\t}\"},{\"line\":41,\"text\":\"\\t\\t\\t$this->exportCdata($node, $entry->phrase_text);\"},{\"line\":42,\"text\":\"\"},{\"line\":43,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":44,\"text\":\"\\t\\t}\"},{\"line\":45,\"text\":\"\"},{\"line\":46,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":47,\"text\":\"\\t}\"}],[{\"line\":49,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":50,\"text\":\"\\t{\"},{\"line\":51,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":54,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":55,\"text\":\"\\t\\t{\"},{\"line\":56,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":57,\"text\":\"\\t\\t}\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\t$ids = $this->pluckXmlAttribute($entries, 'title');\"},{\"line\":60,\"text\":\"\"},{\"line\":61,\"text\":\"\\t\\t// This chucking approach has been taken due to a MariaDB performance regression with large\"},{\"line\":62,\"text\":\"\\t\\t// IN clauses (see #187523). However, this may have benefits on some slower servers as this\"},{\"line\":63,\"text\":\"\\t\\t// will reduce the number of times we attempt to instantiate phrase entities that won't be\"},{\"line\":64,\"text\":\"\\t\\t// processed in this run.\"},{\"line\":65,\"text\":\"\\t\\t$chunkSize = 200;\"},{\"line\":66,\"text\":\"\\t\\t$nextFetch = null;\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$i = 0;\"},{\"line\":69,\"text\":\"\\t\\t$last = 0;\"},{\"line\":70,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":71,\"text\":\"\\t\\t{\"},{\"line\":72,\"text\":\"\\t\\t\\t$originalI = $i;\"},{\"line\":73,\"text\":\"\"},{\"line\":74,\"text\":\"\\t\\t\\t$id = $ids[$i++];\"},{\"line\":75,\"text\":\"\"},{\"line\":76,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":77,\"text\":\"\\t\\t\\t{\"},{\"line\":78,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":79,\"text\":\"\\t\\t\\t}\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\t\\tif ($nextFetch === null || $originalI >= $nextFetch)\"},{\"line\":82,\"text\":\"\\t\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t\\t$slice = array_slice($ids, $originalI, $chunkSize);\"},{\"line\":84,\"text\":\"\\t\\t\\t\\t$nextFetch = $originalI + $chunkSize;\"},{\"line\":85,\"text\":\"\"},{\"line\":86,\"text\":\"\\t\\t\\t\\t$existing = $this->finder()\"},{\"line\":87,\"text\":\"\\t\\t\\t\\t\\t->where('title', $slice)\"},{\"line\":88,\"text\":\"\\t\\t\\t\\t\\t->where('language_id', 0)\"},{\"line\":89,\"text\":\"\\t\\t\\t\\t\\t->keyedBy('title')\"},{\"line\":90,\"text\":\"\\t\\t\\t\\t\\t->fetch();\"},{\"line\":91,\"text\":\"\\t\\t\\t}\"},{\"line\":92,\"text\":\"\"},{\"line\":93,\"text\":\"\\t\\t\\t$entity = $existing[$id] ?? $this->create();\"},{\"line\":94,\"text\":\"\\t\\t\\t$entity->setOption('check_duplicate', false);\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":96,\"text\":\"\"},{\"line\":97,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":98,\"text\":\"\\t\\t\\t$entity->language_id = 0;\"},{\"line\":99,\"text\":\"\\t\\t\\t$entity->global_cache = (int) $entry['global_cache'];\"},{\"line\":100,\"text\":\"\\t\\t\\t$entity->phrase_text = $this->getCdataValue($entry);\"},{\"line\":101,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":102,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":103,\"text\":\"\"},{\"line\":104,\"text\":\"\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\"},{\"line\":105,\"text\":\"\"},{\"line\":106,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":107,\"text\":\"\\t\\t\\t{\"},{\"line\":108,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":109,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":110,\"text\":\"\\t\\t\\t}\"},{\"line\":111,\"text\":\"\\t\\t}\"},{\"line\":112,\"text\":\"\"},{\"line\":113,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":114,\"text\":\"\\t}\"}],[{\"line\":121,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":122,\"text\":\"\\t{\"},{\"line\":123,\"text\":\"\\t\\treturn [\"},{\"line\":124,\"text\":\"\\t\\t\\t'title',\"},{\"line\":125,\"text\":\"\\t\\t\\t'version_id',\"},{\"line\":126,\"text\":\"\\t\\t\\t'version_string',\"},{\"line\":127,\"text\":\"\\t\\t];\"},{\"line\":128,\"text\":\"\\t}\"}]],\"sha256\":\"af1d53936447b820d9f3dc3e50a7058dfe96890417f5fd466fb1361d99988266\"},\"Route.php\":{\"exists\":true,\"methods\":[[{\"line\":16,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":17,\"text\":\"\\t{\"},{\"line\":18,\"text\":\"\\t\\treturn 'routes';\"},{\"line\":19,\"text\":\"\\t}\"}],[{\"line\":21,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":22,\"text\":\"\\t{\"},{\"line\":23,\"text\":\"\\t\\treturn 'route';\"},{\"line\":24,\"text\":\"\\t}\"}],[{\"line\":26,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":27,\"text\":\"\\t{\"},{\"line\":28,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":38,\"text\":\"\\t\\t}\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":41,\"text\":\"\\t}\"}],[{\"line\":43,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":44,\"text\":\"\\t{\"},{\"line\":45,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":48,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":54,\"text\":\"\\t\\t$existing = [];\"},{\"line\":55,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":56,\"text\":\"\\t\\t{\"},{\"line\":57,\"text\":\"\\t\\t\\t$conditions[] = [\"},{\"line\":58,\"text\":\"\\t\\t\\t\\t'route_type' => (string) $entry['route_type'],\"},{\"line\":59,\"text\":\"\\t\\t\\t\\t'route_prefix' => (string) $entry['route_prefix'],\"},{\"line\":60,\"text\":\"\\t\\t\\t\\t'sub_name' => (string) $entry['sub_name'],\"},{\"line\":61,\"text\":\"\\t\\t\\t];\"},{\"line\":62,\"text\":\"\\t\\t}\"},{\"line\":63,\"text\":\"\\t\\tif ($conditions)\"},{\"line\":64,\"text\":\"\\t\\t{\"},{\"line\":65,\"text\":\"\\t\\t\\tforeach ($this->finder()->whereOr($conditions)->fetch() AS $route)\"},{\"line\":66,\"text\":\"\\t\\t\\t{\"},{\"line\":67,\"text\":\"\\t\\t\\t\\t$existing[$route->route_type][$route->route_prefix][$route->sub_name] = $route;\"},{\"line\":68,\"text\":\"\\t\\t\\t}\"},{\"line\":69,\"text\":\"\\t\\t}\"},{\"line\":70,\"text\":\"\"},{\"line\":71,\"text\":\"\\t\\t$i = 0;\"},{\"line\":72,\"text\":\"\\t\\t$last = 0;\"},{\"line\":73,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":74,\"text\":\"\\t\\t{\"},{\"line\":75,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":78,\"text\":\"\\t\\t\\t{\"},{\"line\":79,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":80,\"text\":\"\\t\\t\\t}\"},{\"line\":81,\"text\":\"\"},{\"line\":82,\"text\":\"\\t\\t\\t$type = (string) $entry['route_type'];\"},{\"line\":83,\"text\":\"\\t\\t\\t$prefix = (string) $entry['route_prefix'];\"},{\"line\":84,\"text\":\"\\t\\t\\t$subName = (string) $entry['sub_name'];\"},{\"line\":85,\"text\":\"\\t\\t\\t$entity = $existing[$type][$prefix][$subName] ?? $this->create();\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t\\t$entity->setOptions([\"},{\"line\":88,\"text\":\"\\t\\t\\t\\t'check_duplicate' => false,\"},{\"line\":89,\"text\":\"\\t\\t\\t]);\"},{\"line\":90,\"text\":\"\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":92,\"text\":\"\"},{\"line\":93,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":94,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":96,\"text\":\"\"},{\"line\":97,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":98,\"text\":\"\\t\\t\\t{\"},{\"line\":99,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":100,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":101,\"text\":\"\\t\\t\\t}\"},{\"line\":102,\"text\":\"\\t\\t}\"},{\"line\":103,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":104,\"text\":\"\\t}\"}],[{\"line\":154,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":155,\"text\":\"\\t{\"},{\"line\":156,\"text\":\"\\t\\treturn [\"},{\"line\":157,\"text\":\"\\t\\t\\t'route_type',\"},{\"line\":158,\"text\":\"\\t\\t\\t'route_prefix',\"},{\"line\":159,\"text\":\"\\t\\t\\t'sub_name',\"},{\"line\":160,\"text\":\"\\t\\t\\t'format',\"},{\"line\":161,\"text\":\"\\t\\t\\t'build_class',\"},{\"line\":162,\"text\":\"\\t\\t\\t'build_method',\"},{\"line\":163,\"text\":\"\\t\\t\\t'controller',\"},{\"line\":164,\"text\":\"\\t\\t\\t'context',\"},{\"line\":165,\"text\":\"\\t\\t\\t'action_prefix',\"},{\"line\":166,\"text\":\"\\t\\t];\"},{\"line\":167,\"text\":\"\\t}\"}]],\"sha256\":\"ffd5dc9411b761a264810af2241af71c553ab2b409f670305687e9d4d75a34bb\"},\"Template.php\":{\"exists\":true,\"methods\":[[{\"line\":15,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":16,\"text\":\"\\t{\"},{\"line\":17,\"text\":\"\\t\\treturn 'templates';\"},{\"line\":18,\"text\":\"\\t}\"}],[{\"line\":20,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":21,\"text\":\"\\t{\"},{\"line\":22,\"text\":\"\\t\\treturn 'template';\"},{\"line\":23,\"text\":\"\\t}\"}],[{\"line\":25,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":26,\"text\":\"\\t{\"},{\"line\":27,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":28,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":29,\"text\":\"\\t\\t\\t->where('style_id', 0)\"},{\"line\":30,\"text\":\"\\t\\t\\t->order(['type', 'title'])->fetch();\"},{\"line\":31,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":32,\"text\":\"\\t\\t{\"},{\"line\":33,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":34,\"text\":\"\"},{\"line\":35,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":36,\"text\":\"\\t\\t\\t$this->exportCdata($node, $entry->template);\"},{\"line\":37,\"text\":\"\"},{\"line\":38,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":39,\"text\":\"\\t\\t}\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":42,\"text\":\"\\t}\"}],[{\"line\":44,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":45,\"text\":\"\\t{\"},{\"line\":46,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":47,\"text\":\"\"},{\"line\":48,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":49,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":50,\"text\":\"\\t\\t{\"},{\"line\":51,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":52,\"text\":\"\\t\\t}\"},{\"line\":53,\"text\":\"\"},{\"line\":54,\"text\":\"\\t\\t$conditions = [];\"},{\"line\":55,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":56,\"text\":\"\\t\\t{\"},{\"line\":57,\"text\":\"\\t\\t\\t$conditions[] = [\"},{\"line\":58,\"text\":\"\\t\\t\\t\\t'type' => (string) $entry['type'],\"},{\"line\":59,\"text\":\"\\t\\t\\t\\t'title' => (string) $entry['title'],\"},{\"line\":60,\"text\":\"\\t\\t\\t];\"},{\"line\":61,\"text\":\"\\t\\t}\"},{\"line\":62,\"text\":\"\\t\\tif ($conditions)\"},{\"line\":63,\"text\":\"\\t\\t{\"},{\"line\":64,\"text\":\"\\t\\t\\t$existing = $this->finder()\"},{\"line\":65,\"text\":\"\\t\\t\\t\\t->whereOr($conditions)\"},{\"line\":66,\"text\":\"\\t\\t\\t\\t->where('style_id', 0)\"},{\"line\":67,\"text\":\"\\t\\t\\t\\t->fetch()\"},{\"line\":68,\"text\":\"\\t\\t\\t\\t->groupBy('type', 'title');\"},{\"line\":69,\"text\":\"\\t\\t}\"},{\"line\":70,\"text\":\"\\t\\telse\"},{\"line\":71,\"text\":\"\\t\\t{\"},{\"line\":72,\"text\":\"\\t\\t\\t$existing = [];\"},{\"line\":73,\"text\":\"\\t\\t}\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\t$i = 0;\"},{\"line\":76,\"text\":\"\\t\\t$last = 0;\"},{\"line\":77,\"text\":\"\"},{\"line\":78,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":79,\"text\":\"\\t\\t{\"},{\"line\":80,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":81,\"text\":\"\"},{\"line\":82,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":83,\"text\":\"\\t\\t\\t{\"},{\"line\":84,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":85,\"text\":\"\\t\\t\\t}\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t\\t$type = (string) $entry['type'];\"},{\"line\":88,\"text\":\"\\t\\t\\t$title = (string) $entry['title'];\"},{\"line\":89,\"text\":\"\\t\\t\\t$entity = $existing[$type][$title] ?? $this->create();\"},{\"line\":90,\"text\":\"\\t\\t\\t$entity->setOption('check_duplicate', false);\"},{\"line\":91,\"text\":\"\\t\\t\\t$entity->setOption('report_modification_errors', false);\"},{\"line\":92,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":93,\"text\":\"\"},{\"line\":94,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":95,\"text\":\"\\t\\t\\t$entity->style_id = 0;\"},{\"line\":96,\"text\":\"\\t\\t\\t$entity->template = $this->getCdataValue($entry);\"},{\"line\":97,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":98,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":99,\"text\":\"\"},{\"line\":100,\"text\":\"\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\"},{\"line\":101,\"text\":\"\"},{\"line\":102,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":103,\"text\":\"\\t\\t\\t{\"},{\"line\":104,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":105,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":106,\"text\":\"\\t\\t\\t}\"},{\"line\":107,\"text\":\"\\t\\t}\"},{\"line\":108,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":109,\"text\":\"\\t}\"}],[{\"line\":156,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":157,\"text\":\"\\t{\"},{\"line\":158,\"text\":\"\\t\\treturn [\"},{\"line\":159,\"text\":\"\\t\\t\\t'type',\"},{\"line\":160,\"text\":\"\\t\\t\\t'title',\"},{\"line\":161,\"text\":\"\\t\\t\\t'version_id',\"},{\"line\":162,\"text\":\"\\t\\t\\t'version_string',\"},{\"line\":163,\"text\":\"\\t\\t];\"},{\"line\":164,\"text\":\"\\t}\"}]],\"sha256\":\"fecae5772cfd98cb53672180957a3a50a521d6ee6194dd5d7a346630afb3933a\"},\"TemplateModification.php\":{\"exists\":true,\"methods\":[[{\"line\":18,\"text\":\"\\tpublic function getContainerTag()\"},{\"line\":19,\"text\":\"\\t{\"},{\"line\":20,\"text\":\"\\t\\treturn 'template_modifications';\"},{\"line\":21,\"text\":\"\\t}\"}],[{\"line\":23,\"text\":\"\\tpublic function getChildTag()\"},{\"line\":24,\"text\":\"\\t{\"},{\"line\":25,\"text\":\"\\t\\treturn 'modification';\"},{\"line\":26,\"text\":\"\\t}\"}],[{\"line\":28,\"text\":\"\\tpublic function exportAddOnData($addOnId, \\\\DOMElement $container)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$entries = $this->finder()\"},{\"line\":31,\"text\":\"\\t\\t\\t->where('addon_id', $addOnId)\"},{\"line\":32,\"text\":\"\\t\\t\\t->order(['template', 'modification_key'])->fetch();\"},{\"line\":33,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":34,\"text\":\"\\t\\t{\"},{\"line\":35,\"text\":\"\\t\\t\\t$node = $container->ownerDocument->createElement($this->getChildTag());\"},{\"line\":36,\"text\":\"\"},{\"line\":37,\"text\":\"\\t\\t\\t$this->exportMappedAttributes($node, $entry);\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t\\t$this->exportCdataToNewNode($node, 'find', $entry);\"},{\"line\":40,\"text\":\"\\t\\t\\t$this->exportCdataToNewNode($node, 'replace', $entry);\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\t\\t\\t$container->appendChild($node);\"},{\"line\":43,\"text\":\"\\t\\t}\"},{\"line\":44,\"text\":\"\"},{\"line\":45,\"text\":\"\\t\\treturn $entries->count() ? true : false;\"},{\"line\":46,\"text\":\"\\t}\"}],[{\"line\":48,\"text\":\"\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\"},{\"line\":49,\"text\":\"\\t{\"},{\"line\":50,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$entries = $this->getEntries($container, $start);\"},{\"line\":53,\"text\":\"\\t\\tif (!$entries)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":56,\"text\":\"\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t$keys = $this->pluckXmlAttribute($entries, 'modification_key');\"},{\"line\":59,\"text\":\"\\t\\t$existing = $this->finder()\"},{\"line\":60,\"text\":\"\\t\\t\\t->where('modification_key', $keys)\"},{\"line\":61,\"text\":\"\\t\\t\\t->keyedBy('modification_key')\"},{\"line\":62,\"text\":\"\\t\\t\\t->fetch();\"},{\"line\":63,\"text\":\"\"},{\"line\":64,\"text\":\"\\t\\t$i = 0;\"},{\"line\":65,\"text\":\"\\t\\t$last = 0;\"},{\"line\":66,\"text\":\"\\t\\tforeach ($entries AS $entry)\"},{\"line\":67,\"text\":\"\\t\\t{\"},{\"line\":68,\"text\":\"\\t\\t\\t$i++;\"},{\"line\":69,\"text\":\"\"},{\"line\":70,\"text\":\"\\t\\t\\tif ($i <= $start)\"},{\"line\":71,\"text\":\"\\t\\t\\t{\"},{\"line\":72,\"text\":\"\\t\\t\\t\\tcontinue;\"},{\"line\":73,\"text\":\"\\t\\t\\t}\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\t\\t$entity = $existing[(string) $entry['modification_key']] ?? $this->create();\"},{\"line\":76,\"text\":\"\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\"},{\"line\":77,\"text\":\"\\t\\t\\t$entity->setOption('hide_errors', true);\"},{\"line\":78,\"text\":\"\"},{\"line\":79,\"text\":\"\\t\\t\\t$this->importMappedAttributes($entry, $entity);\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\t\\t$entity->find = $this->getCdataValue($entry->find);\"},{\"line\":82,\"text\":\"\\t\\t\\t$entity->replace = $this->getCdataValue($entry->replace);\"},{\"line\":83,\"text\":\"\"},{\"line\":84,\"text\":\"\\t\\t\\t$entity->addon_id = $addOnId;\"},{\"line\":85,\"text\":\"\\t\\t\\t$entity->save(true, false);\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\"},{\"line\":90,\"text\":\"\\t\\t\\t{\"},{\"line\":91,\"text\":\"\\t\\t\\t\\t$last = $i;\"},{\"line\":92,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":93,\"text\":\"\\t\\t\\t}\"},{\"line\":94,\"text\":\"\\t\\t}\"},{\"line\":95,\"text\":\"\\t\\treturn ($last ?: false);\"},{\"line\":96,\"text\":\"\\t}\"}],[{\"line\":140,\"text\":\"\\tprotected function getMappedAttributes()\"},{\"line\":141,\"text\":\"\\t{\"},{\"line\":142,\"text\":\"\\t\\treturn [\"},{\"line\":143,\"text\":\"\\t\\t\\t'type',\"},{\"line\":144,\"text\":\"\\t\\t\\t'template',\"},{\"line\":145,\"text\":\"\\t\\t\\t'modification_key',\"},{\"line\":146,\"text\":\"\\t\\t\\t'description',\"},{\"line\":147,\"text\":\"\\t\\t\\t'execution_order',\"},{\"line\":148,\"text\":\"\\t\\t\\t'enabled',\"},{\"line\":149,\"text\":\"\\t\\t\\t'action',\"},{\"line\":150,\"text\":\"\\t\\t];\"},{\"line\":151,\"text\":\"\\t}\"}]],\"sha256\":\"c27e2bb5baa379dcaf0eab73f35fcc62f5ce656fbccbcb4d6ded095d83b4b31a\"}},\"db\":{\"addon_rows\":0,\"board_active\":\"0\",\"content_type_field_rows\":0,\"error_count_after_baseline\":0,\"error_max\":43,\"listener_addon_rows\":0,\"option_group_rows\":0,\"option_rows\":0,\"permission_rows\":0,\"phrase_addon_rows\":0,\"phrase_prefix_rows\":0,\"route_addon_rows\":0,\"route_prefix_rows\":0,\"table_rows\":0,\"template_addon_rows\":0,\"template_mod_addon_rows\":0,\"template_prefix_rows\":0},\"db_probe\":{\"rc\":0,\"stderr_sha256\":\"\",\"stdout_lines\":1},\"error_probe\":{\"rc\":0,\"stderr_sha256\":\"\",\"stdout_lines\":1},\"errors_after_baseline\":[],\"guest\":\"newfi-staging\",\"identity_ok\":true,\"lifecycle_contract\":{\"src/XF/AddOn/AbstractSetup.php\":{\"blocks\":[[{\"line\":25,\"text\":\"\\tabstract public function install(array $stepParams = []);\"},{\"line\":26,\"text\":\"\"},{\"line\":27,\"text\":\"\\t/**\"},{\"line\":28,\"text\":\"\\t * @param array $stepParams\"},{\"line\":29,\"text\":\"\\t *\"},{\"line\":30,\"text\":\"\\t * @return null|StepResult\"},{\"line\":31,\"text\":\"\\t */\"},{\"line\":32,\"text\":\"\\tabstract public function upgrade(array $stepParams = []);\"},{\"line\":33,\"text\":\"\"},{\"line\":34,\"text\":\"\\t/**\"},{\"line\":35,\"text\":\"\\t * @param array $stepParams\"},{\"line\":36,\"text\":\"\\t *\"},{\"line\":37,\"text\":\"\\t * @return null|StepResult\"},{\"line\":38,\"text\":\"\\t */\"},{\"line\":39,\"text\":\"\\tabstract public function uninstall(array $stepParams = []);\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\tpublic function __construct(AddOn $addOn, App $app)\"},{\"line\":42,\"text\":\"\\t{\"},{\"line\":43,\"text\":\"\\t\\t$this->addOn = $addOn;\"},{\"line\":44,\"text\":\"\\t\\t$this->app = $app;\"},{\"line\":45,\"text\":\"\\t}\"}],[{\"line\":39,\"text\":\"\\tabstract public function uninstall(array $stepParams = []);\"},{\"line\":40,\"text\":\"\"},{\"line\":41,\"text\":\"\\tpublic function __construct(AddOn $addOn, App $app)\"},{\"line\":42,\"text\":\"\\t{\"},{\"line\":43,\"text\":\"\\t\\t$this->addOn = $addOn;\"},{\"line\":44,\"text\":\"\\t\\t$this->app = $app;\"},{\"line\":45,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88\"},\"src/XF/AddOn/AddOn.php\":{\"blocks\":[[{\"line\":553,\"text\":\"\\tpublic function preInstall()\"},{\"line\":554,\"text\":\"\\t{\"},{\"line\":555,\"text\":\"\\t\\tif (!$this->installedAddOn)\"},{\"line\":556,\"text\":\"\\t\\t{\"},{\"line\":557,\"text\":\"\\t\\t\\t$json = $this->getJson();\"},{\"line\":558,\"text\":\"\"},{\"line\":559,\"text\":\"\\t\\t\\t$installed = \\\\XF::em()->create(\\\\XF\\\\Entity\\\\AddOn::class);\"},{\"line\":560,\"text\":\"\\t\\t\\t$installed->bulkSet([\"},{\"line\":561,\"text\":\"\\t\\t\\t\\t'addon_id' => $this->getAddOnId(),\"},{\"line\":562,\"text\":\"\\t\\t\\t\\t'title' => $json['title'],\"},{\"line\":563,\"text\":\"\\t\\t\\t\\t'version_string' => $json['version_string'],\"},{\"line\":564,\"text\":\"\\t\\t\\t\\t'version_id' => $json['version_id'],\"},{\"line\":565,\"text\":\"\\t\\t\\t\\t'active' => true,\"},{\"line\":566,\"text\":\"\\t\\t\\t\\t'is_processing' => true,\"},{\"line\":567,\"text\":\"\\t\\t\\t\\t'json_hash' => $this->getJsonHash(),\"},{\"line\":568,\"text\":\"\\t\\t\\t\\t'last_pending_action' => 'install:0',\"},{\"line\":569,\"text\":\"\\t\\t\\t]);\"},{\"line\":570,\"text\":\"\\t\\t\\t$installed->save();\"},{\"line\":571,\"text\":\"\"},{\"line\":572,\"text\":\"\\t\\t\\t$this->installedAddOn = $installed;\"},{\"line\":573,\"text\":\"\"},{\"line\":574,\"text\":\"\\t\\t\\t\\\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":575,\"text\":\"\\t\\t}\"},{\"line\":576,\"text\":\"\\t}\"}],[{\"line\":578,\"text\":\"\\tpublic function postInstall(array &$stateChanges)\"},{\"line\":579,\"text\":\"\\t{\"},{\"line\":580,\"text\":\"\\t\\t$setup = $this->getSetup();\"},{\"line\":581,\"text\":\"\\t\\tif ($setup)\"},{\"line\":582,\"text\":\"\\t\\t{\"},{\"line\":583,\"text\":\"\\t\\t\\t$setup->postInstall($stateChanges);\"},{\"line\":584,\"text\":\"\\t\\t}\"},{\"line\":585,\"text\":\"\"},{\"line\":586,\"text\":\"\\t\\t$this->resetPendingAction();\"},{\"line\":587,\"text\":\"\"},{\"line\":588,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":589,\"text\":\"\"},{\"line\":590,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":591,\"text\":\"\\t\\t\\\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);\"},{\"line\":592,\"text\":\"\\t}\"}],[{\"line\":644,\"text\":\"\\tpublic function preUninstall()\"},{\"line\":645,\"text\":\"\\t{\"},{\"line\":646,\"text\":\"\\t\\t$installed = $this->installedAddOn;\"},{\"line\":647,\"text\":\"\\t\\tif (!$installed)\"},{\"line\":648,\"text\":\"\\t\\t{\"},{\"line\":649,\"text\":\"\\t\\t\\tthrow new \\\\LogicException(\\\"Add-on is not installed\\\");\"},{\"line\":650,\"text\":\"\\t\\t}\"},{\"line\":651,\"text\":\"\"},{\"line\":652,\"text\":\"\\t\\t$installed->is_processing = true;\"},{\"line\":653,\"text\":\"\\t\\t$installed->last_pending_action = 'uninstall:0';\"},{\"line\":654,\"text\":\"\\t\\t$installed->saveIfChanged();\"},{\"line\":655,\"text\":\"\"},{\"line\":656,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":657,\"text\":\"\\t\\t\\\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);\"},{\"line\":658,\"text\":\"\\t}\"}],[{\"line\":660,\"text\":\"\\tpublic function postUninstall()\"},{\"line\":661,\"text\":\"\\t{\"},{\"line\":662,\"text\":\"\\t\\t/** @var FileCheck $fileCheck */\"},{\"line\":663,\"text\":\"\\t\\t$fileCheck = \\\\XF::em()->create(FileCheck::class);\"},{\"line\":664,\"text\":\"\\t\\t$fileCheck->save();\"},{\"line\":665,\"text\":\"\"},{\"line\":666,\"text\":\"\\t\\t\\\\XF::app()->jobManager()->enqueueUnique('fileCheck', \\\\XF\\\\Job\\\\FileCheck::class, [\"},{\"line\":667,\"text\":\"\\t\\t\\t'check_id' => $fileCheck->check_id,\"},{\"line\":668,\"text\":\"\\t\\t\\t'automated' => true,\"},{\"line\":669,\"text\":\"\\t\\t], false);\"},{\"line\":670,\"text\":\"\"},{\"line\":671,\"text\":\"\\t\\t$json = $this->getJson();\"},{\"line\":672,\"text\":\"\"},{\"line\":673,\"text\":\"\\t\\t\\\\XF::fire('addon_post_uninstall', [$this, $this->addOnId, $json], $this->addOnId);\"},{\"line\":674,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422\"},\"src/XF/AddOn/DataManager.php\":{\"blocks\":[[{\"line\":85,\"text\":\"\\tpublic function enqueueImportAddOnData(AddOn $addOn)\"},{\"line\":86,\"text\":\"\\t{\"},{\"line\":87,\"text\":\"\\t\\treturn \\\\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, [\"},{\"line\":88,\"text\":\"\\t\\t\\t'addon_id' => $addOn->addon_id,\"},{\"line\":89,\"text\":\"\\t\\t]);\"},{\"line\":90,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0\"},\"src/XF/Cli/Command/AddOnInstall.php\":{\"blocks\":[[{\"line\":36,\"text\":\"\\tprotected function execute(InputInterface $input, OutputInterface $output)\"},{\"line\":37,\"text\":\"\\t{\"},{\"line\":38,\"text\":\"\\t\\t$id = $input->getArgument('id');\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t$addOnManager = \\\\XF::app()->addOnManager();\"},{\"line\":41,\"text\":\"\"},{\"line\":42,\"text\":\"\\t\\tif ($this->isAZipFile($id))\"},{\"line\":43,\"text\":\"\\t\\t{\"},{\"line\":44,\"text\":\"\\t\\t\\t$id = $this->validateAndExtractAddOnZip($id, $error);\"},{\"line\":45,\"text\":\"\\t\\t\\tif (!$id)\"},{\"line\":46,\"text\":\"\\t\\t\\t{\"},{\"line\":47,\"text\":\"\\t\\t\\t\\t$output->writeln('' . $error . '');\"},{\"line\":48,\"text\":\"\\t\\t\\t\\treturn 1;\"},{\"line\":49,\"text\":\"\\t\\t\\t}\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\"},{\"line\":52,\"text\":\"\\t\\t$addOn = $addOnManager->getById($id);\"},{\"line\":53,\"text\":\"\\t\\tif (!$addOn)\"},{\"line\":54,\"text\":\"\\t\\t{\"},{\"line\":55,\"text\":\"\\t\\t\\t$output->writeln(\\\"\\\" . \\\"The add-on '$id' could be found.\\\" . \\\"\\\");\"},{\"line\":56,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":57,\"text\":\"\\t\\t}\"},{\"line\":58,\"text\":\"\"},{\"line\":59,\"text\":\"\\t\\tif (!$addOn->canInstall())\"},{\"line\":60,\"text\":\"\\t\\t{\"},{\"line\":61,\"text\":\"\\t\\t\\tif ($addOn)\"},{\"line\":62,\"text\":\"\\t\\t\\t{\"},{\"line\":63,\"text\":\"\\t\\t\\t\\t$output->writeln(\\\"\\\" . \\\\XF::phrase('this_add_on_already_installed_upgrade_instead') . \\\"\\\");\"},{\"line\":64,\"text\":\"\\t\\t\\t}\"},{\"line\":65,\"text\":\"\\t\\t\\telse\"},{\"line\":66,\"text\":\"\\t\\t\\t{\"},{\"line\":67,\"text\":\"\\t\\t\\t\\t$output->writeln(\\\"\\\" . \\\\XF::phrase('this_add_on_cannot_be_installed') . \\\"\\\");\"},{\"line\":68,\"text\":\"\\t\\t\\t}\"},{\"line\":69,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":70,\"text\":\"\\t\\t}\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\tif (!$this->verifyAddOnAction($input, $output, $addOn))\"},{\"line\":73,\"text\":\"\\t\\t{\"},{\"line\":74,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":75,\"text\":\"\\t\\t}\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t/** @var QuestionHelper $helper */\"},{\"line\":78,\"text\":\"\\t\\t$helper = $this->getHelper('question');\"},{\"line\":79,\"text\":\"\"},{\"line\":80,\"text\":\"\\t\\t$question = new ConfirmationQuestion(\\\"\\\" . \\\\XF::phrase('please_confirm_that_you_want_to_install_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \\\") (y/n)\\\");\"},{\"line\":81,\"text\":\"\\t\\t$response = $helper->ask($input, $output, $question);\"},{\"line\":82,\"text\":\"\\t\\tif (!$response)\"},{\"line\":83,\"text\":\"\\t\\t{\"},{\"line\":84,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":85,\"text\":\"\\t\\t}\"},{\"line\":86,\"text\":\"\"},{\"line\":87,\"text\":\"\\t\\t// make sure any errors get logged here\"},{\"line\":88,\"text\":\"\\t\\t\\\\XF::app()->error()->setIgnorePendingUpgrade(true);\"},{\"line\":89,\"text\":\"\"},{\"line\":90,\"text\":\"\\t\\t$addOn->preInstall();\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'install');\"},{\"line\":93,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'import');\"},{\"line\":94,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'post-install');\"},{\"line\":95,\"text\":\"\"},{\"line\":96,\"text\":\"\\t\\treturn 0;\"},{\"line\":97,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"2407ad9ae20ca8ac1ca84b456ac2adc537f39c79534da5e258167a4d0df2a54f\"},\"src/XF/Cli/Command/AddOnUninstall.php\":{\"blocks\":[[{\"line\":36,\"text\":\"\\tprotected function execute(InputInterface $input, OutputInterface $output)\"},{\"line\":37,\"text\":\"\\t{\"},{\"line\":38,\"text\":\"\\t\\t$id = $input->getArgument('id');\"},{\"line\":39,\"text\":\"\"},{\"line\":40,\"text\":\"\\t\\t$addOn = $this->checkInstalledAddOn($id, $error);\"},{\"line\":41,\"text\":\"\\t\\tif (!$addOn)\"},{\"line\":42,\"text\":\"\\t\\t{\"},{\"line\":43,\"text\":\"\\t\\t\\t$output->writeln('' . $error . '');\"},{\"line\":44,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":45,\"text\":\"\\t\\t}\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\tif (!$addOn->canUninstall() && !$input->getOption('force'))\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\t$output->writeln(\\\"\\\" . \\\\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing') . \\\"\\\");\"},{\"line\":50,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\t\\t/** @var QuestionHelper $helper */\"},{\"line\":54,\"text\":\"\\t\\t$helper = $this->getHelper('question');\"},{\"line\":55,\"text\":\"\"},{\"line\":56,\"text\":\"\\t\\t$question = new ConfirmationQuestion(\\\"\\\" . \\\\XF::phrase('please_confirm_that_you_want_to_uninstall_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \\\") (y/n)\\\");\"},{\"line\":57,\"text\":\"\\t\\t$response = $helper->ask($input, $output, $question);\"},{\"line\":58,\"text\":\"\\t\\tif (!$response)\"},{\"line\":59,\"text\":\"\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\treturn 1;\"},{\"line\":61,\"text\":\"\\t\\t}\"},{\"line\":62,\"text\":\"\"},{\"line\":63,\"text\":\"\\t\\t// make sure any errors get logged here\"},{\"line\":64,\"text\":\"\\t\\t\\\\XF::app()->error()->setIgnorePendingUpgrade(true);\"},{\"line\":65,\"text\":\"\"},{\"line\":66,\"text\":\"\\t\\t$addOn->preUninstall();\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'uninstall');\"},{\"line\":69,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'uninstall-data');\"},{\"line\":70,\"text\":\"\\t\\t$this->runSubAction($output, $addOn, 'post-uninstall');\"},{\"line\":71,\"text\":\"\"},{\"line\":72,\"text\":\"\\t\\treturn 0;\"},{\"line\":73,\"text\":\"\\t}\"}]],\"exists\":true,\"sha256\":\"6dc768f60efd4af161b549cd54c01ae8922326cf7fd230b8ef93403bf8dba90c\"}},\"runtime\":{\"http_code\":\"503\",\"http_rc\":0,\"services\":{\"mariadb\":{\"rc\":0,\"state\":\"active\"},\"nginx\":{\"rc\":0,\"state\":\"active\"},\"php8.3-fpm\":{\"rc\":0,\"state\":\"active\"}}},\"scope\":\"READ_ONLY_NO_MUTATION\",\"stage039\":{\"state\":\"ABSENT\"}}\nSUPPORT042_RESIDUAL_SUM=0\nSUPPORT042_NEW_ERROR_COUNT=0\nSUPPORT042_POSTROLLBACK_CLEAN=True\nSUPPORT042_DECISION=FORENSIC_CAPTURE_COMPLETE\nSUPPORT042_MUTATION_SCOPE=NONE_READ_ONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nSUPPORT042_END\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 5e7a4494..2ab340c6 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-041 +COMMAND_ID=SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=gram-support-vm211-staging-forensic +COMPONENT=gram-support-vm211-staging-forensic-corrected REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=d31b61b5d80966157f8fd0416a1b84da417446fd716707606be2c40794e947e8 +COMMAND_SHA256=15b23b8177dd6de06c36b0bff7d6d33adb5d96f9f6016643f8795cfb1c404f88 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,22 +24,24 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=ca9e03a257db6318511bb3fc6ceedcb81edc9ac133b13de2e30f1d49e5091c20 -SANITIZED_OUTPUT_SHA256=ca9e03a257db6318511bb3fc6ceedcb81edc9ac133b13de2e30f1d49e5091c20 +RAW_EVIDENCE_SHA256=d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3 +SANITIZED_OUTPUT_SHA256=d333fa06430e6f722db581008183763bd599ca73fe5aff35a8a5425cc545bce3 OUTPUT_BEGIN -SUPPORT041_BEGIN +SUPPORT042_BEGIN ERROR_REGISTER_CHECK=OK REFERENCE_CHECK=OK AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d -SUPPORT041_SOURCE_POSTROLLBACK={"source_exists":false,"tmp_exists":false} -SUPPORT041_QGA_STATE={"exitcode":0,"state":"COMPLETE"} -SUPPORT041_VM211={"addon_path":{"state":"ABSENT"},"cli":{"commands":["xf:addon-disable","xf:addon-enable","xf:addon-install","xf:addon-list","xf:addon-rebuild","xf:addon-uninstall","xf:addon-upgrade"],"help":{"xf:addon-disable":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"aad85d19723401a92a03a7824069597c7729f537fbba1d9037e5c7ea46e2d057"},"xf:addon-enable":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"d55071cb0200757dba0a2a8f2c4427f8cf8f525103a9584c61a20d79aea1ca44"},"xf:addon-install":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"9dac6d249cac5938d1d908affe66cc652d0deaa1b24d9233f7bdebec96151104"},"xf:addon-list":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"7934a7143d5b6907a69f477063324e9c53e99f7404fd83af0887a828928e6dbe"},"xf:addon-rebuild":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"36c4af0714bfa9f732f46c004f0bd3ea109340b8b737ba0217dbce50330669c9"},"xf:addon-uninstall":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"c8f2162162c47f832d6c25822395cd2db42d260774e00ebc3bf765532f12ac97"},"xf:addon-upgrade":{"mentions_no_interaction":true,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"834372348cafa33db19e7545b6ae3f9f47d822c8ef3c5cadeb97d0bbbd6a4e40"}},"rc":0},"collection":"COMPLETE","command_id":"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-041","datatype_contract":{"AbstractDataType.php":{"exists":true,"sha256":"a4f6ec14e4009be0029548b07272dc77c6ad96f4cca4e067a7d3ea0004126815","snippets":[[{"line":30,"text":"\tabstract public function getContainerTag();"},{"line":31,"text":""},{"line":32,"text":"\tabstract public function getChildTag();"},{"line":33,"text":""},{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"}],[{"line":32,"text":"\tabstract public function getChildTag();"},{"line":33,"text":""},{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"}],[{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"},{"line":47,"text":""}],[{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"},{"line":47,"text":""},{"line":48,"text":"\tpublic function getTypeFileName()"},{"line":49,"text":"\t{"}],[{"line":174,"text":"\tprotected function getMappedAttributes()"},{"line":175,"text":"\t{"},{"line":176,"text":"\t\treturn [];"},{"line":177,"text":"\t}"},{"line":178,"text":""},{"line":179,"text":"\tprotected function getMaintainedAttributes()"},{"line":180,"text":"\t{"},{"line":181,"text":"\t\treturn [];"},{"line":182,"text":"\t}"},{"line":183,"text":""},{"line":184,"text":"\tprotected function exportArrayToAttributes(\\DOMElement $tag, $attr, Entity $entity)"},{"line":185,"text":"\t{"},{"line":186,"text":"\t\tforeach ($entity->$attr AS $key => $value)"},{"line":187,"text":"\t\t{"}],[{"line":184,"text":"\tprotected function exportArrayToAttributes(\\DOMElement $tag, $attr, Entity $entity)"},{"line":185,"text":"\t{"},{"line":186,"text":"\t\tforeach ($entity->$attr AS $key => $value)"},{"line":187,"text":"\t\t{"},{"line":188,"text":"\t\t\tif ($value === '')"},{"line":189,"text":"\t\t\t{"},{"line":190,"text":"\t\t\t\tcontinue;"},{"line":191,"text":"\t\t\t}"},{"line":192,"text":"\t\t\tif (is_bool($value))"},{"line":193,"text":"\t\t\t{"},{"line":194,"text":"\t\t\t\t$value = $value ? 1 : 0;"},{"line":195,"text":"\t\t\t}"},{"line":196,"text":"\t\t\t$tag->setAttribute($attr . '_' . $key, $value);"},{"line":197,"text":"\t\t}"}],[{"line":200,"text":"\tprotected function exportCdataToNewNode(\\DOMElement $tag, $attr, Entity $entity)"},{"line":201,"text":"\t{"},{"line":202,"text":"\t\t$newNode = $tag->ownerDocument->createElement($attr);"},{"line":203,"text":"\t\t$this->exportCdata($newNode, $entity->{$attr});"},{"line":204,"text":"\t\t$tag->appendChild($newNode);"},{"line":205,"text":"\t}"},{"line":206,"text":""},{"line":207,"text":"\tprotected function exportMappedAttributes(\\DOMElement $tag, Entity $entity)"},{"line":208,"text":"\t{"},{"line":209,"text":"\t\tforeach ($this->getMappedAttributes() AS $attr)"},{"line":210,"text":"\t\t{"},{"line":211,"text":"\t\t\t$value = $entity->getValue($attr);"},{"line":212,"text":""},{"line":213,"text":"\t\t\tif ($value !== '')"}],[{"line":207,"text":"\tprotected function exportMappedAttributes(\\DOMElement $tag, Entity $entity)"},{"line":208,"text":"\t{"},{"line":209,"text":"\t\tforeach ($this->getMappedAttributes() AS $attr)"},{"line":210,"text":"\t\t{"},{"line":211,"text":"\t\t\t$value = $entity->getValue($attr);"},{"line":212,"text":""},{"line":213,"text":"\t\t\tif ($value !== '')"},{"line":214,"text":"\t\t\t{"},{"line":215,"text":"\t\t\t\tif (is_bool($value))"},{"line":216,"text":"\t\t\t\t{"},{"line":217,"text":"\t\t\t\t\t$value = $value ? 1 : 0;"},{"line":218,"text":"\t\t\t\t}"},{"line":219,"text":""},{"line":220,"text":"\t\t\t\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4"}]]},"CodeEventListener.php":{"exists":true,"sha256":"eba1c2560c9c5c48d1185886609203bf73665d664c2ae0f2db0ff17dbad574ab","snippets":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'code_event_listeners';"},{"line":19,"text":"\t}"},{"line":20,"text":""},{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'listener';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'listener';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":"\t\t\t$container->appendChild($node);"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\treturn $entries->count() ? true : false;"}],[{"line":42,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$startTime = microtime(true);"},{"line":45,"text":""},{"line":46,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":47,"text":"\t\tif (!$entries)"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\treturn false;"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$existing = [];"},{"line":53,"text":"\t\tforeach ($this->findAllForType($addOnId)->fetch() AS $listener)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\t$existing[$listener->getAddOnUniqueKey()] = $listener;"}],[{"line":127,"text":"\tprotected function getMappedAttributes()"},{"line":128,"text":"\t{"},{"line":129,"text":"\t\treturn ["},{"line":130,"text":"\t\t\t'event_id',"},{"line":131,"text":"\t\t\t'execute_order',"},{"line":132,"text":"\t\t\t'callback_class',"},{"line":133,"text":"\t\t\t'callback_method',"},{"line":134,"text":"\t\t\t'active',"},{"line":135,"text":"\t\t\t'hint',"},{"line":136,"text":"\t\t\t'description',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"},{"line":139,"text":""},{"line":140,"text":"\tprotected function getAddOnUniqueKeyFromXml(\\SimpleXMLElement $entry)"}]]},"ContentTypeField.php":{"exists":true,"sha256":"6c954db974138ac73a76ba87a119c4efdfb85f922a81832928e9ee022e23f594","snippets":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'content_type_fields';"},{"line":19,"text":"\t}"},{"line":20,"text":""},{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'field';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'field';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['content_type', 'field_name'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\t$doc = $container->ownerDocument;"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['content_type', 'field_name'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\t$doc = $container->ownerDocument;"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $doc->createElement($this->getChildTag());"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":39,"text":"\t\t\t$node->appendChild($doc->createTextNode($entry->field_value));"}],[{"line":47,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":48,"text":"\t{"},{"line":49,"text":"\t\t$startTime = microtime(true);"},{"line":50,"text":""},{"line":51,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":52,"text":"\t\tif (!$entries)"},{"line":53,"text":"\t\t{"},{"line":54,"text":"\t\t\treturn false;"},{"line":55,"text":"\t\t}"},{"line":56,"text":""},{"line":57,"text":"\t\t$existing = $this->finder()->fetch()->groupBy('content_type', 'field_name');"},{"line":58,"text":""},{"line":59,"text":"\t\t$i = 0;"},{"line":60,"text":"\t\t$last = 0;"}],[{"line":132,"text":"\tprotected function getMappedAttributes()"},{"line":133,"text":"\t{"},{"line":134,"text":"\t\treturn ["},{"line":135,"text":"\t\t\t'content_type',"},{"line":136,"text":"\t\t\t'field_name',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"},{"line":139,"text":"}"}]]},"Option.php":{"exists":true,"sha256":"d2a6129dbd3f40dde334388d185aec02a74e33e010b5f81305211f093d1e4e60","snippets":[[{"line":17,"text":"\tpublic function getContainerTag()"},{"line":18,"text":"\t{"},{"line":19,"text":"\t\treturn 'options';"},{"line":20,"text":"\t}"},{"line":21,"text":""},{"line":22,"text":"\tpublic function getChildTag()"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\treturn 'option';"},{"line":25,"text":"\t}"},{"line":26,"text":""},{"line":27,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\t$entries = $this->finder()"},{"line":30,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":22,"text":"\tpublic function getChildTag()"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\treturn 'option';"},{"line":25,"text":"\t}"},{"line":26,"text":""},{"line":27,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\t$entries = $this->finder()"},{"line":30,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":31,"text":"\t\t\t->order('option_id')->fetch();"},{"line":32,"text":""},{"line":33,"text":"\t\t$doc = $container->ownerDocument;"},{"line":34,"text":""},{"line":35,"text":"\t\tforeach ($entries AS $entry)"}],[{"line":27,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\t$entries = $this->finder()"},{"line":30,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":31,"text":"\t\t\t->order('option_id')->fetch();"},{"line":32,"text":""},{"line":33,"text":"\t\t$doc = $container->ownerDocument;"},{"line":34,"text":""},{"line":35,"text":"\t\tforeach ($entries AS $entry)"},{"line":36,"text":"\t\t{"},{"line":37,"text":"\t\t\t$node = $doc->createElement($this->getChildTag());"},{"line":38,"text":""},{"line":39,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":40,"text":"\t\t\t$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));"}],[{"line":64,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":65,"text":"\t{"},{"line":66,"text":"\t\t$startTime = microtime(true);"},{"line":67,"text":""},{"line":68,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":69,"text":"\t\tif (!$entries)"},{"line":70,"text":"\t\t{"},{"line":71,"text":"\t\t\treturn false;"},{"line":72,"text":"\t\t}"},{"line":73,"text":""},{"line":74,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'option_id');"},{"line":75,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":76,"text":""},{"line":77,"text":"\t\t$i = 0;"}],[{"line":128,"text":"\tprotected function getMappedAttributes()"},{"line":129,"text":"\t{"},{"line":130,"text":"\t\treturn ["},{"line":131,"text":"\t\t\t'option_id',"},{"line":132,"text":"\t\t\t'edit_format',"},{"line":133,"text":"\t\t\t'data_type',"},{"line":134,"text":"\t\t\t'validation_class',"},{"line":135,"text":"\t\t\t'validation_method',"},{"line":136,"text":"\t\t\t'advanced',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"},{"line":139,"text":"}"}]]},"OptionGroup.php":{"exists":true,"sha256":"9d75fc1cf5be6c69063ecaed7e0d89a5a2e29ff560e6e57125b59f90405718da","snippets":[[{"line":14,"text":"\tpublic function getContainerTag()"},{"line":15,"text":"\t{"},{"line":16,"text":"\t\treturn 'option_groups';"},{"line":17,"text":"\t}"},{"line":18,"text":""},{"line":19,"text":"\tpublic function getChildTag()"},{"line":20,"text":"\t{"},{"line":21,"text":"\t\treturn 'group';"},{"line":22,"text":"\t}"},{"line":23,"text":""},{"line":24,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\t$entries = $this->finder()"},{"line":27,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":19,"text":"\tpublic function getChildTag()"},{"line":20,"text":"\t{"},{"line":21,"text":"\t\treturn 'group';"},{"line":22,"text":"\t}"},{"line":23,"text":""},{"line":24,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\t$entries = $this->finder()"},{"line":27,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":28,"text":"\t\t\t->order('group_id')->fetch();"},{"line":29,"text":""},{"line":30,"text":"\t\tforeach ($entries AS $entry)"},{"line":31,"text":"\t\t{"},{"line":32,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"}],[{"line":24,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\t$entries = $this->finder()"},{"line":27,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":28,"text":"\t\t\t->order('group_id')->fetch();"},{"line":29,"text":""},{"line":30,"text":"\t\tforeach ($entries AS $entry)"},{"line":31,"text":"\t\t{"},{"line":32,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":33,"text":""},{"line":34,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":35,"text":""},{"line":36,"text":"\t\t\t$container->appendChild($node);"},{"line":37,"text":"\t\t}"}],[{"line":42,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$startTime = microtime(true);"},{"line":45,"text":""},{"line":46,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":47,"text":"\t\tif (!$entries)"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\treturn false;"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'group_id');"},{"line":53,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":54,"text":""},{"line":55,"text":"\t\t$i = 0;"}],[{"line":88,"text":"\tprotected function getMappedAttributes()"},{"line":89,"text":"\t{"},{"line":90,"text":"\t\treturn ["},{"line":91,"text":"\t\t\t'group_id',"},{"line":92,"text":"\t\t\t'icon',"},{"line":93,"text":"\t\t\t'display_order',"},{"line":94,"text":"\t\t\t'debug_only',"},{"line":95,"text":"\t\t];"},{"line":96,"text":"\t}"},{"line":97,"text":"}"}]]},"Permission.php":{"exists":true,"sha256":"8d6b8657e8585eb8da7f1401df882e0033f93e07179ce4df398b95d22d74c477","snippets":[[{"line":18,"text":"\tpublic function getContainerTag()"},{"line":19,"text":"\t{"},{"line":20,"text":"\t\treturn 'permissions';"},{"line":21,"text":"\t}"},{"line":22,"text":""},{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'permission';"},{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'permission';"},{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['permission_group_id', 'permission_id'])->fetch();"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"}],[{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['permission_group_id', 'permission_id'])->fetch();"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":39,"text":""},{"line":40,"text":"\t\t\t$container->appendChild($node);"},{"line":41,"text":"\t\t}"}],[{"line":46,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":47,"text":"\t{"},{"line":48,"text":"\t\t$startTime = microtime(true);"},{"line":49,"text":""},{"line":50,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":51,"text":"\t\tif (!$entries)"},{"line":52,"text":"\t\t{"},{"line":53,"text":"\t\t\treturn false;"},{"line":54,"text":"\t\t}"},{"line":55,"text":""},{"line":56,"text":"\t\t$conditions = [];"},{"line":57,"text":"\t\tforeach ($entries AS $entry)"},{"line":58,"text":"\t\t{"},{"line":59,"text":"\t\t\t$conditions[] = ["}],[{"line":149,"text":"\tprotected function getMappedAttributes()"},{"line":150,"text":"\t{"},{"line":151,"text":"\t\treturn ["},{"line":152,"text":"\t\t\t'permission_group_id',"},{"line":153,"text":"\t\t\t'permission_id',"},{"line":154,"text":"\t\t\t'permission_type',"},{"line":155,"text":"\t\t\t'depend_permission_id',"},{"line":156,"text":"\t\t\t'interface_group_id',"},{"line":157,"text":"\t\t\t'display_order',"},{"line":158,"text":"\t\t];"},{"line":159,"text":"\t}"},{"line":160,"text":"}"}]]},"PermissionInterfaceGroup.php":{"exists":true,"sha256":"b2b1397ba1dc3174f680ebe4796a88904aa577db969177485d56cd7568c1f8d6","snippets":[[{"line":15,"text":"\tpublic function getContainerTag()"},{"line":16,"text":"\t{"},{"line":17,"text":"\t\treturn 'permission_interface_groups';"},{"line":18,"text":"\t}"},{"line":19,"text":""},{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'interface_group';"},{"line":23,"text":"\t}"},{"line":24,"text":""},{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'interface_group';"},{"line":23,"text":"\t}"},{"line":24,"text":""},{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->order('interface_group_id')->fetch();"},{"line":30,"text":""},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"}],[{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->order('interface_group_id')->fetch();"},{"line":30,"text":""},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$container->appendChild($node);"},{"line":38,"text":"\t\t}"}],[{"line":43,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":44,"text":"\t{"},{"line":45,"text":"\t\t$startTime = microtime(true);"},{"line":46,"text":""},{"line":47,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":48,"text":"\t\tif (!$entries)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\treturn false;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'interface_group_id');"},{"line":54,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":55,"text":""},{"line":56,"text":"\t\t$i = 0;"}],[{"line":95,"text":"\tprotected function getMappedAttributes()"},{"line":96,"text":"\t{"},{"line":97,"text":"\t\treturn ["},{"line":98,"text":"\t\t\t'interface_group_id',"},{"line":99,"text":"\t\t\t'display_order',"},{"line":100,"text":"\t\t\t'is_moderator',"},{"line":101,"text":"\t\t];"},{"line":102,"text":"\t}"},{"line":103,"text":"}"}]]},"Phrase.php":{"exists":true,"sha256":"af1d53936447b820d9f3dc3e50a7058dfe96890417f5fd466fb1361d99988266","snippets":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'phrases';"},{"line":19,"text":"\t}"},{"line":20,"text":""},{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'phrase';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'phrase';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->where('language_id', 0)"},{"line":31,"text":"\t\t\t->order('title')->fetch();"},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->where('language_id', 0)"},{"line":31,"text":"\t\t\t->order('title')->fetch();"},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":35,"text":""},{"line":36,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":37,"text":"\t\t\tif ($entry['global_cache'])"},{"line":38,"text":"\t\t\t{"},{"line":39,"text":"\t\t\t\t$node->setAttribute('global_cache', '1');"}],[{"line":49,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":50,"text":"\t{"},{"line":51,"text":"\t\t$startTime = microtime(true);"},{"line":52,"text":""},{"line":53,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":54,"text":"\t\tif (!$entries)"},{"line":55,"text":"\t\t{"},{"line":56,"text":"\t\t\treturn false;"},{"line":57,"text":"\t\t}"},{"line":58,"text":""},{"line":59,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'title');"},{"line":60,"text":""},{"line":61,"text":"\t\t// This chucking approach has been taken due to a MariaDB performance regression with large"},{"line":62,"text":"\t\t// IN clauses (see #187523). However, this may have benefits on some slower servers as this"}],[{"line":121,"text":"\tprotected function getMappedAttributes()"},{"line":122,"text":"\t{"},{"line":123,"text":"\t\treturn ["},{"line":124,"text":"\t\t\t'title',"},{"line":125,"text":"\t\t\t'version_id',"},{"line":126,"text":"\t\t\t'version_string',"},{"line":127,"text":"\t\t];"},{"line":128,"text":"\t}"},{"line":129,"text":"}"}]]},"Route.php":{"exists":true,"sha256":"ffd5dc9411b761a264810af2241af71c553ab2b409f670305687e9d4d75a34bb","snippets":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'routes';"},{"line":19,"text":"\t}"},{"line":20,"text":""},{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'route';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'route';"},{"line":24,"text":"\t}"},{"line":25,"text":""},{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$container->appendChild($node);"},{"line":38,"text":"\t\t}"},{"line":39,"text":""}],[{"line":43,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":44,"text":"\t{"},{"line":45,"text":"\t\t$startTime = microtime(true);"},{"line":46,"text":""},{"line":47,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":48,"text":"\t\tif (!$entries)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\treturn false;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t$conditions = [];"},{"line":54,"text":"\t\t$existing = [];"},{"line":55,"text":"\t\tforeach ($entries AS $entry)"},{"line":56,"text":"\t\t{"}],[{"line":154,"text":"\tprotected function getMappedAttributes()"},{"line":155,"text":"\t{"},{"line":156,"text":"\t\treturn ["},{"line":157,"text":"\t\t\t'route_type',"},{"line":158,"text":"\t\t\t'route_prefix',"},{"line":159,"text":"\t\t\t'sub_name',"},{"line":160,"text":"\t\t\t'format',"},{"line":161,"text":"\t\t\t'build_class',"},{"line":162,"text":"\t\t\t'build_method',"},{"line":163,"text":"\t\t\t'controller',"},{"line":164,"text":"\t\t\t'context',"},{"line":165,"text":"\t\t\t'action_prefix',"},{"line":166,"text":"\t\t];"},{"line":167,"text":"\t}"}]]},"Template.php":{"exists":true,"sha256":"fecae5772cfd98cb53672180957a3a50a521d6ee6194dd5d7a346630afb3933a","snippets":[[{"line":15,"text":"\tpublic function getContainerTag()"},{"line":16,"text":"\t{"},{"line":17,"text":"\t\treturn 'templates';"},{"line":18,"text":"\t}"},{"line":19,"text":""},{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'template';"},{"line":23,"text":"\t}"},{"line":24,"text":""},{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'template';"},{"line":23,"text":"\t}"},{"line":24,"text":""},{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->where('style_id', 0)"},{"line":30,"text":"\t\t\t->order(['type', 'title'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"}],[{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->where('style_id', 0)"},{"line":30,"text":"\t\t\t->order(['type', 'title'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":"\t\t\t$this->exportCdata($node, $entry->template);"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$container->appendChild($node);"}],[{"line":44,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":45,"text":"\t{"},{"line":46,"text":"\t\t$startTime = microtime(true);"},{"line":47,"text":""},{"line":48,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":49,"text":"\t\tif (!$entries)"},{"line":50,"text":"\t\t{"},{"line":51,"text":"\t\t\treturn false;"},{"line":52,"text":"\t\t}"},{"line":53,"text":""},{"line":54,"text":"\t\t$conditions = [];"},{"line":55,"text":"\t\tforeach ($entries AS $entry)"},{"line":56,"text":"\t\t{"},{"line":57,"text":"\t\t\t$conditions[] = ["}],[{"line":156,"text":"\tprotected function getMappedAttributes()"},{"line":157,"text":"\t{"},{"line":158,"text":"\t\treturn ["},{"line":159,"text":"\t\t\t'type',"},{"line":160,"text":"\t\t\t'title',"},{"line":161,"text":"\t\t\t'version_id',"},{"line":162,"text":"\t\t\t'version_string',"},{"line":163,"text":"\t\t];"},{"line":164,"text":"\t}"},{"line":165,"text":"}"}]]},"TemplateModification.php":{"exists":true,"sha256":"c27e2bb5baa379dcaf0eab73f35fcc62f5ce656fbccbcb4d6ded095d83b4b31a","snippets":[[{"line":18,"text":"\tpublic function getContainerTag()"},{"line":19,"text":"\t{"},{"line":20,"text":"\t\treturn 'template_modifications';"},{"line":21,"text":"\t}"},{"line":22,"text":""},{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'modification';"},{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"}],[{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'modification';"},{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['template', 'modification_key'])->fetch();"},{"line":33,"text":"\t\tforeach ($entries AS $entry)"},{"line":34,"text":"\t\t{"},{"line":35,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":36,"text":""}],[{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['template', 'modification_key'])->fetch();"},{"line":33,"text":"\t\tforeach ($entries AS $entry)"},{"line":34,"text":"\t\t{"},{"line":35,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":38,"text":""},{"line":39,"text":"\t\t\t$this->exportCdataToNewNode($node, 'find', $entry);"},{"line":40,"text":"\t\t\t$this->exportCdataToNewNode($node, 'replace', $entry);"},{"line":41,"text":""}],[{"line":48,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":49,"text":"\t{"},{"line":50,"text":"\t\t$startTime = microtime(true);"},{"line":51,"text":""},{"line":52,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":53,"text":"\t\tif (!$entries)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\treturn false;"},{"line":56,"text":"\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t$keys = $this->pluckXmlAttribute($entries, 'modification_key');"},{"line":59,"text":"\t\t$existing = $this->finder()"},{"line":60,"text":"\t\t\t->where('modification_key', $keys)"},{"line":61,"text":"\t\t\t->keyedBy('modification_key')"}],[{"line":140,"text":"\tprotected function getMappedAttributes()"},{"line":141,"text":"\t{"},{"line":142,"text":"\t\treturn ["},{"line":143,"text":"\t\t\t'type',"},{"line":144,"text":"\t\t\t'template',"},{"line":145,"text":"\t\t\t'modification_key',"},{"line":146,"text":"\t\t\t'description',"},{"line":147,"text":"\t\t\t'execution_order',"},{"line":148,"text":"\t\t\t'enabled',"},{"line":149,"text":"\t\t\t'action',"},{"line":150,"text":"\t\t];"},{"line":151,"text":"\t}"},{"line":152,"text":""},{"line":153,"text":"\tprotected function getMaintainedAttributes()"}]]}},"db":null,"db_probe":{"rc":0,"stderr_sha256":""},"error_probe":{"rc":0,"stderr_sha256":""},"errors_after_43":null,"guest":"newfi-staging","identity_ok":true,"root":{"state":"DIR"},"runtime":{"http_code":"503","http_rc":0,"services":{"mariadb":{"rc":0,"state":"active"},"nginx":{"rc":0,"state":"active"},"php8.3-fpm":{"rc":0,"state":"active"}}},"scope":"READ_ONLY_NO_MUTATION","setup_contract":{"src/XF/AddOn/AbstractSetup.php":{"exists":true,"hits":[{"line":25,"text":"abstract public function install(array $stepParams = []);"},{"line":39,"text":"abstract public function uninstall(array $stepParams = []);"}],"sha256":"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88"},"src/XF/AddOn/StepRunnerInstallTrait.php":{"exists":true,"hits":[{"line":17,"text":"public function install(array $stepParams = [])"},{"line":53,"text":"private function installStepRunner($step, array $stepParams)"}],"sha256":"1f441b8a3101b97009ae04e62c04e79062a89f1e01a08ae9e07c5e629c76d5f2"},"src/XF/AddOn/StepRunnerUninstallTrait.php":{"exists":true,"hits":[{"line":17,"text":"public function uninstall(array $stepParams = [])"},{"line":52,"text":"private function uninstallStepRunner($step, array $stepParams)"}],"sha256":"e58a9ab9c30e3cf3c41a0be392e8c5ac37f744578f7b91f76d663139649c49a9"},"src/XF/Db/Schema/Column.php":{"exists":true,"hits":[{"line":254,"text":"public function unsigned($unsigned = null)"},{"line":276,"text":"public function setDefault($default)"},{"line":283,"text":"public function autoIncrement($autoIncrement = null, $setAsPrimary = true)"}],"sha256":"d6749157309835460b98e3e09d33533409850a1fb808417f28e89a97a3775730"},"src/XF/Db/Schema/Create.php":{"exists":true,"hits":[],"sha256":"4b2f0bf31fc3f133b10577c24024f2883c80296478ee4adf5c91930c6b896ddd"}},"stage039":{"state":"ABSENT"},"xml_exemplars":{"code_event_listeners.xml":[],"content_type_fields.xml":[],"option_groups.xml":[],"options.xml":[],"permission_interface_groups.xml":[],"permissions.xml":[],"phrases.xml":[{"addon":"src/addons/Newfi/Portal","child_count":1,"first":[{"attrs":{"title":"nav.newfiPortal","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"tag":"phrase","text_len":5,"text_sha256":"661a914783b315dcc04a526122b417b6cfe9b77f351a51c9cab31baf158bdcba"}],"root":"phrases","root_attrs":{}}],"routes.xml":[{"addon":"src/addons/Newfi/Dogs","child_count":1,"first":[{"attrs":{"controller":"Newfi\\Dogs:Dogs","route_prefix":"dogs","route_type":"public"},"tag":"route"}],"root":"routes","root_attrs":{}},{"addon":"src/addons/Newfi/Events","child_count":1,"first":[{"attrs":{"controller":"Newfi\\Events:Events","route_prefix":"events","route_type":"public"},"tag":"route"}],"root":"routes","root_attrs":{}}],"template_modifications.xml":[],"templates.xml":[{"addon":"src/addons/Newfi/Dogs","child_count":1,"first":[{"attrs":{"title":"newfi_dogs","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"tag":"template","text_len":670,"text_sha256":"02296119da34471dde7d4ef03b599fd0338d4fa5853d43e55bb163bb9921a229"}],"root":"templates","root_attrs":{}},{"addon":"src/addons/Newfi/Events","child_count":1,"first":[{"attrs":{"title":"newfi_events","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"tag":"template","text_len":590,"text_sha256":"5c6d907b5b263765bf4d1d34f025aaf26cf6a268675028224826ca2882a947e9"}],"root":"templates","root_attrs":{}}]}} -SUPPORT041_RESIDUAL_SUM=0 -SUPPORT041_DECISION=HOLD_POSTROLLBACK_OR_RUNTIME_DRIFT -SUPPORT041_MUTATION_SCOPE=NONE_READ_ONLY -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-041","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -SUPPORT041_END +SUPPORT042_SOURCE_POSTROLLBACK={"source_exists":false,"tmp_exists":false} +SUPPORT042_QGA_STATE={"exitcode":0,"state":"COMPLETE"} +SUPPORT042_VM211={"addon_path":{"state":"ABSENT"},"cli":{"commands":["xf:addon-disable","xf:addon-enable","xf:addon-install","xf:addon-list","xf:addon-rebuild","xf:addon-uninstall","xf:addon-upgrade"],"help":{"xf:addon-install":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--verbose","--version"],"rc":0},"xf:addon-rebuild":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--verbose","--version"],"rc":0},"xf:addon-uninstall":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--verbose","--version"],"rc":0},"xf:addon-upgrade":{"options":["--ansi","--force","--help","--no-ansi","--no-interaction","--quiet","--skip-unavailable","--verbose","--version"],"rc":0}},"rc":0},"collection":"COMPLETE","command_id":"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042","datatype_contract":{"AbstractDataType.php":{"exists":true,"methods":[[{"line":30,"text":"\tabstract public function getContainerTag();"},{"line":31,"text":""},{"line":32,"text":"\tabstract public function getChildTag();"},{"line":33,"text":""},{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":32,"text":"\tabstract public function getChildTag();"},{"line":33,"text":""},{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":34,"text":"\tabstract public function exportAddOnData($addOnId, \\DOMElement $container);"},{"line":35,"text":""},{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":36,"text":"\tabstract public function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0);"},{"line":37,"text":""},{"line":38,"text":"\tabstract public function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container);"},{"line":39,"text":""},{"line":40,"text":"\tpublic const USE_AUTO_CDATA = false;"},{"line":41,"text":""},{"line":42,"text":"\tpublic function __construct(Manager $em)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$this->em = $em;"},{"line":45,"text":"\t\t$this->structure = $em->getEntityStructure($this->getShortName());"},{"line":46,"text":"\t}"}],[{"line":174,"text":"\tprotected function getMappedAttributes()"},{"line":175,"text":"\t{"},{"line":176,"text":"\t\treturn [];"},{"line":177,"text":"\t}"}],[{"line":184,"text":"\tprotected function exportArrayToAttributes(\\DOMElement $tag, $attr, Entity $entity)"},{"line":185,"text":"\t{"},{"line":186,"text":"\t\tforeach ($entity->$attr AS $key => $value)"},{"line":187,"text":"\t\t{"},{"line":188,"text":"\t\t\tif ($value === '')"},{"line":189,"text":"\t\t\t{"},{"line":190,"text":"\t\t\t\tcontinue;"},{"line":191,"text":"\t\t\t}"},{"line":192,"text":"\t\t\tif (is_bool($value))"},{"line":193,"text":"\t\t\t{"},{"line":194,"text":"\t\t\t\t$value = $value ? 1 : 0;"},{"line":195,"text":"\t\t\t}"},{"line":196,"text":"\t\t\t$tag->setAttribute($attr . '_' . $key, $value);"},{"line":197,"text":"\t\t}"},{"line":198,"text":"\t}"}],[{"line":200,"text":"\tprotected function exportCdataToNewNode(\\DOMElement $tag, $attr, Entity $entity)"},{"line":201,"text":"\t{"},{"line":202,"text":"\t\t$newNode = $tag->ownerDocument->createElement($attr);"},{"line":203,"text":"\t\t$this->exportCdata($newNode, $entity->{$attr});"},{"line":204,"text":"\t\t$tag->appendChild($newNode);"},{"line":205,"text":"\t}"}],[{"line":207,"text":"\tprotected function exportMappedAttributes(\\DOMElement $tag, Entity $entity)"},{"line":208,"text":"\t{"},{"line":209,"text":"\t\tforeach ($this->getMappedAttributes() AS $attr)"},{"line":210,"text":"\t\t{"},{"line":211,"text":"\t\t\t$value = $entity->getValue($attr);"},{"line":212,"text":""},{"line":213,"text":"\t\t\tif ($value !== '')"},{"line":214,"text":"\t\t\t{"},{"line":215,"text":"\t\t\t\tif (is_bool($value))"},{"line":216,"text":"\t\t\t\t{"},{"line":217,"text":"\t\t\t\t\t$value = $value ? 1 : 0;"},{"line":218,"text":"\t\t\t\t}"},{"line":219,"text":""},{"line":220,"text":"\t\t\t\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4"},{"line":221,"text":"\t\t\t\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\"]*$/si', $value))"},{"line":222,"text":"\t\t\t\t{"},{"line":223,"text":"\t\t\t\t\t// This exports CDATA, but does not escape `]]>` like \\XF\\Util\\XML::createDomCdataSection(),"},{"line":224,"text":"\t\t\t\t\t// because it needs to be transparently importable."},{"line":225,"text":"\t\t\t\t\t// If you need to export values containing `]]>`, use exportCdataToNewNode()"},{"line":226,"text":"\t\t\t\t\t// and remove this attribute from exportMappedAttributes()"},{"line":227,"text":""},{"line":228,"text":"\t\t\t\t\t$newNode = $tag->ownerDocument->createElement($attr);"},{"line":229,"text":""},{"line":230,"text":"\t\t\t\t\t$newNode->appendChild("},{"line":231,"text":"\t\t\t\t\t\t$newNode->ownerDocument->createCDATASection($entity->{$attr})"},{"line":232,"text":"\t\t\t\t\t);"},{"line":233,"text":""},{"line":234,"text":"\t\t\t\t\t$tag->appendChild($newNode);"},{"line":235,"text":"\t\t\t\t}"},{"line":236,"text":"\t\t\t\telse"},{"line":237,"text":"\t\t\t\t{"},{"line":238,"text":"\t\t\t\t\t$tag->setAttribute($attr, $value);"},{"line":239,"text":"\t\t\t\t}"},{"line":240,"text":"\t\t\t}"},{"line":241,"text":"\t\t}"},{"line":242,"text":"\t}"}],[{"line":244,"text":"\tprotected function importMappedAttributes(\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)"},{"line":245,"text":"\t{"},{"line":246,"text":"\t\tif ($entity->exists() && $allowMaintained)"},{"line":247,"text":"\t\t{"},{"line":248,"text":"\t\t\t$maintained = $this->getMaintainedAttributes();"},{"line":249,"text":"\t\t}"},{"line":250,"text":"\t\telse"},{"line":251,"text":"\t\t{"},{"line":252,"text":"\t\t\t$maintained = [];"},{"line":253,"text":"\t\t}"},{"line":254,"text":""},{"line":255,"text":"\t\tforeach ($this->getMappedAttributes() AS $attr)"},{"line":256,"text":"\t\t{"},{"line":257,"text":"\t\t\tif (in_array($attr, $maintained))"},{"line":258,"text":"\t\t\t{"},{"line":259,"text":"\t\t\t\tcontinue;"},{"line":260,"text":"\t\t\t}"},{"line":261,"text":""},{"line":262,"text":"\t\t\tif (self::USE_AUTO_CDATA)"},{"line":263,"text":"\t\t\t{"},{"line":264,"text":"\t\t\t\tif (isset($el[$attr]))"},{"line":265,"text":"\t\t\t\t{"},{"line":266,"text":"\t\t\t\t\t$entity->$attr = (string) $el[$attr];"},{"line":267,"text":"\t\t\t\t}"},{"line":268,"text":"\t\t\t\telse if (isset($el->{$attr}))"},{"line":269,"text":"\t\t\t\t{"},{"line":270,"text":"\t\t\t\t\t$entity->$attr = (string) $el->{$attr};"},{"line":271,"text":"\t\t\t\t}"},{"line":272,"text":"\t\t\t}"},{"line":273,"text":"\t\t\telse"},{"line":274,"text":"\t\t\t{"},{"line":275,"text":"\t\t\t\t$entity->$attr = (string) $el[$attr];"},{"line":276,"text":"\t\t\t}"},{"line":277,"text":"\t\t}"},{"line":278,"text":"\t}"}],[{"line":302,"text":"\tprotected function exportCdata(\\DOMElement $parent, $value)"},{"line":303,"text":"\t{"},{"line":304,"text":"\t\t$cdata = Xml::createDomCdataSection($parent->ownerDocument, $value);"},{"line":305,"text":"\t\t$parent->appendChild($cdata);"},{"line":306,"text":"\t}"}]],"sha256":"a4f6ec14e4009be0029548b07272dc77c6ad96f4cca4e067a7d3ea0004126815"},"CodeEventListener.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'code_event_listeners';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'listener';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['event_id', 'callback_class', 'callback_method'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":"\t\t\t$container->appendChild($node);"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\treturn $entries->count() ? true : false;"},{"line":40,"text":"\t}"}],[{"line":42,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$startTime = microtime(true);"},{"line":45,"text":""},{"line":46,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":47,"text":"\t\tif (!$entries)"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\treturn false;"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$existing = [];"},{"line":53,"text":"\t\tforeach ($this->findAllForType($addOnId)->fetch() AS $listener)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\t$existing[$listener->getAddOnUniqueKey()] = $listener;"},{"line":56,"text":"\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t$i = 0;"},{"line":59,"text":"\t\t$last = 0;"},{"line":60,"text":"\t\tforeach ($entries AS $entry)"},{"line":61,"text":"\t\t{"},{"line":62,"text":"\t\t\t$i++;"},{"line":63,"text":""},{"line":64,"text":"\t\t\tif ($i <= $start)"},{"line":65,"text":"\t\t\t{"},{"line":66,"text":"\t\t\t\tcontinue;"},{"line":67,"text":"\t\t\t}"},{"line":68,"text":""},{"line":69,"text":"\t\t\t$key = $this->getAddOnUniqueKeyFromXml($entry);"},{"line":70,"text":"\t\t\t$entity = $existing[$key] ?? $this->create();"},{"line":71,"text":""},{"line":72,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":73,"text":"\t\t\t$entity->setOption('check_duplicate', false);"},{"line":74,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":75,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":76,"text":""},{"line":77,"text":"\t\t\t$entity->save(true, false);"},{"line":78,"text":""},{"line":79,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":80,"text":"\t\t\t{"},{"line":81,"text":"\t\t\t\t$last = $i;"},{"line":82,"text":"\t\t\t\tbreak;"},{"line":83,"text":"\t\t\t}"},{"line":84,"text":"\t\t}"},{"line":85,"text":"\t\treturn ($last ?: false);"},{"line":86,"text":"\t}"}],[{"line":127,"text":"\tprotected function getMappedAttributes()"},{"line":128,"text":"\t{"},{"line":129,"text":"\t\treturn ["},{"line":130,"text":"\t\t\t'event_id',"},{"line":131,"text":"\t\t\t'execute_order',"},{"line":132,"text":"\t\t\t'callback_class',"},{"line":133,"text":"\t\t\t'callback_method',"},{"line":134,"text":"\t\t\t'active',"},{"line":135,"text":"\t\t\t'hint',"},{"line":136,"text":"\t\t\t'description',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}]],"sha256":"eba1c2560c9c5c48d1185886609203bf73665d664c2ae0f2db0ff17dbad574ab"},"ContentTypeField.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'content_type_fields';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'field';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['content_type', 'field_name'])->fetch();"},{"line":31,"text":""},{"line":32,"text":"\t\t$doc = $container->ownerDocument;"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $doc->createElement($this->getChildTag());"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":39,"text":"\t\t\t$node->appendChild($doc->createTextNode($entry->field_value));"},{"line":40,"text":""},{"line":41,"text":"\t\t\t$container->appendChild($node);"},{"line":42,"text":"\t\t}"},{"line":43,"text":""},{"line":44,"text":"\t\treturn $entries->count() ? true : false;"},{"line":45,"text":"\t}"}],[{"line":47,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":48,"text":"\t{"},{"line":49,"text":"\t\t$startTime = microtime(true);"},{"line":50,"text":""},{"line":51,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":52,"text":"\t\tif (!$entries)"},{"line":53,"text":"\t\t{"},{"line":54,"text":"\t\t\treturn false;"},{"line":55,"text":"\t\t}"},{"line":56,"text":""},{"line":57,"text":"\t\t$existing = $this->finder()->fetch()->groupBy('content_type', 'field_name');"},{"line":58,"text":""},{"line":59,"text":"\t\t$i = 0;"},{"line":60,"text":"\t\t$last = 0;"},{"line":61,"text":"\t\tforeach ($entries AS $entry)"},{"line":62,"text":"\t\t{"},{"line":63,"text":"\t\t\t$i++;"},{"line":64,"text":""},{"line":65,"text":"\t\t\tif ($i <= $start)"},{"line":66,"text":"\t\t\t{"},{"line":67,"text":"\t\t\t\tcontinue;"},{"line":68,"text":"\t\t\t}"},{"line":69,"text":""},{"line":70,"text":"\t\t\t$type = (string) $entry['content_type'];"},{"line":71,"text":"\t\t\t$name = (string) $entry['field_name'];"},{"line":72,"text":"\t\t\t$entity = $existing[$type][$name] ?? $this->create();"},{"line":73,"text":""},{"line":74,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":75,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":76,"text":"\t\t\t$entity->field_value = (string) $entry;"},{"line":77,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":78,"text":""},{"line":79,"text":"\t\t\t$entity->save(true, false);"},{"line":80,"text":""},{"line":81,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":82,"text":"\t\t\t{"},{"line":83,"text":"\t\t\t\t$last = $i;"},{"line":84,"text":"\t\t\t\tbreak;"},{"line":85,"text":"\t\t\t}"},{"line":86,"text":"\t\t}"},{"line":87,"text":"\t\treturn ($last ?: false);"},{"line":88,"text":"\t}"}],[{"line":132,"text":"\tprotected function getMappedAttributes()"},{"line":133,"text":"\t{"},{"line":134,"text":"\t\treturn ["},{"line":135,"text":"\t\t\t'content_type',"},{"line":136,"text":"\t\t\t'field_name',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}]],"sha256":"6c954db974138ac73a76ba87a119c4efdfb85f922a81832928e9ee022e23f594"},"Option.php":{"exists":true,"methods":[[{"line":17,"text":"\tpublic function getContainerTag()"},{"line":18,"text":"\t{"},{"line":19,"text":"\t\treturn 'options';"},{"line":20,"text":"\t}"}],[{"line":22,"text":"\tpublic function getChildTag()"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\treturn 'option';"},{"line":25,"text":"\t}"}],[{"line":27,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\t$entries = $this->finder()"},{"line":30,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":31,"text":"\t\t\t->order('option_id')->fetch();"},{"line":32,"text":""},{"line":33,"text":"\t\t$doc = $container->ownerDocument;"},{"line":34,"text":""},{"line":35,"text":"\t\tforeach ($entries AS $entry)"},{"line":36,"text":"\t\t{"},{"line":37,"text":"\t\t\t$node = $doc->createElement($this->getChildTag());"},{"line":38,"text":""},{"line":39,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":40,"text":"\t\t\t$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));"},{"line":41,"text":"\t\t\tif ($entry->edit_format_params !== '')"},{"line":42,"text":"\t\t\t{"},{"line":43,"text":"\t\t\t\t$node->appendChild(Xml::createDomElement($doc, 'edit_format_params', $entry->edit_format_params));"},{"line":44,"text":"\t\t\t}"},{"line":45,"text":"\t\t\tif ($entry->sub_options)"},{"line":46,"text":"\t\t\t{"},{"line":47,"text":"\t\t\t\t$node->appendChild(Xml::createDomElement($doc, 'sub_options', implode(\"\\n\", $entry->sub_options)));"},{"line":48,"text":"\t\t\t}"},{"line":49,"text":""},{"line":50,"text":"\t\t\tforeach ($entry->Relations AS $relation)"},{"line":51,"text":"\t\t\t{"},{"line":52,"text":"\t\t\t\t$relationNode = $doc->createElement('relation');"},{"line":53,"text":"\t\t\t\t$relationNode->setAttribute('group_id', $relation->group_id);"},{"line":54,"text":"\t\t\t\t$relationNode->setAttribute('display_order', $relation->display_order);"},{"line":55,"text":"\t\t\t\t$node->appendChild($relationNode);"},{"line":56,"text":"\t\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t\t$container->appendChild($node);"},{"line":59,"text":"\t\t}"},{"line":60,"text":""},{"line":61,"text":"\t\treturn $entries->count() ? true : false;"},{"line":62,"text":"\t}"}],[{"line":64,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":65,"text":"\t{"},{"line":66,"text":"\t\t$startTime = microtime(true);"},{"line":67,"text":""},{"line":68,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":69,"text":"\t\tif (!$entries)"},{"line":70,"text":"\t\t{"},{"line":71,"text":"\t\t\treturn false;"},{"line":72,"text":"\t\t}"},{"line":73,"text":""},{"line":74,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'option_id');"},{"line":75,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":76,"text":""},{"line":77,"text":"\t\t$i = 0;"},{"line":78,"text":"\t\t$last = 0;"},{"line":79,"text":"\t\tforeach ($entries AS $entry)"},{"line":80,"text":"\t\t{"},{"line":81,"text":"\t\t\t$id = $ids[$i++];"},{"line":82,"text":""},{"line":83,"text":"\t\t\tif ($i <= $start)"},{"line":84,"text":"\t\t\t{"},{"line":85,"text":"\t\t\t\tcontinue;"},{"line":86,"text":"\t\t\t}"},{"line":87,"text":""},{"line":88,"text":"\t\t\t/** @var \\XF\\Entity\\Option $entity */"},{"line":89,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":90,"text":""},{"line":91,"text":"\t\t\t$entity->setOptions(["},{"line":92,"text":"\t\t\t\t'verify_validation_callback' => false,"},{"line":93,"text":"\t\t\t\t'verify_value' => false,"},{"line":94,"text":"\t\t\t]);"},{"line":95,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":96,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":97,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":98,"text":"\t\t\t$entity->default_value = (string) $entry->default_value;"},{"line":99,"text":"\t\t\t$entity->edit_format_params = (string) $entry->edit_format_params;"},{"line":100,"text":""},{"line":101,"text":"\t\t\t$subOptions = (string) $entry->sub_options;"},{"line":102,"text":"\t\t\t$entity->sub_options = strlen($subOptions) ? explode(\"\\n\", $subOptions) : [];"},{"line":103,"text":""},{"line":104,"text":"\t\t\t$entity->save(true, false);"},{"line":105,"text":""},{"line":106,"text":"\t\t\t$relations = [];"},{"line":107,"text":"\t\t\tforeach ($entry->relation AS $relation)"},{"line":108,"text":"\t\t\t{"},{"line":109,"text":"\t\t\t\t$relations[(string) $relation['group_id']] = (string) $relation['display_order'];"},{"line":110,"text":"\t\t\t}"},{"line":111,"text":""},{"line":112,"text":"\t\t\t$entity->updateRelations($relations);"},{"line":113,"text":""},{"line":114,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":115,"text":"\t\t\t{"},{"line":116,"text":"\t\t\t\t$last = $i;"},{"line":117,"text":"\t\t\t\tbreak;"},{"line":118,"text":"\t\t\t}"},{"line":119,"text":"\t\t}"},{"line":120,"text":"\t\treturn ($last ?: false);"},{"line":121,"text":"\t}"}],[{"line":128,"text":"\tprotected function getMappedAttributes()"},{"line":129,"text":"\t{"},{"line":130,"text":"\t\treturn ["},{"line":131,"text":"\t\t\t'option_id',"},{"line":132,"text":"\t\t\t'edit_format',"},{"line":133,"text":"\t\t\t'data_type',"},{"line":134,"text":"\t\t\t'validation_class',"},{"line":135,"text":"\t\t\t'validation_method',"},{"line":136,"text":"\t\t\t'advanced',"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}]],"sha256":"d2a6129dbd3f40dde334388d185aec02a74e33e010b5f81305211f093d1e4e60"},"OptionGroup.php":{"exists":true,"methods":[[{"line":14,"text":"\tpublic function getContainerTag()"},{"line":15,"text":"\t{"},{"line":16,"text":"\t\treturn 'option_groups';"},{"line":17,"text":"\t}"}],[{"line":19,"text":"\tpublic function getChildTag()"},{"line":20,"text":"\t{"},{"line":21,"text":"\t\treturn 'group';"},{"line":22,"text":"\t}"}],[{"line":24,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\t$entries = $this->finder()"},{"line":27,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":28,"text":"\t\t\t->order('group_id')->fetch();"},{"line":29,"text":""},{"line":30,"text":"\t\tforeach ($entries AS $entry)"},{"line":31,"text":"\t\t{"},{"line":32,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":33,"text":""},{"line":34,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":35,"text":""},{"line":36,"text":"\t\t\t$container->appendChild($node);"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\treturn $entries->count() ? true : false;"},{"line":40,"text":"\t}"}],[{"line":42,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":43,"text":"\t{"},{"line":44,"text":"\t\t$startTime = microtime(true);"},{"line":45,"text":""},{"line":46,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":47,"text":"\t\tif (!$entries)"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\treturn false;"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'group_id');"},{"line":53,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":54,"text":""},{"line":55,"text":"\t\t$i = 0;"},{"line":56,"text":"\t\t$last = 0;"},{"line":57,"text":"\t\tforeach ($entries AS $entry)"},{"line":58,"text":"\t\t{"},{"line":59,"text":"\t\t\t$id = $ids[$i++];"},{"line":60,"text":""},{"line":61,"text":"\t\t\tif ($i <= $start)"},{"line":62,"text":"\t\t\t{"},{"line":63,"text":"\t\t\t\tcontinue;"},{"line":64,"text":"\t\t\t}"},{"line":65,"text":""},{"line":66,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":67,"text":""},{"line":68,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":69,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":70,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":71,"text":""},{"line":72,"text":"\t\t\t$entity->save(true, false);"},{"line":73,"text":""},{"line":74,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":75,"text":"\t\t\t{"},{"line":76,"text":"\t\t\t\t$last = $i;"},{"line":77,"text":"\t\t\t\tbreak;"},{"line":78,"text":"\t\t\t}"},{"line":79,"text":"\t\t}"},{"line":80,"text":"\t\treturn ($last ?: false);"},{"line":81,"text":"\t}"}],[{"line":88,"text":"\tprotected function getMappedAttributes()"},{"line":89,"text":"\t{"},{"line":90,"text":"\t\treturn ["},{"line":91,"text":"\t\t\t'group_id',"},{"line":92,"text":"\t\t\t'icon',"},{"line":93,"text":"\t\t\t'display_order',"},{"line":94,"text":"\t\t\t'debug_only',"},{"line":95,"text":"\t\t];"},{"line":96,"text":"\t}"}]],"sha256":"9d75fc1cf5be6c69063ecaed7e0d89a5a2e29ff560e6e57125b59f90405718da"},"Permission.php":{"exists":true,"methods":[[{"line":18,"text":"\tpublic function getContainerTag()"},{"line":19,"text":"\t{"},{"line":20,"text":"\t\treturn 'permissions';"},{"line":21,"text":"\t}"}],[{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'permission';"},{"line":26,"text":"\t}"}],[{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['permission_group_id', 'permission_id'])->fetch();"},{"line":33,"text":""},{"line":34,"text":"\t\tforeach ($entries AS $entry)"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":39,"text":""},{"line":40,"text":"\t\t\t$container->appendChild($node);"},{"line":41,"text":"\t\t}"},{"line":42,"text":""},{"line":43,"text":"\t\treturn $entries->count() ? true : false;"},{"line":44,"text":"\t}"}],[{"line":46,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":47,"text":"\t{"},{"line":48,"text":"\t\t$startTime = microtime(true);"},{"line":49,"text":""},{"line":50,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":51,"text":"\t\tif (!$entries)"},{"line":52,"text":"\t\t{"},{"line":53,"text":"\t\t\treturn false;"},{"line":54,"text":"\t\t}"},{"line":55,"text":""},{"line":56,"text":"\t\t$conditions = [];"},{"line":57,"text":"\t\tforeach ($entries AS $entry)"},{"line":58,"text":"\t\t{"},{"line":59,"text":"\t\t\t$conditions[] = ["},{"line":60,"text":"\t\t\t\t'permission_group_id' => (string) $entry['permission_group_id'],"},{"line":61,"text":"\t\t\t\t'permission_id' => (string) $entry['permission_id'],"},{"line":62,"text":"\t\t\t];"},{"line":63,"text":"\t\t}"},{"line":64,"text":"\t\tif ($conditions)"},{"line":65,"text":"\t\t{"},{"line":66,"text":"\t\t\t$existing = $this->finder()->whereOr($conditions)->fetch()->groupBy('permission_group_id', 'permission_id');"},{"line":67,"text":"\t\t}"},{"line":68,"text":"\t\telse"},{"line":69,"text":"\t\t{"},{"line":70,"text":"\t\t\t$existing = [];"},{"line":71,"text":"\t\t}"},{"line":72,"text":""},{"line":73,"text":"\t\t$i = 0;"},{"line":74,"text":"\t\t$last = 0;"},{"line":75,"text":"\t\tforeach ($entries AS $entry)"},{"line":76,"text":"\t\t{"},{"line":77,"text":"\t\t\t$i++;"},{"line":78,"text":""},{"line":79,"text":"\t\t\tif ($i <= $start)"},{"line":80,"text":"\t\t\t{"},{"line":81,"text":"\t\t\t\tcontinue;"},{"line":82,"text":"\t\t\t}"},{"line":83,"text":""},{"line":84,"text":"\t\t\t$groupId = (string) $entry['permission_group_id'];"},{"line":85,"text":"\t\t\t$permissionId = (string) $entry['permission_id'];"},{"line":86,"text":"\t\t\t$entity = $existing[$groupId][$permissionId] ?? $this->create();"},{"line":87,"text":""},{"line":88,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":89,"text":"\t\t\t$entity->setOption('dependent_check', false);"},{"line":90,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":91,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":92,"text":""},{"line":93,"text":"\t\t\t$entity->save(true, false);"},{"line":94,"text":""},{"line":95,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":96,"text":"\t\t\t{"},{"line":97,"text":"\t\t\t\t$last = $i;"},{"line":98,"text":"\t\t\t\tbreak;"},{"line":99,"text":"\t\t\t}"},{"line":100,"text":"\t\t}"},{"line":101,"text":"\t\treturn ($last ?: false);"},{"line":102,"text":"\t}"}],[{"line":149,"text":"\tprotected function getMappedAttributes()"},{"line":150,"text":"\t{"},{"line":151,"text":"\t\treturn ["},{"line":152,"text":"\t\t\t'permission_group_id',"},{"line":153,"text":"\t\t\t'permission_id',"},{"line":154,"text":"\t\t\t'permission_type',"},{"line":155,"text":"\t\t\t'depend_permission_id',"},{"line":156,"text":"\t\t\t'interface_group_id',"},{"line":157,"text":"\t\t\t'display_order',"},{"line":158,"text":"\t\t];"},{"line":159,"text":"\t}"}]],"sha256":"8d6b8657e8585eb8da7f1401df882e0033f93e07179ce4df398b95d22d74c477"},"PermissionInterfaceGroup.php":{"exists":true,"methods":[[{"line":15,"text":"\tpublic function getContainerTag()"},{"line":16,"text":"\t{"},{"line":17,"text":"\t\treturn 'permission_interface_groups';"},{"line":18,"text":"\t}"}],[{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'interface_group';"},{"line":23,"text":"\t}"}],[{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->order('interface_group_id')->fetch();"},{"line":30,"text":""},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$container->appendChild($node);"},{"line":38,"text":"\t\t}"},{"line":39,"text":""},{"line":40,"text":"\t\treturn $entries->count() ? true : false;"},{"line":41,"text":"\t}"}],[{"line":43,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":44,"text":"\t{"},{"line":45,"text":"\t\t$startTime = microtime(true);"},{"line":46,"text":""},{"line":47,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":48,"text":"\t\tif (!$entries)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\treturn false;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'interface_group_id');"},{"line":54,"text":"\t\t$existing = $this->findByIds($ids);"},{"line":55,"text":""},{"line":56,"text":"\t\t$i = 0;"},{"line":57,"text":"\t\t$last = 0;"},{"line":58,"text":"\t\tforeach ($entries AS $entry)"},{"line":59,"text":"\t\t{"},{"line":60,"text":"\t\t\t$id = $ids[$i++];"},{"line":61,"text":""},{"line":62,"text":"\t\t\tif ($i <= $start)"},{"line":63,"text":"\t\t\t{"},{"line":64,"text":"\t\t\t\tcontinue;"},{"line":65,"text":"\t\t\t}"},{"line":66,"text":""},{"line":67,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":68,"text":""},{"line":69,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":70,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":71,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":72,"text":""},{"line":73,"text":"\t\t\t$entity->save(true, false);"},{"line":74,"text":""},{"line":75,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":76,"text":"\t\t\t{"},{"line":77,"text":"\t\t\t\t$last = $i;"},{"line":78,"text":"\t\t\t\tbreak;"},{"line":79,"text":"\t\t\t}"},{"line":80,"text":"\t\t}"},{"line":81,"text":"\t\treturn ($last ?: false);"},{"line":82,"text":"\t}"}],[{"line":95,"text":"\tprotected function getMappedAttributes()"},{"line":96,"text":"\t{"},{"line":97,"text":"\t\treturn ["},{"line":98,"text":"\t\t\t'interface_group_id',"},{"line":99,"text":"\t\t\t'display_order',"},{"line":100,"text":"\t\t\t'is_moderator',"},{"line":101,"text":"\t\t];"},{"line":102,"text":"\t}"}]],"sha256":"b2b1397ba1dc3174f680ebe4796a88904aa577db969177485d56cd7568c1f8d6"},"Phrase.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'phrases';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'phrase';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->where('language_id', 0)"},{"line":31,"text":"\t\t\t->order('title')->fetch();"},{"line":32,"text":"\t\tforeach ($entries AS $entry)"},{"line":33,"text":"\t\t{"},{"line":34,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":35,"text":""},{"line":36,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":37,"text":"\t\t\tif ($entry['global_cache'])"},{"line":38,"text":"\t\t\t{"},{"line":39,"text":"\t\t\t\t$node->setAttribute('global_cache', '1');"},{"line":40,"text":"\t\t\t}"},{"line":41,"text":"\t\t\t$this->exportCdata($node, $entry->phrase_text);"},{"line":42,"text":""},{"line":43,"text":"\t\t\t$container->appendChild($node);"},{"line":44,"text":"\t\t}"},{"line":45,"text":""},{"line":46,"text":"\t\treturn $entries->count() ? true : false;"},{"line":47,"text":"\t}"}],[{"line":49,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":50,"text":"\t{"},{"line":51,"text":"\t\t$startTime = microtime(true);"},{"line":52,"text":""},{"line":53,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":54,"text":"\t\tif (!$entries)"},{"line":55,"text":"\t\t{"},{"line":56,"text":"\t\t\treturn false;"},{"line":57,"text":"\t\t}"},{"line":58,"text":""},{"line":59,"text":"\t\t$ids = $this->pluckXmlAttribute($entries, 'title');"},{"line":60,"text":""},{"line":61,"text":"\t\t// This chucking approach has been taken due to a MariaDB performance regression with large"},{"line":62,"text":"\t\t// IN clauses (see #187523). However, this may have benefits on some slower servers as this"},{"line":63,"text":"\t\t// will reduce the number of times we attempt to instantiate phrase entities that won't be"},{"line":64,"text":"\t\t// processed in this run."},{"line":65,"text":"\t\t$chunkSize = 200;"},{"line":66,"text":"\t\t$nextFetch = null;"},{"line":67,"text":""},{"line":68,"text":"\t\t$i = 0;"},{"line":69,"text":"\t\t$last = 0;"},{"line":70,"text":"\t\tforeach ($entries AS $entry)"},{"line":71,"text":"\t\t{"},{"line":72,"text":"\t\t\t$originalI = $i;"},{"line":73,"text":""},{"line":74,"text":"\t\t\t$id = $ids[$i++];"},{"line":75,"text":""},{"line":76,"text":"\t\t\tif ($i <= $start)"},{"line":77,"text":"\t\t\t{"},{"line":78,"text":"\t\t\t\tcontinue;"},{"line":79,"text":"\t\t\t}"},{"line":80,"text":""},{"line":81,"text":"\t\t\tif ($nextFetch === null || $originalI >= $nextFetch)"},{"line":82,"text":"\t\t\t{"},{"line":83,"text":"\t\t\t\t$slice = array_slice($ids, $originalI, $chunkSize);"},{"line":84,"text":"\t\t\t\t$nextFetch = $originalI + $chunkSize;"},{"line":85,"text":""},{"line":86,"text":"\t\t\t\t$existing = $this->finder()"},{"line":87,"text":"\t\t\t\t\t->where('title', $slice)"},{"line":88,"text":"\t\t\t\t\t->where('language_id', 0)"},{"line":89,"text":"\t\t\t\t\t->keyedBy('title')"},{"line":90,"text":"\t\t\t\t\t->fetch();"},{"line":91,"text":"\t\t\t}"},{"line":92,"text":""},{"line":93,"text":"\t\t\t$entity = $existing[$id] ?? $this->create();"},{"line":94,"text":"\t\t\t$entity->setOption('check_duplicate', false);"},{"line":95,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":96,"text":""},{"line":97,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":98,"text":"\t\t\t$entity->language_id = 0;"},{"line":99,"text":"\t\t\t$entity->global_cache = (int) $entry['global_cache'];"},{"line":100,"text":"\t\t\t$entity->phrase_text = $this->getCdataValue($entry);"},{"line":101,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":102,"text":"\t\t\t$entity->save(true, false);"},{"line":103,"text":""},{"line":104,"text":"\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');"},{"line":105,"text":""},{"line":106,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":107,"text":"\t\t\t{"},{"line":108,"text":"\t\t\t\t$last = $i;"},{"line":109,"text":"\t\t\t\tbreak;"},{"line":110,"text":"\t\t\t}"},{"line":111,"text":"\t\t}"},{"line":112,"text":""},{"line":113,"text":"\t\treturn ($last ?: false);"},{"line":114,"text":"\t}"}],[{"line":121,"text":"\tprotected function getMappedAttributes()"},{"line":122,"text":"\t{"},{"line":123,"text":"\t\treturn ["},{"line":124,"text":"\t\t\t'title',"},{"line":125,"text":"\t\t\t'version_id',"},{"line":126,"text":"\t\t\t'version_string',"},{"line":127,"text":"\t\t];"},{"line":128,"text":"\t}"}]],"sha256":"af1d53936447b820d9f3dc3e50a7058dfe96890417f5fd466fb1361d99988266"},"Route.php":{"exists":true,"methods":[[{"line":16,"text":"\tpublic function getContainerTag()"},{"line":17,"text":"\t{"},{"line":18,"text":"\t\treturn 'routes';"},{"line":19,"text":"\t}"}],[{"line":21,"text":"\tpublic function getChildTag()"},{"line":22,"text":"\t{"},{"line":23,"text":"\t\treturn 'route';"},{"line":24,"text":"\t}"}],[{"line":26,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":27,"text":"\t{"},{"line":28,"text":"\t\t$entries = $this->finder()"},{"line":29,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":30,"text":"\t\t\t->order(['route_type', 'route_prefix', 'sub_name'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$container->appendChild($node);"},{"line":38,"text":"\t\t}"},{"line":39,"text":""},{"line":40,"text":"\t\treturn $entries->count() ? true : false;"},{"line":41,"text":"\t}"}],[{"line":43,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":44,"text":"\t{"},{"line":45,"text":"\t\t$startTime = microtime(true);"},{"line":46,"text":""},{"line":47,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":48,"text":"\t\tif (!$entries)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\treturn false;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t$conditions = [];"},{"line":54,"text":"\t\t$existing = [];"},{"line":55,"text":"\t\tforeach ($entries AS $entry)"},{"line":56,"text":"\t\t{"},{"line":57,"text":"\t\t\t$conditions[] = ["},{"line":58,"text":"\t\t\t\t'route_type' => (string) $entry['route_type'],"},{"line":59,"text":"\t\t\t\t'route_prefix' => (string) $entry['route_prefix'],"},{"line":60,"text":"\t\t\t\t'sub_name' => (string) $entry['sub_name'],"},{"line":61,"text":"\t\t\t];"},{"line":62,"text":"\t\t}"},{"line":63,"text":"\t\tif ($conditions)"},{"line":64,"text":"\t\t{"},{"line":65,"text":"\t\t\tforeach ($this->finder()->whereOr($conditions)->fetch() AS $route)"},{"line":66,"text":"\t\t\t{"},{"line":67,"text":"\t\t\t\t$existing[$route->route_type][$route->route_prefix][$route->sub_name] = $route;"},{"line":68,"text":"\t\t\t}"},{"line":69,"text":"\t\t}"},{"line":70,"text":""},{"line":71,"text":"\t\t$i = 0;"},{"line":72,"text":"\t\t$last = 0;"},{"line":73,"text":"\t\tforeach ($entries AS $entry)"},{"line":74,"text":"\t\t{"},{"line":75,"text":"\t\t\t$i++;"},{"line":76,"text":""},{"line":77,"text":"\t\t\tif ($i <= $start)"},{"line":78,"text":"\t\t\t{"},{"line":79,"text":"\t\t\t\tcontinue;"},{"line":80,"text":"\t\t\t}"},{"line":81,"text":""},{"line":82,"text":"\t\t\t$type = (string) $entry['route_type'];"},{"line":83,"text":"\t\t\t$prefix = (string) $entry['route_prefix'];"},{"line":84,"text":"\t\t\t$subName = (string) $entry['sub_name'];"},{"line":85,"text":"\t\t\t$entity = $existing[$type][$prefix][$subName] ?? $this->create();"},{"line":86,"text":""},{"line":87,"text":"\t\t\t$entity->setOptions(["},{"line":88,"text":"\t\t\t\t'check_duplicate' => false,"},{"line":89,"text":"\t\t\t]);"},{"line":90,"text":""},{"line":91,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":92,"text":""},{"line":93,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":94,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":95,"text":"\t\t\t$entity->save(true, false);"},{"line":96,"text":""},{"line":97,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":98,"text":"\t\t\t{"},{"line":99,"text":"\t\t\t\t$last = $i;"},{"line":100,"text":"\t\t\t\tbreak;"},{"line":101,"text":"\t\t\t}"},{"line":102,"text":"\t\t}"},{"line":103,"text":"\t\treturn ($last ?: false);"},{"line":104,"text":"\t}"}],[{"line":154,"text":"\tprotected function getMappedAttributes()"},{"line":155,"text":"\t{"},{"line":156,"text":"\t\treturn ["},{"line":157,"text":"\t\t\t'route_type',"},{"line":158,"text":"\t\t\t'route_prefix',"},{"line":159,"text":"\t\t\t'sub_name',"},{"line":160,"text":"\t\t\t'format',"},{"line":161,"text":"\t\t\t'build_class',"},{"line":162,"text":"\t\t\t'build_method',"},{"line":163,"text":"\t\t\t'controller',"},{"line":164,"text":"\t\t\t'context',"},{"line":165,"text":"\t\t\t'action_prefix',"},{"line":166,"text":"\t\t];"},{"line":167,"text":"\t}"}]],"sha256":"ffd5dc9411b761a264810af2241af71c553ab2b409f670305687e9d4d75a34bb"},"Template.php":{"exists":true,"methods":[[{"line":15,"text":"\tpublic function getContainerTag()"},{"line":16,"text":"\t{"},{"line":17,"text":"\t\treturn 'templates';"},{"line":18,"text":"\t}"}],[{"line":20,"text":"\tpublic function getChildTag()"},{"line":21,"text":"\t{"},{"line":22,"text":"\t\treturn 'template';"},{"line":23,"text":"\t}"}],[{"line":25,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":26,"text":"\t{"},{"line":27,"text":"\t\t$entries = $this->finder()"},{"line":28,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":29,"text":"\t\t\t->where('style_id', 0)"},{"line":30,"text":"\t\t\t->order(['type', 'title'])->fetch();"},{"line":31,"text":"\t\tforeach ($entries AS $entry)"},{"line":32,"text":"\t\t{"},{"line":33,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":34,"text":""},{"line":35,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":36,"text":"\t\t\t$this->exportCdata($node, $entry->template);"},{"line":37,"text":""},{"line":38,"text":"\t\t\t$container->appendChild($node);"},{"line":39,"text":"\t\t}"},{"line":40,"text":""},{"line":41,"text":"\t\treturn $entries->count() ? true : false;"},{"line":42,"text":"\t}"}],[{"line":44,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":45,"text":"\t{"},{"line":46,"text":"\t\t$startTime = microtime(true);"},{"line":47,"text":""},{"line":48,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":49,"text":"\t\tif (!$entries)"},{"line":50,"text":"\t\t{"},{"line":51,"text":"\t\t\treturn false;"},{"line":52,"text":"\t\t}"},{"line":53,"text":""},{"line":54,"text":"\t\t$conditions = [];"},{"line":55,"text":"\t\tforeach ($entries AS $entry)"},{"line":56,"text":"\t\t{"},{"line":57,"text":"\t\t\t$conditions[] = ["},{"line":58,"text":"\t\t\t\t'type' => (string) $entry['type'],"},{"line":59,"text":"\t\t\t\t'title' => (string) $entry['title'],"},{"line":60,"text":"\t\t\t];"},{"line":61,"text":"\t\t}"},{"line":62,"text":"\t\tif ($conditions)"},{"line":63,"text":"\t\t{"},{"line":64,"text":"\t\t\t$existing = $this->finder()"},{"line":65,"text":"\t\t\t\t->whereOr($conditions)"},{"line":66,"text":"\t\t\t\t->where('style_id', 0)"},{"line":67,"text":"\t\t\t\t->fetch()"},{"line":68,"text":"\t\t\t\t->groupBy('type', 'title');"},{"line":69,"text":"\t\t}"},{"line":70,"text":"\t\telse"},{"line":71,"text":"\t\t{"},{"line":72,"text":"\t\t\t$existing = [];"},{"line":73,"text":"\t\t}"},{"line":74,"text":""},{"line":75,"text":"\t\t$i = 0;"},{"line":76,"text":"\t\t$last = 0;"},{"line":77,"text":""},{"line":78,"text":"\t\tforeach ($entries AS $entry)"},{"line":79,"text":"\t\t{"},{"line":80,"text":"\t\t\t$i++;"},{"line":81,"text":""},{"line":82,"text":"\t\t\tif ($i <= $start)"},{"line":83,"text":"\t\t\t{"},{"line":84,"text":"\t\t\t\tcontinue;"},{"line":85,"text":"\t\t\t}"},{"line":86,"text":""},{"line":87,"text":"\t\t\t$type = (string) $entry['type'];"},{"line":88,"text":"\t\t\t$title = (string) $entry['title'];"},{"line":89,"text":"\t\t\t$entity = $existing[$type][$title] ?? $this->create();"},{"line":90,"text":"\t\t\t$entity->setOption('check_duplicate', false);"},{"line":91,"text":"\t\t\t$entity->setOption('report_modification_errors', false);"},{"line":92,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":93,"text":""},{"line":94,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":95,"text":"\t\t\t$entity->style_id = 0;"},{"line":96,"text":"\t\t\t$entity->template = $this->getCdataValue($entry);"},{"line":97,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":98,"text":"\t\t\t$entity->save(true, false);"},{"line":99,"text":""},{"line":100,"text":"\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');"},{"line":101,"text":""},{"line":102,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":103,"text":"\t\t\t{"},{"line":104,"text":"\t\t\t\t$last = $i;"},{"line":105,"text":"\t\t\t\tbreak;"},{"line":106,"text":"\t\t\t}"},{"line":107,"text":"\t\t}"},{"line":108,"text":"\t\treturn ($last ?: false);"},{"line":109,"text":"\t}"}],[{"line":156,"text":"\tprotected function getMappedAttributes()"},{"line":157,"text":"\t{"},{"line":158,"text":"\t\treturn ["},{"line":159,"text":"\t\t\t'type',"},{"line":160,"text":"\t\t\t'title',"},{"line":161,"text":"\t\t\t'version_id',"},{"line":162,"text":"\t\t\t'version_string',"},{"line":163,"text":"\t\t];"},{"line":164,"text":"\t}"}]],"sha256":"fecae5772cfd98cb53672180957a3a50a521d6ee6194dd5d7a346630afb3933a"},"TemplateModification.php":{"exists":true,"methods":[[{"line":18,"text":"\tpublic function getContainerTag()"},{"line":19,"text":"\t{"},{"line":20,"text":"\t\treturn 'template_modifications';"},{"line":21,"text":"\t}"}],[{"line":23,"text":"\tpublic function getChildTag()"},{"line":24,"text":"\t{"},{"line":25,"text":"\t\treturn 'modification';"},{"line":26,"text":"\t}"}],[{"line":28,"text":"\tpublic function exportAddOnData($addOnId, \\DOMElement $container)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$entries = $this->finder()"},{"line":31,"text":"\t\t\t->where('addon_id', $addOnId)"},{"line":32,"text":"\t\t\t->order(['template', 'modification_key'])->fetch();"},{"line":33,"text":"\t\tforeach ($entries AS $entry)"},{"line":34,"text":"\t\t{"},{"line":35,"text":"\t\t\t$node = $container->ownerDocument->createElement($this->getChildTag());"},{"line":36,"text":""},{"line":37,"text":"\t\t\t$this->exportMappedAttributes($node, $entry);"},{"line":38,"text":""},{"line":39,"text":"\t\t\t$this->exportCdataToNewNode($node, 'find', $entry);"},{"line":40,"text":"\t\t\t$this->exportCdataToNewNode($node, 'replace', $entry);"},{"line":41,"text":""},{"line":42,"text":"\t\t\t$container->appendChild($node);"},{"line":43,"text":"\t\t}"},{"line":44,"text":""},{"line":45,"text":"\t\treturn $entries->count() ? true : false;"},{"line":46,"text":"\t}"}],[{"line":48,"text":"\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)"},{"line":49,"text":"\t{"},{"line":50,"text":"\t\t$startTime = microtime(true);"},{"line":51,"text":""},{"line":52,"text":"\t\t$entries = $this->getEntries($container, $start);"},{"line":53,"text":"\t\tif (!$entries)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\treturn false;"},{"line":56,"text":"\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t$keys = $this->pluckXmlAttribute($entries, 'modification_key');"},{"line":59,"text":"\t\t$existing = $this->finder()"},{"line":60,"text":"\t\t\t->where('modification_key', $keys)"},{"line":61,"text":"\t\t\t->keyedBy('modification_key')"},{"line":62,"text":"\t\t\t->fetch();"},{"line":63,"text":""},{"line":64,"text":"\t\t$i = 0;"},{"line":65,"text":"\t\t$last = 0;"},{"line":66,"text":"\t\tforeach ($entries AS $entry)"},{"line":67,"text":"\t\t{"},{"line":68,"text":"\t\t\t$i++;"},{"line":69,"text":""},{"line":70,"text":"\t\t\tif ($i <= $start)"},{"line":71,"text":"\t\t\t{"},{"line":72,"text":"\t\t\t\tcontinue;"},{"line":73,"text":"\t\t\t}"},{"line":74,"text":""},{"line":75,"text":"\t\t\t$entity = $existing[(string) $entry['modification_key']] ?? $this->create();"},{"line":76,"text":"\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);"},{"line":77,"text":"\t\t\t$entity->setOption('hide_errors', true);"},{"line":78,"text":""},{"line":79,"text":"\t\t\t$this->importMappedAttributes($entry, $entity);"},{"line":80,"text":""},{"line":81,"text":"\t\t\t$entity->find = $this->getCdataValue($entry->find);"},{"line":82,"text":"\t\t\t$entity->replace = $this->getCdataValue($entry->replace);"},{"line":83,"text":""},{"line":84,"text":"\t\t\t$entity->addon_id = $addOnId;"},{"line":85,"text":"\t\t\t$entity->save(true, false);"},{"line":86,"text":""},{"line":87,"text":"\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');"},{"line":88,"text":""},{"line":89,"text":"\t\t\tif ($this->resume($maxRunTime, $startTime))"},{"line":90,"text":"\t\t\t{"},{"line":91,"text":"\t\t\t\t$last = $i;"},{"line":92,"text":"\t\t\t\tbreak;"},{"line":93,"text":"\t\t\t}"},{"line":94,"text":"\t\t}"},{"line":95,"text":"\t\treturn ($last ?: false);"},{"line":96,"text":"\t}"}],[{"line":140,"text":"\tprotected function getMappedAttributes()"},{"line":141,"text":"\t{"},{"line":142,"text":"\t\treturn ["},{"line":143,"text":"\t\t\t'type',"},{"line":144,"text":"\t\t\t'template',"},{"line":145,"text":"\t\t\t'modification_key',"},{"line":146,"text":"\t\t\t'description',"},{"line":147,"text":"\t\t\t'execution_order',"},{"line":148,"text":"\t\t\t'enabled',"},{"line":149,"text":"\t\t\t'action',"},{"line":150,"text":"\t\t];"},{"line":151,"text":"\t}"}]],"sha256":"c27e2bb5baa379dcaf0eab73f35fcc62f5ce656fbccbcb4d6ded095d83b4b31a"}},"db":{"addon_rows":0,"board_active":"0","content_type_field_rows":0,"error_count_after_baseline":0,"error_max":43,"listener_addon_rows":0,"option_group_rows":0,"option_rows":0,"permission_rows":0,"phrase_addon_rows":0,"phrase_prefix_rows":0,"route_addon_rows":0,"route_prefix_rows":0,"table_rows":0,"template_addon_rows":0,"template_mod_addon_rows":0,"template_prefix_rows":0},"db_probe":{"rc":0,"stderr_sha256":"","stdout_lines":1},"error_probe":{"rc":0,"stderr_sha256":"","stdout_lines":1},"errors_after_baseline":[],"guest":"newfi-staging","identity_ok":true,"lifecycle_contract":{"src/XF/AddOn/AbstractSetup.php":{"blocks":[[{"line":25,"text":"\tabstract public function install(array $stepParams = []);"},{"line":26,"text":""},{"line":27,"text":"\t/**"},{"line":28,"text":"\t * @param array $stepParams"},{"line":29,"text":"\t *"},{"line":30,"text":"\t * @return null|StepResult"},{"line":31,"text":"\t */"},{"line":32,"text":"\tabstract public function upgrade(array $stepParams = []);"},{"line":33,"text":""},{"line":34,"text":"\t/**"},{"line":35,"text":"\t * @param array $stepParams"},{"line":36,"text":"\t *"},{"line":37,"text":"\t * @return null|StepResult"},{"line":38,"text":"\t */"},{"line":39,"text":"\tabstract public function uninstall(array $stepParams = []);"},{"line":40,"text":""},{"line":41,"text":"\tpublic function __construct(AddOn $addOn, App $app)"},{"line":42,"text":"\t{"},{"line":43,"text":"\t\t$this->addOn = $addOn;"},{"line":44,"text":"\t\t$this->app = $app;"},{"line":45,"text":"\t}"}],[{"line":39,"text":"\tabstract public function uninstall(array $stepParams = []);"},{"line":40,"text":""},{"line":41,"text":"\tpublic function __construct(AddOn $addOn, App $app)"},{"line":42,"text":"\t{"},{"line":43,"text":"\t\t$this->addOn = $addOn;"},{"line":44,"text":"\t\t$this->app = $app;"},{"line":45,"text":"\t}"}]],"exists":true,"sha256":"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88"},"src/XF/AddOn/AddOn.php":{"blocks":[[{"line":553,"text":"\tpublic function preInstall()"},{"line":554,"text":"\t{"},{"line":555,"text":"\t\tif (!$this->installedAddOn)"},{"line":556,"text":"\t\t{"},{"line":557,"text":"\t\t\t$json = $this->getJson();"},{"line":558,"text":""},{"line":559,"text":"\t\t\t$installed = \\XF::em()->create(\\XF\\Entity\\AddOn::class);"},{"line":560,"text":"\t\t\t$installed->bulkSet(["},{"line":561,"text":"\t\t\t\t'addon_id' => $this->getAddOnId(),"},{"line":562,"text":"\t\t\t\t'title' => $json['title'],"},{"line":563,"text":"\t\t\t\t'version_string' => $json['version_string'],"},{"line":564,"text":"\t\t\t\t'version_id' => $json['version_id'],"},{"line":565,"text":"\t\t\t\t'active' => true,"},{"line":566,"text":"\t\t\t\t'is_processing' => true,"},{"line":567,"text":"\t\t\t\t'json_hash' => $this->getJsonHash(),"},{"line":568,"text":"\t\t\t\t'last_pending_action' => 'install:0',"},{"line":569,"text":"\t\t\t]);"},{"line":570,"text":"\t\t\t$installed->save();"},{"line":571,"text":""},{"line":572,"text":"\t\t\t$this->installedAddOn = $installed;"},{"line":573,"text":""},{"line":574,"text":"\t\t\t\\XF::fire('addon_pre_install', [$this, $installed, $json], $installed->addon_id);"},{"line":575,"text":"\t\t}"},{"line":576,"text":"\t}"}],[{"line":578,"text":"\tpublic function postInstall(array &$stateChanges)"},{"line":579,"text":"\t{"},{"line":580,"text":"\t\t$setup = $this->getSetup();"},{"line":581,"text":"\t\tif ($setup)"},{"line":582,"text":"\t\t{"},{"line":583,"text":"\t\t\t$setup->postInstall($stateChanges);"},{"line":584,"text":"\t\t}"},{"line":585,"text":""},{"line":586,"text":"\t\t$this->resetPendingAction();"},{"line":587,"text":""},{"line":588,"text":"\t\t$installed = $this->installedAddOn;"},{"line":589,"text":""},{"line":590,"text":"\t\t$json = $this->getJson();"},{"line":591,"text":"\t\t\\XF::fire('addon_post_install', [$this, $installed, $json, &$stateChanges], $installed->addon_id);"},{"line":592,"text":"\t}"}],[{"line":644,"text":"\tpublic function preUninstall()"},{"line":645,"text":"\t{"},{"line":646,"text":"\t\t$installed = $this->installedAddOn;"},{"line":647,"text":"\t\tif (!$installed)"},{"line":648,"text":"\t\t{"},{"line":649,"text":"\t\t\tthrow new \\LogicException(\"Add-on is not installed\");"},{"line":650,"text":"\t\t}"},{"line":651,"text":""},{"line":652,"text":"\t\t$installed->is_processing = true;"},{"line":653,"text":"\t\t$installed->last_pending_action = 'uninstall:0';"},{"line":654,"text":"\t\t$installed->saveIfChanged();"},{"line":655,"text":""},{"line":656,"text":"\t\t$json = $this->getJson();"},{"line":657,"text":"\t\t\\XF::fire('addon_pre_uninstall', [$this, $installed, $json], $installed->addon_id);"},{"line":658,"text":"\t}"}],[{"line":660,"text":"\tpublic function postUninstall()"},{"line":661,"text":"\t{"},{"line":662,"text":"\t\t/** @var FileCheck $fileCheck */"},{"line":663,"text":"\t\t$fileCheck = \\XF::em()->create(FileCheck::class);"},{"line":664,"text":"\t\t$fileCheck->save();"},{"line":665,"text":""},{"line":666,"text":"\t\t\\XF::app()->jobManager()->enqueueUnique('fileCheck', \\XF\\Job\\FileCheck::class, ["},{"line":667,"text":"\t\t\t'check_id' => $fileCheck->check_id,"},{"line":668,"text":"\t\t\t'automated' => true,"},{"line":669,"text":"\t\t], false);"},{"line":670,"text":""},{"line":671,"text":"\t\t$json = $this->getJson();"},{"line":672,"text":""},{"line":673,"text":"\t\t\\XF::fire('addon_post_uninstall', [$this, $this->addOnId, $json], $this->addOnId);"},{"line":674,"text":"\t}"}]],"exists":true,"sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},"src/XF/AddOn/DataManager.php":{"blocks":[[{"line":85,"text":"\tpublic function enqueueImportAddOnData(AddOn $addOn)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\treturn \\XF::app()->jobManager()->enqueueUnique($this->getImportDataJobId($addOn), AddOnData::class, ["},{"line":88,"text":"\t\t\t'addon_id' => $addOn->addon_id,"},{"line":89,"text":"\t\t]);"},{"line":90,"text":"\t}"}]],"exists":true,"sha256":"cfc97d6e825ba983234c86a405bbcf985706575bba6325e253a70c05001338f0"},"src/XF/Cli/Command/AddOnInstall.php":{"blocks":[[{"line":36,"text":"\tprotected function execute(InputInterface $input, OutputInterface $output)"},{"line":37,"text":"\t{"},{"line":38,"text":"\t\t$id = $input->getArgument('id');"},{"line":39,"text":""},{"line":40,"text":"\t\t$addOnManager = \\XF::app()->addOnManager();"},{"line":41,"text":""},{"line":42,"text":"\t\tif ($this->isAZipFile($id))"},{"line":43,"text":"\t\t{"},{"line":44,"text":"\t\t\t$id = $this->validateAndExtractAddOnZip($id, $error);"},{"line":45,"text":"\t\t\tif (!$id)"},{"line":46,"text":"\t\t\t{"},{"line":47,"text":"\t\t\t\t$output->writeln('' . $error . '');"},{"line":48,"text":"\t\t\t\treturn 1;"},{"line":49,"text":"\t\t\t}"},{"line":50,"text":"\t\t}"},{"line":51,"text":""},{"line":52,"text":"\t\t$addOn = $addOnManager->getById($id);"},{"line":53,"text":"\t\tif (!$addOn)"},{"line":54,"text":"\t\t{"},{"line":55,"text":"\t\t\t$output->writeln(\"\" . \"The add-on '$id' could be found.\" . \"\");"},{"line":56,"text":"\t\t\treturn 1;"},{"line":57,"text":"\t\t}"},{"line":58,"text":""},{"line":59,"text":"\t\tif (!$addOn->canInstall())"},{"line":60,"text":"\t\t{"},{"line":61,"text":"\t\t\tif ($addOn)"},{"line":62,"text":"\t\t\t{"},{"line":63,"text":"\t\t\t\t$output->writeln(\"\" . \\XF::phrase('this_add_on_already_installed_upgrade_instead') . \"\");"},{"line":64,"text":"\t\t\t}"},{"line":65,"text":"\t\t\telse"},{"line":66,"text":"\t\t\t{"},{"line":67,"text":"\t\t\t\t$output->writeln(\"\" . \\XF::phrase('this_add_on_cannot_be_installed') . \"\");"},{"line":68,"text":"\t\t\t}"},{"line":69,"text":"\t\t\treturn 1;"},{"line":70,"text":"\t\t}"},{"line":71,"text":""},{"line":72,"text":"\t\tif (!$this->verifyAddOnAction($input, $output, $addOn))"},{"line":73,"text":"\t\t{"},{"line":74,"text":"\t\t\treturn 1;"},{"line":75,"text":"\t\t}"},{"line":76,"text":""},{"line":77,"text":"\t\t/** @var QuestionHelper $helper */"},{"line":78,"text":"\t\t$helper = $this->getHelper('question');"},{"line":79,"text":""},{"line":80,"text":"\t\t$question = new ConfirmationQuestion(\"\" . \\XF::phrase('please_confirm_that_you_want_to_install_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \") (y/n)\");"},{"line":81,"text":"\t\t$response = $helper->ask($input, $output, $question);"},{"line":82,"text":"\t\tif (!$response)"},{"line":83,"text":"\t\t{"},{"line":84,"text":"\t\t\treturn 1;"},{"line":85,"text":"\t\t}"},{"line":86,"text":""},{"line":87,"text":"\t\t// make sure any errors get logged here"},{"line":88,"text":"\t\t\\XF::app()->error()->setIgnorePendingUpgrade(true);"},{"line":89,"text":""},{"line":90,"text":"\t\t$addOn->preInstall();"},{"line":91,"text":""},{"line":92,"text":"\t\t$this->runSubAction($output, $addOn, 'install');"},{"line":93,"text":"\t\t$this->runSubAction($output, $addOn, 'import');"},{"line":94,"text":"\t\t$this->runSubAction($output, $addOn, 'post-install');"},{"line":95,"text":""},{"line":96,"text":"\t\treturn 0;"},{"line":97,"text":"\t}"}]],"exists":true,"sha256":"2407ad9ae20ca8ac1ca84b456ac2adc537f39c79534da5e258167a4d0df2a54f"},"src/XF/Cli/Command/AddOnUninstall.php":{"blocks":[[{"line":36,"text":"\tprotected function execute(InputInterface $input, OutputInterface $output)"},{"line":37,"text":"\t{"},{"line":38,"text":"\t\t$id = $input->getArgument('id');"},{"line":39,"text":""},{"line":40,"text":"\t\t$addOn = $this->checkInstalledAddOn($id, $error);"},{"line":41,"text":"\t\tif (!$addOn)"},{"line":42,"text":"\t\t{"},{"line":43,"text":"\t\t\t$output->writeln('' . $error . '');"},{"line":44,"text":"\t\t\treturn 1;"},{"line":45,"text":"\t\t}"},{"line":46,"text":""},{"line":47,"text":"\t\tif (!$addOn->canUninstall() && !$input->getOption('force'))"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\t$output->writeln(\"\" . \\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing') . \"\");"},{"line":50,"text":"\t\t\treturn 1;"},{"line":51,"text":"\t\t}"},{"line":52,"text":""},{"line":53,"text":"\t\t/** @var QuestionHelper $helper */"},{"line":54,"text":"\t\t$helper = $this->getHelper('question');"},{"line":55,"text":""},{"line":56,"text":"\t\t$question = new ConfirmationQuestion(\"\" . \\XF::phrase('please_confirm_that_you_want_to_uninstall_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \") (y/n)\");"},{"line":57,"text":"\t\t$response = $helper->ask($input, $output, $question);"},{"line":58,"text":"\t\tif (!$response)"},{"line":59,"text":"\t\t{"},{"line":60,"text":"\t\t\treturn 1;"},{"line":61,"text":"\t\t}"},{"line":62,"text":""},{"line":63,"text":"\t\t// make sure any errors get logged here"},{"line":64,"text":"\t\t\\XF::app()->error()->setIgnorePendingUpgrade(true);"},{"line":65,"text":""},{"line":66,"text":"\t\t$addOn->preUninstall();"},{"line":67,"text":""},{"line":68,"text":"\t\t$this->runSubAction($output, $addOn, 'uninstall');"},{"line":69,"text":"\t\t$this->runSubAction($output, $addOn, 'uninstall-data');"},{"line":70,"text":"\t\t$this->runSubAction($output, $addOn, 'post-uninstall');"},{"line":71,"text":""},{"line":72,"text":"\t\treturn 0;"},{"line":73,"text":"\t}"}]],"exists":true,"sha256":"6dc768f60efd4af161b549cd54c01ae8922326cf7fd230b8ef93403bf8dba90c"}},"runtime":{"http_code":"503","http_rc":0,"services":{"mariadb":{"rc":0,"state":"active"},"nginx":{"rc":0,"state":"active"},"php8.3-fpm":{"rc":0,"state":"active"}}},"scope":"READ_ONLY_NO_MUTATION","stage039":{"state":"ABSENT"}} +SUPPORT042_RESIDUAL_SUM=0 +SUPPORT042_NEW_ERROR_COUNT=0 +SUPPORT042_POSTROLLBACK_CLEAN=True +SUPPORT042_DECISION=FORENSIC_CAPTURE_COMPLETE +SUPPORT042_MUTATION_SCOPE=NONE_READ_ONLY +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260909-GRAM-XF-STAGING-FORENSIC-042","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +SUPPORT042_END OUTPUT_END CHAT_OUTPUT_END