<?
// включение плагина на /cab/setting/moduls/
// код для вывода
// $this->form_checkbox_left('<strong>Санобработка</strong>','Плагин перевода терминала в режим санобработки при выявлении повышенной температуры','IS[plugins][sanitar]',$GLOBALS['_SETTING']['plugins']['sanitar'],'i_sanitar') ;

//$__functions['init'][]      ='_sanitar_admin_vars' ;
//$__functions['boot_site'][] ='_sanitar_site_boot' ;


function _sanitar_admin_vars() //
{
	//$_SESSION['descr_clss'][3]['fields']['faceimg']=array('type'=>'int(1)','default'=>0) ;  // фото для faceimg
}


function _sanitar_site_boot($options)
{
   //ENGINE()->reg_ext('sanitar','Санобработка терминала') ;
}



function SANITAR() {if (is_object($GLOBALS['sanitar_plugin'])) return($GLOBALS['sanitar_plugin']);$GLOBALS['sanitar_plugin']=new i_sanitar();return($GLOBALS['sanitar_plugin']);} ;

class i_sanitar
{

 var $arr_status=[1=>'Перевод терминала в режим санобработки',
                  2=>'Завершение санобработки',
                  3=>'Команда с терминала в режиме санобработки',
                 ] ;

 function __construct()
 {
 }

 function declare_menu($page)
 {
	//$page->menu['/cab/setting/']['items']['/cab/sanitar/settings/']=array('title'=>'FaceID') ;
 }

 function install()
 {
  check_exists_dir('/public/sanitar/sign_data') ;
  check_exists_dir('/public/sanitar/sign_image') ;
  check_exists_dir('/public/sanitar/photo') ;

  $descr_class[369]['name']='Журнал санобработки терминала' ;
	$descr_class[369]['parent']=0 ;
	$descr_class[369]['fields']['group_id']=array('type'=>'int(11)','index'=>'group_id','default'=>0) ;
	$descr_class[369]['fields']['mo_id']=array('type'=>'int(11)','default'=>0) ;
	$descr_class[369]['fields']['doctor_id']=array('type'=>'int(11)','default'=>0) ;
	$descr_class[369]['fields']['terminal_id']=array('type'=>'int(11)','index'=>'terminal_id','default'=>0) ;
	$descr_class[369]['fields']['terminal_pkey']=array('type'=>'int(11)','index'=>'terminal_pkey','default'=>0) ;
	$descr_class[369]['fields']['status']=array('type'=>'int(11)','index'=>'status','default'=>0) ;

  SETUP()->reg_class($descr_class) ;

	$id_sect=SETUP_add_section_to_site_setting('Санобработка терминала') ;
	SETUP_add_rec_to_site_setting($id_sect,"Включить режим контроля санобработки терминала",0,'LS_sanitar_enabled',array('el'=>'checkbox','descr'=>'При выявлении на терминале повышенной температуры терминал будет переведен в режим СанОбработки')) ;
	SETUP_add_rec_to_site_setting($id_sect,"Порог температуры",38,'LS_sanitar_temp',array('descr'=>'Температура, выше которой терминал будет переведен в режим СанОбработки')) ;

	SETUP()->reg_event_lister('examination_result_data_read','SANITAR','on_event_examination_result_data_read') ;         //
	SETUP()->reg_event_lister('server_power_on_before_save_status','SANITAR','on_event_server_power_on_before_save_status') ;         //
	SETUP()->reg_event_lister('server_operation_exec','SANITAR','on_event_server_operation_exec') ;         //
	SETUP()->reg_event_lister('rmv_main_panel_view','SANITAR','on_event_rmv_main_panel_view') ;         //

  SETUP()->reg_report('Служебные отчеты','aspmo_reports/report_terminal_sanitar.php') ;         //


	$pattern=array() ;
	$pattern['table_title']				= 	'Лог обработки sanitar' ;
	$pattern['use_clss']				  = 	'369' ;
	$pattern['table_name']				= 	'log_terminal_sanitar' ;
	create_table_by_pattern($pattern) ;

	// добавить возможность регистрации во вложенных меню!!!
	//SETUP()->reg_menu_item('main','FaceID','/cab/sanitar/') ;

	//SETUP()->reg_ext('sanitar','FaceID') ;

 }

    /*0=>'Выключен',
      1=>'Сон',
      2=>'Готов к работе',
      3=>'Идут измерения',
      4=>'check_status',
      5=>'reboot',
      6=>'режим санобработки',
      8=>'Нет связи',
      9=>'Неисправен' */

