<?
include_once(_DIR_EXT.'/HTML/c_page_XML_AJAX.php') ;
//include_once('messages.php') ;
class c_page_ajax extends c_page_XML_AJAX
{
  function reboot()
  { reboot_engine() ;
    ACCOUNTS()->update_member_info(MEMBER()) ;
    //$this->add_element('update_page',1) ;
    if (!$_POST['no_reload_page']) $this->add_element('JSCODE','<script type="text/javascript">window.localStorage.clear();localStorage.clear();location.reload(true);</script>') ;
  }

  function get_panel_personal_limit()
  {
    $rec_member=PERSONAL()->get_personal_by_id($_POST['reffer'],array('set_rules'=>1)) ;
    include(_DIR_EXT.'/aspmo/panel_personal_limit.php') ;
    panel_personal_limit($rec_member) ;
    $this->add_element('show_modal_window','HTML',array('title'=>'Задание критериев оценки')) ;
  }

  function set_member_limit()
  {
    list($member_id,$tkey)=explode('.',$_POST['reffer']) ;
    //damp_array($_POST,1,-1) ;
    ESMO()->set_member_limit($member_id,$_POST) ;
    $this->add_element('close_mBox_window') ;
    $this->add_element('update_page',1) ;
    //$this->add_element('success','modal_window') ;
  }


  function set_mo_tk()
  {
    execSQL_update('update obj_site_mo_session_now set tk='.$_POST['value'].' where pkey='.$_POST['mo_id']) ;
    execSQL_update('update obj_site_mo_session set tk='.$_POST['value'].' where pkey='.$_POST['mo_id']) ;
    $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
  }



  // сохранить в базе данные по табелю, загруженные из файла excel
  function save_last_upload_tabel()
    {
      ?><h2>Загрузка табеля смен</h2><?
      $file_name=_DIR_TO_ROOT.'/tmp/tabel.xls' ;
      list($arr_dates,$tabel)=ESMO()->upload_tabel_from_excel($file_name) ;
      $result=ESMO()->append_tabel_from_array($tabel) ;
      // показываем табель на экране
      $res['Обновлено записей в базе']=$result['update'] ;
      $res['Добавлено записей в базу']=$result['adding'] ;
      $res['Не найдено сотрудников']=$result['not_found'] ;
      damp_array($res,1,-1) ;
      $this->add_element('success','modal_window') ;
      //$this->add_element('after_close_update_page',1) ;
      $this->add_element('after_close_go_url','/tabel/') ;
    }

  //==========================================================================================================================================================================
  // ИЗМЕНЕНИЯ НАСТРОЙКИ AСМПO. Внимание! После каждого изменения необходимо отправить команду остальным клиентам на обновление настроек
  //==========================================================================================================================================================================

 // сохранение настроек системы
 function setting_use_tabel()
 {  update_site_setting('LS_setting_use_tabel',$_POST['checked']) ;
    $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
    send_cmd_reboot_client() ;
 }

 /* не используется, на удаление
 function settign_smena_count()
 {  update_site_setting('LS_setting_smena_count',$_POST['smena_count']) ;
    $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
    send_cmd_reboot_client() ;
    ob_start() ;
        include(_DIR_EXT."/aspmo/panel_smena_times.php");
        panel_smena_times() ;
        $text=ob_get_clean();
    $this->add_element('panel_smena_times.HTML',$text) ;
 } */

 function settign_auto_mo_count()
 {  update_site_setting('LS_setting_auto_mo_count',$_POST['auto_mo_count']) ;
    $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
    send_cmd_reboot_client() ;
 }

 function settign_auto_mo_interval()
 {  update_site_setting('LS_setting_auto_mo_interval',$_POST['auto_mo_interval']) ;
    $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
    send_cmd_reboot_client() ;
 }

 function set_view_only_success()
 {
   update_site_setting('LS_setting_mo_pers_view_only_success',$_POST['checked']) ;
   $this->add_element('update_page',1) ;
 }

 function settign_smena_time()
 { if (_sizeof($_POST['from'])) foreach($_POST['from'] as $smena_number=>$h)
     { $var_name='LS_setting_smena_'.$smena_number.'_from_h' ;
       update_site_setting($var_name,(int)$h) ;
     }
   if (_sizeof($_POST['to'])) foreach($_POST['to'] as $smena_number=>$h)
     { $var_name='LS_setting_smena_'.$smena_number.'_to_h' ;
       update_site_setting($var_name,(int)$h) ;
     }
   $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
   send_cmd_reboot_client() ;
 }


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

