From 03baeadfcd0c70213aad793c3da92ad449d07487 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 22 Sep 2007 15:03:03 +0000 Subject: [PATCH] CSV Export for all eTemplate applications using the nextmatch widget to list their entries. The column names, labels and types can be set by the application or get autodetected by eTemplate. Admins can configure an export limit (max. number of entries to export) or disable the functionality completly for non-admins. The charset for the csv export can be configured in the common prefs. Applications can and have to turn the export explicitly off by setting ['nm']['csv_fields']=false. I only made a column-definition for InfoLog, which includes translated column-names. --- admin/inc/class.uiaccounts.inc.php | 2 +- admin/setup/phpgw_de.lang | 1 + admin/setup/phpgw_en.lang | 1 + admin/templates/default/config.tpl | 4 + etemplate/doc/reference.html | 5 +- etemplate/inc/class.nextmatch_widget.inc.php | 258 +++++++++++++++++- etemplate/setup/etemplates.inc.php | 10 +- .../templates/default/nextmatch_widget.xet | 8 +- infolog/inc/class.uiinfolog.inc.php | 73 ++++- preferences/inc/hook_settings.inc.php | 11 +- preferences/setup/phpgw_cs.lang | 2 + preferences/setup/phpgw_de.lang | 2 + preferences/setup/phpgw_en.lang | 2 + preferences/setup/phpgw_es-es.lang | 2 + preferences/setup/phpgw_eu.lang | 1 + preferences/setup/phpgw_fi.lang | 2 + preferences/setup/phpgw_fr.lang | 2 + preferences/setup/phpgw_it.lang | 1 + preferences/setup/phpgw_nl.lang | 2 + preferences/setup/phpgw_pl.lang | 2 + preferences/setup/phpgw_pt-br.lang | 2 + preferences/setup/phpgw_sk.lang | 2 + preferences/setup/phpgw_sl.lang | 2 + preferences/setup/phpgw_sv.lang | 2 + preferences/setup/phpgw_zh-tw.lang | 2 + 25 files changed, 385 insertions(+), 16 deletions(-) diff --git a/admin/inc/class.uiaccounts.inc.php b/admin/inc/class.uiaccounts.inc.php index 2903917e84..03d4c94648 100755 --- a/admin/inc/class.uiaccounts.inc.php +++ b/admin/inc/class.uiaccounts.inc.php @@ -588,7 +588,7 @@ $errors = $this->bo->add_user($userData); if(is_array($errors)) { - $this->create_edit_user($userData,$errors); + $this->create_edit_user(0,$userData,$errors); $GLOBALS['egw']->common->egw_exit(); } $GLOBALS['egw']->redirect($GLOBALS['egw']->link('/index.php','menuaction=admin.uiaccounts.list_users')); diff --git a/admin/setup/phpgw_de.lang b/admin/setup/phpgw_de.lang index fe59223e61..73146b4228 100644 --- a/admin/setup/phpgw_de.lang +++ b/admin/setup/phpgw_de.lang @@ -226,6 +226,7 @@ home directory admin de Benutzerverzeichnis host information admin de Host-Information hour
(0-23) admin de Stunde
(0-23) how many days should entries stay in the access log, before they get deleted (default 90) ? admin de Wie viele Tage sollen Einträge im Zugangsprotokoll bleiben, bevor sie gelöscht werden (Vorgabe 90)? +how many entries should non-admins be able to export (empty = no limit, no = no export) admin de Wie viele Einträge sollen nicht-Administratoren exportieren können (leer = kein Limit, Nein = kein Export) how many minutes should an account or ip be blocked (default 30) ? admin de Wie viele Minuten soll ein Benutzerkonto oder eine IP gesperrt werden (Vorgabe 30)? how should email addresses for new users be constructed? admin de In welchem Format sollen E-Mail-Adressen von neuen Benutzern erzeugt werden? icon admin de Icon diff --git a/admin/setup/phpgw_en.lang b/admin/setup/phpgw_en.lang index fb8330bc31..8545e37611 100644 --- a/admin/setup/phpgw_en.lang +++ b/admin/setup/phpgw_en.lang @@ -224,6 +224,7 @@ home directory admin en Home directory host information admin en Host information hour
(0-23) admin en Hour
(0-23) how many days should entries stay in the access log, before they get deleted (default 90) ? admin en How many days should entries stay in the access log, before they get deleted (default 90) ? +how many entries should non-admins be able to export (empty = no limit, no = no export) admin en How many entries should non-admins be able to export (empty = no limit, no = no export) how many minutes should an account or ip be blocked (default 30) ? admin en How many minutes should an account or IP be blocked (default 30) ? how should email addresses for new users be constructed? admin en How should EMail addresses for new users be constructed? icon admin en Icon diff --git a/admin/templates/default/config.tpl b/admin/templates/default/config.tpl index b2505ff533..032d6638f9 100644 --- a/admin/templates/default/config.tpl +++ b/admin/templates/default/config.tpl @@ -240,6 +240,10 @@ + + {lang_How_many_entries_should_non-admins_be_able_to_export_(empty_=_no_limit,_no_=_no_export)}: + + diff --git a/etemplate/doc/reference.html b/etemplate/doc/reference.html index 7622e86b27..1422d19d0b 100644 --- a/etemplate/doc/reference.html +++ b/etemplate/doc/reference.html @@ -837,8 +837,11 @@ $content[$id] = array( // I = value set by the app, 0 = value on return / 'sel_options' => // O additional or changed sel_options set by the callback and merged into $tmpl->sel_options 'no_columnselection' => // I turns off the columnselection completly, turned on by default 'columnselection-pref' => // I name of the preference (plus 'nextmatch-' prefix), default = template-name - 'default_cols' => // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns + 'default_cols' => // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns 'options-selectcols' => // I array with name/label pairs for the column-selection, this gets autodetected by default. A name => false suppresses a column completly. + 'return' => // IO allows to return something from the get_rows function if $query is a var-param! + 'csv_fields' => // I false=disable csv export, true or unset=enable it with auto-detected fieldnames, + or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type) ); /* diff --git a/etemplate/inc/class.nextmatch_widget.inc.php b/etemplate/inc/class.nextmatch_widget.inc.php index 2b35d6eb9c..ba2671083e 100644 --- a/etemplate/inc/class.nextmatch_widget.inc.php +++ b/etemplate/inc/class.nextmatch_widget.inc.php @@ -48,7 +48,13 @@ * 'rows' => // O content set by callback * 'total' => // O the total number of entries * 'sel_options' => // O additional or changed sel_options set by the callback and merged into $tmpl->sel_options + * 'no_columnselection' => // I turns off the columnselection completly, turned on by default + * 'columnselection-pref' => // I name of the preference (plus 'nextmatch-' prefix), default = template-name + * 'default_cols' => // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns + * 'options-selectcols' => // I array with name/label pairs for the column-selection, this gets autodetected by default. A name => false suppresses a column completly. * 'return' => // IO allows to return something from the get_rows function if $query is a var-param! + * 'csv_fields' => // I false=disable csv export, true or unset=enable it with auto-detected fieldnames, + * or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type) * ); * @package etemplate * @subpackage extensions @@ -198,6 +204,9 @@ // save values in persistent extension_data to be able use it in post_process $extension_data += $value; + $value['no_csv_export'] = $value['csv_fields'] === false || + $GLOBALS['egw_info']['server']['export_limit'] && !is_numeric($GLOBALS['egw_info']['server']['export_limit']); + if (!$value['filter_onchange']) $value['filter_onchange'] = 'this.form.submit();'; if (!$value['filter2_onchange']) $value['filter2_onchange'] = 'this.form.submit();'; @@ -583,7 +592,7 @@ $value[$name] = $value['bottom'][$name]; } } - $buttons = array('start_search','first','left','right','last'); + $buttons = array('start_search','first','left','right','last','export'); foreach($buttons as $name) { if (isset($value['bottom'][$name]) && $value['bottom'][$name]) @@ -697,6 +706,253 @@ $GLOBALS['egw']->preferences->save_repository(false,$pref); $loop = True; } + if ($value['export']) + { + $this->_csv_export($extension_data); + } return True; } + + var $separator = ';'; + var $charset_out; + var $charset; + + /** + * Export the list as csv file download + * + * @param array $value content of the nextmatch widget + * @param boolean false=error, eg. get_rows callback does not exits, true=nothing to export, otherwise we do NOT return! + */ + function _csv_export(&$value) + { + if (!isset($GLOBALS['egw_info']['user']['apps']['admin'])) + { + $export_limit = $GLOBALS['egw_info']['server']['export_limit']; + } + list($app,$class,$method) = explode('.',$value['get_rows']); + if ($app && $class) + { + if (is_object($GLOBALS[$class])) // use existing instance (put there by a previous CreateObject) + { + $obj =& $GLOBALS[$class]; + } + else + { + $obj =& CreateObject($app.'.'.$class); + } + } + if (!is_object($obj) || !method_exists($obj,$method)) + { + $GLOBALS['egw_info']['etemplate']['validation_errors'][$name] = "nextmatch_widget::pre_process($cell[name]): '$value[get_rows]' is no valid method !!!"; + return false; + } + $this->charset = $this->charset_out = $GLOBALS['egw']->translation->charset(); + if (isset($value['csv_charset'])) + { + $this->charset_out = $value['csv_charset']; + } + elseif ($GLOBALS['egw_info']['user']['preferences']['common']['csv_charset']) + { + $this->charset_out = $GLOBALS['egw_info']['user']['preferences']['common']['csv_charset']; + } + $backup_start = $value['start']; + $backup_num_rows = $value['num_rows']; + + $value['start'] = 0; + $value['num_rows'] = 500; + $value['csv_export'] = true; // so get_rows method _can_ produce different content or not store state in the session + do + { + if (!($total = $obj->$method($value,$rows,$readonlys=array()))) + { + break; // nothing to export + } + if ($export_limit && (!is_numeric($export_limit) || $export_limit < $total)) + { + $GLOBALS['egw_info']['etemplate']['validation_errors'][$name] = lang('You are not allowed to export more then %1 entries!',$export_limit); + return false; + } + if (!isset($value['no_csv_support'])) $value['no_csv_support'] = !is_array($value['csv_fields']); + + //echo "

start=$value[start], num_rows=$value[num_rows]: total=$total, count(\$rows)=".count($rows)."

\n"; + if (!$value['start']) // send the neccessary headers + { + $fp = $this->_csv_open($rows[0],$value['csv_fields'],$app); + } + //_debug_array($rows); + foreach($rows as $key => $row) + { + if (!is_numeric($key)) continue; // not a real rows + fwrite($fp,$this->_csv_encode($row,$value['csv_fields'])."\n"); + } + $value['start'] += $value['num_rows']; + + @set_time_limit(10); // 10 more seconds + } + while($total > $value['start']); + + unset($value['csv_export']); + $value['start'] = $backup_start; + $value['num_rows'] = $backup_num_rows; + if ($value['no_csv_support']) // we need to call the get_rows method in case start&num_rows are stored in the session + { + $obj->$method($value,$rows,$readonlys=array()); + } + if ($fp) + { + fclose($fp); + $GLOBALS['egw']->common->egw_exit(); + } + return true; + } + + /** + * Opens the csv output (download) and writes the header line + * + * @param array $row0 first row to guess the available fields + * @param array $fields name=>label or name=>array('lable'=>label,'type'=>type) pairs + * @param string $app app-name + * @return FILE + */ + function _csv_open($row0,&$fields,$app) + { + if (!is_array($fields) || !count($fields)) + { + $fields = $this->_autodetect_fields($row0,$app); + } + $browser =& CreateObject('phpgwapi.browser'); + $browser->content_header('export.csv','text/comma-separated-values'); + //echo "
";
+			
+			if (($fp = fopen('php://output','w')))
+			{
+				$labels = array();
+				foreach($fields as $field => $label)
+				{
+					if (is_array($label)) $label = $label['label'];
+					$labels[$field] = $label ? $label : $field;
+				}
+				fwrite($fp,$this->_csv_encode($labels,$fields,false)."\n");
+			}
+			return $fp;
+		}
+		
+		/**
+		 * CSV encode a single row, including some basic type conversation
+		 *
+		 * @param array $data
+		 * @param array $fields
+		 * @param boolean $use_type=true
+		 * @return string
+		 */
+		function _csv_encode($data,$fields,$use_type=true)
+		{
+			static $date_format,$time_format;
+			if (is_null($date_format))
+			{
+				$time_format = $date_format = $GLOBALS['egw_info']['user']['preferences']['common']['dateformat'];
+				$time_format .= ' '.($GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] == 12 ? 'h:ia' : 'H:i');
+			}
+			$out = array();
+			foreach($fields as $field => $label)
+			{
+				$value = (array)$data[$field];
+
+				if ($use_type && is_array($label) && in_array($label['type'],array('select-account','select-cat','date-time','date')))
+				{
+					foreach($value as $key => $val)
+					{
+						switch($label['type'])
+						{
+							case 'select-account':
+								if ($val) $value[$key] = $GLOBALS['egw']->common->grab_owner_name($val);
+								break;
+							case 'select-cat':
+								if ($val)
+								{
+									if (!is_object($GLOBALS['egw']->categories))
+									{
+										$GLOBALS['egw']->categories =& CreateObject('phpgwapi.categories');
+									}
+									$value[$key] = $GLOBALS['egw']->categories->id2name($val);
+								}
+								break;
+							case 'date-time':
+								if ($val) $value[$key] = date($time_format,$val);
+								break;
+							case 'date':
+								if ($val) $value[$key] = date($date_format,$val);
+								break;
+						}
+					}
+				}
+				$value = implode(', ',$value);
+
+				if (strpos($value,$this->separator) !== false || strpos($value,"\n") !== false || strpos($value,"\r") !== false)
+				{
+					$value = '"'.str_replace(array('\\','"'),array('\\\\','\\"'),$value).'"';
+				}
+				$out[] = $value;
+			}
+			$out = implode($this->separator,$out);
+			
+			if ($this->charset_out && $this->charset != $this->charset_out)
+			{
+				$out = $GLOBALS['egw']->translation->convert($out,$this->charset,$this->charset_out);
+			}
+			return $out;
+		}
+		
+		/**
+		 * Try to autodetect the fields from the first data-row and the app-name
+		 *
+		 * @param array $row0 first data-row
+		 * @param string $app
+		 */
+		function _autodetect_fields($row0,$app)
+		{
+			$fields = array_combine(array_keys($row0),array_keys($row0));
+			
+			foreach($fields as $name => $label)
+			{
+				// try to guess field-type from the fieldname
+				if (preg_match('/(modified|created|start|end)/',$name) && strpos($name,'by')===false && 
+					(!$row0[$name] || is_numeric($row0[$name])))	// only use for real timestamps
+				{
+					$fields[$name] = array('label' => $label,'type' => 'date-time');
+				}
+				elseif (preg_match('/(cat_id|category|cat)/',$name))
+				{
+					$fields[$name] = array('label' => $label,'type' => 'select-cat');
+				}
+				elseif (preg_match('/(owner|creator|modifier|assigned|by|coordinator|responsible)/',$name))
+				{
+					$fields[$name] = array('label' => $label,'type' => 'select-account');
+				}
+				elseif(preg_match('/(jpeg|photo)/',$name))
+				{
+					unset($fields[$name]);
+				}
+			}
+			if ($app)
+			{
+				include_once(EGW_API_INC.'/class.config.inc.php');
+				$config =& new config($app);
+				$config->read_repository();
+				
+				$customfields = isset($config->config_data['customfields']) ? $config->config_data['customfields'] : $config->config_data['custom_fields'];
+				if (is_array($customfields))
+				{
+					foreach($customfields as $name => $data)
+					{
+						$fields['#'.$name] = array(
+							'label' => $data['label'],
+							'type'  => $data['type'],
+						);
+					}
+				}
+			}
+			//_debug_array($fields);
+			return $fields;
+		}
 	}
