mirror of
https://github.com/processwire/processwire.git
synced 2025-08-22 06:13:57 +02:00
Some refactoring in ProcessPageEdit, plus fix issue where user having page-edit-lang-[lang] permission while having non-default language selected in their profile could receive incorrect "missing required field" error for Page Name, when making edits.
This commit is contained in:
@@ -486,8 +486,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
|
|||||||
$inputfield = $event->object;
|
$inputfield = $event->object;
|
||||||
$replace = false;
|
$replace = false;
|
||||||
|
|
||||||
if($inputfield->getSetting('useLanguages')) {
|
if($inputfield->getSetting('useLanguages') || $inputfield->getSetting('hasLanguages')) {
|
||||||
// native multi-language field
|
// multi-language field
|
||||||
$this->hookInputfieldBeforeRender($event); // ensures default language values are populated
|
$this->hookInputfieldBeforeRender($event); // ensures default language values are populated
|
||||||
if(!$this->wire('languages')->editable($this->defaultLanguagePage)) $replace = true;
|
if(!$this->wire('languages')->editable($this->defaultLanguagePage)) $replace = true;
|
||||||
|
|
||||||
|
@@ -969,22 +969,7 @@ class ProcessPageEdit extends Process implements WirePageEditor, ConfigurableMod
|
|||||||
$this->addTab($id, $title);
|
$this->addTab($id, $title);
|
||||||
|
|
||||||
if($this->page->template->nameContentTab) {
|
if($this->page->template->nameContentTab) {
|
||||||
// name
|
$fields->prepend($this->buildFormPageName());
|
||||||
/** @var InputfieldPageName $field */
|
|
||||||
$field = $this->modules->get('InputfieldPageName');
|
|
||||||
$label = $this->page->template->getNameLabel();
|
|
||||||
if($label) $field->label = $label;
|
|
||||||
$field->attr('name', '_pw_page_name');
|
|
||||||
$field->attr('value', $this->page->name);
|
|
||||||
$field->required = $this->page->id != 1 && !$this->page->hasStatus(Page::statusTemp);
|
|
||||||
$field->slashUrls = $this->page->template->slashUrls;
|
|
||||||
if(!$this->page->editable('name', false)) {
|
|
||||||
$field->attr('disabled', 'disabled');
|
|
||||||
$field->required = false;
|
|
||||||
}
|
|
||||||
$field->editPage = $this->page;
|
|
||||||
if($this->page->parent) $field->parentPage = $this->page->parent;
|
|
||||||
$fields->prepend($field);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $fields;
|
return $fields;
|
||||||
@@ -1130,6 +1115,9 @@ class ProcessPageEdit extends Process implements WirePageEditor, ConfigurableMod
|
|||||||
*/
|
*/
|
||||||
protected function ___buildFormSettings() {
|
protected function ___buildFormSettings() {
|
||||||
|
|
||||||
|
$superuser = $this->wire('user')->isSuperuser();
|
||||||
|
|
||||||
|
/** @var InputfieldWrapper $wrapper */
|
||||||
$wrapper = $this->wire(new InputfieldWrapper());
|
$wrapper = $this->wire(new InputfieldWrapper());
|
||||||
$id = $this->className() . 'Settings';
|
$id = $this->className() . 'Settings';
|
||||||
$title = $this->_('Settings'); // Tab Label: Settings
|
$title = $this->_('Settings'); // Tab Label: Settings
|
||||||
@@ -1139,27 +1127,93 @@ class ProcessPageEdit extends Process implements WirePageEditor, ConfigurableMod
|
|||||||
|
|
||||||
// name
|
// name
|
||||||
if(($this->page->id > 1 || $this->hasLanguagePageNames) && !$this->page->template->nameContentTab) {
|
if(($this->page->id > 1 || $this->hasLanguagePageNames) && !$this->page->template->nameContentTab) {
|
||||||
/** @var InputfieldPageName $field */
|
$wrapper->prepend($this->buildFormPageName());
|
||||||
$field = $this->modules->get('InputfieldPageName');
|
|
||||||
$label = $this->page->template->getNameLabel();
|
|
||||||
if($label) $field->label = $label;
|
|
||||||
$field->attr('value', $this->page->name);
|
|
||||||
$field->attr('name', '_pw_page_name');
|
|
||||||
$field->slashUrls = $this->page->template->slashUrls;
|
|
||||||
$field->required = $this->page->id != 1 && !$this->page->hasStatus(Page::statusTemp);
|
|
||||||
if(!$this->page->editable('name', false)) {
|
|
||||||
$field->attr('disabled', 'disabled');
|
|
||||||
$field->required = false;
|
|
||||||
}
|
|
||||||
$field->editPage = $this->page;
|
|
||||||
if($this->page->parent) $field->parentPage = $this->page->parent;
|
|
||||||
$wrapper->prepend($field);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// template
|
// template
|
||||||
if($this->page->editable('template', false)) {
|
$wrapper->add($this->buildFormTemplate());
|
||||||
|
|
||||||
|
// parent
|
||||||
|
if($this->page->id > 1 && $this->page->editable('parent', false)) {
|
||||||
|
$wrapper->add($this->buildFormParent());
|
||||||
|
}
|
||||||
|
|
||||||
|
// createdUser
|
||||||
|
if($this->page->id && $superuser && $this->page->template->allowChangeUser) {
|
||||||
|
$wrapper->add($this->buildFormCreatedUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
// status
|
||||||
|
$wrapper->add($this->buildFormStatus());
|
||||||
|
|
||||||
|
// roles and references
|
||||||
|
if(!$this->isPost) {
|
||||||
|
// what users may access this page
|
||||||
|
$wrapper->add($this->buildFormRoles());
|
||||||
|
// what pages link tot his page
|
||||||
|
$wrapper->add($this->buildFormReferences());
|
||||||
|
}
|
||||||
|
|
||||||
|
// page path history (previous URLs)
|
||||||
|
if($superuser) {
|
||||||
|
$f = $this->buildFormPrevPaths();
|
||||||
|
if($f) $wrapper->add($f);
|
||||||
|
}
|
||||||
|
|
||||||
|
// information about created and modified user and time
|
||||||
|
if(!$this->isPost) {
|
||||||
|
$wrapper->add($this->buildFormInfo());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the page name input
|
||||||
|
*
|
||||||
|
* @return InputfieldPageName
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function buildFormPageName() {
|
||||||
|
|
||||||
|
/** @var InputfieldPageName $field */
|
||||||
|
$field = $this->modules->get('InputfieldPageName');
|
||||||
|
$field->attr('name', '_pw_page_name');
|
||||||
|
$field->attr('value', $this->page->name);
|
||||||
|
$field->slashUrls = $this->page->template->slashUrls;
|
||||||
|
$field->required = $this->page->id != 1 && !$this->page->hasStatus(Page::statusTemp);
|
||||||
|
|
||||||
|
$label = $this->page->template->getNameLabel();
|
||||||
|
if($label) $field->label = $label;
|
||||||
|
|
||||||
|
if(!$this->page->editable('name', false)) {
|
||||||
|
$field->attr('disabled', 'disabled');
|
||||||
|
$field->required = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->hasLanguagePageNames) {
|
||||||
|
// Using 'hasLanguages' as opposed to 'useLanguages' for different support from LanguageSupportPageNames
|
||||||
|
$field->setQuietly('hasLanguages', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$field->editPage = $this->page;
|
||||||
|
if($this->page->parent) $field->parentPage = $this->page->parent;
|
||||||
|
|
||||||
|
return $field;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the template selection field
|
||||||
|
*
|
||||||
|
* @return InputfieldMarkup|InputfieldSelect
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function buildFormTemplate() {
|
||||||
|
|
||||||
|
if($this->page->editable('template', false)) {
|
||||||
|
/** @var Languages $languages */
|
||||||
$languages = $this->wire('languages');
|
$languages = $this->wire('languages');
|
||||||
|
/** @var Language $language */
|
||||||
$language = $this->user->language;
|
$language = $this->user->language;
|
||||||
|
|
||||||
/** @var InputfieldSelect $field */
|
/** @var InputfieldSelect $field */
|
||||||
@@ -1176,67 +1230,67 @@ class ProcessPageEdit extends Process implements WirePageEditor, ConfigurableMod
|
|||||||
$field->addOption($template->id, $label);
|
$field->addOption($template->id, $label);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/** @var InputfieldMarkup $field */
|
||||||
$field = $this->modules->get('InputfieldMarkup');
|
$field = $this->modules->get('InputfieldMarkup');
|
||||||
$field->attr('value', "<p>" . $this->page->template->getLabel() . "</p>");
|
$field->attr('value', "<p>" . $this->page->template->getLabel() . "</p>");
|
||||||
}
|
}
|
||||||
|
|
||||||
$field->label = $this->_('Template'); // Settings: Template field label
|
$field->label = $this->_('Template'); // Settings: Template field label
|
||||||
$field->icon = 'cubes';
|
$field->icon = 'cubes';
|
||||||
$wrapper->add($field);
|
|
||||||
|
|
||||||
// parent
|
return $field;
|
||||||
if($this->page->id > 1 && $this->page->editable('parent', false)) {
|
}
|
||||||
// @todo also use predefined parents when page is limited to only certain parents (template family settings)
|
|
||||||
if(count($this->predefinedParents)) {
|
/**
|
||||||
$field = $this->modules->get('InputfieldSelect');
|
* Build the parent selection Inputfield
|
||||||
foreach($this->predefinedParents as $p) {
|
*
|
||||||
$field->addOption($p->id, $p->path);
|
* @return InputfieldPageListSelect|InputfieldSelect
|
||||||
}
|
*
|
||||||
} else {
|
*/
|
||||||
/** @var InputfieldPageListSelect $field */
|
protected function buildFormParent() {
|
||||||
$field = $this->modules->get('InputfieldPageListSelect');
|
|
||||||
$field->set('parent_id', 0);
|
if(count($this->predefinedParents)) {
|
||||||
if(!empty($this->configSettings['ajaxParent'])) $field->collapsed = Inputfield::collapsedYesAjax;
|
/** @var InputfieldSelect $field */
|
||||||
|
$field = $this->modules->get('InputfieldSelect');
|
||||||
|
foreach($this->predefinedParents as $p) {
|
||||||
|
$field->addOption($p->id, $p->path);
|
||||||
}
|
}
|
||||||
$field->required = true;
|
|
||||||
$field->label = $this->_('Parent'); // Settings: Parent field label
|
|
||||||
$field->icon = 'folder-open-o';
|
|
||||||
$field->attr('id+name', 'parent_id');
|
|
||||||
$field->attr('value', $this->page->parent_id);
|
|
||||||
$wrapper->add($field);
|
|
||||||
}
|
|
||||||
|
|
||||||
// createdUser
|
} else {
|
||||||
if($this->page->id && $this->user->isSuperuser() && $this->page->template->allowChangeUser) {
|
|
||||||
/** @var InputfieldPageListSelect $field */
|
/** @var InputfieldPageListSelect $field */
|
||||||
$field = $this->modules->get('InputfieldPageListSelect');
|
$field = $this->modules->get('InputfieldPageListSelect');
|
||||||
$field->label = $this->_('Created by User');
|
$field->set('parent_id', 0);
|
||||||
$field->attr('id+name', 'created_users_id');
|
if(!empty($this->configSettings['ajaxParent'])) {
|
||||||
$field->attr('value', $this->page->created_users_id);
|
$field->collapsed = Inputfield::collapsedYesAjax;
|
||||||
$field->parent_id = $this->config->usersPageID; // @todo support $config->usersPageIDs (array)
|
}
|
||||||
$field->showPath = false;
|
|
||||||
$field->required = true;
|
|
||||||
$wrapper->add($field);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// status
|
$field->required = true;
|
||||||
$wrapper->add($this->buildFormStatus());
|
$field->label = $this->_('Parent'); // Settings: Parent field label
|
||||||
|
$field->icon = 'folder-open-o';
|
||||||
|
$field->attr('id+name', 'parent_id');
|
||||||
|
$field->attr('value', $this->page->parent_id);
|
||||||
|
|
||||||
// informational sections
|
return $field;
|
||||||
if(!$this->isPost) {
|
}
|
||||||
$wrapper->add($this->buildFormRoles());
|
|
||||||
$wrapper->add($this->buildFormReferences());
|
|
||||||
}
|
|
||||||
|
|
||||||
if($this->wire('user')->isSuperuser()) {
|
/**
|
||||||
$f = $this->buildFormPrevPaths();
|
* Build the created user selection
|
||||||
if($f) $wrapper->add($f);
|
*
|
||||||
}
|
* @return InputfieldPageListSelect
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function buildFormCreatedUser() {
|
||||||
|
/** @var InputfieldPageListSelect $field */
|
||||||
|
$field = $this->modules->get('InputfieldPageListSelect');
|
||||||
|
$field->label = $this->_('Created by User');
|
||||||
|
$field->attr('id+name', 'created_users_id');
|
||||||
|
$field->attr('value', $this->page->created_users_id);
|
||||||
|
$field->parent_id = $this->config->usersPageID; // @todo support $config->usersPageIDs (array)
|
||||||
|
$field->showPath = false;
|
||||||
|
$field->required = true;
|
||||||
|
|
||||||
if(!$this->isPost) {
|
return $field;
|
||||||
$wrapper->add($this->buildFormInfo());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $wrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user