<?
include_once(_DIR_EXT.'/HTML/c_page_XML_AJAX.php') ;
include_once(_DIR_EXT.'/aspmo_rmt/i_mrt.php') ;
class c_page_ajax extends c_page_XML_AJAX
{

    //==========================================================================================================================================================================
    // Работа с ТЕРМИНАЛАМИ
    //==========================================================================================================================================================================

    function terminal_save()
     {  $alert='' ;
        if (_sizeof($_POST['term']) and $_POST['terminal_id'])
        {   if ($_POST['term']['parent']==1) $alert='Нельзя использовать корневую группу ЭСМО для добавления терминала' ;
            $check_id=execSQL_van('select  * from obj_site_account where  clss=203 and id="'.$_POST['term']['id'].'" and pkey!='.$_POST['terminal_id'].' and virt!=1') ;
            if ($check_id['pkey']) $alert='Указанный ID терминала уже используется' ;
            $check_ip=execSQL_van('select  * from obj_site_account where  clss=203 and ip="'.$_POST['term']['ip'].'" and pkey!='.$_POST['terminal_id'].' and virt!=1') ;
            if ($check_ip['pkey']) $alert='Указанный IP терминала уже используется' ;
            if (!$alert)
            { ESMO()->terminal_save( $_POST['terminal_id'],$_POST['term']) ;
              $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
              return(1) ;
            }
            else $this->add_element('show_notife',$alert,array('color'=>'red')) ;
        }
        return(($alert)? 0:1) ;

         //$this->add_element('show_modal_window','HTML') ; //damp_array($res) ;

     }


    function terminal_enabled()
    {   if ($this->terminal_save())
        { ?><div class="center"><strong>Подтвердите разблокировку терминала</strong><br><br>
          <button class="button v2" cmd="esmo_setting/terminal_enabled_apply" terminal_id="<?echo $_POST['terminal_id']?>">Разблокировать</button>
          <button class="cancel">Отмена</button>
          </div>
         <?
         $this->add_element('show_modal_window','HTML',array('title'=>'Разблокировка терминала')) ;
        }
    }

    function terminal_enabled_apply()
    {  execSQL_update('update obj_site_account set enabled=1 where pkey='.$_POST['terminal_id']) ;
       $result=DEVICE()->send_terminal_command($_POST['terminal_id'],'reboot',array('debug'=>0,'no_check_cur_status'=>1,'async'=>0)) ;
       $this->add_element('show_notife','Терминал разблокирован и отправлен в перезагрузку',array('type'=>'info')) ;
       $this->update_page=1 ;
    }

    function terminal_disabled()
    {   $this->terminal_save() ;
        ?><div class="center"><strong>Подтвердите блокировку терминала</strong><br><br>
          <button class="button v2" cmd="esmo_setting/terminal_disabled_apply" terminal_id="<?echo $_POST['terminal_id']?>">Заблокировать</button>
          <button class="cancel">Отмена</button>
          </div>
        <?
        $this->add_element('show_modal_window','HTML',array('title'=>'Блокировка терминала')) ;
    }

    function terminal_disabled_apply()
    {  execSQL_update('update obj_site_account set enabled=0 where pkey='.$_POST['terminal_id']) ;
       $this->add_element('show_notife','Терминал заблокирован',array('type'=>'info')) ;
       $this->update_page=1 ;
    }

    function terminal_delete()
    {   ?><div class="center"><strong>Подтвердите удаление терминала из ЭСМО</strong><br><br>
          <button class="button v2" cmd="esmo_setting/terminal_delete_apply" terminal_id="<?echo $_POST['terminal_id']?>">Удалить</button>
          <button class="cancel">Отмена</button>
          </div>
        <?
        $this->add_element('show_modal_window','HTML',array('title'=>'Удаление терминала')) ;
    }

    function terminal_delete_apply()
    {  execSQL_update('delete from obj_site_account where pkey='.$_POST['terminal_id']) ;
       $this->add_element('show_notife','Терминал удален',array('type'=>'info')) ;
       $this->update_page=1 ;
    }

