ACC SHELL
<?php
class Reference extends AdminItem
{
var $fTable; // cizi tabulka
var $fAlias; // alias cizi tabulky
var $fAliasC; // alias cizi tabulky
var $fField; // atribut v cizi tabulce
var $fKey; // klic v cizi tabulce
var $order; // strizeni hodnot v cizi tabulce
var $ajax;
var $join;
var $trans; // aliasy pro hodnoty
var $where;
function Reference($args)
{
$this->setBasicParametres($args);
if (TRUE==isset($args['ffield']))
{
$this->fField=addslashes($args['ffield']);
}
else
{
die('Class Multireference error: no ffield specified.');
}
if (TRUE==isset($args['ftable']))
{
$this->fTable=addslashes($args['ftable']);
}
else
{
die('Class Multireference error: no ftable specified.');
}
if (TRUE==isset($args['alias']))
{
$this->fAlias=addslashes($args['alias']);
$this->fAliasC=addslashes($args['alias']);
}
else
{
$this->fAlias=$this->fTable;
$this->fAliasC=$this->fTable;
}
if (TRUE==isset($args['falias']))
{
$this->fAliasC=addslashes($args['falias']);
}
if (TRUE==isset($args['fkey']))
{
$this->fKey=addslashes($args['fkey']);
}
else
{
die('Class Multireference error: no fkey specified.');
}
if (TRUE==isset($args['where']))
{
$this->where=$args['where'];
}
else
{
$this->where='';
}
if (TRUE==isset($args['trans']))
{
$this->trans=$args['trans'];
}
else
{
$this->trans='';
}
if (TRUE==isset($args['order']))
{
$this->order=$args['order'];
}
else
{
$this->order='';
}
if (TRUE==isset($args['data']))
{
$this->data=$args['data'];
}
if (TRUE==isset($args['ajax']))
{
$this->ajax=$args['ajax'];
}
if (TRUE==isset($args['join']))
{
$this->join=$args['join'];
}
else
{
$this->join='';
}
}
function select($admin)
{
$result=array(
'fields'=>$admin->table.'s.'.$this->field.' AS '.$this->formName,
'from'=>' LEFT JOIN '.$this->fTable.' AS '.$this->fAlias.' ON ('.$this->fAlias.'.'.$this->fKey.'='.$admin->table.'s.'.$this->field.')',
'where'=> ' AND '.$this->fTable.'.'.$this->fField.' IS NOT NULL',
);
return $result;
}
function getList($admin)
{
$result=array(
'fields'=>$this->fAliasC.'.'.$this->fField.' AS '.$this->formName,
'from'=>' LEFT JOIN '.$this->fTable.' AS '.$this->fAlias.' ON ('.$this->fAlias.'.'.$this->fKey.'='.$admin->table.'s.'.$this->field.')',
'where'=> ' AND '.$this->fTable.'.'.$this->fField.' IS NOT NULL',
);
return $result;
}
function getFormParams(&$admin, &$form)
{
$db=$GLOBALS['db'];
if (TRUE==isset($this->ajax['fKey']))
{
$add_keys=', '.$this->fAlias.'.'.$this->ajax['fKey'].' AS ajax_fkey, '.$this->fAlias.'.'.$this->ajax['key'].' AS ajax_key';
}
else
{
$add_keys='';
}
// sestavi seznam dostupnych hodnot
$data=$db->select(
$this->fAliasC.'.'.$this->fField.', '.$this->fAlias.'.'.$this->fKey.$add_keys,
$this->fTable.' AS '.$this->fAlias.$this->join,
'1'.$this->where,
'',
$this->order
);
if (TRUE==isset($this->ajax['fKey']))
{
$tmp=array();
for ($i=0; $i<count($data); $i++)
{
if (TRUE==trim($data[$i][$this->fField]))
{
$tmp[$data[$i]['ajax_fkey']][]=$data[$i]['ajax_key'].'%%%'.$data[$i][$this->fField];
}
}
//print_r($tmp);
$this->ajax['value']='';
$keys=@array_keys($tmp);
for ($i=0; $i<count($keys); $i++)
{
if (TRUE==$keys[$i])
{
$this->ajax['value'].=$separator.$keys[$i].'$$$'.implode('~~~', $tmp[$keys[$i]]);
$separator='|||';
}
}
if (('^.*$'==$this->reg) || (''==$this->reg))
{
$null='null';
}
else
{
$null='not null';
}
$form->inputs[$this->ajax['fInput']]->spec.=' onchange="ajaxGet(this.value, \''.$this->id.'\', \''.$null.'\')";';
$admin->onLoad.=' ajaxInit(\''.$this->id.'\', \''.addslashes(str_replace('"', """, $this->ajax['value'])).'\');';
}
$selects=array();
if (TRUE==preg_match('/'.$this->reg.'/', ''))
{
$selects[]=array(
'text'=>'-',
'value'=>'',
);
}
if (TRUE==$this->trans)
{
for ($i=0; $i<count($data); $i++)
{
if (TRUE==isset($this->trans[$data[$i][$this->fKey]]))
{
$data[$i][$this->fField]=$this->trans[$data[$i][$this->fKey]];
}
}
for ($j=0; $j<count($data); $j++)
for ($i=0; $i<count($data); $i++)
{
if ($data[$i][$this->fField]>$data[$j][$this->fField])
{
$tmp=$data[$i];
$data[$i]=$data[$j];
$data[$j]=$tmp;
}
}
}
for ($i=0; $i<count($data); $i++)
{
$include=TRUE;
if (TRUE==isset($this->ajax['fKey']))
{
if ($data[$i]['ajax_fkey']!=$admin->dataRow[$admin->items[$this->ajax['fInput']]->formName])
{
$include=FALSE;
}
}
if (TRUE==$include)
{
if ($data[$i][$this->fKey]==$admin->dataRow[$this->formName])
{
$selected=TRUE;
}
else
{
$selected=FALSE;
}
$selects[]=array(
'text'=>$data[$i][$this->fField],
'value'=>$data[$i][$this->fKey],
'selected'=>$selected,
);
}
}
// konec: sestavi seznam dostupnych hodnost
$result=array(
'type'=>'select',
'name'=>$this->formName,
'value'=>$this->default,
'reg'=>$this->reg,
'css_id'=>$this->id,
'css_class'=>$this->class,
'spec'=>$this->spec,
'label'=>$this->name,
'label_id'=>$this->labelId,
'label_class'=>$this->labelClass,
'options'=>$selects,
);
return array($result);
}
}
?>
ACC SHELL 2018