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:
@@ -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 {
|
||||
|
@@ -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) {
|
||||
|
@@ -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');
|
||||
|
@@ -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);
|
||||
|
@@ -135,7 +135,7 @@ class InputfieldText extends Inputfield {
|
||||
}
|
||||
|
||||
if($this->initValue) {
|
||||
if(!strlen($attrs['value'])) {
|
||||
if(!strlen("$attrs[value]")) {
|
||||
$attrs['value'] = $this->initValue;
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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');
|
||||
|
Reference in New Issue
Block a user