  /* не используется
  function select_work_group()
  {  global $member,$aspmo_system ;
     if ($_POST['cur_group'])
     { $member->cur_group_id=$_POST['cur_group'] ;
       $member->cur_group_name=ACCOUNTS()->get_group_name($_POST['cur_group']) ;
       LOGS()->reg_log('Выбор рабочей группы',$member->cur_group_name) ;
       // если пользователь - администратор, проверяем, если ли его АРМ в списке устройств рабочей группы
       $arm_rec=ACCOUNTS()->get_ARM_rec_by_IP($_SERVER['REMOTE_ADDR']) ;
       if (!$arm_rec['pkey'])  $this->ARM_create() ;

       $this->add_element('update_page',1) ;
     }
  } */

  function ARM_create()
  { $id=0 ; $result=array() ;
    if (MEMBER()->cur_group_id)
    { $result=ACCOUNTS()->ARM_create(array('group_id'=>MEMBER()->cur_group_id,'name'=>'АРМ ('.$_POST['platform'].')','ip'=>$_SERVER['REMOTE_ADDR'])) ;
      //$member->cur_arm_id=$id ;
      if ($_POST['cmd']=='select_work_group') LOGS()->reg_log('Автодобавление АРМ в рабочую группу',MEMBER()->cur_group_name.': '.$_SERVER['REMOTE_ADDR']) ;
      else                                    LOGS()->reg_log('Добавление АРМ в рабочую группу',MEMBER()->cur_group_name.': '.$_SERVER['REMOTE_ADDR']) ;
    }
    else   $this->add_element('show_notife','Не выбрана рабочая группа',array('type'=>'error')) ;
    if ($result['id']) $this->add_element('update_page',1) ;
  }

 function arm_save()
 {
   ACCOUNTS()->arm_save($_POST['arm']) ;
   $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
   //damp_array($_POST,1,-1) ;
   //$this->add_element('success','modal_window') ; //damp_array($res) ;
 }


// будим  терминал
 function term_start()
 {   $terminal_rec=DEVICE()->get_terminal_by_id($_POST['terminal_id']) ;
     LOGS()->reg_log('Команда с интерфейса','Перевод терминала в активный режим',array('terminal_id'=>$_POST['terminal_id'],'reffers'=>array($terminal_rec['_reffer']))) ;
     DEVICE()->send_terminal_command($terminal_rec['pkey'],'check_status',array('async'=>0,'no_check_cur_status'=>1)) ;
     $this->add_element('show_notife','Отправлена команда на перевод терминала в активный режим') ;
 }

 // будим все терминалы
function all_term_start()
{   LOGS()->reg_log('Команда с интерфейса','Перевод всех терминалов в активный режим',array()) ;
     $recs=ESMO()->get_list_terminals(MEMBER()->cur_group_id) ;
    if (_sizeof($recs)) foreach($recs as $terminal_rec) DEVICE()->send_terminal_command($terminal_rec['pkey'],'check_status',array('async'=>0,'no_check_cur_status'=>1)) ;
    $this->add_element('show_notife','Отправлены команды на перевод терминалов в активный режим') ;
}


// будим все терминалы
 function all_term_sleep()
{   LOGS()->reg_log('Команда с интерфейса','Перевод всех терминалов в режим сна',array()) ;
    $recs=ESMO()->get_list_terminals(MEMBER()->cur_group_id) ;
    if (_sizeof($recs)) foreach($recs as $terminal_rec) DEVICE()->send_terminal_command($terminal_rec['pkey'],'set_sleep',array('async'=>0)) ;
     $this->add_element('show_notife','Отправлены команды на перевод терминалов в сон') ;
 }

 // будим все терминалы
 function all_term_reboot()
 {   LOGS()->reg_log('Команда с интерфейса','Перезагрузка всех терминалов',array()) ;
 $recs=ESMO()->get_list_terminals(MEMBER()->cur_group_id) ;
     if (_sizeof($recs)) foreach($recs as $terminal_rec) DEVICE()->send_terminal_command($terminal_rec['pkey'],'reboot',array('async'=>0)) ;
     $this->add_element('show_notife','Отправлены команды на перезагрузку терминалов') ;
 }


