<?
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_update()
    {
        if (_sizeof($_POST['term']))foreach($_POST['term'] as $id=>$rec) ESMO()->terminal_save($id,$rec) ;
        $this->add_element('show_notife','Запущена процедура установки обновлений',array('type'=>'info')) ;

        if (!$_POST['type_term']) $recs=ESMO()->get_list_terminals(MEMBER()->cur_group_id) ;
        else if ($_POST['type_term'] == 'kt') $recs=DEVICE()->get_list_terminals(MEMBER()->cur_group_id, 'kt') ;
        if (_sizeof($recs)) foreach($recs as $terminal_rec)
        {   if ($terminal_rec['assigned_version'] && $terminal_rec['vers'] != $terminal_rec['assigned_version'])
            {
                LOGS()->reg_log('Установка обновлений','Отправка команды на установку обновлений '.$terminal_rec['id'],array()) ;
                DEVICE()->send_terminal_command($terminal_rec['pkey'],'check_update',array('async'=>0)) ;
            }
            else
            {
              LOGS()->reg_log('Установка обновлений','Пропускаем установку на '.$terminal_rec['id'],array()) ;
            }
        }
    }

    function upload_from_git_exec()
    {  //damp_array(($_POST));
       include(_DIR_TO_MODULES.'/engine/i_backgroup_process.php') ;
       $back_process=new i_backgroup_process('/services/aspmo_setting/upload_git/',['files'=>$_POST['file_to_upload']]) ; // будет вызван  /ext/events/c_update_personal_status.php::c_update_personal_status->show()
       $back_process->panel_background_process() ;
        ?><div class="center"><button class="button cancel">Закрыть</button></div><?
       $this->add_element('show_modal_window','HTML',array('title'=>'Загрузка пакета обновления','after_close_update_page'=>1,'width'=>1000)) ;
    }

    function upload_from_file_exec()
    {  //damp_array(($_POST));
       include(_DIR_TO_MODULES.'/engine/i_backgroup_process.php') ;
       $back_process=new i_backgroup_process('/services/aspmo_setting/upload_zip/',['files'=>$_POST['file_name']]) ; // будет вызван  /ext/events/c_update_personal_status.php::c_update_personal_status->show()
       $back_process->panel_background_process() ;
       ?><div class="center"><button class="button cancel">Закрыть</button></div><?
       $this->add_element('show_modal_window','HTML',array('title'=>'Загрузка пакета обновления','after_close_update_page'=>1,'width'=>1000)) ;
    }

  function save_setting()
  { ob_start() ;

    $view_window_check_settings=0 ; $view_text=0 ;
    if ($_POST['setting_type']=='LS' and $_POST['name'] and isset($_POST['checked'])) $_POST['setting'][$_POST['name']]=$_POST['checked'] ;
    //damp_array($_POST,1,-1);

    if (_sizeof($_POST['setting'])) foreach($_POST['setting'] as $name=>$value)
    {  if (is_array($value))
        {   if ($_POST['from_site_setting']) $value=implode(',',$value) ;
            else $value=addslashes(serialize($value)) ;
        }

       if ($name == 'LS_setting_auto_mo_interval' && $value < 5) $value=5; //Интервал между МО не менее 5 мин
       if (strpos($name,'SES')!==0) update_site_setting($name,$value) ;
       else $_SESSION[$name]=$value ;
    }
    if (_sizeof($_POST['CRON']))
    { foreach($_POST['CRON'] as $cron_code=>$cron_params)
      {   $rec_cron=ENGINE()->get_cron_by_code($cron_code) ;
          if (!is_array($cron_params))  {if ($rec_cron['intr']!=$cron_params) ENGINE()->reg_cron($rec_cron['obj_name'],$cron_code,$cron_params) ;}
          else
          {  $enabled=$cron_params['enabled'] ;
             $intr=$cron_params['intr'] ;
             //damp_array($cron_params) ;
             ENGINE()->reg_cron($rec_cron['obj_name'],$cron_code,$intr,array('enabled'=>$enabled)) ;
          }
      }
    }
    // IS: init setting in  ini.yaml
    if (_sizeof($_POST['IS']))
    { ENGINE()->update_IS_setting($_POST['IS']) ;
      reboot_engine() ;
      ACCOUNTS()->update_member_info(MEMBER()) ;
      if (isset($_POST['IS']['modules']) or isset($_POST['IS']['plugins']) or isset($_POST['IS']['plugins_local']) or isset($_POST['IS']['modules_local'])) $view_window_check_settings=1 ;
    }

    if ($view_window_check_settings)
	{ include(_DIR_TO_MODULES.'/engine/i_backgroup_process.php') ;
           $back_process=new i_backgroup_process('/services/aspmo_setting/check_setting/') ; // будет вызван  /ext/events/c_update_personal_status.php::c_update_personal_status->show()
           $back_process->panel_background_process() ;
      ?><br><br><div class="center"><button class="button cancel">Закрыть</button></div><?
      $this->add_element('show_modal_window','HTML',array('title'=>'Проверка настроек после изменения конфигурации системы','after_close_update_page'=>1,'width'=>1000)) ;
      $view_text=1 ;
    }
    else
    { $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;
       if (!$_POST['no_update_page']) $this->add_element('update_page',1) ;
      else if ($_POST['id']) $this->view_setting() ;
      //$this->add_element('show_modal_window','HTML',array('title'=>'save_setting','after_close_update_page'=>1,'width'=>1000)) ;

      // меняем надпись включено/выключено на сайте
      if ($_POST['setting_type']=='LS' and $_POST['name'] and isset($_POST['checked']) and $_POST['element_id'])
      {
          $value=$GLOBALS[$_POST['name']] ;
          $element_text=($value)? '<span class="green">Включено</span>':'<span class="red">Выключено</span>' ;
          $this->add_element($_POST['element_id'].'.HTML','<strong>'.$element_text.'</strong>');
      }
      //$this->add_element('show_modal_window','HTML',array('title'=>'save_setting','after_close_update_page'=>1,'width'=>1000)) ;
    }

     $text=ob_get_clean() ;
    if ($view_text) echo $text ;
    if (!$view_window_check_settings and stripos($text,'sql_error')!==false)
    { echo $text ;
      $this->add_element('show_modal_window','HTML',array('title'=>'Сохранение настройки','after_close_update_page'=>1,'width'=>1000)) ;
    }
  }

  function change_right_member()
  {
    if ($_POST['checked']) {
        ACCOUNTS()->allow_right_rol($_POST['rol_id'],$_POST['class_name']) ;
        LOGS()->reg_log('Изменение прав доступа',$_SESSION['ARR_roll'][$_POST['rol_id']]['obj_name'].' добавлено '.$_POST['class_name']) ;
    } else {
        ACCOUNTS()->decline_right_rol($_POST['rol_id'],$_POST['class_name']) ;
        LOGS()->reg_log('Изменение прав доступа',$_SESSION['ARR_roll'][$_POST['rol_id']]['obj_name'].' удалено '.$_POST['class_name']) ;
    }
    $this->add_element('show_notife','Сохранено',array('type'=>'info')) ;
    ENGINE()->send_cmd_reboot_client() ;
  }

  function account_create()
  { $result=ACCOUNTS()->account_create($_POST['filter']) ;
    if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
    else                  {?><div class="info"><?echo $result['info']?></div><?}

    ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
    $this->add_element('show_modal_window','HTML',array('title'=>'Добавление нового сотрудника ЭСМО','_after_close_update_page'=>1)) ;
   }

   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 save_rol()
   { if (_sizeof($_POST['roles'])) foreach($_POST['roles'] as $rec) SETUP()->reg_rol($rec['id'],$rec['name'],$rec['index_page'],array('allow_update_name'=>1,'autologout'=>$rec['autologout'],'report_template'=>$rec['report_template'],'working'=>$rec['working'])) ;
     ?><div class="center"><button class="cancel">Закрыть</button></div><?
     $this->add_element('show_modal_window','HTML',array('title'=>'Сохранение списка ролей','width'=>'800px','after_close_update_page'=>1)) ;
   }

   function rol_create()
   { //damp_array($_POST) ;
     $this->add_element('show_modal_window','HTML',array('title'=>'Добавление новой роли','after_close_update_page'=>1)) ;
     ?><form>
          <table id="panel_personal_edit" class="info">
              <tr><td>Название роли:</td><td><input type="text" name="name" class="big" data-required value="" ></td></tr>
              <tr><td>Стартовая страница личного кабинета:</td><td><input type="text" name="start_page" data-required value="/cab/setting/member/" class="big" ></td></tr>
          </table>
          <br>
          <div class="center"><input type="submit" class="v2" cmd="aspmo_setting/rol_create_apply" validate="form" NoSubmitFormOnEnter="1" value="Создать новую роль">&nbsp;&nbsp;&nbsp;<button class="cancel">Отмена</button></div>
         </form>
     <?
     }

    function rol_create_apply()
    { $last_id=execSQL_value('select max(id) from roles') ;
      $last_id++ ;
      if ($last_id<100) $last_id=100 ;
      SETUP()->reg_rol($last_id,$_POST['name'],$_POST['start_page']) ;
      ?><div class="center"><button class="cancel">Закрыть</button></div><?
      $this->add_element('show_modal_window','HTML',array('title'=>'Добавление новой роли','width'=>'800px','after_close_update_page'=>1)) ;
   }


   function get_current_info_group_AD()
   {
       $recs_AD=execSQL('select t2.pkey as esmo_group_id,t2.obj_name as esmo_group_name,t1.pkey as AD_group_id,t1.obj_name as AD_group_name 
                              from view_IL_ad_groups t1
                              left join obj_site_account t2 on t2.pkey=t1.group_id 
                              where t1.group_id>0 
                              order by t1.obj_name',2,1) ;
        $arr_before=array() ;
        if (_sizeof($recs_AD)) foreach($recs_AD as $rec) $arr_before[$rec['esmo_group_name']][]=$rec['AD_group_name'] ;
        if (_sizeof($arr_before)) foreach($arr_before as $id=>$arr2) $arr_before[$id]=implode(',',$arr2) ;
        return($arr_before) ;
   }

   function save_ESMO_group()
   {
     //damp_array($_POST,1,-1) ;
     $arr_before=$this->get_current_info_group_AD() ;
     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'=>0)) ;
           unset($rec_group['groups_AD']) ;
       }
       //damp_array($rec_group,1,-1) ;
			 $settings_str=execSQL_value('select settings from obj_site_account where pkey='.$group_id) ;
       $settings=unserialize($settings_str) ;
			 if ($settings===false) $settings=json_decode($settings_str,true) ;
       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) ;
			 // settings будет сохранено в формате serialize
       if (_sizeof($rec_group)) update_rec_in_table('obj_site_account',$rec_group,'pkey='.$group_id,array('debug'=>0)) ;
     }
     $arr_after=$this->get_current_info_group_AD() ;
     if ($arr_before!=$arr_after)
     {  ob_start() ;
        ?><h3>before</h3><?
        damp_array($arr_before,1,-1) ;
        ?><h3>after</h3><?
        damp_array($arr_after,1,-1) ;
        $text=ob_get_clean() ;
        //echo $text ;
        LOGS()->reg_log('AD_change_group',$text) ;
        $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;
     }
     else $this->add_element('show_notife','Изменений не обнаружено',array('color'=>'yellow')) ;

     //$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 save_ESMO_single_group()
   {   $group_id=(int)$_POST['group_id'] ;
       if (!$group_id) return ;
       $result=ACCOUNTS()->workgroup_save($group_id,$_POST['filter']) ;
       echo $result['text'] ;
       ?><br><div class="center"><button class="cancel">Закрыть</button></div><?
       $this->add_element('show_modal_window','HTML',array('title'=>'Изменение группы','after_close_update_page'=>1)) ;
   }

   function delete_ESMO_single_group()
   {  $group_id=(int)$_POST['group_id'] ;
      $rec_group=ACCOUNTS()->get_workgroup_by_id($group_id) ;
      $childs_info=execSQL('select clss,count(pkey) from obj_site_account where parent='.$group_id.' group by clss') ;
      $alerts=array() ;
      if ($childs_info['203']) $alerts[]='В группе присутствуют терминалы' ;
      if ($childs_info['205']) $alerts[]='В группе присутствуют АРМ' ;
      if ($childs_info['210']) $alerts[]='В группе присутствуют аккаунты' ;
      if (_sizeof($alerts))
      { ?><strong>Удаление группы заблокировано по причине:</strong><?
        ?><ul><?
          foreach($alerts as $alert) echo '<li>'.$alert.'</li>' ;
        ?></ul><?
        ?><div class="red">Для удаления группа должна быть пуста</div>
          <div class="buttons"><button class="cancel">Отмена</button></div>
        <?
        $this->add_element('show_modal_window','HTML',array('title'=>'Удаление группы','after_close_update_page'=>1)) ;
      }
      else if (!$_POST['delete'])
      {  ?><strong>Группа будет безвозвратно уделена!</strong>
           <div class="buttons">
                <button class="cancel">Отмена</button>
                <button class="v2" cmd="aspmo_setting/delete_ESMO_single_group" group_id="<?echo $group_id?>" delete="1">Удалить</button>
           </div>
         <?
        $this->add_element('show_modal_window','HTML',array('title'=>'Удаление группы','after_close_update_page'=>1)) ;
      }
      else
      {
          execSQL_update('delete from obj_site_account where pkey='.$group_id) ;
          LOGS()->reg_log('Удаление группы ЭСМО',$rec_group['obj_name']) ;
          $this->update_page=1 ;

      }

   }



   function import_groups_from_ad()
   {   include_once(_DIR_TO_ROOT.'/vendor/AD.php') ;
       $cnt_add=0 ; $cnt_update=0 ;
       echo 'Производится запрос к ActiveDirectory на получение списка групп<br>' ;
       $data=AD()->get_list_groups() ;
       echo 'Получено '._sizeof($data).' записей<br>' ;
       if (_sizeof($data))  foreach($data as $guid=>$group_name)
            { $id_grp=_IL('IL_ad_groups')->get_id_of_value($group_name) ;
              // добавляем группы текущего аккаунта в список, если их там еще нет
              if (!$id_grp)
              { _IL('IL_ad_groups')->append_rec_to_list(array('obj_name'=>$group_name,'arr_name'=>$guid),array('debug'=>0)) ;
                echo 'Добавлена новая группа в список групп AD ['.$group_name.']<br>' ;
                $cnt_add++ ;
              } else $cnt_update++ ;

            }
          echo 'Добавлено: '.$cnt_add.' групп<br>' ;
          echo 'Обновлено: '.$cnt_update.' групп<br>' ;
       ?><div class="center"><button class="cancel">Закрыть</button></div><?
       //$this->add_element('after_close_update_page',1) ;
       $this->add_element('show_modal_window','HTML',array('title'=>'Импорт групп из AD','after_close_update_page'=>1)) ;
   }


   function group_create()
   {  $result=ACCOUNTS()->GROUP_create($_POST['filter']) ;
      if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
      else                  {?><div class="info"><?echo $result['info']?></div><?}
      ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
      $this->add_element('show_modal_window','HTML',array('title'=>'Добавление новой рабочей группы','after_close_update_page'=>1)) ;
   }

   function terminal_create()
   {  $result=ESMO()->terminal_create($_POST['filter']) ;
      if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
      else                  {?><div class="info"><?echo $result['info']?></div><?}
      ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
      $this->add_element('show_modal_window','HTML',array('title'=>'Добавление нового терминала','_after_close_update_page'=>1)) ;
   }

   function arm_create()
   {  $result=ACCOUNTS()->ARM_create($_POST['filter']) ;
      if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
      else                  {?><div class="info"><?echo $result['info']?></div><?}
      ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
      $options=array('title'=>'Добавление нового АРМ');
      if ($_POST['after_close_update_page']) $options['after_close_update_page']=1;
      $this->add_element('show_modal_window','HTML',$options) ;
   }

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

    function arm_delete_apply()
    {
        execSQL_update('delete from obj_site_account where clss=205 and pkey='.$_POST['arm_id']) ;
        $this->add_element('show_notife','АРМ удален',array('type'=>'info')) ;
        $this->update_page=1 ;
    }

   function group_device_create()
   {   //damp_array($_POST) ;
       $arr_alert=array() ;  $window_options['title']='Добавление новой группы терминалов' ;
       // в первую очередь проверяем, что ID терминалов еще свободны
       if (_sizeof($_POST['filter']['terminal_id'])) foreach($_POST['filter']['terminal_id'] as $indx=>$terminal_id)
       {  if (!(int)$terminal_id) $arr_alert[]='<li>Некорректный ID терминала <strong>'.htmlspecialchars($terminal_id).'</strong></li>' ;
          else
          { $rec=ESMO()->get_terminal_by_id($terminal_id) ;
            if ($rec['pkey']) $arr_alert[]='<li>ID терминала <strong>'.$terminal_id.'</strong> уже используется в группе "'.$rec['_group_name'].'"</li>' ;
            $rec=ESMO()->get_terminal_by_ip($_POST['filter']['terminal_ip'][$indx]) ;
            if ($rec['pkey']) $arr_alert[]='<li>IP терминала <strong>'.$_POST['filter']['terminal_ip'][$indx].'</strong> уже используется в группе "'.$rec['_group_name'].'"</li>' ;
          }
       }
       if (_sizeof($arr_alert))
       {   $last_id=execSQL_value('select max(id) from obj_site_account where clss=203') ;
           $last_id++ ;
           $arr_alert[]='<li>В настоящий момент первый свободный ID терминала - <strong>'.$last_id.'</strong></li>' ;
       }
       // проверка корректности IP адресов
       if ($alert=$this->check_ip_addr($_POST['filter']['rmv_ip'])) $arr_alert[]='<li>РМВ - '.$alert.' <strong>'.htmlspecialchars($_POST['filter']['rmv_ip']).'</strong></li>' ;
       if (_sizeof($_POST['filter']['terminal_ip'])) foreach($_POST['filter']['terminal_ip'] as $terminal_ip)  if ($alert=$this->check_ip_addr($terminal_ip)) $arr_alert[]='<li>Терминал - '.$alert.' <strong>'.htmlspecialchars($terminal_ip).'</strong></li>' ;

       // проверка уникальности IP адреса РМВ
       $rec_arm=ACCOUNTS()->get_ARM_rec_by_IP($_POST['filter']['rmv_ip']) ;
       if ($rec_arm['pkey']) $arr_alert[]='<li>IP РМВ <strong>'.$_POST['filter']['rmv_ip'].'</strong> уже используется в группе "'.$rec_arm['_group_name'].'"</li>' ;


       ?><div class="left"><?
       if (_sizeof($arr_alert))
       { ?><div class="alert left">Для создания группы устраните следующие замечания: </div><?
         echo '<ul style="padding-left:5px;">'.implode('',$arr_alert).'</ul>' ;
         ?><div class="center"><button class="button cancel">Закрыть</button></div><?
       }
       else
       { // создаем рабочую группу, АРМ и терминалы
         $result=ACCOUNTS()->GROUP_create(array('name'=>strtoupper($_POST['filter']['group_name']),'group_id'=>$_POST['filter']['parent_group_id'])) ;
         $arr_alert[]='<li>'.$result['info'].'</li>' ;
         //damp_array($result) ;
         $group_id=$result['id'] ;
         $group_name=$_POST['filter']['group_name'] ;
         $result=ACCOUNTS()->ARM_create(array('name'=>'РМВ '.$group_name,'group_id'=>$group_id,'ip'=>$_POST['filter']['rmv_ip'])) ;

         $arr_alert[]='<li>'.$result['info'].'</li>' ;
         if (_sizeof($_POST['filter']['terminal_id'])) foreach($_POST['filter']['terminal_id'] as $indx=>$terminal_id)
         {
             $result=ESMO()->terminal_create(array('name'=>'Терминал '.$terminal_id,
                                                   'group_id'=>$group_id,
                                                   'ip'=>$_POST['filter']['terminal_ip'][$indx],
                                                   'id'=>$terminal_id,
                                                   'profil'=>$_POST['filter']['terminal_profil'][$indx]
                                            )) ;
             $arr_alert[]='<li>'.$result['info'].'</li>' ;
         }

         if (_sizeof($arr_alert))
         { ?><div class="info left">Выполнено успешно:</div><?
           echo '<ul style="padding-left:5px;">'.implode('',$arr_alert).'</ul>' ;
           ?><div class="center"><button class="button cancel">Закрыть</button></div><?
         }
         $window_options['after_close_update_page']=1 ;
         // если авторизация под фельдшером и он в основной группе - значит это инсталятор
         if (MEMBER()->rol==2 and MEMBER()->cur_group_id==$GLOBALS['LS_AD_default_group'])  ACCOUNTS()->member_logout() ;


       }
       ?></div><?
       $this->add_element('show_modal_window','HTML',$window_options) ;

   }

   function check_ip_addr($ip)
   {   $arr_IP=explode('.',$ip) ;
       if (_sizeof($arr_IP)) foreach($arr_IP as $indx=>$value) if (!$value) unset($arr_IP[$indx]) ;
       $result='' ;
       if (!_sizeof($arr_IP)) $result='Не задан IP адрес' ;
       elseif (_sizeof($arr_IP)!=4) $result='Неверный IP адрес (число октектов)' ;
       else foreach($arr_IP as $value) if ($value<1 or $value>254) $result='Неверный IP адрес (диапазон)' ;
       return($result) ;
   }


    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 account_save_sign()
      {  //damp_array($_POST,1,-1) ;
         //$this->add_element('show_modal_window','HTML',array('title'=>'Регистрация сотрудника на инструктаж','width'=>'800px')) ;
         $fname='sign_'.rand(1,1000000).'.png' ;
         $saved_fname=$this->save_send_photo($_POST['image'][1],$fname) ;
         //echo $saved_fname.'<br>' ;
         include_once(_DIR_TO_ENGINE.'/admin/i_admin_system.php') ;
         $old_sign=execSQL_row('select pkey,file_name from obj_site_account_image where parent='.$_POST['account_id'].' and alt="signature"') ;
         if (_sizeof($old_sign)) foreach($old_sign as $id=>$fname)
         {  if (file_exists(_DIR_TO_ROOT.'/public/account/source/'.$fname)) unlink(_DIR_TO_ROOT.'/public/account/source/'.$fname) ;
            execSQL_update('delete from obj_site_account_image where pkey='.$id) ;
         }
         $rec_account=ACCOUNTS()->get_member_by_id($_POST['account_id']) ;
         //echo 'reffer='.$rec_account['_reffer'].'<br>' ;
         $res_upload=obj_upload_image($rec_account['_reffer'],array('name'=>'sign_'.date('Y_m_d_h_i_s').'.png','upl_name'=>$saved_fname),array('view_upload'=>1,'img_alt'=>'signature')) ;
         $this->add_element('show_modal_window','HTML',array('title'=>'Загрузка подписи','after_close_update_page'=>1)) ;
         ?><div class="center sky-form"><button class="button cancel">Закрыть</button></div><?
         //$this->update_page=1 ;

      }

    function save_send_photo($data,$img_name)
          { $img_string=base64_decode($data) ;  //echo $img_string ;
            $img_dir='/temp/'.$img_name ;
            if (file_exists(_DIR_TO_ROOT.$img_dir)) unlink(_DIR_TO_ROOT.$img_dir) ;
            file_put_contents(_DIR_TO_ROOT.$img_dir,$img_string) ;
            return(_DIR_TO_ROOT.$img_dir) ;
          }

    function local_create()
    {
       if ($_POST['new_local_name']) adding_rec_to_table('obj_site_locals',array('parent'=>1,'clss'=>1,'obj_name'=>$_POST['new_local_name'])) ;
       $this->update_page=1 ;

    }

    function local_word_add()
    {
       if ($_POST['filter']['name'] and $_POST['filter']['name2'] and $_POST['local_id']) adding_rec_to_table('obj_site_locals',array('parent'=>$_POST['local_id'],'clss'=>275,'obj_name'=>$_POST['filter']['name'],'obj_name_loc'=>$_POST['filter']['name2'])) ;
       $this->update_page=1 ;
    }

    function local_word_save()
    { if (isset($_POST['name'][$_POST['word_id']]) and isset($_POST['name2'][$_POST['word_id']]))
      { update_rec_in_table('obj_site_locals',
                             array('obj_name'=>$_POST['name'][$_POST['word_id']],
                                   'obj_name_loc'=>$_POST['name2'][$_POST['word_id']]
                            ),'pkey='.$_POST['word_id']) ;
        $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;
      }

    }

    function local_delete()
    { if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $check_id)
      { execSQL_update('delete from obj_site_locals where pkey='.$check_id.' or parent='.$check_id) ;
      }
      $this->add_element('update_page',1) ;
    }

    function change_cron_work_status()
    {  $rec_crontab=execSQL_van('select * from obj_site_crontab where pkey='.$_POST['id']) ;
       SETUP()->change_cron_status($rec_crontab['cmd'],$_POST['checked']) ;
       $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;
    }

    function convert_patch_to_yaml()
    {
        include_once(_DIR_TO_MODULES.'/engine/i_setup.php') ;
        //damp_array($GLOBALS['_SETTING']) ;
        SETUP()->save_ini_setting('/ini/ini.yaml',$GLOBALS['_SETTING']) ;
        echo 'Создан  файл конфига <strong>ini.yaml</strong><br>' ;
        $this->check_exists_file('/ini/spyc.php',_DIR_TO_MODULES.'/engine/Spyc.php') ;
        $this->check_exists_file('/ini/patch_rescopy.php',_DIR_TO_ROOT.'/ini/patch.php') ;
        if (file_exists(_DIR_TO_ROOT.'/ini/ini.yaml') and file_exists(_DIR_TO_ROOT.'/ini/spyc.php') and file_exists(_DIR_TO_ROOT.'/ini/patch_rescopy.php'))
        { echo 'Производим замену <strong>patch.php</strong> ' ;
          $len=file_put_contents(_DIR_TO_ROOT.'/ini/patch.php',SETUP()->get_default_patch_file()) ;
          if ($len) echo ' - <span class="green">OK</span>' ;
          else      echo ' - <span class="red">ERROR</span>' ;
        } else echo '<span class="red">Конвертация отменена</span><br>'
        ?><div class="center"><button class="cancel">Закрыть</button></div> <?
        $this->add_element('show_modal_window','HTML',array('title'=>'Конвертация файла настроек','after_close_update_page'=>1)) ;
    }

    function check_exists_file($check_file,$source)
       {
           if (!file_exists(_DIR_TO_ROOT.$check_file))
            {   echo 'Будет создан скрипт <strong>'.$check_file.'</strong>' ;
                if (!file_exists($source))  echo ' - <span class="red">Отсутствует шаблон скрипта в директории IN: '.$source.'</span>' ;
                else
                { if (copy($source,_DIR_TO_ROOT.$check_file)) echo ' - <span class="green">OK</span>' ;
                  else                                        echo ' - <span class="red">ERROR</span>' ;
                }
            }
           else echo '<strong>'.$check_file.'</strong> - <span class="green">OK</span>' ;
           echo '<br>' ;
       }

     function view_ini()
     {  $cont=file_get_contents(_DIR_TO_ROOT.'/ini/'.basename($_POST['target'])) ;
        ?><textarea style="width:100%;height:500px;"><? echo $cont; ?></textarea><?
        ?><div class="center"><button class="cancel">Закрыть</button></div> <?
        $this->add_element('show_modal_window','HTML',array('title'=>'Файл INIT','after_close_update_page'=>0)) ;
     }

     function edit_setting()
     {
       $rec=execSQL_van('select * from '.TM_SETTING.' where pkey='.$_POST['id']) ;
       if (MEMBER()->rol == 6) $rec['value'] = load_setting_for_client(MEMBER()->cur_group_id,$rec['comment']);
       $options=array() ;
       $var_name=$rec['comment'] ;
       $form_element_name='setting['.$var_name.']' ;
       $ext_info=unserialize($rec['ext_info']) ;
       $check_value = ($ext_info['time_stamp']) ?  time(): 1;

       if ($ext_info['type']=='int') $rec['value']=(int)$rec['value'] ;
       if ($ext_info['type']=='string') $rec['value']=(string)$rec['value'] ;
       if ($ext_info['type']=='numeric') $rec['value']=(float)$rec['value'] ;

       if ($ext_info['place']=='ini')
       { $arr_code=explode('/',$var_name) ;
         if (sizeof($arr_code)==1) { $rec['value']=$GLOBALS['_SETTING']['LocalSettings'][$var_name] ; $form_element_name='IS[LocalSettings]['.$var_name.']' ; }
         else                      { $rec['value']=$GLOBALS['_SETTING'][$arr_code[0]][$arr_code[1]] ; $form_element_name='IS['.$arr_code[0].']['.$arr_code[1].']' ; }
        }
       //echo 'value='.$rec['value'].'<br>' ;

       //$this->add_element('show_modal_window','HTML',array('title'=>'edit_setting','_after_close_update_page'=>0)) ;


       ob_start() ;
       ?><form id="form_LS_<?echo $rec['pkey']?>"><?
        // damp_array($rec,1,-1) ;
        // echo 'value='.$GLOBALS[$var_name].'<br>' ;
       switch($ext_info['el'])
       { case 'checkbox':  ?><input type="hidden" name="<?echo $form_element_name?>" value="0">
                             <input type="checkbox" name="<?echo $form_element_name?>" value="<?echo $check_value;?>" <?if ($rec['value']) echo 'checked'?>>
                            <?
                            break ;
         case 'select':     $arr=ENGINE()->get_arr_to_edit_element($ext_info) ;
                            ?><select name="<?echo $form_element_name?>"><?
                            if (_sizeof($arr)) foreach($arr as $id=>$value){?><option value="<?echo $id?>" <?if ($id==$rec['value']) echo 'selected'?>><?echo $value?></option><?}
                            ?></select><?
                            break ;
         case 'multiselect': $arr=ENGINE()->get_arr_to_edit_element($ext_info) ;
                             $values=explode(',',$rec['value']) ;
                             ?><select style="width:500px;" name="<?echo $form_element_name?>[]" multiple="multiple" ><?
                             if (_sizeof($arr)) foreach($arr as $id=>$value){?><option value="<?echo $id?>" <?if (in_array($id,$values)) echo 'selected'?>><?echo $value?></option><?}
                             ?></select><?
                             break ;
         case 'textarea':  ?><textarea name="<?echo $form_element_name?>"><?echo $rec['value']?></textarea><?
                           break ;
         default:  $type=($rec['crypt'])? 'password':'text' ;
                    if ($ext_info['el']=='date') { $type='date' ; $options['class']='datepicker' ; }
                   FORM()->element_input(['type'=>$type,'style'=>$options['style'],'class'=>$options['class'],'name'=>$form_element_name,'value'=>$rec['value']]); ;
                    /*?><input type="<?echo $type?>" <?if ($options['style']) echo ' style="'.$options['style'].'"'?>  <?if ($options['class']) echo ' class="'.$options['class'].'"'?> name="<?echo $form_element_name?>" value="<?echo htmlspecialchars($rec['value'])?>"><?*/
       }
       ?></form><?
       $text=ob_get_clean() ;
       $this->add_element('td_LS_'.$rec['pkey'].'_value.HTML',$text) ;
       $this->add_element('td_LS_'.$rec['pkey'].'_button.HTML','<button class="button easy v2" data-testId="saveSetting" cmd="aspmo_setting/save_setting" id="'.$rec['pkey'].'" use_form="form_LS_'.$rec['pkey'].'" no_update_page="1" from_site_setting="1">Сохранить</button>') ;
     }

     function edit_setting_toggle_checkbox()
     {
         //damp_array($_POST);
         //$this->add_element('show_modal_window','HTML',array('title'=>'edit_setting_toggle_checkbox','_after_close_update_page'=>0)) ;

         update_site_setting_by_id($_POST['id'],$_POST['checked']) ;
         $title=($_POST['checked'])? 'Да':'Нет' ;
         $this->add_element('label_checkbox_'.$_POST['id'].'.HTML',$title);
         $this->add_element('show_notife','Сохранено',array('color'=>'green')) ;
     }

     // обновляем значение переменной после сохранения
     function view_setting()
     { if (!$_POST['id']) return ;
       $rec_item=execSQL_van('select * from '.TM_SETTING.' where pkey='.$_POST['id']) ;
       if (MEMBER()->rol == 6) $rec_item['value'] = load_setting_for_client(MEMBER()->cur_group_id,$rec_item['comment']);
       $ext_info=unserialize($rec_item['ext_info']) ;

       if ($ext_info['type']=='int') $rec_item['value']=(int)$rec_item['value'] ;
       if ($ext_info['type']=='string') $rec_item['value']=(string)$rec_item['value'] ;
       if ($ext_info['type']=='numeric') $rec_item['value']=(float)$rec_item['value'] ;

       $var_name=$rec_item['comment'] ;
       if ($ext_info['place']=='ini')
       { $arr_code=explode('/',$var_name) ;
         if (sizeof($arr_code)==1) $rec_item['value']=$GLOBALS['_SETTING']['LocalSettings'][$var_name] ;
         else                      $rec_item['value']=$GLOBALS['_SETTING'][$arr_code[0]][$arr_code[1]] ;

       }

       ob_start() ;
       switch($ext_info['el'])
       {case 'checkbox': echo ($rec_item['value'])? 'Да':'Нет' ;
                         break ;
        case 'select':   $arr=ENGINE()->get_arr_to_edit_element($ext_info) ;
                         echo $arr[$rec_item['value']] ;
                         break ;
        case 'multiselect':
                         $arr=ENGINE()->get_arr_to_edit_element($ext_info) ;
                         $values=explode(',',$rec_item['value']) ;
                         $arr_val=array() ;
                         if (_sizeof($values))foreach($values as $id) $arr_val[]=$arr[$id] ;
                         echo implode(', ',$arr_val) ;
                         break ;
        default:         if ($rec_item['crypt']) echo '*********' ;
                         else {
                             if (!$ext_info['shieldHTMLChar']) echo $rec_item['value'];
                             else echo htmlspecialchars($rec_item['value']);
                         }
       }
       if ($ext_info['human']) echo '<span class=human> = '.ENGINE()->view_human_time_period($ext_info['human'],$GLOBALS[$rec_item['comment']]).'</span>' ;
       $text=ob_get_clean() ;
       $this->add_element('td_LS_'.$rec_item['pkey'].'_value.HTML',$text) ;
       $this->add_element('td_LS_'.$rec_item['pkey'].'_button.HTML','<button class="button v2" cmd="aspmo_setting/edit_setting" id="'.$rec_item['pkey'].'" >Изменить</button>') ;
     }

     function view_group_filter()
     {   $group_id=(int)$_POST['group_id'] ;
         if (!$group_id) return ;
         $rec_group=ACCOUNTS()->get_group_by_id($group_id) ;
         $group_filters=PERSONALS_FILTER()->get_personals_filter_to_item($rec_group['_reffer']) ;
         // получаем все записи по организациям
         $arr_orgs=execSQL_line('select obj_name from obj_site_personals where clss=207 and group_id='.$group_id) ;

         if (_sizeof($arr_orgs)) echo '<strong>Организации, привязанные к группе:</strong><br>'.implode(', ',$arr_orgs).'<br><br>' ;
         if (_sizeof($group_filters))
         {   echo '<strong>Фильтр по сотрудникам в группе: </strong><br>' ;
             PERSONALS_FILTER()->get_personals_filter_info_to_item($rec_group['_reffer']) ;
         }

         $this->add_element('show_modal_window','HTML',array('title'=>'Группа - привязанные организации/фильтр по сотрудникам','after_close_update_page'=>0)) ;
         ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
     }


     function device_create()
     {
        $data=[];
        if ($_POST['device_parent']) $data['parent']=$_POST['device_parent'];
        if ($_POST['device_type']) $data['terminal_type']=$_POST['device_type'];
        if ($_POST['device_name']) $data['name']=$_POST['device_name'];
        if ($_POST['device_id']) $data['id']=$_POST['device_id'];
        if ($_POST['device_ip']) $data['ip']=$_POST['device_ip'];
        $data['clss']=242;
        $result=DEVICE()->terminal_create($data) ;
        if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
        else                  {?><div class="info"><?echo $result['info']?></div><?}
        ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
        $this->add_element('show_modal_window','HTML',array('title'=>'Добавление нового устройства','after_close_update_page'=>1)) ;
     }

     function device_reboot()
     {
         if ($_POST['device_id'] and $_POST['device_type']=='pp') {
             DEVICE()->device_send_async_cmd((int) $_POST['device_id'],'reboot',array('pause'=>5,'device'=>1)) ;
         }
     }

     function crontab_restart()
     {
         update_site_setting('LS_last_cron_status',0,array('no_log'=>1)) ;
         $this->update_page=1 ;
     }

     function delete_check_class_dir()
     {   echo '<strong>Будут удалены версии ПО:</strong>' ;
         $form = new i_form() ;
         $form->form_open();

         ?><div style="height:100px;overflow-y:scroll;border:1px solid #eeeeee;"><?
         if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $val) echo '<div>'.$val.'<input type="hidden" name="_check[]" value="'.$val.'"></div>' ;
         ?></div>
           <button class="button cancel">Закрыть</button><button class="button v2" cmd="aspmo_setting/delete_check_class_dir_apply">Удалить</button><?
         $form->form_close();

         $this->add_element('show_modal_window','HTML',array('title'=>'Удаление старых версий ПО')) ;
     }

     function delete_check_class_dir_apply()
     {   $form = new i_form() ;
         $form->form_open();
         ?><div style="height:100px;overflow-y:scroll;border:1px solid #eeeeee;"><?
         if (_sizeof($_POST['_check'])) foreach($_POST['_check'] as $dir) SETUP()->remove_old_dir('/'.$dir.'/');
         ?></div><button class="button cancel">Закрыть</button><?
         $form->form_close();

         $this->add_element('show_modal_window','HTML',array('title'=>'Удаление старых версий ПО','after_close_update_page'=>1)) ;
     }

     function test_send_ws_message()
     {  if ($_POST['group_id'] and $_POST['ws_message'])
        {  $message = ['notife_text'=>$_POST['ws_message'],
                       'notife'=>'info'
                      ];
           $result= \cab\system\i_ws::send_mess_to_WS([$_POST['group_id']],$message);
           if ($result['status']==204) $this->add_element('show_notife','Сообщение оправлено',array('color'=>'green')) ;
           else
           {
               $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;
               damp_array($result,1,-1);
           }

        }
        else if (!$_POST['group_id']) $this->add_element('show_notife','Не указана группа',array('color'=>'red')) ;
        else if (!$_POST['ws_message']) $this->add_element('show_notife','Не указано сообщение',array('color'=>'red')) ;
     }

     function test_send_ws_content($aa)
     {
       $group_id=$_POST['group_id'] ;
       $member_id=$_POST['member_id'] ;
       if (sizeof($_POST['div']['update'])) foreach($_POST['div']['update'] as $id=>$value)  \cab\system\i_ws_update_content::update_content($group_id,$member_id,$id,$value) ;
       if (sizeof($_POST['div']['append'])) foreach($_POST['div']['append'] as $id=>$value)  \cab\system\i_ws_update_content::append_content($group_id,$member_id,$id,$value."<br>") ;
       $result= \cab\system\i_ws_update_content::send() ;
       if ($result['status']!=204)
       {   damp_array($result,1,-1);
           $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;
       }
       else $this->add_element('show_notife','Отправлено',array('color'=>'green')) ;
     }

     function test_send_ws_message_alco_alert()
     {
        //damp_array($_POST) ;
        if ($_POST['group_id'])
        {  $recipient=($_POST['recipient'])?:0 ;
           $result=ESMO()->send_mess_to_WS_alco_alert($_POST['group_id'],1,'Иванов Иван Иванович','0.8',$recipient) ;
           if ($result['status']==204) $this->add_element('show_notife','Сообщение оправлено',array('color'=>'green')) ;
        else
        {
               $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message_alco_alert','_after_close_update_page'=>1)) ;
            damp_array($result,1,-1);
           }

        }
        else $this->add_element('show_notife','Не указана группа',array('color'=>'red')) ;
     }

     function test_send_ws_close_message_alco_alert()
     {
        //damp_array($_POST) ;
        if ($_POST['group_id'])
        {
           $message = ['type'=>'close_modal_window',
                       'id'=>'alco_alert'
                     ];
          $result= \cab\system\i_ws::send_mess_to_WS([$_POST['group_id']],$message);
          if ($result['status']==204) $this->add_element('show_notife','Сообщение оправлено',array('color'=>'green')) ;
          else
          {
            $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;
              damp_array($result,1,-1);
        }

        }
        else $this->add_element('show_notife','Не указана группа',array('color'=>'red')) ;
     }

     function mo_schedule_create()
     {
        $this->add_element('show_modal_window','HTML',array('title'=>'Добавление расписания МО','_after_close_update_page'=>1)) ;
        //$arr_personal_groups=PERSONAL()->get_list_groups() ;

        $form=new i_form(['post_array_name'=>'data']);
        $form->form_open();

        $form->row_open() ;
        $form->filter_section_select('group_id','Группа сотрудников',11,_IL('IL_groups')->recs,array('cur_value'=>$this->rec_known['manual'],'required'=>1));
        $form->row_close() ;
        $form->row_open() ;
        $form->filter_section_input_text('time_from','Время от',4,array('cur_value'=>$this->rec_known['obj_name'],'data-mask'=>"00:00",'placeholder'=>'00:00'));
        $form->filter_section_input_text('time_to','Время до',4,array('cur_value'=>$this->rec_known['obj_name'],'data-mask'=>"00:00",'placeholder'=>'00:00'));
        $form->row_close() ;
        $form->fieldset_open();
        $form->row_open() ;

        ?><strong>Дни недели</strong><br>
        <table class="basic fz_small full fixed">
            <tr>
                <th>ПН</th>
                <th>ВТ</th>
                <th>СР</th>
                <th>ЧТ</th>
                <th>ПТ</th>
                <th>СБ</th>
                <th>ВС</th>
            </tr>
            <tr>
                <td><input type="hidden" name="data[day1]" value="0"><input type=checkbox name="data[day1]" value="1" checked><i></i></td>
                <td><input type="hidden" name="data[day2]" value="0"><input type=checkbox name="data[day2]" value="1" checked><i></i></td>
                <td><input type="hidden" name="data[day3]" value="0"><input type=checkbox name="data[day3]" value="1" checked><i></i></td>
                <td><input type="hidden" name="data[day4]" value="0"><input type=checkbox name="data[day4]" value="1" checked><i></i></td>
                <td><input type="hidden" name="data[day5]" value="0"><input type=checkbox name="data[day5]" value="1" checked><i></i></td>
                <td><input type="hidden" name="data[day6]" value="0"><input type=checkbox name="data[day6]" value="1" checked><i></i></td>
                <td><input type="hidden" name="data[day7]" value="0"><input type=checkbox name="data[day7]" value="1" checked><i></i></td>
            </tr>
        </table><br>
        <strong>Действие</strong><br><br>
        <input type="radio" name="data[action]" value="1" checked><i></i><label> Разрешено МО</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <input type="radio" name="data[action]" value="0" ><label> Запрещено МО</label>
         <br><br>

        <?
        $form->row_close() ;

        $form->row_open(['class'=>'center']);
        $form->button('Сохранить','aspmo_setting/mo_schedule_create_apply',['workgroup_id'=>$_POST['workgroup_id']]);
        $form->row_close();
        $form->fieldset_close();
        $form->form_close();
     }

    function mo_schedule_create_apply()
    {  $error=[] ;
       if (!$_POST['data']['group_id']) $error[]='Не выбрана группа сотрудников' ;
       $arr=explode(':',$_POST['data']['time_from']) ;
       if (!$arr[0] or $arr[0]>23 or !$arr[1] or $arr[1]>59) $error[]='Некорректно указано время от' ;
       $arr=explode(':',$_POST['data']['time_to']) ;
       if (!$arr[0] or $arr[0]>23  or !$arr[1] or $arr[1]>59) $error[]='Некорректно указано время до' ;
       if (_sizeof($error))
       {
           $this->add_element('show_notife',implode('<br>',$error),array('color'=>'red')) ;
       }
       else
       { //damp_array($_POST);
         $data=['clss'=>294,
                'work_group_id'=>$_POST['workgroup_id'],
                'personal_group_id'=>$_POST['data']['group_id'],
                'time_from'=>$_POST['data']['time_from'],
                'time_to'=>$_POST['data']['time_to'],
                'action'=>$_POST['data']['action'],
                ] ;
         $days='' ;
         for($i=1;$i<=7;$i++) $days.=($_POST['data']['day'.$i])? 1:0 ;
         $data['days']=$days ;
         //damp_array($data,1,-1);
         $id=adding_rec_to_table('mo_schedule',$data) ;
         echo 'Расписание успешно добавлено, ID='.$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 mo_schedule_remove()
    {
        execSQL_update('delete from mo_schedule where pkey='.$_POST['item_id']) ;
        $this->update_page=1 ;
    }

    function mo_schedule_edit()
    {
        $this->add_element('show_modal_window','HTML',array('title'=>'Редактирование расписания МО','_after_close_update_page'=>1)) ;
        $rec=execSQL_van('select * from mo_schedule where pkey='.$_POST['item_id']) ;

        $form=new i_form(['post_array_name'=>'data']);
        $form->form_open();
        ?><input type="hidden" name="data[enabled]" value="0"><input type=checkbox name="data[enabled]" value="1" <?if ($rec['enabled']) echo 'checked'?>><i></i> Правило активно<br><br><?
        $form->row_open() ;
        $form->filter_section_select('group_id','Группа сотрудников',11,_IL('IL_groups')->recs,array('cur_value'=>$rec['personal_group_id'],'required'=>1));
        $form->row_close() ;
        $form->row_open() ;
        $form->filter_section_input_text('time_from','Время от',4,array('cur_value'=>$rec['time_from'],'data-mask'=>"00:00",'placeholder'=>'00:00'));
        $form->filter_section_input_text('time_to','Время до',4,array('cur_value'=>$rec['time_to'],'data-mask'=>"00:00",'placeholder'=>'00:00'));
        $form->row_close() ;
        $form->fieldset_open();
        $form->row_open() ;

        $days=$arr=str_split($rec['days']) ;

        ?><strong>Дни недели</strong><br>
        <table class="basic fz_small full fixed">
            <tr>
                <th>ПН</th>
                <th>ВТ</th>
                <th>СР</th>
                <th>ЧТ</th>
                <th>ПТ</th>
                <th>СБ</th>
                <th>ВС</th>
            </tr>
            <tr>
                <td><input type="hidden" name="data[day1]" value="0"><input type=checkbox name="data[day1]" value="1" <?if ($days[0]) echo 'checked'?>><i></i></td>
                <td><input type="hidden" name="data[day2]" value="0"><input type=checkbox name="data[day2]" value="1" <?if ($days[1]) echo 'checked'?>><i></i></td>
                <td><input type="hidden" name="data[day3]" value="0"><input type=checkbox name="data[day3]" value="1" <?if ($days[2]) echo 'checked'?>><i></i></td>
                <td><input type="hidden" name="data[day4]" value="0"><input type=checkbox name="data[day4]" value="1" <?if ($days[3]) echo 'checked'?>><i></i></td>
                <td><input type="hidden" name="data[day5]" value="0"><input type=checkbox name="data[day5]" value="1" <?if ($days[4]) echo 'checked'?>><i></i></td>
                <td><input type="hidden" name="data[day6]" value="0"><input type=checkbox name="data[day6]" value="1" <?if ($days[5]) echo 'checked'?>><i></i></td>
                <td><input type="hidden" name="data[day7]" value="0"><input type=checkbox name="data[day7]" value="1" <?if ($days[6]) echo 'checked'?>><i></i></td>
            </tr>
        </table><br>
        <strong>Действие</strong><br><br>
        <input type="radio" name="data[action]" value="1" <?if ($rec['action']==1) echo 'checked'?>><i></i><label> Разрешено МО</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <input type="radio" name="data[action]" value="0" <?if ($rec['action']==0) echo 'checked'?>><label> Запрещено МО</label>
         <br><br>

        <?
        $form->row_close() ;

        $form->row_open(['class'=>'center']);
        $form->button('Сохранить','aspmo_setting/mo_schedule_edit_apply',['item_id'=>$_POST['item_id'],'workgroup_id'=>$_POST['workgroup_id']]);
        $form->row_close();
        $form->fieldset_close();
        $form->form_close();
    }


    function mo_schedule_edit_apply()
    {  $error=[] ;
       if (!$_POST['data']['group_id']) $error[]='Не выбрана группа сотрудников' ;
       $arr=explode(':',$_POST['data']['time_from']) ;
       if (!$arr[0] or $arr[0]>23 or !$arr[1] or $arr[1]>59) $error[]='Некорректно указано время от' ;
       $arr=explode(':',$_POST['data']['time_to']) ;
       if (!$arr[0] or $arr[0]>23  or !$arr[1] or $arr[1]>59) $error[]='Некорректно указано время до' ;
       if (_sizeof($error))
       {
           $this->add_element('show_notife',implode('<br>',$error),array('color'=>'red')) ;
       }
       else
       { //damp_array($_POST);
         $data=['enabled'=>$_POST['data']['enabled'],
                'personal_group_id'=>$_POST['data']['group_id'],
                'time_from'=>$_POST['data']['time_from'],
                'time_to'=>$_POST['data']['time_to'],
                'action'=>$_POST['data']['action'],
                ] ;
         $days='' ;
         for($i=1;$i<=7;$i++) $days.=($_POST['data']['day'.$i])? 1:0 ;
         $data['days']=$days ;
         //damp_array($data,1,-1);
         update_rec_in_table('mo_schedule',$data,'pkey='.$_POST['item_id']) ;
         echo 'Расписание успешно сохранено<br>' ;

         ?><div class="center"><button class="cancel">Закрыть</button></div><?
         //$this->add_element('show_modal_window','HTML',array('title'=>'Добавление расписания','after_close_update_page'=>1)) ;
         $this->update_page=1 ;
       }
    }

    function mo_schedule_check()
    {
        $this->add_element('show_modal_window','HTML',array('title'=>'Проверка расписания','_width'=>'800px')) ;
        $arr_groups=ACCOUNTS()->get_arr_groups_to_cur_account() ;
        $form=new i_form(['post_array_name'=>'data']);
        $form->form_open();
        $form->row_open() ;
        $form->filter_section_select('group_id','Группа терминала',11,$arr_groups,array('required'=>1));
        $form->filter_section_input_text('time_MO','Время МО',4,array('cur_value'=>date('H:i'),'data-mask'=>"00:00",'placeholder'=>'00:00'));
        $form->filter_section_input_text('propusk','Пропуск сотрудника',4,array());
        $form->row_close() ;
        $form->fieldset_open();
        $form->row_open(['class'=>'center']);
        $form->button('Проверить','aspmo_setting/mo_schedule_check_apply',['item_id'=>$_POST['item_id'],'workgroup_id'=>$_POST['workgroup_id']]);
        ?><button type="button" class="button easy cancel">Закрыть</button><?
        $form->row_close();
        $form->fieldset_close();
        $form->form_close();
        ?><br><div id="panel_result"></div><?
    }

    function mo_schedule_check_apply()
    {    $error=[] ; $rec_personal=[] ;

         if (!$_POST['data']['group_id']) $error[]='Не выбрана группа терминала МО' ;
         if (!$_POST['data']['propusk']) $error[]='Не указан пропуск сотрудника' ;
         else
         { $rec_personal=PERSONAL()->get_personal_by_propusk($_POST['data']['propusk']) ;
           if (!$rec_personal['pkey']) $error[]='Cотрудник не найден' ;
         }
         $arr=explode(':',$_POST['data']['time_MO']) ;
         if (!$arr[0] or $arr[0]>23 or !$arr[1] or $arr[1]>59) $error[]='Некорректно указано время МО' ;
         if (_sizeof($error))
         {
               $this->add_element('show_notife',implode('<br>',$error),array('color'=>'red')) ;
               $this->add_element('panel_result.HTML','');
         }
         else
         {
            ob_start() ;
            echo 'Сотрудник: <strong>'.$rec_personal['obj_name'].'</strong><br>' ;
            echo 'Группы сотрудника:' ; if ($rec_personal['_groups_personal']) echo '<strong>'.implode(', ',$rec_personal['_groups_personal']).'</strong><br>'; else echo '<div class=red>НЕТ</div>' ;
            include(_DIR_TO_MODULES.'/aspmo/i_mo_schedule.php') ;
            $mo_schedule=new i_mo_schedule() ;
            list($allow_mo,$t_end_block,$time_wait)=$mo_schedule->check_chedule($_POST['data']['group_id'],$rec_personal['_groups_personal'],$_POST['data']['time_MO'],['view_debug'=>1]);
            $text=ob_get_clean() ;
            $this->add_element('panel_result.HTML',$text);
         }






    }

    function remove_setup_files()
    {
        SETUP()->remove_old_dir('/setup/') ;
        ?><button class="button cancel">Закрыть</button><?
        $this->add_element('show_modal_window','HTML',array('title'=>'Удаление инсталяционных файлов','after_close_update_page'=>1)) ;
    }

    function edit_timetable()
    {
        $intr = execSQL_value('select intr from obj_site_crontab where pkey='.$_POST['cron_id']);
        list($type,$hour,$min) = $this->get_type_and_time($intr); ?>
        <form class="sky-form no_box_shadow">
            <input type="hidden" name="filter[id]" value="<?echo $_POST['cron_id']?>">
            <div class="row">
                <section class="col col-6">
                    <label class="label" for="select_group_id">Период:</label>
                    <label class="select">
                        <select id="type" name="filter[type_period]" autofocus_isset="0" autofocus="1" class="form-control">
                            <option value="0" <?if (!$type or $type == 0) echo 'selected';?>>Каждые X минут</option>
                            <option value="1" <?if ($type == 1) echo 'selected';?>>Раз в час</option>
                            <option value="2" <?if ($type == 2) echo 'selected';?>>Каждые X часов</option>
                            <option value="3" <?if ($type == 3) echo 'selected';?>>Раз в сутки</option>
                        </select><i></i>
                    </label>
                </section>
                <section id="hour" class="col col-2 <?if ($type < 3) echo 'display_none'?>">
                    <label class="label">Часы:</label>
                    <label class="input">
                        <input id="hour" type="text" value="<?if ($hour) echo $hour; else echo '0';?>" name="filter[hour]">
                    </label>
                </section>
                <section id="min" class="col col-2 <?if ($type == 2) echo 'display_none'?>">
                    <label class="label">Минуты:</label>
                    <label class="input">
                        <input id="min" type="text" value="<?if ($min) echo $min; else echo '0';?>" name="filter[min]">
                    </label>
                </section>
            </div>
            <div id="panel_buttons">
                <br>
                <button class="button v2" cmd="aspmo_setting/save_cron_time">Сохранить</button>
                <button class="button cancel">Закрыть</button>
            </div>
        </form>
        <style>
            .display_none {display: none;}
        </style>
        <script>
            $j('input#hour').keyup(function() {
                let hour = parseInt($j(this).val());
                if (hour >= 0 && hour < 24) {
                    $j(this).val(hour);
                } else {
                    $j(this).val('');
                }
            });
            $j('input#min').keyup(function() {
                let min = parseInt($j(this).val());
                if (min >= 0 && min < 60) {
                    $j(this).val(min);
                } else {
                    $j(this).val('');
                }
            });
            $j('select#type').change(function () {
                let type = $j('select option:selected').val();
                //показываем часы
                if (type >= 2) {
                    $j('section#hour').removeClass('display_none');
                } else {
                    $j('section#hour').addClass('display_none');
                }
                //показываем минуты
                if (type == 2) {
                    $j('section#min').addClass('display_none');
                } else {
                    $j('section#min').removeClass('display_none');
                }
            });
        </script><?
        $this->add_element('show_modal_window','HTML',array('title'=>$_POST['cron_name']));
    }

    function get_type_and_time($intr)
    {
        $type=''; $hour=''; $min='';
        $arrayTime = explode(' ',$intr);
        if (strripos($arrayTime[0],'/')) {
            $min = trim($arrayTime[0],'*/');
            $type = 0; //каждые Х минут
        } else if ($arrayTime[0] and $arrayTime[1] == '*') {
            $min = $arrayTime[0];
            $type = 1; //раз в час
        } else if (strripos($arrayTime[1],'/')) {
            $hour = trim($arrayTime[1],'*/');
            $type = 2; //каждые Х часов
        }  else {
            $hour = $arrayTime[1];
            $min = $arrayTime[0];
            $type = 3; //раз в сутки
        }
        return array($type,$hour,$min);
    }

    function save_cron_time()
    {
        $hour='';$min='';
        //приводим время запуска крона к нужному виду
        if ($_POST['filter']['type_period'] == 0) { //каждые Х минут
            $min = ($_POST['filter']['min'])? $_POST['filter']['min']: '0';
            $time = '*/'.$min.' * * * *';
        } else if ($_POST['filter']['type_period'] == 1) { //раз в час
            $min = ($_POST['filter']['min'])? $_POST['filter']['min']: '0';
            $time = $min.' * * * *';
        } else if ($_POST['filter']['type_period'] == 2) { ///каждые Х часов
            $hour = ($_POST['filter']['hour'])? $_POST['filter']['hour']: '0';
            $time = '0 */'.$hour.' * * *';
        } else { //раз в сутки
            $hour = ($_POST['filter']['hour'])? $_POST['filter']['hour']: '0';
            $min = ($_POST['filter']['min'])? $_POST['filter']['min']: '0';
            $time = $min.' '.$hour.' * * *';
        }

        $intr = execSQL_van('select intr,default_intr from obj_site_crontab where pkey='.$_POST['filter']['id']);

        //проверка что крон будет запускаться не чаще чем рекомендуется
        if ($intr['default_intr']) list($type,$old_hour,$old_min) = $this->get_type_and_time($intr['default_intr']);
        else list($type,$old_hour,$old_min) = $this->get_type_and_time($intr['intr']);
        $correct_cron = $this->checking_for_correct_cron(['type'=>$type,'hour'=>$old_hour,'min'=>$old_min],['type'=>$_POST['filter']['type_period'],'hour'=>$hour,'min'=>$min]);

        if (!$correct_cron) { //если частота крона не корректная
            ?><div class="red">Частота запуска задания не должна превышать заданное по умолчанию значение. Частый запуск может привести к падению сервера.</div><?
        }
        if ($intr['intr'] == $time) { //если занчение не изменилось
            ?><div class="green">Изменений не обнаружено</div><?
        } else { //все ок, обновляем данные по крону
            $new_intr = [];
            //если значение по умолчанию не указано, значит значение ранее не изменялось, в intr будет значение по умолчанию
            if (!$intr['default_intr']) $new_intr['default_intr'] = $intr['intr'];
            //если новое значение = старому значению, значение по дефолту можно стереть
            else if ($intr['default_intr'] == $time) {
                $new_intr['default_intr'] = '';
            }
            $new_intr['intr'] = $time;
            $result = update_rec_in_table('obj_site_crontab', $new_intr, 'pkey=' . $_POST['filter']['id']);
            if (!$result['found']) { ?>
                <div class="red">Не удалось изменить данные по крону</div><?
            } else if ($result['update']) { ?>
                <div class="green">Данные изменены</div><?
            }
        }
        ?><div id="panel_buttons">
            <button class="button cancel">Закрыть</button>
        </div><?
        $this->add_element('show_modal_window','HTML',array('title'=>'Обновление расписания cron','after_close_update_page'=>1));
    }

    function checking_for_correct_cron($old_data,$new_data)
    {
        if ($new_data['type'] < $old_data['type']) {
            return false;
        } else if ($new_data['type'] == $old_data['type']) {
            //если частота запуска крона осталась та же, для "каждые Х минут/часов" нужно проверить что запуск не стал чаще
            if ($new_data['type'] == 0 and $old_data['min'] > $new_data['min']) return false; //каждые Х минут
            if ($new_data['type'] == 2 and $old_data['hour'] > $new_data['hour']) return false; //каждые Х часов
        }
        return true;
    }

    function account_remove()
    {
        execSQL_update('delete from clients where account_id='.$_POST['account_id']) ;
        execSQL_update('delete from obj_site_account where pkey='.$_POST['account_id']) ;
        $this->update_page=1 ;
	}

 function start_versions_file_info()
 {
     ob_start() ;
     ?><script type="text/javascript">
        var first_line=$j('#table_ajax_upload_td').find('tr[line]')[0] ;

         $j(first_line).find('td.stats_younger').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
         $j(first_line).find('td.stats_count').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
         $j(first_line).find('td.stats_size').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
         $j(first_line).find('td.stats_edit').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;

         // асинхронный запрос, по ответу дергаем данные на следующую строку
         send_ajax_request({cmd:'aspmo_setting/get_version_files_info',version_dir:$j(first_line).find('a.version_dir').text(),line:$j(first_line).attr('line')},exec_ajax_cmd_success_JQ2) ;

         function exec_ajax_cmd_success_JQ2(data,status,link)
           { if (status=='success')
              {  data=exec_ajax_cmd_success(link.responseXML) ;
                 // выполняем запрос на следующую строку
                 if (data.next_line>0)
                 { next_line=$j('#table_ajax_upload_td').find('tr[line]')[data.next_line-1] ;
                   if (next_line!=undefined)
                   {   $j(next_line).find('td.stats_younger').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
                       $j(next_line).find('td.stats_count').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
                       $j(next_line).find('td.stats_size').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
                       $j(next_line).find('td.stats_edit').html('<img src="/<?echo _CLASS_?>/assets/loader.white.tr.gif">') ;
                       send_ajax_request({cmd:'aspmo_setting/get_version_files_info',version_dir:$j(next_line).find('a.version_dir').text(),line:$j(next_line).attr('line')},exec_ajax_cmd_success_JQ2) ;
                   }

                 }

              }
           }
       </script>
     <?
     $text=ob_get_clean() ;
     $this->add_element('JSCODE',$text);
 }


  function get_version_files_info()
    {
        $line_id=$_POST['line'] ;
        $version_dir=$_POST['version_dir'] ;

        $file_info=DISK()->exec_du_stats('/'.$version_dir.'/','*',array('get_older_file_time'=>1,'get_younger_file_time'=>1)) ;
        $dir_info=$file_info['/'.$version_dir.'/'] ;
        $stats_edit=DISK()->exec_find_edit_file_stats('/'.$version_dir.'/') ;
        //damp_array($stats);

        $this->add_element('line_'.$line_id.'_younger.HTML',($dir_info['younger_file_data'])? date('d.m.Y H:i',$dir_info['younger_file_data']):'-');
        $this->add_element('line_'.$line_id.'_count.HTML',($dir_info['count'])? $dir_info['count']:'-');
        $this->add_element('line_'.$line_id.'_size.HTML',($dir_info['size'])? show_size($dir_info['size']):'-');
        $this->add_element('line_'.$line_id.'_edit.HTML',(_sizeof($stats_edit)>1)? _sizeof($stats_edit)-1:'нет правок');
        $line_id++ ;
        $this->add_element('next_line',$line_id);
    }

  function repair_docs_files()
  {
    include(_DIR_TO_MODULES.'/engine/i_backgroup_process.php') ;
   $back_process=new i_backgroup_process('/services/aspmo_setting/repair_pdf_doc/') ;
   $back_process->panel_background_process() ;
   ?><div class="center"><button class="button cancel">Закрыть</button></div><?
   $this->add_element('show_modal_window','HTML',array('title'=>'Восстановление файлов документов','after_close_update_page'=>1,'width'=>1000)) ;
  }

  function download_zip()
  {
//      damp_array($_POST);
      ob_start();
      $version_dir=_DIR_TO_ROOT.'/'.$_POST['dir'];
      $zip_file = $_POST['dir'].'.zip';
      if (file_exists($version_dir)) {
          echo '<p>Формируем zip-файл для директории '.$version_dir.'</p>';
          $zip = new ZipArchive();
          $zip_open = $zip->open(_TEMP_DIR.$zip_file, ZipArchive::CREATE);
          if ($zip_open===TRUE){
              $files = new RecursiveIteratorIterator(
                  new RecursiveDirectoryIterator($version_dir),
                  RecursiveIteratorIterator::LEAVES_ONLY
              );

              $i = 0;
              foreach ($files as $name => $file)
              {
                  if (!$file->isDir())
                  {
                      $filePath = $file->getRealPath();
                      $relativePath = substr($filePath, strlen($version_dir) + 1);
                      $zip->addFile($filePath, $relativePath);
                      $i++;
                  }
              }
              $zip->close();
              if (file_exists(_TEMP_DIR.$zip_file)) {
                  echo '<p>Добавлено '.$i.get_case_by_count_1_2_5($i,' файл, файла, файлов').'</p>';
                  echo '<p>Архив сохранен в temp диеркторию - <a href="/services/get_file/?temp_fname='.$zip_file.'" target="_blank">'.$zip_file.'</a></p>';
                  $this->add_element('JSCODE','<script type="text/javascript">window.location.href ="/services/get_file/?temp_fname='.$zip_file.'" ;</script>') ;
              } else{
                  echo '<p>Не найден архив '._TEMP_DIR.$zip_file.'</p>';
                  $this->add_element('show_notife','Не найден архив '._TEMP_DIR.$zip_file,array('color'=>'red')) ;
              }
          } else  {
              echo '<p class="red">Не удалось открыть архив'.$zip_file.'</p>';
              echo $zip_open;
              $this->add_element('show_notife','Не удалось открыть архив '.$zip_file,array('color'=>'red')) ;
          }
          $zip->close();
          //$this->add_element('show_modal_window','HTML',array('title'=>'Восстановление файлов документов','after_close_update_page'=>1,'width'=>1000)) ;
      } else {
          echo '<p class="red">Не найдена директория '.$version_dir.'</p>';
          $this->add_element('show_notife','Не найдена директория '.$version_dir,array('color'=>'red')) ;
      }
      $text = ob_get_clean() ;
      LOGS()->reg_log('download_version_zip','',array('save_to_file'=>$text)) ;
  }

 function test_send_ws_mo_to_sign()
     {
        //damp_array($_POST) ;
        if ($_POST['group_id'])
        {
            $rec_mo=execSQL_van('select pkey,c_data,doctor_id,group_id from '.ESMO()->table_mo_sessions_now.' where group_id='.$_POST['group_id'].' and dopusk in (1,2,3) and ecp_sign_id=0 order by pkey desc limit 1',2) ;
            if ($rec_mo['pkey'])
            {
                $message = ['type'=>'mo_to_sign',
                                    'doctor_id'=>$rec_mo['doctor_id'],
                                    'mo_id'=>$rec_mo['pkey'],
                                    'date'=>date('d.m.Y H:i:s')
                                   ];
                $result= \cab\system\i_ws::send_mess_to_WS([$rec_mo['group_id']],$message);
            }
            else $result['text']='МО не найдено<br>' ;

            //$this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;

          if ($result['status']==204) $this->add_element('show_notife','МО '.$rec_mo['pkey'].' отправлено на подпись',array('color'=>'green')) ;
          else
          {
              $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;
              damp_array($result,1,-1);
          }

        }
        else $this->add_element('show_notife','Не указана группа',array('color'=>'red')) ;
     }

     function test_send_ws_data_to_sign()
         {
            //damp_array($_POST) ;
            if ($_POST['group_id'])
            {
                    $message = ['type'=>'data_to_sign',
                                'uid'=>ENGINE()->generate_UID(),
                                'uid2'=>ENGINE()->generate_UID(),
                                'content'=>base64_encode('test content'),
                                'doctor_id'=>MEMBER()->id,
                                'date'=>date('d.m.Y H:i:s'),
                                'notife_of_data'=>'XML-пакет'
                               ];
                    $result=\cab\system\i_ws::send_mess_to_WS([$_POST['group_id']],$message);

                //$this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;

              if ($result['status']==204) $this->add_element('show_notife','данные отправлены на подпись',array('color'=>'green')) ;
              else
              {
                  $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;
                  damp_array($result,1,-1);
              }

            }
            else $this->add_element('show_notife','Не указана группа',array('color'=>'red')) ;
         }


    function account_sert_remove()
    {
        $rec=ACCOUNTS()->get_account_by_id($_POST['account_id']) ;
        unset($rec['_ext_info']['certificate']);
        $rec['_ext_info']['certificate']=[] ;
        damp_array($rec['_ext_info']);
        update_rec_in_table('obj_site_account',['ext_info'=>$rec['_ext_info']],'pkey='.$rec['pkey'],array('debug'=>2)) ;
        $this->add_element('show_modal_window','HTML',array('title'=>'test_send_ws_message','_after_close_update_page'=>1)) ;
        //$this->update_page=1 ;

    }


}
