39 lines
74 KiB
JSON
39 lines
74 KiB
JSON
{
|
|
"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>' . $error . '</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(\\\"<error>\\\" . \\\"The add-on '$id' could be found.\\\" . \\\"</error>\\\");\"},{\"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(\\\"<error>\\\" . \\\\XF::phrase('this_add_on_already_installed_upgrade_instead') . \\\"</error>\\\");\"},{\"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(\\\"<error>\\\" . \\\\XF::phrase('this_add_on_cannot_be_installed') . \\\"</error>\\\");\"},{\"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(\\\"<question>\\\" . \\\\XF::phrase('please_confirm_that_you_want_to_install_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \\\") (y/n)</question>\\\");\"},{\"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>' . $error . '</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(\\\"<error>\\\" . \\\\XF::phrase('this_add_on_cannot_be_uninstalled_like_files_missing') . \\\"</error>\\\");\"},{\"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(\\\"<question>\\\" . \\\\XF::phrase('please_confirm_that_you_want_to_uninstall_following_add_on') . ': (' . $addOn->title . ' ' . $addOn->version_string . \\\") (y/n)</question>\\\");\"},{\"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"
|
|
}
|