ACC SHELL
<?php
class Multireference extends AdminItem
{
var $fTable; // cizi tabulka
var $fField; // atribut v cizi tabulce
var $fKey; // klic v cizi tabulce
var $mrKey; // cizi klic
var $mrfKey; // cizi klic cizi tabulky
var $key; // klic
var $order; // strizeni hodnot v cizi tabulce
var $inactive; // pole neaktivnich polozek
var $trans; // aliasy pro hodnoty
var $hiddenLabels; // schovane labely?
function Multireference($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['fkey']))
{
$this->fKey=addslashes($args['fkey']);
}
else
{
die('Class Multireference error: no fkey specified.');
}
if (TRUE==isset($args['mrtable']))
{
$this->mrTable=addslashes($args['mrtable']);
}
else
{
die('Class Multireference error: no mrtable specified.');
}
if (TRUE==isset($args['mrkey']))
{
$this->mrKey=addslashes($args['mrkey']);
}
else
{
die('Class Multireference error: no mrkey specified.');
}
if (TRUE==isset($args['mrfkey']))
{
$this->mrfKey=addslashes($args['mrfkey']);
}
else
{
die('Class Multireference error: no mrfkey specified.');
}
if (TRUE==isset($args['where']))
{
$this->where=$args['where'];
}
else
{
$this->where='';
}
if (TRUE==isset($args['mr_where']))
{
$this->mrWhere=$args['mr_where'];
}
else
{
$this->mrWhere='';
}
if (TRUE==isset($args['data']))
{
$this->data=$args['data'];
}
if (TRUE==isset($args['addValues']))
{
$this->addValues=$args['addValues'];
}
if (TRUE==isset($args['order']))
{
$this->order=$args['order'];
}
else
{
$this->order='';
}
if (TRUE==isset($args['trans']))
{
$this->trans=$args['trans'];
}
else
{
$this->trans='';
}
if (TRUE==isset($args['hidden_labels']))
{
$this->hiddenLabels=$args['hidden_labels'];
}
else
{
$this->hiddenLabels=FALSE;
}
if (TRUE==isset($args['inactive']))
{
$this->inactive=$args['inactive'];
}
else
{
$this->inactive=array();
}
}
function select()
{
return FALSE;
}
function getList()
{
return FALSE;
}
function detail($admin=array())
{
if (FALSE==isset($this->data))
{
// sestavi seznam dostupnych hodnot
$tmp=$GLOBALS['db']->select(
$this->fTable.'.'.$this->fField,
$this->mrTable.' LEFT JOIN '.$this->fTable.' ON ('.$this->mrTable.'.'.$this->mrfKey.'='.$this->fTable.'.'.$this->fKey.')',
$this->mrTable.'.'.$this->mrKey.'='.(int)$admin->id.$this->where
);
$data=array();
for ($i=0; $i<count($tmp); $i++)
{
$data[]=$tmp[$i][$this->fField];
}
$result=array(
'label'=>$this->name,
'value'=>@implode(', ', $data),
'in_detail'=>$this->inDetail,
);
return $result;
}
// pripad s daty
else
{
if (TRUE==is_array($this->addValues))
{
for ($j=0; $j<count($this->addValues); $j++)
{
$this->where.=' AND '.$this->mrTable.'.'.$this->addValues[$j]['field'].'=\''.addslashes($this->addValues[$j]['value']).'\'';
}
}
$tmp=$GLOBALS['db']->select(
$this->fTable.'.'.$this->fField.' AS '.$this->fTable.'_'.$this->fField.', '.$this->mrTable.'.*',
$this->mrTable.' LEFT JOIN '.$this->fTable.' ON ('.$this->mrTable.'.'.$this->mrfKey.'='.$this->fTable.'.'.$this->fKey.')',
$this->mrTable.'.'.$this->mrKey.'='.(int)$admin->id.$this->where
);
$output='';
for ($j=0; $j<count($this->data); $j++)
{
if (1<count($this->data))
{
$output.='<b>'.$this->data[$j]['name'].'</b><br />';
}
$rows=array();
for ($i=0; $i<count($tmp); $i++)
{
$data=$tmp[$i];
$rows[]='<i>'.$data[$this->fTable.'_'.$this->fField].':</i> '.$data[$this->data[$j]['field']];
}
$output.=@implode("<br />", $rows).'<br />';
}
$result=array(
'label'=>$this->name,
'value'=>stripslashes($output),
);
$result['in_detail']=$this->inDetail;
return $result;
}
}
function getFormParams(&$admin)
{
$db=$GLOBALS['db'];
// pro pripada bez data
if (FALSE==isset($this->data))
{
// zjisteni vybranych polozek (pri editaci)
$tmp=$db->select($this->mrfKey, $this->mrTable, $this->mrKey.'='.(int)$admin->id);
$mrdata=array();
for ($i=0; $i<count($tmp); $i++)
{
$mrdata[]=$tmp[$i][$this->mrfKey];
}
// sestavi seznam dostupnych hodnost
$data=$db->select(
$this->fField.', '.$this->fKey,
$this->fTable,
'1'.$this->where,
'',
$this->order
);
$selects=array();
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;
}
}
}
if (TRUE==preg_match('/'.$this->reg.'/', ''))
{
$select[]=$selects[]=array(
'text'=>'-',
'value'=>'',
);
}
// cista multireference (bez pridanych dat)
for ($i=0; $i<count($data); $i++)
{
if (TRUE==in_array($data[$i][$this->fKey], $mrdata))
{
$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.' multiple="multiple" size="10"',
'label'=>$this->name,
'label_id'=>$this->labelId,
'label_class'=>$this->labelClass,
'options'=>$selects,
'inactive'=>$this->inactive,
);
return array($result);
}
// pripad s data
else
{
$this->mrTable;
$where='';
if (TRUE==is_array($this->addValues))
{
for ($j=0; $j<count($this->addValues); $j++)
{
$where.=' AND '.$this->addValues[$j]['field'].'=\''.addslashes($this->addValues[$j]['value']).'\'';
}
}
if (FALSE==isset($_GET[$this->fKey.$this->fTable]))
{
$tmp=$db->select(
'*', $this->mrTable, $this->mrKey.'='.(int)$admin->id.$this->where.$this->mrWhere.$where
);
// print_r($tmp);
$default=array();
for ($i=0; $i<count($tmp); $i++)
{
$default[$tmp[$i][$this->mrfKey]]=$tmp[$i];
}
$data=$db->select(
$this->fField.', '.$this->fKey,
$this->fTable,
'1'.$this->where
);
require_once('label.php');
if (TRUE==isset($_GET[$admin->table.$this->fTable]))
{
$data_by_id=array();
for ($i=0; $i<count($data); $i++)
{
$data_by_id[$data[$i]['id']]=$data[$i];
}
$admin->items[]=new Label(array('type'=>'label', 'name'=>$data_by_id[$_GET[$admin->table.$this->fTable]][$this->fField]));
}
$visible=FALSE;
for ($i=0; $i<count($this->data); $i++)
{
// pokud je vybran urcity klic cizi tabulky, nebudou se zobrazovat vsechna policka, ale jen tak, ktera se tyka daneho klice (napr. pouze anglictina misto vsech jazyku)
if (TRUE==isset($_GET[$admin->table.$this->fTable]))
{
require_once($this->data[$i]['type'].'.php');
$this->data[$i]['name']=$this->data[$i]['name'];
$this->data[$i]['virtual']=TRUE;
$this->data[$i]['reg']=$this->reg;
$this->data[$i]['default']=$default[$_GET[$admin->table.$this->fTable]][$this->data[$i]['field']];
$this->data[$i]['form_name']=$this->formName.'['.$_GET[$admin->table.$this->fTable].']['.$this->data[$i]['field'].']';
$admin->items[]=new $this->data[$i]['type']($this->data[$i]);
}
// neni-li vybran urcity klic, vypisou se vsechny moznosti (napr. vsechny jazyky pro dany atribut)
else
{
if (FALSE==$this->hiddenLabels)
{
$admin->items[]=new Label(array('type'=>'label', 'name'=>$this->data[$i][$this->fField]));
}
for ($j=0; $j<count($data); $j++)
{
// print_r($default[$data[$j]['id']]);
require_once($this->data[$i]['type'].'.php');
$this->data[$i]['name']=$data[$j][$this->fField];
$this->data[$i]['virtual']=TRUE;
$this->data[$i]['reg']=$this->reg;
$this->data[$i]['default']=$default[$data[$j][$this->fKey]][$this->data[$i]['field']];
$this->data[$i]['form_name']=$this->formName.'['.$data[$j][$this->fKey].']['.$this->data[$i]['field'].']';
$admin->items[]=new $this->data[$i]['type']($this->data[$i]);
}
}
}
}
else
{
$data=$db->select(
$this->fField.', '.$this->fKey,
$this->fTable,
$this->fKey.'='.(int)$_GET[$this->fKey.$this->fTable].$this->where,
'1'
);
for ($i=0; $i<count($this->data); $i++)
{
require_once($this->data[$i]['type'].'.php');
$this->data[$i]['name']=$this->name;
$this->data[$i]['virtual']=TRUE;
$this->data[$i]['form_name']=$this->formName.'['.$data[$this->fKey].']';
$admin->items[]=new $this->data[$i]['type']($this->data[$i]);
}
}
$result=array();
}
return $result;
}
function getInsertParams($admin)
{
if (FALSE==$admin->id)
{
$id=get_auto_increment($admin->table.'s');
}
else
{
$id=$admin->id;
}
// smazat z multireferencni tabulky zaznamy tykajici se aktualni polozky
if (TRUE==isset($_GET[$admin->table.$this->fTable]))
{
$where_del=' AND '.$this->mrfKey.'='.(int)$_GET[$admin->table.$this->fTable];
}
else
{
$where_del='';
}
if (TRUE==is_array($this->addValues))
{
for ($j=0; $j<count($this->addValues); $j++)
{
$where_del.=' AND '.$this->addValues[$j]['field'].'=\''.addslashes($this->addValues[$j]['value']).'\'';
}
}
$GLOBALS['db']->queryN('DELETE FROM '.$this->mrTable.' WHERE '.$this->mrKey.'='.(int)$id.$where_del.$this->mrWhere);
if (FALSE==isset($this->data))
{
for ($i=0; $i<count($_POST[$this->formName]); $i++)
{
if (TRUE==$_POST[$this->formName][$i])
{
$old_row=$row=array(
$this->mrKey=>(int)$id,
$this->mrfKey=>addslashes($_POST[$this->formName][$i]),
);
$GLOBALS['db']->insert($this->mrTable, $row);
}
}
return FALSE;
}
else
{
$keys=@array_keys($_POST[$this->formName]);
$row=array();
$addvalue=array();
for ($i=0; $i<count($keys); $i++)
{
if (0==count($rows[$id][$keys[$i]]))
{
$old_row=$row=array(
$this->mrKey=>(int)$id,
$this->mrfKey=>$keys[$i],
);
}
else
{
$row=$rows[$id][$keys[$i]];
}
if (TRUE==is_array($this->addValues))
{
for ($j=0; $j<count($this->addValues); $j++)
{
$row[$this->addValues[$j]['field']]=$this->addValues[$j]['value'];
$old_row[$this->addValues[$j]['field']]=$this->addValues[$j]['value'];
}
}
$fields=@array_keys($_POST[$this->formName][$keys[$i]]);
$values=array();
$insert=FALSE;
for ($j=0; $j<count($fields); $j++)
{
$row[$fields[$j]]=$_POST[$this->formName][$keys[$i]][$fields[$j]];
if (TRUE==$_POST[$this->formName][$keys[$i]][$fields[$j]])
{
$insert=TRUE;
}
}
$rows[$id][$keys[$i]]=$row;
}
$keys=@array_keys($_FILES[$this->formName]['tmp_name']);
// $row=array();
$addvalue=array();
if (0<count($keys))
{
if (TRUE==$admin->id)
{
$admin_id=$admin->id;
}
else
{
$admin_id=get_auto_increment($admin->table.'s');
}
$conn_id=ftp_connect($admin->ftp['server']) or die('Nemohu se pipojit k FTP serveru.');
$login_result = ftp_login($conn_id, $admin->ftp['login'], $admin->ftp['password']) or die('Nemohu se pipojit k FTP serveru.');
for ($i=0; $i<count($keys); $i++)
{
if (0==count($rows[$id][$keys[$i]]))
{
$old_row=$row=array(
$this->mrKey=>(int)$id,
$this->mrfKey=>$keys[$i],
);
}
else
{
$row=$rows[$id][$keys[$i]];
}
if ( (TRUE==is_array($this->addValues)) && (0==count($row)) )
{
for ($j=0; $j<count($this->addValues); $j++)
{
$row[$this->addValues[$j]['field']]=$this->addValues[$j]['value'];
$old_row[$this->addValues[$j]['field']]=$this->addValues[$j]['value'];
}
}
$fields=@array_keys($_FILES[$this->formName]['tmp_name'][$keys[$i]]);
$values=array();
$insert=FALSE;
for ($j=0; $j<count($fields); $j++)
{
$id_file=get_auto_increment($admin->filesTable);
$file_row=array(
'name'=>$_FILES[$this->formName]['name'][$keys[$i]][$fields[$j]],
'path'=>(int)$id_file.'-'.sys_name($_FILES[$this->formName]['name'][$keys[$i]][$fields[$j]]),
'type'=>$_FILES[$this->formName]['type'][$keys[$i]][$fields[$j]],
'size'=>$_FILES[$this->formName]['size'][$keys[$i]][$fields[$j]],
);
// pokud se jedna o obrazek ulozi se data o rozmerech
if (TRUE==in_array($_FILES[$this->formName]['type'][$keys[$i]][$fields[$j]], $admin->imageTypes))
{
$size=getimagesize($_FILES[$this->formName]['tmp_name'][$keys[$i]][$fields[$j]]);
$file_row['width']=$size[0];
$file_row['height']=$size[1];
}
ftp_chdir($conn_id, $admin->ftp['root']);
@ftp_mkdir($conn_id, $admin->table.$admin_id);
ftp_chdir($conn_id, $admin->table.$admin_id);
ftp_put($conn_id, $file_row['path'], $_FILES[$this->formName]['tmp_name'][$keys[$i]][$fields[$j]], FTP_BINARY);
$GLOBALS['db']->insert($admin->filesTable, $file_row);
$row[$fields[$j]]=(int)$id_file;
if (TRUE==$_FILES[$this->formName]['tmp_name'][$keys[$i]][$fields[$j]])
{
$insert=TRUE;
}
}
ftp_close($conn_id);
$rows[$id][$keys[$i]]=$row;
// print_r($row);
}
$rows[]=$row;
}
// die(print_r($rows));
$keys=@array_keys($rows);
for ($i=0; $i<count($keys); $i++)
{
$keys2=@array_keys($rows[$keys[$i]]);
for ($j=0; $j<count($keys2); $j++)
{
$GLOBALS['db']->insert($this->mrTable, $rows[$keys[$i]][$keys2[$j]]);
}
}
return FALSE;
}
// die(print_r($result));
$result=array();
return $result;
}
}
?>
ACC SHELL 2018