allow to enforce classes

This commit is contained in:
Roland Gruber 2016-02-13 14:29:41 +00:00
parent 0bbf26bc17
commit 91b5523b81
1 changed files with 61 additions and 7 deletions

View File

@ -121,12 +121,16 @@ class puppetClient extends baseModule {
"Headline" => _('Predefined environments'), "Headline" => _('Predefined environments'),
"Text" => _('These environments will be available as autocompletion hints when setting the environment.') "Text" => _('These environments will be available as autocompletion hints when setting the environment.')
), ),
'enforceClasses' => array(
"Headline" => _('Enforce classes'),
"Text" => _('If set then only these classes are allowed. One class per line.')
),
); );
// config options
$configContainer = new htmlTable();
$configContainer->addElement(new htmlTableExtendedInputTextarea('puppetClient_environments', "production\r\ntesting", 30, 5, _('Predefined environments'), 'predefinedEnvironments'), true);
$return['config_options']['all'] = $configContainer;
// upload fields // upload fields
$allowedClasses = '';
if (!empty($this->moduleSettings['puppetClient_enforceClasses'][0])) {
$allowedClasses = implode(', ', $this->moduleSettings['puppetClient_enforceClasses']);
}
$return['upload_columns'] = array( $return['upload_columns'] = array(
array( array(
'name' => 'puppetClient_environment', 'name' => 'puppetClient_environment',
@ -144,7 +148,8 @@ class puppetClient extends baseModule {
'name' => 'puppetClient_puppetclass', 'name' => 'puppetClient_puppetclass',
'description' => _('Classes'), 'description' => _('Classes'),
'help' => 'puppetclassList', 'help' => 'puppetclassList',
'example' => 'ntp;exim' 'example' => 'ntp;exim',
'values' => $allowedClasses
), ),
array( array(
'name' => 'puppetClient_puppetvar', 'name' => 'puppetClient_puppetvar',
@ -190,6 +195,7 @@ class puppetClient extends baseModule {
$this->messages['environment'][1] = array('ERROR', _('Account %s:') . ' puppetClient_environment', _('The environment name may only contain ASCII characters.')); $this->messages['environment'][1] = array('ERROR', _('Account %s:') . ' puppetClient_environment', _('The environment name may only contain ASCII characters.'));
$this->messages['puppetclass'][0] = array('ERROR', _('The class names may only contain ASCII characters.')); $this->messages['puppetclass'][0] = array('ERROR', _('The class names may only contain ASCII characters.'));
$this->messages['puppetclass'][1] = array('ERROR', _('Account %s:') . ' puppetClient_puppetclass', _('The class names may only contain ASCII characters.')); $this->messages['puppetclass'][1] = array('ERROR', _('Account %s:') . ' puppetClient_puppetclass', _('The class names may only contain ASCII characters.'));
$this->messages['puppetclass'][2] = array('ERROR', _('Account %s:') . ' puppetClient_puppetclass', _('The class names contain invalid values.'));
$this->messages['puppetvar'][0] = array('ERROR', _('The variables may only contain ASCII characters.')); $this->messages['puppetvar'][0] = array('ERROR', _('The variables may only contain ASCII characters.'));
$this->messages['puppetvar'][1] = array('ERROR', _('Account %s:') . ' puppetClient_puppetvar', _('The variables may only contain ASCII characters.')); $this->messages['puppetvar'][1] = array('ERROR', _('Account %s:') . ' puppetClient_puppetvar', _('The variables may only contain ASCII characters.'));
$this->messages['parentnode'][0] = array('ERROR', _('Account %s:') . ' puppetClient_parentnode', _('Parent node not found.')); $this->messages['parentnode'][0] = array('ERROR', _('Account %s:') . ' puppetClient_parentnode', _('Parent node not found.'));
@ -270,7 +276,12 @@ class puppetClient extends baseModule {
} }
$return->addElement(new htmlTableExtendedSelect('parentnode', $possibleParentNodes, array($parentnode), _('Parent node'), 'parentnode'), true); $return->addElement(new htmlTableExtendedSelect('parentnode', $possibleParentNodes, array($parentnode), _('Parent node'), 'parentnode'), true);
// classes // classes
$this->addMultiValueInputTextField($return, 'puppetclass', _('Classes'), false, null, false, $this->classCache); if (empty($this->moduleSettings['puppetClient_enforceClasses'][0])) {
$this->addMultiValueInputTextField($return, 'puppetclass', _('Classes'), false, null, false, $this->classCache);
}
else {
$this->addMultiValueSelectField($return, 'puppetclass', _('Classes'), $this->moduleSettings['puppetClient_enforceClasses']);
}
// variables // variables
$this->addMultiValueInputTextField($return, 'puppetvar', _('Variables'), false, null, false, $this->variablesCache); $this->addMultiValueInputTextField($return, 'puppetvar', _('Variables'), false, null, false, $this->variablesCache);
@ -324,7 +335,12 @@ class puppetClient extends baseModule {
$this->attributes['parentnode'][0] = $_POST['parentnode']; $this->attributes['parentnode'][0] = $_POST['parentnode'];
} }
// classes // classes
$this->processMultiValueInputTextField('puppetclass', $errors, 'ascii'); if (empty($this->moduleSettings['puppetClient_enforceClasses'][0])) {
$this->processMultiValueInputTextField('puppetclass', $errors, 'ascii');
}
else {
$this->processMultiValueSelectField('puppetclass');
}
// variables // variables
$this->processMultiValueInputTextField('puppetvar', $errors, 'ascii'); $this->processMultiValueInputTextField('puppetvar', $errors, 'ascii');
@ -358,6 +374,20 @@ class puppetClient extends baseModule {
$this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'puppetClient_environment', 'environment', 'ascii', $this->messages['environment'][1], $messages, '/;[ ]*/'); $this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'puppetClient_environment', 'environment', 'ascii', $this->messages['environment'][1], $messages, '/;[ ]*/');
// classes // classes
$this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'puppetClient_puppetclass', 'puppetclass', 'ascii', $this->messages['puppetclass'][1], $messages, '/;[ ]*/'); $this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'puppetClient_puppetclass', 'puppetclass', 'ascii', $this->messages['puppetclass'][1], $messages, '/;[ ]*/');
if (!empty($this->moduleSettings['puppetClient_enforceClasses'][0]) && !empty($partialAccounts[$i]['puppetclass'])) {
$invalidClassFound = false;
foreach ($partialAccounts[$i]['puppetclass'] as $singleClass) {
if (!in_array($singleClass, $this->moduleSettings['puppetClient_enforceClasses'])) {
$invalidClassFound = true;
break;
}
}
if ($invalidClassFound) {
$msg = $this->messages['puppetclass'][2];
$msg[] = $i;
$messages[] = $msg;
}
}
// variables // variables
$this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'puppetClient_puppetvar', 'puppetvar', 'ascii', $this->messages['puppetvar'][1], $messages, '/;[ ]*/'); $this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'puppetClient_puppetvar', 'puppetvar', 'ascii', $this->messages['puppetvar'][1], $messages, '/;[ ]*/');
} }
@ -501,6 +531,30 @@ class puppetClient extends baseModule {
$this->variablesCache = array_values(array_unique($variables)); $this->variablesCache = array_values(array_unique($variables));
} }
/**
* Returns a list of configuration options.
*
* Calling this method does not require the existence of an enclosing {@link accountContainer}.<br>
* <br>
* The field names are used as keywords to load and save settings.
* We recommend to use the module name as prefix for them (e.g. posixAccount_homeDirectory) to avoid naming conflicts.
*
* @param array $scopes account types (user, group, host)
* @param array $allScopes list of all active account modules and their scopes (module => array(scopes))
* @return mixed htmlElement or array of htmlElement
*
* @see htmlElement
*/
public function get_configOptions($scopes, $allScopes) {
$return = parent::get_configOptions($scopes, $allScopes);
// config options
$configContainer = new htmlTable();
$configContainer->addElement(new htmlTableExtendedInputTextarea('puppetClient_environments', "production\r\ntesting", 30, 5, _('Predefined environments'), 'predefinedEnvironments'), true);
$configContainer->addElement(new htmlTableExtendedInputTextarea('puppetClient_enforceClasses', '', 30, 5, _('Enforce classes'), 'enforceClasses'), true);
$return[] = $configContainer;
return $return;
}
} }
?> ?>