Better fix for some widgets not being properly initialized (that doesn't break others)

This commit is contained in:
Nathan Gray 2013-06-19 18:11:30 +00:00
parent 865151f977
commit bcd52bb375
6 changed files with 33 additions and 13 deletions

View File

@ -295,12 +295,20 @@ class etemplate_widget
if (!isset($class_name))
{
list($basetype) = explode('-',$type);
$class_name = self::$widget_registry[$basetype];
if (!$class_name && !(class_exists($class_name = 'etemplate_widget_'.str_replace('-','_',$basetype)) ||
class_exists($class_name = 'etemplate_widget_'.str_replace('-','_',$type))))
if (!class_exists($class_name = 'etemplate_widget_'.str_replace('-','_',$type)) &&
!class_exists($class_name = 'etemplate_widget_'.str_replace('-','_',$basetype)))
{
// default to widget class, we can not ignore it, as the widget may contain other widgets
$class_name = 'etemplate_widget';
// Try for base type, it's probably better than the root
if(self::$widget_registry[$basetype] && self::$widget_registry[$basetype] != $class_name)
{
$class_name = self::$widget_registry[$basetype];
}
else
{
// Fall back to widget class, we can not ignore it, as the widget may contain other widgets
$class_name = 'etemplate_widget';
//trigger_error("Could not find a class for $type, using $class_name", E_USER_NOTICE);
}
}
}

View File

@ -59,3 +59,4 @@ class etemplate_widget_button extends etemplate_widget
}
}
}
etemplate_widget::registerWidget('etemplate_widget_button', array('button','buttononly'));

View File

@ -209,6 +209,7 @@ class etemplate_widget_customfields extends etemplate_widget_transformer
// Re-format date custom fields from Y-m-d
$field_settings =& self::get_array(self::$request->modifications, "{$this->id}[customfields]",true);
$field_settings = array();
$link_types = egw_link::app_list();
foreach($fields as $fname => $field)
{
if($field['type'] == 'date' && ($d_val = self::$request->content[self::$prefix.$fname]) && !is_numeric($d_val))
@ -217,11 +218,21 @@ class etemplate_widget_customfields extends etemplate_widget_transformer
}
// Run beforeSendToClient for each field
$widget = self::factory($field['type'], '<'.$field['type'].' type="'.$field['type'].'" id="'.self::$prefix.$fname.'"/>', self::$prefix.$fname);
$type = $field['type'];
// Link-tos needs to change from appname to link-to
if($link_types[$field['type']])
{
$type = 'link-to';
}
$widget = self::factory($type, '<'.$type.' type="'.$type.'" id="'.self::$prefix.$fname.'"/>', self::$prefix.$fname);
if(method_exists($widget, 'beforeSendToClient'))
{
$widget->id = self::$prefix.$fname;
$widget->attrs['type'] = $field['type'];
$widget->attrs['type'] = $type;
if($type == 'link-to')
{
$widget->attrs['only_app'] = $field['type'];
}
$widget->beforeSendToClient($this->id == self::GLOBAL_ID ? '':$this->id, $fname);
}
}

View File

@ -57,10 +57,10 @@ class etemplate_widget_link extends etemplate_widget
$form_name = self::form_name($cname, $this->id);
$value =& self::get_array(self::$request->content, $form_name, true);
if($value && !is_array($value))
if($value && !is_array($value) && !$this->attrs['only_app'])
{
// Try to explode
if(!is_array(explode(':',$value))) {
if(count(explode(':',$value)) < 2) {
throw new egw_exception_wrong_parameter("Wrong value sent to link widget, needs to be an array. ".array2string($value));
}
list($app, $id) = explode(':', $value,2);
@ -71,13 +71,13 @@ class etemplate_widget_link extends etemplate_widget
return;
}
$app = $value['to_app'];
$id = $value['to_id'];
// ToDo: implement on client-side
if (!$attrs['help']) self::setElementAttribute($form_name, 'help', 'view this linked entry in its application');
if($attrs['type'] == 'link-list') {
$app = $value['to_app'];
$id = $value['to_id'];
$links = egw_link::get_links($app,$id,'','link_lastmod DESC',true, $value['show_deleted']);
foreach($links as $link) {
$value[] = $link;

View File

@ -654,4 +654,4 @@ class etemplate_widget_menupopup extends etemplate_widget
}
}
etemplate_widget::registerWidget('etemplate_widget_menupopup', array('selectbox','listbox','select'));
etemplate_widget::registerWidget('etemplate_widget_menupopup', array('selectbox','listbox','select','menulist','menupopup'));

View File

@ -154,4 +154,4 @@ class etemplate_widget_textbox extends etemplate_widget
}
}
}
etemplate_widget::registerWidget('etemplate_widget_textbox', array('textbox','int','integer','float','passwd','hidden','colorpicker'));
etemplate_widget::registerWidget('etemplate_widget_textbox', array('textbox','text','int','integer','float','passwd','hidden','colorpicker'));