    function exec_terminal_cmd()
     { $terminal_rec=ESMO()->get_terminal_by_pkey($_POST['terminal_id']) ;
       $result=array() ;
       if ($terminal_rec['pkey'])
       {   switch($_POST['terminal_action'])
           { case 'check_status':  $result=DEVICE()->send_terminal_command($terminal_rec['pkey'],'check_status',array('debug'=>1,'no_check_cur_status'=>1)) ;
                               break ;
             case 'sleep':         $result=DEVICE()->send_terminal_command($terminal_rec['pkey'],'set_sleep',array('debug'=>1,'no_check_cur_status'=>1,'async'=>0)) ;
                               break ;
             case 'fault':         $result=DEVICE()->send_terminal_command($terminal_rec['pkey'],'set_fault',array('debug'=>1,'no_check_cur_status'=>1)) ;
                               break ;
             case 'reboot':        $result=DEVICE()->send_terminal_command($terminal_rec['pkey'],'reboot',array('debug'=>1,'no_check_cur_status'=>1,'async'=>0)) ;
                               break ;
             case 'poweroff':      $result=DEVICE()->send_terminal_command($terminal_rec['pkey'],'poweroff',array('debug'=>1,'no_check_cur_status'=>1)) ;
                               break ;
       }

           //damp_array($result,1,-1) ;
           echo $result['debug'] ;

       if (!$_POST['no_view_req'])
       {   ?><div class="center"><button class="cancel">Закрыть</button></div><?
           $this->add_element('show_modal_window','HTML',array('title'=>'Отправка команды на терминал','width'=>'800px')) ; //damp_array($res) ;
       }
       else $this->add_element('show_notife','Команда отправлена на терминал '.$terminal_rec['id'],array('type'=>'info')) ;

           // обновляем таблицу терминалов
           ob_start() ;
            include_once(_DIR_EXT.'/esmo_setting/panel_terminals.php')  ;
            $recs[]=ESMO()->get_terminal_by_pkey($terminal_rec['pkey']) ;
            panel_terminals($recs,array('only_tr_terminal'=>1)) ;
            $text=ob_get_clean() ;
            $this->add_element('term_'.$terminal_rec['pkey'],$text) ;
       }

     }

    function terminal_cert_check () {
        $ca_path = $_POST['ca_cert'];
        $server_cert = $_POST['server_cert'];
        $server_key = $_POST['server_key'];

        $terminal_address = $_POST['terminal_address'];
        $terminal_port = $_POST['terminal_port'];
        $this->add_element('show_modal_window','HTML', array("title" => 'Проверка подключения к терминалу', "width" => 1280)) ;
        echo "<div>Получение сертификата от терминала</div>";
        $g = stream_context_create (array("ssl" => array(
          "capture_peer_cert" => true,
          "cafile" => $ca_path,
          "verify_peer_name" => false,
          "verify_peer" => false,
          "local_cert" => $server_cert,
          "local_pk" => $server_key,
        )));
        $errno = 0;
        $errstr = '';
        echo '<div class="error">';
        $r = stream_socket_client("ssl://$terminal_address:$terminal_port", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $g);
        if (!$r) {
          echo "<div>Ошибка подключения</div>";
          if ($errno) { ?>
            Код: <?=$errno?><br>
            Описание: <?=$errstr?></br>
            <?php
          }
          echo "</div>";
        } else {
          $cont = stream_context_get_params($r);
          $cert_data = openssl_x509_parse($cont["options"]["ssl"]["peer_certificate"]);
          echo "</div>";
          $this->dump_certificate_data($cert_data);
          echo "Соединение успешно установлено";
        }
      }

      function dump_certificate_data($cert_data) { ?>
        <table>
          <?php foreach ($cert_data as $name => $value) { ?>
          <tr>
            <td style="width: 110px;"><?=$name?></td>
            <td>
              <? if (is_array($value)) {
                echo json_encode($value, JSON_PRETTY_PRINT);
              } else {
                echo $value;
              } ?>
            </td>
          </tr>
          <?php } ?>
        </table>
        <?php
      }

      function ca_check() {
        $this->certificate_check($_POST['ca_cert']) ;
      }

      function server_cert_check() {
        $this->certificate_check($_POST['server_cert']) ;
      }

      function server_key_check () {
        $this->add_element('show_modal_window','HTML', array("title" => 'Проверка пары сертификат/закрытый ключ')) ;
        $cert_path = $_POST['server_cert'] ;
        $key_path = $_POST['server_key'] ;
        $cert = file_get_contents($cert_path) ;
        $key = file_get_contents($key_path) ;
        if (openssl_x509_check_private_key($cert, $key)) {
          echo "Проверка выполнена. Сертификат и ключ загружен успешно" ;
        } else {
          echo '<div class="error">Ошибка не удалось загрузить сертификат и ключ, либо они не соответсвуют друг другу</div>' ;
        }
      }

      function certificate_check($path) {
        $this->add_element('show_modal_window','HTML', array("width" => 1280, "title" => $path)) ;
        $cert_file = file_get_contents($path) ;
        $cert_data = openssl_x509_parse($cert_file) ;
        $this->dump_certificate_data($cert_data);
      }



  //==========================================================================================================================================================================
  // Работа с ГРУППАМИ
  //==========================================================================================================================================================================

  function group_create()
  {
    $res=PERSONAL()->group_create(array('obj_name'=>$_POST['new_org_name'])) ;
    $this->add_element('update_page',1) ;
    // перегружаем свои списки
    reboot_engine() ;
    // даем команду на обновление остальным клиентам
    ENGINE()->send_cmd_reboot_client() ;
  }

