history log widget "knows" now about custom fields and bo_tracking optionally initialises them too

This commit is contained in:
Ralf Becker 2011-04-19 15:00:49 +00:00
parent 33bbd3465d
commit 7705b25ece
2 changed files with 38 additions and 5 deletions

View File

@ -173,11 +173,18 @@ abstract class bo_tracking
/** /**
* Constructor * Constructor
* *
* @param string $cf_app=null if set, custom field names get added to $field2history
* @return bo_tracking * @return bo_tracking
*/ */
function __construct() function __construct($cf_app = null)
{ {
if ($cf_app)
{
foreach(config::get_customfields($cf_app, true) as $cf_name => $cf_data)
{
$this->field2history['#'.$cf_name] = '#'.$cf_name;
}
}
} }
function bo_tracking() function bo_tracking()

View File

@ -6,7 +6,7 @@
* @package etemplate * @package etemplate
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @author RalfBecker-At-outdoor-training.de * @author RalfBecker-At-outdoor-training.de
* @copyright 2006 by RalfBecker-At-outdoor-training.de * @copyright 2006-11 by RalfBecker-At-outdoor-training.de
* @license GPL - GNU General Public License * @license GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -19,6 +19,7 @@
* - 'app' string app-name, defaults to $GLOBALS['egw_info']['flags']['currentapp'] * - 'app' string app-name, defaults to $GLOBALS['egw_info']['flags']['currentapp']
* - 'status-widgets' array with status-values as key and widget names or array with select-options as value, * - 'status-widgets' array with status-values as key and widget names or array with select-options as value,
* all not set stati are displayed via a label-widget - just as text * all not set stati are displayed via a label-widget - just as text
* widget types for custom fields do NOT need to be added, they are automatically detected!
* You can set $sel_options['status'] to translate the status-values to meaningful labels. * You can set $sel_options['status'] to translate the status-values to meaningful labels.
* If status is already used for a field, you can also set options to an other name, eg. 'labels' or 'fields' * If status is already used for a field, you can also set options to an other name, eg. 'labels' or 'fields'
* *
@ -53,10 +54,10 @@ class historylog_widget
* @param array &$cell array with the widget, can be modified for ui-independent widgets * @param array &$cell array with the widget, can be modified for ui-independent widgets
* @param array &$readonlys names of widgets as key, to be made readonly * @param array &$readonlys names of widgets as key, to be made readonly
* @param mixed &$extension_data data the extension can store persisten between pre- and post-process * @param mixed &$extension_data data the extension can store persisten between pre- and post-process
* @param object &$tmpl reference to the template we belong too * @param etemplate $tmpl reference to the template we belong too
* @return boolean true if extra label is allowed, false otherwise * @return boolean true if extra label is allowed, false otherwise
*/ */
function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl) function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,etemplate $tmpl)
{ {
static $status_widgets; static $status_widgets;
@ -120,6 +121,7 @@ class historylog_widget
} }
$app = is_array($value) ? $value['app'] : $GLOBALS['egw_info']['flags']['currentapp']; $app = is_array($value) ? $value['app'] : $GLOBALS['egw_info']['flags']['currentapp'];
$status_widgets = is_array($value) && isset($value['status-widgets']) ? $value['status-widgets'] : null; $status_widgets = is_array($value) && isset($value['status-widgets']) ? $value['status-widgets'] : null;
$id = is_array($value) ? $value['id'] : $value; $id = is_array($value) ? $value['id'] : $value;
$filter = is_array($value) ? $value['filter'] : array(); $filter = is_array($value) ? $value['filter'] : array();
@ -152,6 +154,30 @@ class historylog_widget
$row[$status] = $row['status']; $row[$status] = $row['status'];
} }
} }
// adding custom fields automatically to status-widgets, no need for each app to do that
foreach(config::get_customfields($app,true) as $cf_name => $cf_data)
{
// add cf label, if not set by app
if (!isset($tmpl->sel_options[$status]['#'.$cf_name]))
{
$tmpl->sel_options[$status]['#'.$cf_name] = lang($cf_data['label']);
}
if (isset($status_widgets['#'.$cf_name])) continue; // app set a status widget --> use that
if(!is_array($cf_data['values']))
{
$status_widgets['#'.$cf_name] = $cf_data['type'];
}
elseif($cf_data['values']['@'])
{
$status_widgets['#'.$cf_name] = customfields_widget::_get_options_from_file($cf_data['values']['@']);
}
elseif(count($cf_data['values']))
{
$status_widgets['#'.$cf_name] = $cf_data['values'];
}
}
if ($value) // autorepeated data-row only if there is data if ($value) // autorepeated data-row only if there is data
{ {
$tpl->new_cell(2,'date-time','','${row}[user_ts]',array('readonly' => true)); $tpl->new_cell(2,'date-time','','${row}[user_ts]',array('readonly' => true));