diff --git a/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module b/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module index 6c504eac..7b72d98e 100644 --- a/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module +++ b/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module @@ -5,7 +5,7 @@ * * Maintains a collection of fields that are repeated for any number of times. * - * ProcessWire 3.x, Copyright 2021 by Ryan Cramer + * ProcessWire 3.x, Copyright 2022 by Ryan Cramer * https://processwire.com * * @property int $repeaterMaxItems @@ -210,7 +210,6 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { * */ protected function getRepeaterItemType(Page $page) { - if($page) {} return 1; } @@ -256,9 +255,9 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { if(!$field) continue; $fieldContext = $fieldgroup && $fieldgroup->hasFieldContext($field) ? $fieldgroup->getFieldContext($field) : $field; - $fieldtype = $field ? $field->type : null; /** @var Fieldtype $fieldtype */ + $fieldtype = $field->type; - if(!$item && $fieldtype && $fieldtype instanceof FieldtypeFile) { + if(!$item && $fieldtype instanceof FieldtypeFile) { // repeater has no items yet and this is a file or image field if($fieldtype->getFieldsTemplate($field)) { // if it has custom fields, it needs a real example rather than $this->page substitute @@ -268,7 +267,7 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { } } - if($field) try { + try { // the following forces assets to be loaded $inputfield = $fieldContext->getInputfield($item ? $item : $this->page); if($inputfield) $this->renderReadyInputfield($inputfield); @@ -391,7 +390,7 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { $isSingle = $this->singleMode; // create field for each repeater iteration - foreach($value as $key => $page) { + foreach($value as /* $key => */ $page) { if($itemID && $page->id != $itemID) continue; /** @var RepeaterPage $page */ @@ -582,6 +581,7 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { if($itemID) { // only rendering a single item, ajax mode foreach($form->getAll() as $inputfield) { + /** @var Inputfield $inputfield */ $idAttr = $inputfield->attr('id'); $this->renderReadyInputfield($inputfield, $form, $this->renderValueMode); $jsValue = $this->wire()->config->js($idAttr); @@ -933,7 +933,7 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { $loadedIDs = array(); // determine which repeater pages have data posted in this request - foreach($value as $key => $page) { + foreach($value as $page) { $loadedName = "loaded_repeater$page->id"; if($isSingle || ((int) $input->$loadedName) > 0) $loadedIDs[$page->id] = $page->id; } @@ -1040,7 +1040,7 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { // if the sort changed, then tell the PageArray to sort by _repeater_sort if($sortChanged) { - $this->value->sort('sort'); + $value->sort('sort'); $numChanges++; } @@ -1085,6 +1085,7 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { $languages = $this->wire()->languages; foreach($wrapper as $inputfield) { + /** @var Inputfield $inputfield */ $name = $inputfield->attr('name'); $name = preg_replace('/_repeater\d+$/', '', $name); @@ -1093,6 +1094,8 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { if($languages && $inputfield->getSetting('useLanguages')) { $value = $page->get($name); if(is_object($value)) { + /** @var LanguagesPageFieldValue $value */ + $value->setTrackChanges(true); $value->setFromInputfield($inputfield); $page->set($name, $value); } diff --git a/wire/modules/LanguageSupport/LanguagesPageFieldValue.php b/wire/modules/LanguageSupport/LanguagesPageFieldValue.php index b87ea3d1..b69ebd1a 100644 --- a/wire/modules/LanguageSupport/LanguagesPageFieldValue.php +++ b/wire/modules/LanguageSupport/LanguagesPageFieldValue.php @@ -3,7 +3,7 @@ /** * Serves as a multi-language value placeholder for field values that contain a value in more than one language. * - * ProcessWire 3.x, Copyright 2021 by Ryan Cramer + * ProcessWire 3.x, Copyright 2022 by Ryan Cramer * https://processwire.com * */ @@ -65,6 +65,7 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \ * */ public function __construct($page = null, $field = null, $values = null) { // #98 + parent::__construct(); if($page) $this->setPage($page); if($field) $this->setField($field); @@ -152,8 +153,10 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \ * */ public function setLanguageValue($languageID, $value) { - if(is_object($languageID) && $languageID instanceof Language) $languageID = $languageID->id; - if(is_string($languageID) && !ctype_digit("$languageID")) $languageID = $this->wire()->languages->get($languageID)->id; + if($languageID instanceof Language) $languageID = $languageID->id; + if(is_string($languageID) && !ctype_digit("$languageID")) { + $languageID = $this->wire()->languages->get($languageID)->id; + } $existingValue = isset($this->data[$languageID]) ? $this->data[$languageID] : ''; if($value instanceof LanguagesPageFieldValue) { // to avoid potential recursion @@ -176,7 +179,8 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \ public function setFromInputfield(Inputfield $inputfield) { foreach($this->wire()->languages as $language) { - if($language->isDefault) { + /** @var Language $language */ + if($language->isDefault()) { $key = 'value'; } else { $key = 'value' . $language->id; @@ -194,7 +198,8 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \ */ public function setToInputfield(Inputfield $inputfield) { foreach($this->wire()->languages as $language) { - $key = $language->isDefault ? "value" : "value$language->id"; + /** @var Language $language */ + $key = $language->isDefault() ? "value" : "value$language->id"; $inputfield->set($key, $this->getLanguageValue($language->id)); } } @@ -207,7 +212,7 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \ * */ public function getLanguageValue($languageID) { - if(is_object($languageID) && $languageID instanceof Language) $languageID = $languageID->id; + if($languageID instanceof Language) $languageID = $languageID->id; if(is_string($languageID) && !ctype_digit("$languageID")) $languageID = $this->wire()->languages->get($languageID)->id; $languageID = (int) $languageID; return isset($this->data[$languageID]) ? $this->data[$languageID] : ''; @@ -240,7 +245,7 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \ $value = (string) $this->getDefaultValue(); if(strlen($value)) return $value; - foreach($this->wire('languages') as $language) { + foreach($this->wire()->languages as $language) { $value = $this->getLanguageValue($language->id); if(strlen($value)) break; }