 // перезагружаем терминал
 function term_reboot()
 {   $terminal_rec=DEVICE()->get_terminal_by_id($_POST['terminal_id']) ;
     LOGS()->reg_log('Команда с интерфейса','Перезагрузка терминала '.$_POST['terminal_id'],array('terminal_id'=>$_POST['terminal_id'],'reffers'=>array($terminal_rec['_reffer']))) ;
     DEVICE()->send_terminal_command($terminal_rec['pkey'],'reboot',array('async'=>0)) ;
     $this->add_element('show_notife','Отправлена команда на перезагузку терминала') ;
 }

 // усыпляем терминал
 function term_sleep()
 {   $terminal_rec=DEVICE()->get_terminal_by_id($_POST['terminal_id']) ;
     LOGS()->reg_log('Команда с интерфейса','Перевод терминала <strong>'.$_POST['terminal_id'].'</strong> в режим сна',array('terminal_id'=>$_POST['terminal_id'],'reffers'=>array($terminal_rec['_reffer']))) ;
     DEVICE()->send_terminal_command($terminal_rec['pkey'],'reboot',array('async'=>0)) ;
     $this->add_element('show_notife','Отправлена команда на перевод терминала в сон') ;
 }


  //==========================================================================================================================================================================
  // Работа с персоналом АСПМО
  //==========================================================================================================================================================================
    /* не используется
    function _member_delete()
    {
      if (_sizeof($_POST['member'])) foreach($_POST['member'] as $id=>$post_rec) if ($post_rec['check']) $res[]=ACCOUNTS()->member_delete($id) ;
      $this->add_element('update_page',1) ;
    } */

 function check_propusk_to_unique()
 {
   $rec=PERSONAL()->check_propusk($_POST['value']) ;
   if ($rec['pkey']) $this->add_element('alert_text','Пропуск уже используется') ;
   else $this->add_element('result',1) ;
   $this->add_element('element_id',$_POST['element_id']) ;
 }

    function check_propusk_value()
       { //$res=strtoupper(translit($_POST['value'])) ;
         $res=translit($_POST['value']) ;
         $this->add_element($_POST['id'],$res) ;
       }

    function check_pass()
    {   $mess[0]='<i class="fa fa-exclamation-triangle red" aria-hidden="true"></i>' ;
        $mess[1]='<i class="fa fa-check-square-o green" aria-hidden="true"></i>' ;

        $res=ACCOUNTS()->check_pass($_POST['login'],$_POST['password']) ;
        if (_sizeof($res)) foreach($res as $code=>$value) $this->add_element('check_'.$code.'.HTML',$mess[$value]) ;
    }

    /* перенесена в ext/account
    function account_login_as()
    { $_SESSION['admin_login_id']=MEMBER()->id ;
      $rec_member=ACCOUNTS()->get_member_by_id($_POST['member_id'],$options=array()) ;
      if ($rec_member['login'] and $rec_member['password'])
      { LOGS()->reg_log('Авторизация аккаунта','Выполняем вход под аккаунтом "<strong>'.$rec_member['obj_name'].'"</strong> ['.$rec_member['pkey'].']') ;
        $this->account_logout() ; // стандартный выход из аккунта
        //$_SESSION['account_id_to_autorize']=$rec_member['pkey'] ;
        $_SESSION['autorize_process']['sert_valid']=1 ; // ставим флаг, что сертификат подтвержден
        $this->account_login(array('user_login'=>$rec_member['login'],'user_pass'=>$rec_member['password'],'pass_is_hash'=>1)) ; //  стандартный вход в аккаунт  - с проверкой группы, без проверки сертификата
        // отложенный вход в аккаунт - без проверки группы и сертификата

        //$this->account_login() ; //
      } else $this->add_element('show_notife','У аккаунта не задан логин или пароль') ;
      //damp_array($rec_member,1,-1) ;
      //$this->add_element('show_modal_window','HTML') ;

    } */


    // авторизация по обычному логину/паролю
    // либо авторизация по ID сотрудника (отложенная авторизация)
    // последнее используется, когда логин/пароль уже подтвержден, ID аккаунта известен и необходимо выполнить стандатные действия после авторизациии
    // ID такого аккаунта передавать только через сессию, ни в коем случае не передавать ID через GET/POST данные

