forked from extern/egroupware
the nextmatch callback can now change or add items to sel_options, eg. to set column-filter contents depending on other column-filters
This commit is contained in:
parent
4eb9a76c0b
commit
6c4843263f
@ -41,6 +41,7 @@
|
|||||||
* 'filter2_no_lang'=> True// I set no_lang for filter2 (=dont translate the options)
|
* 'filter2_no_lang'=> True// I set no_lang for filter2 (=dont translate the options)
|
||||||
* 'rows' => // O content set by callback
|
* 'rows' => // O content set by callback
|
||||||
* 'total' => // O the total number of entries
|
* '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
|
||||||
* );
|
* );
|
||||||
* @package etemplate
|
* @package etemplate
|
||||||
* @subpackage extensions
|
* @subpackage extensions
|
||||||
@ -149,7 +150,14 @@
|
|||||||
list($app,$class,$method) = explode('.',$value['get_rows']);
|
list($app,$class,$method) = explode('.',$value['get_rows']);
|
||||||
if ($app && $class)
|
if ($app && $class)
|
||||||
{
|
{
|
||||||
$obj =& CreateObject($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))
|
if (!is_object($obj) || !method_exists($obj,$method))
|
||||||
{
|
{
|
||||||
@ -158,6 +166,13 @@
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$total = $value['total'] = $obj->$method($value,$value['rows'],$readonlys['rows']);
|
$total = $value['total'] = $obj->$method($value,$value['rows'],$readonlys['rows']);
|
||||||
|
|
||||||
|
// allow the get_rows function to override / set sel_options
|
||||||
|
if (isset($value['rows']['sel_options']) && is_array($value['rows']['sel_options']))
|
||||||
|
{
|
||||||
|
$tmpl->sel_options = array_merge($tmpl->sel_options,$value['rows']['sel_options']);
|
||||||
|
unset($value['rows']['sel_options']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($value['start'] > $total)
|
if ($value['start'] > $total)
|
||||||
{
|
{
|
||||||
@ -175,7 +190,7 @@
|
|||||||
}
|
}
|
||||||
if (!is_object($value['template']))
|
if (!is_object($value['template']))
|
||||||
{
|
{
|
||||||
$value['template'] = new etemplate($value['template'],$tmpl->as_array());
|
$value['template'] =& new etemplate($value['template'],$tmpl->as_array());
|
||||||
}
|
}
|
||||||
if ($total < 1)
|
if ($total < 1)
|
||||||
{
|
{
|
||||||
|
@ -345,6 +345,9 @@
|
|||||||
{
|
{
|
||||||
$sel_options = array();
|
$sel_options = array();
|
||||||
}
|
}
|
||||||
|
// make it globaly availible for show_cell and show_grid
|
||||||
|
$this->sel_options =& $sel_options;
|
||||||
|
|
||||||
if (!$readonlys)
|
if (!$readonlys)
|
||||||
{
|
{
|
||||||
$readonlys = array();
|
$readonlys = array();
|
||||||
@ -369,7 +372,7 @@
|
|||||||
$path = '/';
|
$path = '/';
|
||||||
foreach ($this->children as $n => $child)
|
foreach ($this->children as $n => $child)
|
||||||
{
|
{
|
||||||
$html .= $this->show_cell($child,$content,$sel_options,$readonlys,$cname,$show_c,$show_row,$nul,$nul,$path.$n);
|
$html .= $this->show_cell($child,$content,$readonlys,$cname,$show_c,$show_row,$nul,$nul,$path.$n);
|
||||||
}
|
}
|
||||||
return $html."<!-- END eTemplate $this->name -->\n\n";
|
return $html."<!-- END eTemplate $this->name -->\n\n";
|
||||||
}
|
}
|
||||||
@ -386,7 +389,6 @@
|
|||||||
* @internal
|
* @internal
|
||||||
* @param array $grid representing a grid
|
* @param array $grid representing a grid
|
||||||
* @param array $content with content for the cells, keys are the names given in the cells/form elements
|
* @param array $content with content for the cells, keys are the names given in the cells/form elements
|
||||||
* @param array $sel_options with options for the selectboxes, keys are the name of the selectbox
|
|
||||||
* @param array $readonlys with names of cells/form-elements to be not allowed to change
|
* @param array $readonlys with names of cells/form-elements to be not allowed to change
|
||||||
* This is to facilitate complex ACL's which denies access on field-level !!!
|
* This is to facilitate complex ACL's which denies access on field-level !!!
|
||||||
* @param string $cname basename of names for form-elements, means index in $_POST
|
* @param string $cname basename of names for form-elements, means index in $_POST
|
||||||
@ -396,12 +398,8 @@
|
|||||||
* @param string $path path in the widget tree
|
* @param string $path path in the widget tree
|
||||||
* @return string the generated HTML
|
* @return string the generated HTML
|
||||||
*/
|
*/
|
||||||
function show_grid(&$grid,$content,$sel_options='',$readonlys='',$cname='',$show_c=0,$show_row=0,$path='')
|
function show_grid(&$grid,$content,$readonlys='',$cname='',$show_c=0,$show_row=0,$path='')
|
||||||
{
|
{
|
||||||
if (!$sel_options)
|
|
||||||
{
|
|
||||||
$sel_options = array();
|
|
||||||
}
|
|
||||||
if (!$readonlys)
|
if (!$readonlys)
|
||||||
{
|
{
|
||||||
$readonlys = array();
|
$readonlys = array();
|
||||||
@ -506,7 +504,7 @@
|
|||||||
{
|
{
|
||||||
continue; // col is disabled
|
continue; // col is disabled
|
||||||
}
|
}
|
||||||
$row_data[$col] = $this->show_cell($cell,$content,$sel_options,$readonlys,$cname,$c,$r,$span,$cl,$path.'/'.$r_key.$c_key);
|
$row_data[$col] = $this->show_cell($cell,$content,$readonlys,$cname,$c,$r,$span,$cl,$path.'/'.$r_key.$c_key);
|
||||||
|
|
||||||
if ($row_data[$col] == '' && $this->rows == 1)
|
if ($row_data[$col] == '' && $this->rows == 1)
|
||||||
{
|
{
|
||||||
@ -592,7 +590,6 @@
|
|||||||
* @internal
|
* @internal
|
||||||
* @param array $cell with data of the cell: name, type, ...
|
* @param array $cell with data of the cell: name, type, ...
|
||||||
* @param array $content with content for the cells, keys are the names given in the cells/form elements
|
* @param array $content with content for the cells, keys are the names given in the cells/form elements
|
||||||
* @param array $sel_options with options for the selectboxes, keys are the name of the selectbox
|
|
||||||
* @param array $readonlys with names of cells/form-elements to be not allowed to change
|
* @param array $readonlys with names of cells/form-elements to be not allowed to change
|
||||||
* This is to facilitate complex ACL's which denies access on field-level !!!
|
* This is to facilitate complex ACL's which denies access on field-level !!!
|
||||||
* @param string $cname basename of names for form-elements, means index in $_POST
|
* @param string $cname basename of names for form-elements, means index in $_POST
|
||||||
@ -604,7 +601,7 @@
|
|||||||
* @param string $path path in the widget tree
|
* @param string $path path in the widget tree
|
||||||
* @return string the generated HTML
|
* @return string the generated HTML
|
||||||
*/
|
*/
|
||||||
function show_cell($cell,$content,$sel_options,$readonlys,$cname,$show_c,$show_row,&$span,&$class,$path='')
|
function show_cell($cell,$content,$readonlys,$cname,$show_c,$show_row,&$span,&$class,$path='')
|
||||||
{
|
{
|
||||||
if ($this->debug && (is_int($this->debug) && $this->debug >= 3 || $this->debug == $cell['type']))
|
if ($this->debug && (is_int($this->debug) && $this->debug >= 3 || $this->debug == $cell['type']))
|
||||||
{
|
{
|
||||||
@ -896,7 +893,7 @@
|
|||||||
{
|
{
|
||||||
$cname .= $cname == '' ? $name : '['.str_replace('[','][',str_replace(']','',$name)).']';
|
$cname .= $cname == '' ? $name : '['.str_replace('[','][',str_replace(']','',$name)).']';
|
||||||
}
|
}
|
||||||
$html .= $this->show_grid($cell,$name ? $value : $content,$sel_options,$readonlys,$cname,$show_c,$show_row,$path);
|
$html .= $this->show_grid($cell,$name ? $value : $content,$readonlys,$cname,$show_c,$show_row,$path);
|
||||||
break;
|
break;
|
||||||
case 'template': // size: index in content-array (if not full content is past further on)
|
case 'template': // size: index in content-array (if not full content is past further on)
|
||||||
if (is_object($cell['name']))
|
if (is_object($cell['name']))
|
||||||
@ -963,7 +960,7 @@
|
|||||||
{
|
{
|
||||||
$cell['obj']->onclick_proxy = $this->onclick_proxy ? $this->onclick_proxy : $this->name.':'.$path;
|
$cell['obj']->onclick_proxy = $this->onclick_proxy ? $this->onclick_proxy : $this->name.':'.$path;
|
||||||
}
|
}
|
||||||
$html = $cell['obj']->show($content,$sel_options,$readonlys,$cname,$show_c,$show_row);
|
$html = $cell['obj']->show($content,$this->sel_options,$readonlys,$cname,$show_c,$show_row);
|
||||||
break;
|
break;
|
||||||
case 'select': // size:[linesOnMultiselect|emptyLabel]
|
case 'select': // size:[linesOnMultiselect|emptyLabel]
|
||||||
$sels = array();
|
$sels = array();
|
||||||
@ -974,7 +971,7 @@
|
|||||||
// extra-option: no_lang=0 gets translated later and no_lang=1 gets translated too (now), only no_lang>1 gets not translated
|
// extra-option: no_lang=0 gets translated later and no_lang=1 gets translated too (now), only no_lang>1 gets not translated
|
||||||
if ((int)$cell['no_lang'] == 1)
|
if ((int)$cell['no_lang'] == 1)
|
||||||
{
|
{
|
||||||
$sels[''] = lang($sels['']);
|
$sels[''] = substr($sels[''],-3) == '...' ? lang(substr($sels[''],0,-3)).'...' : lang($sels['']);
|
||||||
}
|
}
|
||||||
$multiple = 0;
|
$multiple = 0;
|
||||||
}
|
}
|
||||||
@ -994,9 +991,9 @@
|
|||||||
$sels += $cell['sel_options'];
|
$sels += $cell['sel_options'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isset($sel_options[$name]) && is_array($sel_options[$name]))
|
if (isset($this->sel_options[$name]) && is_array($this->sel_options[$name]))
|
||||||
{
|
{
|
||||||
$sels += $sel_options[$name];
|
$sels += $this->sel_options[$name];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1004,13 +1001,13 @@
|
|||||||
if (count($name_parts))
|
if (count($name_parts))
|
||||||
{
|
{
|
||||||
$org_name = $name_parts[count($name_parts)-1];
|
$org_name = $name_parts[count($name_parts)-1];
|
||||||
if (isset($sel_options[$org_name]) && is_array($sel_options[$org_name]))
|
if (isset($this->sel_options[$org_name]) && is_array($this->sel_options[$org_name]))
|
||||||
{
|
{
|
||||||
$sels += $sel_options[$org_name];
|
$sels += $this->sel_options[$org_name];
|
||||||
}
|
}
|
||||||
elseif (isset($sel_options[$name_parts[0]]) && is_array($sel_options[$name_parts[0]]))
|
elseif (isset($this->sel_options[$name_parts[0]]) && is_array($this->sel_options[$name_parts[0]]))
|
||||||
{
|
{
|
||||||
$sels += $sel_options[$name_parts[0]];
|
$sels += $this->sel_options[$name_parts[0]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1081,7 +1078,7 @@
|
|||||||
if (!$orient) $orient = $type == 'hbox' ? 'horizontal' : ($type == 'box' ? false : 'vertical');
|
if (!$orient) $orient = $type == 'hbox' ? 'horizontal' : ($type == 'box' ? false : 'vertical');
|
||||||
for ($n = 1; $n <= (int) $num; ++$n)
|
for ($n = 1; $n <= (int) $num; ++$n)
|
||||||
{
|
{
|
||||||
$h = $this->show_cell($cell[$n],$content,$sel_options,$readonlys,$cname,$show_c,$show_row,$nul,$cl,$path.'/'.$n);
|
$h = $this->show_cell($cell[$n],$content,$readonlys,$cname,$show_c,$show_row,$nul,$cl,$path.'/'.$n);
|
||||||
if ($h != '' && $h != ' ')
|
if ($h != '' && $h != ' ')
|
||||||
{
|
{
|
||||||
if ($orient != 'horizontal')
|
if ($orient != 'horizontal')
|
||||||
@ -1153,7 +1150,7 @@
|
|||||||
}
|
}
|
||||||
for ($n = 1; $n <= $cell_options; ++$n)
|
for ($n = 1; $n <= $cell_options; ++$n)
|
||||||
{
|
{
|
||||||
$h = $this->show_cell($cell[$n],$content,$sel_options,$readonlys,$cname,$show_c,$show_row,$path.'/'.$n);
|
$h = $this->show_cell($cell[$n],$content,$readonlys,$cname,$show_c,$show_row,$path.'/'.$n);
|
||||||
$vis = !empty($value) && $value == $cell_options[$n]['name'] || $n == 1 && $first ? 'visible' : 'hidden';
|
$vis = !empty($value) && $value == $cell_options[$n]['name'] || $n == 1 && $first ? 'visible' : 'hidden';
|
||||||
list (,$cl) = explode(',',$cell[$n]['span']);
|
list (,$cl) = explode(',',$cell[$n]['span']);
|
||||||
$html .= $this->html->div($h,$this->html->formatOptions(array(
|
$html .= $this->html->div($h,$this->html->formatOptions(array(
|
||||||
|
Loading…
Reference in New Issue
Block a user