47 function &
buildWidget(&$record, &$field, &$form, $formFieldName, $new=
false){
48 $factory = Dataface_FormTool::factory();
49 $mt = Dataface_ModuleTool::getInstance();
50 $mod = $mt->loadModule(
'modules_depselect');
52 $widget =& $field[
'widget'];
54 if ( !@$atts[
'class'] ) $atts[
'class'] =
'';
55 $atts[
'class'] .=
' xf-depselect';
56 if ( !@$atts[
'data-xf-table'] ){
57 $atts[
'data-xf-table'] = $field[
'tablename'];
59 $targetTable = Dataface_Table::loadTable($field[
'widget'][
'table']);
60 if ( PEAR::isError($targetTable) ){
61 error_log(
"Your field $formFieldName is missing the widget:table directive or the table does not exist.");
62 throw new Exception(
"Your field $formFieldName is missing the widget:table directive or the table does not exist.");
64 $targetPerms = $targetTable->getPermissions();
65 $atts[
'data-xf-depselect-options-table'] = $field[
'widget'][
'table'];
66 if ( @$targetPerms[
'new'] ){
67 $atts[
'data-xf-depselect-perms-new'] = 1;
69 $atts[
'df:cloneable'] = 1;
72 $jt = Dataface_JavascriptTool::getInstance();
73 $jt->addPath(dirname(__FILE__).
'/js', $mod->getBaseURL().
'/js');
75 $ct = Dataface_CSSTool::getInstance();
76 $ct->addPath(dirname(__FILE__).
'/css', $mod->getBaseURL().
'/css');
79 $jt->import(
'xataface/widgets/depselect.js');
82 if ( @$field[
'widget'][
'filters'] and is_array($field[
'widget'][
'filters'])){
83 foreach ($field[
'widget'][
'filters'] as $key=>$val){
84 $filters[] = urlencode($key).
'='.urlencode($val);
88 $atts[
'data-xf-depselect-filters'] = implode(
'&', $filters);
92 if ( @$field[
'widget'][
'nomatch'] ){
93 $atts[
'data-xf-depselect-nomatch'] = $field[
'widget'][
'nomatch'];
97 $el = $factory->addElement(
'text', $formFieldName, $widget[
'label'], $atts);
98 if ( PEAR::isError($el) )
throw new Exception($el->getMessage(), $el->getCode());