1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-10 08:44:46 +02:00

Add feature request processwire/processwire-requests#346 - add support for Inputfield::collapsedNoLocked and add a separate collapsedBlankLocked constant

This commit is contained in:
Ryan Cramer
2022-03-25 13:58:05 -04:00
parent 415969e8bf
commit af451350a4
7 changed files with 32 additions and 12 deletions

View File

@@ -1002,11 +1002,18 @@ class Field extends WireData implements Saveable, Exportable {
} else if($locked) {
// Inputfield is locked as a result of access control
$collapsed = $inputfield->getSetting('collapsed');
$ignoreCollapsed = array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked, Inputfield::collapsedHidden);
$ignoreCollapsed = array(
Inputfield::collapsedNoLocked,
Inputfield::collapsedBlankLocked,
Inputfield::collapsedYesLocked,
Inputfield::collapsedHidden
);
if(!in_array($collapsed, $ignoreCollapsed)) {
// Inputfield is not already locked or hidden, convert to locked equivalent
if($collapsed == Inputfield::collapsedYes || $collapsed == Inputfield::collapsedBlank) {
if($collapsed == Inputfield::collapsedYes) {
$collapsed = Inputfield::collapsedYesLocked;
} else if($collapsed == Inputfield::collapsedBlank) {
$collapsed = Inputfield::collapsedBlankLocked;
} else if($collapsed == Inputfield::collapsedNo) {
$collapsed = Inputfield::collapsedNoLocked;
} else {

View File

@@ -168,13 +168,20 @@ abstract class Inputfield extends WireData implements Module {
*
*/
const collapsedPopulated = 5;
/**
* Not collapsed, value visible but not editable
* #pw-group-collapsed-constants
*
*/
const collapsedNoLocked = 6;
/**
* Collapsed when blank, value visible but not editable
* #pw-group-collapsed-constants
*
*/
const collapsedNoLocked = 7;
const collapsedBlankLocked = 7;
/**
* Collapsed unless opened (value becomes visible but not editable)
@@ -1448,12 +1455,13 @@ abstract class Inputfield extends WireData implements Module {
$field->description = $this->_("How should this field be displayed in the editor?");
$field->addOption(self::collapsedNo, $this->_('Open'));
$field->addOption(self::collapsedNever, $this->_('Open + Cannot be closed'));
$field->addOption(self::collapsedNoLocked, $this->_('Open + Locked (not editable)'));
$field->addOption(self::collapsedBlank, $this->_('Open when populated + Closed when blank'));
if($this->hasFieldtype !== false) {
$field->addOption(self::collapsedBlankAjax, $this->_('Open when populated + Closed when blank + Load only when opened (AJAX)') . "");
}
$field->addOption(self::collapsedNoLocked, $this->_('Open when populated + Closed when blank + Locked (not editable)'));
$field->addOption(self::collapsedPopulated, $this->_('Open when blank + Closed when populated'));
$field->addOption(self::collapsedBlankLocked, $this->_('Open when populated + Closed when blank + Locked (not editable)'));
$field->addOption(self::collapsedPopulated, $this->_('Open when blank + Closed when populated'));
$field->addOption(self::collapsedYes, $this->_('Closed'));
$field->addOption(self::collapsedYesLocked, $this->_('Closed + Locked (not editable)'));
if($this->hasFieldtype !== false) {

View File

@@ -684,6 +684,7 @@ class InputfieldWrapper extends Inputfield implements \Countable, \IteratorAggre
$classes = array();
$useColumnWidth = $this->useColumnWidth;
$renderAjaxInputfield = $this->wire()->config->ajax ? $this->wire()->input->get('renderInputfieldAjax') : null;
$lockedStates = array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked, Inputfield::collapsedBlankLocked);
if($useColumnWidth === true && isset($_classes['form']) && strpos($_classes['form'], 'InputfieldFormNoWidths') !== false) {
$useColumnWidth = false;
@@ -718,7 +719,7 @@ class InputfieldWrapper extends Inputfield implements \Countable, \IteratorAggre
$showIf = $inputfield->getSetting('showIf');
if($collapsed == Inputfield::collapsedHidden) continue;
if($collapsed == Inputfield::collapsedNoLocked || $collapsed == Inputfield::collapsedYesLocked) $renderValueMode = true;
if(in_array($collapsed, $lockedStates)) $renderValueMode = true;
$ffOut = $this->renderInputfield($inputfield, $renderValueMode);
if(!strlen($ffOut)) continue;
@@ -797,7 +798,7 @@ class InputfieldWrapper extends Inputfield implements \Countable, \IteratorAggre
$collapsed === Inputfield::collapsedYesAjax ||
($isEmpty && $collapsed === Inputfield::collapsedBlank) ||
($isEmpty && $collapsed === Inputfield::collapsedBlankAjax) ||
($isEmpty && $collapsed === Inputfield::collapsedNoLocked) || // collapsedNoLocked assumed to be like a collapsedBlankLocked
($isEmpty && $collapsed === Inputfield::collapsedBlankLocked) ||
(!$isEmpty && $collapsed === Inputfield::collapsedPopulated)) {
$ffAttrs['class'] .= ' ' . $classes['item_collapsed'];
}
@@ -1157,6 +1158,7 @@ class InputfieldWrapper extends Inputfield implements \Countable, \IteratorAggre
Inputfield::collapsedHidden,
Inputfield::collapsedLocked,
Inputfield::collapsedNoLocked,
Inputfield::collapsedBlankLocked,
Inputfield::collapsedYesLocked
);
$collapsed = (int) $inputfield->getSetting('collapsed');

View File

@@ -344,7 +344,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule {
public function ___getSelectablePages(Page $page) {
$pages = $this->wire()->pages;
$lockedModes = array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked);
$lockedModes = array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked, Inputfield::collapsedBlankLocked);
$statusUnder = $this->allowUnpub ? Page::statusTrash : Page::statusUnpublished;
$children = null;
$templateIDs = $this->getTemplateIDs(true);

View File

@@ -135,7 +135,7 @@ class InputfieldText extends Inputfield {
}
if($this->initValue) {
if(!strlen($attrs['value'])) {
if(!strlen("$attrs[value]")) {
$attrs['value'] = $this->initValue;
}
}

View File

@@ -829,6 +829,8 @@ class ProcessPageAdd extends Process implements ConfigurableModule, WirePageEdit
$pages = $this->wire()->pages;
$fields = $this->wire()->fields;
$user = $this->wire()->user;
$lockedStates = array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked, Inputfield::collapsedBlankLocked);
/** @var InputfieldForm $form */
$form = $modules->get('InputfieldForm');
@@ -847,7 +849,7 @@ class ProcessPageAdd extends Process implements ConfigurableModule, WirePageEdit
$_field = $this->template->fieldgroup->getField($field->id, true); // get in context of fieldgroup
if($_field) $field = $_field;
}
if(in_array($field->collapsed, array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked))) continue;
if(in_array($field->collapsed, $lockedStates)) continue;
$inputfield = $field->getInputfield($page);
if($inputfield) {
if($this->template && $this->template->noLang) $inputfield->useLanguages = false;
@@ -861,7 +863,7 @@ class ProcessPageAdd extends Process implements ConfigurableModule, WirePageEdit
/** @var Field $field */
$field = $this->template->fieldgroup->getField('title', true);
if($field) {
if(in_array($field->collapsed, array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked))) {
if(in_array($field->collapsed, $lockedStates)) {
// skip it
} else {
$inputfield = $field->getInputfield($page);

View File

@@ -912,6 +912,7 @@ class ProcessPageEdit extends Process implements WirePageEditor, ConfigurableMod
$skipCollapsed = array(
Inputfield::collapsedHidden,
Inputfield::collapsedNoLocked,
Inputfield::collapsedBlankLocked,
Inputfield::collapsedYesLocked,
);
$collapsed = $inputfield->getSetting('collapsed');