diff --git a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module index 90f93050..8ac88ec2 100644 --- a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module +++ b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module @@ -329,7 +329,7 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel protected function renderItemDescriptionField(Pagefile $pagefile, $id, $n) { $sanitizer = $this->wire()->sanitizer; - $languages = $this->noLang ? null : $this->wire()->languages; + $languages = $this->wire()->languages; $user = $this->wire()->user; if($n) {} @@ -341,7 +341,7 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel if($this->renderValueMode) { if($languages) { - $description = $pagefile->description($user->language); + $description = $pagefile->description($this->noLang ? $languages->getDefault() : $user->language); } else { $description = $pagefile->description; } @@ -357,11 +357,12 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel $userLanguage = $languages ? $user->language : null; $defaultDescriptionFieldLabel = $sanitizer->entities1($this->labels['description']); - if(!$userLanguage || $languages->count() < 2) { + if(!$userLanguage || $languages->count() < 2 || $this->noLang) { $numLanguages = 0; - $languages = array(null); + $forLanguages = array(null); } else { $numLanguages = $languages->count(); + $forLanguages = $languages; if(is_null($hasLangTabs)) { $modules = $this->wire()->modules; $hasLangTabs = $modules->isInstalled('LanguageTabs'); @@ -373,7 +374,7 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel } } - foreach($languages as $language) { + foreach($forLanguages as $language) { $descriptionFieldName = "description_$id"; $descriptionFieldLabel = $defaultDescriptionFieldLabel; @@ -401,6 +402,9 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel $out .= "
"; // open wrapper $attrStr = "placeholder='$descriptionFieldLabel…'"; $labelClass = 'detail pw-hidden'; + + // for the $pagefile->description($language) call further below + if($languages && $this->noLang) $language = $languages->getDefault(); } $attrStr = "name='$descriptionFieldName' id='$descriptionFieldName' $attrStr"; @@ -847,12 +851,16 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel * */ protected function ___extractMetadata(Pagefile $pagefile, array $metadata = array()) { - - $metadata['description'] = $pagefile->description; - - $languages = $this->noLang ? null : $this->wire()->languages; + + $languages = $this->wire()->languages; if($languages) { + $metadata['description'] = $pagefile->description($languages->getDefault()); + } else { + $metadata['description'] = $pagefile->description; + } + + if($languages && !$this->noLang) { foreach($languages as $language) { /** @var Language $language */ if($language->isDefault()) continue; @@ -1026,8 +1034,10 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel } // description and tags - $languages = $this->noLang ? null : $this->wire()->languages; - $keys = $languages ? array('tags') : array('description', 'tags'); + // $languages = $this->noLang ? null : $this->wire()->languages; + $languages = $this->wire()->languages; + $useLanguages = $languages && !$this->noLang; + $keys = $useLanguages ? array('tags') : array('description', 'tags'); foreach($keys as $key) { if(isset($input[$key . '_' . $id])) { @@ -1045,6 +1055,7 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel if($languages) { foreach($languages as $language) { /** @var Language $language */ + if(!$useLanguages && !$language->isDefault()) continue; if(!$languages->editable($language)) continue; $key = $language->isDefault() ? "description_$id" : "description{$language->id}_$id"; if(!isset($input[$key])) continue; @@ -1398,6 +1409,7 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel $this->itemFieldgroup = false; $template = $pagefiles->getFieldsTemplate(); if(!$template) return false; + if($this->noLang) $template->setQuietly('noLang', 1); $this->itemFieldgroup = $template->fieldgroup; } diff --git a/wire/modules/LanguageSupport/FieldtypeTextareaLanguage.module b/wire/modules/LanguageSupport/FieldtypeTextareaLanguage.module index 2ce7d0e4..878291bf 100644 --- a/wire/modules/LanguageSupport/FieldtypeTextareaLanguage.module +++ b/wire/modules/LanguageSupport/FieldtypeTextareaLanguage.module @@ -5,7 +5,7 @@ require_once(dirname(__FILE__) . '/FieldtypeLanguageInterface.php'); /** * Multi-language capable textarea field * - * ProcessWire 3.x, Copyright 2016 by Ryan Cramer + * ProcessWire 3.x, Copyright 2023 by Ryan Cramer * https://processwire.com * * @@ -19,7 +19,7 @@ class FieldtypeTextareaLanguage extends FieldtypeTextarea implements FieldtypeLa 'version' => 100, 'summary' => 'Field that stores a multiple lines of text in multiple languages', 'requires' => array('LanguageSupportFields') - ); + ); } /** @@ -32,19 +32,28 @@ class FieldtypeTextareaLanguage extends FieldtypeTextarea implements FieldtypeLa * */ public function sanitizeValue(Page $page, Field $field, $value) { - if(is_object($value) && $value instanceof LanguagesPageFieldValue) { - // great, already what we wanted - } else { - // convert it to a LanguagesPageFieldValue - if(is_array($value)) $value = reset($value); - $str = (string) $value; - $value = $page->data($field->name); - if(!is_object($value)) { // string, array or null - $value = new LanguagesPageFieldValue($page, $field, $value); - } - $value->setLanguageValue($this->wire('user')->language->id, $str); + + if($value instanceof LanguagesPageFieldValue) return $value; + + if(is_array($value)) $value = reset($value); + + $value = (string) $value; + $template = $page->template; + $pageValue = $page->data($field->name); + + if(!$pageValue instanceof LanguagesPageFieldValue) { // string, array or null + $pageValue = new LanguagesPageFieldValue($page, $field, $value); } - return $value; + + if($template && $template->noLang) { + $languages = $this->wire()->languages; + $pageValue->setLanguageValue($languages->getDefault()->id, $value); + } else { + $language = $this->wire()->user->language; + if($language) $pageValue->setLanguageValue($language->id, $value); + } + + return $pageValue; } /** @@ -56,7 +65,8 @@ class FieldtypeTextareaLanguage extends FieldtypeTextarea implements FieldtypeLa */ public function getDatabaseSchema(Field $field) { $schema = parent::getDatabaseSchema($field); - $languageSupport = $this->wire('modules')->get('LanguageSupport'); + /** @var LanguageSupport $languageSupport */ + $languageSupport = $this->wire()->modules->get('LanguageSupport'); foreach($languageSupport->otherLanguagePageIDs as $languageID) { // $schema['data' . $languageID] = $schema['data']; $schema['data' . $languageID] = 'mediumtext'; @@ -92,7 +102,7 @@ class FieldtypeTextareaLanguage extends FieldtypeTextarea implements FieldtypeLa // in this method we are delegating the exportValue() to FieldtypeTextLanguage::exportValue // but we want to make sure it has textarea sleepValue, so we pass sleepValue in the $options if(!isset($options['sleepValue'])) $options['sleepValue'] = $this->sleepValue($page, $field, $value); - $exportValue = $this->wire('fieldtypes')->get('FieldtypeTextLanguage')->___exportValue($page, $field, $value, $options); + $exportValue = $this->wire()->fieldtypes->get('FieldtypeTextLanguage')->___exportValue($page, $field, $value, $options); return $exportValue; } @@ -107,11 +117,10 @@ class FieldtypeTextareaLanguage extends FieldtypeTextarea implements FieldtypeLa * */ public function ___importValue(Page $page, Field $field, $value, array $options = array()) { - /** @var Languages $languages */ - $languages = $this->wire('languages'); + $languages = $this->wire()->languages; /** @var LanguagesPageFieldValue $importValue */ - $importValue = $this->wire('fieldtypes')->get('FieldtypeTextLanguage')->___importValue($page, $field, $value, $options); + $importValue = $this->wire()->fieldtypes->get('FieldtypeTextLanguage')->___importValue($page, $field, $value, $options); foreach($languages as $language) { $languageValue = $importValue->getLanguageValue($language->id);