ACC SHELL

Path : /srv/www/vhosts/profias/inc/admin/
File Upload :
Current File : /srv/www/vhosts/profias/inc/admin/multireference.php

<?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