mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-21 17:39:09 +01:00
test_form_rule: add optional parameters to specify on which object's attribute to run the test
This commit is contained in:
parent
965efeeda5
commit
2e0338e678
1 changed files with 119 additions and 3 deletions
|
@ -114,11 +114,20 @@ class LSformRule extends LSlog_staticLoggerClass {
|
||||||
* - values to test
|
* - values to test
|
||||||
* - Optional arguments :
|
* - Optional arguments :
|
||||||
* - -p|--param: LSformRule parameters (format: param=value)
|
* - -p|--param: LSformRule parameters (format: param=value)
|
||||||
|
* - Other optional arguments to specify on which LDAP object's attribute to run the test:
|
||||||
|
* - -t|--object-type: LSobject type
|
||||||
|
* - -D|--dn: LDAP object DN
|
||||||
|
* - -f|--form: LdapSaisie form name (create, modify, ...)
|
||||||
|
* - -a|--attr: the attribute name (must be included in the specified form)
|
||||||
*
|
*
|
||||||
* @return boolean True on success, false otherwise
|
* @return boolean True on success, false otherwise
|
||||||
**/
|
**/
|
||||||
public static function cli_test_form_rule($command_args) {
|
public static function cli_test_form_rule($command_args) {
|
||||||
$rule_name = null;
|
$rule_name = null;
|
||||||
|
$objType = null;
|
||||||
|
$dn = null;
|
||||||
|
$form = null;
|
||||||
|
$attr = null;
|
||||||
$values = array();
|
$values = array();
|
||||||
$params = array();
|
$params = array();
|
||||||
for ($i=0; $i < count($command_args); $i++) {
|
for ($i=0; $i < count($command_args); $i++) {
|
||||||
|
@ -133,6 +142,26 @@ class LSformRule extends LSlog_staticLoggerClass {
|
||||||
LScli :: usage('Parameter "'.$param_parts[0].'" already specified.');
|
LScli :: usage('Parameter "'.$param_parts[0].'" already specified.');
|
||||||
$params[$param_parts[0]] = LScli :: parse_arg_value($param_parts[1]);
|
$params[$param_parts[0]] = LScli :: parse_arg_value($param_parts[1]);
|
||||||
}
|
}
|
||||||
|
else if (in_array($command_args[$i], ['-t', '--object-type'])) {
|
||||||
|
$i++;
|
||||||
|
LScli :: unquote_word($command_args[$i]);
|
||||||
|
$objType = $command_args[$i];
|
||||||
|
}
|
||||||
|
else if (in_array($command_args[$i], ['-D', '--dn'])) {
|
||||||
|
$i++;
|
||||||
|
LScli :: unquote_word($command_args[$i]);
|
||||||
|
$dn = $command_args[$i];
|
||||||
|
}
|
||||||
|
else if (in_array($command_args[$i], ['-f', '--form'])) {
|
||||||
|
$i++;
|
||||||
|
LScli :: unquote_word($command_args[$i]);
|
||||||
|
$form = $command_args[$i];
|
||||||
|
}
|
||||||
|
else if (in_array($command_args[$i], ['-a', '--attr'])) {
|
||||||
|
$i++;
|
||||||
|
LScli :: unquote_word($command_args[$i]);
|
||||||
|
$attr = $command_args[$i];
|
||||||
|
}
|
||||||
else if (is_null($rule_name)) {
|
else if (is_null($rule_name)) {
|
||||||
$rule_name = $command_args[$i];
|
$rule_name = $command_args[$i];
|
||||||
}
|
}
|
||||||
|
@ -144,8 +173,41 @@ class LSformRule extends LSlog_staticLoggerClass {
|
||||||
if (is_null($rule_name) || empty($values))
|
if (is_null($rule_name) || empty($values))
|
||||||
LScli :: usage('You must provide LSformRule type and at least one value to test.');
|
LScli :: usage('You must provide LSformRule type and at least one value to test.');
|
||||||
|
|
||||||
self :: log_trace("test_form_rule($rule_name): params=".varDump($params));
|
|
||||||
$formElement = null;
|
if ($objType || $dn || $form || $attr) {
|
||||||
|
if ( ! ( $objType && $dn && $form && $attr ) )
|
||||||
|
LScli :: usage(
|
||||||
|
'To specify which form element you want to simulate the execution of a rule on, '.
|
||||||
|
'you must provide the following set of information: the object type (-t/--type), '.
|
||||||
|
'the object DN (-D/--dn), the form (-f/--form), and the attribute (-a/--attr).'
|
||||||
|
);
|
||||||
|
if (!LSsession :: loadLSobject($objType))
|
||||||
|
return false;
|
||||||
|
$obj = new $objType();
|
||||||
|
if (!$obj->loadData($dn)) {
|
||||||
|
self :: log_fatal("Fail to load object $dn data from LDAP");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$formObj = $obj->getForm($form);
|
||||||
|
if (!$formObj->hasElement($attr))
|
||||||
|
LScli :: usage("The attribute $attr is not included in the form $form of $objType.");
|
||||||
|
$formElement = $formObj -> getElement($attr);
|
||||||
|
self :: log_debug("Run $rule_name rule as if we are on the attribute $attr of the $objType object $dn");
|
||||||
|
|
||||||
|
$attr_params = LSconfig :: get("LSobjects.$objType.attrs.$attr.check_data.$rule_name.params", [], "array");
|
||||||
|
if ($attr_params) {
|
||||||
|
self :: log_debug(
|
||||||
|
"Merge provided parameters with configured one from $objType configuration: ".
|
||||||
|
varDump($attr_params)
|
||||||
|
);
|
||||||
|
$params = array_merge_recursive($attr_params, $params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$formElement = null;
|
||||||
|
|
||||||
|
self :: log_debug("Run $rule_name rule with following parameters: ".varDump($params));
|
||||||
|
|
||||||
$errors = self :: validate_values($rule_name, $values, array('params' => $params), $formElement);
|
$errors = self :: validate_values($rule_name, $values, array('params' => $params), $formElement);
|
||||||
if (is_array($errors)) {
|
if (is_array($errors)) {
|
||||||
print "Test triggered errors :\n - ".implode("\n - ", $errors)."\n";
|
print "Test triggered errors :\n - ".implode("\n - ", $errors)."\n";
|
||||||
|
@ -168,7 +230,10 @@ class LSformRule extends LSlog_staticLoggerClass {
|
||||||
* @return array<string> List of available options for the word to autocomplete
|
* @return array<string> List of available options for the word to autocomplete
|
||||||
**/
|
**/
|
||||||
public static function cli_test_form_rule_args_autocompleter($command_args, $comp_word_num, $comp_word, $opts) {
|
public static function cli_test_form_rule_args_autocompleter($command_args, $comp_word_num, $comp_word, $opts) {
|
||||||
$opts = array_merge($opts, array('-p', '--param'));
|
$opts = array_merge(
|
||||||
|
$opts,
|
||||||
|
['-p', '--param', '-t', '--object-type', '-D', '--dn', '-f', '--form', '-a', '--attr']
|
||||||
|
);
|
||||||
|
|
||||||
// Handle positional args
|
// Handle positional args
|
||||||
$rule_name = null;
|
$rule_name = null;
|
||||||
|
@ -176,10 +241,12 @@ class LSformRule extends LSlog_staticLoggerClass {
|
||||||
$rule_name_arg_num = null;
|
$rule_name_arg_num = null;
|
||||||
$rule_name_quote_char = null;
|
$rule_name_quote_char = null;
|
||||||
$params = array();
|
$params = array();
|
||||||
|
$objType = null;
|
||||||
for ($i=0; $i < count($command_args); $i++) {
|
for ($i=0; $i < count($command_args); $i++) {
|
||||||
switch ($command_args[$i]) {
|
switch ($command_args[$i]) {
|
||||||
case '-p':
|
case '-p':
|
||||||
case '--params':
|
case '--params':
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_opts([$comp_word], $comp_word);
|
||||||
$i++;
|
$i++;
|
||||||
$quote_char = LScli :: unquote_word($command_args[$i]);
|
$quote_char = LScli :: unquote_word($command_args[$i]);
|
||||||
$param_parts = explode('=', $command_args[$i]);
|
$param_parts = explode('=', $command_args[$i]);
|
||||||
|
@ -192,6 +259,42 @@ class LSformRule extends LSlog_staticLoggerClass {
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '-t':
|
||||||
|
case '--object-type':
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_opts([$comp_word], $comp_word);
|
||||||
|
$i++;
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_LSobject_types($comp_word);
|
||||||
|
if (isset($command_args[$i])) {
|
||||||
|
$objType = $command_args[$i];
|
||||||
|
LScli :: unquote_word($objType);
|
||||||
|
}
|
||||||
|
$opts = array_diff($opts, ['-t', '--object-type']);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '-D':
|
||||||
|
case '--dn':
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_opts([$comp_word], $comp_word);
|
||||||
|
$i++;
|
||||||
|
if ($objType && $comp_word_num == $i) return LScli :: autocomplete_LSobject_dn($objType, $comp_word);
|
||||||
|
$opts = array_diff($opts, ['-d', '--dn']);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '-f':
|
||||||
|
case '--form':
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_opts([$comp_word], $comp_word);
|
||||||
|
$i++;
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_LSform_name($comp_word);
|
||||||
|
$opts = array_diff($opts, ['-f', '--form']);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '-a':
|
||||||
|
case '--attr':
|
||||||
|
if ($comp_word_num == $i) return LScli :: autocomplete_opts([$comp_word], $comp_word);
|
||||||
|
$i++;
|
||||||
|
if ($objType && $comp_word_num == $i) return LScli :: autocomplete_LSobject_attr_name($objType, $comp_word);
|
||||||
|
$opts = array_diff($opts, ['-a', '--attr']);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// If rule name not defined
|
// If rule name not defined
|
||||||
if (is_null($rule_name)) {
|
if (is_null($rule_name)) {
|
||||||
|
@ -319,6 +422,19 @@ LScli :: add_command(
|
||||||
' param_name=param_value',
|
' param_name=param_value',
|
||||||
' Multiple parameters could be specified by using this',
|
' Multiple parameters could be specified by using this',
|
||||||
' optional argument multiple time',
|
' optional argument multiple time',
|
||||||
|
'',
|
||||||
|
' - Other optional arguments to specify on which LDAP object\'s attribute',
|
||||||
|
' to run the test:',
|
||||||
|
' - -t|--object-type: LSobject type',
|
||||||
|
' - -D|--dn: LDAP object DN',
|
||||||
|
' - -f|--form: LdapSaisie form name (create, modify, ...)',
|
||||||
|
' - -a|--attr: the attribute name (must be included in the specified',
|
||||||
|
' form)',
|
||||||
|
' In this case, the LSformRule validate() method will receive a real',
|
||||||
|
' LSformElement object reference as third parameter and will have access',
|
||||||
|
' to the associated context. Furthermore, if the rule is configured on',
|
||||||
|
' the specified object\'s attribute, the configured rule\'s parameters',
|
||||||
|
' will be automatically merged with the specified ones.',
|
||||||
),
|
),
|
||||||
true,
|
true,
|
||||||
array('LSformRule', 'cli_test_form_rule_args_autocompleter')
|
array('LSformRule', 'cli_test_form_rule_args_autocompleter')
|
||||||
|
|
Loading…
Reference in a new issue