<?php
include_once('i_car_import.php');
class c_services_esmo_gateway_upload_relationcar extends i_car_relationcars_import
{
  var $table_xml;
  var $db_debug=0;
  var $import_begin_time=0;
  var $read_only=0;
  var $full_update=0;
  var $read_block_stats=array() ;
  var $view_result_mode=0 ;

	  function exec()
	  { FILE_LOG()->append('VIEW_SOURCE: '.(($this->view_source)? 'ON':'OFF')) ;
	    FILE_LOG()->append('READ_ONLY: '.(($this->read_only)? 'ON':'OFF')) ;
	    FILE_LOG()->append('FULL_UPDATE: '.(($this->full_update)? 'YES':'NO')) ;
        $error='' ; $result=array() ;

	    // проверка IP
	    if (!$GLOBALS['LS_gate_extended_server_ip']) { $error='access_denied for '.$_SERVER['REMOTE_ADDR'] ; $this->view_result_mode=1 ; }
	    else
	    {   $arr_ips=explode(',',$GLOBALS['LS_gate_extended_server_ip']) ;
	    	foreach($arr_ips as $i=>$ip) $arr_ips[$i]=trim($ip) ;
	    	if (!in_array($_SERVER['REMOTE_ADDR'],$arr_ips)) { $error='access_denied for '.$_SERVER['REMOTE_ADDR'] ; $this->view_result_mode=1 ; }
	    }

	    if ($error=='')
        {   ob_start() ;
            if (!$this->setting['upload_fname'])
            { $XML_cont = file_get_contents("php://input");
              if (!$XML_cont) $XML_cont=file_get_contents(_DIR_EXT.'/esmo_gateway/demo/'.$_GET['check_file']) ;
              $temp_fdir=hide_server_dir(_TEMP_DIR.$this->session_uid.'.xml') ;
              file_put_contents(_DIR_TO_ROOT.$temp_fdir,$XML_cont) ;
              echo 'XML данные сохранены во временном файле: <a href="'.$temp_fdir.'" target="blank">'.$temp_fdir.'</a><br>' ;
              $this->setting['upload_fname']=$temp_fdir ;
              $this->view_result_mode=1 ;
            }

            // переносим данные XLS во временную таблицу
            include_once(_DIR_EXT.'/esmo_gateway/i_xml_to_db_import.php') ;
            $XML_to_DB = new i_xml_to_db_import(array('session_uid'=>$this->session_uid,'XML_main_element'=>'PersonCarRelation')) ;
            $XML_to_DB->XML_fname=$this->setting['upload_fname'] ;  // /temp/0_a34d0deb97e04aa9409668dddf7666f6.xlsx
            $res=$XML_to_DB->import() ;
            if ($this->setting['view_source'])
           {  ?><h2>Прочитанный файл XLS, первые 10 строк с данными</h2><?
              $recs=execSQL('select * from '.$XML_to_DB->table.' limit 10') ;
              print_2x_arr($recs) ;
           }
           elseif ($res['success'])
                  {
                      $this->table_xml=$XML_to_DB->table ;
//                      $this->defined_vars() ;
                      $this->create_temp_tables() ;
                      $this->parse_XML_DB_to_table_relation() ;
                      $this->sync_TEMP_DB_ESMO() ;
                      $result=$this->import_result ;

                      $this->delete_temp_tables() ;

                      $result['relation_count']=$XML_to_DB->row_import ;
                      $result['relation_deactivate']=$this->relation_disable;
                      $result['relation_adding']=$this->relation_add ;
                      $result['session_uid']=$this->session_uid ;
                  }

            $XML_to_DB->delete_temp_tables() ;

            adding_rec_to_table('obj_site_post_log',array('obj_name'=>'upload_relationcar','IP'=>$_SERVER['REMOTE_ADDR'],'result'=>$result,'session_uid'=>$this->session_uid,'clss'=>362),array('debug'=>0)) ;

            LOGS()->reg_log('upload_relationcar','<a target=_blank href="'.$this->page_output.'">Отчет</a><br><a href="/temp/full_'.basename($this->log_fname).'" target=_blank>Лог загрузки</a><br><a href="'.$this->log_bash.'" target=_blank>Лог BASH</a>',array()) ;

            $text=ENGINE()->get_html_doc_content(ob_get_clean()) ;
            $trace_fname='import_trace_'.$this->session_uid.'.html' ;
            LOGS()->reg_file_log($trace_fname,$text,array('no_append_time'=>1)) ;
        }

		if (!$this->view_result_mode) echo $text ;
		else
        {   ob_clean() ; // чистим все отправленно е ранее
            if (_sizeof($result)) foreach($result as $key=>$value) echo $key.'='.$value."\n" ;
            if ($error) echo $error ;
        }

		return($result) ;

	  }