	function on_event_examination_result_data_read(&$data,$rec_personal,$rec_mo)
	{ if($GLOBALS['LS_sanitar_enabled'] and $GLOBALS['LS_sanitar_temp']>0 and isset($data['args']['data']['thermometer']))
    $cur_value=(float)$data['args']['data']['thermometer'] ;
    $limit_value=(float)$GLOBALS['LS_sanitar_temp'] ;
    if ($cur_value>=$limit_value)
    {	ob_start();
	    echo 'Температура в МО: '.$cur_value.'<br>' ;
	    echo 'Критерий температуры: '.$limit_value.'<br>' ;
      $rec_terminal=DEVICE()->get_terminal_by_id($rec_mo['terminal_id']) ;
      // команда терминалу уйти в статус СОН на дезинфекцию
      $result=DEVICE()->terminal_send_data($rec_terminal,'set_sleep',['mode'=>'disinfection'],array('debug'=>1)) ;
      if ($result['status']==200) ESMO()->terminal_save($rec_terminal['pkey'],array('status'=>6)) ;
      else                        ESMO()->terminal_save($rec_terminal['pkey'],array('status'=>8)) ;
      echo $result['debug'] ;

      $this->reg_log(['doctor_id'=>$rec_mo['doctor_id'],
                      'group_id'=>$rec_terminal['parent'],
                      'mo_id'=>$rec_mo['pkey'],
                      'terminal_id'=>$rec_mo['terminal_id'],
                      'terminal_pkey'=>$rec_terminal['pkey'],
                      'status'=>1,
                      'obj_name'=>'',
                     ]);

			$text=ob_get_clean();
			LOGS()->reg_log('SANITAR_on_event_examination_result_data_read',$text,array('reffers'=>array($rec_mo['_reffer'],$rec_terminal['_reffer'])));
    }
	}

  function on_event_server_operation_exec(&$operation,&$data_in,&$data_out)
  {
      ob_start() ;
      $terminal_id=$data_in['args']['id']['terminal'] ;
      $rec_terminal=DEVICE()->get_terminal_by_id($terminal_id) ;
      echo 'operation=<strong>'.$operation.'</strong><br>' ;
      echo 'terminal_id=<strong>'.$terminal_id.'</strong><br>' ;
      echo 'terminal_status=<strong>'.$rec_terminal['status'].'</strong><br>' ;
      //echo '<strong>data in</strong><br>' ;
      //damp_array($data_in,1,-1);
      // если прилетело что
      if ($operation=='disinfection_complete') $this->disinfection_complete($rec_terminal,$data_in,$data_out) ;
      else if ($rec_terminal['status']==6) switch($operation)
      {
          case 'power_on':
          break ;
          default:            $this->other_operation($operation,$rec_terminal,$data_in,$data_out) ; break ;
      }

      echo '<strong>data out</strong><br>' ;
      damp_array($data_out,1,-1);
      $text=ob_get_clean() ;
      LOGS()->reg_log('SANITAR_on_event_server_operation_exec',$text,array('reffers'=>array($rec_terminal['_reffer'])));
  }

  function on_event_server_power_on_before_save_status(&$terminal_data,&$result)
  { $rec_terminal=DEVICE()->get_terminal_by_id($terminal_data['id'])  ;
    // если текущий статус терминала - санобработка
    if ($rec_terminal['status']==6)
    {   ob_start() ;
        $terminal_data['status']=6 ; // меняем 2 на 6
        // добавляем поля в стандартный ответ на power_on
        $result['args']['data']['active']=false ;
        $result['args']['data']['mode']='disinfection' ;
        echo '<div class="red">Терминал в режиме санобработки, переводим терминал в сон</div>';

        $xmpp_message=array() ;
        $xmpp_message['notife']='alert' ;
        $xmpp_message['notife_text']='Терминал '.$terminal_data['id'].': включение заблокировано режимом санобработки' ;
        $xmpp_message['time']=date('d.m.y H:i:s') ; //  подгатавливаем массив информации по всем терминалам текущей группы
        $xmpp_message['from']='i_sanitar::on_event_server_power_on_before_save_status' ;

        ESMO()->reg_monitor_mess($rec_terminal['parent'],$xmpp_message) ;
        $text=ob_get_clean() ;
        echo $text ;
        LOGS()->reg_log('SANITAR_on_event_server_power_on_before_save_status',$text,array('reffers'=>array($rec_terminal['_reffer'])));

        $this->reg_log(['terminal_id'=>$rec_terminal['id'],
                         'terminal_pkey'=>$rec_terminal['pkey'],
                         'group_id'=>$rec_terminal['parent'],
                         'status'=>3,
                         'obj_name'=>'power_on',
                         ]);

    }
  }

