1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-11 01:04:16 +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');