	  // тут происходит постобрабтка данных из XML файла
	  // так как в временную таблицы данные были загружены как есть
	  // теперь их надо перенести в таблицы авто в допустимом для импорта виде
	  function parse_XML_DB_to_table_relation()
	  { echo '<strong>Формируем промежуточную таблицу связей водитель-авто</strong><br>' ;
	  	  $recs=execSQL('select * from '.$this->table_xml,0,1) ;
	  	  $ts=getdate();
	  	  $default_time_from = mktime(0,0,0,$ts['mon'],$ts['mday'],$ts['year']);
          $default_time_to = mktime(23,59,59,$ts['mon'],$ts['mday'],$ts['year']);

	      if (_sizeof($recs)) foreach($recs as $rec)
	      {
	          $personal_uid=$rec['PersonUid'] ;
              $car_uid=$rec['CarUid'] ;
              $relation_uid=$rec['RelationUid'] ;

              //Время начала и время окончания действия может приходить в 3 разных видах
              // 1 - вида 01.01.2020 15:25 - есть и дата и время - просто обрабатываем эти данные
              // 2 - вида 01.01.2020 - есть только дата - время начала берем как 00:00, время окончания как 23:59:59
              // 3 - не приходят вообще - в этом случае начало действия текущие сутки 00:00 - окончание текущие сутки 23:59:59
              $date_from=$rec['DateFrom']; $date_to=$rec['DateTo']; $time_from=0; $time_to=0;
              if ($date_from)   $time_from  =   (int) strtotime($date_from);
              if ($date_to)     $time_to    =   (int) strtotime($date_to);

              if ($GLOBALS['LS_TO_time_after_active_relation'] and $time_to)  $time_to=$time_to + ((int) $GLOBALS['LS_TO_time_after_active_relation']) * 60;

              // 2 вариант - обрабатывается время окончания
              if (preg_match('/^\d{2}\.\d{2}\.\d{4}$/',$date_to)) {
                $tt = getdate($time_to);
                $time_to = mktime(23,59,59,$tt['mon'],$tt['mday'],$tt['year']);
              }

	          $data=array('personal_uid'=>$personal_uid,
                          'car_uid'=>$car_uid,
	                      'time_from'=>($time_from)? $time_from:$default_time_from,
	                      'time_to'=>($time_to)? $time_to:$default_time_to,
	                   ) ;
              if (!$GLOBALS['LS_TO_use_relation_uid']) {
                  if ($personal_uid!="" and $car_uid!="") multiSQL_insert($this->table_relations)->append($data) ;
                  else if (!$personal_uid) echo '<div class="red">Отсутствует UID Водителя</div>' ;
                  else if (!$car_uid) echo '<div class="red">Отсутствует UID АВТО</div>' ;
              } else {
                  $data['relation_uid']=$relation_uid ;
                  if ($personal_uid!="" and $car_uid!="" and $relation_uid!="") multiSQL_insert($this->table_relations)->append($data) ;
                  else if (!$relation_uid) echo '<div class="red">Отсутствует UID связи Водитель-АВТО</div>' ;
                  else if (!$personal_uid) echo '<div class="red">Отсутствует UID Водителя</div>' ;
                  else if (!$car_uid) echo '<div class="red">Отсутствует UID АВТО</div>' ;
              }
	      }
	       multiSQL_insert($this->table_relations)->flush() ;
	  }

}

?>
