From ffe420e14d1fcdc81d46495048831f850ee35a9b Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Mon, 7 Sep 2026 21:21:51 +0000 Subject: [PATCH] runtime: publish NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 --- ...FI-260907-A-PORTAL200-APPLY4FIX1-RCA7.json | 38 ++++++ ...WFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.txt | 76 +++++++++++ runtime/latest.json | 16 +-- runtime/latest.txt | 126 ++++++------------ 4 files changed, 163 insertions(+), 93 deletions(-) create mode 100644 runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.json create mode 100644 runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.txt diff --git a/runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.json b/runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.json new file mode 100644 index 00000000..9856cf59 --- /dev/null +++ b/runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "newfi-portal200-consolidated-final-template-rca", + "started_at_utc": "2026-09-07T21:21:30Z", + "finished_at_utc": "2026-09-07T21:21:51Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "c5f396b50e88cd61820fa8cdbca3f34d37dc259b18372b37317ac6fdb2a7c1ae", + "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": "37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273", + "sanitized_output_sha256": "37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "RCA7_BEGIN=true\nCOMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7\nMUTATION_SCOPE=NONE_READ_ONLY\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL\nFAILED_CHANGES_MADE=true\nFAILED_ROLLBACK_STARTED=true\nFAILED_ROLLBACK_RESTORED=false\nFAILED_MUTATION_OUTCOME=ROLLBACK_FAILED\nFAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_HISTORY_SHA256=76f74a798da08cdfa0e1545961b58ffb293b33c15868510c915c3dbb261bac34\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_STATUS=OK\nGIT_HEAD={\"err\":\"\",\"out\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"rc\":0}\nGIT_STATUS={\"err\":\"\",\"out\":\"\",\"rc\":0}\nGIT_LOG3={\"err\":\"\",\"out\":\"06bab5a (HEAD -> implementation/newfi-closed-mvp-20260906, origin/implementation/newfi-closed-mvp-20260906) style: apply Big Water XenForo theme [NEWFI-260907-STYLE199B]\\n4ade504 brand: add Newfi technical identity assets\\n9f7e0ca ops: authorize final Newfi public cutover\",\"rc\":0}\nGIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890\nCANDIDATE_XML_BYTES=10977\nCANDIDATE_XML_SHA256=1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861\nCANDIDATE_CHILDREN=[{\"attrib\":{\"title\":\"newfi_portal\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"i\":0,\"tag\":\"template\",\"text_bytes\":7027,\"text_sha256\":\"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a\"},{\"attrib\":{\"title\":\"newfi_portal.less\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"i\":1,\"tag\":\"template\",\"text_bytes\":3634,\"text_sha256\":\"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8\"}]\nTEMPLATE_DATATYPE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php\",\"rc\":0,\"text\":\" 35\\t\\t\\t\\t$this->exportMappedAttributes($node, $entry);\\n 36\\t\\t\\t\\t$this->exportCdata($node, $entry->template);\\n 37\\t\\n 38\\t\\t\\t\\t$container->appendChild($node);\\n 39\\t\\t\\t}\\n 40\\t\\n 41\\t\\t\\treturn $entries->count() ? true : false;\\n 42\\t\\t}\\n 43\\t\\n 44\\t\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\\n 45\\t\\t{\\n 46\\t\\t\\t$startTime = microtime(true);\\n 47\\t\\n 48\\t\\t\\t$entries = $this->getEntries($container, $start);\\n 49\\t\\t\\tif (!$entries)\\n 50\\t\\t\\t{\\n 51\\t\\t\\t\\treturn false;\\n 52\\t\\t\\t}\\n 53\\t\\n 54\\t\\t\\t$conditions = [];\\n 55\\t\\t\\tforeach ($entries AS $entry)\\n 56\\t\\t\\t{\\n 57\\t\\t\\t\\t$conditions[] = [\\n 58\\t\\t\\t\\t\\t'type' => (string) $entry['type'],\\n 59\\t\\t\\t\\t\\t'title' => (string) $entry['title'],\\n 60\\t\\t\\t\\t];\\n 61\\t\\t\\t}\\n 62\\t\\t\\tif ($conditions)\\n 63\\t\\t\\t{\\n 64\\t\\t\\t\\t$existing = $this->finder()\\n 65\\t\\t\\t\\t\\t->whereOr($conditions)\\n 66\\t\\t\\t\\t\\t->where('style_id', 0)\\n 67\\t\\t\\t\\t\\t->fetch()\\n 68\\t\\t\\t\\t\\t->groupBy('type', 'title');\\n 69\\t\\t\\t}\\n 70\\t\\t\\telse\\n 71\\t\\t\\t{\\n 72\\t\\t\\t\\t$existing = [];\\n 73\\t\\t\\t}\\n 74\\t\\n 75\\t\\t\\t$i = 0;\\n 76\\t\\t\\t$last = 0;\\n 77\\t\\n 78\\t\\t\\tforeach ($entries AS $entry)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\t$i++;\\n 81\\t\\n 82\\t\\t\\t\\tif ($i <= $start)\\n 83\\t\\t\\t\\t{\\n 84\\t\\t\\t\\t\\tcontinue;\\n 85\\t\\t\\t\\t}\\n 86\\t\\n 87\\t\\t\\t\\t$type = (string) $entry['type'];\\n 88\\t\\t\\t\\t$title = (string) $entry['title'];\\n 89\\t\\t\\t\\t$entity = $existing[$type][$title] ?? $this->create();\\n 90\\t\\t\\t\\t$entity->setOption('check_duplicate', false);\\n 91\\t\\t\\t\\t$entity->setOption('report_modification_errors', false);\\n 92\\t\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\\n 93\\t\\n 94\\t\\t\\t\\t$this->importMappedAttributes($entry, $entity);\\n 95\\t\\t\\t\\t$entity->style_id = 0;\\n 96\\t\\t\\t\\t$entity->template = $this->getCdataValue($entry);\\n 97\\t\\t\\t\\t$entity->addon_id = $addOnId;\\n 98\\t\\t\\t\\t$entity->save(true, false);\\n 99\\t\\n 100\\t\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\\n 101\\t\\n 102\\t\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\\n 103\\t\\t\\t\\t{\\n 104\\t\\t\\t\\t\\t$last = $i;\\n 105\\t\\t\\t\\t\\tbreak;\\n 106\\t\\t\\t\\t}\\n 107\\t\\t\\t}\\n 108\\t\\t\\treturn ($last ?: false);\\n 109\\t\\t}\\n 110\\t\\n 111\\t\\tpublic function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container)\\n 112\\t\\t{\\n 113\\t\\t\\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\\n 114\\t\\t\\tif (!$existing)\\n 115\\t\\t\\t{\\n\"}\nABSTRACT_DATATYPE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php\",\"rc\":0,\"text\":\" 220\\t\\t\\t\\t\\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\\n 221\\t\\t\\t\\t\\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\\\"]*$/si', $value))\\n 222\\t\\t\\t\\t\\t{\\n 223\\t\\t\\t\\t\\t\\t// This exports CDATA, but does not escape `]]>` like \\\\XF\\\\Util\\\\XML::createDomCdataSection(),\\n 224\\t\\t\\t\\t\\t\\t// because it needs to be transparently importable.\\n 225\\t\\t\\t\\t\\t\\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\\n 226\\t\\t\\t\\t\\t\\t// and remove this attribute from exportMappedAttributes()\\n 227\\t\\n 228\\t\\t\\t\\t\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\\n 229\\t\\n 230\\t\\t\\t\\t\\t\\t$newNode->appendChild(\\n 231\\t\\t\\t\\t\\t\\t\\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\\n 232\\t\\t\\t\\t\\t\\t);\\n 233\\t\\n 234\\t\\t\\t\\t\\t\\t$tag->appendChild($newNode);\\n 235\\t\\t\\t\\t\\t}\\n 236\\t\\t\\t\\t\\telse\\n 237\\t\\t\\t\\t\\t{\\n 238\\t\\t\\t\\t\\t\\t$tag->setAttribute($attr, $value);\\n 239\\t\\t\\t\\t\\t}\\n 240\\t\\t\\t\\t}\\n 241\\t\\t\\t}\\n 242\\t\\t}\\n 243\\t\\n 244\\t\\tprotected function importMappedAttributes(\\\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\\n 245\\t\\t{\\n 246\\t\\t\\tif ($entity->exists() && $allowMaintained)\\n 247\\t\\t\\t{\\n 248\\t\\t\\t\\t$maintained = $this->getMaintainedAttributes();\\n 249\\t\\t\\t}\\n 250\\t\\t\\telse\\n 251\\t\\t\\t{\\n 252\\t\\t\\t\\t$maintained = [];\\n 253\\t\\t\\t}\\n 254\\t\\n 255\\t\\t\\tforeach ($this->getMappedAttributes() AS $attr)\\n 256\\t\\t\\t{\\n 257\\t\\t\\t\\tif (in_array($attr, $maintained))\\n 258\\t\\t\\t\\t{\\n 259\\t\\t\\t\\t\\tcontinue;\\n 260\\t\\t\\t\\t}\\n 261\\t\\n 262\\t\\t\\t\\tif (self::USE_AUTO_CDATA)\\n 263\\t\\t\\t\\t{\\n 264\\t\\t\\t\\t\\tif (isset($el[$attr]))\\n 265\\t\\t\\t\\t\\t{\\n 266\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 267\\t\\t\\t\\t\\t}\\n 268\\t\\t\\t\\t\\telse if (isset($el->{$attr}))\\n 269\\t\\t\\t\\t\\t{\\n 270\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el->{$attr};\\n 271\\t\\t\\t\\t\\t}\\n 272\\t\\t\\t\\t}\\n 273\\t\\t\\t\\telse\\n 274\\t\\t\\t\\t{\\n 275\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 276\\t\\t\\t\\t}\\n 277\\t\\t\\t}\\n 278\\t\\t}\\n 279\\t\\n 280\\t\\tprotected function pluckXmlAttribute(\\\\SimpleXMLElement $els, $key)\\n 281\\t\\t{\\n 282\\t\\t\\t$values = [];\\n 283\\t\\t\\t$i = 0;\\n 284\\t\\t\\tforeach ($els AS $el)\\n 285\\t\\t\\t{\\n 286\\t\\t\\t\\t$values[$i++] = (string) $el[$key];\\n 287\\t\\t\\t}\\n 288\\t\\n 289\\t\\t\\treturn $values;\\n 290\\t\\t}\\n 291\\t\\n 292\\t\\tprotected function getSimpleAttributes(\\\\SimpleXMLElement $el)\\n 293\\t\\t{\\n 294\\t\\t\\t$output = [];\\n 295\\t\\t\\tforeach ($el->attributes() AS $key => $val)\\n 296\\t\\t\\t{\\n 297\\t\\t\\t\\t$output[$key] = (string) $val;\\n 298\\t\\t\\t}\\n 299\\t\\t\\treturn $output;\\n 300\\t\\t}\\n\"}\nADDON_DATA_JOB={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Job/AddOnData.php\",\"rc\":0,\"text\":\" 1\\t null,\\n 11\\t\\t\\t'data_dir' => null,\\n 12\\t\\n 13\\t\\t\\t'data_types' => null,\\n 14\\t\\t\\t'current_type' => null,\\n 15\\t\\n 16\\t\\t\\t'start' => 0,\\n 17\\t\\t];\\n 18\\t\\n 19\\t\\tprotected $currentType = null;\\n 20\\t\\tprotected $lastIndex = 0;\\n 21\\t\\tprotected $totalEntries = 0;\\n 22\\t\\n 23\\t\\tpublic function run($maxRunTime)\\n 24\\t\\t{\\n 25\\t\\t\\tif ($this->data['addon_id'] != 'XF')\\n 26\\t\\t\\t{\\n 27\\t\\t\\t\\t$addOnManager = $this->app->addOnManager();\\n 28\\t\\t\\t\\t$addOn = $addOnManager->getById($this->data['addon_id']);\\n 29\\t\\t\\t\\tif (!$addOn)\\n 30\\t\\t\\t\\t{\\n 31\\t\\t\\t\\t\\t// add-on isn't installed, can't do anything\\n 32\\t\\t\\t\\t\\treturn $this->complete();\\n 33\\t\\t\\t\\t}\\n 34\\t\\n 35\\t\\t\\t\\tif ($this->data['data_dir'] === null)\\n 36\\t\\t\\t\\t{\\n 37\\t\\t\\t\\t\\t$this->data['data_dir'] = $addOn->getDataDirectory();\\n 38\\t\\t\\t\\t}\\n 39\\t\\t\\t}\\n 40\\t\\t\\telse\\n 41\\t\\t\\t{\\n 42\\t\\t\\t\\t$addOn = null; // don't populate this for XF since it wouldn't be the same type of object\\n 43\\t\\n 44\\t\\t\\t\\tif ($this->data['data_dir'] === null)\\n 45\\t\\t\\t\\t{\\n 46\\t\\t\\t\\t\\t$ds = \\\\XF::$DS;\\n 47\\t\\t\\t\\t\\t$this->data['data_dir'] = \\\\XF::getAddOnDirectory() . $ds . 'XF' . $ds . '_data';\\n 48\\t\\t\\t\\t}\\n 49\\t\\t\\t}\\n 50\\t\\n 51\\t\\t\\t$dataManager = $this->app->addOnDataManager();\\n 52\\t\\n 53\\t\\t\\t$addOnId = $this->data['addon_id'];\\n 54\\t\\t\\t$dataDir = $this->data['data_dir'];\\n 55\\t\\n 56\\t\\t\\tif ($this->data['data_types'] === null)\\n 57\\t\\t\\t{\\n 58\\t\\t\\t\\t$dataTypes = $dataManager->getDataTypeClasses();\\n 59\\t\\t\\t\\tforeach ($dataTypes AS $key => $dataType)\\n 60\\t\\t\\t\\t{\\n 61\\t\\t\\t\\t\\t$handler = $dataManager->getDataTypeHandler($dataType);\\n 62\\t\\t\\t\\t\\t$xml = $handler->openTypeFile($dataDir);\\n 63\\t\\t\\t\\t\\tif (!$xml || !$xml->count())\\n 64\\t\\t\\t\\t\\t{\\n 65\\t\\t\\t\\t\\t\\t// We can skip this type entirely, but clean up any existing data first\\n 66\\t\\t\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n 67\\t\\t\\t\\t\\t\\tunset($dataTypes[$key]);\\n 68\\t\\t\\t\\t\\t}\\n 69\\t\\t\\t\\t}\\n 70\\t\\t\\t\\t$this->data['data_types'] = $dataTypes;\\n 71\\t\\t\\t}\\n 72\\t\\n 73\\t\\t\\tif (!$this->data['current_type'])\\n 74\\t\\t\\t{\\n 75\\t\\t\\t\\t$this->data['current_type'] = array_shift($this->data['data_types']);\\n 76\\t\\t\\t\\tif (!$this->data['current_type'])\\n 77\\t\\t\\t\\t{\\n 78\\t\\t\\t\\t\\tif ($addOn)\\n 79\\t\\t\\t\\t\\t{\\n 80\\t\\t\\t\\t\\t\\t$addOn->postDataImport();\\n 81\\t\\t\\t\\t\\t}\\n 82\\t\\n 83\\t\\t\\t\\t\\t$repo = $this->app->repository(StyleRepository::class);\\n 84\\t\\t\\t\\t\\t$repo->updateAllStylesLastModifiedDateLater();\\n 85\\t\\n 86\\t\\t\\t\\t\\treturn $this->complete();\\n 87\\t\\t\\t\\t}\\n 88\\t\\n 89\\t\\t\\t\\t$this->data['start'] = 0;\\n 90\\t\\t\\t}\\n 91\\t\\n 92\\t\\t\\t$start = $this->data['start'];\\n 93\\t\\t\\t$type = $this->data['current_type'];\\n 94\\t\\n 95\\t\\t\\t$handler = $dataManager->getDataTypeHandler($type);\\n 96\\t\\n 97\\t\\t\\t$this->currentType = $handler->getContainerTag();\\n 98\\t\\t\\t$this->lastIndex = $start;\\n 99\\t\\n 100\\t\\t\\t$xml = $handler->openTypeFile($dataDir);\\n 101\\t\\t\\tif (!$xml || !$xml->count())\\n 102\\t\\t\\t{\\n 103\\t\\t\\t\\t// No data so skip and delete existing data for type (if any)\\n 104\\t\\t\\t\\t$this->data['current_type'] = null;\\n 105\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n 106\\t\\t\\t\\treturn $this->resume();\\n 107\\t\\t\\t}\\n 108\\t\\n 109\\t\\t\\t$this->totalEntries = $xml->count();\\n 110\\t\\n 111\\t\\t\\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\\n 112\\t\\t\\tif (!$last)\\n 113\\t\\t\\t{\\n 114\\t\\t\\t\\t// finished type, delete any existing data not in the XML file for this type\\n 115\\t\\t\\t\\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\\n 116\\t\\n 117\\t\\t\\t\\t\\\\XF::triggerRunOnce();\\n 118\\t\\t\\t\\t$this->data['current_type'] = null;\\n 119\\t\\t\\t\\treturn $this->resume();\\n 120\\t\\t\\t}\\n 121\\t\\n 122\\t\\t\\t$this->data['start'] = $last;\\n 123\\t\\t\\treturn $this->resume();\\n 124\\t\\t}\\n 125\\t\\n 126\\t\\tpublic function getStatusMessage()\\n 127\\t\\t{\\n 128\\t\\t\\t// TODO: These (and the types) probably should be phrased\\n 129\\t\\t\\t$actionPhrase = 'Importing';\\n 130\\t\\t\\tif ($this->data['addon_id'] == 'XF')\\n 131\\t\\t\\t{\\n 132\\t\\t\\t\\t$typePhrase = 'Master data';\\n 133\\t\\t\\t}\\n 134\\t\\t\\telse\\n 135\\t\\t\\t{\\n 136\\t\\t\\t\\t$typePhrase = 'Add-on data';\\n 137\\t\\t\\t}\\n 138\\t\\n 139\\t\\t\\t$currentType = null;\\n 140\\t\\t\\tif ($this->currentType)\\n 141\\t\\t\\t{\\n 142\\t\\t\\t\\t$currentType = ucfirst(str_replace('_', ' ', $this->currentType));\\n 143\\t\\t\\t}\\n 144\\t\\n 145\\t\\t\\tif ($currentType && $this->lastIndex)\\n 146\\t\\t\\t{\\n 147\\t\\t\\t\\t$percentage = $this->app->language()->numberFormat(($this->lastIndex / $this->totalEntries) * 100, 1);\\n 148\\t\\t\\t\\treturn sprintf('%s... %s (%s: %s%%)', $actionPhrase, $typePhrase, $currentType, $percentage);\\n 149\\t\\t\\t}\\n 150\\t\\t\\telse if ($currentType)\\n 151\\t\\t\\t{\\n 152\\t\\t\\t\\treturn sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);\\n 153\\t\\t\\t}\\n 154\\t\\t\\telse\\n 155\\t\\t\\t{\\n 156\\t\\t\\t\\treturn sprintf('%s... %s', $actionPhrase, $typePhrase);\\n 157\\t\\t\\t}\\n 158\\t\\t}\\n 159\\t\\n 160\\t\\tpublic function canCancel()\\n 161\\t\\t{\\n 162\\t\\t\\treturn false;\\n 163\\t\\t}\\n 164\\t\\n 165\\t\\tpublic function canTriggerByChoice()\\n 166\\t\\t{\\n 167\\t\\t\\treturn false;\\n 168\\t\\t}\\n 169\\t}\\n\"}\nENTITY_CORE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php\",\"rc\":0,\"text\":\" 520\\t\\t\\t\\t{\\n 521\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"To many relations must be hydrated with collections\\\");\\n 522\\t\\t\\t\\t}\\n 523\\t\\t\\t}\\n 524\\t\\t\\telse\\n 525\\t\\t\\t{\\n 526\\t\\t\\t\\tif ($value !== null && !($value instanceof Entity))\\n 527\\t\\t\\t\\t{\\n 528\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"To one relations must be hydrated with entities or null\\\");\\n 529\\t\\t\\t\\t}\\n 530\\t\\t\\t}\\n 531\\t\\n 532\\t\\t\\t$this->_relations[$key] = $value;\\n 533\\t\\t}\\n 534\\t\\n 535\\t\\tpublic function getExistingRelation($key)\\n 536\\t\\t{\\n 537\\t\\t\\t$relations = $this->_structure->relations;\\n 538\\t\\n 539\\t\\t\\tif (empty($relations[$key]))\\n 540\\t\\t\\t{\\n 541\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Unknown relation $key\\\");\\n 542\\t\\t\\t}\\n 543\\t\\n 544\\t\\t\\treturn $this->_em->getRelation($relations[$key], $this, 'existing');\\n 545\\t\\t}\\n 546\\t\\n 547\\t\\tpublic function getRelationFinder($key, $type = 'current')\\n 548\\t\\t{\\n 549\\t\\t\\t$relations = $this->_structure->relations;\\n 550\\t\\n 551\\t\\t\\tif (empty($relations[$key]))\\n 552\\t\\t\\t{\\n 553\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Unknown relation $key\\\");\\n 554\\t\\t\\t}\\n 555\\t\\n 556\\t\\t\\treturn $this->_em->getRelationFinder($relations[$key], $this, $type);\\n 557\\t\\t}\\n 558\\t\\n 559\\t\\tpublic function toArray($allowGetters = true)\\n 560\\t\\t{\\n 561\\t\\t\\t$output = [];\\n 562\\t\\t\\tforeach ($this->_structure->columns AS $key => $null)\\n 563\\t\\t\\t{\\n 564\\t\\t\\t\\t$output[$key] = $allowGetters ? $this->get($key) : $this->getValue($key);\\n 565\\t\\t\\t}\\n 566\\t\\n 567\\t\\t\\treturn $output;\\n 568\\t\\t}\\n 569\\t\\n 570\\t\\tfinal public function toApiResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\\n 571\\t\\t{\\n 572\\t\\t\\t$result = new EntityResult($this);\\n 573\\t\\t\\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\\n 574\\t\\n 575\\t\\t\\tif ($subResult instanceof EntityResultInterface)\\n 576\\t\\t\\t{\\n 577\\t\\t\\t\\treturn $subResult;\\n 578\\t\\t\\t}\\n 579\\t\\t\\telse\\n 580\\t\\t\\t{\\n 581\\t\\t\\t\\treturn $result;\\n 582\\t\\t\\t}\\n 583\\t\\t}\\n 584\\t\\n 585\\t\\tfinal public function toWebhookResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\\n 586\\t\\t{\\n 587\\t\\t\\t$result = new EntityResult($this, EntityResultInterface::TYPE_WEBHOOK);\\n 588\\t\\t\\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\\n 589\\t\\n 590\\t\\t\\tif ($subResult instanceof EntityResultInterface)\\n 591\\t\\t\\t{\\n 592\\t\\t\\t\\treturn $subResult;\\n 593\\t\\t\\t}\\n 594\\t\\n 595\\t\\t\\treturn $result;\\n 596\\t\\t}\\n 597\\t\\n 598\\t\\t/**\\n 599\\t\\t * This method must be overridden to enable API access to this entity.\\n 600\\t\\t *\\n 601\\t\\t * @param EntityResult $result\\n 602\\t\\t * @param int $verbosity\\n 603\\t\\t * @param array $options\\n 604\\t\\t */\\n 605\\t\\tprotected function setupApiResultData(\\n 606\\t\\t\\tEntityResult $result,\\n 607\\t\\t\\t$verbosity = self::VERBOSITY_NORMAL,\\n 608\\t\\t\\tarray $options = []\\n 609\\t\\t)\\n 610\\t\\t{\\n 611\\t\\t\\tthrow new \\\\LogicException(\\n 612\\t\\t\\t\\t\\\"API result rules not defined by \\\" . $this->_structure->shortName . '. Override setupApiResultData().'\\n 613\\t\\t\\t);\\n 614\\t\\t}\\n 615\\t\\n 616\\t\\tpublic function __set($key, $value)\\n 617\\t\\t{\\n 618\\t\\t\\t$this->set($key, $value);\\n 619\\t\\t}\\n 620\\t\\n 621\\t\\tpublic function offsetSet($key, $value): void\\n 622\\t\\t{\\n 623\\t\\t\\t$this->set($key, $value);\\n 624\\t\\t}\\n 625\\t\\n 626\\t\\tpublic function set($key, $value, array $options = [])\\n 627\\t\\t{\\n 628\\t\\t\\tif ($this->_readOnly)\\n 629\\t\\t\\t{\\n 630\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Entity is read only\\\");\\n 631\\t\\t\\t}\\n 632\\t\\n 633\\t\\t\\tif ($this->_deleted)\\n 634\\t\\t\\t{\\n 635\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n 636\\t\\t\\t}\\n 637\\t\\n 638\\t\\t\\tif ($this->_writePending == 'delete')\\n 639\\t\\t\\t{\\n 640\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n 641\\t\\t\\t}\\n 642\\t\\n 643\\t\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n 644\\t\\t\\t{\\n 645\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n 646\\t\\t\\t}\\n 647\\t\\n 648\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 649\\t\\t\\t{\\n 650\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 651\\t\\t\\t\\t{\\n 652\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 653\\t\\t\\t\\t}\\n 654\\t\\t\\t\\treturn false;\\n 655\\t\\t\\t}\\n 656\\t\\n 657\\t\\t\\t$column = $this->_structure->columns[$key];\\n 658\\t\\n 659\\t\\t\\tif ((!empty($column['readOnly']) || !empty($column['autoIncrement'])) && empty($options['forceSet']))\\n 660\\t\\t\\t{\\n 661\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 662\\t\\t\\t\\t{\\n 663\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is read only, can only be set with forceSet\\\");\\n 664\\t\\t\\t\\t}\\n 665\\t\\t\\t\\treturn false;\\n 666\\t\\t\\t}\\n 667\\t\\n 668\\t\\t\\tif (!empty($column['writeOnce']) && $this->isUpdate() && empty($options['forceSet']))\\n 669\\t\\t\\t{\\n 670\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 671\\t\\t\\t\\t{\\n 672\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' can only be written on insert or set with forceSet\\\");\\n 673\\t\\t\\t\\t}\\n 674\\t\\t\\t\\treturn false;\\n 675\\t\\t\\t}\\n 676\\t\\n 677\\t\\t\\tif ($value instanceof DeferredValue)\\n 678\\t\\t\\t{\\n 679\\t\\t\\t\\t$this->_setInternal($key, $value);\\n 680\\t\\t\\t\\treturn true;\\n 681\\t\\t\\t}\\n 682\\t\\n 683\\t\\t\\tif (!$this->_verifyValueCustom($value, $key, $column['type'], $column))\\n 684\\t\\t\\t{\\n 685\\t\\t\\t\\treturn false;\\n 686\\t\\t\\t}\\n 687\\t\\n 688\\t\\t\\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\\n 689\\t\\n 690\\t\\t\\tif (!$this->_em->getValueFormatter()->applyValueConstraints(\\n 691\\t\\t\\t\\t$value,\\n 692\\t\\t\\t\\t$column['type'],\\n 693\\t\\t\\t\\t$column,\\n 694\\t\\t\\t\\t$constraintError,\\n 695\\t\\t\\t\\t!empty($options['forceConstraint'])\\n 696\\t\\t\\t))\\n 697\\t\\t\\t{\\n 698\\t\\t\\t\\tif ($constraintError)\\n 699\\t\\t\\t\\t{\\n 700\\t\\t\\t\\t\\t$this->error($constraintError, $key, false);\\n 701\\t\\t\\t\\t}\\n 702\\t\\n 703\\t\\t\\t\\treturn false;\\n 704\\t\\t\\t}\\n 705\\t\\n 706\\t\\t\\tif ($this->_columnValueIsDifferent($key, $value, $column) && $value !== null)\\n 707\\t\\t\\t{\\n 708\\t\\t\\t\\tif (!empty($column['unique']))\\n 709\\t\\t\\t\\t{\\n 710\\t\\t\\t\\t\\tif (!$this->_verifyUniqueValue($value, $key, $column['unique']))\\n 711\\t\\t\\t\\t\\t{\\n 712\\t\\t\\t\\t\\t\\treturn false;\\n 713\\t\\t\\t\\t\\t}\\n 714\\t\\t\\t\\t}\\n 715\\t\\t\\t\\telse if (!empty($column['autoIncrement']) || $this->_structure->primaryKey === $key)\\n 716\\t\\t\\t\\t{\\n 717\\t\\t\\t\\t\\tif (!$this->_verifyUniqueValue($value, $key, true))\\n 718\\t\\t\\t\\t\\t{\\n 719\\t\\t\\t\\t\\t\\treturn false;\\n 720\\t\\t\\t\\t\\t}\\n 721\\t\\t\\t\\t}\\n 722\\t\\t\\t}\\n 723\\t\\n 724\\t\\t\\t$this->_setInternal($key, $value);\\n 725\\t\\t\\treturn true;\\n 726\\t\\t}\\n 727\\t\\n 728\\t\\tpublic function setTrusted($key, $value)\\n 729\\t\\t{\\n 730\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 731\\t\\t\\t{\\n 732\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 733\\t\\t\\t}\\n 734\\t\\n 735\\t\\t\\t$column = $this->_structure->columns[$key];\\n 736\\t\\t\\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\\n 737\\t\\n 738\\t\\t\\t$this->_setInternal($key, $value);\\n 739\\t\\t\\treturn true;\\n 740\\t\\t}\\n 741\\t\\n 742\\t\\tpublic function setFromEncoded($key, $value, array $options = [])\\n 743\\t\\t{\\n 744\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 745\\t\\t\\t{\\n 746\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 747\\t\\t\\t}\\n 748\\t\\n 749\\t\\t\\t$column = $this->_structure->columns[$key];\\n 750\\t\\n 751\\t\\t\\t$value = $this->_em->decodeValueFromSourceExtended($column['type'], $value, $column);\\n 752\\t\\t\\treturn $this->set($key, $value, $options);\\n 753\\t\\t}\\n 754\\t\\n 755\\t\\tpublic function setAsSaved($key, $value)\\n 756\\t\\t{\\n 757\\t\\t\\tif (!$this->exists() && !$this->_writeRunning)\\n 758\\t\\t\\t{\\n 759\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Can only set an already saved value on a saved entity\\\");\\n 760\\t\\t\\t}\\n\"}\nTEMPLATE_ENTITY={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Entity/Template.php\",\"rc\":0,\"text\":\" 1\\t $History\\n 44\\t * @property-read Style|null $Style_\\n 45\\t */\\n 46\\tclass Template extends Entity\\n 47\\t{\\n 48\\t\\tprotected $modificationStatuses = null;\\n 49\\t\\n 50\\t\\t/**\\n 51\\t\\t * @return string\\n 52\\t\\t */\\n 53\\t\\tpublic function getCombinedTitle()\\n 54\\t\\t{\\n 55\\t\\t\\treturn \\\"{$this->type}:{$this->title}\\\";\\n 56\\t\\t}\\n 57\\t\\n 58\\t\\t/**\\n 59\\t\\t * @return Style\\n 60\\t\\t */\\n 61\\t\\tpublic function getStyle()\\n 62\\t\\t{\\n 63\\t\\t\\tif ($this->style_id == 0)\\n 64\\t\\t\\t{\\n 65\\t\\t\\t\\treturn $this->getStyleRepo()->getMasterStyle();\\n 66\\t\\t\\t}\\n 67\\t\\t\\telse\\n 68\\t\\t\\t{\\n 69\\t\\t\\t\\treturn $this->getRelation('Style');\\n 70\\t\\t\\t}\\n 71\\t\\t}\\n 72\\t\\n 73\\t\\t/**\\n 74\\t\\t * @return Template|null\\n 75\\t\\t */\\n 76\\t\\tpublic function getParentTemplate()\\n 77\\t\\t{\\n 78\\t\\t\\tif (!$this->style_id)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\treturn null;\\n 81\\t\\t\\t}\\n 82\\t\\n 83\\t\\t\\t$style = $this->Style;\\n 84\\t\\t\\tif (!$style)\\n 85\\t\\t\\t{\\n 86\\t\\t\\t\\treturn null;\\n 87\\t\\t\\t}\\n 88\\t\\n 89\\t\\t\\t$templateMap = $this->finder(TemplateMapFinder::class)\\n 90\\t\\t\\t\\t->where([\\n 91\\t\\t\\t\\t\\t'style_id' => $style->parent_id,\\n 92\\t\\t\\t\\t\\t'type' => $this->type,\\n 93\\t\\t\\t\\t\\t'title' => $this->title,\\n 94\\t\\t\\t\\t])\\n 95\\t\\t\\t\\t->with('Template', true)\\n 96\\t\\t\\t\\t->with('Template.Style', false)\\n 97\\t\\t\\t\\t->fetchOne();\\n 98\\t\\t\\tif (!$templateMap)\\n 99\\t\\t\\t{\\n 100\\t\\t\\t\\treturn null;\\n 101\\t\\t\\t}\\n 102\\t\\n 103\\t\\t\\treturn $templateMap->Template;\\n 104\\t\\t}\\n 105\\t\\n 106\\t\\tpublic function getAbstractedCompiledTemplatePath($languageId, $styleId, $new = true)\\n 107\\t\\t{\\n 108\\t\\t\\t$title = $new ? $this->getValue('title') : $this->getExistingValue('title');\\n 109\\t\\t\\t$type = $new ? $this->getValue('type') : $this->getExistingValue('type');\\n 110\\t\\n 111\\t\\t\\treturn 'code-cache://templates/l' . $languageId . '/s' . $styleId . '/' . $type . '/' . $title . '.php';\\n 112\\t\\t}\\n 113\\t\\n 114\\t\\tpublic function getHash()\\n 115\\t\\t{\\n 116\\t\\t\\t$contents = str_replace(\\\"\\\\r\\\", '', $this->template);\\n 117\\t\\t\\treturn md5($contents);\\n 118\\t\\t}\\n 119\\t\\n 120\\t\\t/**\\n 121\\t\\t * @return array\\n 122\\t\\t */\\n 123\\t\\tpublic function getPhrasesUsed()\\n 124\\t\\t{\\n 125\\t\\t\\treturn $this->db()->fetchAllColumn(\\\"\\n 126\\t\\t\\t\\tSELECT phrase_title\\n 127\\t\\t\\t\\tFROM xf_template_phrase\\n 128\\t\\t\\t\\tWHERE template_id = ?\\n 129\\t\\t\\t\\\", $this->template_id);\\n 130\\t\\t}\\n 131\\t\\n 132\\t\\tpublic function reparseTemplate($forceValid = false, &$error = null)\\n 133\\t\\t{\\n 134\\t\\t\\t$valid = $this->validateTemplateText($this->template, $forceValid, $ast, $error);\\n 135\\t\\t\\tif ($valid && $ast != $this->template_parsed)\\n 136\\t\\t\\t{\\n 137\\t\\t\\t\\t$this->template_parsed = $ast;\\n 138\\t\\t\\t\\treturn true;\\n 139\\t\\t\\t}\\n 140\\t\\t\\tif (!$valid)\\n 141\\t\\t\\t{\\n 142\\t\\t\\t\\t$this->error($error, 'template');\\n 143\\t\\t\\t\\treturn true;\\n 144\\t\\t\\t}\\n 145\\t\\n 146\\t\\t\\treturn false;\\n 147\\t\\t}\\n 148\\t\\n 149\\t\\tpublic function setTemplateUnchecked($template)\\n 150\\t\\t{\\n 151\\t\\t\\t$template = strval($template);\\n 152\\t\\t\\t$this->_setInternal('template', $template);\\n 153\\t\\t\\t$this->validateTemplateText($template, true, $ast);\\n 154\\t\\n 155\\t\\t\\t$this->template_parsed = $ast;\\n 156\\t\\n 157\\t\\t\\treturn true;\\n 158\\t\\t}\\n 159\\t\\n 160\\t\\tprotected function verifyTitle($title)\\n 161\\t\\t{\\n 162\\t\\t\\tif (substr($title, 0, 1) == '.' || strpos($title, '..') !== false)\\n 163\\t\\t\\t{\\n 164\\t\\t\\t\\t$this->error(\\\\XF::phrase('please_enter_title_using_only_alphanumeric_dot'), 'title');\\n 165\\t\\t\\t\\treturn false;\\n 166\\t\\t\\t}\\n 167\\t\\n 168\\t\\t\\tif (preg_match('/\\\\.html$/i', $title))\\n 169\\t\\t\\t{\\n 170\\t\\t\\t\\t$this->error(\\\\XF::phrase('template_titles_may_not_end_in_html'), 'title');\\n 171\\t\\t\\t\\treturn false;\\n 172\\t\\t\\t}\\n 173\\t\\n 174\\t\\t\\treturn true;\\n 175\\t\\t}\\n 176\\t\\n 177\\t\\tprotected function verifyTemplate($template)\\n 178\\t\\t{\\n 179\\t\\t\\t$valid = $this->validateTemplateText($template, false, $ast, $error);\\n 180\\t\\t\\tif (!$valid)\\n 181\\t\\t\\t{\\n 182\\t\\t\\t\\t$this->error($error, 'template');\\n 183\\t\\t\\t\\treturn false;\\n 184\\t\\t\\t}\\n 185\\t\\n 186\\t\\t\\t$this->template_parsed = $ast;\\n 187\\t\\n 188\\t\\t\\treturn true;\\n 189\\t\\t}\\n 190\\t\\n 191\\t\\tprotected function validateTemplateText($template, $forceValid = false, &$ast = null, &$error = null)\\n 192\\t\\t{\\n 193\\t\\t\\t$compiler = $this->app()->templateCompiler();\\n 194\\t\\n 195\\t\\t\\t$templateModRepo = $this->repository(TemplateModificationRepository::class);\\n 196\\t\\t\\t$templateWithModifications = $templateModRepo->applyModificationsToTemplate(\\n 197\\t\\t\\t\\t$this->type,\\n 198\\t\\t\\t\\t$this->title,\\n 199\\t\\t\\t\\t$template,\\n 200\\t\\t\\t\\t$modificationStatuses\\n 201\\t\\t\\t);\\n 202\\t\\n 203\\t\\t\\t$standardParse = true;\\n 204\\t\\t\\t$error = null;\\n 205\\t\\n 206\\t\\t\\tif ($modificationStatuses)\\n 207\\t\\t\\t{\\n 208\\t\\t\\t\\ttry\\n 209\\t\\t\\t\\t{\\n 210\\t\\t\\t\\t\\t$ast = $compiler->compileToAst($templateWithModifications);\\n 211\\t\\n 212\\t\\t\\t\\t\\tif ($this->getOption('test_compile'))\\n 213\\t\\t\\t\\t\\t{\\n 214\\t\\t\\t\\t\\t\\t$compiler->compileAst($ast);\\n 215\\t\\t\\t\\t\\t}\\n 216\\t\\t\\t\\t\\t$standardParse = false;\\n 217\\t\\t\\t\\t}\\n 218\\t\\t\\t\\tcatch (Exception $e)\\n 219\\t\\t\\t\\t{\\n 220\\t\\t\\t\\t\\t$error = $e->getMessage() . ' - ' . \\\\XF::phrase('template_modifications:') . ' ' . \\\"{$this->type}:{$this->title}\\\";\\n 221\\t\\t\\t\\t\\tforeach ($modificationStatuses AS &$status)\\n 222\\t\\t\\t\\t\\t{\\n 223\\t\\t\\t\\t\\t\\tif (is_int($status))\\n 224\\t\\t\\t\\t\\t\\t{\\n 225\\t\\t\\t\\t\\t\\t\\t$status = 'error_compile';\\n 226\\t\\t\\t\\t\\t\\t}\\n 227\\t\\t\\t\\t\\t}\\n 228\\t\\t\\t\\t}\\n 229\\t\\t\\t}\\n 230\\t\\n 231\\t\\t\\tif ($standardParse)\\n 232\\t\\t\\t{\\n 233\\t\\t\\t\\ttry\\n 234\\t\\t\\t\\t{\\n 235\\t\\t\\t\\t\\t$ast = $compiler->compileToAst($template);\\n 236\\t\\n 237\\t\\t\\t\\t\\tif ($this->getOption('test_compile'))\\n 238\\t\\t\\t\\t\\t{\\n 239\\t\\t\\t\\t\\t\\t$compiler->compileAst($ast);\\n 240\\t\\t\\t\\t\\t}\\n 241\\t\\n 242\\t\\t\\t\\t\\tif ($forceValid || !$this->getOption('report_modification_errors'))\\n 243\\t\\t\\t\\t\\t{\\n 244\\t\\t\\t\\t\\t\\t$error = null;\\n 245\\t\\t\\t\\t\\t}\\n 246\\t\\t\\t\\t}\\n 247\\t\\t\\t\\tcatch (Exception $e)\\n 248\\t\\t\\t\\t{\\n 249\\t\\t\\t\\t\\t$error = $e->getMessage() . ' - ' . \\\\XF::phrase('template_name:') . ' ' . \\\"{$this->type}:{$this->title}\\\";\\n 250\\t\\t\\t\\t}\\n 251\\t\\t\\t}\\n 252\\t\\n 253\\t\\t\\tif ($forceValid && $error)\\n 254\\t\\t\\t{\\n 255\\t\\t\\t\\t$error = null;\\n 256\\t\\t\\t\\t$ast = $compiler->stringAst($template);\\n 257\\t\\t\\t}\\n 258\\t\\n 259\\t\\t\\tif ($error)\\n 260\\t\\t\\t{\\n\"}\nENTITY_WRITE_PENDING_ALL={\"err\":\"\",\"rc\":0,\"text\":\"76-\\n77-\\tprotected $_options = [];\\n78-\\n79-\\tprotected $_deleted = false;\\n80-\\n81-\\tprotected $_readOnly = false;\\n82:\\tprotected $_writePending = false;\\n83-\\tprotected $_writeRunning = false;\\n84-\\tprotected $_errors = [];\\n85-\\n86-\\t/**\\n87-\\t * @var \\\\Closure[]\\n88-\\t */\\n--\\n632-\\n633-\\t\\tif ($this->_deleted)\\n634-\\t\\t{\\n635-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n636-\\t\\t}\\n637-\\n638:\\t\\tif ($this->_writePending == 'delete')\\n639-\\t\\t{\\n640-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n641-\\t\\t}\\n642-\\n643:\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n644-\\t\\t{\\n645-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n646-\\t\\t}\\n647-\\n648-\\t\\tif (!isset($this->_structure->columns[$key]))\\n649-\\t\\t{\\n--\\n1365-\\t}\\n1366-\\n1367-\\tfinal public function saveIfChanged(&$saved = null, $throw = true, $newTransaction = true)\\n1368-\\t{\\n1369-\\t\\tif (!$this->_newValues && $this->isUpdate())\\n1370-\\t\\t{\\n1371:\\t\\t\\t$this->_writePending = false;\\n1372-\\n1373-\\t\\t\\t$saved = false;\\n1374-\\t\\t\\treturn true;\\n1375-\\t\\t}\\n1376-\\n1377-\\t\\t$saved = true;\\n--\\n1412-\\t\\t$this->db()->update($this->_structure->table, $dbUpdate, $condition);\\n1413-\\t}\\n1414-\\n1415-\\tfinal public function preSave()\\n1416-\\t{\\n1417-\\t\\t// write will be pending after calling this; this means call it only once\\n1418:\\t\\tif ($this->_writePending != 'save')\\n1419-\\t\\t{\\n1420-\\t\\t\\t$this->_fillDeferredValues('preSave');\\n1421-\\t\\t\\t$this->_preSave();\\n1422-\\n1423-\\t\\t\\tforeach ($this->getBehaviors() AS $behavior)\\n1424-\\t\\t\\t{\\n--\\n1453-\\t\\t\\tif ($this->isInsert())\\n1454-\\t\\t\\t{\\n1455-\\t\\t\\t\\t$this->_fillInsertDefaults();\\n1456-\\t\\t\\t}\\n1457-\\t\\t\\t$this->_validateRequirements();\\n1458-\\n1459:\\t\\t\\t$this->_writePending = 'save';\\n1460-\\t\\t}\\n1461-\\n1462-\\t\\treturn count($this->_errors) == 0;\\n1463-\\t}\\n1464-\\n1465-\\tprotected function _preSave()\\n--\\n1610-\\tprotected function _postSave()\\n1611-\\t{\\n1612-\\t}\\n1613-\\n1614-\\tprotected function _saveCleanUp(array $newDbValues)\\n1615-\\t{\\n1616:\\t\\t$this->_writePending = false;\\n1617-\\t\\t$this->_writeRunning = false;\\n1618-\\t\\t$this->_previousValues = $this->_values;\\n1619-\\t\\t$this->_values = array_merge($this->_values, $newDbValues);\\n1620-\\t\\t$this->_newValues = [];\\n1621-\\t\\t$this->_errors = [];\\n1622-\\t\\t$this->_cascadeSave = [];\\n--\\n1633-\\t\\t\\t$fn($this);\\n1634-\\t\\t}\\n1635-\\t}\\n1636-\\n1637-\\tpublic function reset()\\n1638-\\t{\\n1639:\\t\\t$this->_writePending = false;\\n1640-\\t\\t$this->_newValues = [];\\n1641-\\t\\t$this->_errors = [];\\n1642-\\t\\t$this->_getterCache = [];\\n1643-\\t\\t$this->_valueCache = [];\\n1644-\\t\\t$this->_options = [];\\n1645-\\t\\t$this->_cascadeSave = [];\\n--\\n1736-\\t\\tif ($newTransaction)\\n1737-\\t\\t{\\n1738-\\t\\t\\t$db->commit();\\n1739-\\t\\t}\\n1740-\\n1741-\\t\\t$this->_em->detachEntity($this);\\n1742:\\t\\t$this->_writePending = false;\\n1743-\\t\\t$this->_writeRunning = false;\\n1744-\\n1745-\\t\\treturn true;\\n1746-\\t}\\n1747-\\n1748-\\tfinal public function preDelete()\\n1749-\\t{\\n1750-\\t\\tif ($this->_deleted)\\n1751-\\t\\t{\\n1752-\\t\\t\\treturn true;\\n1753-\\t\\t}\\n1754-\\n1755:\\t\\tif ($this->_writePending != 'delete')\\n1756-\\t\\t{\\n1757-\\t\\t\\t$this->_preDelete();\\n1758-\\n1759-\\t\\t\\tforeach ($this->getBehaviors() AS $behavior)\\n1760-\\t\\t\\t{\\n1761-\\t\\t\\t\\t$behavior->preDelete();\\n--\\n1804-\\t\\t\\t\\t\\t\\t}\\n1805-\\t\\t\\t\\t\\t}\\n1806-\\t\\t\\t\\t}\\n1807-\\t\\t\\t}\\n1808-\\n1809-\\t\\t\\t$this->_em->finishCascadeEvent('preDelete');\\n1810:\\t\\t\\t$this->_writePending = 'delete';\\n1811-\\t\\t}\\n1812-\\n1813-\\t\\treturn count($this->_errors) == 0;\\n1814-\\t}\\n1815-\\n1816-\\tpublic function isDeleted()\\n\"}\nDB_SCHEMAS=[\"xf_newfi\"]\nTEMPLATE_INDEXES={\"err\":\"\",\"rc\":0,\"rows\":[\"xf_template\\t0\\tPRIMARY\\t1\\ttemplate_id\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t1\\ttype\\tA\\t6\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t2\\ttitle\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t3\\tstyle_id\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\"]}\nTEMPLATE_ROWS={\"err\":\"\",\"rc\":0,\"rows\":[\"1610\\t0\\tpublic\\tnewfi_portal\\tNewfi/Portal\\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741\"]}\nADDON_ROW={\"err\":\"\",\"rc\":0,\"rows\":[\"Newfi/Portal\\t1000010\\t1.0.0 Alpha 1\\t1\\t0\\tNULL\"]}\nERROR42={\"err\":\"\",\"rc\":0,\"rows\":[\"42\\tLogicException\\tAttempted to set 'type' while a save was pending without forceSet\\tsrc/XF/Mvc/Entity/Entity.php\\t645\\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->set('type', 'public')\\\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->__set('type', 'public')\\\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\\\\\Entity\\\\\\\\Template))\\\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\\\n#4 src/XF/Job/Manager.php(275): XF\\\\\\\\Job\\\\\\\\AddOnData->run(8)\\\\n#5 src/XF/Job/Manager.php(205): XF\\\\\\\\Job\\\\\\\\Manager->runJobInternal(Array, 8)\\\\n#6 src/XF/Job/Manager.php(174): XF\\\\\\\\Job\\\\\\\\Manager->runJobEntry(Array, 8)\\\\n#7 src/XF/Cli/Runner.php(228): XF\\\\\\\\Job\\\\\\\\Manager->runById(530, 8)\\\\n#8 src/XF/Cli/Runner.php(116): XF\\\\\\\\Cli\\\\\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Output\\\\\\\\ConsoleOutput))\\\\n#9 cmd.php(17): XF\\\\\\\\Cli\\\\\\\\Runner->run()\\\\n#10 {main}\"]}\nIN_MEMORY_ENTITY_PROBE={\"err\":\"\",\"rc\":0,\"rows\":[\"{\\\"label\\\":\\\"initial\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_check_duplicate_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_report_modification_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_behavior_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_title\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_type\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_version_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_version_string\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_style_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_addon_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\"]}\nNATIVE_REBUILD_IMPLEMENTATION_GREP={\"err\":\"\",\"rc\":0,\"text\":\"/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:16:use XF\\\\Job\\\\AddOnData;\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:150:\\tprotected function importAddOnData(InputInterface $input, OutputInterface $output, AddOn $addOn)\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:171:\\t\\t\\t\\t'xfAddOnData-' . $addOn->addon_id,\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:172:\\t\\t\\t\\tAddOnData::class,\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:219:\\t\\t\\t'xf:addon-sub-action',\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Designer/RebuildMetadata.php:11:class RebuildMetadata extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildUsers.php:7:class RebuildUsers extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSearch.php:8:class RebuildSearch extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractRebuildCommand.php:11:abstract class AbstractRebuildCommand extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildAttachmentThumbs.php:7:class RebuildAttachmentThumbs extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildForums.php:7:class RebuildForums extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildThreads.php:8:class RebuildThreads extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildStats.php:8:class RebuildStats extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildReactionScore.php:7:class RebuildReactionScore extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildIconUsage.php:7:class RebuildIconUsage extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildMessageCounts.php:7:class RebuildMessageCounts extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSitemap.php:7:class RebuildSitemap extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractImageOptimizationCommand.php:7:abstract class AbstractImageOptimizationCommand extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/RebuildMasterData.php:10:class RebuildMasterData extends AbstractCommand implements CustomAppCommandInterface\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:18:\\t\\t\\t->setName('xf:addon-sub-action')\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:66:\\t\\t\\t\\t\\t$this->importAddOnData($input, $output, $addOn);\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:12:class AddOnRebuild extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:20:\\t\\t\\t->setName('xf:addon-rebuild')\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/AbstractImportCommand.php:87:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/LintTemplates.php:39:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/GeneratePhpStormMeta.php:145:\\t\\t\\t'AddOnDataType' => [\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildMetadata.php:9:class RebuildMetadata extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildCaches.php:11:class RebuildCaches extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/SyncTemplates.php:37:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildPosts.php:7:class RebuildPosts extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePosts.php:7:class RebuildProfilePosts extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildConversationMessages.php:7:class RebuildConversationMessages extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePostComments.php:7:class RebuildProfilePostComments extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:40:\\t\\t\\t\\t\\t$dataManager->finalizeRemoveAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:52:\\t\\t\\t$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);\\n/var/www/forums/newfi/public/src/XF/Job/Poll.php:7:class Poll extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/SearchRebuild.php:9:class SearchRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AttachmentThumb.php:10:class AttachmentThumb extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/StylePropertyRebuild.php:7:class StylePropertyRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/MessageCount.php:8:class MessageCount extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Thread.php:7:class Thread extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuildPartial.php:7:class PermissionRebuildPartial extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AbstractImageOptimizationJob.php:7:abstract class AbstractImageOptimizationJob extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/SearchForum.php:8:class SearchForum extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Forum.php:5:class Forum extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuild.php:9:class PermissionRebuild extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/AbstractRebuildJob.php:5:abstract class AbstractRebuildJob extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/ProfilePost.php:5:class ProfilePost extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/CoreCacheRebuild.php:31:class CoreCacheRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/StyleAssetRebuild.php:7:class StyleAssetRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/PhraseRebuild.php:12:class PhraseRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:7:class AddOnData extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:66:\\t\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:105:\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:111:\\t\\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:115:\\t\\t\\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\\n/var/www/forums/newfi/public/src/XF/Job/Gravatar.php:10:class Gravatar extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Conversation.php:7:class Conversation extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/TemplateRebuild.php:12:class TemplateRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/User.php:9:class User extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnInstallBatch.php:341:\\t\\t$job = $this->app->job(AddOnData::class, 0, $params['data']);\\n/var/www/forums/newfi/public/src/XF/Job/ReactionScore.php:7:class ReactionScore extends AbstractRebuildJob\\n\"}\nSTAGING_QGA={\"err\":\"\",\"hostname\":\"newfi-staging\",\"rc\":0}\nPRODUCTION_QGA={\"err\":\"\",\"hostname\":\"newfi-prod\",\"rc\":0}\nPRODUCTION_PUBLIC_HTTP={\"err\":\"\",\"http\":\"200\",\"rc\":0}\nSTAGING_LOCAL_HTTP={\"err\":\"\",\"http\":\"503\",\"rc\":0}\nFINAL_DECISION=RCA7_COMPLETE_NO_MUTATION_ALL_REMAINING_TEMPLATE_IMPORT_EVIDENCE_READY\nRCA7_END=true\n" +} diff --git a/runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.txt b/runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.txt new file mode 100644 index 00000000..c11093c2 --- /dev/null +++ b/runtime/history/NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7.txt @@ -0,0 +1,76 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=newfi-portal200-consolidated-final-template-rca +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=c5f396b50e88cd61820fa8cdbca3f34d37dc259b18372b37317ac6fdb2a7c1ae +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=37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273 +SANITIZED_OUTPUT_SHA256=37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273 +OUTPUT_BEGIN +RCA7_BEGIN=true +COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 +MUTATION_SCOPE=NONE_READ_ONLY +MUTATIONS_PERFORMED=NO +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +REFERENCE_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +NEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394 +NEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL +FAILED_CHANGES_MADE=true +FAILED_ROLLBACK_STARTED=true +FAILED_ROLLBACK_RESTORED=false +FAILED_MUTATION_OUTCOME=ROLLBACK_FAILED +FAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE +NEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_HISTORY_SHA256=76f74a798da08cdfa0e1545961b58ffb293b33c15868510c915c3dbb261bac34 +NEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_STATUS=OK +GIT_HEAD={"err":"","out":"06bab5acd124e768f70305b3d7eca2f595871890","rc":0} +GIT_STATUS={"err":"","out":"","rc":0} +GIT_LOG3={"err":"","out":"06bab5a (HEAD -> implementation/newfi-closed-mvp-20260906, origin/implementation/newfi-closed-mvp-20260906) style: apply Big Water XenForo theme [NEWFI-260907-STYLE199B]\n4ade504 brand: add Newfi technical identity assets\n9f7e0ca ops: authorize final Newfi public cutover","rc":0} +GIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890 +CANDIDATE_XML_BYTES=10977 +CANDIDATE_XML_SHA256=1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861 +CANDIDATE_CHILDREN=[{"attrib":{"title":"newfi_portal","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"i":0,"tag":"template","text_bytes":7027,"text_sha256":"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a"},{"attrib":{"title":"newfi_portal.less","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"i":1,"tag":"template","text_bytes":3634,"text_sha256":"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8"}] +TEMPLATE_DATATYPE={"err":"","path":"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php","rc":0,"text":" 35\t\t\t\t$this->exportMappedAttributes($node, $entry);\n 36\t\t\t\t$this->exportCdata($node, $entry->template);\n 37\t\n 38\t\t\t\t$container->appendChild($node);\n 39\t\t\t}\n 40\t\n 41\t\t\treturn $entries->count() ? true : false;\n 42\t\t}\n 43\t\n 44\t\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\n 45\t\t{\n 46\t\t\t$startTime = microtime(true);\n 47\t\n 48\t\t\t$entries = $this->getEntries($container, $start);\n 49\t\t\tif (!$entries)\n 50\t\t\t{\n 51\t\t\t\treturn false;\n 52\t\t\t}\n 53\t\n 54\t\t\t$conditions = [];\n 55\t\t\tforeach ($entries AS $entry)\n 56\t\t\t{\n 57\t\t\t\t$conditions[] = [\n 58\t\t\t\t\t'type' => (string) $entry['type'],\n 59\t\t\t\t\t'title' => (string) $entry['title'],\n 60\t\t\t\t];\n 61\t\t\t}\n 62\t\t\tif ($conditions)\n 63\t\t\t{\n 64\t\t\t\t$existing = $this->finder()\n 65\t\t\t\t\t->whereOr($conditions)\n 66\t\t\t\t\t->where('style_id', 0)\n 67\t\t\t\t\t->fetch()\n 68\t\t\t\t\t->groupBy('type', 'title');\n 69\t\t\t}\n 70\t\t\telse\n 71\t\t\t{\n 72\t\t\t\t$existing = [];\n 73\t\t\t}\n 74\t\n 75\t\t\t$i = 0;\n 76\t\t\t$last = 0;\n 77\t\n 78\t\t\tforeach ($entries AS $entry)\n 79\t\t\t{\n 80\t\t\t\t$i++;\n 81\t\n 82\t\t\t\tif ($i <= $start)\n 83\t\t\t\t{\n 84\t\t\t\t\tcontinue;\n 85\t\t\t\t}\n 86\t\n 87\t\t\t\t$type = (string) $entry['type'];\n 88\t\t\t\t$title = (string) $entry['title'];\n 89\t\t\t\t$entity = $existing[$type][$title] ?? $this->create();\n 90\t\t\t\t$entity->setOption('check_duplicate', false);\n 91\t\t\t\t$entity->setOption('report_modification_errors', false);\n 92\t\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\n 93\t\n 94\t\t\t\t$this->importMappedAttributes($entry, $entity);\n 95\t\t\t\t$entity->style_id = 0;\n 96\t\t\t\t$entity->template = $this->getCdataValue($entry);\n 97\t\t\t\t$entity->addon_id = $addOnId;\n 98\t\t\t\t$entity->save(true, false);\n 99\t\n 100\t\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');\n 101\t\n 102\t\t\t\tif ($this->resume($maxRunTime, $startTime))\n 103\t\t\t\t{\n 104\t\t\t\t\t$last = $i;\n 105\t\t\t\t\tbreak;\n 106\t\t\t\t}\n 107\t\t\t}\n 108\t\t\treturn ($last ?: false);\n 109\t\t}\n 110\t\n 111\t\tpublic function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container)\n 112\t\t{\n 113\t\t\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\n 114\t\t\tif (!$existing)\n 115\t\t\t{\n"} +ABSTRACT_DATATYPE={"err":"","path":"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php","rc":0,"text":" 220\t\t\t\t\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\n 221\t\t\t\t\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\"]*$/si', $value))\n 222\t\t\t\t\t{\n 223\t\t\t\t\t\t// This exports CDATA, but does not escape `]]>` like \\XF\\Util\\XML::createDomCdataSection(),\n 224\t\t\t\t\t\t// because it needs to be transparently importable.\n 225\t\t\t\t\t\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\n 226\t\t\t\t\t\t// and remove this attribute from exportMappedAttributes()\n 227\t\n 228\t\t\t\t\t\t$newNode = $tag->ownerDocument->createElement($attr);\n 229\t\n 230\t\t\t\t\t\t$newNode->appendChild(\n 231\t\t\t\t\t\t\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\n 232\t\t\t\t\t\t);\n 233\t\n 234\t\t\t\t\t\t$tag->appendChild($newNode);\n 235\t\t\t\t\t}\n 236\t\t\t\t\telse\n 237\t\t\t\t\t{\n 238\t\t\t\t\t\t$tag->setAttribute($attr, $value);\n 239\t\t\t\t\t}\n 240\t\t\t\t}\n 241\t\t\t}\n 242\t\t}\n 243\t\n 244\t\tprotected function importMappedAttributes(\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\n 245\t\t{\n 246\t\t\tif ($entity->exists() && $allowMaintained)\n 247\t\t\t{\n 248\t\t\t\t$maintained = $this->getMaintainedAttributes();\n 249\t\t\t}\n 250\t\t\telse\n 251\t\t\t{\n 252\t\t\t\t$maintained = [];\n 253\t\t\t}\n 254\t\n 255\t\t\tforeach ($this->getMappedAttributes() AS $attr)\n 256\t\t\t{\n 257\t\t\t\tif (in_array($attr, $maintained))\n 258\t\t\t\t{\n 259\t\t\t\t\tcontinue;\n 260\t\t\t\t}\n 261\t\n 262\t\t\t\tif (self::USE_AUTO_CDATA)\n 263\t\t\t\t{\n 264\t\t\t\t\tif (isset($el[$attr]))\n 265\t\t\t\t\t{\n 266\t\t\t\t\t\t$entity->$attr = (string) $el[$attr];\n 267\t\t\t\t\t}\n 268\t\t\t\t\telse if (isset($el->{$attr}))\n 269\t\t\t\t\t{\n 270\t\t\t\t\t\t$entity->$attr = (string) $el->{$attr};\n 271\t\t\t\t\t}\n 272\t\t\t\t}\n 273\t\t\t\telse\n 274\t\t\t\t{\n 275\t\t\t\t\t$entity->$attr = (string) $el[$attr];\n 276\t\t\t\t}\n 277\t\t\t}\n 278\t\t}\n 279\t\n 280\t\tprotected function pluckXmlAttribute(\\SimpleXMLElement $els, $key)\n 281\t\t{\n 282\t\t\t$values = [];\n 283\t\t\t$i = 0;\n 284\t\t\tforeach ($els AS $el)\n 285\t\t\t{\n 286\t\t\t\t$values[$i++] = (string) $el[$key];\n 287\t\t\t}\n 288\t\n 289\t\t\treturn $values;\n 290\t\t}\n 291\t\n 292\t\tprotected function getSimpleAttributes(\\SimpleXMLElement $el)\n 293\t\t{\n 294\t\t\t$output = [];\n 295\t\t\tforeach ($el->attributes() AS $key => $val)\n 296\t\t\t{\n 297\t\t\t\t$output[$key] = (string) $val;\n 298\t\t\t}\n 299\t\t\treturn $output;\n 300\t\t}\n"} +ADDON_DATA_JOB={"err":"","path":"/var/www/forums/newfi/public/src/XF/Job/AddOnData.php","rc":0,"text":" 1\t null,\n 11\t\t\t'data_dir' => null,\n 12\t\n 13\t\t\t'data_types' => null,\n 14\t\t\t'current_type' => null,\n 15\t\n 16\t\t\t'start' => 0,\n 17\t\t];\n 18\t\n 19\t\tprotected $currentType = null;\n 20\t\tprotected $lastIndex = 0;\n 21\t\tprotected $totalEntries = 0;\n 22\t\n 23\t\tpublic function run($maxRunTime)\n 24\t\t{\n 25\t\t\tif ($this->data['addon_id'] != 'XF')\n 26\t\t\t{\n 27\t\t\t\t$addOnManager = $this->app->addOnManager();\n 28\t\t\t\t$addOn = $addOnManager->getById($this->data['addon_id']);\n 29\t\t\t\tif (!$addOn)\n 30\t\t\t\t{\n 31\t\t\t\t\t// add-on isn't installed, can't do anything\n 32\t\t\t\t\treturn $this->complete();\n 33\t\t\t\t}\n 34\t\n 35\t\t\t\tif ($this->data['data_dir'] === null)\n 36\t\t\t\t{\n 37\t\t\t\t\t$this->data['data_dir'] = $addOn->getDataDirectory();\n 38\t\t\t\t}\n 39\t\t\t}\n 40\t\t\telse\n 41\t\t\t{\n 42\t\t\t\t$addOn = null; // don't populate this for XF since it wouldn't be the same type of object\n 43\t\n 44\t\t\t\tif ($this->data['data_dir'] === null)\n 45\t\t\t\t{\n 46\t\t\t\t\t$ds = \\XF::$DS;\n 47\t\t\t\t\t$this->data['data_dir'] = \\XF::getAddOnDirectory() . $ds . 'XF' . $ds . '_data';\n 48\t\t\t\t}\n 49\t\t\t}\n 50\t\n 51\t\t\t$dataManager = $this->app->addOnDataManager();\n 52\t\n 53\t\t\t$addOnId = $this->data['addon_id'];\n 54\t\t\t$dataDir = $this->data['data_dir'];\n 55\t\n 56\t\t\tif ($this->data['data_types'] === null)\n 57\t\t\t{\n 58\t\t\t\t$dataTypes = $dataManager->getDataTypeClasses();\n 59\t\t\t\tforeach ($dataTypes AS $key => $dataType)\n 60\t\t\t\t{\n 61\t\t\t\t\t$handler = $dataManager->getDataTypeHandler($dataType);\n 62\t\t\t\t\t$xml = $handler->openTypeFile($dataDir);\n 63\t\t\t\t\tif (!$xml || !$xml->count())\n 64\t\t\t\t\t{\n 65\t\t\t\t\t\t// We can skip this type entirely, but clean up any existing data first\n 66\t\t\t\t\t\t$handler->deleteAddOnData($addOnId);\n 67\t\t\t\t\t\tunset($dataTypes[$key]);\n 68\t\t\t\t\t}\n 69\t\t\t\t}\n 70\t\t\t\t$this->data['data_types'] = $dataTypes;\n 71\t\t\t}\n 72\t\n 73\t\t\tif (!$this->data['current_type'])\n 74\t\t\t{\n 75\t\t\t\t$this->data['current_type'] = array_shift($this->data['data_types']);\n 76\t\t\t\tif (!$this->data['current_type'])\n 77\t\t\t\t{\n 78\t\t\t\t\tif ($addOn)\n 79\t\t\t\t\t{\n 80\t\t\t\t\t\t$addOn->postDataImport();\n 81\t\t\t\t\t}\n 82\t\n 83\t\t\t\t\t$repo = $this->app->repository(StyleRepository::class);\n 84\t\t\t\t\t$repo->updateAllStylesLastModifiedDateLater();\n 85\t\n 86\t\t\t\t\treturn $this->complete();\n 87\t\t\t\t}\n 88\t\n 89\t\t\t\t$this->data['start'] = 0;\n 90\t\t\t}\n 91\t\n 92\t\t\t$start = $this->data['start'];\n 93\t\t\t$type = $this->data['current_type'];\n 94\t\n 95\t\t\t$handler = $dataManager->getDataTypeHandler($type);\n 96\t\n 97\t\t\t$this->currentType = $handler->getContainerTag();\n 98\t\t\t$this->lastIndex = $start;\n 99\t\n 100\t\t\t$xml = $handler->openTypeFile($dataDir);\n 101\t\t\tif (!$xml || !$xml->count())\n 102\t\t\t{\n 103\t\t\t\t// No data so skip and delete existing data for type (if any)\n 104\t\t\t\t$this->data['current_type'] = null;\n 105\t\t\t\t$handler->deleteAddOnData($addOnId);\n 106\t\t\t\treturn $this->resume();\n 107\t\t\t}\n 108\t\n 109\t\t\t$this->totalEntries = $xml->count();\n 110\t\n 111\t\t\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\n 112\t\t\tif (!$last)\n 113\t\t\t{\n 114\t\t\t\t// finished type, delete any existing data not in the XML file for this type\n 115\t\t\t\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\n 116\t\n 117\t\t\t\t\\XF::triggerRunOnce();\n 118\t\t\t\t$this->data['current_type'] = null;\n 119\t\t\t\treturn $this->resume();\n 120\t\t\t}\n 121\t\n 122\t\t\t$this->data['start'] = $last;\n 123\t\t\treturn $this->resume();\n 124\t\t}\n 125\t\n 126\t\tpublic function getStatusMessage()\n 127\t\t{\n 128\t\t\t// TODO: These (and the types) probably should be phrased\n 129\t\t\t$actionPhrase = 'Importing';\n 130\t\t\tif ($this->data['addon_id'] == 'XF')\n 131\t\t\t{\n 132\t\t\t\t$typePhrase = 'Master data';\n 133\t\t\t}\n 134\t\t\telse\n 135\t\t\t{\n 136\t\t\t\t$typePhrase = 'Add-on data';\n 137\t\t\t}\n 138\t\n 139\t\t\t$currentType = null;\n 140\t\t\tif ($this->currentType)\n 141\t\t\t{\n 142\t\t\t\t$currentType = ucfirst(str_replace('_', ' ', $this->currentType));\n 143\t\t\t}\n 144\t\n 145\t\t\tif ($currentType && $this->lastIndex)\n 146\t\t\t{\n 147\t\t\t\t$percentage = $this->app->language()->numberFormat(($this->lastIndex / $this->totalEntries) * 100, 1);\n 148\t\t\t\treturn sprintf('%s... %s (%s: %s%%)', $actionPhrase, $typePhrase, $currentType, $percentage);\n 149\t\t\t}\n 150\t\t\telse if ($currentType)\n 151\t\t\t{\n 152\t\t\t\treturn sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);\n 153\t\t\t}\n 154\t\t\telse\n 155\t\t\t{\n 156\t\t\t\treturn sprintf('%s... %s', $actionPhrase, $typePhrase);\n 157\t\t\t}\n 158\t\t}\n 159\t\n 160\t\tpublic function canCancel()\n 161\t\t{\n 162\t\t\treturn false;\n 163\t\t}\n 164\t\n 165\t\tpublic function canTriggerByChoice()\n 166\t\t{\n 167\t\t\treturn false;\n 168\t\t}\n 169\t}\n"} +ENTITY_CORE={"err":"","path":"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php","rc":0,"text":" 520\t\t\t\t{\n 521\t\t\t\t\tthrow new \\InvalidArgumentException(\"To many relations must be hydrated with collections\");\n 522\t\t\t\t}\n 523\t\t\t}\n 524\t\t\telse\n 525\t\t\t{\n 526\t\t\t\tif ($value !== null && !($value instanceof Entity))\n 527\t\t\t\t{\n 528\t\t\t\t\tthrow new \\InvalidArgumentException(\"To one relations must be hydrated with entities or null\");\n 529\t\t\t\t}\n 530\t\t\t}\n 531\t\n 532\t\t\t$this->_relations[$key] = $value;\n 533\t\t}\n 534\t\n 535\t\tpublic function getExistingRelation($key)\n 536\t\t{\n 537\t\t\t$relations = $this->_structure->relations;\n 538\t\n 539\t\t\tif (empty($relations[$key]))\n 540\t\t\t{\n 541\t\t\t\tthrow new \\InvalidArgumentException(\"Unknown relation $key\");\n 542\t\t\t}\n 543\t\n 544\t\t\treturn $this->_em->getRelation($relations[$key], $this, 'existing');\n 545\t\t}\n 546\t\n 547\t\tpublic function getRelationFinder($key, $type = 'current')\n 548\t\t{\n 549\t\t\t$relations = $this->_structure->relations;\n 550\t\n 551\t\t\tif (empty($relations[$key]))\n 552\t\t\t{\n 553\t\t\t\tthrow new \\InvalidArgumentException(\"Unknown relation $key\");\n 554\t\t\t}\n 555\t\n 556\t\t\treturn $this->_em->getRelationFinder($relations[$key], $this, $type);\n 557\t\t}\n 558\t\n 559\t\tpublic function toArray($allowGetters = true)\n 560\t\t{\n 561\t\t\t$output = [];\n 562\t\t\tforeach ($this->_structure->columns AS $key => $null)\n 563\t\t\t{\n 564\t\t\t\t$output[$key] = $allowGetters ? $this->get($key) : $this->getValue($key);\n 565\t\t\t}\n 566\t\n 567\t\t\treturn $output;\n 568\t\t}\n 569\t\n 570\t\tfinal public function toApiResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\n 571\t\t{\n 572\t\t\t$result = new EntityResult($this);\n 573\t\t\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\n 574\t\n 575\t\t\tif ($subResult instanceof EntityResultInterface)\n 576\t\t\t{\n 577\t\t\t\treturn $subResult;\n 578\t\t\t}\n 579\t\t\telse\n 580\t\t\t{\n 581\t\t\t\treturn $result;\n 582\t\t\t}\n 583\t\t}\n 584\t\n 585\t\tfinal public function toWebhookResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\n 586\t\t{\n 587\t\t\t$result = new EntityResult($this, EntityResultInterface::TYPE_WEBHOOK);\n 588\t\t\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\n 589\t\n 590\t\t\tif ($subResult instanceof EntityResultInterface)\n 591\t\t\t{\n 592\t\t\t\treturn $subResult;\n 593\t\t\t}\n 594\t\n 595\t\t\treturn $result;\n 596\t\t}\n 597\t\n 598\t\t/**\n 599\t\t * This method must be overridden to enable API access to this entity.\n 600\t\t *\n 601\t\t * @param EntityResult $result\n 602\t\t * @param int $verbosity\n 603\t\t * @param array $options\n 604\t\t */\n 605\t\tprotected function setupApiResultData(\n 606\t\t\tEntityResult $result,\n 607\t\t\t$verbosity = self::VERBOSITY_NORMAL,\n 608\t\t\tarray $options = []\n 609\t\t)\n 610\t\t{\n 611\t\t\tthrow new \\LogicException(\n 612\t\t\t\t\"API result rules not defined by \" . $this->_structure->shortName . '. Override setupApiResultData().'\n 613\t\t\t);\n 614\t\t}\n 615\t\n 616\t\tpublic function __set($key, $value)\n 617\t\t{\n 618\t\t\t$this->set($key, $value);\n 619\t\t}\n 620\t\n 621\t\tpublic function offsetSet($key, $value): void\n 622\t\t{\n 623\t\t\t$this->set($key, $value);\n 624\t\t}\n 625\t\n 626\t\tpublic function set($key, $value, array $options = [])\n 627\t\t{\n 628\t\t\tif ($this->_readOnly)\n 629\t\t\t{\n 630\t\t\t\tthrow new \\LogicException(\"Entity is read only\");\n 631\t\t\t}\n 632\t\n 633\t\t\tif ($this->_deleted)\n 634\t\t\t{\n 635\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' on a deleted entity\");\n 636\t\t\t}\n 637\t\n 638\t\t\tif ($this->_writePending == 'delete')\n 639\t\t\t{\n 640\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\n 641\t\t\t}\n 642\t\n 643\t\t\tif ($this->_writePending && empty($options['forceSet']))\n 644\t\t\t{\n 645\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\n 646\t\t\t}\n 647\t\n 648\t\t\tif (!isset($this->_structure->columns[$key]))\n 649\t\t\t{\n 650\t\t\t\tif (empty($options['skipInvalid']))\n 651\t\t\t\t{\n 652\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 653\t\t\t\t}\n 654\t\t\t\treturn false;\n 655\t\t\t}\n 656\t\n 657\t\t\t$column = $this->_structure->columns[$key];\n 658\t\n 659\t\t\tif ((!empty($column['readOnly']) || !empty($column['autoIncrement'])) && empty($options['forceSet']))\n 660\t\t\t{\n 661\t\t\t\tif (empty($options['skipInvalid']))\n 662\t\t\t\t{\n 663\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is read only, can only be set with forceSet\");\n 664\t\t\t\t}\n 665\t\t\t\treturn false;\n 666\t\t\t}\n 667\t\n 668\t\t\tif (!empty($column['writeOnce']) && $this->isUpdate() && empty($options['forceSet']))\n 669\t\t\t{\n 670\t\t\t\tif (empty($options['skipInvalid']))\n 671\t\t\t\t{\n 672\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' can only be written on insert or set with forceSet\");\n 673\t\t\t\t}\n 674\t\t\t\treturn false;\n 675\t\t\t}\n 676\t\n 677\t\t\tif ($value instanceof DeferredValue)\n 678\t\t\t{\n 679\t\t\t\t$this->_setInternal($key, $value);\n 680\t\t\t\treturn true;\n 681\t\t\t}\n 682\t\n 683\t\t\tif (!$this->_verifyValueCustom($value, $key, $column['type'], $column))\n 684\t\t\t{\n 685\t\t\t\treturn false;\n 686\t\t\t}\n 687\t\n 688\t\t\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\n 689\t\n 690\t\t\tif (!$this->_em->getValueFormatter()->applyValueConstraints(\n 691\t\t\t\t$value,\n 692\t\t\t\t$column['type'],\n 693\t\t\t\t$column,\n 694\t\t\t\t$constraintError,\n 695\t\t\t\t!empty($options['forceConstraint'])\n 696\t\t\t))\n 697\t\t\t{\n 698\t\t\t\tif ($constraintError)\n 699\t\t\t\t{\n 700\t\t\t\t\t$this->error($constraintError, $key, false);\n 701\t\t\t\t}\n 702\t\n 703\t\t\t\treturn false;\n 704\t\t\t}\n 705\t\n 706\t\t\tif ($this->_columnValueIsDifferent($key, $value, $column) && $value !== null)\n 707\t\t\t{\n 708\t\t\t\tif (!empty($column['unique']))\n 709\t\t\t\t{\n 710\t\t\t\t\tif (!$this->_verifyUniqueValue($value, $key, $column['unique']))\n 711\t\t\t\t\t{\n 712\t\t\t\t\t\treturn false;\n 713\t\t\t\t\t}\n 714\t\t\t\t}\n 715\t\t\t\telse if (!empty($column['autoIncrement']) || $this->_structure->primaryKey === $key)\n 716\t\t\t\t{\n 717\t\t\t\t\tif (!$this->_verifyUniqueValue($value, $key, true))\n 718\t\t\t\t\t{\n 719\t\t\t\t\t\treturn false;\n 720\t\t\t\t\t}\n 721\t\t\t\t}\n 722\t\t\t}\n 723\t\n 724\t\t\t$this->_setInternal($key, $value);\n 725\t\t\treturn true;\n 726\t\t}\n 727\t\n 728\t\tpublic function setTrusted($key, $value)\n 729\t\t{\n 730\t\t\tif (!isset($this->_structure->columns[$key]))\n 731\t\t\t{\n 732\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 733\t\t\t}\n 734\t\n 735\t\t\t$column = $this->_structure->columns[$key];\n 736\t\t\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\n 737\t\n 738\t\t\t$this->_setInternal($key, $value);\n 739\t\t\treturn true;\n 740\t\t}\n 741\t\n 742\t\tpublic function setFromEncoded($key, $value, array $options = [])\n 743\t\t{\n 744\t\t\tif (!isset($this->_structure->columns[$key]))\n 745\t\t\t{\n 746\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 747\t\t\t}\n 748\t\n 749\t\t\t$column = $this->_structure->columns[$key];\n 750\t\n 751\t\t\t$value = $this->_em->decodeValueFromSourceExtended($column['type'], $value, $column);\n 752\t\t\treturn $this->set($key, $value, $options);\n 753\t\t}\n 754\t\n 755\t\tpublic function setAsSaved($key, $value)\n 756\t\t{\n 757\t\t\tif (!$this->exists() && !$this->_writeRunning)\n 758\t\t\t{\n 759\t\t\t\tthrow new \\LogicException(\"Can only set an already saved value on a saved entity\");\n 760\t\t\t}\n"} +TEMPLATE_ENTITY={"err":"","path":"/var/www/forums/newfi/public/src/XF/Entity/Template.php","rc":0,"text":" 1\t $History\n 44\t * @property-read Style|null $Style_\n 45\t */\n 46\tclass Template extends Entity\n 47\t{\n 48\t\tprotected $modificationStatuses = null;\n 49\t\n 50\t\t/**\n 51\t\t * @return string\n 52\t\t */\n 53\t\tpublic function getCombinedTitle()\n 54\t\t{\n 55\t\t\treturn \"{$this->type}:{$this->title}\";\n 56\t\t}\n 57\t\n 58\t\t/**\n 59\t\t * @return Style\n 60\t\t */\n 61\t\tpublic function getStyle()\n 62\t\t{\n 63\t\t\tif ($this->style_id == 0)\n 64\t\t\t{\n 65\t\t\t\treturn $this->getStyleRepo()->getMasterStyle();\n 66\t\t\t}\n 67\t\t\telse\n 68\t\t\t{\n 69\t\t\t\treturn $this->getRelation('Style');\n 70\t\t\t}\n 71\t\t}\n 72\t\n 73\t\t/**\n 74\t\t * @return Template|null\n 75\t\t */\n 76\t\tpublic function getParentTemplate()\n 77\t\t{\n 78\t\t\tif (!$this->style_id)\n 79\t\t\t{\n 80\t\t\t\treturn null;\n 81\t\t\t}\n 82\t\n 83\t\t\t$style = $this->Style;\n 84\t\t\tif (!$style)\n 85\t\t\t{\n 86\t\t\t\treturn null;\n 87\t\t\t}\n 88\t\n 89\t\t\t$templateMap = $this->finder(TemplateMapFinder::class)\n 90\t\t\t\t->where([\n 91\t\t\t\t\t'style_id' => $style->parent_id,\n 92\t\t\t\t\t'type' => $this->type,\n 93\t\t\t\t\t'title' => $this->title,\n 94\t\t\t\t])\n 95\t\t\t\t->with('Template', true)\n 96\t\t\t\t->with('Template.Style', false)\n 97\t\t\t\t->fetchOne();\n 98\t\t\tif (!$templateMap)\n 99\t\t\t{\n 100\t\t\t\treturn null;\n 101\t\t\t}\n 102\t\n 103\t\t\treturn $templateMap->Template;\n 104\t\t}\n 105\t\n 106\t\tpublic function getAbstractedCompiledTemplatePath($languageId, $styleId, $new = true)\n 107\t\t{\n 108\t\t\t$title = $new ? $this->getValue('title') : $this->getExistingValue('title');\n 109\t\t\t$type = $new ? $this->getValue('type') : $this->getExistingValue('type');\n 110\t\n 111\t\t\treturn 'code-cache://templates/l' . $languageId . '/s' . $styleId . '/' . $type . '/' . $title . '.php';\n 112\t\t}\n 113\t\n 114\t\tpublic function getHash()\n 115\t\t{\n 116\t\t\t$contents = str_replace(\"\\r\", '', $this->template);\n 117\t\t\treturn md5($contents);\n 118\t\t}\n 119\t\n 120\t\t/**\n 121\t\t * @return array\n 122\t\t */\n 123\t\tpublic function getPhrasesUsed()\n 124\t\t{\n 125\t\t\treturn $this->db()->fetchAllColumn(\"\n 126\t\t\t\tSELECT phrase_title\n 127\t\t\t\tFROM xf_template_phrase\n 128\t\t\t\tWHERE template_id = ?\n 129\t\t\t\", $this->template_id);\n 130\t\t}\n 131\t\n 132\t\tpublic function reparseTemplate($forceValid = false, &$error = null)\n 133\t\t{\n 134\t\t\t$valid = $this->validateTemplateText($this->template, $forceValid, $ast, $error);\n 135\t\t\tif ($valid && $ast != $this->template_parsed)\n 136\t\t\t{\n 137\t\t\t\t$this->template_parsed = $ast;\n 138\t\t\t\treturn true;\n 139\t\t\t}\n 140\t\t\tif (!$valid)\n 141\t\t\t{\n 142\t\t\t\t$this->error($error, 'template');\n 143\t\t\t\treturn true;\n 144\t\t\t}\n 145\t\n 146\t\t\treturn false;\n 147\t\t}\n 148\t\n 149\t\tpublic function setTemplateUnchecked($template)\n 150\t\t{\n 151\t\t\t$template = strval($template);\n 152\t\t\t$this->_setInternal('template', $template);\n 153\t\t\t$this->validateTemplateText($template, true, $ast);\n 154\t\n 155\t\t\t$this->template_parsed = $ast;\n 156\t\n 157\t\t\treturn true;\n 158\t\t}\n 159\t\n 160\t\tprotected function verifyTitle($title)\n 161\t\t{\n 162\t\t\tif (substr($title, 0, 1) == '.' || strpos($title, '..') !== false)\n 163\t\t\t{\n 164\t\t\t\t$this->error(\\XF::phrase('please_enter_title_using_only_alphanumeric_dot'), 'title');\n 165\t\t\t\treturn false;\n 166\t\t\t}\n 167\t\n 168\t\t\tif (preg_match('/\\.html$/i', $title))\n 169\t\t\t{\n 170\t\t\t\t$this->error(\\XF::phrase('template_titles_may_not_end_in_html'), 'title');\n 171\t\t\t\treturn false;\n 172\t\t\t}\n 173\t\n 174\t\t\treturn true;\n 175\t\t}\n 176\t\n 177\t\tprotected function verifyTemplate($template)\n 178\t\t{\n 179\t\t\t$valid = $this->validateTemplateText($template, false, $ast, $error);\n 180\t\t\tif (!$valid)\n 181\t\t\t{\n 182\t\t\t\t$this->error($error, 'template');\n 183\t\t\t\treturn false;\n 184\t\t\t}\n 185\t\n 186\t\t\t$this->template_parsed = $ast;\n 187\t\n 188\t\t\treturn true;\n 189\t\t}\n 190\t\n 191\t\tprotected function validateTemplateText($template, $forceValid = false, &$ast = null, &$error = null)\n 192\t\t{\n 193\t\t\t$compiler = $this->app()->templateCompiler();\n 194\t\n 195\t\t\t$templateModRepo = $this->repository(TemplateModificationRepository::class);\n 196\t\t\t$templateWithModifications = $templateModRepo->applyModificationsToTemplate(\n 197\t\t\t\t$this->type,\n 198\t\t\t\t$this->title,\n 199\t\t\t\t$template,\n 200\t\t\t\t$modificationStatuses\n 201\t\t\t);\n 202\t\n 203\t\t\t$standardParse = true;\n 204\t\t\t$error = null;\n 205\t\n 206\t\t\tif ($modificationStatuses)\n 207\t\t\t{\n 208\t\t\t\ttry\n 209\t\t\t\t{\n 210\t\t\t\t\t$ast = $compiler->compileToAst($templateWithModifications);\n 211\t\n 212\t\t\t\t\tif ($this->getOption('test_compile'))\n 213\t\t\t\t\t{\n 214\t\t\t\t\t\t$compiler->compileAst($ast);\n 215\t\t\t\t\t}\n 216\t\t\t\t\t$standardParse = false;\n 217\t\t\t\t}\n 218\t\t\t\tcatch (Exception $e)\n 219\t\t\t\t{\n 220\t\t\t\t\t$error = $e->getMessage() . ' - ' . \\XF::phrase('template_modifications:') . ' ' . \"{$this->type}:{$this->title}\";\n 221\t\t\t\t\tforeach ($modificationStatuses AS &$status)\n 222\t\t\t\t\t{\n 223\t\t\t\t\t\tif (is_int($status))\n 224\t\t\t\t\t\t{\n 225\t\t\t\t\t\t\t$status = 'error_compile';\n 226\t\t\t\t\t\t}\n 227\t\t\t\t\t}\n 228\t\t\t\t}\n 229\t\t\t}\n 230\t\n 231\t\t\tif ($standardParse)\n 232\t\t\t{\n 233\t\t\t\ttry\n 234\t\t\t\t{\n 235\t\t\t\t\t$ast = $compiler->compileToAst($template);\n 236\t\n 237\t\t\t\t\tif ($this->getOption('test_compile'))\n 238\t\t\t\t\t{\n 239\t\t\t\t\t\t$compiler->compileAst($ast);\n 240\t\t\t\t\t}\n 241\t\n 242\t\t\t\t\tif ($forceValid || !$this->getOption('report_modification_errors'))\n 243\t\t\t\t\t{\n 244\t\t\t\t\t\t$error = null;\n 245\t\t\t\t\t}\n 246\t\t\t\t}\n 247\t\t\t\tcatch (Exception $e)\n 248\t\t\t\t{\n 249\t\t\t\t\t$error = $e->getMessage() . ' - ' . \\XF::phrase('template_name:') . ' ' . \"{$this->type}:{$this->title}\";\n 250\t\t\t\t}\n 251\t\t\t}\n 252\t\n 253\t\t\tif ($forceValid && $error)\n 254\t\t\t{\n 255\t\t\t\t$error = null;\n 256\t\t\t\t$ast = $compiler->stringAst($template);\n 257\t\t\t}\n 258\t\n 259\t\t\tif ($error)\n 260\t\t\t{\n"} +ENTITY_WRITE_PENDING_ALL={"err":"","rc":0,"text":"76-\n77-\tprotected $_options = [];\n78-\n79-\tprotected $_deleted = false;\n80-\n81-\tprotected $_readOnly = false;\n82:\tprotected $_writePending = false;\n83-\tprotected $_writeRunning = false;\n84-\tprotected $_errors = [];\n85-\n86-\t/**\n87-\t * @var \\Closure[]\n88-\t */\n--\n632-\n633-\t\tif ($this->_deleted)\n634-\t\t{\n635-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' on a deleted entity\");\n636-\t\t}\n637-\n638:\t\tif ($this->_writePending == 'delete')\n639-\t\t{\n640-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\n641-\t\t}\n642-\n643:\t\tif ($this->_writePending && empty($options['forceSet']))\n644-\t\t{\n645-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\n646-\t\t}\n647-\n648-\t\tif (!isset($this->_structure->columns[$key]))\n649-\t\t{\n--\n1365-\t}\n1366-\n1367-\tfinal public function saveIfChanged(&$saved = null, $throw = true, $newTransaction = true)\n1368-\t{\n1369-\t\tif (!$this->_newValues && $this->isUpdate())\n1370-\t\t{\n1371:\t\t\t$this->_writePending = false;\n1372-\n1373-\t\t\t$saved = false;\n1374-\t\t\treturn true;\n1375-\t\t}\n1376-\n1377-\t\t$saved = true;\n--\n1412-\t\t$this->db()->update($this->_structure->table, $dbUpdate, $condition);\n1413-\t}\n1414-\n1415-\tfinal public function preSave()\n1416-\t{\n1417-\t\t// write will be pending after calling this; this means call it only once\n1418:\t\tif ($this->_writePending != 'save')\n1419-\t\t{\n1420-\t\t\t$this->_fillDeferredValues('preSave');\n1421-\t\t\t$this->_preSave();\n1422-\n1423-\t\t\tforeach ($this->getBehaviors() AS $behavior)\n1424-\t\t\t{\n--\n1453-\t\t\tif ($this->isInsert())\n1454-\t\t\t{\n1455-\t\t\t\t$this->_fillInsertDefaults();\n1456-\t\t\t}\n1457-\t\t\t$this->_validateRequirements();\n1458-\n1459:\t\t\t$this->_writePending = 'save';\n1460-\t\t}\n1461-\n1462-\t\treturn count($this->_errors) == 0;\n1463-\t}\n1464-\n1465-\tprotected function _preSave()\n--\n1610-\tprotected function _postSave()\n1611-\t{\n1612-\t}\n1613-\n1614-\tprotected function _saveCleanUp(array $newDbValues)\n1615-\t{\n1616:\t\t$this->_writePending = false;\n1617-\t\t$this->_writeRunning = false;\n1618-\t\t$this->_previousValues = $this->_values;\n1619-\t\t$this->_values = array_merge($this->_values, $newDbValues);\n1620-\t\t$this->_newValues = [];\n1621-\t\t$this->_errors = [];\n1622-\t\t$this->_cascadeSave = [];\n--\n1633-\t\t\t$fn($this);\n1634-\t\t}\n1635-\t}\n1636-\n1637-\tpublic function reset()\n1638-\t{\n1639:\t\t$this->_writePending = false;\n1640-\t\t$this->_newValues = [];\n1641-\t\t$this->_errors = [];\n1642-\t\t$this->_getterCache = [];\n1643-\t\t$this->_valueCache = [];\n1644-\t\t$this->_options = [];\n1645-\t\t$this->_cascadeSave = [];\n--\n1736-\t\tif ($newTransaction)\n1737-\t\t{\n1738-\t\t\t$db->commit();\n1739-\t\t}\n1740-\n1741-\t\t$this->_em->detachEntity($this);\n1742:\t\t$this->_writePending = false;\n1743-\t\t$this->_writeRunning = false;\n1744-\n1745-\t\treturn true;\n1746-\t}\n1747-\n1748-\tfinal public function preDelete()\n1749-\t{\n1750-\t\tif ($this->_deleted)\n1751-\t\t{\n1752-\t\t\treturn true;\n1753-\t\t}\n1754-\n1755:\t\tif ($this->_writePending != 'delete')\n1756-\t\t{\n1757-\t\t\t$this->_preDelete();\n1758-\n1759-\t\t\tforeach ($this->getBehaviors() AS $behavior)\n1760-\t\t\t{\n1761-\t\t\t\t$behavior->preDelete();\n--\n1804-\t\t\t\t\t\t}\n1805-\t\t\t\t\t}\n1806-\t\t\t\t}\n1807-\t\t\t}\n1808-\n1809-\t\t\t$this->_em->finishCascadeEvent('preDelete');\n1810:\t\t\t$this->_writePending = 'delete';\n1811-\t\t}\n1812-\n1813-\t\treturn count($this->_errors) == 0;\n1814-\t}\n1815-\n1816-\tpublic function isDeleted()\n"} +DB_SCHEMAS=["xf_newfi"] +TEMPLATE_INDEXES={"err":"","rc":0,"rows":["xf_template\t0\tPRIMARY\t1\ttemplate_id\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t1\ttype\tA\t6\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t2\ttitle\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t3\tstyle_id\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO"]} +TEMPLATE_ROWS={"err":"","rc":0,"rows":["1610\t0\tpublic\tnewfi_portal\tNewfi/Portal\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741"]} +ADDON_ROW={"err":"","rc":0,"rows":["Newfi/Portal\t1000010\t1.0.0 Alpha 1\t1\t0\tNULL"]} +ERROR42={"err":"","rc":0,"rows":["42\tLogicException\tAttempted to set 'type' while a save was pending without forceSet\tsrc/XF/Mvc/Entity/Entity.php\t645\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\Mvc\\\\Entity\\\\Entity->set('type', 'public')\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\Mvc\\\\Entity\\\\Entity->__set('type', 'public')\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\AddOn\\\\DataType\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\Entity\\\\Template))\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\AddOn\\\\DataType\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\n#4 src/XF/Job/Manager.php(275): XF\\\\Job\\\\AddOnData->run(8)\\n#5 src/XF/Job/Manager.php(205): XF\\\\Job\\\\Manager->runJobInternal(Array, 8)\\n#6 src/XF/Job/Manager.php(174): XF\\\\Job\\\\Manager->runJobEntry(Array, 8)\\n#7 src/XF/Cli/Runner.php(228): XF\\\\Job\\\\Manager->runById(530, 8)\\n#8 src/XF/Cli/Runner.php(116): XF\\\\Cli\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\\n#9 cmd.php(17): XF\\\\Cli\\\\Runner->run()\\n#10 {main}"]} +IN_MEMORY_ENTITY_PROBE={"err":"","rc":0,"rows":["{\"label\":\"initial\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_check_duplicate_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_report_modification_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_behavior_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_title\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_type\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_version_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_version_string\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_style_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_addon_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}"]} +NATIVE_REBUILD_IMPLEMENTATION_GREP={"err":"","rc":0,"text":"/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:16:use XF\\Job\\AddOnData;\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:150:\tprotected function importAddOnData(InputInterface $input, OutputInterface $output, AddOn $addOn)\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:171:\t\t\t\t'xfAddOnData-' . $addOn->addon_id,\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:172:\t\t\t\tAddOnData::class,\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:219:\t\t\t'xf:addon-sub-action',\n/var/www/forums/newfi/public/src/XF/Cli/Command/Designer/RebuildMetadata.php:11:class RebuildMetadata extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildUsers.php:7:class RebuildUsers extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSearch.php:8:class RebuildSearch extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractRebuildCommand.php:11:abstract class AbstractRebuildCommand extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildAttachmentThumbs.php:7:class RebuildAttachmentThumbs extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildForums.php:7:class RebuildForums extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildThreads.php:8:class RebuildThreads extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildStats.php:8:class RebuildStats extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildReactionScore.php:7:class RebuildReactionScore extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildIconUsage.php:7:class RebuildIconUsage extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildMessageCounts.php:7:class RebuildMessageCounts extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSitemap.php:7:class RebuildSitemap extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractImageOptimizationCommand.php:7:abstract class AbstractImageOptimizationCommand extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/RebuildMasterData.php:10:class RebuildMasterData extends AbstractCommand implements CustomAppCommandInterface\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:18:\t\t\t->setName('xf:addon-sub-action')\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:66:\t\t\t\t\t$this->importAddOnData($input, $output, $addOn);\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:12:class AddOnRebuild extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:20:\t\t\t->setName('xf:addon-rebuild')\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/AbstractImportCommand.php:87:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/LintTemplates.php:39:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/GeneratePhpStormMeta.php:145:\t\t\t'AddOnDataType' => [\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildMetadata.php:9:class RebuildMetadata extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildCaches.php:11:class RebuildCaches extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/SyncTemplates.php:37:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildPosts.php:7:class RebuildPosts extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePosts.php:7:class RebuildProfilePosts extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildConversationMessages.php:7:class RebuildConversationMessages extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePostComments.php:7:class RebuildProfilePostComments extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:40:\t\t\t\t\t$dataManager->finalizeRemoveAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:52:\t\t\t$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);\n/var/www/forums/newfi/public/src/XF/Job/Poll.php:7:class Poll extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/SearchRebuild.php:9:class SearchRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AttachmentThumb.php:10:class AttachmentThumb extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/StylePropertyRebuild.php:7:class StylePropertyRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/MessageCount.php:8:class MessageCount extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Thread.php:7:class Thread extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuildPartial.php:7:class PermissionRebuildPartial extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AbstractImageOptimizationJob.php:7:abstract class AbstractImageOptimizationJob extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/SearchForum.php:8:class SearchForum extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Forum.php:5:class Forum extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuild.php:9:class PermissionRebuild extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/AbstractRebuildJob.php:5:abstract class AbstractRebuildJob extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/ProfilePost.php:5:class ProfilePost extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/CoreCacheRebuild.php:31:class CoreCacheRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/StyleAssetRebuild.php:7:class StyleAssetRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/PhraseRebuild.php:12:class PhraseRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:7:class AddOnData extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:66:\t\t\t\t\t$handler->deleteAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:105:\t\t\t$handler->deleteAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:111:\t\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:115:\t\t\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\n/var/www/forums/newfi/public/src/XF/Job/Gravatar.php:10:class Gravatar extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Conversation.php:7:class Conversation extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/TemplateRebuild.php:12:class TemplateRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/User.php:9:class User extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnInstallBatch.php:341:\t\t$job = $this->app->job(AddOnData::class, 0, $params['data']);\n/var/www/forums/newfi/public/src/XF/Job/ReactionScore.php:7:class ReactionScore extends AbstractRebuildJob\n"} +STAGING_QGA={"err":"","hostname":"newfi-staging","rc":0} +PRODUCTION_QGA={"err":"","hostname":"newfi-prod","rc":0} +PRODUCTION_PUBLIC_HTTP={"err":"","http":"200","rc":0} +STAGING_LOCAL_HTTP={"err":"","http":"503","rc":0} +FINAL_DECISION=RCA7_COMPLETE_NO_MUTATION_ALL_REMAINING_TEMPLATE_IMPORT_EVIDENCE_READY +RCA7_END=true + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 1567dfd9..9856cf59 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA6", + "command_id": "NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "newfi-portal200-template-core-lines-rca", - "started_at_utc": "2026-09-07T21:17:12Z", - "finished_at_utc": "2026-09-07T21:17:17Z", + "component": "newfi-portal200-consolidated-final-template-rca", + "started_at_utc": "2026-09-07T21:21:30Z", + "finished_at_utc": "2026-09-07T21:21:51Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "84df0e67fb91124a9acfd1c41458b9febc7e743d2c0fba447b0d74a110e353c3", + "command_sha256": "c5f396b50e88cd61820fa8cdbca3f34d37dc259b18372b37317ac6fdb2a7c1ae", "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": "91750f7eda8b481c871c034b78e691a7e5ae061d9c797556abbc8d713a18534f", - "sanitized_output_sha256": "91750f7eda8b481c871c034b78e691a7e5ae061d9c797556abbc8d713a18534f", + "raw_evidence_sha256": "37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273", + "sanitized_output_sha256": "37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "RCA6_BEGIN=true\nCOMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA6\nMUTATION_SCOPE=NONE_READ_ONLY\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nRCA5_HISTORY_SHA256=6cec5749e70ada07962405e451e27090595139a53467c42f191af36de5182d17\nRCA5_STATUS=OK\nGIT_HEAD=06bab5acd124e768f70305b3d7eca2f595871890\nGIT_STATUS=\nGIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890\nTEMPLATE_READ_RC=0\nTEMPLATE_LINE_72=$existing = [];\nTEMPLATE_LINE_73=}\nTEMPLATE_LINE_74=\nTEMPLATE_LINE_75=$i = 0;\nTEMPLATE_LINE_76=$last = 0;\nTEMPLATE_LINE_77=\nTEMPLATE_LINE_78=foreach ($entries AS $entry)\nTEMPLATE_LINE_79={\nTEMPLATE_LINE_80=$i++;\nTEMPLATE_LINE_81=\nTEMPLATE_LINE_82=if ($i <= $start)\nTEMPLATE_LINE_83={\nTEMPLATE_LINE_84=continue;\nTEMPLATE_LINE_85=}\nTEMPLATE_LINE_86=\nTEMPLATE_LINE_87=$type = (string) $entry['type'];\nTEMPLATE_LINE_88=$title = (string) $entry['title'];\nTEMPLATE_LINE_89=$entity = $existing[$type][$title] ?? $this->create();\nTEMPLATE_LINE_90=$entity->setOption('check_duplicate', false);\nTEMPLATE_LINE_91=$entity->setOption('report_modification_errors', false);\nTEMPLATE_LINE_92=$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\nTEMPLATE_LINE_93=\nTEMPLATE_LINE_94=$this->importMappedAttributes($entry, $entity);\nTEMPLATE_LINE_95=$entity->style_id = 0;\nTEMPLATE_LINE_96=$entity->template = $this->getCdataValue($entry);\nTEMPLATE_LINE_97=$entity->addon_id = $addOnId;\nTEMPLATE_LINE_98=$entity->save(true, false);\nTEMPLATE_LINE_99=\nTEMPLATE_LINE_100=\\XF::dequeueRunOnce('styleLastModifiedDate');\nTEMPLATE_LINE_101=\nTEMPLATE_LINE_102=if ($this->resume($maxRunTime, $startTime))\nTEMPLATE_LINE_103={\nTEMPLATE_LINE_104=$last = $i;\nTEMPLATE_LINE_105=break;\nABSTRACT_READ_RC=0\nABSTRACT_LINE_262=if (self::USE_AUTO_CDATA)\nABSTRACT_LINE_263={\nABSTRACT_LINE_264=if (isset($el[$attr]))\nABSTRACT_LINE_265={\nABSTRACT_LINE_266=$entity->$attr = (string) $el[$attr];\nABSTRACT_LINE_267=}\nABSTRACT_LINE_268=else if (isset($el->{$attr}))\nABSTRACT_LINE_269={\nABSTRACT_LINE_270=$entity->$attr = (string) $el->{$attr};\nABSTRACT_LINE_271=}\nABSTRACT_LINE_272=}\nABSTRACT_LINE_273=else\nABSTRACT_LINE_274={\nABSTRACT_LINE_275=$entity->$attr = (string) $el[$attr];\nABSTRACT_LINE_276=}\nABSTRACT_LINE_277=}\nABSTRACT_LINE_278=}\nABSTRACT_LINE_279=\nABSTRACT_LINE_280=protected function pluckXmlAttribute(\\SimpleXMLElement $els, $key)\nABSTRACT_LINE_281={\nABSTRACT_LINE_282=$values = [];\nENTITY_READ_RC=0\nENTITY_LINE_638=if ($this->_writePending == 'delete')\nENTITY_LINE_639={\nENTITY_LINE_640=throw new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\nENTITY_LINE_641=}\nENTITY_LINE_642=\nENTITY_LINE_643=if ($this->_writePending && empty($options['forceSet']))\nENTITY_LINE_644={\nENTITY_LINE_645=throw new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\nENTITY_LINE_646=}\nENTITY_LINE_647=\nENTITY_LINE_648=if (!isset($this->_structure->columns[$key]))\nCANDIDATE_CHILD_COUNT=2\nCANDIDATE_CHILD_0_IDENTITY=template|public|newfi_portal|0|1000010|1.0.0 Alpha 1\nCANDIDATE_CHILD_1_IDENTITY=template|public|newfi_portal.less|0|1000010|1.0.0 Alpha 1\nFINAL_DECISION=RCA6_COMPLETE_NO_MUTATION_EXACT_CORE_LINES_READY\nRCA6_END=true\n" + "output": "RCA7_BEGIN=true\nCOMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7\nMUTATION_SCOPE=NONE_READ_ONLY\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL\nFAILED_CHANGES_MADE=true\nFAILED_ROLLBACK_STARTED=true\nFAILED_ROLLBACK_RESTORED=false\nFAILED_MUTATION_OUTCOME=ROLLBACK_FAILED\nFAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_HISTORY_SHA256=76f74a798da08cdfa0e1545961b58ffb293b33c15868510c915c3dbb261bac34\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_STATUS=OK\nGIT_HEAD={\"err\":\"\",\"out\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"rc\":0}\nGIT_STATUS={\"err\":\"\",\"out\":\"\",\"rc\":0}\nGIT_LOG3={\"err\":\"\",\"out\":\"06bab5a (HEAD -> implementation/newfi-closed-mvp-20260906, origin/implementation/newfi-closed-mvp-20260906) style: apply Big Water XenForo theme [NEWFI-260907-STYLE199B]\\n4ade504 brand: add Newfi technical identity assets\\n9f7e0ca ops: authorize final Newfi public cutover\",\"rc\":0}\nGIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890\nCANDIDATE_XML_BYTES=10977\nCANDIDATE_XML_SHA256=1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861\nCANDIDATE_CHILDREN=[{\"attrib\":{\"title\":\"newfi_portal\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"i\":0,\"tag\":\"template\",\"text_bytes\":7027,\"text_sha256\":\"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a\"},{\"attrib\":{\"title\":\"newfi_portal.less\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"i\":1,\"tag\":\"template\",\"text_bytes\":3634,\"text_sha256\":\"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8\"}]\nTEMPLATE_DATATYPE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php\",\"rc\":0,\"text\":\" 35\\t\\t\\t\\t$this->exportMappedAttributes($node, $entry);\\n 36\\t\\t\\t\\t$this->exportCdata($node, $entry->template);\\n 37\\t\\n 38\\t\\t\\t\\t$container->appendChild($node);\\n 39\\t\\t\\t}\\n 40\\t\\n 41\\t\\t\\treturn $entries->count() ? true : false;\\n 42\\t\\t}\\n 43\\t\\n 44\\t\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\\n 45\\t\\t{\\n 46\\t\\t\\t$startTime = microtime(true);\\n 47\\t\\n 48\\t\\t\\t$entries = $this->getEntries($container, $start);\\n 49\\t\\t\\tif (!$entries)\\n 50\\t\\t\\t{\\n 51\\t\\t\\t\\treturn false;\\n 52\\t\\t\\t}\\n 53\\t\\n 54\\t\\t\\t$conditions = [];\\n 55\\t\\t\\tforeach ($entries AS $entry)\\n 56\\t\\t\\t{\\n 57\\t\\t\\t\\t$conditions[] = [\\n 58\\t\\t\\t\\t\\t'type' => (string) $entry['type'],\\n 59\\t\\t\\t\\t\\t'title' => (string) $entry['title'],\\n 60\\t\\t\\t\\t];\\n 61\\t\\t\\t}\\n 62\\t\\t\\tif ($conditions)\\n 63\\t\\t\\t{\\n 64\\t\\t\\t\\t$existing = $this->finder()\\n 65\\t\\t\\t\\t\\t->whereOr($conditions)\\n 66\\t\\t\\t\\t\\t->where('style_id', 0)\\n 67\\t\\t\\t\\t\\t->fetch()\\n 68\\t\\t\\t\\t\\t->groupBy('type', 'title');\\n 69\\t\\t\\t}\\n 70\\t\\t\\telse\\n 71\\t\\t\\t{\\n 72\\t\\t\\t\\t$existing = [];\\n 73\\t\\t\\t}\\n 74\\t\\n 75\\t\\t\\t$i = 0;\\n 76\\t\\t\\t$last = 0;\\n 77\\t\\n 78\\t\\t\\tforeach ($entries AS $entry)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\t$i++;\\n 81\\t\\n 82\\t\\t\\t\\tif ($i <= $start)\\n 83\\t\\t\\t\\t{\\n 84\\t\\t\\t\\t\\tcontinue;\\n 85\\t\\t\\t\\t}\\n 86\\t\\n 87\\t\\t\\t\\t$type = (string) $entry['type'];\\n 88\\t\\t\\t\\t$title = (string) $entry['title'];\\n 89\\t\\t\\t\\t$entity = $existing[$type][$title] ?? $this->create();\\n 90\\t\\t\\t\\t$entity->setOption('check_duplicate', false);\\n 91\\t\\t\\t\\t$entity->setOption('report_modification_errors', false);\\n 92\\t\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\\n 93\\t\\n 94\\t\\t\\t\\t$this->importMappedAttributes($entry, $entity);\\n 95\\t\\t\\t\\t$entity->style_id = 0;\\n 96\\t\\t\\t\\t$entity->template = $this->getCdataValue($entry);\\n 97\\t\\t\\t\\t$entity->addon_id = $addOnId;\\n 98\\t\\t\\t\\t$entity->save(true, false);\\n 99\\t\\n 100\\t\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\\n 101\\t\\n 102\\t\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\\n 103\\t\\t\\t\\t{\\n 104\\t\\t\\t\\t\\t$last = $i;\\n 105\\t\\t\\t\\t\\tbreak;\\n 106\\t\\t\\t\\t}\\n 107\\t\\t\\t}\\n 108\\t\\t\\treturn ($last ?: false);\\n 109\\t\\t}\\n 110\\t\\n 111\\t\\tpublic function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container)\\n 112\\t\\t{\\n 113\\t\\t\\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\\n 114\\t\\t\\tif (!$existing)\\n 115\\t\\t\\t{\\n\"}\nABSTRACT_DATATYPE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php\",\"rc\":0,\"text\":\" 220\\t\\t\\t\\t\\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\\n 221\\t\\t\\t\\t\\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\\\"]*$/si', $value))\\n 222\\t\\t\\t\\t\\t{\\n 223\\t\\t\\t\\t\\t\\t// This exports CDATA, but does not escape `]]>` like \\\\XF\\\\Util\\\\XML::createDomCdataSection(),\\n 224\\t\\t\\t\\t\\t\\t// because it needs to be transparently importable.\\n 225\\t\\t\\t\\t\\t\\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\\n 226\\t\\t\\t\\t\\t\\t// and remove this attribute from exportMappedAttributes()\\n 227\\t\\n 228\\t\\t\\t\\t\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\\n 229\\t\\n 230\\t\\t\\t\\t\\t\\t$newNode->appendChild(\\n 231\\t\\t\\t\\t\\t\\t\\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\\n 232\\t\\t\\t\\t\\t\\t);\\n 233\\t\\n 234\\t\\t\\t\\t\\t\\t$tag->appendChild($newNode);\\n 235\\t\\t\\t\\t\\t}\\n 236\\t\\t\\t\\t\\telse\\n 237\\t\\t\\t\\t\\t{\\n 238\\t\\t\\t\\t\\t\\t$tag->setAttribute($attr, $value);\\n 239\\t\\t\\t\\t\\t}\\n 240\\t\\t\\t\\t}\\n 241\\t\\t\\t}\\n 242\\t\\t}\\n 243\\t\\n 244\\t\\tprotected function importMappedAttributes(\\\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\\n 245\\t\\t{\\n 246\\t\\t\\tif ($entity->exists() && $allowMaintained)\\n 247\\t\\t\\t{\\n 248\\t\\t\\t\\t$maintained = $this->getMaintainedAttributes();\\n 249\\t\\t\\t}\\n 250\\t\\t\\telse\\n 251\\t\\t\\t{\\n 252\\t\\t\\t\\t$maintained = [];\\n 253\\t\\t\\t}\\n 254\\t\\n 255\\t\\t\\tforeach ($this->getMappedAttributes() AS $attr)\\n 256\\t\\t\\t{\\n 257\\t\\t\\t\\tif (in_array($attr, $maintained))\\n 258\\t\\t\\t\\t{\\n 259\\t\\t\\t\\t\\tcontinue;\\n 260\\t\\t\\t\\t}\\n 261\\t\\n 262\\t\\t\\t\\tif (self::USE_AUTO_CDATA)\\n 263\\t\\t\\t\\t{\\n 264\\t\\t\\t\\t\\tif (isset($el[$attr]))\\n 265\\t\\t\\t\\t\\t{\\n 266\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 267\\t\\t\\t\\t\\t}\\n 268\\t\\t\\t\\t\\telse if (isset($el->{$attr}))\\n 269\\t\\t\\t\\t\\t{\\n 270\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el->{$attr};\\n 271\\t\\t\\t\\t\\t}\\n 272\\t\\t\\t\\t}\\n 273\\t\\t\\t\\telse\\n 274\\t\\t\\t\\t{\\n 275\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 276\\t\\t\\t\\t}\\n 277\\t\\t\\t}\\n 278\\t\\t}\\n 279\\t\\n 280\\t\\tprotected function pluckXmlAttribute(\\\\SimpleXMLElement $els, $key)\\n 281\\t\\t{\\n 282\\t\\t\\t$values = [];\\n 283\\t\\t\\t$i = 0;\\n 284\\t\\t\\tforeach ($els AS $el)\\n 285\\t\\t\\t{\\n 286\\t\\t\\t\\t$values[$i++] = (string) $el[$key];\\n 287\\t\\t\\t}\\n 288\\t\\n 289\\t\\t\\treturn $values;\\n 290\\t\\t}\\n 291\\t\\n 292\\t\\tprotected function getSimpleAttributes(\\\\SimpleXMLElement $el)\\n 293\\t\\t{\\n 294\\t\\t\\t$output = [];\\n 295\\t\\t\\tforeach ($el->attributes() AS $key => $val)\\n 296\\t\\t\\t{\\n 297\\t\\t\\t\\t$output[$key] = (string) $val;\\n 298\\t\\t\\t}\\n 299\\t\\t\\treturn $output;\\n 300\\t\\t}\\n\"}\nADDON_DATA_JOB={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Job/AddOnData.php\",\"rc\":0,\"text\":\" 1\\t null,\\n 11\\t\\t\\t'data_dir' => null,\\n 12\\t\\n 13\\t\\t\\t'data_types' => null,\\n 14\\t\\t\\t'current_type' => null,\\n 15\\t\\n 16\\t\\t\\t'start' => 0,\\n 17\\t\\t];\\n 18\\t\\n 19\\t\\tprotected $currentType = null;\\n 20\\t\\tprotected $lastIndex = 0;\\n 21\\t\\tprotected $totalEntries = 0;\\n 22\\t\\n 23\\t\\tpublic function run($maxRunTime)\\n 24\\t\\t{\\n 25\\t\\t\\tif ($this->data['addon_id'] != 'XF')\\n 26\\t\\t\\t{\\n 27\\t\\t\\t\\t$addOnManager = $this->app->addOnManager();\\n 28\\t\\t\\t\\t$addOn = $addOnManager->getById($this->data['addon_id']);\\n 29\\t\\t\\t\\tif (!$addOn)\\n 30\\t\\t\\t\\t{\\n 31\\t\\t\\t\\t\\t// add-on isn't installed, can't do anything\\n 32\\t\\t\\t\\t\\treturn $this->complete();\\n 33\\t\\t\\t\\t}\\n 34\\t\\n 35\\t\\t\\t\\tif ($this->data['data_dir'] === null)\\n 36\\t\\t\\t\\t{\\n 37\\t\\t\\t\\t\\t$this->data['data_dir'] = $addOn->getDataDirectory();\\n 38\\t\\t\\t\\t}\\n 39\\t\\t\\t}\\n 40\\t\\t\\telse\\n 41\\t\\t\\t{\\n 42\\t\\t\\t\\t$addOn = null; // don't populate this for XF since it wouldn't be the same type of object\\n 43\\t\\n 44\\t\\t\\t\\tif ($this->data['data_dir'] === null)\\n 45\\t\\t\\t\\t{\\n 46\\t\\t\\t\\t\\t$ds = \\\\XF::$DS;\\n 47\\t\\t\\t\\t\\t$this->data['data_dir'] = \\\\XF::getAddOnDirectory() . $ds . 'XF' . $ds . '_data';\\n 48\\t\\t\\t\\t}\\n 49\\t\\t\\t}\\n 50\\t\\n 51\\t\\t\\t$dataManager = $this->app->addOnDataManager();\\n 52\\t\\n 53\\t\\t\\t$addOnId = $this->data['addon_id'];\\n 54\\t\\t\\t$dataDir = $this->data['data_dir'];\\n 55\\t\\n 56\\t\\t\\tif ($this->data['data_types'] === null)\\n 57\\t\\t\\t{\\n 58\\t\\t\\t\\t$dataTypes = $dataManager->getDataTypeClasses();\\n 59\\t\\t\\t\\tforeach ($dataTypes AS $key => $dataType)\\n 60\\t\\t\\t\\t{\\n 61\\t\\t\\t\\t\\t$handler = $dataManager->getDataTypeHandler($dataType);\\n 62\\t\\t\\t\\t\\t$xml = $handler->openTypeFile($dataDir);\\n 63\\t\\t\\t\\t\\tif (!$xml || !$xml->count())\\n 64\\t\\t\\t\\t\\t{\\n 65\\t\\t\\t\\t\\t\\t// We can skip this type entirely, but clean up any existing data first\\n 66\\t\\t\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n 67\\t\\t\\t\\t\\t\\tunset($dataTypes[$key]);\\n 68\\t\\t\\t\\t\\t}\\n 69\\t\\t\\t\\t}\\n 70\\t\\t\\t\\t$this->data['data_types'] = $dataTypes;\\n 71\\t\\t\\t}\\n 72\\t\\n 73\\t\\t\\tif (!$this->data['current_type'])\\n 74\\t\\t\\t{\\n 75\\t\\t\\t\\t$this->data['current_type'] = array_shift($this->data['data_types']);\\n 76\\t\\t\\t\\tif (!$this->data['current_type'])\\n 77\\t\\t\\t\\t{\\n 78\\t\\t\\t\\t\\tif ($addOn)\\n 79\\t\\t\\t\\t\\t{\\n 80\\t\\t\\t\\t\\t\\t$addOn->postDataImport();\\n 81\\t\\t\\t\\t\\t}\\n 82\\t\\n 83\\t\\t\\t\\t\\t$repo = $this->app->repository(StyleRepository::class);\\n 84\\t\\t\\t\\t\\t$repo->updateAllStylesLastModifiedDateLater();\\n 85\\t\\n 86\\t\\t\\t\\t\\treturn $this->complete();\\n 87\\t\\t\\t\\t}\\n 88\\t\\n 89\\t\\t\\t\\t$this->data['start'] = 0;\\n 90\\t\\t\\t}\\n 91\\t\\n 92\\t\\t\\t$start = $this->data['start'];\\n 93\\t\\t\\t$type = $this->data['current_type'];\\n 94\\t\\n 95\\t\\t\\t$handler = $dataManager->getDataTypeHandler($type);\\n 96\\t\\n 97\\t\\t\\t$this->currentType = $handler->getContainerTag();\\n 98\\t\\t\\t$this->lastIndex = $start;\\n 99\\t\\n 100\\t\\t\\t$xml = $handler->openTypeFile($dataDir);\\n 101\\t\\t\\tif (!$xml || !$xml->count())\\n 102\\t\\t\\t{\\n 103\\t\\t\\t\\t// No data so skip and delete existing data for type (if any)\\n 104\\t\\t\\t\\t$this->data['current_type'] = null;\\n 105\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n 106\\t\\t\\t\\treturn $this->resume();\\n 107\\t\\t\\t}\\n 108\\t\\n 109\\t\\t\\t$this->totalEntries = $xml->count();\\n 110\\t\\n 111\\t\\t\\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\\n 112\\t\\t\\tif (!$last)\\n 113\\t\\t\\t{\\n 114\\t\\t\\t\\t// finished type, delete any existing data not in the XML file for this type\\n 115\\t\\t\\t\\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\\n 116\\t\\n 117\\t\\t\\t\\t\\\\XF::triggerRunOnce();\\n 118\\t\\t\\t\\t$this->data['current_type'] = null;\\n 119\\t\\t\\t\\treturn $this->resume();\\n 120\\t\\t\\t}\\n 121\\t\\n 122\\t\\t\\t$this->data['start'] = $last;\\n 123\\t\\t\\treturn $this->resume();\\n 124\\t\\t}\\n 125\\t\\n 126\\t\\tpublic function getStatusMessage()\\n 127\\t\\t{\\n 128\\t\\t\\t// TODO: These (and the types) probably should be phrased\\n 129\\t\\t\\t$actionPhrase = 'Importing';\\n 130\\t\\t\\tif ($this->data['addon_id'] == 'XF')\\n 131\\t\\t\\t{\\n 132\\t\\t\\t\\t$typePhrase = 'Master data';\\n 133\\t\\t\\t}\\n 134\\t\\t\\telse\\n 135\\t\\t\\t{\\n 136\\t\\t\\t\\t$typePhrase = 'Add-on data';\\n 137\\t\\t\\t}\\n 138\\t\\n 139\\t\\t\\t$currentType = null;\\n 140\\t\\t\\tif ($this->currentType)\\n 141\\t\\t\\t{\\n 142\\t\\t\\t\\t$currentType = ucfirst(str_replace('_', ' ', $this->currentType));\\n 143\\t\\t\\t}\\n 144\\t\\n 145\\t\\t\\tif ($currentType && $this->lastIndex)\\n 146\\t\\t\\t{\\n 147\\t\\t\\t\\t$percentage = $this->app->language()->numberFormat(($this->lastIndex / $this->totalEntries) * 100, 1);\\n 148\\t\\t\\t\\treturn sprintf('%s... %s (%s: %s%%)', $actionPhrase, $typePhrase, $currentType, $percentage);\\n 149\\t\\t\\t}\\n 150\\t\\t\\telse if ($currentType)\\n 151\\t\\t\\t{\\n 152\\t\\t\\t\\treturn sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);\\n 153\\t\\t\\t}\\n 154\\t\\t\\telse\\n 155\\t\\t\\t{\\n 156\\t\\t\\t\\treturn sprintf('%s... %s', $actionPhrase, $typePhrase);\\n 157\\t\\t\\t}\\n 158\\t\\t}\\n 159\\t\\n 160\\t\\tpublic function canCancel()\\n 161\\t\\t{\\n 162\\t\\t\\treturn false;\\n 163\\t\\t}\\n 164\\t\\n 165\\t\\tpublic function canTriggerByChoice()\\n 166\\t\\t{\\n 167\\t\\t\\treturn false;\\n 168\\t\\t}\\n 169\\t}\\n\"}\nENTITY_CORE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php\",\"rc\":0,\"text\":\" 520\\t\\t\\t\\t{\\n 521\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"To many relations must be hydrated with collections\\\");\\n 522\\t\\t\\t\\t}\\n 523\\t\\t\\t}\\n 524\\t\\t\\telse\\n 525\\t\\t\\t{\\n 526\\t\\t\\t\\tif ($value !== null && !($value instanceof Entity))\\n 527\\t\\t\\t\\t{\\n 528\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"To one relations must be hydrated with entities or null\\\");\\n 529\\t\\t\\t\\t}\\n 530\\t\\t\\t}\\n 531\\t\\n 532\\t\\t\\t$this->_relations[$key] = $value;\\n 533\\t\\t}\\n 534\\t\\n 535\\t\\tpublic function getExistingRelation($key)\\n 536\\t\\t{\\n 537\\t\\t\\t$relations = $this->_structure->relations;\\n 538\\t\\n 539\\t\\t\\tif (empty($relations[$key]))\\n 540\\t\\t\\t{\\n 541\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Unknown relation $key\\\");\\n 542\\t\\t\\t}\\n 543\\t\\n 544\\t\\t\\treturn $this->_em->getRelation($relations[$key], $this, 'existing');\\n 545\\t\\t}\\n 546\\t\\n 547\\t\\tpublic function getRelationFinder($key, $type = 'current')\\n 548\\t\\t{\\n 549\\t\\t\\t$relations = $this->_structure->relations;\\n 550\\t\\n 551\\t\\t\\tif (empty($relations[$key]))\\n 552\\t\\t\\t{\\n 553\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Unknown relation $key\\\");\\n 554\\t\\t\\t}\\n 555\\t\\n 556\\t\\t\\treturn $this->_em->getRelationFinder($relations[$key], $this, $type);\\n 557\\t\\t}\\n 558\\t\\n 559\\t\\tpublic function toArray($allowGetters = true)\\n 560\\t\\t{\\n 561\\t\\t\\t$output = [];\\n 562\\t\\t\\tforeach ($this->_structure->columns AS $key => $null)\\n 563\\t\\t\\t{\\n 564\\t\\t\\t\\t$output[$key] = $allowGetters ? $this->get($key) : $this->getValue($key);\\n 565\\t\\t\\t}\\n 566\\t\\n 567\\t\\t\\treturn $output;\\n 568\\t\\t}\\n 569\\t\\n 570\\t\\tfinal public function toApiResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\\n 571\\t\\t{\\n 572\\t\\t\\t$result = new EntityResult($this);\\n 573\\t\\t\\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\\n 574\\t\\n 575\\t\\t\\tif ($subResult instanceof EntityResultInterface)\\n 576\\t\\t\\t{\\n 577\\t\\t\\t\\treturn $subResult;\\n 578\\t\\t\\t}\\n 579\\t\\t\\telse\\n 580\\t\\t\\t{\\n 581\\t\\t\\t\\treturn $result;\\n 582\\t\\t\\t}\\n 583\\t\\t}\\n 584\\t\\n 585\\t\\tfinal public function toWebhookResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\\n 586\\t\\t{\\n 587\\t\\t\\t$result = new EntityResult($this, EntityResultInterface::TYPE_WEBHOOK);\\n 588\\t\\t\\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\\n 589\\t\\n 590\\t\\t\\tif ($subResult instanceof EntityResultInterface)\\n 591\\t\\t\\t{\\n 592\\t\\t\\t\\treturn $subResult;\\n 593\\t\\t\\t}\\n 594\\t\\n 595\\t\\t\\treturn $result;\\n 596\\t\\t}\\n 597\\t\\n 598\\t\\t/**\\n 599\\t\\t * This method must be overridden to enable API access to this entity.\\n 600\\t\\t *\\n 601\\t\\t * @param EntityResult $result\\n 602\\t\\t * @param int $verbosity\\n 603\\t\\t * @param array $options\\n 604\\t\\t */\\n 605\\t\\tprotected function setupApiResultData(\\n 606\\t\\t\\tEntityResult $result,\\n 607\\t\\t\\t$verbosity = self::VERBOSITY_NORMAL,\\n 608\\t\\t\\tarray $options = []\\n 609\\t\\t)\\n 610\\t\\t{\\n 611\\t\\t\\tthrow new \\\\LogicException(\\n 612\\t\\t\\t\\t\\\"API result rules not defined by \\\" . $this->_structure->shortName . '. Override setupApiResultData().'\\n 613\\t\\t\\t);\\n 614\\t\\t}\\n 615\\t\\n 616\\t\\tpublic function __set($key, $value)\\n 617\\t\\t{\\n 618\\t\\t\\t$this->set($key, $value);\\n 619\\t\\t}\\n 620\\t\\n 621\\t\\tpublic function offsetSet($key, $value): void\\n 622\\t\\t{\\n 623\\t\\t\\t$this->set($key, $value);\\n 624\\t\\t}\\n 625\\t\\n 626\\t\\tpublic function set($key, $value, array $options = [])\\n 627\\t\\t{\\n 628\\t\\t\\tif ($this->_readOnly)\\n 629\\t\\t\\t{\\n 630\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Entity is read only\\\");\\n 631\\t\\t\\t}\\n 632\\t\\n 633\\t\\t\\tif ($this->_deleted)\\n 634\\t\\t\\t{\\n 635\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n 636\\t\\t\\t}\\n 637\\t\\n 638\\t\\t\\tif ($this->_writePending == 'delete')\\n 639\\t\\t\\t{\\n 640\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n 641\\t\\t\\t}\\n 642\\t\\n 643\\t\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n 644\\t\\t\\t{\\n 645\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n 646\\t\\t\\t}\\n 647\\t\\n 648\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 649\\t\\t\\t{\\n 650\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 651\\t\\t\\t\\t{\\n 652\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 653\\t\\t\\t\\t}\\n 654\\t\\t\\t\\treturn false;\\n 655\\t\\t\\t}\\n 656\\t\\n 657\\t\\t\\t$column = $this->_structure->columns[$key];\\n 658\\t\\n 659\\t\\t\\tif ((!empty($column['readOnly']) || !empty($column['autoIncrement'])) && empty($options['forceSet']))\\n 660\\t\\t\\t{\\n 661\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 662\\t\\t\\t\\t{\\n 663\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is read only, can only be set with forceSet\\\");\\n 664\\t\\t\\t\\t}\\n 665\\t\\t\\t\\treturn false;\\n 666\\t\\t\\t}\\n 667\\t\\n 668\\t\\t\\tif (!empty($column['writeOnce']) && $this->isUpdate() && empty($options['forceSet']))\\n 669\\t\\t\\t{\\n 670\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 671\\t\\t\\t\\t{\\n 672\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' can only be written on insert or set with forceSet\\\");\\n 673\\t\\t\\t\\t}\\n 674\\t\\t\\t\\treturn false;\\n 675\\t\\t\\t}\\n 676\\t\\n 677\\t\\t\\tif ($value instanceof DeferredValue)\\n 678\\t\\t\\t{\\n 679\\t\\t\\t\\t$this->_setInternal($key, $value);\\n 680\\t\\t\\t\\treturn true;\\n 681\\t\\t\\t}\\n 682\\t\\n 683\\t\\t\\tif (!$this->_verifyValueCustom($value, $key, $column['type'], $column))\\n 684\\t\\t\\t{\\n 685\\t\\t\\t\\treturn false;\\n 686\\t\\t\\t}\\n 687\\t\\n 688\\t\\t\\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\\n 689\\t\\n 690\\t\\t\\tif (!$this->_em->getValueFormatter()->applyValueConstraints(\\n 691\\t\\t\\t\\t$value,\\n 692\\t\\t\\t\\t$column['type'],\\n 693\\t\\t\\t\\t$column,\\n 694\\t\\t\\t\\t$constraintError,\\n 695\\t\\t\\t\\t!empty($options['forceConstraint'])\\n 696\\t\\t\\t))\\n 697\\t\\t\\t{\\n 698\\t\\t\\t\\tif ($constraintError)\\n 699\\t\\t\\t\\t{\\n 700\\t\\t\\t\\t\\t$this->error($constraintError, $key, false);\\n 701\\t\\t\\t\\t}\\n 702\\t\\n 703\\t\\t\\t\\treturn false;\\n 704\\t\\t\\t}\\n 705\\t\\n 706\\t\\t\\tif ($this->_columnValueIsDifferent($key, $value, $column) && $value !== null)\\n 707\\t\\t\\t{\\n 708\\t\\t\\t\\tif (!empty($column['unique']))\\n 709\\t\\t\\t\\t{\\n 710\\t\\t\\t\\t\\tif (!$this->_verifyUniqueValue($value, $key, $column['unique']))\\n 711\\t\\t\\t\\t\\t{\\n 712\\t\\t\\t\\t\\t\\treturn false;\\n 713\\t\\t\\t\\t\\t}\\n 714\\t\\t\\t\\t}\\n 715\\t\\t\\t\\telse if (!empty($column['autoIncrement']) || $this->_structure->primaryKey === $key)\\n 716\\t\\t\\t\\t{\\n 717\\t\\t\\t\\t\\tif (!$this->_verifyUniqueValue($value, $key, true))\\n 718\\t\\t\\t\\t\\t{\\n 719\\t\\t\\t\\t\\t\\treturn false;\\n 720\\t\\t\\t\\t\\t}\\n 721\\t\\t\\t\\t}\\n 722\\t\\t\\t}\\n 723\\t\\n 724\\t\\t\\t$this->_setInternal($key, $value);\\n 725\\t\\t\\treturn true;\\n 726\\t\\t}\\n 727\\t\\n 728\\t\\tpublic function setTrusted($key, $value)\\n 729\\t\\t{\\n 730\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 731\\t\\t\\t{\\n 732\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 733\\t\\t\\t}\\n 734\\t\\n 735\\t\\t\\t$column = $this->_structure->columns[$key];\\n 736\\t\\t\\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\\n 737\\t\\n 738\\t\\t\\t$this->_setInternal($key, $value);\\n 739\\t\\t\\treturn true;\\n 740\\t\\t}\\n 741\\t\\n 742\\t\\tpublic function setFromEncoded($key, $value, array $options = [])\\n 743\\t\\t{\\n 744\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 745\\t\\t\\t{\\n 746\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 747\\t\\t\\t}\\n 748\\t\\n 749\\t\\t\\t$column = $this->_structure->columns[$key];\\n 750\\t\\n 751\\t\\t\\t$value = $this->_em->decodeValueFromSourceExtended($column['type'], $value, $column);\\n 752\\t\\t\\treturn $this->set($key, $value, $options);\\n 753\\t\\t}\\n 754\\t\\n 755\\t\\tpublic function setAsSaved($key, $value)\\n 756\\t\\t{\\n 757\\t\\t\\tif (!$this->exists() && !$this->_writeRunning)\\n 758\\t\\t\\t{\\n 759\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Can only set an already saved value on a saved entity\\\");\\n 760\\t\\t\\t}\\n\"}\nTEMPLATE_ENTITY={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Entity/Template.php\",\"rc\":0,\"text\":\" 1\\t $History\\n 44\\t * @property-read Style|null $Style_\\n 45\\t */\\n 46\\tclass Template extends Entity\\n 47\\t{\\n 48\\t\\tprotected $modificationStatuses = null;\\n 49\\t\\n 50\\t\\t/**\\n 51\\t\\t * @return string\\n 52\\t\\t */\\n 53\\t\\tpublic function getCombinedTitle()\\n 54\\t\\t{\\n 55\\t\\t\\treturn \\\"{$this->type}:{$this->title}\\\";\\n 56\\t\\t}\\n 57\\t\\n 58\\t\\t/**\\n 59\\t\\t * @return Style\\n 60\\t\\t */\\n 61\\t\\tpublic function getStyle()\\n 62\\t\\t{\\n 63\\t\\t\\tif ($this->style_id == 0)\\n 64\\t\\t\\t{\\n 65\\t\\t\\t\\treturn $this->getStyleRepo()->getMasterStyle();\\n 66\\t\\t\\t}\\n 67\\t\\t\\telse\\n 68\\t\\t\\t{\\n 69\\t\\t\\t\\treturn $this->getRelation('Style');\\n 70\\t\\t\\t}\\n 71\\t\\t}\\n 72\\t\\n 73\\t\\t/**\\n 74\\t\\t * @return Template|null\\n 75\\t\\t */\\n 76\\t\\tpublic function getParentTemplate()\\n 77\\t\\t{\\n 78\\t\\t\\tif (!$this->style_id)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\treturn null;\\n 81\\t\\t\\t}\\n 82\\t\\n 83\\t\\t\\t$style = $this->Style;\\n 84\\t\\t\\tif (!$style)\\n 85\\t\\t\\t{\\n 86\\t\\t\\t\\treturn null;\\n 87\\t\\t\\t}\\n 88\\t\\n 89\\t\\t\\t$templateMap = $this->finder(TemplateMapFinder::class)\\n 90\\t\\t\\t\\t->where([\\n 91\\t\\t\\t\\t\\t'style_id' => $style->parent_id,\\n 92\\t\\t\\t\\t\\t'type' => $this->type,\\n 93\\t\\t\\t\\t\\t'title' => $this->title,\\n 94\\t\\t\\t\\t])\\n 95\\t\\t\\t\\t->with('Template', true)\\n 96\\t\\t\\t\\t->with('Template.Style', false)\\n 97\\t\\t\\t\\t->fetchOne();\\n 98\\t\\t\\tif (!$templateMap)\\n 99\\t\\t\\t{\\n 100\\t\\t\\t\\treturn null;\\n 101\\t\\t\\t}\\n 102\\t\\n 103\\t\\t\\treturn $templateMap->Template;\\n 104\\t\\t}\\n 105\\t\\n 106\\t\\tpublic function getAbstractedCompiledTemplatePath($languageId, $styleId, $new = true)\\n 107\\t\\t{\\n 108\\t\\t\\t$title = $new ? $this->getValue('title') : $this->getExistingValue('title');\\n 109\\t\\t\\t$type = $new ? $this->getValue('type') : $this->getExistingValue('type');\\n 110\\t\\n 111\\t\\t\\treturn 'code-cache://templates/l' . $languageId . '/s' . $styleId . '/' . $type . '/' . $title . '.php';\\n 112\\t\\t}\\n 113\\t\\n 114\\t\\tpublic function getHash()\\n 115\\t\\t{\\n 116\\t\\t\\t$contents = str_replace(\\\"\\\\r\\\", '', $this->template);\\n 117\\t\\t\\treturn md5($contents);\\n 118\\t\\t}\\n 119\\t\\n 120\\t\\t/**\\n 121\\t\\t * @return array\\n 122\\t\\t */\\n 123\\t\\tpublic function getPhrasesUsed()\\n 124\\t\\t{\\n 125\\t\\t\\treturn $this->db()->fetchAllColumn(\\\"\\n 126\\t\\t\\t\\tSELECT phrase_title\\n 127\\t\\t\\t\\tFROM xf_template_phrase\\n 128\\t\\t\\t\\tWHERE template_id = ?\\n 129\\t\\t\\t\\\", $this->template_id);\\n 130\\t\\t}\\n 131\\t\\n 132\\t\\tpublic function reparseTemplate($forceValid = false, &$error = null)\\n 133\\t\\t{\\n 134\\t\\t\\t$valid = $this->validateTemplateText($this->template, $forceValid, $ast, $error);\\n 135\\t\\t\\tif ($valid && $ast != $this->template_parsed)\\n 136\\t\\t\\t{\\n 137\\t\\t\\t\\t$this->template_parsed = $ast;\\n 138\\t\\t\\t\\treturn true;\\n 139\\t\\t\\t}\\n 140\\t\\t\\tif (!$valid)\\n 141\\t\\t\\t{\\n 142\\t\\t\\t\\t$this->error($error, 'template');\\n 143\\t\\t\\t\\treturn true;\\n 144\\t\\t\\t}\\n 145\\t\\n 146\\t\\t\\treturn false;\\n 147\\t\\t}\\n 148\\t\\n 149\\t\\tpublic function setTemplateUnchecked($template)\\n 150\\t\\t{\\n 151\\t\\t\\t$template = strval($template);\\n 152\\t\\t\\t$this->_setInternal('template', $template);\\n 153\\t\\t\\t$this->validateTemplateText($template, true, $ast);\\n 154\\t\\n 155\\t\\t\\t$this->template_parsed = $ast;\\n 156\\t\\n 157\\t\\t\\treturn true;\\n 158\\t\\t}\\n 159\\t\\n 160\\t\\tprotected function verifyTitle($title)\\n 161\\t\\t{\\n 162\\t\\t\\tif (substr($title, 0, 1) == '.' || strpos($title, '..') !== false)\\n 163\\t\\t\\t{\\n 164\\t\\t\\t\\t$this->error(\\\\XF::phrase('please_enter_title_using_only_alphanumeric_dot'), 'title');\\n 165\\t\\t\\t\\treturn false;\\n 166\\t\\t\\t}\\n 167\\t\\n 168\\t\\t\\tif (preg_match('/\\\\.html$/i', $title))\\n 169\\t\\t\\t{\\n 170\\t\\t\\t\\t$this->error(\\\\XF::phrase('template_titles_may_not_end_in_html'), 'title');\\n 171\\t\\t\\t\\treturn false;\\n 172\\t\\t\\t}\\n 173\\t\\n 174\\t\\t\\treturn true;\\n 175\\t\\t}\\n 176\\t\\n 177\\t\\tprotected function verifyTemplate($template)\\n 178\\t\\t{\\n 179\\t\\t\\t$valid = $this->validateTemplateText($template, false, $ast, $error);\\n 180\\t\\t\\tif (!$valid)\\n 181\\t\\t\\t{\\n 182\\t\\t\\t\\t$this->error($error, 'template');\\n 183\\t\\t\\t\\treturn false;\\n 184\\t\\t\\t}\\n 185\\t\\n 186\\t\\t\\t$this->template_parsed = $ast;\\n 187\\t\\n 188\\t\\t\\treturn true;\\n 189\\t\\t}\\n 190\\t\\n 191\\t\\tprotected function validateTemplateText($template, $forceValid = false, &$ast = null, &$error = null)\\n 192\\t\\t{\\n 193\\t\\t\\t$compiler = $this->app()->templateCompiler();\\n 194\\t\\n 195\\t\\t\\t$templateModRepo = $this->repository(TemplateModificationRepository::class);\\n 196\\t\\t\\t$templateWithModifications = $templateModRepo->applyModificationsToTemplate(\\n 197\\t\\t\\t\\t$this->type,\\n 198\\t\\t\\t\\t$this->title,\\n 199\\t\\t\\t\\t$template,\\n 200\\t\\t\\t\\t$modificationStatuses\\n 201\\t\\t\\t);\\n 202\\t\\n 203\\t\\t\\t$standardParse = true;\\n 204\\t\\t\\t$error = null;\\n 205\\t\\n 206\\t\\t\\tif ($modificationStatuses)\\n 207\\t\\t\\t{\\n 208\\t\\t\\t\\ttry\\n 209\\t\\t\\t\\t{\\n 210\\t\\t\\t\\t\\t$ast = $compiler->compileToAst($templateWithModifications);\\n 211\\t\\n 212\\t\\t\\t\\t\\tif ($this->getOption('test_compile'))\\n 213\\t\\t\\t\\t\\t{\\n 214\\t\\t\\t\\t\\t\\t$compiler->compileAst($ast);\\n 215\\t\\t\\t\\t\\t}\\n 216\\t\\t\\t\\t\\t$standardParse = false;\\n 217\\t\\t\\t\\t}\\n 218\\t\\t\\t\\tcatch (Exception $e)\\n 219\\t\\t\\t\\t{\\n 220\\t\\t\\t\\t\\t$error = $e->getMessage() . ' - ' . \\\\XF::phrase('template_modifications:') . ' ' . \\\"{$this->type}:{$this->title}\\\";\\n 221\\t\\t\\t\\t\\tforeach ($modificationStatuses AS &$status)\\n 222\\t\\t\\t\\t\\t{\\n 223\\t\\t\\t\\t\\t\\tif (is_int($status))\\n 224\\t\\t\\t\\t\\t\\t{\\n 225\\t\\t\\t\\t\\t\\t\\t$status = 'error_compile';\\n 226\\t\\t\\t\\t\\t\\t}\\n 227\\t\\t\\t\\t\\t}\\n 228\\t\\t\\t\\t}\\n 229\\t\\t\\t}\\n 230\\t\\n 231\\t\\t\\tif ($standardParse)\\n 232\\t\\t\\t{\\n 233\\t\\t\\t\\ttry\\n 234\\t\\t\\t\\t{\\n 235\\t\\t\\t\\t\\t$ast = $compiler->compileToAst($template);\\n 236\\t\\n 237\\t\\t\\t\\t\\tif ($this->getOption('test_compile'))\\n 238\\t\\t\\t\\t\\t{\\n 239\\t\\t\\t\\t\\t\\t$compiler->compileAst($ast);\\n 240\\t\\t\\t\\t\\t}\\n 241\\t\\n 242\\t\\t\\t\\t\\tif ($forceValid || !$this->getOption('report_modification_errors'))\\n 243\\t\\t\\t\\t\\t{\\n 244\\t\\t\\t\\t\\t\\t$error = null;\\n 245\\t\\t\\t\\t\\t}\\n 246\\t\\t\\t\\t}\\n 247\\t\\t\\t\\tcatch (Exception $e)\\n 248\\t\\t\\t\\t{\\n 249\\t\\t\\t\\t\\t$error = $e->getMessage() . ' - ' . \\\\XF::phrase('template_name:') . ' ' . \\\"{$this->type}:{$this->title}\\\";\\n 250\\t\\t\\t\\t}\\n 251\\t\\t\\t}\\n 252\\t\\n 253\\t\\t\\tif ($forceValid && $error)\\n 254\\t\\t\\t{\\n 255\\t\\t\\t\\t$error = null;\\n 256\\t\\t\\t\\t$ast = $compiler->stringAst($template);\\n 257\\t\\t\\t}\\n 258\\t\\n 259\\t\\t\\tif ($error)\\n 260\\t\\t\\t{\\n\"}\nENTITY_WRITE_PENDING_ALL={\"err\":\"\",\"rc\":0,\"text\":\"76-\\n77-\\tprotected $_options = [];\\n78-\\n79-\\tprotected $_deleted = false;\\n80-\\n81-\\tprotected $_readOnly = false;\\n82:\\tprotected $_writePending = false;\\n83-\\tprotected $_writeRunning = false;\\n84-\\tprotected $_errors = [];\\n85-\\n86-\\t/**\\n87-\\t * @var \\\\Closure[]\\n88-\\t */\\n--\\n632-\\n633-\\t\\tif ($this->_deleted)\\n634-\\t\\t{\\n635-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n636-\\t\\t}\\n637-\\n638:\\t\\tif ($this->_writePending == 'delete')\\n639-\\t\\t{\\n640-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n641-\\t\\t}\\n642-\\n643:\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n644-\\t\\t{\\n645-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n646-\\t\\t}\\n647-\\n648-\\t\\tif (!isset($this->_structure->columns[$key]))\\n649-\\t\\t{\\n--\\n1365-\\t}\\n1366-\\n1367-\\tfinal public function saveIfChanged(&$saved = null, $throw = true, $newTransaction = true)\\n1368-\\t{\\n1369-\\t\\tif (!$this->_newValues && $this->isUpdate())\\n1370-\\t\\t{\\n1371:\\t\\t\\t$this->_writePending = false;\\n1372-\\n1373-\\t\\t\\t$saved = false;\\n1374-\\t\\t\\treturn true;\\n1375-\\t\\t}\\n1376-\\n1377-\\t\\t$saved = true;\\n--\\n1412-\\t\\t$this->db()->update($this->_structure->table, $dbUpdate, $condition);\\n1413-\\t}\\n1414-\\n1415-\\tfinal public function preSave()\\n1416-\\t{\\n1417-\\t\\t// write will be pending after calling this; this means call it only once\\n1418:\\t\\tif ($this->_writePending != 'save')\\n1419-\\t\\t{\\n1420-\\t\\t\\t$this->_fillDeferredValues('preSave');\\n1421-\\t\\t\\t$this->_preSave();\\n1422-\\n1423-\\t\\t\\tforeach ($this->getBehaviors() AS $behavior)\\n1424-\\t\\t\\t{\\n--\\n1453-\\t\\t\\tif ($this->isInsert())\\n1454-\\t\\t\\t{\\n1455-\\t\\t\\t\\t$this->_fillInsertDefaults();\\n1456-\\t\\t\\t}\\n1457-\\t\\t\\t$this->_validateRequirements();\\n1458-\\n1459:\\t\\t\\t$this->_writePending = 'save';\\n1460-\\t\\t}\\n1461-\\n1462-\\t\\treturn count($this->_errors) == 0;\\n1463-\\t}\\n1464-\\n1465-\\tprotected function _preSave()\\n--\\n1610-\\tprotected function _postSave()\\n1611-\\t{\\n1612-\\t}\\n1613-\\n1614-\\tprotected function _saveCleanUp(array $newDbValues)\\n1615-\\t{\\n1616:\\t\\t$this->_writePending = false;\\n1617-\\t\\t$this->_writeRunning = false;\\n1618-\\t\\t$this->_previousValues = $this->_values;\\n1619-\\t\\t$this->_values = array_merge($this->_values, $newDbValues);\\n1620-\\t\\t$this->_newValues = [];\\n1621-\\t\\t$this->_errors = [];\\n1622-\\t\\t$this->_cascadeSave = [];\\n--\\n1633-\\t\\t\\t$fn($this);\\n1634-\\t\\t}\\n1635-\\t}\\n1636-\\n1637-\\tpublic function reset()\\n1638-\\t{\\n1639:\\t\\t$this->_writePending = false;\\n1640-\\t\\t$this->_newValues = [];\\n1641-\\t\\t$this->_errors = [];\\n1642-\\t\\t$this->_getterCache = [];\\n1643-\\t\\t$this->_valueCache = [];\\n1644-\\t\\t$this->_options = [];\\n1645-\\t\\t$this->_cascadeSave = [];\\n--\\n1736-\\t\\tif ($newTransaction)\\n1737-\\t\\t{\\n1738-\\t\\t\\t$db->commit();\\n1739-\\t\\t}\\n1740-\\n1741-\\t\\t$this->_em->detachEntity($this);\\n1742:\\t\\t$this->_writePending = false;\\n1743-\\t\\t$this->_writeRunning = false;\\n1744-\\n1745-\\t\\treturn true;\\n1746-\\t}\\n1747-\\n1748-\\tfinal public function preDelete()\\n1749-\\t{\\n1750-\\t\\tif ($this->_deleted)\\n1751-\\t\\t{\\n1752-\\t\\t\\treturn true;\\n1753-\\t\\t}\\n1754-\\n1755:\\t\\tif ($this->_writePending != 'delete')\\n1756-\\t\\t{\\n1757-\\t\\t\\t$this->_preDelete();\\n1758-\\n1759-\\t\\t\\tforeach ($this->getBehaviors() AS $behavior)\\n1760-\\t\\t\\t{\\n1761-\\t\\t\\t\\t$behavior->preDelete();\\n--\\n1804-\\t\\t\\t\\t\\t\\t}\\n1805-\\t\\t\\t\\t\\t}\\n1806-\\t\\t\\t\\t}\\n1807-\\t\\t\\t}\\n1808-\\n1809-\\t\\t\\t$this->_em->finishCascadeEvent('preDelete');\\n1810:\\t\\t\\t$this->_writePending = 'delete';\\n1811-\\t\\t}\\n1812-\\n1813-\\t\\treturn count($this->_errors) == 0;\\n1814-\\t}\\n1815-\\n1816-\\tpublic function isDeleted()\\n\"}\nDB_SCHEMAS=[\"xf_newfi\"]\nTEMPLATE_INDEXES={\"err\":\"\",\"rc\":0,\"rows\":[\"xf_template\\t0\\tPRIMARY\\t1\\ttemplate_id\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t1\\ttype\\tA\\t6\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t2\\ttitle\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t3\\tstyle_id\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\"]}\nTEMPLATE_ROWS={\"err\":\"\",\"rc\":0,\"rows\":[\"1610\\t0\\tpublic\\tnewfi_portal\\tNewfi/Portal\\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741\"]}\nADDON_ROW={\"err\":\"\",\"rc\":0,\"rows\":[\"Newfi/Portal\\t1000010\\t1.0.0 Alpha 1\\t1\\t0\\tNULL\"]}\nERROR42={\"err\":\"\",\"rc\":0,\"rows\":[\"42\\tLogicException\\tAttempted to set 'type' while a save was pending without forceSet\\tsrc/XF/Mvc/Entity/Entity.php\\t645\\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->set('type', 'public')\\\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->__set('type', 'public')\\\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\\\\\Entity\\\\\\\\Template))\\\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\\\n#4 src/XF/Job/Manager.php(275): XF\\\\\\\\Job\\\\\\\\AddOnData->run(8)\\\\n#5 src/XF/Job/Manager.php(205): XF\\\\\\\\Job\\\\\\\\Manager->runJobInternal(Array, 8)\\\\n#6 src/XF/Job/Manager.php(174): XF\\\\\\\\Job\\\\\\\\Manager->runJobEntry(Array, 8)\\\\n#7 src/XF/Cli/Runner.php(228): XF\\\\\\\\Job\\\\\\\\Manager->runById(530, 8)\\\\n#8 src/XF/Cli/Runner.php(116): XF\\\\\\\\Cli\\\\\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Output\\\\\\\\ConsoleOutput))\\\\n#9 cmd.php(17): XF\\\\\\\\Cli\\\\\\\\Runner->run()\\\\n#10 {main}\"]}\nIN_MEMORY_ENTITY_PROBE={\"err\":\"\",\"rc\":0,\"rows\":[\"{\\\"label\\\":\\\"initial\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_check_duplicate_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_report_modification_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_behavior_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_title\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_type\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_version_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_version_string\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_style_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_addon_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\"]}\nNATIVE_REBUILD_IMPLEMENTATION_GREP={\"err\":\"\",\"rc\":0,\"text\":\"/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:16:use XF\\\\Job\\\\AddOnData;\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:150:\\tprotected function importAddOnData(InputInterface $input, OutputInterface $output, AddOn $addOn)\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:171:\\t\\t\\t\\t'xfAddOnData-' . $addOn->addon_id,\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:172:\\t\\t\\t\\tAddOnData::class,\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:219:\\t\\t\\t'xf:addon-sub-action',\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Designer/RebuildMetadata.php:11:class RebuildMetadata extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildUsers.php:7:class RebuildUsers extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSearch.php:8:class RebuildSearch extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractRebuildCommand.php:11:abstract class AbstractRebuildCommand extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildAttachmentThumbs.php:7:class RebuildAttachmentThumbs extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildForums.php:7:class RebuildForums extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildThreads.php:8:class RebuildThreads extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildStats.php:8:class RebuildStats extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildReactionScore.php:7:class RebuildReactionScore extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildIconUsage.php:7:class RebuildIconUsage extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildMessageCounts.php:7:class RebuildMessageCounts extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSitemap.php:7:class RebuildSitemap extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractImageOptimizationCommand.php:7:abstract class AbstractImageOptimizationCommand extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/RebuildMasterData.php:10:class RebuildMasterData extends AbstractCommand implements CustomAppCommandInterface\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:18:\\t\\t\\t->setName('xf:addon-sub-action')\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:66:\\t\\t\\t\\t\\t$this->importAddOnData($input, $output, $addOn);\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:12:class AddOnRebuild extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:20:\\t\\t\\t->setName('xf:addon-rebuild')\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/AbstractImportCommand.php:87:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/LintTemplates.php:39:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/GeneratePhpStormMeta.php:145:\\t\\t\\t'AddOnDataType' => [\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildMetadata.php:9:class RebuildMetadata extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildCaches.php:11:class RebuildCaches extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/SyncTemplates.php:37:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildPosts.php:7:class RebuildPosts extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePosts.php:7:class RebuildProfilePosts extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildConversationMessages.php:7:class RebuildConversationMessages extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePostComments.php:7:class RebuildProfilePostComments extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:40:\\t\\t\\t\\t\\t$dataManager->finalizeRemoveAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:52:\\t\\t\\t$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);\\n/var/www/forums/newfi/public/src/XF/Job/Poll.php:7:class Poll extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/SearchRebuild.php:9:class SearchRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AttachmentThumb.php:10:class AttachmentThumb extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/StylePropertyRebuild.php:7:class StylePropertyRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/MessageCount.php:8:class MessageCount extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Thread.php:7:class Thread extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuildPartial.php:7:class PermissionRebuildPartial extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AbstractImageOptimizationJob.php:7:abstract class AbstractImageOptimizationJob extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/SearchForum.php:8:class SearchForum extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Forum.php:5:class Forum extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuild.php:9:class PermissionRebuild extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/AbstractRebuildJob.php:5:abstract class AbstractRebuildJob extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/ProfilePost.php:5:class ProfilePost extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/CoreCacheRebuild.php:31:class CoreCacheRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/StyleAssetRebuild.php:7:class StyleAssetRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/PhraseRebuild.php:12:class PhraseRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:7:class AddOnData extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:66:\\t\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:105:\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:111:\\t\\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:115:\\t\\t\\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\\n/var/www/forums/newfi/public/src/XF/Job/Gravatar.php:10:class Gravatar extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Conversation.php:7:class Conversation extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/TemplateRebuild.php:12:class TemplateRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/User.php:9:class User extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnInstallBatch.php:341:\\t\\t$job = $this->app->job(AddOnData::class, 0, $params['data']);\\n/var/www/forums/newfi/public/src/XF/Job/ReactionScore.php:7:class ReactionScore extends AbstractRebuildJob\\n\"}\nSTAGING_QGA={\"err\":\"\",\"hostname\":\"newfi-staging\",\"rc\":0}\nPRODUCTION_QGA={\"err\":\"\",\"hostname\":\"newfi-prod\",\"rc\":0}\nPRODUCTION_PUBLIC_HTTP={\"err\":\"\",\"http\":\"200\",\"rc\":0}\nSTAGING_LOCAL_HTTP={\"err\":\"\",\"http\":\"503\",\"rc\":0}\nFINAL_DECISION=RCA7_COMPLETE_NO_MUTATION_ALL_REMAINING_TEMPLATE_IMPORT_EVIDENCE_READY\nRCA7_END=true\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 9f625778..c11093c2 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA6 +COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=newfi-portal200-template-core-lines-rca +COMPONENT=newfi-portal200-consolidated-final-template-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=84df0e67fb91124a9acfd1c41458b9febc7e743d2c0fba447b0d74a110e353c3 +COMMAND_SHA256=c5f396b50e88cd61820fa8cdbca3f34d37dc259b18372b37317ac6fdb2a7c1ae DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,11 +24,11 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=91750f7eda8b481c871c034b78e691a7e5ae061d9c797556abbc8d713a18534f -SANITIZED_OUTPUT_SHA256=91750f7eda8b481c871c034b78e691a7e5ae061d9c797556abbc8d713a18534f +RAW_EVIDENCE_SHA256=37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273 +SANITIZED_OUTPUT_SHA256=37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273 OUTPUT_BEGIN -RCA6_BEGIN=true -COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA6 +RCA7_BEGIN=true +COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 MUTATION_SCOPE=NONE_READ_ONLY MUTATIONS_PERFORMED=NO ERROR_REGISTER_CHECK=OK @@ -36,85 +36,41 @@ ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4 REFERENCE_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -RCA5_HISTORY_SHA256=6cec5749e70ada07962405e451e27090595139a53467c42f191af36de5182d17 -RCA5_STATUS=OK -GIT_HEAD=06bab5acd124e768f70305b3d7eca2f595871890 -GIT_STATUS= +NEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394 +NEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL +FAILED_CHANGES_MADE=true +FAILED_ROLLBACK_STARTED=true +FAILED_ROLLBACK_RESTORED=false +FAILED_MUTATION_OUTCOME=ROLLBACK_FAILED +FAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE +NEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_HISTORY_SHA256=76f74a798da08cdfa0e1545961b58ffb293b33c15868510c915c3dbb261bac34 +NEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_STATUS=OK +GIT_HEAD={"err":"","out":"06bab5acd124e768f70305b3d7eca2f595871890","rc":0} +GIT_STATUS={"err":"","out":"","rc":0} +GIT_LOG3={"err":"","out":"06bab5a (HEAD -> implementation/newfi-closed-mvp-20260906, origin/implementation/newfi-closed-mvp-20260906) style: apply Big Water XenForo theme [NEWFI-260907-STYLE199B]\n4ade504 brand: add Newfi technical identity assets\n9f7e0ca ops: authorize final Newfi public cutover","rc":0} GIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890 -TEMPLATE_READ_RC=0 -TEMPLATE_LINE_72=$existing = []; -TEMPLATE_LINE_73=} -TEMPLATE_LINE_74= -TEMPLATE_LINE_75=$i = 0; -TEMPLATE_LINE_76=$last = 0; -TEMPLATE_LINE_77= -TEMPLATE_LINE_78=foreach ($entries AS $entry) -TEMPLATE_LINE_79={ -TEMPLATE_LINE_80=$i++; -TEMPLATE_LINE_81= -TEMPLATE_LINE_82=if ($i <= $start) -TEMPLATE_LINE_83={ -TEMPLATE_LINE_84=continue; -TEMPLATE_LINE_85=} -TEMPLATE_LINE_86= -TEMPLATE_LINE_87=$type = (string) $entry['type']; -TEMPLATE_LINE_88=$title = (string) $entry['title']; -TEMPLATE_LINE_89=$entity = $existing[$type][$title] ?? $this->create(); -TEMPLATE_LINE_90=$entity->setOption('check_duplicate', false); -TEMPLATE_LINE_91=$entity->setOption('report_modification_errors', false); -TEMPLATE_LINE_92=$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false); -TEMPLATE_LINE_93= -TEMPLATE_LINE_94=$this->importMappedAttributes($entry, $entity); -TEMPLATE_LINE_95=$entity->style_id = 0; -TEMPLATE_LINE_96=$entity->template = $this->getCdataValue($entry); -TEMPLATE_LINE_97=$entity->addon_id = $addOnId; -TEMPLATE_LINE_98=$entity->save(true, false); -TEMPLATE_LINE_99= -TEMPLATE_LINE_100=\XF::dequeueRunOnce('styleLastModifiedDate'); -TEMPLATE_LINE_101= -TEMPLATE_LINE_102=if ($this->resume($maxRunTime, $startTime)) -TEMPLATE_LINE_103={ -TEMPLATE_LINE_104=$last = $i; -TEMPLATE_LINE_105=break; -ABSTRACT_READ_RC=0 -ABSTRACT_LINE_262=if (self::USE_AUTO_CDATA) -ABSTRACT_LINE_263={ -ABSTRACT_LINE_264=if (isset($el[$attr])) -ABSTRACT_LINE_265={ -ABSTRACT_LINE_266=$entity->$attr = (string) $el[$attr]; -ABSTRACT_LINE_267=} -ABSTRACT_LINE_268=else if (isset($el->{$attr})) -ABSTRACT_LINE_269={ -ABSTRACT_LINE_270=$entity->$attr = (string) $el->{$attr}; -ABSTRACT_LINE_271=} -ABSTRACT_LINE_272=} -ABSTRACT_LINE_273=else -ABSTRACT_LINE_274={ -ABSTRACT_LINE_275=$entity->$attr = (string) $el[$attr]; -ABSTRACT_LINE_276=} -ABSTRACT_LINE_277=} -ABSTRACT_LINE_278=} -ABSTRACT_LINE_279= -ABSTRACT_LINE_280=protected function pluckXmlAttribute(\SimpleXMLElement $els, $key) -ABSTRACT_LINE_281={ -ABSTRACT_LINE_282=$values = []; -ENTITY_READ_RC=0 -ENTITY_LINE_638=if ($this->_writePending == 'delete') -ENTITY_LINE_639={ -ENTITY_LINE_640=throw new \LogicException("Attempted to set '$key' while a deletion was pending"); -ENTITY_LINE_641=} -ENTITY_LINE_642= -ENTITY_LINE_643=if ($this->_writePending && empty($options['forceSet'])) -ENTITY_LINE_644={ -ENTITY_LINE_645=throw new \LogicException("Attempted to set '$key' while a save was pending without forceSet"); -ENTITY_LINE_646=} -ENTITY_LINE_647= -ENTITY_LINE_648=if (!isset($this->_structure->columns[$key])) -CANDIDATE_CHILD_COUNT=2 -CANDIDATE_CHILD_0_IDENTITY=template|public|newfi_portal|0|1000010|1.0.0 Alpha 1 -CANDIDATE_CHILD_1_IDENTITY=template|public|newfi_portal.less|0|1000010|1.0.0 Alpha 1 -FINAL_DECISION=RCA6_COMPLETE_NO_MUTATION_EXACT_CORE_LINES_READY -RCA6_END=true +CANDIDATE_XML_BYTES=10977 +CANDIDATE_XML_SHA256=1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861 +CANDIDATE_CHILDREN=[{"attrib":{"title":"newfi_portal","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"i":0,"tag":"template","text_bytes":7027,"text_sha256":"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a"},{"attrib":{"title":"newfi_portal.less","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"i":1,"tag":"template","text_bytes":3634,"text_sha256":"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8"}] +TEMPLATE_DATATYPE={"err":"","path":"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php","rc":0,"text":" 35\t\t\t\t$this->exportMappedAttributes($node, $entry);\n 36\t\t\t\t$this->exportCdata($node, $entry->template);\n 37\t\n 38\t\t\t\t$container->appendChild($node);\n 39\t\t\t}\n 40\t\n 41\t\t\treturn $entries->count() ? true : false;\n 42\t\t}\n 43\t\n 44\t\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\n 45\t\t{\n 46\t\t\t$startTime = microtime(true);\n 47\t\n 48\t\t\t$entries = $this->getEntries($container, $start);\n 49\t\t\tif (!$entries)\n 50\t\t\t{\n 51\t\t\t\treturn false;\n 52\t\t\t}\n 53\t\n 54\t\t\t$conditions = [];\n 55\t\t\tforeach ($entries AS $entry)\n 56\t\t\t{\n 57\t\t\t\t$conditions[] = [\n 58\t\t\t\t\t'type' => (string) $entry['type'],\n 59\t\t\t\t\t'title' => (string) $entry['title'],\n 60\t\t\t\t];\n 61\t\t\t}\n 62\t\t\tif ($conditions)\n 63\t\t\t{\n 64\t\t\t\t$existing = $this->finder()\n 65\t\t\t\t\t->whereOr($conditions)\n 66\t\t\t\t\t->where('style_id', 0)\n 67\t\t\t\t\t->fetch()\n 68\t\t\t\t\t->groupBy('type', 'title');\n 69\t\t\t}\n 70\t\t\telse\n 71\t\t\t{\n 72\t\t\t\t$existing = [];\n 73\t\t\t}\n 74\t\n 75\t\t\t$i = 0;\n 76\t\t\t$last = 0;\n 77\t\n 78\t\t\tforeach ($entries AS $entry)\n 79\t\t\t{\n 80\t\t\t\t$i++;\n 81\t\n 82\t\t\t\tif ($i <= $start)\n 83\t\t\t\t{\n 84\t\t\t\t\tcontinue;\n 85\t\t\t\t}\n 86\t\n 87\t\t\t\t$type = (string) $entry['type'];\n 88\t\t\t\t$title = (string) $entry['title'];\n 89\t\t\t\t$entity = $existing[$type][$title] ?? $this->create();\n 90\t\t\t\t$entity->setOption('check_duplicate', false);\n 91\t\t\t\t$entity->setOption('report_modification_errors', false);\n 92\t\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\n 93\t\n 94\t\t\t\t$this->importMappedAttributes($entry, $entity);\n 95\t\t\t\t$entity->style_id = 0;\n 96\t\t\t\t$entity->template = $this->getCdataValue($entry);\n 97\t\t\t\t$entity->addon_id = $addOnId;\n 98\t\t\t\t$entity->save(true, false);\n 99\t\n 100\t\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');\n 101\t\n 102\t\t\t\tif ($this->resume($maxRunTime, $startTime))\n 103\t\t\t\t{\n 104\t\t\t\t\t$last = $i;\n 105\t\t\t\t\tbreak;\n 106\t\t\t\t}\n 107\t\t\t}\n 108\t\t\treturn ($last ?: false);\n 109\t\t}\n 110\t\n 111\t\tpublic function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container)\n 112\t\t{\n 113\t\t\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\n 114\t\t\tif (!$existing)\n 115\t\t\t{\n"} +ABSTRACT_DATATYPE={"err":"","path":"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php","rc":0,"text":" 220\t\t\t\t\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\n 221\t\t\t\t\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\"]*$/si', $value))\n 222\t\t\t\t\t{\n 223\t\t\t\t\t\t// This exports CDATA, but does not escape `]]>` like \\XF\\Util\\XML::createDomCdataSection(),\n 224\t\t\t\t\t\t// because it needs to be transparently importable.\n 225\t\t\t\t\t\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\n 226\t\t\t\t\t\t// and remove this attribute from exportMappedAttributes()\n 227\t\n 228\t\t\t\t\t\t$newNode = $tag->ownerDocument->createElement($attr);\n 229\t\n 230\t\t\t\t\t\t$newNode->appendChild(\n 231\t\t\t\t\t\t\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\n 232\t\t\t\t\t\t);\n 233\t\n 234\t\t\t\t\t\t$tag->appendChild($newNode);\n 235\t\t\t\t\t}\n 236\t\t\t\t\telse\n 237\t\t\t\t\t{\n 238\t\t\t\t\t\t$tag->setAttribute($attr, $value);\n 239\t\t\t\t\t}\n 240\t\t\t\t}\n 241\t\t\t}\n 242\t\t}\n 243\t\n 244\t\tprotected function importMappedAttributes(\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\n 245\t\t{\n 246\t\t\tif ($entity->exists() && $allowMaintained)\n 247\t\t\t{\n 248\t\t\t\t$maintained = $this->getMaintainedAttributes();\n 249\t\t\t}\n 250\t\t\telse\n 251\t\t\t{\n 252\t\t\t\t$maintained = [];\n 253\t\t\t}\n 254\t\n 255\t\t\tforeach ($this->getMappedAttributes() AS $attr)\n 256\t\t\t{\n 257\t\t\t\tif (in_array($attr, $maintained))\n 258\t\t\t\t{\n 259\t\t\t\t\tcontinue;\n 260\t\t\t\t}\n 261\t\n 262\t\t\t\tif (self::USE_AUTO_CDATA)\n 263\t\t\t\t{\n 264\t\t\t\t\tif (isset($el[$attr]))\n 265\t\t\t\t\t{\n 266\t\t\t\t\t\t$entity->$attr = (string) $el[$attr];\n 267\t\t\t\t\t}\n 268\t\t\t\t\telse if (isset($el->{$attr}))\n 269\t\t\t\t\t{\n 270\t\t\t\t\t\t$entity->$attr = (string) $el->{$attr};\n 271\t\t\t\t\t}\n 272\t\t\t\t}\n 273\t\t\t\telse\n 274\t\t\t\t{\n 275\t\t\t\t\t$entity->$attr = (string) $el[$attr];\n 276\t\t\t\t}\n 277\t\t\t}\n 278\t\t}\n 279\t\n 280\t\tprotected function pluckXmlAttribute(\\SimpleXMLElement $els, $key)\n 281\t\t{\n 282\t\t\t$values = [];\n 283\t\t\t$i = 0;\n 284\t\t\tforeach ($els AS $el)\n 285\t\t\t{\n 286\t\t\t\t$values[$i++] = (string) $el[$key];\n 287\t\t\t}\n 288\t\n 289\t\t\treturn $values;\n 290\t\t}\n 291\t\n 292\t\tprotected function getSimpleAttributes(\\SimpleXMLElement $el)\n 293\t\t{\n 294\t\t\t$output = [];\n 295\t\t\tforeach ($el->attributes() AS $key => $val)\n 296\t\t\t{\n 297\t\t\t\t$output[$key] = (string) $val;\n 298\t\t\t}\n 299\t\t\treturn $output;\n 300\t\t}\n"} +ADDON_DATA_JOB={"err":"","path":"/var/www/forums/newfi/public/src/XF/Job/AddOnData.php","rc":0,"text":" 1\t null,\n 11\t\t\t'data_dir' => null,\n 12\t\n 13\t\t\t'data_types' => null,\n 14\t\t\t'current_type' => null,\n 15\t\n 16\t\t\t'start' => 0,\n 17\t\t];\n 18\t\n 19\t\tprotected $currentType = null;\n 20\t\tprotected $lastIndex = 0;\n 21\t\tprotected $totalEntries = 0;\n 22\t\n 23\t\tpublic function run($maxRunTime)\n 24\t\t{\n 25\t\t\tif ($this->data['addon_id'] != 'XF')\n 26\t\t\t{\n 27\t\t\t\t$addOnManager = $this->app->addOnManager();\n 28\t\t\t\t$addOn = $addOnManager->getById($this->data['addon_id']);\n 29\t\t\t\tif (!$addOn)\n 30\t\t\t\t{\n 31\t\t\t\t\t// add-on isn't installed, can't do anything\n 32\t\t\t\t\treturn $this->complete();\n 33\t\t\t\t}\n 34\t\n 35\t\t\t\tif ($this->data['data_dir'] === null)\n 36\t\t\t\t{\n 37\t\t\t\t\t$this->data['data_dir'] = $addOn->getDataDirectory();\n 38\t\t\t\t}\n 39\t\t\t}\n 40\t\t\telse\n 41\t\t\t{\n 42\t\t\t\t$addOn = null; // don't populate this for XF since it wouldn't be the same type of object\n 43\t\n 44\t\t\t\tif ($this->data['data_dir'] === null)\n 45\t\t\t\t{\n 46\t\t\t\t\t$ds = \\XF::$DS;\n 47\t\t\t\t\t$this->data['data_dir'] = \\XF::getAddOnDirectory() . $ds . 'XF' . $ds . '_data';\n 48\t\t\t\t}\n 49\t\t\t}\n 50\t\n 51\t\t\t$dataManager = $this->app->addOnDataManager();\n 52\t\n 53\t\t\t$addOnId = $this->data['addon_id'];\n 54\t\t\t$dataDir = $this->data['data_dir'];\n 55\t\n 56\t\t\tif ($this->data['data_types'] === null)\n 57\t\t\t{\n 58\t\t\t\t$dataTypes = $dataManager->getDataTypeClasses();\n 59\t\t\t\tforeach ($dataTypes AS $key => $dataType)\n 60\t\t\t\t{\n 61\t\t\t\t\t$handler = $dataManager->getDataTypeHandler($dataType);\n 62\t\t\t\t\t$xml = $handler->openTypeFile($dataDir);\n 63\t\t\t\t\tif (!$xml || !$xml->count())\n 64\t\t\t\t\t{\n 65\t\t\t\t\t\t// We can skip this type entirely, but clean up any existing data first\n 66\t\t\t\t\t\t$handler->deleteAddOnData($addOnId);\n 67\t\t\t\t\t\tunset($dataTypes[$key]);\n 68\t\t\t\t\t}\n 69\t\t\t\t}\n 70\t\t\t\t$this->data['data_types'] = $dataTypes;\n 71\t\t\t}\n 72\t\n 73\t\t\tif (!$this->data['current_type'])\n 74\t\t\t{\n 75\t\t\t\t$this->data['current_type'] = array_shift($this->data['data_types']);\n 76\t\t\t\tif (!$this->data['current_type'])\n 77\t\t\t\t{\n 78\t\t\t\t\tif ($addOn)\n 79\t\t\t\t\t{\n 80\t\t\t\t\t\t$addOn->postDataImport();\n 81\t\t\t\t\t}\n 82\t\n 83\t\t\t\t\t$repo = $this->app->repository(StyleRepository::class);\n 84\t\t\t\t\t$repo->updateAllStylesLastModifiedDateLater();\n 85\t\n 86\t\t\t\t\treturn $this->complete();\n 87\t\t\t\t}\n 88\t\n 89\t\t\t\t$this->data['start'] = 0;\n 90\t\t\t}\n 91\t\n 92\t\t\t$start = $this->data['start'];\n 93\t\t\t$type = $this->data['current_type'];\n 94\t\n 95\t\t\t$handler = $dataManager->getDataTypeHandler($type);\n 96\t\n 97\t\t\t$this->currentType = $handler->getContainerTag();\n 98\t\t\t$this->lastIndex = $start;\n 99\t\n 100\t\t\t$xml = $handler->openTypeFile($dataDir);\n 101\t\t\tif (!$xml || !$xml->count())\n 102\t\t\t{\n 103\t\t\t\t// No data so skip and delete existing data for type (if any)\n 104\t\t\t\t$this->data['current_type'] = null;\n 105\t\t\t\t$handler->deleteAddOnData($addOnId);\n 106\t\t\t\treturn $this->resume();\n 107\t\t\t}\n 108\t\n 109\t\t\t$this->totalEntries = $xml->count();\n 110\t\n 111\t\t\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\n 112\t\t\tif (!$last)\n 113\t\t\t{\n 114\t\t\t\t// finished type, delete any existing data not in the XML file for this type\n 115\t\t\t\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\n 116\t\n 117\t\t\t\t\\XF::triggerRunOnce();\n 118\t\t\t\t$this->data['current_type'] = null;\n 119\t\t\t\treturn $this->resume();\n 120\t\t\t}\n 121\t\n 122\t\t\t$this->data['start'] = $last;\n 123\t\t\treturn $this->resume();\n 124\t\t}\n 125\t\n 126\t\tpublic function getStatusMessage()\n 127\t\t{\n 128\t\t\t// TODO: These (and the types) probably should be phrased\n 129\t\t\t$actionPhrase = 'Importing';\n 130\t\t\tif ($this->data['addon_id'] == 'XF')\n 131\t\t\t{\n 132\t\t\t\t$typePhrase = 'Master data';\n 133\t\t\t}\n 134\t\t\telse\n 135\t\t\t{\n 136\t\t\t\t$typePhrase = 'Add-on data';\n 137\t\t\t}\n 138\t\n 139\t\t\t$currentType = null;\n 140\t\t\tif ($this->currentType)\n 141\t\t\t{\n 142\t\t\t\t$currentType = ucfirst(str_replace('_', ' ', $this->currentType));\n 143\t\t\t}\n 144\t\n 145\t\t\tif ($currentType && $this->lastIndex)\n 146\t\t\t{\n 147\t\t\t\t$percentage = $this->app->language()->numberFormat(($this->lastIndex / $this->totalEntries) * 100, 1);\n 148\t\t\t\treturn sprintf('%s... %s (%s: %s%%)', $actionPhrase, $typePhrase, $currentType, $percentage);\n 149\t\t\t}\n 150\t\t\telse if ($currentType)\n 151\t\t\t{\n 152\t\t\t\treturn sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);\n 153\t\t\t}\n 154\t\t\telse\n 155\t\t\t{\n 156\t\t\t\treturn sprintf('%s... %s', $actionPhrase, $typePhrase);\n 157\t\t\t}\n 158\t\t}\n 159\t\n 160\t\tpublic function canCancel()\n 161\t\t{\n 162\t\t\treturn false;\n 163\t\t}\n 164\t\n 165\t\tpublic function canTriggerByChoice()\n 166\t\t{\n 167\t\t\treturn false;\n 168\t\t}\n 169\t}\n"} +ENTITY_CORE={"err":"","path":"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php","rc":0,"text":" 520\t\t\t\t{\n 521\t\t\t\t\tthrow new \\InvalidArgumentException(\"To many relations must be hydrated with collections\");\n 522\t\t\t\t}\n 523\t\t\t}\n 524\t\t\telse\n 525\t\t\t{\n 526\t\t\t\tif ($value !== null && !($value instanceof Entity))\n 527\t\t\t\t{\n 528\t\t\t\t\tthrow new \\InvalidArgumentException(\"To one relations must be hydrated with entities or null\");\n 529\t\t\t\t}\n 530\t\t\t}\n 531\t\n 532\t\t\t$this->_relations[$key] = $value;\n 533\t\t}\n 534\t\n 535\t\tpublic function getExistingRelation($key)\n 536\t\t{\n 537\t\t\t$relations = $this->_structure->relations;\n 538\t\n 539\t\t\tif (empty($relations[$key]))\n 540\t\t\t{\n 541\t\t\t\tthrow new \\InvalidArgumentException(\"Unknown relation $key\");\n 542\t\t\t}\n 543\t\n 544\t\t\treturn $this->_em->getRelation($relations[$key], $this, 'existing');\n 545\t\t}\n 546\t\n 547\t\tpublic function getRelationFinder($key, $type = 'current')\n 548\t\t{\n 549\t\t\t$relations = $this->_structure->relations;\n 550\t\n 551\t\t\tif (empty($relations[$key]))\n 552\t\t\t{\n 553\t\t\t\tthrow new \\InvalidArgumentException(\"Unknown relation $key\");\n 554\t\t\t}\n 555\t\n 556\t\t\treturn $this->_em->getRelationFinder($relations[$key], $this, $type);\n 557\t\t}\n 558\t\n 559\t\tpublic function toArray($allowGetters = true)\n 560\t\t{\n 561\t\t\t$output = [];\n 562\t\t\tforeach ($this->_structure->columns AS $key => $null)\n 563\t\t\t{\n 564\t\t\t\t$output[$key] = $allowGetters ? $this->get($key) : $this->getValue($key);\n 565\t\t\t}\n 566\t\n 567\t\t\treturn $output;\n 568\t\t}\n 569\t\n 570\t\tfinal public function toApiResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\n 571\t\t{\n 572\t\t\t$result = new EntityResult($this);\n 573\t\t\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\n 574\t\n 575\t\t\tif ($subResult instanceof EntityResultInterface)\n 576\t\t\t{\n 577\t\t\t\treturn $subResult;\n 578\t\t\t}\n 579\t\t\telse\n 580\t\t\t{\n 581\t\t\t\treturn $result;\n 582\t\t\t}\n 583\t\t}\n 584\t\n 585\t\tfinal public function toWebhookResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\n 586\t\t{\n 587\t\t\t$result = new EntityResult($this, EntityResultInterface::TYPE_WEBHOOK);\n 588\t\t\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\n 589\t\n 590\t\t\tif ($subResult instanceof EntityResultInterface)\n 591\t\t\t{\n 592\t\t\t\treturn $subResult;\n 593\t\t\t}\n 594\t\n 595\t\t\treturn $result;\n 596\t\t}\n 597\t\n 598\t\t/**\n 599\t\t * This method must be overridden to enable API access to this entity.\n 600\t\t *\n 601\t\t * @param EntityResult $result\n 602\t\t * @param int $verbosity\n 603\t\t * @param array $options\n 604\t\t */\n 605\t\tprotected function setupApiResultData(\n 606\t\t\tEntityResult $result,\n 607\t\t\t$verbosity = self::VERBOSITY_NORMAL,\n 608\t\t\tarray $options = []\n 609\t\t)\n 610\t\t{\n 611\t\t\tthrow new \\LogicException(\n 612\t\t\t\t\"API result rules not defined by \" . $this->_structure->shortName . '. Override setupApiResultData().'\n 613\t\t\t);\n 614\t\t}\n 615\t\n 616\t\tpublic function __set($key, $value)\n 617\t\t{\n 618\t\t\t$this->set($key, $value);\n 619\t\t}\n 620\t\n 621\t\tpublic function offsetSet($key, $value): void\n 622\t\t{\n 623\t\t\t$this->set($key, $value);\n 624\t\t}\n 625\t\n 626\t\tpublic function set($key, $value, array $options = [])\n 627\t\t{\n 628\t\t\tif ($this->_readOnly)\n 629\t\t\t{\n 630\t\t\t\tthrow new \\LogicException(\"Entity is read only\");\n 631\t\t\t}\n 632\t\n 633\t\t\tif ($this->_deleted)\n 634\t\t\t{\n 635\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' on a deleted entity\");\n 636\t\t\t}\n 637\t\n 638\t\t\tif ($this->_writePending == 'delete')\n 639\t\t\t{\n 640\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\n 641\t\t\t}\n 642\t\n 643\t\t\tif ($this->_writePending && empty($options['forceSet']))\n 644\t\t\t{\n 645\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\n 646\t\t\t}\n 647\t\n 648\t\t\tif (!isset($this->_structure->columns[$key]))\n 649\t\t\t{\n 650\t\t\t\tif (empty($options['skipInvalid']))\n 651\t\t\t\t{\n 652\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 653\t\t\t\t}\n 654\t\t\t\treturn false;\n 655\t\t\t}\n 656\t\n 657\t\t\t$column = $this->_structure->columns[$key];\n 658\t\n 659\t\t\tif ((!empty($column['readOnly']) || !empty($column['autoIncrement'])) && empty($options['forceSet']))\n 660\t\t\t{\n 661\t\t\t\tif (empty($options['skipInvalid']))\n 662\t\t\t\t{\n 663\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is read only, can only be set with forceSet\");\n 664\t\t\t\t}\n 665\t\t\t\treturn false;\n 666\t\t\t}\n 667\t\n 668\t\t\tif (!empty($column['writeOnce']) && $this->isUpdate() && empty($options['forceSet']))\n 669\t\t\t{\n 670\t\t\t\tif (empty($options['skipInvalid']))\n 671\t\t\t\t{\n 672\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' can only be written on insert or set with forceSet\");\n 673\t\t\t\t}\n 674\t\t\t\treturn false;\n 675\t\t\t}\n 676\t\n 677\t\t\tif ($value instanceof DeferredValue)\n 678\t\t\t{\n 679\t\t\t\t$this->_setInternal($key, $value);\n 680\t\t\t\treturn true;\n 681\t\t\t}\n 682\t\n 683\t\t\tif (!$this->_verifyValueCustom($value, $key, $column['type'], $column))\n 684\t\t\t{\n 685\t\t\t\treturn false;\n 686\t\t\t}\n 687\t\n 688\t\t\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\n 689\t\n 690\t\t\tif (!$this->_em->getValueFormatter()->applyValueConstraints(\n 691\t\t\t\t$value,\n 692\t\t\t\t$column['type'],\n 693\t\t\t\t$column,\n 694\t\t\t\t$constraintError,\n 695\t\t\t\t!empty($options['forceConstraint'])\n 696\t\t\t))\n 697\t\t\t{\n 698\t\t\t\tif ($constraintError)\n 699\t\t\t\t{\n 700\t\t\t\t\t$this->error($constraintError, $key, false);\n 701\t\t\t\t}\n 702\t\n 703\t\t\t\treturn false;\n 704\t\t\t}\n 705\t\n 706\t\t\tif ($this->_columnValueIsDifferent($key, $value, $column) && $value !== null)\n 707\t\t\t{\n 708\t\t\t\tif (!empty($column['unique']))\n 709\t\t\t\t{\n 710\t\t\t\t\tif (!$this->_verifyUniqueValue($value, $key, $column['unique']))\n 711\t\t\t\t\t{\n 712\t\t\t\t\t\treturn false;\n 713\t\t\t\t\t}\n 714\t\t\t\t}\n 715\t\t\t\telse if (!empty($column['autoIncrement']) || $this->_structure->primaryKey === $key)\n 716\t\t\t\t{\n 717\t\t\t\t\tif (!$this->_verifyUniqueValue($value, $key, true))\n 718\t\t\t\t\t{\n 719\t\t\t\t\t\treturn false;\n 720\t\t\t\t\t}\n 721\t\t\t\t}\n 722\t\t\t}\n 723\t\n 724\t\t\t$this->_setInternal($key, $value);\n 725\t\t\treturn true;\n 726\t\t}\n 727\t\n 728\t\tpublic function setTrusted($key, $value)\n 729\t\t{\n 730\t\t\tif (!isset($this->_structure->columns[$key]))\n 731\t\t\t{\n 732\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 733\t\t\t}\n 734\t\n 735\t\t\t$column = $this->_structure->columns[$key];\n 736\t\t\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\n 737\t\n 738\t\t\t$this->_setInternal($key, $value);\n 739\t\t\treturn true;\n 740\t\t}\n 741\t\n 742\t\tpublic function setFromEncoded($key, $value, array $options = [])\n 743\t\t{\n 744\t\t\tif (!isset($this->_structure->columns[$key]))\n 745\t\t\t{\n 746\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 747\t\t\t}\n 748\t\n 749\t\t\t$column = $this->_structure->columns[$key];\n 750\t\n 751\t\t\t$value = $this->_em->decodeValueFromSourceExtended($column['type'], $value, $column);\n 752\t\t\treturn $this->set($key, $value, $options);\n 753\t\t}\n 754\t\n 755\t\tpublic function setAsSaved($key, $value)\n 756\t\t{\n 757\t\t\tif (!$this->exists() && !$this->_writeRunning)\n 758\t\t\t{\n 759\t\t\t\tthrow new \\LogicException(\"Can only set an already saved value on a saved entity\");\n 760\t\t\t}\n"} +TEMPLATE_ENTITY={"err":"","path":"/var/www/forums/newfi/public/src/XF/Entity/Template.php","rc":0,"text":" 1\t $History\n 44\t * @property-read Style|null $Style_\n 45\t */\n 46\tclass Template extends Entity\n 47\t{\n 48\t\tprotected $modificationStatuses = null;\n 49\t\n 50\t\t/**\n 51\t\t * @return string\n 52\t\t */\n 53\t\tpublic function getCombinedTitle()\n 54\t\t{\n 55\t\t\treturn \"{$this->type}:{$this->title}\";\n 56\t\t}\n 57\t\n 58\t\t/**\n 59\t\t * @return Style\n 60\t\t */\n 61\t\tpublic function getStyle()\n 62\t\t{\n 63\t\t\tif ($this->style_id == 0)\n 64\t\t\t{\n 65\t\t\t\treturn $this->getStyleRepo()->getMasterStyle();\n 66\t\t\t}\n 67\t\t\telse\n 68\t\t\t{\n 69\t\t\t\treturn $this->getRelation('Style');\n 70\t\t\t}\n 71\t\t}\n 72\t\n 73\t\t/**\n 74\t\t * @return Template|null\n 75\t\t */\n 76\t\tpublic function getParentTemplate()\n 77\t\t{\n 78\t\t\tif (!$this->style_id)\n 79\t\t\t{\n 80\t\t\t\treturn null;\n 81\t\t\t}\n 82\t\n 83\t\t\t$style = $this->Style;\n 84\t\t\tif (!$style)\n 85\t\t\t{\n 86\t\t\t\treturn null;\n 87\t\t\t}\n 88\t\n 89\t\t\t$templateMap = $this->finder(TemplateMapFinder::class)\n 90\t\t\t\t->where([\n 91\t\t\t\t\t'style_id' => $style->parent_id,\n 92\t\t\t\t\t'type' => $this->type,\n 93\t\t\t\t\t'title' => $this->title,\n 94\t\t\t\t])\n 95\t\t\t\t->with('Template', true)\n 96\t\t\t\t->with('Template.Style', false)\n 97\t\t\t\t->fetchOne();\n 98\t\t\tif (!$templateMap)\n 99\t\t\t{\n 100\t\t\t\treturn null;\n 101\t\t\t}\n 102\t\n 103\t\t\treturn $templateMap->Template;\n 104\t\t}\n 105\t\n 106\t\tpublic function getAbstractedCompiledTemplatePath($languageId, $styleId, $new = true)\n 107\t\t{\n 108\t\t\t$title = $new ? $this->getValue('title') : $this->getExistingValue('title');\n 109\t\t\t$type = $new ? $this->getValue('type') : $this->getExistingValue('type');\n 110\t\n 111\t\t\treturn 'code-cache://templates/l' . $languageId . '/s' . $styleId . '/' . $type . '/' . $title . '.php';\n 112\t\t}\n 113\t\n 114\t\tpublic function getHash()\n 115\t\t{\n 116\t\t\t$contents = str_replace(\"\\r\", '', $this->template);\n 117\t\t\treturn md5($contents);\n 118\t\t}\n 119\t\n 120\t\t/**\n 121\t\t * @return array\n 122\t\t */\n 123\t\tpublic function getPhrasesUsed()\n 124\t\t{\n 125\t\t\treturn $this->db()->fetchAllColumn(\"\n 126\t\t\t\tSELECT phrase_title\n 127\t\t\t\tFROM xf_template_phrase\n 128\t\t\t\tWHERE template_id = ?\n 129\t\t\t\", $this->template_id);\n 130\t\t}\n 131\t\n 132\t\tpublic function reparseTemplate($forceValid = false, &$error = null)\n 133\t\t{\n 134\t\t\t$valid = $this->validateTemplateText($this->template, $forceValid, $ast, $error);\n 135\t\t\tif ($valid && $ast != $this->template_parsed)\n 136\t\t\t{\n 137\t\t\t\t$this->template_parsed = $ast;\n 138\t\t\t\treturn true;\n 139\t\t\t}\n 140\t\t\tif (!$valid)\n 141\t\t\t{\n 142\t\t\t\t$this->error($error, 'template');\n 143\t\t\t\treturn true;\n 144\t\t\t}\n 145\t\n 146\t\t\treturn false;\n 147\t\t}\n 148\t\n 149\t\tpublic function setTemplateUnchecked($template)\n 150\t\t{\n 151\t\t\t$template = strval($template);\n 152\t\t\t$this->_setInternal('template', $template);\n 153\t\t\t$this->validateTemplateText($template, true, $ast);\n 154\t\n 155\t\t\t$this->template_parsed = $ast;\n 156\t\n 157\t\t\treturn true;\n 158\t\t}\n 159\t\n 160\t\tprotected function verifyTitle($title)\n 161\t\t{\n 162\t\t\tif (substr($title, 0, 1) == '.' || strpos($title, '..') !== false)\n 163\t\t\t{\n 164\t\t\t\t$this->error(\\XF::phrase('please_enter_title_using_only_alphanumeric_dot'), 'title');\n 165\t\t\t\treturn false;\n 166\t\t\t}\n 167\t\n 168\t\t\tif (preg_match('/\\.html$/i', $title))\n 169\t\t\t{\n 170\t\t\t\t$this->error(\\XF::phrase('template_titles_may_not_end_in_html'), 'title');\n 171\t\t\t\treturn false;\n 172\t\t\t}\n 173\t\n 174\t\t\treturn true;\n 175\t\t}\n 176\t\n 177\t\tprotected function verifyTemplate($template)\n 178\t\t{\n 179\t\t\t$valid = $this->validateTemplateText($template, false, $ast, $error);\n 180\t\t\tif (!$valid)\n 181\t\t\t{\n 182\t\t\t\t$this->error($error, 'template');\n 183\t\t\t\treturn false;\n 184\t\t\t}\n 185\t\n 186\t\t\t$this->template_parsed = $ast;\n 187\t\n 188\t\t\treturn true;\n 189\t\t}\n 190\t\n 191\t\tprotected function validateTemplateText($template, $forceValid = false, &$ast = null, &$error = null)\n 192\t\t{\n 193\t\t\t$compiler = $this->app()->templateCompiler();\n 194\t\n 195\t\t\t$templateModRepo = $this->repository(TemplateModificationRepository::class);\n 196\t\t\t$templateWithModifications = $templateModRepo->applyModificationsToTemplate(\n 197\t\t\t\t$this->type,\n 198\t\t\t\t$this->title,\n 199\t\t\t\t$template,\n 200\t\t\t\t$modificationStatuses\n 201\t\t\t);\n 202\t\n 203\t\t\t$standardParse = true;\n 204\t\t\t$error = null;\n 205\t\n 206\t\t\tif ($modificationStatuses)\n 207\t\t\t{\n 208\t\t\t\ttry\n 209\t\t\t\t{\n 210\t\t\t\t\t$ast = $compiler->compileToAst($templateWithModifications);\n 211\t\n 212\t\t\t\t\tif ($this->getOption('test_compile'))\n 213\t\t\t\t\t{\n 214\t\t\t\t\t\t$compiler->compileAst($ast);\n 215\t\t\t\t\t}\n 216\t\t\t\t\t$standardParse = false;\n 217\t\t\t\t}\n 218\t\t\t\tcatch (Exception $e)\n 219\t\t\t\t{\n 220\t\t\t\t\t$error = $e->getMessage() . ' - ' . \\XF::phrase('template_modifications:') . ' ' . \"{$this->type}:{$this->title}\";\n 221\t\t\t\t\tforeach ($modificationStatuses AS &$status)\n 222\t\t\t\t\t{\n 223\t\t\t\t\t\tif (is_int($status))\n 224\t\t\t\t\t\t{\n 225\t\t\t\t\t\t\t$status = 'error_compile';\n 226\t\t\t\t\t\t}\n 227\t\t\t\t\t}\n 228\t\t\t\t}\n 229\t\t\t}\n 230\t\n 231\t\t\tif ($standardParse)\n 232\t\t\t{\n 233\t\t\t\ttry\n 234\t\t\t\t{\n 235\t\t\t\t\t$ast = $compiler->compileToAst($template);\n 236\t\n 237\t\t\t\t\tif ($this->getOption('test_compile'))\n 238\t\t\t\t\t{\n 239\t\t\t\t\t\t$compiler->compileAst($ast);\n 240\t\t\t\t\t}\n 241\t\n 242\t\t\t\t\tif ($forceValid || !$this->getOption('report_modification_errors'))\n 243\t\t\t\t\t{\n 244\t\t\t\t\t\t$error = null;\n 245\t\t\t\t\t}\n 246\t\t\t\t}\n 247\t\t\t\tcatch (Exception $e)\n 248\t\t\t\t{\n 249\t\t\t\t\t$error = $e->getMessage() . ' - ' . \\XF::phrase('template_name:') . ' ' . \"{$this->type}:{$this->title}\";\n 250\t\t\t\t}\n 251\t\t\t}\n 252\t\n 253\t\t\tif ($forceValid && $error)\n 254\t\t\t{\n 255\t\t\t\t$error = null;\n 256\t\t\t\t$ast = $compiler->stringAst($template);\n 257\t\t\t}\n 258\t\n 259\t\t\tif ($error)\n 260\t\t\t{\n"} +ENTITY_WRITE_PENDING_ALL={"err":"","rc":0,"text":"76-\n77-\tprotected $_options = [];\n78-\n79-\tprotected $_deleted = false;\n80-\n81-\tprotected $_readOnly = false;\n82:\tprotected $_writePending = false;\n83-\tprotected $_writeRunning = false;\n84-\tprotected $_errors = [];\n85-\n86-\t/**\n87-\t * @var \\Closure[]\n88-\t */\n--\n632-\n633-\t\tif ($this->_deleted)\n634-\t\t{\n635-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' on a deleted entity\");\n636-\t\t}\n637-\n638:\t\tif ($this->_writePending == 'delete')\n639-\t\t{\n640-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\n641-\t\t}\n642-\n643:\t\tif ($this->_writePending && empty($options['forceSet']))\n644-\t\t{\n645-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\n646-\t\t}\n647-\n648-\t\tif (!isset($this->_structure->columns[$key]))\n649-\t\t{\n--\n1365-\t}\n1366-\n1367-\tfinal public function saveIfChanged(&$saved = null, $throw = true, $newTransaction = true)\n1368-\t{\n1369-\t\tif (!$this->_newValues && $this->isUpdate())\n1370-\t\t{\n1371:\t\t\t$this->_writePending = false;\n1372-\n1373-\t\t\t$saved = false;\n1374-\t\t\treturn true;\n1375-\t\t}\n1376-\n1377-\t\t$saved = true;\n--\n1412-\t\t$this->db()->update($this->_structure->table, $dbUpdate, $condition);\n1413-\t}\n1414-\n1415-\tfinal public function preSave()\n1416-\t{\n1417-\t\t// write will be pending after calling this; this means call it only once\n1418:\t\tif ($this->_writePending != 'save')\n1419-\t\t{\n1420-\t\t\t$this->_fillDeferredValues('preSave');\n1421-\t\t\t$this->_preSave();\n1422-\n1423-\t\t\tforeach ($this->getBehaviors() AS $behavior)\n1424-\t\t\t{\n--\n1453-\t\t\tif ($this->isInsert())\n1454-\t\t\t{\n1455-\t\t\t\t$this->_fillInsertDefaults();\n1456-\t\t\t}\n1457-\t\t\t$this->_validateRequirements();\n1458-\n1459:\t\t\t$this->_writePending = 'save';\n1460-\t\t}\n1461-\n1462-\t\treturn count($this->_errors) == 0;\n1463-\t}\n1464-\n1465-\tprotected function _preSave()\n--\n1610-\tprotected function _postSave()\n1611-\t{\n1612-\t}\n1613-\n1614-\tprotected function _saveCleanUp(array $newDbValues)\n1615-\t{\n1616:\t\t$this->_writePending = false;\n1617-\t\t$this->_writeRunning = false;\n1618-\t\t$this->_previousValues = $this->_values;\n1619-\t\t$this->_values = array_merge($this->_values, $newDbValues);\n1620-\t\t$this->_newValues = [];\n1621-\t\t$this->_errors = [];\n1622-\t\t$this->_cascadeSave = [];\n--\n1633-\t\t\t$fn($this);\n1634-\t\t}\n1635-\t}\n1636-\n1637-\tpublic function reset()\n1638-\t{\n1639:\t\t$this->_writePending = false;\n1640-\t\t$this->_newValues = [];\n1641-\t\t$this->_errors = [];\n1642-\t\t$this->_getterCache = [];\n1643-\t\t$this->_valueCache = [];\n1644-\t\t$this->_options = [];\n1645-\t\t$this->_cascadeSave = [];\n--\n1736-\t\tif ($newTransaction)\n1737-\t\t{\n1738-\t\t\t$db->commit();\n1739-\t\t}\n1740-\n1741-\t\t$this->_em->detachEntity($this);\n1742:\t\t$this->_writePending = false;\n1743-\t\t$this->_writeRunning = false;\n1744-\n1745-\t\treturn true;\n1746-\t}\n1747-\n1748-\tfinal public function preDelete()\n1749-\t{\n1750-\t\tif ($this->_deleted)\n1751-\t\t{\n1752-\t\t\treturn true;\n1753-\t\t}\n1754-\n1755:\t\tif ($this->_writePending != 'delete')\n1756-\t\t{\n1757-\t\t\t$this->_preDelete();\n1758-\n1759-\t\t\tforeach ($this->getBehaviors() AS $behavior)\n1760-\t\t\t{\n1761-\t\t\t\t$behavior->preDelete();\n--\n1804-\t\t\t\t\t\t}\n1805-\t\t\t\t\t}\n1806-\t\t\t\t}\n1807-\t\t\t}\n1808-\n1809-\t\t\t$this->_em->finishCascadeEvent('preDelete');\n1810:\t\t\t$this->_writePending = 'delete';\n1811-\t\t}\n1812-\n1813-\t\treturn count($this->_errors) == 0;\n1814-\t}\n1815-\n1816-\tpublic function isDeleted()\n"} +DB_SCHEMAS=["xf_newfi"] +TEMPLATE_INDEXES={"err":"","rc":0,"rows":["xf_template\t0\tPRIMARY\t1\ttemplate_id\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t1\ttype\tA\t6\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t2\ttitle\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t3\tstyle_id\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO"]} +TEMPLATE_ROWS={"err":"","rc":0,"rows":["1610\t0\tpublic\tnewfi_portal\tNewfi/Portal\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741"]} +ADDON_ROW={"err":"","rc":0,"rows":["Newfi/Portal\t1000010\t1.0.0 Alpha 1\t1\t0\tNULL"]} +ERROR42={"err":"","rc":0,"rows":["42\tLogicException\tAttempted to set 'type' while a save was pending without forceSet\tsrc/XF/Mvc/Entity/Entity.php\t645\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\Mvc\\\\Entity\\\\Entity->set('type', 'public')\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\Mvc\\\\Entity\\\\Entity->__set('type', 'public')\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\AddOn\\\\DataType\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\Entity\\\\Template))\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\AddOn\\\\DataType\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\n#4 src/XF/Job/Manager.php(275): XF\\\\Job\\\\AddOnData->run(8)\\n#5 src/XF/Job/Manager.php(205): XF\\\\Job\\\\Manager->runJobInternal(Array, 8)\\n#6 src/XF/Job/Manager.php(174): XF\\\\Job\\\\Manager->runJobEntry(Array, 8)\\n#7 src/XF/Cli/Runner.php(228): XF\\\\Job\\\\Manager->runById(530, 8)\\n#8 src/XF/Cli/Runner.php(116): XF\\\\Cli\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\\n#9 cmd.php(17): XF\\\\Cli\\\\Runner->run()\\n#10 {main}"]} +IN_MEMORY_ENTITY_PROBE={"err":"","rc":0,"rows":["{\"label\":\"initial\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_check_duplicate_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_report_modification_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_behavior_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_title\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_type\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_version_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_version_string\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_style_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_addon_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}"]} +NATIVE_REBUILD_IMPLEMENTATION_GREP={"err":"","rc":0,"text":"/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:16:use XF\\Job\\AddOnData;\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:150:\tprotected function importAddOnData(InputInterface $input, OutputInterface $output, AddOn $addOn)\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:171:\t\t\t\t'xfAddOnData-' . $addOn->addon_id,\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:172:\t\t\t\tAddOnData::class,\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:219:\t\t\t'xf:addon-sub-action',\n/var/www/forums/newfi/public/src/XF/Cli/Command/Designer/RebuildMetadata.php:11:class RebuildMetadata extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildUsers.php:7:class RebuildUsers extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSearch.php:8:class RebuildSearch extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractRebuildCommand.php:11:abstract class AbstractRebuildCommand extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildAttachmentThumbs.php:7:class RebuildAttachmentThumbs extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildForums.php:7:class RebuildForums extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildThreads.php:8:class RebuildThreads extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildStats.php:8:class RebuildStats extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildReactionScore.php:7:class RebuildReactionScore extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildIconUsage.php:7:class RebuildIconUsage extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildMessageCounts.php:7:class RebuildMessageCounts extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSitemap.php:7:class RebuildSitemap extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractImageOptimizationCommand.php:7:abstract class AbstractImageOptimizationCommand extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/RebuildMasterData.php:10:class RebuildMasterData extends AbstractCommand implements CustomAppCommandInterface\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:18:\t\t\t->setName('xf:addon-sub-action')\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:66:\t\t\t\t\t$this->importAddOnData($input, $output, $addOn);\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:12:class AddOnRebuild extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:20:\t\t\t->setName('xf:addon-rebuild')\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/AbstractImportCommand.php:87:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/LintTemplates.php:39:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/GeneratePhpStormMeta.php:145:\t\t\t'AddOnDataType' => [\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildMetadata.php:9:class RebuildMetadata extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildCaches.php:11:class RebuildCaches extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/SyncTemplates.php:37:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildPosts.php:7:class RebuildPosts extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePosts.php:7:class RebuildProfilePosts extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildConversationMessages.php:7:class RebuildConversationMessages extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePostComments.php:7:class RebuildProfilePostComments extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:40:\t\t\t\t\t$dataManager->finalizeRemoveAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:52:\t\t\t$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);\n/var/www/forums/newfi/public/src/XF/Job/Poll.php:7:class Poll extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/SearchRebuild.php:9:class SearchRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AttachmentThumb.php:10:class AttachmentThumb extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/StylePropertyRebuild.php:7:class StylePropertyRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/MessageCount.php:8:class MessageCount extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Thread.php:7:class Thread extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuildPartial.php:7:class PermissionRebuildPartial extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AbstractImageOptimizationJob.php:7:abstract class AbstractImageOptimizationJob extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/SearchForum.php:8:class SearchForum extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Forum.php:5:class Forum extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuild.php:9:class PermissionRebuild extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/AbstractRebuildJob.php:5:abstract class AbstractRebuildJob extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/ProfilePost.php:5:class ProfilePost extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/CoreCacheRebuild.php:31:class CoreCacheRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/StyleAssetRebuild.php:7:class StyleAssetRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/PhraseRebuild.php:12:class PhraseRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:7:class AddOnData extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:66:\t\t\t\t\t$handler->deleteAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:105:\t\t\t$handler->deleteAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:111:\t\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:115:\t\t\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\n/var/www/forums/newfi/public/src/XF/Job/Gravatar.php:10:class Gravatar extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Conversation.php:7:class Conversation extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/TemplateRebuild.php:12:class TemplateRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/User.php:9:class User extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnInstallBatch.php:341:\t\t$job = $this->app->job(AddOnData::class, 0, $params['data']);\n/var/www/forums/newfi/public/src/XF/Job/ReactionScore.php:7:class ReactionScore extends AbstractRebuildJob\n"} +STAGING_QGA={"err":"","hostname":"newfi-staging","rc":0} +PRODUCTION_QGA={"err":"","hostname":"newfi-prod","rc":0} +PRODUCTION_PUBLIC_HTTP={"err":"","http":"200","rc":0} +STAGING_LOCAL_HTTP={"err":"","http":"503","rc":0} +FINAL_DECISION=RCA7_COMPLETE_NO_MUTATION_ALL_REMAINING_TEMPLATE_IMPORT_EVIDENCE_READY +RCA7_END=true OUTPUT_END CHAT_OUTPUT_END