Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions lib/Horde/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
*/
class Horde_Form
{
protected static $init_params_cache = [];

protected $_name = '';
protected $_title = '';
protected $_extra = '';
Expand Down Expand Up @@ -163,7 +165,7 @@ public function getRenderer($params = [])
*
* @throws Horde_Exception
*/
public function getType($type, $params = [])
private function getType($type, $params = [])
{
if (strpos($type, ':') !== false) {
[$app, $type] = explode(':', $type);
Expand All @@ -178,7 +180,25 @@ public function getType($type, $params = [])
if (!$params) {
$params = [];
}
call_user_func_array([$type_ob, 'init'], $params);

// retrieve list of parameters
$keys = self::$init_params_cache[$type_class] ?? null;
if (is_null($keys)) {
$keys = array_keys($type_ob->about()['params'] ?? []);
self::$init_params_cache[$type_class] = $keys;
}

// convert named keys to numeric indexes
$i = 0;
foreach ($keys as $key) {
if (array_key_exists($key, $params)) {
$params[$i] = $params[$key];
unset($params[$key]);
}
++$i;
}

$type_ob->init(...$params);
return $type_ob;
}

Expand Down
134 changes: 93 additions & 41 deletions lib/Horde/Form/Type.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ public function invalid(string $message): bool
return false;
}

public function about()
{
return ['name' => $this->getTypeName()];
}

}

class Horde_Form_Type_spacer extends Horde_Form_Type
Expand Down Expand Up @@ -244,7 +249,11 @@ public function getInfo($vars, $var, $info)
*/
public function about()
{
return ['name' => Horde_Form_Translation::t("Number")];
return [
'name' => Horde_Form_Translation::t("Number"),
'params' => [
'fraction' => ['label' => Horde_Form_Translation::t("Fraction"),
'type' => 'int']]];
}

}
Expand Down Expand Up @@ -1480,7 +1489,10 @@ public function about()
return [
'name' => Horde_Form_Translation::t("Link"),
'params' => [
'url' => [
'values' => [
'label' => Horde_Form_Translation::t("Values"),
'type' => 'array']
/* 'url' => [
'label' => Horde_Form_Translation::t("Link URL"),
'type' => 'text'],
'text' => [
Expand All @@ -1501,7 +1513,8 @@ public function about()
'class' => [
'label' => Horde_Form_Translation::t("Link CSS class"),
'type' => 'text'],
],
*/
]
];
}

Expand Down Expand Up @@ -2270,17 +2283,32 @@ public function getInfo($vars, $var, $info)
unset($values['n']);
}

$info = ($values['r'] ?? []);
return $info;
return $values['r'] ?? [];
}

public function about()
{
return [
'name' => Horde_Form_Translation::t("Field matrix"),
'params' => [
'cols' => ['label' => Horde_Form_Translation::t("Column titles"),
'type' => 'stringarray']]];
'cols' => [
'label' => Horde_Form_Translation::t("Column titles"),
'type' => 'stringarray'
],
'rows' => [
'label' => Horde_Form_Translation::t("Row titles"),
'type' => 'stringarray'
],
'matrix' => [
'label' => Horde_Form_Translation::t("Values"),
'type' => 'stringarray'
],
'new_input' => [
'label' => Horde_Form_Translation::t("New Input"),
'type' => 'boolean'
]
]
];
}

}
Expand Down Expand Up @@ -2523,7 +2551,7 @@ public function about()
'params' => [
'values' => ['label' => Horde_Form_Translation::t("Values to select from"),
'type' => 'stringarray'],
'prompt' => ['label' => Horde_Form_Translation::t("Prompt text"),
'prompts' => ['label' => Horde_Form_Translation::t("Prompt text"),
'type' => 'text']]];
}

Expand Down Expand Up @@ -2654,16 +2682,8 @@ class Horde_Form_Type_set extends Horde_Form_Type
*/
public function init(...$params)
{
if (is_array($params) && array_key_exists('values', $params)) {
$this->_values = $params['values'];
} else {
$this->_values = $params[0];
}
if (is_array($params) && array_key_exists('checkAll', $params)) {
$this->_checkAll = (bool) $params['checkAll'];
} else {
$this->_checkAll = $params[1] ?? false;
}
$this->_values = $params[0];
$this->_checkAll = $params[1] ?? false;
}