diff --git a/etemplate/setup/etemplates.inc.php b/etemplate/setup/etemplates.inc.php
index 4b0ba4f1c2..bafc67eac3 100644
--- a/etemplate/setup/etemplates.inc.php
+++ b/etemplate/setup/etemplates.inc.php
@@ -2,7 +2,7 @@
 	/**
 	 * eGroupWare - eTemplates for Application etemplate
 	 * http://www.egroupware.org 
-	 * generated by soetemplate::dump4setup() 2007-05-25 20:26
+	 * generated by soetemplate::dump4setup() 2007-09-22 17:04
 	 *
 	 * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
 	 * @package etemplate
@@ -147,7 +147,7 @@ $templ_data[] = array('name' => 'etemplate.editor.values','template' => '','lang
 
 $templ_data[] = array('name' => 'etemplate.editor.widget','template' => '','lang' => '','group' => '0','version' => '1.0.1.005','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:4:{s:2:"h2";s:6:",!@msg";s:2:"h6";s:11:",!@grid_row";s:2:"h7";s:14:",!@grid_column";s:2:"c1";s:2:"th";}i:1;a:2:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:6:"select";s:4:"size";s:7:"Edit...";s:4:"name";s:9:"edit_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"delete and cut save the template!";}i:2;a:5:{s:4:"type";s:6:"select";s:4:"size";s:6:"Box...";s:4:"name";s:8:"box_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}i:3;a:5:{s:4:"type";s:6:"select";s:4:"size";s:6:"Row...";s:4:"name";s:8:"row_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}i:4;a:5:{s:4:"type";s:6:"select";s:4:"size";s:9:"Column...";s:4:"name";s:11:"column_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:4:"html";s:5:"label";s:4:"Name";s:4:"name";s:11:"java_script";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:4:"text";s:4:"name";s:8:"template";s:8:"readonly";s:1:"1";}i:3;a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"lang";s:8:"readonly";s:1:"1";}i:4;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"20";s:5:"label";s:7:"Version";s:4:"name";s:7:"version";s:4:"help";s:56:"increment version to not overwrite the existing template";}i:5;a:5:{s:4:"type";s:5:"label";s:4:"span";s:5:",gray";s:5:"label";s:4:"Path";s:7:"no_lang";s:1:"1";s:4:"name";s:4:"path";}}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,goto";s:5:"label";s:4:"Path";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:4:"path";s:7:"no_lang";s:1:"1";s:4:"name";s:4:"goto";s:4:"help";s:25:"switch to a parent widget";}i:2;a:6:{s:4:"type";s:4:"path";s:4:"size";s:1:" ";s:5:"label";s:1:" ";s:7:"no_lang";s:1:"1";s:4:"name";s:5:"goto2";s:4:"help";s:44:"switch to an other widgets of that container";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:4:"cell";s:4:"span";s:3:"all";s:4:"name";s:31:"etemplate.editor.widget.generic";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:6;a:2:{s:1:"A";a:8:{s:4:"type";s:8:"groupbox";s:4:"size";s:12:"4,horizontal";s:5:"label";s:19:"Grid row attributes";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:6:"Height";s:4:"name";s:16:"grid_row[height]";s:4:"help";s:29:"height of row (in % or pixel)";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:8:"Disabled";s:4:"name";s:18:"grid_row[disabled]";s:4:"help";s:88:"to disable: [! = not][=] eg: \'!@data\' disables if content of data is empty";}i:3;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:5:"Class";s:4:"name";s:15:"grid_row[class]";s:4:"help";s:100:"CSS-class name for this row, preset: \'th\' = header, \'row\' = alternating row, \'row_off\'+\'row_on\' rows";}i:4;a:4:{s:4:"type";s:6:"select";s:5:"label";s:6:"Valign";s:4:"name";s:16:"grid_row[valign]";s:4:"help";s:25:"vertical alignment of row";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:7;a:2:{s:1:"A";a:6:{s:4:"type";s:8:"groupbox";s:4:"size";s:12:"2,horizontal";s:5:"label";s:22:"Grid column attributes";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:5:"Width";s:4:"name";s:18:"grid_column[width]";s:4:"help";s:31:"width of column (in % or pixel)";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:8:"Disabled";s:4:"name";s:21:"grid_column[disabled]";s:4:"help";s:88:"to disable: [! = not][=] eg: \'!@data\' disables if content of data is empty";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:8;a:2:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";s:4:"span";s:3:"all";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:4:"save";s:4:"help";s:66:"saves the template with given version number and closes the window";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:5:"apply";s:4:"help";s:56:"applies the changes to the given version of the template";}i:3;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:6:"cancel";s:4:"help";s:44:"closes the window without saving the changes";s:7:"onclick";s:15:"window.close();";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:8;s:4:"cols";i:2;}}','size' => '','style' => '','modified' => '1109104064',);
 
-$templ_data[] = array('name' => 'etemplate.editor.widget','template' => '','lang' => '','group' => '0','version' => '1.0.1.006','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:4:{s:2:"h2";s:6:",!@msg";s:2:"h6";s:11:",!@grid_row";s:2:"h7";s:14:",!@grid_column";s:2:"c1";s:2:"th";}i:1;a:2:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:6:"select";s:4:"size";s:7:"Edit...";s:4:"name";s:9:"edit_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"delete and cut save the template!";}i:2;a:5:{s:4:"type";s:6:"select";s:4:"size";s:6:"Box...";s:4:"name";s:8:"box_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}i:3;a:5:{s:4:"type";s:6:"select";s:4:"size";s:6:"Row...";s:4:"name";s:8:"row_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}i:4;a:5:{s:4:"type";s:6:"select";s:4:"size";s:9:"Column...";s:4:"name";s:11:"column_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:4:"html";s:5:"label";s:4:"Name";s:4:"name";s:11:"java_script";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:4:"text";s:4:"name";s:8:"template";s:8:"readonly";s:1:"1";}i:3;a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"lang";s:8:"readonly";s:1:"1";}i:4;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"20";s:5:"label";s:7:"Version";s:4:"name";s:7:"version";s:4:"help";s:56:"increment version to not overwrite the existing template";}i:5;a:5:{s:4:"type";s:5:"label";s:4:"span";s:5:",gray";s:5:"label";s:4:"Path";s:7:"no_lang";s:1:"1";s:4:"name";s:4:"path";}}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,goto";s:5:"label";s:4:"Path";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:4:"path";s:7:"no_lang";s:1:"1";s:4:"name";s:4:"goto";s:4:"help";s:25:"switch to a parent widget";}i:2;a:6:{s:4:"type";s:4:"path";s:4:"size";s:1:" ";s:5:"label";s:1:" ";s:7:"no_lang";s:1:"1";s:4:"name";s:5:"goto2";s:4:"help";s:44:"switch to an other widgets of that container";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:4:"cell";s:4:"span";s:3:"all";s:4:"name";s:31:"etemplate.editor.widget.generic";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:6;a:2:{s:1:"A";a:8:{s:4:"type";s:8:"groupbox";s:4:"size";s:12:"4,horizontal";s:5:"label";s:19:"Grid row attributes";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:6:"Height";s:4:"name";s:16:"grid_row[height]";s:4:"help";s:29:"height of row (in % or pixel)";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:8:"Disabled";s:4:"name";s:18:"grid_row[disabled]";s:4:"help";s:88:"to disable: [! = not][=] eg: \'!@data\' disables if content of data is empty";}i:3;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:5:"Class";s:4:"name";s:15:"grid_row[class]";s:4:"help";s:100:"CSS-class name for this row, preset: \'th\' = header, \'row\' = alternating row, \'row_off\'+\'row_on\' rows";}i:4;a:4:{s:4:"type";s:6:"select";s:5:"label";s:6:"Valign";s:4:"name";s:16:"grid_row[valign]";s:4:"help";s:25:"vertical alignment of row";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:7;a:2:{s:1:"A";a:6:{s:4:"type";s:8:"groupbox";s:4:"size";s:12:"2,horizontal";s:5:"label";s:22:"Grid column attributes";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:5:"Width";s:4:"name";s:18:"grid_column[width]";s:4:"help";s:31:"width of column (in % or pixel)";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:8:"Disabled";s:4:"name";s:21:"grid_column[disabled]";s:4:"help";s:88:"to disable: [! = not][=] eg: \'!@data\' disables if content of data is empty";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:8;a:2:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";s:4:"span";s:3:"all";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:4:"save";s:4:"help";s:66:"saves the template with given version number and closes the window";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:5:"apply";s:4:"help";s:56:"applies the changes to the given version of the template";}i:3;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:6:"cancel";s:4:"help";s:44:"closes the window without saving the changes";s:7:"onclick";s:15:"window.close();";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:8;s:4:"cols";i:2;}}','size' => '','style' => '','modified' => '1131206619',);
+$templ_data[] = array('name' => 'etemplate.editor.widget','template' => '','lang' => '','group' => '0','version' => '1.0.1.006','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:4:{s:2:"h2";s:6:",!@msg";s:2:"h6";s:11:",!@grid_row";s:2:"h7";s:14:",!@grid_column";s:2:"c1";s:2:"th";}i:1;a:2:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:6:"select";s:4:"size";s:7:"Edit...";s:4:"name";s:9:"edit_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"delete and cut save the template!";}i:2;a:5:{s:4:"type";s:6:"select";s:4:"size";s:6:"Box...";s:4:"name";s:8:"box_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}i:3;a:5:{s:4:"type";s:6:"select";s:4:"size";s:6:"Row...";s:4:"name";s:8:"row_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}i:4;a:5:{s:4:"type";s:6:"select";s:4:"size";s:9:"Column...";s:4:"name";s:11:"column_menu";s:8:"onchange";s:1:"1";s:4:"help";s:33:"all operations save the template!";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:4:"html";s:5:"label";s:4:"Name";s:4:"name";s:11:"java_script";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:4:"text";s:4:"name";s:8:"template";s:8:"readonly";s:1:"1";}i:3;a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"lang";s:8:"readonly";s:1:"1";}i:4;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"20";s:5:"label";s:7:"Version";s:4:"name";s:7:"version";s:4:"help";s:56:"increment version to not overwrite the existing template";}i:5;a:5:{s:4:"type";s:5:"label";s:4:"span";s:5:",gray";s:5:"label";s:4:"Path";s:7:"no_lang";s:1:"1";s:4:"name";s:4:"path";}}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,goto";s:5:"label";s:4:"Path";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:4:"path";s:7:"no_lang";s:1:"1";s:4:"name";s:4:"goto";s:4:"help";s:25:"switch to a parent widget";}i:2;a:6:{s:4:"type";s:4:"path";s:4:"size";s:1:" ";s:5:"label";s:1:" ";s:7:"no_lang";s:1:"1";s:4:"name";s:5:"goto2";s:4:"help";s:44:"switch to an other widgets of that container";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:4:"cell";s:4:"span";s:3:"all";s:4:"name";s:31:"etemplate.editor.widget.generic";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:6;a:2:{s:1:"A";a:9:{s:4:"type";s:8:"groupbox";s:4:"size";s:12:"5,horizontal";s:5:"label";s:19:"Grid row attributes";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:6:"Height";s:4:"name";s:16:"grid_row[height]";s:4:"help";s:29:"height of row (in % or pixel)";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:8:"Disabled";s:4:"name";s:18:"grid_row[disabled]";s:4:"help";s:88:"to disable: [! = not][=] eg: \'!@data\' disables if content of data is empty";}i:3;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:5:"Class";s:4:"name";s:15:"grid_row[class]";s:4:"help";s:100:"CSS-class name for this row, preset: \'th\' = header, \'row\' = alternating row, \'row_off\'+\'row_on\' rows";}i:4;a:4:{s:4:"type";s:6:"select";s:5:"label";s:6:"Valign";s:4:"name";s:16:"grid_row[valign]";s:4:"help";s:25:"vertical alignment of row";}i:5;a:1:{s:4:"type";s:5:"label";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:7;a:2:{s:1:"A";a:6:{s:4:"type";s:8:"groupbox";s:4:"size";s:12:"2,horizontal";s:5:"label";s:22:"Grid column attributes";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:5:"Width";s:4:"name";s:18:"grid_column[width]";s:4:"help";s:31:"width of column (in % or pixel)";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:5:"label";s:8:"Disabled";s:4:"name";s:21:"grid_column[disabled]";s:4:"help";s:88:"to disable: [! = not][=] eg: \'!@data\' disables if content of data is empty";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:8;a:2:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";s:4:"span";s:3:"all";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:4:"save";s:4:"help";s:66:"saves the template with given version number and closes the window";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:5:"apply";s:4:"help";s:56:"applies the changes to the given version of the template";}i:3;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:6:"cancel";s:4:"help";s:44:"closes the window without saving the changes";s:7:"onclick";s:15:"window.close();";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:8;s:4:"cols";i:2;}}','size' => '','style' => '','modified' => '1131206619',);
 
 $templ_data[] = array('name' => 'etemplate.editor.widget.ajax_select','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:10:{s:2:"c1";s:3:"row";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c5";s:3:"row";s:2:"c4";s:3:"row";s:2:"h4";s:12:",@type=label";s:2:"h7";s:12:",@type=label";s:2:"c7";s:3:"row";s:2:"c8";s:3:"row";s:2:"h8";s:14:",!@type=button";}i:1;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,type";s:5:"label";s:4:"Type";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:4:"type";s:8:"onchange";s:1:"1";s:4:"help";s:57:"type of the field (select Label if field should be empty)";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"align";s:6:"center";}s:1:"D";a:4:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:4:"name";s:4:"size";s:4:"help";s:187:"Label:[bold][italic] Text:[len][,max] Numbers:[min][,[max][,len]] T.area:[rows][,cols] Radiob.:value H.Rule:[width] Templ.:[IndexInContent] Select:[multiselect] Date:[values: eg. \'Y-m-d\']";}s:1:"E";a:4:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,span";s:5:"label";s:11:"Span, Class";s:5:"align";s:6:"center";}s:1:"F";a:4:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:4:"name";s:4:"span";s:4:"help";s:111:"number of colums the field/cell should span or \'all\' for the remaining columns, CSS-class name (for the TD tag)";}}i:2;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,label";s:5:"label";s:5:"Label";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:5:"label";s:4:"help";s:118:"displayed in front of input or input is inserted for a \'%s\' in the label (label of the Submitbutton or Image-filename)";}s:1:"C";a:6:{s:4:"type";s:8:"checkbox";s:4:"span";s:1:"2";s:5:"label";s:16:"%s NoTranslation";s:5:"align";s:6:"center";s:4:"name";s:7:"no_lang";s:4:"help";s:82:"select if content of field should not be translated (label gets always translated)";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:3:{s:4:"type";s:5:"label";s:5:"label";s:5:"Align";s:5:"align";s:6:"center";}s:1:"F";a:3:{s:4:"type";s:6:"select";s:4:"name";s:5:"align";s:4:"help";s:48:"alignment of label and input-field in table-cell";}}i:3;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,name";s:5:"label";s:4:"Name";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:4:"help";s:78:"index/name of returned content (name of the Template, Link / Method for Image)";}s:1:"C";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";s:4:"span";s:1:"4";i:1;a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:9:"%s needed";s:5:"align";s:6:"center";s:4:"name";s:6:"needed";s:4:"help";s:39:"check if field has to be filled by user";}i:2;a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:11:"%s readonly";s:5:"align";s:6:"center";s:4:"name";s:8:"readonly";s:4:"help";s:94:"check if content should only be displayed but not altered (the content is not send back then!)";}i:3;a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:11:"%s disabled";s:5:"align";s:6:"center";s:4:"name";s:8:"disabled";s:4:"help";s:96:"if field is disabled an empty table-cell is displayed, for (temporal) removement of a field/cell";}}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:4;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,blur";s:5:"label";s:8:"blurText";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"blur";s:4:"help";s:76:"this text gets displayed if the input-field is empty and has no focus (blur)";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:4:"span";s:1:"4";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:3:"int";s:5:"label";s:8:"Tabindex";s:4:"span";s:1:"2";s:4:"name";s:8:"tabindex";s:4:"help";s:47:"Order to navigating by tab key through the form";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:3:"1,1";s:4:"name";s:9:"accesskey";s:4:"help";s:67:"Accesskeys can also be specified with an & in the label (eg. &Name)";s:5:"label";s:9:"Accesskey";}}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:5;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,help";s:5:"label";s:4:"Help";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"71";s:4:"span";s:3:"all";s:4:"name";s:4:"help";s:4:"help";s:60:"displayed in statusline of browser if input-field gets focus";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:6;a:6:{s:1:"A";a:7:{s:4:"type";s:4:"grid";s:4:"span";s:3:"all";s:5:"label";s:19:"AJAX Select options";s:7:"options";a:1:{i:0;s:1:"1";}s:4:"data";a:3:{i:0;a:0:{}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"data";a:1:{i:0;a:0:{}}s:5:"label";s:11:"Data Source";}s:1:"B";a:2:{s:4:"type";s:4:"text";s:4:"name";s:10:"options[0]";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Title Source";}s:1:"D";a:2:{s:4:"type";s:4:"text";s:4:"name";s:10:"options[1]";}}i:2;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"ID Field";}s:1:"B";a:2:{s:4:"type";s:4:"text";s:4:"name";s:10:"options[2]";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:19:"Result row template";}s:1:"D";a:2:{s:4:"type";s:4:"text";s:4:"name";s:10:"options[3]";}}}s:4:"rows";i:2;s:4:"cols";i:4;}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:7;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"onChange";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:6:"select";s:4:"name";s:13:"onchange_type";s:4:"help";s:65:"Should the form be submitted or any custom javascript be executed";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"50";s:4:"span";s:3:"all";s:4:"name";s:8:"onchange";s:4:"help";s:30:"custom javascript for onChange";}s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:8;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:"onclick";s:5:"label";s:7:"onClick";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:6:"select";s:4:"name";s:12:"onclick_type";s:4:"help";s:43:"confirmation necesary or custom java-script";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"53";s:4:"span";s:3:"all";s:4:"name";s:7:"onclick";s:4:"help";s:67:"confirmation message or custom javascript (returning true or false)";}s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:8;s:4:"cols";i:6;}}','size' => '','style' => '','modified' => '1163010571',);
 
@@ -161,6 +161,8 @@ $templ_data[] = array('name' => 'etemplate.editor.widget.generic','template' =>
 
 $templ_data[] = array('name' => 'etemplate.editor.widget.grid','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:4:{s:2:"c1";s:3:"row";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";}i:1;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,type";s:5:"label";s:4:"Type";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:4:"type";s:8:"onchange";s:1:"1";s:4:"help";s:57:"type of the field (select Label if field should be empty)";}s:1:"C";a:4:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,align";s:5:"label";s:5:"Align";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:6:"select";s:4:"name";s:5:"align";s:4:"help";s:48:"alignment of label and input-field in table-cell";}s:1:"E";a:4:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,span";s:5:"label";s:4:"Span";s:5:"align";s:5:"right";}s:1:"F";a:4:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:4:"name";s:4:"span";s:4:"help";s:111:"number of colums the field/cell should span or \'all\' for the remaining columns, CSS-class name (for the TD tag)";}}i:2;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,name";s:5:"label";s:4:"Name";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:4:"help";s:78:"index/name of returned content (name of the Template, Link / Method for Image)";}s:1:"C";a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:11:"%s disabled";s:4:"name";s:8:"disabled";s:4:"help";s:96:"if field is disabled an empty table-cell is displayed, for (temporal) removement of a field/cell";s:4:"span";s:1:"2";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:4:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[3]";s:5:"label";s:5:"Class";s:5:"align";s:5:"right";}s:1:"F";a:4:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:4:"name";s:10:"options[3]";s:4:"help";s:27:"CSS class for the table-tag";}}i:3;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[0]";s:5:"label";s:5:"Width";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:4:"name";s:10:"options[0]";s:4:"help";s:71:" Width of the table in % or pixels for the table-tag and (optional) div";}s:1:"C";a:4:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[1]";s:5:"label";s:6:"Height";s:5:"align";s:5:"right";}s:1:"D";a:4:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:4:"name";s:10:"options[1]";s:4:"help";s:72:" Height of the table in % or pixels for the table-tag and (optional) div";}s:1:"E";a:4:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[6]";s:5:"label";s:8:"Overflow";s:5:"align";s:5:"right";}s:1:"F";a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:10:"options[6]";s:4:"help";s:96:"what happens with overflowing content: visible (default), hidden, scroll, auto (browser decides)";}}i:4;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[4]";s:5:"label";s:7:"Spacing";}s:1:"B";a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:10:"options[4]";s:4:"help";s:29:"Cellspacing for the table-tag";s:4:"size";s:14:"Default,0,10,1";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[5]";s:5:"label";s:7:"Padding";}s:1:"D";a:4:{s:4:"type";s:13:"select-number";s:4:"size";s:14:"Default,0,10,1";s:4:"name";s:10:"options[5]";s:4:"help";s:29:"Cellpadding for the table-tag";}s:1:"E";a:4:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,options[2]";s:5:"label";s:6:"Border";s:5:"align";s:5:"right";}s:1:"F";a:4:{s:4:"type";s:13:"select-number";s:4:"size";s:14:"Default,0,10,1";s:4:"name";s:10:"options[2]";s:4:"help";s:39:"Border-line-thickness for the table-tag";}}}s:4:"rows";i:4;s:4:"cols";i:6;}}','size' => '','style' => '','modified' => '1116599469',);
 
+$templ_data[] = array('name' => 'etemplate.editor.widget.infolog','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:7:{s:2:"c1";s:3:"row";s:2:"c4";s:3:"row";s:2:"c5";s:3:"row";s:2:"c2";s:3:"row";s:2:"c6";s:3:"row";s:2:"h6";s:14:",!@type=button";s:2:"c3";s:3:"row";}i:1;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,type";s:5:"label";s:4:"Type";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:4:"type";s:8:"onchange";s:1:"1";s:4:"help";s:57:"type of the field (select Label if field should be empty)";}s:1:"C";a:6:{s:4:"type";s:14:"infolog-fields";s:4:"name";s:10:"options[0]";s:4:"help";s:21:"Contact field to show";s:4:"span";s:3:"all";s:5:"label";s:5:"Field";s:7:"options";a:0:{}}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Compare";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:10:"options[1]";s:4:"help";s:69:"show a X if content equals this compare value, otherwise show nothing";}s:1:"C";a:6:{s:4:"type";s:4:"text";s:4:"size";s:2:"40";s:4:"span";s:3:"all";s:5:"label";s:12:"Alternatives";s:4:"name";s:10:"options[2]";s:4:"help";s:77:"colon (:) separated list of field names to use if value is empty or to sum up";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Contactfield";}s:1:"B";a:2:{s:4:"type";s:14:"contact-fields";s:4:"name";s:10:"options[3]";}s:1:"C";a:5:{s:4:"type";s:4:"text";s:4:"span";s:1:"2";s:5:"label";s:19:"Regular expression ";s:4:"name";s:10:"options[4]";s:4:"help";s:31:"first argument for preg_replace";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:5:{s:4:"type";s:4:"text";s:4:"span";s:1:"2";s:5:"label";s:11:"Replacement";s:4:"name";s:10:"options[5]";s:4:"help";s:33:"second parameter for preg_replace";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:4;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,label";s:5:"label";s:5:"Label";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:5:"label";s:4:"help";s:118:"displayed in front of input or input is inserted for a \'%s\' in the label (label of the Submitbutton or Image-filename)";}s:1:"C";a:6:{s:4:"type";s:4:"text";s:4:"size";s:2:"10";s:4:"name";s:4:"span";s:4:"help";s:111:"number of colums the field/cell should span or \'all\' for the remaining columns, CSS-class name (for the TD tag)";s:5:"label";s:11:"Span, Class";s:4:"span";s:1:"2";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:3:{s:4:"type";s:5:"label";s:5:"label";s:5:"Align";s:5:"align";s:6:"center";}s:1:"F";a:3:{s:4:"type";s:6:"select";s:4:"name";s:5:"align";s:4:"help";s:48:"alignment of label and input-field in table-cell";}}i:5;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,name";s:5:"label";s:4:"Name";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:4:"help";s:78:"index/name of returned content (name of the Template, Link / Method for Image)";}s:1:"C";a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:11:"%s disabled";s:4:"name";s:8:"disabled";s:4:"help";s:96:"if field is disabled an empty table-cell is displayed, for (temporal) removement of a field/cell";s:4:"span";s:3:"all";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:6;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:"onclick";s:5:"label";s:7:"onClick";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:6:"select";s:4:"name";s:12:"onclick_type";s:4:"help";s:43:"confirmation necesary or custom java-script";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:2:"53";s:4:"span";s:3:"all";s:4:"name";s:7:"onclick";s:4:"help";s:67:"confirmation message or custom javascript (returning true or false)";}s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:6;}}','size' => '','style' => '','modified' => '1187334168',);
+
 $templ_data[] = array('name' => 'etemplate.groupbox.test','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"2";s:5:"label";s:18:"Selection grouping";i:1;a:4:{s:4:"type";s:5:"radio";s:4:"size";s:1:"1";s:5:"label";s:18:"%s selection #1 or";s:4:"name";s:9:"selection";}i:2;a:4:{s:4:"type";s:5:"radio";s:4:"size";s:1:"2";s:5:"label";s:15:"%s selection #2";s:4:"name";s:9:"selection";}}}}s:4:"rows";i:1;s:4:"cols";i:1;}}','size' => '','style' => '','modified' => '1107699792',);
 
 $templ_data[] = array('name' => 'etemplate.groupbox.test-template','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"1";s:5:"label";s:8:"Template";i:1;a:2:{s:4:"type";s:8:"template";s:4:"name";s:25:"etemplate.tab_widget.test";}}}}s:4:"rows";i:1;s:4:"cols";i:1;}}','size' => '','style' => '','modified' => '1107701431',);
@@ -214,6 +216,8 @@ $templ_data[] = array('name' => 'etemplate.nextmatch_widget.nm_row','template' =
 
 $templ_data[] = array('name' => 'etemplate.nextmatch_widget.nm_row','template' => '','lang' => '','group' => '0','version' => '1.3.002','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:10:{s:1:"A";s:2:"1%";s:1:"B";s:2:"1%";s:1:"D";s:3:"30%";s:1:"G";s:2:"5%";s:1:"I";s:2:"1%";s:2:"c1";s:2:"th";s:1:"C";s:3:"30%";s:1:"F";s:3:"15%";s:1:"J";s:2:"1%";s:2:"h1";s:20:",@no_columnselection";}i:1;a:11:{s:1:"A";a:5:{s:4:"type";s:6:"button";s:4:"size";s:24:"first.gif,first-grey.gif";s:5:"label";s:5:"First";s:4:"name";s:5:"first";s:4:"help";s:21:"go to the first entry";}s:1:"B";a:5:{s:4:"type";s:6:"button";s:4:"size";s:22:"left.gif,left-grey.gif";s:5:"label";s:4:"Left";s:4:"name";s:4:"left";s:4:"help";s:34:"go to the previous page of entries";}s:1:"C";a:7:{s:4:"type";s:10:"select-cat";s:4:"size";s:19:"-1,,,$cont[cat_app]";s:5:"label";s:8:"Category";s:4:"name";s:6:"cat_id";s:8:"onchange";i:1;s:4:"help";s:17:"select a Category";s:5:"align";s:6:"center";}s:1:"D";a:6:{s:4:"type";s:6:"select";s:5:"label";s:13:"@filter_label";s:5:"align";s:6:"center";s:4:"name";s:6:"filter";s:8:"onchange";s:16:"@filter_onchange";s:4:"help";s:12:"@filter_help";}s:1:"E";a:6:{s:4:"type";s:6:"select";s:5:"label";s:14:"@filter2_label";s:5:"align";s:6:"center";s:4:"name";s:7:"filter2";s:8:"onchange";s:17:"@filter2_onchange";s:4:"help";s:13:"@filter2_help";}s:1:"F";a:6:{s:4:"type";s:4:"text";s:5:"align";s:5:"right";s:4:"name";s:6:"search";s:8:"onchange";i:1;s:4:"help";s:28:"a pattern to be searched for";s:4:"size";s:2:"12";}s:1:"G";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Search";s:4:"name";s:12:"start_search";s:4:"help";s:19:"to start the search";}s:1:"H";a:6:{s:4:"type";s:6:"select";s:4:"name";s:8:"num_rows";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;s:4:"help";s:37:"How many entries should the list show";s:4:"span";s:12:",nm_num_rows";}s:1:"I";a:5:{s:4:"type";s:6:"button";s:4:"size";s:24:"right.gif,right-grey.gif";s:5:"label";s:5:"Right";s:4:"name";s:5:"right";s:4:"help";s:30:"go to the next page of entries";}s:1:"J";a:5:{s:4:"type";s:6:"button";s:4:"size";s:22:"last.gif,last-grey.gif";s:5:"label";s:4:"Last";s:4:"name";s:4:"last";s:4:"help";s:20:"go to the last entry";}s:1:"K";a:5:{s:4:"type";s:3:"box";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"button";s:4:"size";s:10:"selectcols";s:5:"label";s:14:"Select columns";s:4:"help";s:41:"Select the columns to display in the list";s:7:"onclick";s:174:"document.getElementById(form::name(\'colselection\')).style.display=document.getElementById(form::name(\'colselection\')).style.display==\'block\' ? \'none\' : \'block\'; return false;";}i:2;a:7:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"select";s:4:"size";s:3:"012";s:4:"name";s:10:"selectcols";s:4:"help";s:41:"Select the columns to display in the list";s:7:"no_lang";s:1:"1";}i:2;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:8:"savecols";i:1;a:1:{s:4:"type";s:4:"hbox";}}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:6:"cancel";s:5:"label";s:6:"Cancel";s:7:"onclick";s:87:"document.getElementById(form::name(\'colselection\')).style.display=\'none\'; return false;";}i:3;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:13:"default_prefs";s:5:"label";s:10:"as default";s:4:"help";s:58:"Save selected columns as default preference for all users.";}}s:4:"span";s:13:",colselection";s:4:"name";s:12:"colselection";s:5:"label";s:14:"Select columns";}s:4:"span";s:11:",selectcols";}}}s:4:"rows";i:1;s:4:"cols";i:11;s:4:"size";s:11:"100%,,,,0,3";s:4:"span";s:17:",nextmatch_header";s:7:"options";a:3:{i:0;s:4:"100%";i:4;s:1:"0";i:5;s:1:"3";}}}','size' => '100%,,,,0,3','style' => '','modified' => '1113294054',);
 
+$templ_data[] = array('name' => 'etemplate.nextmatch_widget.nm_row','template' => '','lang' => '','group' => '0','version' => '1.5.001','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:11:{s:1:"A";s:2:"1%";s:1:"B";s:2:"1%";s:1:"D";s:3:"30%";s:1:"G";s:2:"5%";s:1:"I";s:2:"1%";s:2:"c1";s:2:"th";s:1:"C";s:3:"30%";s:1:"F";s:3:"15%";s:1:"J";s:2:"1%";s:1:"K";s:20:",@no_columnselection";s:1:"L";s:15:",@no_csv_export";}i:1;a:12:{s:1:"A";a:5:{s:4:"type";s:6:"button";s:4:"size";s:24:"first.gif,first-grey.gif";s:5:"label";s:5:"First";s:4:"name";s:5:"first";s:4:"help";s:21:"go to the first entry";}s:1:"B";a:5:{s:4:"type";s:6:"button";s:4:"size";s:22:"left.gif,left-grey.gif";s:5:"label";s:4:"Left";s:4:"name";s:4:"left";s:4:"help";s:34:"go to the previous page of entries";}s:1:"C";a:7:{s:4:"type";s:10:"select-cat";s:4:"size";s:19:"-1,,,$cont[cat_app]";s:5:"label";s:8:"Category";s:4:"name";s:6:"cat_id";s:8:"onchange";i:1;s:4:"help";s:17:"select a Category";s:5:"align";s:6:"center";}s:1:"D";a:6:{s:4:"type";s:6:"select";s:5:"label";s:13:"@filter_label";s:5:"align";s:6:"center";s:4:"name";s:6:"filter";s:8:"onchange";s:16:"@filter_onchange";s:4:"help";s:12:"@filter_help";}s:1:"E";a:6:{s:4:"type";s:6:"select";s:5:"label";s:14:"@filter2_label";s:5:"align";s:6:"center";s:4:"name";s:7:"filter2";s:8:"onchange";s:17:"@filter2_onchange";s:4:"help";s:13:"@filter2_help";}s:1:"F";a:6:{s:4:"type";s:4:"text";s:5:"align";s:5:"right";s:4:"name";s:6:"search";s:8:"onchange";i:1;s:4:"help";s:28:"a pattern to be searched for";s:4:"size";s:2:"12";}s:1:"G";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Search";s:4:"name";s:12:"start_search";s:4:"help";s:19:"to start the search";}s:1:"H";a:6:{s:4:"type";s:6:"select";s:4:"name";s:8:"num_rows";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;s:4:"help";s:37:"How many entries should the list show";s:4:"span";s:12:",nm_num_rows";}s:1:"I";a:5:{s:4:"type";s:6:"button";s:4:"size";s:24:"right.gif,right-grey.gif";s:5:"label";s:5:"Right";s:4:"name";s:5:"right";s:4:"help";s:30:"go to the next page of entries";}s:1:"J";a:5:{s:4:"type";s:6:"button";s:4:"size";s:22:"last.gif,last-grey.gif";s:5:"label";s:4:"Last";s:4:"name";s:4:"last";s:4:"help";s:20:"go to the last entry";}s:1:"K";a:5:{s:4:"type";s:3:"box";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"button";s:4:"size";s:10:"selectcols";s:5:"label";s:14:"Select columns";s:4:"help";s:41:"Select the columns to display in the list";s:7:"onclick";s:174:"document.getElementById(form::name(\'colselection\')).style.display=document.getElementById(form::name(\'colselection\')).style.display==\'block\' ? \'none\' : \'block\'; return false;";}i:2;a:7:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"select";s:4:"size";s:3:"012";s:4:"name";s:10:"selectcols";s:4:"help";s:41:"Select the columns to display in the list";s:7:"no_lang";s:1:"1";}i:2;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:8:"savecols";i:1;a:1:{s:4:"type";s:4:"hbox";}}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:6:"cancel";s:5:"label";s:6:"Cancel";s:7:"onclick";s:87:"document.getElementById(form::name(\'colselection\')).style.display=\'none\'; return false;";}i:3;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:13:"default_prefs";s:5:"label";s:10:"as default";s:4:"help";s:58:"Save selected columns as default preference for all users.";}}s:4:"span";s:13:",colselection";s:4:"name";s:12:"colselection";s:5:"label";s:14:"Select columns";}s:4:"span";s:11:",selectcols";}s:1:"L";a:4:{s:4:"type";s:6:"button";s:4:"name";s:6:"export";s:4:"size";s:8:"filesave";s:5:"label";s:10:"CSV Export";}}}s:4:"rows";i:1;s:4:"cols";i:12;s:4:"size";s:11:"100%,,,,0,3";s:4:"span";s:17:",nextmatch_header";s:7:"options";a:3:{i:0;s:4:"100%";i:4;s:1:"0";i:5;s:1:"3";}}}','size' => '100%,,,,0,3','style' => '','modified' => '1113294054',);
+
 $templ_data[] = array('name' => 'etemplate.popup.manual','template' => '','lang' => '','group' => '0','version' => '1.2','data' => 'a:1:{i:0;a:5:{s:4:"type";s:6:"manual";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"span";s:20:",popupManual noPrint";}}','size' => '','style' => '.popupManual { position: absolute; right: 27px; top: 24px; }','modified' => '1131553453',);
 
 $templ_data[] = array('name' => 'etemplate.stack-test','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:4:"deck";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:5:"label";s:5:"label";s:10:"Hallo Ralf";s:4:"name";s:4:"ralf";}i:2;a:3:{s:4:"type";s:5:"label";s:5:"label";s:10:"Hallo Welt";s:4:"name";s:4:"welt";}}}}s:4:"rows";i:1;s:4:"cols";i:1;}}','size' => '','style' => '','modified' => '1047754314',);
@@ -259,6 +263,8 @@ $templ_data[] = array('name' => 'etemplate.test.grid-export','template' => '','l
 
 $templ_data[] = array('name' => 'etemplate.test.Ymd','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:4:"text";s:5:"label";s:19:"Date YYYYmmddHHiiss";s:4:"name";s:4:"date";}}i:2;a:1:{s:1:"A";a:5:{s:4:"type";s:4:"date";s:4:"size";s:5:"YmdHi";s:5:"label";s:4:"Date";s:4:"name";s:4:"date";s:8:"readonly";s:1:"1";}}i:3;a:1:{s:1:"A";a:5:{s:4:"type";s:13:"date-timeonly";s:4:"size";s:5:"YmdHi";s:5:"label";s:4:"Time";s:4:"name";s:4:"date";s:8:"readonly";s:1:"1";}}}s:4:"rows";i:3;s:4:"cols";i:1;}}','size' => '','style' => '','modified' => '1179320861',);
 
+$templ_data[] = array('name' => 'etemplate.tree.test','template' => '','lang' => '','group' => '0','version' => '1','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:8:"tree-cat";s:4:"name";s:4:"tree";s:7:"onclick";s:9:"alert(id)";}}}s:4:"rows";i:1;s:4:"cols";i:1;}}','size' => '','style' => '','modified' => '1185018372',);
+
 $templ_data[] = array('name' => 'etemplate.validation-test','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:4:"text";s:4:"size";s:15:"10,10,/^[A-Z]+/";s:5:"label";s:52:"Text (<= 10 chars, has to start with capital letter)";s:4:"name";s:4:"text";}}i:2;a:1:{s:1:"A";a:5:{s:4:"type";s:3:"int";s:4:"size";s:5:"-15,5";s:5:"label";s:23:"Integer (-15 <= x <= 5)";s:4:"name";s:7:"integer";s:6:"needed";s:1:"1";}}i:3;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"float";s:4:"size";s:8:"-1.5,3.5";s:5:"label";s:32:"Floatingpoint (-1.5 <= x <= 3.5)";s:4:"name";s:5:"float";}}i:4;a:1:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:4:"save";}i:2;a:3:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:6:"cancel";}}}}s:4:"rows";i:4;s:4:"cols";i:1;s:4:"size";s:8:",,0,,0,0";}}','size' => ',,0,,0,0','style' => '','modified' => '1081128620',);
 
 $templ_data[] = array('name' => 'etemplate.vbox.test','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:7:"row,top";s:2:"c2";s:3:"row";}i:1;a:3:{s:1:"A";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";s:4:"span";s:4:"2,th";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Hallo";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Ralf";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:2:"C1";}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:2:"A2";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:2:"B2";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:2:"C2";}}}s:4:"rows";i:2;s:4:"cols";i:3;s:4:"size";s:3:",,1";}}','size' => ',,1','style' => '','modified' => '1034420647',);
diff --git a/etemplate/templates/default/nextmatch_widget.xet b/etemplate/templates/default/nextmatch_widget.xet
index 8d79fa72ee..f96f9b5440 100644
--- a/etemplate/templates/default/nextmatch_widget.xet
+++ b/etemplate/templates/default/nextmatch_widget.xet
@@ -1,7 +1,7 @@
 
 
 
-