    /* перенесена в ext/account
    function account_login($options=array())
    { if (is_object($options)) $options=array() ;
      $result=array() ;
        //LOGS()->reg_log('ajax/account_login','',array('data'=>['options'=>$options,'POST'=>$_POST])) ;
      // если переданы формой логин и пароль - авторизуем сотрудка по этим данным
      if ($_POST['user_login'] or $_POST['user_pass'])
      { $options['group_id_to_auth']=($_POST['group_id_to_auth'])? $_POST['group_id_to_auth']:0 ;
      $result=ACCOUNTS()->member_login($_POST['user_login'],$_POST['user_pass'],$options) ;
        //LOGS()->reg_log('ajax/account_login','',array('data'=>['result'=>$result])) ;
      }
      elseif ($options['user_login'] or $options['user_pass'])
      { $options['group_id_to_auth']=($_POST['group_id_to_auth'])? $_POST['group_id_to_auth']:0 ;

        $result=ACCOUNTS()->member_login($options['user_login'],$options['user_pass'],$options) ;
      }
      // если в сессии есть ID сотрудника для отложенной авторизации - авторизуем его по этим данным
      // авторизация может откладываться несколько раз
      // один раз для выбора группы
      // второй раз для подтверждения сертификата
      else if ($_SESSION['autorize_process']['account_id'])
      { $options['pass_is_hash']=1 ;
        if ($_POST['group_id_to_auth']) $_SESSION['autorize_process']['group_id']=$_POST['group_id_to_auth'] ;
        //$_SESSION['account_id_to_autorize']=0 ;
        $rec=ACCOUNTS()->get_member_by_id($_SESSION['autorize_process']['account_id'],$options) ;
        LOGS()->reg_log('ASPMO/ajax/account_login','Будет выполнена отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'],array('data'=>$_SESSION['autorize_process'])) ;
        if ($rec['pkey']) $result=ACCOUNTS()->member_login($rec['login'],$rec['password'],$options) ;  // авторизуем пользователя
        LOGS()->reg_log('ASPMO/ajax/account_login','Выполнен отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'],array('data'=>$result)) ;

      }

      //LOGS()->reg_log('auth result','',array('data'=>$result)) ;

      // действия после авторизации - выбрать что-то одно
      if ($result['type']=='success' or $result['code']=='no_login_for_member')
      {
        if ($_SERVER['HTTP_REFERER']) {
            //не перенаправлять на HTTP_REFERER если в сессии есть метка о логауте через кнопку "Выход"
            if ($_SESSION['logout_via_exit_button']) {$redirect_url='/cab/'; unset($_SESSION['logout_via_exit_button']);}
            elseif (strpos($_SERVER['HTTP_REFERER'], '/cab/account/select_group/')!==false) $redirect_url='/cab/';
            else $redirect_url=$_SERVER['HTTP_REFERER'];
        }  else {
            $redirect_url='/cab/';
        }
        $this->add_element('go_url',$redirect_url) ;   // переходим на страницу личного кабинета
        //damp_array($_SERVER,1,-1) ; $this->add_element('show_modal_window','HTML') ;
        if (function_exists('ESMO')) ESMO()->reg_monitor_mess(MEMBER()->cur_group_id,array('update_page'=>1)) ; // перегружаем текущею страницу на мониторинге
      }
      else
      {  if ($result['code']=='select_group')
         { $this->add_element('go_url','/cab/account/select_group/') ;   // переходим на страницу выбора группы сотрудника
           $_SESSION['autorize_process']['account_id']=$result['account_id'] ;   // сохраняем ID для отложенной авторизации - после выбора группы будет вновь вызвана эта функция, но уже с  $_SESSION['autorize_process']['account_id']
           LOGS()->reg_log('Авторизация персонала','Выбрана отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'].' для выбора группы',array('account_id'=>$_SESSION['autorize_process']['account_id'])) ;
         }
         else if ($result['code']=='check_sertificate')
        { $this->add_element('go_url','/cab/cryptopro/check_sert/') ;   // переходим на страницу личного кабинета
          $_SESSION['autorize_process']['account_id']=$result['account_id'] ;
        }
         else // для всех других кодов возврата регистрируем ошибку авторизации с переданными данными
         {  $result['login']=$_POST['user_login'] ;
            if ($GLOBALS['LS_account_save_open_pass']) $result['password']=$_POST['user_pass'] ;
            LOGS()->reg_log('account_login_failed','',array('data'=>$result)) ;
            switch($result['code'])
        {  case 'member_not_found': $text='Аккаунта не существует или неверно указан пароль' ; break ;
           case 'check_account_autorize_limit_failed': $text='Превышено число попыток входа в систему' ; break ;
           case 'space_field': $text='Не указан логин или пароль' ; break ;
           case 'no_login_for_member': $text='Пользователь уже авторизован' ; break ;
               //case 'check_sertificate': $text='Требуется проверка сертификата' ; break ;
           default:  $text=$result['code'] ;
        }
        $this->add_element('show_notife',$text,array('type'=>'error')) ;
      }
    }
    }
    */