public function isValid($var, $vars, $value, $message)
Expand Down Expand Up @@ -2694,8 +2714,16 @@ public function about()
return [
'name' => Horde_Form_Translation::t("Set"),
'params' => [
'values' => ['label' => Horde_Form_Translation::t("Values"),
'type' => 'stringarray']]];
'values' => [
'label' => Horde_Form_Translation::t("Values"),
'type' => 'stringarray'
],
'checkAll' => [
'label' => Horde_Form_Translation::t("Check all"),
'type' => 'boolean'
]
]
];
}

}
Expand Down Expand Up @@ -2777,7 +2805,15 @@ public function getFormattedTime($timestamp, $format = null, $showago = true)
*/
public function about()
{
return ['name' => Horde_Form_Translation::t("Date")];
return [
'name' => Horde_Form_Translation::t("Date"),
'params' => [
'format' => [
'label' => Horde_Form_Translation::t("Format"),
'type' => 'string'
]
]
];
}

}
Expand Down Expand Up @@ -2917,7 +2953,7 @@ public function about()
return [
'name' => Horde_Form_Translation::t("Time selection"),
'params' => [
'seconds' => ['label' => Horde_Form_Translation::t("Show seconds?"),
'show_seconds' => ['label' => Horde_Form_Translation::t("Show seconds?"),
'type' => 'boolean']]];
}

