public static function addContent(Fieldset $form, $elements, $prefix = null, $datatypeId = null)
{
if (empty($elements)) {
return;
}
if (!empty($prefix) and $datatypeId === null) {
$datatypeId = mt_rand();
}
if (is_array($elements)) {
$return = array();
foreach ($elements as $element) {
$return[] = self::addContent($form, $element, $prefix, $datatypeId);
}
return $return;
} elseif ($elements instanceof Element) {
if (!empty($prefix)) {
$id = $elements->getAttribute('id');
if (empty($id)) {
$id = $elements->getAttribute('name');
}
$elements->setAttribute('id', $id . $datatypeId);
$elements->setAttribute('name', $prefix . '[' . $elements->getAttribute('name') . ']');
}
$form->add($elements);
return $elements;
} elseif (is_string($elements)) {
if (!empty($prefix)) {
$elements = preg_replace('~name="(.+)(([|\\[).*(]|\\]))?"~iU', 'name="' . $prefix . '[$1]$2"', $elements);
$elements = preg_replace('~name\\\\x3D\\\\x22(.+)(\\\\x5B.*\\\\x5D)?\\\\x22~iU', 'name\\\\x3D\\\\x22' . $prefix . '\\\\x5B$1\\\\x5D$2\\\\x22', $elements);
$elements = preg_replace('~id="(.+)"~iU', 'id="${1}' . $datatypeId . '"', $elements);
$elements = preg_replace('~for="(.+)"~iU', 'for="${1}' . $datatypeId . '"', $elements);
$elements = preg_replace('~id\\\\x3D\\\\x22"(.+)\\\\x22~iU', 'id\\\\x3D\\\\x22${1}' . $datatypeId . '\\\\x22', $elements);
$elements = preg_replace('~for\\\\x3D\\\\x22"(.+)\\\\x22~iU', 'for\\\\x3D\\\\x22${1}' . $datatypeId . '\\\\x22', $elements);
$elements = preg_replace('~(?:(?!(?<=value=)))("|\')#(.+)("|\')~iU', '${1}#${2}' . $datatypeId . '${3}', $elements);
}
$hiddenElement = new Element('hidden' . uniqid());
$hiddenElement->setAttribute('content', $elements);
$form->add($hiddenElement);
return $hiddenElement;
} else {
throw new Exception('Invalid element ' . __CLASS__ . '::' . __METHOD__ . ')');
}
}