  function group_delete()
  { $arr=array() ;
    if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $group_id)
    { $rec_group=PERSONAL()->get_group_by_id($group_id) ;
      if ($rec_group['pkey'])
      {   // сначала удаляем все связи с группой
          delete_link($rec_group['_reffer']) ;
          // добавляем группу в массив на удаление
          $arr[]=$rec_group['pkey'] ;
      }
    }
    if (_sizeof($arr)) PERSONAL()->group_delete(implode(',',$arr)) ;
    $this->add_element('update_page',1) ;
  }

  function group_medic_create()
  { $id=ESMO()->group_medic_create(array('obj_name'=>$_POST['new_org_name'],'clss'=>254)) ;
    if ($id) $this->add_element('update_page',1) ;
    else  $this->add_element('show_modal_window','HTML', array("title" => 'group_medic_create')) ;
    // перегружаем свои списки
    //reboot_engine() ;
    // даем команду на обновление остальным клиентам
    //ENGINE()->send_cmd_reboot_client() ;
  }

  function group_medic_delete()
  { $arr=array() ;
    if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $group_id)
    { $rec_group=_IL('IL_group_medic')->recs[$group_id] ;
      if ($rec_group['pkey'])
      {   // сначала удаляем все связи с группой
          delete_link($rec_group['_reffer']) ;
          // добавляем группу в массив на удаление
          $arr[]=$rec_group['pkey'] ;
          ESMO()->group_medic_delete($rec_group['id']) ;
      }
    }
    $this->add_element('update_page',1) ;

    // перегружаем свои списки
    reboot_engine() ;
    // даем команду на обновление остальным клиентам
    ENGINE()->send_cmd_reboot_client() ;
  }

  function group_personal_delete_param()
  {
      damp_array($_POST) ;
      ?><br><div class="center"><button class="cancel">Закрыть</button></div><?
      $this->add_element('show_modal_window','HTML',array('title'=>'Удаление из группы','after_close_update_page'=>1)) ;
  }


    function group_personal_add_param()
       {   //damp_array($_POST) ;
           $res=1 ;
           switch($_POST['type_id'])
           { case 1: $res=$this->add_work_to_group() ; break ;
             case 2: $res=$this->add_org_to_group() ; break ;
             case 3: $res=$this->add_org_otdel_to_group() ; break ;
             case 4: $res=$this->add_usl_to_group() ; break ;
           }
           if ($res)
           { PERSONAL()->group_personal_change($_POST['group_id']) ;
             ?><br><div class="center"><button class="cancel">Закрыть</button></div><?
             $this->add_element('show_modal_window','HTML',array('title'=>'Добавление в группу','after_close_update_page'=>1)) ;
           }

       }

  function group_personal_change($group_id)
  {
      PERSONAL()->group_personal_change($group_id) ;
  }

  function add_work_to_group()
  { if (_sizeof($_POST['work_ids'])) foreach($_POST['work_ids'] as $id)
    {  $rec=_IL('IL_works')->recs[$id] ;
       if ($rec['pkey'])
       { create_link($rec['_reffer'],$_POST['group_reffer']) ;
         echo 'Должность "<strong>'.$rec['obj_name'].'</strong>" успешно добавлена в группу<br>' ;
       }
    }
    return(_sizeof($_POST['work_ids'])) ;
  }
  function add_usl_to_group()
  { if (_sizeof($_POST['usl_ids'])) foreach($_POST['usl_ids'] as $id)
    {  $rec=_IL('IL_personals_viewer')->recs[$id] ;
       if ($rec['pkey'])
       { create_link($rec['_reffer'],$_POST['group_reffer']) ;
         echo 'Выборка "<strong>'.$rec['obj_name'].'</strong>" успешно добавлена в группу<br>' ;
       }
    }
    return(_sizeof($_POST['usl_ids'])) ;
  }

  function add_org_to_group()
  { if (_sizeof($_POST['org_ids'])) foreach($_POST['org_ids'] as $id)
    {  $rec=PERSONAL()->get_org_by_id($id) ;
       if ($rec['pkey'])
       { create_link($rec['_reffer'],$_POST['group_reffer']) ;
         echo 'Организация "<strong>'.$rec['obj_name'].'</strong>" успешно добавлена в группу<br>' ;
       }
    }
    return(_sizeof($_POST['org_ids'])) ;
  }

  function add_org_otdel_to_group()
  { if (_sizeof($_POST['otdel_ids'])) foreach($_POST['otdel_ids'] as $id)
    {  $rec=PERSONAL()->get_org_by_id($id) ;
       if ($rec['pkey'])
       { create_link($rec['_reffer'],$_POST['group_reffer']) ;
         echo 'Подразделение "<strong>'.$rec['obj_name'].'</strong>" успешно добавлено в группу<br>' ;
       }
    }
    return(_sizeof($_POST['org_ids'])) ;
  }

  function add_propusk_to_group()
  {
    $rec=PERSONAL()->get_personal_by_propusk($_POST['propusk']) ;
    if ($rec['pkey']) { create_link($rec['_reffer'],$_POST['group_reffer']) ;
                        //$this->add_element('update_page',1) ;
                      }
    else $this->add_element('show_event','Пропуск не найден') ;
    $this->add_element('show_modal_window','HTML',array('title'=>'Выбор группы сотрудника')) ;
  }

  function add_personal_to_group()
  { if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $personal_id)
    {
        $rec_personal=PERSONAL()->get_personal_by_id($personal_id) ;
        if ($rec_personal['pkey'])
        { create_link($rec_personal['_reffer'],$_POST['group_reffer']) ;
          echo '<strong>'.$rec_personal['obj_name'].'</strong> - Добавлен<br>' ;
        }
        $this->add_element('show_modal_window','HTML',array('title'=>'Добавление сотрудников в группу','after_close_go_url'=>$_POST['update_url'])) ;
    }
    else
    { echo '<div class="alert">Не выбран ни один сотрудник</div><br>' ;
      $this->add_element('show_modal_window','HTML',array('title'=>'Добавление сотрудников в группу')) ;
    }
    ?><div class="center"><button class="cancel">Закрыть</button></div><?

  }

  function delete_item_from_group()
  { if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $item_reffer) delete_link($item_reffer,$_POST['group_reffer']) ;
    $this->add_element('update_page',1) ;
    PERSONAL()->group_personal_change($_POST['group_id']) ;
  }

 // тут полная хрень со вставкой из таблицы данных
   function set_personal_group()
   { $checked=$_POST['checked'] ;
     if ($checked) { create_link($_POST['personal_reffer'],$_POST['group_reffer']) ; $this->add_element('show_notife','Сотрудник добавлен в группу') ; }
     else          { delete_link($_POST['personal_reffer'],$_POST['group_reffer']) ; $this->add_element('show_notife','Сотрудник удален из группы') ; }

     $this->add_element('show_modal_window','HTML',array('title'=>'Выбор группы сотрудника')) ;
   }

    //==========================================================================================================================================================================
     // РАБОТА СО СПИСКАМИ - правила МО
     //==========================================================================================================================================================================

     function list_rec_group_of_disease_rules_save()
     {   //damp_array($_POST,1,-1) ;
         $res[]=_IL('IL_group_medic')->rec_update($_POST['group_id'],$_POST['rule']) ;
         $this->add_element('update_page',1) ;
         //$this->add_element('show_modal_window','HTML',array('title'=>'Выбор группы сотрудника')) ;
     }

     function list_rec_rules_save()
     { ob_start() ;
       unset($_POST['new_rec']) ;
       //damp_array($_POST,1,-1) ;
       if (_sizeof($_POST['rec'])) foreach($_POST['rec'] as $id=>$post_rec)
       { $rec=$this->convert_rules_post_data_to_rec($post_rec) ;
         $arr_changes=array() ;
         foreach($rec as $field=>$value) if (_IL('IL_dg')->recs[$id][$field]!=$value) switch($field)
         {   case "s":  $arr_changes[]='Контроль сист.давление: '.(($value)? 'Включено':'Выключено') ; break ;
             case "s_min":  $arr_changes[]='Минимальное сист.давление: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "s_max":  $arr_changes[]='Максимальное сист.давление: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "d":  $arr_changes[]='Контроль дист.давление: '.(($value)? 'Включено':'Выключено') ; break ;
             case "d_min":  $arr_changes[]='Минимальное дист.давление: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "d_max":  $arr_changes[]='Максимальное дист.давление: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "p":  $arr_changes[]='Контроль пульса: '.(($value)? 'Включено':'Выключено') ; break ;
             case "p_min":  $arr_changes[]='Минимальный пульс: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "p_max":  $arr_changes[]='Максимальный пульс: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "t":  $arr_changes[]='Контроль температуры: '.(($value)? 'Включено':'Выключено') ; break ;
             case "t_min":  $arr_changes[]='Минимальная температура: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "t_max":  $arr_changes[]='Максимальная температура: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "age_min":  $arr_changes[]='Минимальный возраст: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "age_max":  $arr_changes[]='Максимальный возраст: '._IL('IL_dg')->recs[$id][$field].' => '.$value ;  break ;
             case "a":  $arr_changes[]='Контроль алкоголя: '.(($value)? 'Включено':'Выключено') ; break ;
             case "n":  $arr_changes[]='Контроль ЦНС: '.(($value)? 'Включено':'Выключено') ; break ;
             case "v":  $arr_changes[]='Контроль внимания: '.(($value)? 'Включено':'Выключено') ; break ;
             default:  $arr_changes[]=$field.": "._IL('IL_dg')->recs[$id][$field].' => '.$value ;   ;

         }
         //damp_array($arr_changes,1,-1) ;
         //damp_array(_IL('IL_dg')->recs[$id],1,-1) ;
         $res[]=_IL('IL_dg')->rec_update($id,$rec) ;

         LOGS()->reg_log('Изменение критериев МО',_IL('IL_dg')->recs[$id]['obj_name'],array('data'=>$arr_changes)) ;
       }
       //if (_sizeof($res)) foreach($res as $res_info) if ($res_info['found'] and $res_info['update']) $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;

      $text=ob_get_clean() ;
       if ($text) $this->add_element('show_modal_window','HTML',array('title'=>'Изменение критериев МО')) ;
       else $this->add_element('update_page',1) ;
     }

     function list_rec_rules_delete()
     { if (_sizeof($_POST['rec'])) foreach($_POST['rec'] as $post_rec) if ($post_rec['check']) $res[]=_IL('IL_dg')->rec_delete($post_rec['check']) ;
       $this->add_element('update_page',1) ;
     }

     function list_rec_rules_copy()
     { if (_sizeof($_POST['rec'])) foreach($_POST['rec'] as $post_rec) if ($post_rec['check']) $res[]=_IL('IL_dg')->rec_copy($post_rec['check']) ;
       $this->add_element('update_page',1) ;
     }

     function list_rec_rules_create()
     { unset($_POST['rec']) ;
       if (_sizeof($_POST['new_rec']))
       { $rec=$this->convert_rules_post_data_to_rec($_POST['new_rec']) ;
         $res=_IL('IL_dg')->rec_create($rec) ;
         if ($res['pkey']) $this->add_element('update_page',1) ;
           //damp_array($_POST,1,-1) ;
           //damp_array($rec,1,-1) ;
         //$this->add_element('show_modal_window','HTML',array('title'=>'Выбор группы сотрудника')) ;

       }
     }

     function convert_rules_post_data_to_rec($rec_post)
     {   $rec=array() ; $title=array() ;
         if ($rec_post['age']) list($rec['age_min'],$rec['age_max'])=explode('-',$rec_post['age']) ;
         if ($rec_post['_s']) { list($rec['s_min'],$rec['s_max'])=explode('-',$rec_post['s']) ; $rec['s']=1 ; } else $rec['s']=0 ;
         if ($rec_post['_d']) { list($rec['d_min'],$rec['d_max'])=explode('-',$rec_post['d']) ; $rec['d']=1 ; } else $rec['d']=0 ;
         if ($rec_post['_t']) { list($rec['t_min'],$rec['t_max'])=explode('-',$rec_post['t']) ; $rec['t']=1 ; } else $rec['t']=0 ;
         if ($rec_post['_p']) { list($rec['p_min'],$rec['p_max'])=explode('-',$rec_post['p']) ; $rec['p']=1 ; } else $rec['p']=0 ;
         if ($rec_post['_a']) $rec['a']=1 ; else $rec['a']=0 ;
         if ($rec_post['_n']) $rec['n']=1 ; else $rec['n']=0 ;
         if ($rec_post['_v']) $rec['v']=1 ; else $rec['v']=0 ;
         if ($rec_post['name']) $rec['obj_name']=$rec_post['name'] ;
         if ($rec_post['method']) $rec['method']=$rec_post['method'] ; else $rec['method']=0 ;
         if (isset($rec_post['_esmo_groups']) and _sizeof($rec_post['_esmo_groups'])) $rec['esmo_groups']=implode(',',$rec_post['_esmo_groups']) ; else $rec['esmo_groups']='' ;
         if ($rec['age_min']) $title['age']='от '.$rec['age_min'].' лет' ;  else $rec['age_min']=0 ;
         if ($rec['age_max']) $title['age'].=' до '.$rec['age_max'].' лет' ; else $rec['age_max']=0 ;
         if (isset($rec_post['time_from'])) { if ($rec_post['time_from']!="") { $rec['time_from']=strtotime($rec_post['time_from']) ; $title['time']='c '.$rec_post['time_from'] ; }
                                              //else  $rec['time_from']=0 ;
                                            }
         if (isset($rec_post['time_to']))   { if ($rec_post['time_to']!="") {$rec['time_to']=strtotime($rec_post['time_to'].' 23:59:59'); $title['time'].=' по '.$rec_post['time_to'] ; }
                                              //else  $rec['time_to']=0 ;
                                            }
         if (isset($rec_post['working'])) { $rec['working']=$rec_post['working'] ; if ($rec_post['working']) $title[]=_IL('IL_works')->recs[$rec_post['working']]['obj_name'] ; }
         if (isset($rec_post['group'])) { $rec['group_id']=$rec_post['group'] ; if ($rec_post['group']) $title[]=_IL('IL_groups')->recs[$rec_post['group']]['obj_name'] ; }
         //$rec['obj_name']=(_sizeof($title))? implode(" \n ",$title):'Общее правило' ;

         return($rec) ;
     }


     function get_select_otdels_of_org()
     {
         $recs=execSQL_row('select pkey,obj_name from obj_site_personals where parent='.$_POST['org_id'].' and clss=208 and enabled=1') ;
         ob_start() ;
         ?>
            <section class="col col-4 val" id="val_otdels">
                                             <label class="label">Выберите подразделение:</label>
                                             <label class="select">
                                             <? if (_sizeof($recs)){?>    <select name="otdel_ids[]" multiple="multiple">
                                                             <? foreach($recs as $id=>$name) {?><option value="<?echo $id?>"><?echo $name?></option><?}?>
                                                 </select><?} else echo 'Нет подразделений';?>
                                             </label>
                                         </section>

         <?
         $text=ob_get_clean() ;
         $this->add_element($_POST['target_id'],$text) ;
     }


    function save_group()
       {
         //damp_array($_POST,1,-1) ;
         if (_sizeof($_POST['recs_group'])) foreach($_POST['recs_group'] as $group_id=>$rec_group)
         {
           if (isset($rec_group['groups_AD']))
           {   execSQL_update('update obj_site_list set group_id=0 where group_id='.$group_id.' and parent='._IL('IL_ad_groups')->list_id.' and clss=20') ;
               foreach($rec_group['groups_AD'] as $group_AD_id) execSQL_update('update obj_site_list set group_id='.$group_id.' where id='.$group_AD_id.' and parent='._IL('IL_ad_groups')->list_id.' and clss=20',array('debug'=>2)) ;
               unset($rec_group['groups_AD']) ;
           }
           //damp_array($rec_group,1,-1) ;
           $settings=unserialize(execSQL_value('select settings from obj_site_account where pkey='.$group_id)) ;
             //$settings=array() ;
           if (_sizeof($rec_group['settings'])) foreach($rec_group['settings'] as $id=>$value) $settings[$id]=$value ;
           $rec_group['settings']=$settings ;
           //damp_array($rec_group,1,-1) ;
           if (_sizeof($rec_group)) update_rec_in_table('obj_site_account',$rec_group,'pkey='.$group_id,array('debug'=>2)) ;

         }
         //$this->add_element('success','modal_window') ;
         $this->add_element('update_page',1) ;
         //if (!$_POST['no_reload_page']) $this->add_element('update_page',1) ;
         //else                      $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;

       }


    //==========================================================================================================================================================================
    // РАБОТА С ПРОФИЛЯМИ ТЕРМИНАЛОВ
    //==========================================================================================================================================================================

    function terminal_profile_save()
    {
        $empty_rec=['obj_name'=>"",'video'=>0,'tonometer'=>0,'thermometer'=>0,'alcotester'=>0,'pupilometer'=>0];
        if (_sizeof($_POST['profile'])) {
            foreach ($_POST['profile'] as $key=>$rec) {
                $data=$empty_rec;
                if ($rec['name']) $data['obj_name']=$rec['name'];
                if ($rec['video']) $data['video']=$rec['video'];
                if ($rec['tonometer']) $data['tonometer']=$rec['tonometer'];
                if ($rec['thermometer']) $data['thermometer']=$rec['thermometer'];
                if ($rec['alcotester']) $data['alcotester']=$rec['alcotester'];
                if ($rec['pupilometer']) $data['pupilometer']=$rec['pupilometer'];
                _IL('IL_term_prof')->rec_update($key,$data);
            }
            $this->update_page=1;
        }
    }

    function terminal_profile_add()
    {
        _IL('IL_term_prof')->rec_create([],257);
        $this->update_page=1;
    }

    function terminal_profile_delete()
    {
        if (_sizeof($_POST['profile_id'])) {
            foreach ($_POST['profile_id'] as $key=>$value){
                _IL('IL_term_prof')->rec_delete($key);
            }
            $this->update_page=1;
        }
    }

    //==========================================================================================================================================================================
    // РАБОТА СО СПИСКАМИ
    //==========================================================================================================================================================================

    function list_element_create()
    {
        $list_obj=_IL($_POST['list_id']) ;
        if (is_object($list_obj))
        {
            $list_obj->append_rec_to_list(array('obj_name'=>$_POST['element_value'])) ;
            $this->update_page=1 ;
        }
    }

    function list_element_save()
    {   $list_obj=_IL($_POST['list_id']) ;
        if (is_object($list_obj))
        {   if (_sizeof($_POST['list_items'])) foreach($_POST['list_items'] as $id=>$value)  $list_obj->rec_update($id,array('obj_name'=>$value)) ;
            $this->update_page=1 ;
        }
    }

    function list_element_remove()
    {   $list_obj=_IL($_POST['list_id']) ;
        if (is_object($list_obj))
        {   if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $id)  $list_obj->rec_delete($id) ;
            $this->update_page=1 ;
        }
    }

    //==========================================================================================================================================================================
    // РАБОТА С TRASSIR
    //==========================================================================================================================================================================

    function save_trassir_cameras() {
        if ($_POST['device_type'] and $_POST['device_id']) {
            switch ($_POST['device_type']) {
                case 'group': $device_id_field='group_id'; break;
                case 'terminal': $device_id_field='terminal_id'; break;
                case 'hand_check': $device_id_field='hand_check_group_id'; break;
            }
            $exist_connections=execSQL('select camera_trassir_id,'.$device_id_field.',pkey from obj_site_trassir_camera_terminal where '.$device_id_field.'='.$_POST['device_id']);
            $connections=$_POST['term'][$_POST['device_type']][$_POST['device_id']]['trassir_cameras'];
            $add=[];
            if (_sizeof($connections)) foreach ($connections as $connection) {

                if (!$exist_connections[$connection]) $add[]=$connection;
                else unset($exist_connections[$connection]);
            }

            if (_sizeof($add)) foreach ($add as $add_new) {
                //камеры для добавления
                adding_rec_to_table('obj_site_trassir_camera_terminal',['camera_trassir_id'=>$add_new,$device_id_field=>$_POST['device_id'],'clss'=>291]);
            }
            if (_sizeof($exist_connections)) foreach ($exist_connections as $exist_connection) {
                //камеры на удаление
                execSQL_update('delete from obj_site_trassir_camera_terminal where pkey='.$exist_connection['pkey']);
            }
            $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;
        }
    }


    //==========================================================================================================================================================================
    //  КОНТРОЛЬ ВНИМАНИЯ   !!! далее перенести в отдельный плагин
    //==========================================================================================================================================================================


        var $v_params=array('table'=>array(0=>'Шульте (только черные)',1=>'Горбова-Шульте (черные и красные)'),
                                'size'=>array(3=>'3x3',4=>'4x4',5=>'5x5',6=>'6x6',7=>'7x7'),
                                'black'=>array(0=>'Прямой',1=>'Обратный'),
                                'red'=>array(0=>'Прямой',1=>'Обратный')
                               );

            function get_panel_v_setting()
            {   $setting=unserialize(_IL('IL_dg')->recs[$_POST['rule_id']]['settings']) ;
                if (!_sizeof($setting['v']['krit'])) $setting['v']['krit'][10]=0 ;
                ?><form class="sky-form no_box_shadow" id="form_krit_set">
                       <fieldset id="fs">
                            <div class="row">
                                 <section class="col col-3">
                                     <label class="label">Таблица:</label>
                                     <label class="select">
                                          <select name="setting[table]">
                                              <?foreach($this->v_params['table'] as $value=>$title){?><option value="<?echo $value?>" <?if ($setting['v']['table']==$value) echo 'selected'?>><?echo $title?></option><?}?>
                                          </select><i></i>
                                     </label>
                                 </section>
                                 <section class="col col-3">
                                     <label class="label">Размер таблицы:</label>
                                     <label class="select">
                                          <select name="setting[size]">
                                              <?foreach($this->v_params['size'] as $value=>$title){?><option value="<?echo $value?>" <?if ($setting['v']['size']==$value) echo 'selected'?>><?echo $title?></option><?}?>
                                          </select><i></i>
                                     </label>
                                 </section>
                                 <section class="col col-3">
                                     <label class="label">Счет черных:</label>
                                     <label class="select">
                                          <select name="setting[black]">
                                              <?foreach($this->v_params['black'] as $value=>$title){?><option value="<?echo $value?>" <?if ($setting['v']['black']==$value) echo 'selected'?>><?echo $title?></option><?}?>
                                          </select><i></i>
                                     </label>
                                 </section>
                                 <section class="col col-3">
                                     <label class="label">Счет красных:</label>
                                     <label class="select">
                                          <select name="setting[red]">
                                              <?foreach($this->v_params['red'] as $value=>$title){?><option value="<?echo $value?>" <?if ($setting['v']['red']==$value) echo 'selected'?>><?echo $title?></option><?}?>
                                          </select><i></i>
                                     </label>
                                 </section>
                            </div>
                            <h2>Критерии прохождения теста</h2><br>
                            <div id="krit_set">
                            <? //damp_array($setting['v']['krit'],1,-1)  ;
                               if (_sizeof($setting['v']['krit'])) foreach($setting['v']['krit'] as $rec_krit){?>
                            <div class="row krit">
                                <section class="col col-1">
                                    <label class="label">&nbsp;</label>
                                    <i class="fa fa-times remove_krit" aria-hidden="true"></i>
                                </section>

                                <section class="col col-3">
                                    <label class="label">Время (сек):</label>
                                    <label class="input">
                                         <input type="text" name="krit[time][]" value="<?echo $rec_krit['time']?>" data-required >
                                    </label>
                                </section>
                                <section class="col col-3">
                                    <label class="label">Число ошибок:</label>
                                    <label class="input">
                                         <input type="text" name="krit[err][]" value="<?echo $rec_krit['error']?>" data-required >
                                    </label>
                                </section>
                                <section class="col col-3">
                                    <label class="label">Балл</label>
                                    <label class="input">
                                         <input type="text" name="krit[ball][]" value="<?echo $rec_krit['ball']?>" data-required >
                                    </label>
                                </section>
                                <section class="col col-2">
                                    <label class="label">МО</label>
                                    <label class="checkbox">
                                         <input type="checkbox" name="krit[access][]" value="1" <?if ($rec_krit['access']) echo 'checked'?>><i></i>
                                    </label>
                                </section>
                            </div><?}?>
                            </div>
                       </fieldset>
                  <div id="panel_buttons">
                                          <button id=add_krit class="button"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;&nbsp;Добавить критерий</button>&nbsp;&nbsp;&nbsp;
                                          <input type="submit" class="v2 button" cmd="esmo_setting/save_v_setting" rule_id="<?echo $_POST['rule_id']?>" validate="form" value="Сохранить">&nbsp;&nbsp;
                                          <button class="cancel button">Отмена</button></div>
                  </form>
                  <script type="text/javascript">
                      $j('#add_krit').click(function()
                       {  $j('#krit_set').append($j('div.krit:last').eq(0).clone()) ;
                          $j('div.krit:last input[type=text]:first').focus() ;
                          return(false);
                       })  ;
                      $j('.remove_krit').on('click',function()
                       {  $j(this).closest('div.krit').remove();
                          return(false);
                       })  ;
                  </script>
                  <style type="text/css">
                      #form_krit_set.sky-form  fieldset{padding-top:10px;}
                      #form_krit_set.sky-form div.krit i.remove_krit{font-size:22px;top:5px;color:gray;position:relative;cursor:pointer;}
                      #form_krit_set.sky-form div.krit i.remove_krit:hover{color:darkred;}
                      #form_krit_set.sky-form div.krit:first-child i.remove_krit{display:none;}
                      #form_krit_set.sky-form div.krit section{margin-bottom:5px;}
                      #form_krit_set.sky-form div.krit section label{margin-bottom:0;}
                      #form_krit_set.sky-form div.krit section label.label{width:auto;}
                      #form_krit_set.sky-form div.krit section.col-1{padding-left: 0;padding-right:0;}
                      #form_krit_set.sky-form div#panel_buttons{margin-top:10px;margin-bottom:25px;}
                      #form_krit_set.sky-form div#panel_buttons button#add_krit i{font-size:22px;top:3px;position:relative}
                  </style>
                <?



                $this->add_element('show_modal_window','HTML',array('title'=>'Настройка теста на внимание','width'=>'700px')) ;
            }

           function save_v_setting()
           {   $setting=unserialize(_IL('IL_dg')->recs[$_POST['rule_id']]['settings']) ;
               $setting['v']=$_POST['setting'] ;
               //damp_array($_POST['krit'],1,-1) ;
               if (_sizeof($_POST['krit']['time'])) foreach($_POST['krit']['time'] as $i=>$time)
                   $setting['v']['krit'][]=array('time'=>$time,
                                               'error'=>$_POST['krit']['err'][$i],
                                               'ball'=>$_POST['krit']['ball'][$i],
                                               'access'=>$_POST['krit']['access'][$i]
                                              ) ;
               $result[]=_IL('IL_dg')->rec_update($_POST['rule_id'],array('settings'=>$setting)) ;
               //damp_array($setting,1,-1) ;
               //damp_array($result,1,-1) ;
               //$this->add_element('show_modal_window','HTML',array('title'=>'Настройка теста на внимание','width'=>'700px')) ;
               $this->update_page=1 ;
           }


   function mo_now_disabled()
   {
       echo '<p>Вы производите отключение оперативной таблицы МО.</p><p class="red bold"> Пожалуйста, убедитесь, что в данный момент не проводятся МО.</p><p> После отключения оперативной таблицы все МО будут сохраняться в общую таблицу МО</p>' ;
       echo '<div class="center"><button class=cancel>Отмена</button>&nbsp;&nbsp;&nbsp;<button class=v2 cmd="esmo_setting/mo_now_disabled_apply">Отключить</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей')) ;
   }

   function mo_now_enabled()
   {
       echo '<p>Вы производите включение оперативной таблицы МО.</p><p class="red bold">Пожалуйста, убедитесь, что в данный момент не проводятся МО.</p><p>После включения оперативной таблицы все МО будут сохраняться сначала в оперативную таблицу, затем в общую таблицу МО</p>' ;
       echo '<div class="center"><button class=cancel>Отмена</button>&nbsp;&nbsp;&nbsp;<button class=v2 cmd="esmo_setting/mo_now_enabled_apply">Включить</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей')) ;
   }

   function mo_now_enabled_apply()
   {   ESMO()->mo_now_enabled() ;
       echo '<div class="center"><button class=cancel>Закрыть</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей','after_close_update_page'=>1)) ;
   }

   function mo_now_disabled_apply()
   {   ESMO()->mo_now_disabled() ;
       echo '<div class="center"><button class=cancel>Закрыть</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей','after_close_update_page'=>1)) ;
   }


 function log_now_disabled()
   {
       echo '<p>Вы производите отключение оперативной таблицы лога.</p><p class="red bold"> Пожалуйста, убедитесь, что в данный момент не проводятся МО.</p><p> После отключения оперативной таблицы все логи будут сохраняться в общую таблицу МО</p>' ;
       echo '<div class="center"><button class=cancel>Отмена</button>&nbsp;&nbsp;&nbsp;<button class=v2 cmd="esmo_setting/log_now_disabled_apply">Отключить</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей')) ;
   }

   function log_now_enabled()
   {
       echo '<p>Вы производите включение оперативной таблицы лога.</p><p class="red bold">Пожалуйста, убедитесь, что в данный момент не проводятся МО.</p><p>После включения оперативной таблицы все логи будут сохраняться сначала в оперативную таблицу, затем в общую таблицу логов</p>' ;
       echo '<div class="center"><button class=cancel>Отмена</button>&nbsp;&nbsp;&nbsp;<button class=v2 cmd="esmo_setting/log_now_enabled_apply">Включить</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей лога')) ;
   }

   function log_now_enabled_apply()
   {   LOGS()->log_now_enabled() ;
       echo '<div class="center"><button class=cancel>Закрыть</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей лога','after_close_update_page'=>1)) ;
   }

   function log_now_disabled_apply()
   {   LOGS()->log_now_disabled() ;
       echo '<div class="center"><button class=cancel>Закрыть</button></div>' ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Управление оперативной таблицей лога','after_close_update_page'=>1)) ;
   }

}