    /* /* перенесена в ext/account
    function account_logout()
    { $cur_group=MEMBER()->cur_group_id ; // группа будет сброшена при logout
      //добавлена метка о выходе по кнопке "Выход"
      $result=ACCOUNTS()->member_logout('',['logout_via_exit_button'=>1]) ;
      if ($result['type']=='success') $this->add_element('update_page',1) ;  // после выхода - перегружаем текущую страницу
        if (function_exists('ESMO')) ESMO()->reg_monitor_mess($cur_group,array('update_page'=>1)) ; // перегружаем текущею страницу на мониторинге
    }
    */

    /*  не используется
    function account_login_as2()
    { $_SESSION['admin_login_id']=MEMBER()->id ;
      $rec_member=ACCOUNTS()->get_member_by_id($_POST['member_id'],$options=array()) ;
      if ($rec_member['login'] and $rec_member['password'])
      { $this->account_logout() ; // стандартный выход из аккунта
        $_POST['user_login']=$rec_member['login'] ;
        $_POST['user_pass']=$rec_member['password'] ;
        $this->account_login(array('pass_is_hash'=>1)) ; //  стандартный вход в аккаунт
      } else $this->add_element('show_notife','У аккаунта не задан логин или пароль') ;
      //damp_array($rec_member,1,-1) ;
      //$this->add_element('show_modal_window','HTML') ;

    } */

    function get_panel_otdel_select()
    {
        if (!$_POST['value'])
        {   $this->add_element('otdel_select.HTML','') ;
            return ;
        }
        ob_start() ;
        ?><select name="filter[otdel_id]" id="otdel_id"><?
        if (!$_POST['no_all_select']){?><option value="0">Все</option><?}
        $recs=PERSONAL()->get_list_personal_section($_POST['value']) ;
        if (_sizeof($recs)) foreach($recs as $rec_list) {?><option value="<?echo $rec_list['pkey']?>" <?if ($_POST['select_otdel']==$rec_list['pkey']) echo 'selected'?>><?echo $rec_list['obj_name']?></option><?}
        ?></select><?
        $text=ob_get_clean() ;
        $this->add_element('otdel_select.HTML',$text) ;
    }


    function demo_ajax()
    {  if ($_POST['param']=='modal')
       { // вывод результата в модальное окно
         echo 'Значение поля "'.$_POST['demo1'].'"<br><br>' ;
         ?><button class=cancel>Закрыть</button><?
         $this->add_element('show_modal_window','HTML',array('title'=>'Окно для вывода результатов')) ;
       }

       if ($_POST['param']=='notife') // вывод результата в NOTIFE
          $this->add_element('show_notife','Значение поля "'.$_POST['demo1'].'"',array('type'=>'info')) ;

       if ($_POST['param']=='div') // вывод результата в DIV
          $this->add_element('AJAX_RESULT.HTML','Значение поля "'.$_POST['demo1'].'"') ;

        // просто перегрузить страницу
        if ($_POST['param']=='update_page') $this->update_page=1 ;
    }


    function get_panel_terminal_status()
    { return ;
      // проверяеи, кто из виртуальных терминалов находится на автопилоте и имеет r_data старее чем 1 мин
      $e_data=getdate(time()) ;
      $to=mktime($e_data['hours'],$e_data['minutes'],$e_data['seconds']-30,$e_data['mon'],$e_data['mday'],$e_data['year']);
      $arr_ids=execSQL_line('select pkey from obj_site_account where clss=203 and parent='.$_POST['group_id'].' and virt=1 and virt_status>0 and r_data<'.$to) ;
      if (_sizeof($arr_ids)) execSQL_update('update obj_site_account set status=9 where pkey in('.implode(',',$arr_ids).')');
      ob_start() ;
      include_once(_DIR_EXT.'/aspmo/panel_terminal_status.php') ;
      $recs=ESMO()->get_list_terminals($_POST['group_id']) ;
      panel_terminal_status($recs) ;
      $this->add_element('panel_terminal_status.HTML',ob_get_clean()) ;

      $e_data=getdate(time()) ;
      $min=mktime($e_data['hours'],$e_data['minutes']-1,$e_data['seconds'],$e_data['mon'],$e_data['mday'],$e_data['year']);
      $hour=mktime($e_data['hours']-1,$e_data['minutes'],$e_data['seconds'],$e_data['mon'],$e_data['mday'],$e_data['year']);
      $cnt_by_min=execSQL_value('select count(pkey) from obj_site_mo_session where c_data>='.$min) ;
      $cnt_by_hour=execSQL_value('select count(pkey) from obj_site_mo_session where c_data>='.$hour) ;
      $this->add_element('panel_terminal_stats_1.HTML',$cnt_by_min) ;
      $this->add_element('panel_terminal_stats_2.HTML',$cnt_by_hour) ;
      $this->add_element('panel_terminal_stats_3.HTML',round($cnt_by_min/0.66)) ;
      $this->add_element('panel_terminal_stats_4.HTML',round($cnt_by_hour/39.6)) ;
    }