Expand All @@ -2935,8 +2971,8 @@ class Horde_Form_Type_monthyear extends Horde_Form_Type
*/
public function init(...$params)
{
$start_year = $params['start_year'] ?? $params[0] ?? null;
$end_year = $params['end_year'] ?? $params[1] ?? null;
$start_year = $params[0] ?? null;
$end_year = $params[1] ?? null;

if (empty($start_year)) {
$start_year = 1920;
Expand Down Expand Up @@ -3013,11 +3049,11 @@ class Horde_Form_Type_monthdayyear extends Horde_Form_Type
*/
public function init(...$params)
{
$start_year = $params['start_year'] ?? $params[0] ?? '';
$end_year = $params['end_year'] ?? $params[1] ?? '';
$picker = $params['picker'] ?? $params[2] ?? true;
$format_in = $params['format_in'] ?? $params[3] ?? null;
$format_out = $params['format_out'] ?? $params[4] ?? '%x';
$start_year = $params[0] ?? '';
$end_year = $params[1] ?? '';
$picker = $params[2] ?? true;
$format_in = $params[3] ?? null;
$format_out = $params[4] ?? '%x';

if (empty($start_year)) {
$start_year = date('Y');
Expand Down Expand Up @@ -3251,12 +3287,12 @@ class Horde_Form_Type_datetime extends Horde_Form_Type
*/
public function init(...$params)
{
$start_year = $params['start_year'] ?? $params[0] ?? '';
$end_year = $params['end_year'] ?? $params[1] ?? '';
$picker = $params['picker'] ?? $params[2] ?? true;
$format_in = $params['format_in'] ?? $params[3] ?? null;
$format_out = $params['format_out'] ?? $params[4] ?? '%x';
$show_seconds = $params['show_seconds'] ?? $params[5] ?? false;
$start_year = $params[0] ?? '';
$end_year = $params[1] ?? '';
$picker = $params[2] ?? true;
$format_in = $params[3] ?? null;
$format_out = $params[4] ?? '%x';
$show_seconds = $params[5] ?? false;

$this->_mdy = new Horde_Form_Type_monthdayyear();
$this->_mdy->init($start_year, $end_year, $picker, $format_in, $format_out);
Expand Down Expand Up @@ -3404,7 +3440,7 @@ public function about()
'type' => 'text'],
'format_out' => ['label' => Horde_Form_Translation::t("Display format"),
'type' => 'text'],
'seconds' => ['label' => Horde_Form_Translation::t("Show seconds?"),
'show_seconds' => ['label' => Horde_Form_Translation::t("Show seconds?"),
'type' => 'boolean']]];
}

Expand Down Expand Up @@ -3484,9 +3520,9 @@ class Horde_Form_Type_sorter extends Horde_Form_Type
*/
public function init(...$params)
{
$values = $params['values'] ?? $params[0];
$size = $params['size'] ?? $params[1] ?? 8;
$header = $params['header'] ?? $params[2] ?? '';
$values = $params[0];
$size = $params[1] ?? 8;
$header = $params[2] ?? '';

static $horde_sorter_instance = 0;

Expand Down Expand Up @@ -3936,7 +3972,7 @@ public function about()
return [
'name' => Horde_Form_Translation::t("Database lookup"),
'params' => [
'dsn' => ['label' => Horde_Form_Translation::t("DSN (see http://pear.php.net/manual/en/package.database.db.intro-dsn.php)"),
'db' => ['label' => Horde_Form_Translation::t("DSN (see http://pear.php.net/manual/en/package.database.db.intro-dsn.php)"),
'type' => 'text'],
'sql' => ['label' => Horde_Form_Translation::t("SQL statement for value lookups"),
'type' => 'text'],
Expand Down Expand Up @@ -4065,12 +4101,28 @@ class Horde_Form_Type_invalid extends Horde_Form_Type
*/
public function init(...$params)
{
$this->message = $params['message'] ?? $params[0] ?? '';
$this->message = $params[0] ?? '';
}

public function isValid($var, $vars, $value, $message)
{
return false;
}

/**
* Return info about field type.
*/
public function about()
{
return [
'name' => Horde_Form_Translation::t("Invalid"),
'params' => [
'message' => [
'label' => Horde_Form_Translation::t("Text"),
'type' => 'text'
]
]
];
}

}
2 changes: 1 addition & 1 deletion src/V3/BaseVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,7 @@ protected function isValid(Horde_Variables|array $vars, $value): bool

public function invalid(string $message): bool
{
$this->message = Horde_Form_Translation::t($message);
$this->message = $message;
return false;
}

Expand Down
10 changes: 9 additions & 1 deletion src/V3/DateVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,15 @@ public function getFormattedTime($timestamp, $format = null, $showago = true)
*/
public function about(): array
{
return [ 'name' => Horde_Form_Translation::t("Date") ];
return [
'name' => Horde_Form_Translation::t("Date"),
'params' => [
'format' => [
'label' => Horde_Form_Translation::t("Format"),
'type' => 'string'
]
]
];
}

}
14 changes: 7 additions & 7 deletions src/V3/DatetimeVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ class DatetimeVariable extends BaseVariable
*/
public function init(...$params)
{
$start_year = $params['start_year'] ?? $params[0] ?? '';
$end_year = $params['end_year'] ?? $params[1] ?? '';
$picker = $params['picker'] ?? $params[2] ?? true;
$format_in = $params['format_in'] ?? $params[3] ?? null;
$format_out = $params['format_out'] ?? $params[4] ?? '%x';
$show_seconds = $params['show_seconds'] ?? $params[5] ?? false;
$start_year = $params[0] ?? '';
$end_year = $params[1] ?? '';
$picker = $params[2] ?? true;
$format_in = $params[3] ?? null;
$format_out = $params[4] ?? '%x';
$show_seconds = $params[5] ?? false;

$this->_mdy = new MonthdayyearVariable('', '', true);
$this->_mdy->init($start_year, $end_year, $picker, $format_in, $format_out);
Expand Down Expand Up @@ -169,7 +169,7 @@ public function about(): array
'type' => 'text'],
'format_out' => ['label' => Horde_Form_Translation::t("Display format"),
'type' => 'text'],
'seconds' => ['label' => Horde_Form_Translation::t("Show seconds?"),
'show_seconds' => ['label' => Horde_Form_Translation::t("Show seconds?"),
'type' => 'boolean']]];
}

Expand Down
2 changes: 1 addition & 1 deletion src/V3/DblookupVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public function about(): array
return [
'name' => Horde_Form_Translation::t("Database lookup"),
'params' => [
'dsn' => [
'db' => [
'label' => Horde_Form_Translation::t("DSN (see http://pear.php.net/manual/en/package.database.db.intro-dsn.php)"),
'type' => 'text'
],
Expand Down
2 changes: 1 addition & 1 deletion src/V3/HourminutesecondVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public function about(): array
return [
'name' => Horde_Form_Translation::t("Time selection"),
'params' => [
'seconds' => [
'show_seconds' => [
'label' => Horde_Form_Translation::t("Show seconds?"),
'type' => 'boolean'
]
Expand Down
Loading
Loading