1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-21 05:51:41 +02:00
This commit is contained in:
Ryan Cramer
2020-07-23 11:03:41 -04:00
parent 6a1b6a21ae
commit 7e3f10b2ff
4 changed files with 69 additions and 29 deletions

View File

@@ -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) {

View File

@@ -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
*

View File

@@ -354,6 +354,11 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
$isDefault = $language->isDefault();
if(!$isDefault && $page->template && $page->template->noLang) {
$language = $this->wire()->languages->getDefault();
$isDefault = true;
}
if($page->id == 1) {
// special case: homepage
$name = $isDefault ? '' : $page->get("name$language");
@@ -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);
}

View File

@@ -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($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;
}