mirror of
https://github.com/processwire/processwire.git
synced 2025-08-22 06:13:57 +02:00
Attempt to fix issue processwire/processwire-issues#1118
This commit is contained in:
@@ -165,16 +165,22 @@ class InputfieldPageName extends InputfieldName implements ConfigurableModule {
|
|||||||
$url = '';
|
$url = '';
|
||||||
$out = '';
|
$out = '';
|
||||||
$box = '';
|
$box = '';
|
||||||
$user = $this->wire('user');
|
$user = $this->wire()->user;
|
||||||
$languages = $this->wire('languages');
|
$languages = $this->wire()->languages;
|
||||||
$sanitizer = $this->wire('sanitizer');
|
$sanitizer = $this->wire()->sanitizer;
|
||||||
$editable = $this->attr('disabled') ? false : true;
|
$editable = $this->attr('disabled') ? false : true;
|
||||||
|
$template = $this->editPage ? $this->editPage->template : null;
|
||||||
if($this->editPage && $this->editPage->template->noLang) $languages = false;
|
$noLang = $template && $template->noLang;
|
||||||
if($editable && $languages && $this->hasLanguagePageNames && !$languages->editable($user->language)) $editable = false;
|
|
||||||
|
|
||||||
if($this->parentPage) {
|
if($this->parentPage) {
|
||||||
|
if($noLang && $languages && !$user->language->isDefault()) {
|
||||||
|
// if noLang active for page edited by non-default user, ensure we use default language url
|
||||||
|
$languages->setDefault();
|
||||||
$url = $this->parentPage->path;
|
$url = $this->parentPage->path;
|
||||||
|
$languages->unsetDefault();
|
||||||
|
} else {
|
||||||
|
$url = $this->parentPage->path;
|
||||||
|
}
|
||||||
if($this->hasLanguagePageNames && $this->parentPage->id == $this->wire('config')->rootPageID) {
|
if($this->hasLanguagePageNames && $this->parentPage->id == $this->wire('config')->rootPageID) {
|
||||||
if($user->language->isDefault()) {
|
if($user->language->isDefault()) {
|
||||||
$parentName = $this->parentPage->name;
|
$parentName = $this->parentPage->name;
|
||||||
@@ -183,6 +189,9 @@ class InputfieldPageName extends InputfieldName implements ConfigurableModule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($noLang) $languages = false;
|
||||||
|
if($editable && $languages && $this->hasLanguagePageNames && !$languages->editable($user->language)) $editable = false;
|
||||||
|
|
||||||
if($this->languageSupportLabel) {
|
if($this->languageSupportLabel) {
|
||||||
|
|
||||||
if($this->checkboxName) {
|
if($this->checkboxName) {
|
||||||
|
@@ -33,26 +33,41 @@ class FieldtypeTextLanguage extends FieldtypeText implements FieldtypeLanguageIn
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function sanitizeValue(Page $page, Field $field, $value) {
|
public function sanitizeValue(Page $page, Field $field, $value) {
|
||||||
|
|
||||||
if(is_object($value) && $value instanceof LanguagesPageFieldValue) {
|
if(is_object($value) && $value instanceof LanguagesPageFieldValue) {
|
||||||
// great, already what we wanted
|
// great, already what we wanted
|
||||||
} else {
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
// convert it to a LanguagesPageFieldValue
|
// convert it to a LanguagesPageFieldValue
|
||||||
$pageValue = $page->data($field->name); // raw unformatted value, with no load possible
|
$pageValue = $page->data($field->name); // raw unformatted value, with no load possible
|
||||||
|
|
||||||
if(!$pageValue instanceof LanguagesPageFieldValue) {
|
if(!$pageValue instanceof LanguagesPageFieldValue) {
|
||||||
$pageValue = new LanguagesPageFieldValue($page, $field, $pageValue); // #98
|
$pageValue = new LanguagesPageFieldValue($page, $field, $pageValue); // #98
|
||||||
}
|
}
|
||||||
|
|
||||||
if(is_array($value)) {
|
if(is_array($value)) {
|
||||||
$pageValue->importArray($value);
|
$pageValue->importArray($value);
|
||||||
} else {
|
return $pageValue;
|
||||||
$user = $this->wire('user');
|
}
|
||||||
|
|
||||||
|
$user = $this->wire()->user;
|
||||||
$language = $user ? $user->language : null;
|
$language = $user ? $user->language : null;
|
||||||
if($language) $pageValue->setLanguageValue($language->id, (string) $value);
|
$template = $page->template;
|
||||||
|
|
||||||
|
if(!$language) return $pageValue;
|
||||||
|
|
||||||
|
if($template && $template->noLang) {
|
||||||
|
$languages = $this->wire()->languages;
|
||||||
|
$pageValue->setLanguageValue($languages->getDefault()->id, (string) $value);
|
||||||
|
} else {
|
||||||
|
$pageValue->setLanguageValue($language->id, (string) $value);
|
||||||
}
|
}
|
||||||
$value = $pageValue;
|
|
||||||
}
|
return $pageValue;
|
||||||
return $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the database schema in specified format
|
* Return the database schema in specified format
|
||||||
*
|
*
|
||||||
|
@@ -354,6 +354,11 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
|
|||||||
|
|
||||||
$isDefault = $language->isDefault();
|
$isDefault = $language->isDefault();
|
||||||
|
|
||||||
|
if(!$isDefault && $page->template && $page->template->noLang) {
|
||||||
|
$language = $this->wire()->languages->getDefault();
|
||||||
|
$isDefault = true;
|
||||||
|
}
|
||||||
|
|
||||||
if($page->id == 1) {
|
if($page->id == 1) {
|
||||||
// special case: homepage
|
// special case: homepage
|
||||||
$name = $isDefault ? '' : $page->get("name$language");
|
$name = $isDefault ? '' : $page->get("name$language");
|
||||||
@@ -685,9 +690,9 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
|
|||||||
public function hookPagePath(HookEvent $event) {
|
public function hookPagePath(HookEvent $event) {
|
||||||
/** @var Page $page */
|
/** @var Page $page */
|
||||||
$page = $event->object;
|
$page = $event->object;
|
||||||
if($page->template == 'admin') return;
|
if($page->template->name == 'admin') return;
|
||||||
$language = $this->wire('user')->get('language');
|
$language = $this->wire()->user->language;
|
||||||
if(!$language) $language = $this->wire('languages')->get('default');
|
if(!$language) $language = $this->wire()->languages->getDefault();
|
||||||
$event->return = $this->getPagePath($page, $language);
|
$event->return = $this->getPagePath($page, $language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -222,14 +222,24 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function __toString() {
|
public function __toString() {
|
||||||
return $this->wire('hooks')->isHooked('LanguagesPageFieldValue::getStringValue()') ? $this->__call('getStringValue', array()) : $this->___getStringValue();
|
if($this->wire('hooks')->isHooked('LanguagesPageFieldValue::getStringValue()')) {
|
||||||
|
return $this->__call('getStringValue', array());
|
||||||
|
} else {
|
||||||
|
return $this->___getStringValue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function ___getStringValue() {
|
protected function ___getStringValue() {
|
||||||
$language = $this->wire('user')->language;
|
|
||||||
|
$template = $this->page->template;
|
||||||
|
$language = $this->wire()->user->language;
|
||||||
$defaultValue = (string) $this->data[$this->defaultLanguagePageID];
|
$defaultValue = (string) $this->data[$this->defaultLanguagePageID];
|
||||||
|
|
||||||
if(!$language || !$language->id || $language->isDefault()) return $defaultValue;
|
if(!$language || !$language->id || $language->isDefault()) return $defaultValue;
|
||||||
|
if($template && $template->noLang) return $defaultValue;
|
||||||
|
|
||||||
$languageValue = (string) (empty($this->data[$language->id]) ? '' : $this->data[$language->id]);
|
$languageValue = (string) (empty($this->data[$language->id]) ? '' : $this->data[$language->id]);
|
||||||
|
|
||||||
if(!strlen($languageValue)) {
|
if(!strlen($languageValue)) {
|
||||||
// value is blank
|
// value is blank
|
||||||
if($this->field) {
|
if($this->field) {
|
||||||
@@ -239,6 +249,7 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $languageValue;
|
return $languageValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user