2013-08-12 21:06:26 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class Application_Form_EditHistory extends Zend_Form
|
|
|
|
{
|
2021-10-11 16:10:47 +02:00
|
|
|
public const VALIDATE_DATETIME_FORMAT = 'yyyy-MM-dd HH:mm:ss';
|
2022-03-14 11:15:04 +01:00
|
|
|
// this is used by the javascript widget, unfortunately h/H is opposite from Zend.
|
2021-10-11 16:10:47 +02:00
|
|
|
public const TIMEPICKER_DATETIME_FORMAT = 'yyyy-MM-dd hh:mm:ss';
|
|
|
|
|
|
|
|
public const VALIDATE_DATE_FORMAT = 'yyyy-MM-dd';
|
|
|
|
public const VALIDATE_TIME_FORMAT = 'HH:mm:ss';
|
|
|
|
|
|
|
|
public const ITEM_TYPE = 'type';
|
|
|
|
public const ITEM_CLASS = 'class';
|
|
|
|
public const ITEM_OPTIONS = 'options';
|
|
|
|
public const ITEM_ID_SUFFIX = 'name';
|
|
|
|
|
|
|
|
public const TEXT_INPUT_CLASS = 'input_text';
|
|
|
|
|
|
|
|
private $formElTypes = [
|
|
|
|
TEMPLATE_DATE => [
|
|
|
|
'class' => 'Zend_Form_Element_Text',
|
|
|
|
'attrs' => [
|
|
|
|
'class' => self::TEXT_INPUT_CLASS,
|
|
|
|
],
|
|
|
|
'validators' => [
|
|
|
|
[
|
|
|
|
'class' => 'Zend_Validate_Date',
|
|
|
|
'params' => [
|
|
|
|
'format' => self::VALIDATE_DATE_FORMAT,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
'filters' => [
|
|
|
|
'StringTrim',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
TEMPLATE_TIME => [
|
|
|
|
'class' => 'Zend_Form_Element_Text',
|
|
|
|
'attrs' => [
|
|
|
|
'class' => self::TEXT_INPUT_CLASS,
|
|
|
|
],
|
|
|
|
'validators' => [
|
|
|
|
[
|
|
|
|
'class' => 'Zend_Validate_Date',
|
|
|
|
'params' => [
|
|
|
|
'format' => self::VALIDATE_TIME_FORMAT,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
'filters' => [
|
|
|
|
'StringTrim',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
TEMPLATE_DATETIME => [
|
|
|
|
'class' => 'Zend_Form_Element_Text',
|
|
|
|
'attrs' => [
|
|
|
|
'class' => self::TEXT_INPUT_CLASS,
|
|
|
|
],
|
|
|
|
'validators' => [
|
|
|
|
[
|
|
|
|
'class' => 'Zend_Validate_Date',
|
|
|
|
'params' => [
|
|
|
|
'format' => self::VALIDATE_DATETIME_FORMAT,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
'filters' => [
|
|
|
|
'StringTrim',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
TEMPLATE_STRING => [
|
|
|
|
'class' => 'Zend_Form_Element_Text',
|
|
|
|
'attrs' => [
|
|
|
|
'class' => self::TEXT_INPUT_CLASS,
|
|
|
|
],
|
|
|
|
'filters' => [
|
|
|
|
'StringTrim',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
TEMPLATE_BOOLEAN => [
|
|
|
|
'class' => 'Zend_Form_Element_Checkbox',
|
|
|
|
'validators' => [
|
|
|
|
[
|
|
|
|
'class' => 'Zend_Validate_InArray',
|
|
|
|
'options' => [
|
|
|
|
'haystack' => [0, 1],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
TEMPLATE_INT => [
|
|
|
|
'class' => 'Zend_Form_Element_Text',
|
|
|
|
'validators' => [
|
|
|
|
[
|
|
|
|
'class' => 'Zend_Validate_Int',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
'attrs' => [
|
|
|
|
'class' => self::TEXT_INPUT_CLASS,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
TEMPLATE_FLOAT => [
|
|
|
|
'class' => 'Zend_Form_Element_Text',
|
|
|
|
'attrs' => [
|
|
|
|
'class' => self::TEXT_INPUT_CLASS,
|
|
|
|
],
|
|
|
|
'validators' => [
|
|
|
|
[
|
|
|
|
'class' => 'Zend_Validate_Float',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
];
|
|
|
|
|
|
|
|
public function init()
|
|
|
|
{
|
|
|
|
$history_id = new Zend_Form_Element_Hidden($this::ID_PREFIX . 'id');
|
|
|
|
$history_id->setValidators([
|
|
|
|
new Zend_Validate_Int(),
|
|
|
|
]);
|
|
|
|
$history_id->setDecorators(['ViewHelper']);
|
|
|
|
$this->addElement($history_id);
|
|
|
|
|
|
|
|
$dynamic_attrs = new Zend_Form_SubForm();
|
|
|
|
$this->addSubForm($dynamic_attrs, $this::ID_PREFIX . 'template');
|
|
|
|
|
|
|
|
// Add the submit button
|
|
|
|
$this->addElement('button', $this::ID_PREFIX . 'save', [
|
|
|
|
'ignore' => true,
|
|
|
|
'class' => 'btn ' . $this::ID_PREFIX . 'save',
|
|
|
|
'label' => _('Save'),
|
|
|
|
'decorators' => [
|
|
|
|
'ViewHelper',
|
|
|
|
],
|
|
|
|
]);
|
|
|
|
|
|
|
|
// Add the cancel button
|
|
|
|
$this->addElement('button', $this::ID_PREFIX . 'cancel', [
|
|
|
|
'ignore' => true,
|
|
|
|
'class' => 'btn ' . $this::ID_PREFIX . 'cancel',
|
|
|
|
'label' => _('Cancel'),
|
|
|
|
'decorators' => [
|
|
|
|
'ViewHelper',
|
|
|
|
],
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function createFromTemplate($template, $required)
|
|
|
|
{
|
|
|
|
$templateSubForm = $this->getSubForm($this::ID_PREFIX . 'template');
|
|
|
|
|
|
|
|
for ($i = 0, $len = count($template); $i < $len; ++$i) {
|
|
|
|
$item = $template[$i];
|
2022-03-14 11:15:04 +01:00
|
|
|
// don't dynamically add this as it should be included in the
|
|
|
|
// init() function already if it should show up in the UI..
|
2021-10-11 16:10:47 +02:00
|
|
|
if (in_array($item['name'], $required)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$formElType = $this->formElTypes[$item[self::ITEM_TYPE]];
|
|
|
|
|
|
|
|
$label = $item[self::ITEM_ID_SUFFIX];
|
|
|
|
$id = $this::ID_PREFIX . $label;
|
|
|
|
$el = new $formElType[self::ITEM_CLASS]($id);
|
|
|
|
$el->setLabel($item['label']);
|
|
|
|
|
|
|
|
if (isset($formElType['attrs'])) {
|
|
|
|
$attrs = $formElType['attrs'];
|
|
|
|
|
|
|
|
foreach ($attrs as $key => $value) {
|
|
|
|
$el->setAttrib($key, $value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isset($formElType['filters'])) {
|
|
|
|
$filters = $formElType['filters'];
|
|
|
|
|
|
|
|
foreach ($filters as $filter) {
|
|
|
|
$el->addFilter($filter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isset($formElType['validators'])) {
|
|
|
|
$validators = $formElType['validators'];
|
|
|
|
|
|
|
|
foreach ($validators as $index => $arr) {
|
|
|
|
$options = isset($arr[self::ITEM_OPTIONS]) ? $arr[self::ITEM_OPTIONS] : null;
|
|
|
|
$validator = new $arr[self::ITEM_CLASS]($options);
|
|
|
|
|
2022-03-14 11:15:04 +01:00
|
|
|
// extra validator info
|
2021-10-11 16:10:47 +02:00
|
|
|
if (isset($arr['params'])) {
|
|
|
|
foreach ($arr['params'] as $key => $value) {
|
|
|
|
$method = 'set' . ucfirst($key);
|
|
|
|
$validator->{$method}($value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$el->addValidator($validator);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$el->setDecorators(['ViewHelper']);
|
|
|
|
$templateSubForm->addElement($el);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|