  // с терминала прилетел флаг что санобработка завершена - необходимо перевести терминал в режим "готов к работе2
  function disinfection_complete($rec_terminal,&$data_in,&$data_out)
  {
     DEVICE()->terminal_save($rec_terminal['pkey'],['status'=>2],array('debug'=>2)) ;

     $log_id=$this->reg_log(['terminal_id'=>$rec_terminal['id'],
                             'terminal_pkey'=>$rec_terminal['pkey'],
                             'group_id'=>$rec_terminal['parent'],
                             'status'=>2,
                            ]);


      if ($data_in['args']['data']['signature']['image'])
    		{   echo 'Обнаружено signature image - сохраняем на диск<br>' ;
    			$options=array('check_directory'=>1,'no_check_exist_file'=>1,'base_dir'=>'/public/sanitar/sign_image/') ;
    			$img_dir=ENGINE()->get_dir_by_id($log_id,'relative','_DTW.png',$options) ;
    			echo 'Изображение подписи сохранено в <strong>'.$img_dir.'</strong><br>' ;
    		  if ($img_dir) $this->save_send_photo($data_in['args']['data']['signature']['image'],$img_dir) ;
    		}

    	if ($data_in['args']['data']['signature']['data'])
    		{  echo 'Обнаружено signature data - сохраняем на диск<br>' ;
    		   $options=array('check_directory'=>1,'no_check_exist_file'=>1,'base_dir'=>'/public/sanitar/sign_data/') ;
    		   $data_dir=ENGINE()->get_dir_by_id($log_id,'relative','.data',$options) ;
    		   echo 'Сигнатура подписи сохранена в <strong>'.$data_dir.'</strong><br>' ;
    		   if ($data_dir) file_put_contents(_DIR_TO_ROOT.$data_dir,serialize($data_in['args']['data']['signature']['data'])) ;
        }

      if ($data_in['args']['data']['photo'])
      {   echo 'Обнаружено photo - сохраняем на диск<br>' ;
          // сохраняем фото начала МО
          $options=array('check_directory'=>1,'no_check_exist_file'=>1,'base_dir'=>'/public/sanitar/photo/') ;
          $img_dir=ENGINE()->get_dir_by_id($log_id,'relative','.jpg',$options) ;
          $this->save_send_photo($data_in['args']['data']['photo'],$img_dir) ;
      }

     LOGS()->reg_log('SANITAR_disinfection_complete','',array('data'=>$data_in));

     $data_out['date'] = date('Y-m-d H:i:s');
     $data_out['args']['terminal_type']=$rec_terminal['terminal_type'] ;
     $data_out['args']['id']['terminal']=$rec_terminal['id'] ; ;
     $data_out['args']['message']='success' ; // только success иначе теринал будет досить сервер
     $data_out['args']['data']['complex']=$GLOBALS['LS_setting_system_name'] ;
     $data_out['args']['data']['terminal_pkey']=$rec_terminal['pkey'] ;
  }

  function other_operation($operation,$rec_terminal,&$data_in,&$data_out)
  { $data_out['date'] = date('Y-m-d H:i:s');
    $data_out['args']['terminal_type']=$rec_terminal['type'] ;
    $data_out['args']['id']['terminal']=$rec_terminal['id'] ;
    $data_out['args']['data']['timeout']=5000 ; ;
    $data_out['args']['data']['timeout_mo']=180 ; ;
    $data_out['args']['data']['mode']='disinfection' ; ;
    $data_out['args']['data']['reason']='Терминал находится в режиме дезинфекции' ; ;

    $this->reg_log(['terminal_id'=>$rec_terminal['id'],
                     'terminal_pkey'=>$rec_terminal['pkey'],
                     'group_id'=>$rec_terminal['parent'],
                     'status'=>3,
                     'obj_name'=>$operation,
                     ]);

    //DEVICE()->device_send_async_cmd($rec_terminal['pkey'],'set_sleep',array('pause'=>5)) ;
  }

  function reg_log($data)
  {   $data['clss']=369 ;
      $data['parent']=1 ;
      $data['indx']=1 ;
      if (!$data['doctor_id']) $data['doctor_id']=0 ;
      $id=adding_rec_to_table('log_terminal_sanitar',$data) ;
      return($id) ;
  }

    function save_send_photo(&$data,$img_name,$options=array())
    	{ $arr=explode(';',$data) ; // ([0] => data:image/png [1] => base64,iVBOR......==)
    	  if (_sizeof($arr)==1) $img_string=base64_decode($data) ;  //echo $img_string ;
    	  else
    	  { $arr2=explode(',',$arr[1]) ; // ([0] => base64 [1] => iVBOR......==)
    	    $img_string=base64_decode($arr2[1]) ;
    	  }
    	  $img_dir=$img_name ;
    	  file_put_contents(_DIR_TO_ROOT.$img_dir,$img_string) ;

    	  // коррекция изображения с аклотестера
    	  if ($options['img_rotare']) ENGINE()->rotare_image(_DIR_TO_ROOT.$img_dir,_DIR_TO_ROOT.$img_dir,$options['img_rotare']) ;

    	  $data="<img width=150 zoom src='"._MAIN_PROTOCOL._MAIN_DOMAIN.$img_dir."'>" ; // ддя сохранения в журнале
    	}

    	function on_event_rmv_main_panel_view()
      {   ob_start() ;
          //$recs_terminals=DEVICE()->get_list_terminals(0,'mt','status=6') ;
          $recs_terminals=execSQL('select t1.*,t2.obj_name as group_name 
                                   from obj_site_account t1
                                   left join obj_site_account t2 on t2.pkey=t1.parent  
                                   where t1.clss=203 and t1.status=6') ;
          //print_2x_arr($recs_terminals);
          if (_sizeof($recs_terminals)) foreach($recs_terminals as $recs_terminal)
          { ?><div style="font-size:20px;text-align:center;margin:20px 0;color:red;">Терминал <?echo $recs_terminal['id'] ?>: требуется дезинфекция</div><?

          }
          $text=ob_get_clean() ;
          $result['text']=$text ;
          return($result) ;


      }


}

?>
