mirror of
https://github.com/processwire/processwire.git
synced 2025-08-21 05:51:41 +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 = '';
|
||||
$out = '';
|
||||
$box = '';
|
||||
$user = $this->wire('user');
|
||||
$languages = $this->wire('languages');
|
||||
$sanitizer = $this->wire('sanitizer');
|
||||
$user = $this->wire()->user;
|
||||
$languages = $this->wire()->languages;
|
||||
$sanitizer = $this->wire()->sanitizer;
|
||||
$editable = $this->attr('disabled') ? false : true;
|
||||
|
||||
if($this->editPage && $this->editPage->template->noLang) $languages = false;
|
||||
if($editable && $languages && $this->hasLanguagePageNames && !$languages->editable($user->language)) $editable = false;
|
||||
$template = $this->editPage ? $this->editPage->template : null;
|
||||
$noLang = $template && $template->noLang;
|
||||
|
||||
if($this->parentPage) {
|
||||
$url = $this->parentPage->path;
|
||||
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;
|
||||
$languages->unsetDefault();
|
||||
} else {
|
||||
$url = $this->parentPage->path;
|
||||
}
|
||||
if($this->hasLanguagePageNames && $this->parentPage->id == $this->wire('config')->rootPageID) {
|
||||
if($user->language->isDefault()) {
|
||||
$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->checkboxName) {
|
||||
|
@@ -25,7 +25,7 @@ class FieldtypeTextLanguage extends FieldtypeText implements FieldtypeLanguageIn
|
||||
|
||||
/**
|
||||
* Sanitize value for storage
|
||||
*
|
||||
*
|
||||
* @param Page $page
|
||||
* @param Field $field
|
||||
* @param LanguagesValueInterface|string $value
|
||||
@@ -33,26 +33,41 @@ class FieldtypeTextLanguage extends FieldtypeText implements FieldtypeLanguageIn
|
||||
*
|
||||
*/
|
||||
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
|
||||
$pageValue = $page->data($field->name); // raw unformatted value, with no load possible
|
||||
if(!$pageValue instanceof LanguagesPageFieldValue) {
|
||||
$pageValue = new LanguagesPageFieldValue($page, $field, $pageValue); // #98
|
||||
}
|
||||
if(is_array($value)) {
|
||||
$pageValue->importArray($value);
|
||||
} else {
|
||||
$user = $this->wire('user');
|
||||
$language = $user ? $user->language : null;
|
||||
if($language) $pageValue->setLanguageValue($language->id, (string) $value);
|
||||
}
|
||||
$value = $pageValue;
|
||||
return $value;
|
||||
}
|
||||
return $value;
|
||||
|
||||
// convert it to a LanguagesPageFieldValue
|
||||
$pageValue = $page->data($field->name); // raw unformatted value, with no load possible
|
||||
|
||||
if(!$pageValue instanceof LanguagesPageFieldValue) {
|
||||
$pageValue = new LanguagesPageFieldValue($page, $field, $pageValue); // #98
|
||||
}
|
||||
|
||||
if(is_array($value)) {
|
||||
$pageValue->importArray($value);
|
||||
return $pageValue;
|
||||
}
|
||||
|
||||
$user = $this->wire()->user;
|
||||
$language = $user ? $user->language : null;
|
||||
$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);
|
||||
}
|
||||
|
||||
return $pageValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the database schema in specified format
|
||||
*
|
||||
|
@@ -353,6 +353,11 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
|
||||
public function getPagePath(Page $page, Language $language) {
|
||||
|
||||
$isDefault = $language->isDefault();
|
||||
|
||||
if(!$isDefault && $page->template && $page->template->noLang) {
|
||||
$language = $this->wire()->languages->getDefault();
|
||||
$isDefault = true;
|
||||
}
|
||||
|
||||
if($page->id == 1) {
|
||||
// special case: homepage
|
||||
@@ -685,9 +690,9 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
|
||||
public function hookPagePath(HookEvent $event) {
|
||||
/** @var Page $page */
|
||||
$page = $event->object;
|
||||
if($page->template == 'admin') return;
|
||||
$language = $this->wire('user')->get('language');
|
||||
if(!$language) $language = $this->wire('languages')->get('default');
|
||||
if($page->template->name == 'admin') return;
|
||||
$language = $this->wire()->user->language;
|
||||
if(!$language) $language = $this->wire()->languages->getDefault();
|
||||
$event->return = $this->getPagePath($page, $language);
|
||||
}
|
||||
|
||||
|
@@ -222,14 +222,24 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \
|
||||
*
|
||||
*/
|
||||
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() {
|
||||
$language = $this->wire('user')->language;
|
||||
|
||||
$template = $this->page->template;
|
||||
$language = $this->wire()->user->language;
|
||||
$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]);
|
||||
|
||||
if(!strlen($languageValue)) {
|
||||
// value is blank
|
||||
if($this->field) {
|
||||
@@ -239,6 +249,7 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $languageValue;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user