    function prepare_cards_print()
    {
        ob_start() ;
        ?><script type="text/javascript">window.open("/cab/cards/?from=<?echo $_POST['from']?>&to=<?echo $_POST['to']?>",'blank');</script> <?
        $this->add_element('JSCODE',ob_get_clean()) ;
    }

    function check_autorize2()
    {
       $this->add_element('check',MEMBER()->id) ;
       damp_array($_COOKIE,1,-1) ;
       //$this->add_element('show_modal_window','HTML',array('title'=>'котроль сессии','width'=>'1200px')) ;
    }

    // принудительное открытие смены врача, ставим выход другим сотрудникам
    function smena_in()
    {  $doctor_id=ESMO()->check_doctor(MEMBER()->cur_group_id,array('debug'=>0)) ;
       if ($doctor_id)
       { $rec_member=ACCOUNTS()->get_member_by_id($doctor_id) ; $text=', смена приостановлена у <strong>'.$rec_member['obj_name'].'</strong> ['.$rec_member['pkey'].']' ;
         // приостанавливаем смену текущего доктора
         ACCOUNTS()->member_save($doctor_id,array('smena'=>2)) ; //смена приостановлена у текущего доктора
         // оповещаем доктора о приостановке его смены через SSE

         //
         ENGINE()->send_cmd_reboot_client() ;
       }
       else $text=', активной смены не найдено' ;

       // проверяем текущеие значение smena_out у текущего сотрудника
       $cur_account=ACCOUNTS()->get_member_by_id(MEMBER()->id) ;
       $start_smena=(!$cur_account['smena_out'])? $cur_account['smena_out']:time() ;
       // открываем смену у текущего сотрудника
       ACCOUNTS()->member_save(MEMBER()->id,array('smena'=>1,'smena_in'=>$start_smena,'smena_out'=>0)) ;
       ACCOUNTS()->update_member_info($_SESSION['member']) ; // данные аккаунта будут заново прочитаны из базу

       LOGS()->reg_log('Смена персонала','<div class="red">'.MEMBER()->name.' ['.MEMBER()->id.'] - Начало смены по команде'.$text.'</div>',array('member_id'=>MEMBER()->id)) ;
       $this->update_page=1 ;
    }

    // возобновление смены
    function smena_resume()
    {  $doctor_id=ESMO()->check_doctor(MEMBER()->cur_group_id,array('debug'=>0)) ;
       ACCOUNTS()->member_smena_in(MEMBER()->info['smena_in']) ;
       if ($doctor_id)
       { $rec_member=ACCOUNTS()->get_member_by_id($doctor_id) ; $text=', смена приостановлена у <strong>'.$rec_member['obj_name'].'</strong> ['.$rec_member['pkey'].']' ;
         // приостанавливаем смену текущего доктора
         ACCOUNTS()->member_save($doctor_id,array('smena'=>2)) ; //смена приостановлена у текущего доктора
         // оповещаем доктора о приостановке его смены через SSE

         //
         ENGINE()->send_cmd_reboot_client() ;

       } else $text=', активной смены не найдено' ;

       // открываем смену у текущего сотрудника
       ACCOUNTS()->member_save(MEMBER()->id,array('smena'=>1)) ;
       ACCOUNTS()->update_member_info($_SESSION['member']) ; // данные аккаунта будут заново прочитаны из базу

       LOGS()->reg_log('Смена персонала','<div class="red">'.MEMBER()->name.' ['.MEMBER()->id.'] - Возобновление смены по команде'.$text.'</div>',array('member_id'=>MEMBER()->id)) ;
       $this->update_page=1 ;
    }

}
