Skip to content

Commit

Permalink
Merge pull request #12744 from eileenmcnaughton/setting_form3
Browse files Browse the repository at this point in the history
Setting form - function extraction
  • Loading branch information
seamuslee001 authored Aug 30, 2018
2 parents 9880831 + e894ae1 commit 5a1e0c3
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 62 deletions.
66 changes: 4 additions & 62 deletions CRM/Admin/Form/Setting.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form {

protected $_settings = array();

protected $includesReadOnlyFields;

/**
* Set default values for the form.
*
Expand Down Expand Up @@ -95,71 +97,11 @@ public function buildQuickForm() {
)
);

$descriptions = array();
$settingMetaData = $this->getSettingsMetaData();
foreach ($settingMetaData as $setting => $props) {
if (isset($props['quick_form_type'])) {
if (isset($props['pseudoconstant'])) {
$options = civicrm_api3('Setting', 'getoptions', array(
'field' => $setting,
));
}
else {
$options = NULL;
}
//Load input as readonly whose values are overridden in civicrm.settings.php.
if (Civi::settings()->getMandatory($setting)) {
$props['html_attributes']['readonly'] = TRUE;
$setStatus = TRUE;
}

$add = 'add' . $props['quick_form_type'];
if ($add == 'addElement') {
$this->$add(
$props['html_type'],
$setting,
ts($props['title']),
($options !== NULL) ? $options['values'] : CRM_Utils_Array::value('html_attributes', $props, array()),
($options !== NULL) ? CRM_Utils_Array::value('html_attributes', $props, array()) : NULL
);
}
elseif ($add == 'addSelect') {
$this->addElement('select', $setting, ts($props['title']), $options['values'], CRM_Utils_Array::value('html_attributes', $props));
}
elseif ($add == 'addCheckBox') {
$this->addCheckBox($setting, ts($props['title']), $options['values'], NULL, CRM_Utils_Array::value('html_attributes', $props), NULL, NULL, array('  '));
}
elseif ($add == 'addChainSelect') {
$this->addChainSelect($setting, array(
'label' => ts($props['title']),
));
}
elseif ($add == 'addMonthDay') {
$this->add('date', $setting, ts($props['title']), CRM_Core_SelectValues::date(NULL, 'M d'));
}
else {
$this->$add($setting, ts($props['title']));
}
// Migrate to using an array as easier in smart...
$descriptions[$setting] = ts($props['description']);
$this->assign("{$setting}_description", ts($props['description']));
if ($setting == 'max_attachments') {
//temp hack @todo fix to get from metadata
$this->addRule('max_attachments', ts('Value should be a positive number'), 'positiveInteger');
}
if ($setting == 'maxFileSize') {
//temp hack
$this->addRule('maxFileSize', ts('Value should be a positive number'), 'positiveInteger');
}
$this->addFieldsDefinedInSettingsMetadata();

}
}
if (!empty($setStatus)) {
if ($this->includesReadOnlyFields) {
CRM_Core_Session::setStatus(ts("Some fields are loaded as 'readonly' as they have been set (overridden) in civicrm.settings.php."), '', 'info', array('expires' => 0));
}
// setting_description should be deprecated - see Mail.tpl for metadata based tpl.
$this->assign('setting_descriptions', $descriptions);
$this->assign('settings_fields', $settingMetaData);
}

/**
Expand Down
68 changes: 68 additions & 0 deletions CRM/Admin/Form/SettingTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,72 @@ protected function filterParamsSetByMetadata(&$params) {
}
}

/**
* Add fields in the metadata to the template.
*/
protected function addFieldsDefinedInSettingsMetadata() {
$settingMetaData = $this->getSettingsMetaData();
$descriptions = [];
foreach ($settingMetaData as $setting => $props) {
if (isset($props['quick_form_type'])) {
if (isset($props['pseudoconstant'])) {
$options = civicrm_api3('Setting', 'getoptions', [
'field' => $setting,
]);
}
else {
$options = NULL;
}
//Load input as readonly whose values are overridden in civicrm.settings.php.
if (Civi::settings()->getMandatory($setting)) {
$props['html_attributes']['readonly'] = TRUE;
$this->includesReadOnlyFields = TRUE;
}

$add = 'add' . $props['quick_form_type'];
if ($add == 'addElement') {
$this->$add(
$props['html_type'],
$setting,
ts($props['title']),
($options !== NULL) ? $options['values'] : CRM_Utils_Array::value('html_attributes', $props, []),
($options !== NULL) ? CRM_Utils_Array::value('html_attributes', $props, []) : NULL
);
}
elseif ($add == 'addSelect') {
$this->addElement('select', $setting, ts($props['title']), $options['values'], CRM_Utils_Array::value('html_attributes', $props));
}
elseif ($add == 'addCheckBox') {
$this->addCheckBox($setting, ts($props['title']), $options['values'], NULL, CRM_Utils_Array::value('html_attributes', $props), NULL, NULL, ['  ']);
}
elseif ($add == 'addChainSelect') {
$this->addChainSelect($setting, [
'label' => ts($props['title']),
]);
}
elseif ($add == 'addMonthDay') {
$this->add('date', $setting, ts($props['title']), CRM_Core_SelectValues::date(NULL, 'M d'));
}
else {
$this->$add($setting, ts($props['title']));
}
// Migrate to using an array as easier in smart...
$descriptions[$setting] = ts($props['description']);
$this->assign("{$setting}_description", ts($props['description']));
if ($setting == 'max_attachments') {
//temp hack @todo fix to get from metadata
$this->addRule('max_attachments', ts('Value should be a positive number'), 'positiveInteger');
}
if ($setting == 'maxFileSize') {
//temp hack
$this->addRule('maxFileSize', ts('Value should be a positive number'), 'positiveInteger');
}

}
}
// setting_description should be deprecated - see Mail.tpl for metadata based tpl.
$this->assign('setting_descriptions', $descriptions);
$this->assign('settings_fields', $settingMetaData);
}

}

0 comments on commit 5a1e0c3

Please sign in to comment.