<?php
$__functions['init'][]='_docs_site_vars' ;
$__functions['boot_site'][]='_docs_site_boot' ;

function DOCS() {return($_SESSION['docs_system']);$_SESSION['docs_system']=new c_docs_system();return($_SESSION['docs_system']);} ;

function _docs_site_vars()
{

  // ВНИМАНИЕ! При добавлении новых статусов откр
  $_SESSION['ARR_status_scan']=array(0=>'',
                                     1=>'Новый',
                                     2=>'В работе',
                                     3=>'Принят',
                                     4=>'Отклонен',
                                     5=>'Не удалось распознать',
                                     6=>'Распознается',
                                     7=>'Загружен ошибочно'
                                    ) ;

}

function _docs_site_boot($options)
{
  create_system_modul_obj('docs',$options) ;

}


class c_docs_system  extends c_system
{
    public $table_docs ;
    public $report_obj ;
    public $storage_pdf ;
    public $storage_scan ;

    function __construct($create_options=array())
    { $this->table_name ='obj_'.SITE_CODE.'_docs' ;
      $this->table_docs ='obj_'.SITE_CODE.'_docs' ;
      $this->system_title ='Документы';
      parent::__construct($create_options) ;
      //$this->pages_info=array() ;

      $this->storage_pdf='/'.$GLOBALS['LS_storage_docs'].'/pdf/' ;
      $this->storage_scan='/'.$GLOBALS['LS_storage_docs'].'/scan/' ;

      ENGINE()->reg_ext('docs','Документы') ;

      //регистрируем документы
      set_time_point('Создание объекта <strong>docs_system</strong>') ;
    }

   //
   //function on_event_mo_allow($data)
   //{  $rec_mo=ESMO()->get_mo_by_id($data['mo_id']) ;
   //   if ($rec_mo['pkey'] and $rec_mo['member_id']) $this->apply_mo_bill($rec_mo) ;
   //}

    function declare_menu_items_3($page)
      {

          $page->menu['/cab/docs/']=array('title'=>'Документы',
                                             'class'=>'fa fa-book',
                                             //'items'=>array('/cab/docs/'=>array('title'=>'Документы','class'=>'fa fa-book')

                                             //              )
                                             ) ;
      }

    //==========================================================================================================================================================================
    // РАБОТА  С документами
    //==========================================================================================================================================================================

    function get_doc_by_id($doc_id)
    { $rec=execSQL_van('select * from  view_docs_scan where pkey='.$doc_id) ;
     if ($rec['pkey']) $this->prepare_public_info_to_doc($rec) ;
     return($rec) ;
    }

    function get_doc_number($doc_id)
    { $num=execSQL_value('select indx from obj_site_docs where pkey='.$doc_id) ;
     return($num) ;
    }

    // создание документа PDF на основе отчета и регистрация его в документах системы
    // создаем документ в системе
    // и сохраняем в нем имя файла
    // вызвается при первом создании документа
    // !!! при вызове функции создание PDF документа через html2pdf происходит асинхронно
    // функция не ждем окончания создания документа
    // а возвращает в массиве ссылки на файл-отчет процессинга конвертации
    // $res[result_convert][cmd_uid]
    // для отслеживания процесса конвертации необходимо вызвать далее
    // $after_convert_go_url=_PATH_TO_SITE.'/docs/'.$res['result_convert']['PDF_file_name'] ;
	//  REPORT()->panel_view_pdf_convert($res['result_convert']['cmd_uid'],$after_convert_go_url) ;
	//
    function doc_create($report_code,$filter_set,$options=array())
    { //LOGS()->reg_log('m_docs.doc_create','',array('data'=>['filter'=>$filter_set,'options'=>$options]))  ;
      $account_id=(MEMBER()->id)? MEMBER()->id:0 ;
      $account_id=($options['account_id'])? $options['account_id']:$account_id ;
      $group_id=(MEMBER()->cur_group_id)? MEMBER()->cur_group_id:0 ;
      $group_id=($options['group_id'])? $options['group_id']:$group_id ;
      $res=array() ;
      if (is_object($report_code)) { $report_obj=$report_code ;$report_code=$report_obj->db_report_code; }
      else $report_obj=REPORTS()->get_report_obj_by_code($report_code) ;
      if ($report_obj->error) $res['error']=$report_obj->error ;
      else
      {   $res['script_dir']=$report_obj->script_dir ;
          $res['class_name']=$report_obj->class_name ;
          $report_obj->filter=$filter_set ;
          if (method_exists($report_obj,'init')) $report_obj->init() ;
          // в качестве серии документа если передано указание использовать серию - используем ID группы
          //$report_seria=($options['report_seria'])? MEMBER()->cur_group_id:0 ; -  на будущее
          $report_seria=($options['report_seria'])? $options['report_seria']:0 ;  // пока передаем так, так как нумерация внутри серии основана на наименовании группы

          if (!$options['no_reg_doc'])
          {   $db_report_code= ($report_obj->db_report_code)? $report_obj->db_report_code:$report_code ;
              // регистрируем новый документ - нам нужен номер документа для сохранения в заголовке PDF
              $doc_id=$this->reg_doc(array('obj_name'=>$report_obj->title,
                                           'obj_reffer'=>$options['obj_reffer'],
                                           'event_id'=>($options['event_id'])? $options['event_id']:0,
                                           'lession_id'=>($options['lession_id'])? $options['lession_id']:0,
                                           'member_id'=>$account_id,
                                           'group_id'=>$group_id,
                                           'mo_id'=>($report_obj->mo_id)? $report_obj->mo_id:0,
                                           'personal_id'=>($report_obj->personal_id)? $report_obj->personal_id:0,
                                           'code'=>'PDF',
                                           'report_code'=>$report_code,
                                           'report_filter'=>$filter_set,
                                           'source_pkey'=>($options['source_pkey'])? $options['source_pkey']:0, // ID персоны в мероприяии
                                           'source_tkey'=>($options['source_tkey'])? $options['source_tkey']:0, // ID персоны в мероприяии
                                           'source_obj'=>$options['source_obj'], // объект, которые будет использоваться в эвентах
                                           'edit'=>($options['edit'])? 1:0 // документ находиться в режиме редактирования
                                           ),
                                           $db_report_code,$report_seria
                                        ) ;
                $doc_number=($options['doc_number'])? $options['doc_number']:$this->get_doc_number($doc_id) ;

              if (!$report_obj->dont_use_number) $report_obj->title.=' № '.$doc_number ;
                $report_obj->doc_id=$doc_id ;
                //$doc_name=$report_code.'_'.$doc_number ;
          }
          else $doc_id=ENGINE()->generate_UID() ;

          // внимание !!! тут вместо переданного названия группы передаем ID группы
          // в дальнейшем будет передаваться сразу ID группы
          $report_seria=($options['report_seria'])? $group_id:0 ;
          $res=$this->doc_HTML_to_PDF($report_obj,$report_code,$doc_id,$report_seria,$options) ;

          // сохраняем информацию по документу в БД
          if (!$options['no_reg_doc']) $this->update_doc($doc_id,array('obj_name'=>$report_obj->title,'doc_name'=>$res['pdf_file_name'],'doc_dir'=>$res['doc_dir'])) ;

          $res['doc_id']=$doc_id ;
          //$res['result_convert']=$result_convert ;
          //LOGS()->reg_log('HTML2PDF','',array('data'=>$result_convert)) ;

       }
     return($res) ;
    }

    // создание документа PDF на основе отчета и регистрация его в документах системы
    // создаем документ в системе
    // и сохраняем в нем имя файла
    // вызывается при правке уже существующего документа (справка, протокол трезвости)
    function doc_recreate($doc_id,$filter_set,$options=array())
    { $res=array() ;
      $rec_doc=$this->get_doc_by_id($doc_id) ;
      $report_obj=REPORTS()->get_report_obj_by_code($rec_doc['report_code']) ;
      if ($report_obj->error) $res['error']=$report_obj->error ;
      else
          {   $report_obj->filter=$filter_set ;
              if (method_exists($report_obj,'init')) $report_obj->init() ;
              $doc_number=$this->get_doc_number($doc_id) ;
              $report_obj->title.=' № '.$doc_number ;
              // добавляем в имя файла временную метки чтобы избежать кеширования PDF документа
              $doc_uid=$doc_id.'_'.time() ;
              // сохраняем в PDF
              $res=$this->doc_HTML_to_PDF($report_obj,$rec_doc['report_code'],$doc_uid,$rec_doc['group_id'],$options) ;
              // обновляем данные по документу в БД
              $this->update_doc($doc_id,array('obj_name'=>$report_obj->title,'doc_name'=>$res['pdf_file_name'],'doc_dir'=>$res['doc_dir'],'edit'=>0)) ;

              $res['doc_id']=$doc_id ;
       }
     return($res) ;
    }

    function doc_HTML_to_PDF($report_obj,$report_code,$doc_id,$report_seria,$options=array())
       { // создаем документ PDF
         // готовим HTML отчета
         $res=[] ;

         ob_start() ;
            $report_obj->report_paginator=0 ;
            $report_obj->view_as_HTML($options) ;
           $res['report_count_rows_all']=$report_obj->report_count_rows_all ;
         $html=ob_get_clean() ;

          ob_start() ;
         // формируем имя файла из кода документа, серии и номера документа
         $safe_report_code=str_replace(array('/','.php'),
                                       array('_',''),
                                       $report_code) ;
         $arr=array($safe_report_code) ;
         if ($report_seria) $arr[]=$report_seria ;
         $arr[]=$doc_id ;

         $doc_name=implode('_',$arr) ;
         $doc_name=safe_file_names($doc_name) ;
         $source_doc_html=$doc_name.'.html' ;
         $target_doc_pdf=$doc_name.'.pdf' ;
         // определяем директрию для сохранения документа
         $doc_dir=$this->get_doc_dir($report_code) ;
         DISK()->check_dir(_DIR_TO_ROOT.$this->storage_pdf.$doc_dir) ;
         // обертываем в теги и сохраняем в файл
         $report_obj->prepare_HTML_to_PDF_convert($html,$report_obj->title,_TEMP_DIR.$source_doc_html,array()) ;
         // отдаем HTML2PDF для преобразования
         // $report_obj->arr_html_docs - возможность собирать документ из нескольких документов
         // необходимо передать список html файлов, которые надо собрать в один PDF файл
         // пример использования в class_v.esmo/ext/esmo_magnit_pmo/doc_union.php
         $source=($report_obj->arr_html_docs)? implode(' ',$report_obj->arr_html_docs):_TEMP_DIR.$source_doc_html ;
         if (!$options['no_create_pdf']) $result_convert=$report_obj->execHTML2PDF($source,_DIR_TO_ROOT.$this->storage_pdf.$doc_dir.$target_doc_pdf,array('pdf_options'=>$options['pdf_options'])) ;
         else $result_convert['status']='no_create_pdf' ;

         $res['source_doc_html']=$source_doc_html ;
         $res['doc_file_name']=$doc_name.'.html' ;
         $res['pdf_file_name']=$target_doc_pdf ;
         $res['doc_dir']=$doc_dir ;
         if (_sizeof($report_obj->arr_html_docs)) $res['arr_html_docs']=$report_obj->arr_html_docs ;
         $res['result_convert']=$result_convert ;

         damp_array($result_convert,1,-1) ;
         $text=ob_get_clean() ;
         LOGS()->reg_log('HTML2PDF',$target_doc_pdf,array('save_to_file'=>$text)) ;
         return($res) ;
       }


    function doc_delete($doc_id)
    {   $rec=$this->get_doc_by_id($doc_id) ;
        if ($rec['pkey'] and !$rec['sign'])
      { execSQL_update('delete from obj_site_docs where pkey='.$doc_id) ;
          unlink($rec['__doc_dir']) ;
          return(array('success','Документ удален')) ;
        }
        else if ($rec['sign']) return(array('error','Документ не может быть удален, так как он подписан')) ;
        else                   return(array('error','Документ не найден')) ;
      }

    // $params=
    // $type=report_mo,report_mo_small,report_to_smena,report_mo_smena - по названию скрипта отчета
    function reg_doc($params,$type='',$seria='')
     {
       // получаем код папки для отчетов данного типа, если нет - создаем папку
       $params['clss']=215 ;
       // TODO - в будущем убрать разделы с сериями из таблицы, номер документа в серии получать самостоятено на основе поля  report_seria
       $parent=execSQL_value('select pkey from obj_site_docs where clss=1 and doc_name="'.$type.'"') ;
       if (!$parent) $parent=adding_rec_to_table('obj_site_docs',array('clss'=>1,'parent'=>1,'obj_name'=>$type,'doc_name'=>$type),['auto_indx'=>1]) ;
       $params['parent']=$parent ;
       // если передана серия - создаем отдельную папку. Обычно серия идет у путевых листов, выделение серии в отедбную папку нужно для правильной нумерации ПЛ внутри серии
       if ($seria)
       {  $seria_id=execSQL_value('select pkey from obj_site_docs where doc_name="'.addslashes($seria).'" and clss=1 and parent='.$parent) ;
          if (!$seria_id) $seria_id=adding_rec_to_table('obj_site_docs',array('clss'=>1,'parent'=>$params['parent'],'obj_name'=>$seria,'doc_name'=>$seria)) ;
          $params['parent']=$seria_id ;
          //$params['report_seria']=$seria ;
          $params['report_seria']=MEMBER()->cur_group_id ;
       }
       //print_r($params)  ;
       $id=adding_rec_to_table('obj_site_docs',$params,['auto_indx'=>1]) ;
       //$num=execSQL_value('select indx from  obj_site_docs where pkey='.$id) ;
       //update_rec_in_table('obj_site_docs',array('obj_name'=>$params['obj_name'].' № '.$num),'pkey='.$id) ;
         $text='' ;
       //LOGS()->reg_log('Создание документа',$text,array('data'=>$params)) ;
       return($id) ;
     }

     function update_doc($doc_id,$params)
     { // удаляем прежний документ, который был связан с объектом документа- надо ли?
       update_rec_in_table('obj_site_docs',$params,'pkey='.$doc_id) ;
     }

    function get_doc_dir($doc_code='',$time=0)
    {   $safe_doc_code=str_replace(array('/','.php'),array('_',''),$doc_code) ;
        $dir_time=($time)? date('Y_m',$time):date('Y_m') ;
        $doc_dir=($safe_doc_code)? $safe_doc_code.'/'.$dir_time.'/':$dir_time.'/' ;
        //ob_start() ; trace() ; $text=ob_get_clean() ; LOGS()->reg_log('pdf_trace','',array('save_to_file'=>$text)) ;
        return($doc_dir) ;
    }

    function save_doc_to_html($report_code,$filter,$options=array())
    {
        $report_obj=REPORTS()->get_report_obj_by_code($report_code) ;
        $report_obj->filter=$filter ;
        $report_obj->init() ;
        ob_start() ;
          $report_obj->report_paginator=0 ;
          $report_obj->view_as_HTML($options) ;
        $html=ob_get_clean() ;

        $source_doc_html=ENGINE()->generate_UID().'.html' ;
        // обертываем в теги и сохраняем в файл
        $report_obj->prepare_HTML_to_PDF_convert($html,$report_obj->title,_TEMP_DIR.$source_doc_html,array()) ;

        // возвращаем путь к HTML искходнику документа
        return($source_doc_html) ;
    }

    function fixed_sign_doc($doc_id,$sert_id,$sign_info)
    { $debug=($GLOBALS['LS_trace_sign_JS'])? 2:0 ;
      update_rec_in_table('obj_site_docs',array('sign_member'=>MEMBER()->id,'sign_data'=>time(),'sert_id'=>$sert_id,'sign'=>$sign_info),'pkey='.$doc_id,$debug) ;
      //LOGS()->reg_log('Подписание документа',$doc_id,array('member_id'=>MEMBER()->id)) ; // логгирование идет в функции выше
      // закрываем текущую смену врача
      //ACCOUNTS()->member_save($_SESSION['member']->id,array('smena_out'=>time())) ;
      //$_SESSION['member']->info['smena_out']=time() ;
    }

    function get_list_docs($options=array())
    {  $_usl[]='clss=215' ;
       if ($options['member_id']) $_usl[]='member_id='.$options['member_id'] ;
       $usl=implode(' and ',$_usl) ;
       $order=($options['order'])? $options['order']:'c_data desc' ;
       $recs=execSQL('select * from obj_site_docs where '.$usl.' order by '.$order) ;
       if (_sizeof($recs)) foreach($recs as $id=>$rec) $this->prepare_public_info_to_doc($recs[$id]) ;
       return($recs) ;
    }


    function prepare_public_info_to_doc(&$rec)
    {  $rec['__href']='/window/docs/pdf/'.$rec['pkey'].'/' ;
       $rec['__href_window']='/window/docs/pdf/'.$rec['pkey'].'/' ;
       $rec['__href_cab']='/cab/docs/pdf/'.$rec['pkey'].'/' ;
       $rec['__doc_dir']=($rec['doc_dir'])? _DIR_TO_ROOT.$this->storage_pdf.$rec['doc_dir'].$rec['doc_name']:_DIR_TO_ROOT.'/docs/'.$rec['doc_name'] ;
       $rec['__doc_url']=($rec['doc_dir'])? _PATH_TO_SITE.$this->storage_pdf.$rec['doc_dir'].$rec['doc_name']:_PATH_TO_SITE.'/docs/'.$rec['doc_name'] ;
       $rec['_member_name']=$rec['_account_name']  ;
       $rec['_date_create']=date('d.m.Y H:i',$rec['c_data']) ;
       $rec['_date_podpis']=($rec['sign_data'])? date('d.m.Y H:i',$rec['sign_data']):'-' ;
    }

    function save_content($doc_id,$arr_new)
    {   //execSQL_update('update obj_site_docs set content=""') ;
        $rec_doc=DOCS()->get_doc_by_id($doc_id) ;
          if ($rec_doc['pkey'])
          {   $arr_old=(_sizeof($rec_doc['content']))? unserialize($rec_doc['content']):array() ;
              $arr=(_sizeof($arr_old))? array_merge($arr_old,$arr_new):$arr_new ;
              update_rec_in_table('obj_site_docs',array('content'=>$arr),'pkey='.$doc_id) ;
          }
    }



    // работа со сканами
    function reg_scan($params)
     { // получаем код папки для отчетов данного типа, если нет - создаем папку
       $params['clss']=218 ;
       $reffer=adding_rec_to_table('obj_site_scan',$params,array('return_reffer'=>1)) ;
       // теперь файл скана надо перенести из временной директории в постоянную
       // определяем директрию для сохранения документа
       $doc_dir=$this->get_doc_dir() ;
       DISK()->check_dir(_DIR_TO_ROOT.$this->storage_scan.$doc_dir) ;


       list($id,$tkey)=explode('.',$reffer) ;
       $from=$params['obj_name'];
       $to=$this->storage_scan.$doc_dir.'scan_'.$id.'.jpg';
       echo 'Переносим файл скана из <strong>'.$from.'</strong> в <strong>'.$to.'</strong>' ;
       $result=rename(_DIR_TO_ROOT.$from,_DIR_TO_ROOT.$to) ;
       if ($result)
       { update_rec_in_table('obj_site_scan',array('obj_name'=>$to),'pkey='.$id) ;
         echo ' - <span class=green>OK</span><br>' ;
       }
       else echo ' - <span class=red>ERROR</span><br>' ;

       $res=array('doc_reffer'=>$reffer,'scan_fname'=>$to,'result'=>$result) ;
       return($res) ;
     }

    function get_scan_by_id($id)
    { $rec=execSQL_van('select * from view_scan where pkey='.$id) ;
      $this->prepare_public_info_to_scan($rec) ;
      return($rec) ;
    }

    function scan_update($id,$data=array())
    {
       update_rec_in_table('obj_site_scan',$data,'pkey='.$id) ;
       unset($data['doc_id']) ;
       // фикс изменений в дочерних сканах
       update_rec_in_table('obj_site_scan',$data,'parent='.$id) ;
       // фиск изменений в родительском скане
       $parent=execSQL_value('select parent from obj_site_scan where pkey='.$id) ;
       if ($parent!=1) update_rec_in_table('obj_site_scan',$data,'pkey='.$parent) ;

    }


    function prepare_public_info_to_scan(&$rec,$options=array())
    {  $rec['__href']='/window/esmo_magnit/pdd/scan/'.$rec['pkey'].'/' ;
       $rec['__doc_data']=date('d.m.Y H:i',$rec['_doc_data']) ;
       //$rec['__doc_dir']=_DIR_TO_ROOT.'/'.$rec['obj_name'] ;
       //$rec['__doc_url']=_PATH_TO_SITE.'/'.$rec['obj_name'] ;
       $rec['__doc_href']='/window/docs/pdf/'.$rec['doc_id'].'/' ;
       $rec['__personal_href']='/window/personal/person/'.$rec['_personal_id'].'/' ;

       //$rec['_member_name']=ACCOUNTS()->get_member_name_by_id($rec['member_id'])  ;
       $rec['_date_create']=date('d.m.Y H:i',$rec['c_data']) ;
       $rec['_date_podpis']=($rec['sign_data'])? date('d.m.Y H:i',$rec['sign_data']):'-' ;
       $rec['_source']='<span class="nowrap">'.(($rec['account_upload'])? '<i class="fa fa-user" aria-hidden="true"></i> '.$rec['_account_upload_name']:'<i class="fa fa-envelope-o" aria-hidden="true"></i> '.$rec['source']).'</span>';
    }

    function convert_pdf_to_jpg($pdf_fname)
    {   echo 'Преобразовываем PDF в JPG, файл '.basename($pdf_fname).'<br>' ;
        $result=array() ;
        $images = new Imagick();
        //echo 'Создали объект Imagick<br>' ;
        $images->setResolution(300,300);
        //echo 'setResolution<br>' ;
        try{ $images->readImage($pdf_fname); }
        catch (Exception $e)
        {
            echo 'Ошибка при преобразования скана: ',  $e->getMessage(), "\n";
        }
        echo 'В файле PDF '._sizeof($images).' страниц<br>' ;
        if (is_object($images) and _sizeof($images)) foreach($images as $i=>$image)
        {  $saved_img_file_name=basename($pdf_fname).'_page'.$i.'.jpg' ;
           $saved_img_file_dir=$pdf_fname.'_page'.$i.'.jpg' ;
            $image->setColorspace(imagick::IMGTYPE_GRAYSCALE);
            $image->setCompression(Imagick::COMPRESSION_JPEG);
            $image->setCompressionQuality(80);
            $image->setImageFormat("jpg");
            $res_write=$image->writeImage($saved_img_file_dir);
            if (!$res_write) echo '<div class=alert>Не удалось сохранить преобразованное изображение: '.$saved_img_file_dir.'</div>' ;
            if (file_exists($saved_img_file_dir))
            { $arr_info=getimagesize($saved_img_file_dir,$arr_info2) ;
              echo 'Преобразование выполнено успешно, тип файла '.$arr_info['mime'].', разрешение '.$arr_info[0].'x'.$arr_info[1].', размер '.show_size(filesize($saved_img_file_dir)).'<br>' ;
              $result[]=$saved_img_file_dir ;
            }
        }
        else
        {
            echo '<div class=alert>Не удалось выполнить открыть PDF для преобразования</div><br>' ;

        }
       return($result) ;

   }

 function check_mailbox_and_add_doc()
 {  ob_start() ;  $result=array() ;
     $cnt=execSQL_update('update obj_site_inmail_attach set status=2 where not (obj_name like "%.pdf" or obj_name like "%.jpg" or obj_name like "%.jpeg")') ;
     if ($cnt) $result['неподдерживаемый формат вложений']=$cnt ;

    $arr_mails=execSQL('select t2.pkey,t2.parent as mail_id,t1.c_data,t1.sender,t1.status,t2.obj_name,t2.type,t2.bytes,t2.saved_fname,t2.status as attach_status 
                        from obj_site_inmail_attach t2
                        left join obj_site_inmail t1 on t1.pkey=t2.parent 
                        where t2.status=0 and (t2.obj_name like "%.pdf" or t2.obj_name like "%.jpg" or t2.obj_name like "%.jpeg")  
                       ') ;

    echo 'Ожидает обработки <strong>'._sizeof($arr_mails).'</strong> почтовых вложений<br>' ;


    $arr_ATP_email=ACCOUNTS()->get_arr_register_emails() ;

    if (_sizeof($arr_mails)) foreach($arr_mails as $rec)
    { ?>[ID <? echo $rec['pkey']?>] <strong>Обрабатываем вложение письма, отправитель <?echo $rec['sender'].', дата отправления - '.date('d.m.Y H:i',$rec['c_data'])?></strong>, вложение - <strong>"<?echo $rec['obj_name']?>"</strong><br><?
      $group_id=(isset($arr_ATP_email[$rec['sender']]))? $arr_ATP_email[$rec['sender']]:0 ;
      if (!$group_id)
      { echo '<div class="red">Почтовый ящик отправителя '.$rec['sender'].' не сопоставлен ни с одной из групп ЭСМО. Письмо отклонено</div><br>' ;
        execSQL_update('update obj_site_inmail_attach set status=4 where pkey='.$rec['pkey']) ;
        $result['Незарегистрированный email']++ ;
      }
      else if (!file_exists($rec['saved_fname']))
      {
          echo '<div class="red">Файл вложения уже удален из временного хранилища. Обработка вложения невозможна, письмо отклонено.</div><br>' ;
          execSQL_update('update obj_site_inmail_attach set status=9 where pkey='.$rec['pkey']) ;
          $result['Файл вложения удален']++ ;
      }
      else
        {  $arr_images=array() ;

           switch($rec['type'])
           { case 'PDF':  $arr_images=$this->convert_pdf_to_jpg($rec['saved_fname']) ; break ;
             case 'JPEG':
             case 'JPG': $arr_images[]=$rec['saved_fname'] ;                     break ;
             default:     $arr_images=array() ;
           }

              $scan_ids=array() ;
              if (_sizeof($arr_images))
               {   foreach($arr_images as $img_fname)
                   if (file_exists($img_fname))
                   { $data=array('obj_name'=>hide_server_dir($img_fname),'status'=>1,'group_upload'=>$group_id,'source'=>$rec['sender']) ;
                     if ($scan_ids[0]) $data['parent']=$scan_ids[0] ;
                     $data['indx']=_sizeof($scan_ids)+1 ;
                     $reg_result=$this->reg_scan($data) ;
                     if ($reg_result['result'])
                     { $scan_reffer=$reg_result['doc_reffer'] ;
                     list($id,$tkey)=explode('.',$scan_reffer) ;
                     $scan_ids[]=$id  ;
                     echo 'Скан '.basename($img_fname).' от '.$rec['sender'].' зарегистрирован, ID='.$id.'<br>' ;
                       execSQL_update('update obj_site_inmail_attach set status=1,saved_fname="'._DIR_TO_ROOT.$reg_result['scan_fname'].'" where pkey='.$rec['pkey'],array('debug'=>0)) ;
                     $result['Вложение обработано']++ ;
                   }
                   else
                     {
                         echo '<div class="red">Не удалось переместить файл скана из временной директории в  '.$reg_result['scan_fname'].'</div><br>' ;
                         execSQL_update('update obj_site_inmail_attach set status=8 where pkey='.$rec['pkey']) ;
                         $result['Не удалось пеместить файл скана']++ ;
                     }
                   }
                   else
                   { echo '<div class="red">Файл изображения не найден по адресу '.$img_fname.'</div><br>' ;
                     execSQL_update('update obj_site_inmail_attach set status=9 where pkey='.$rec['pkey']) ;
                     $result['Файл изображения удален']++ ;
                   }
               }
               else
               { echo '<div class="red">Нет  изображений для добавления в очередь распознования</div><br>' ;
                 execSQL_update('update obj_site_inmail_attach set status=9 where pkey='.$rec['pkey']) ;
                 $result['Некорректный формат вложения']++ ;
               }



        }
      echo '=============================<br>' ;
      }




      print_2x_arr($arr_mails);
      $text=ob_get_clean() ;
      if (_sizeof($result))
      { $name=LOGS()->reg_file_log('check_mailbox_and_add_doc',$text) ;
        LOGS()->reg_log('check_mailbox_and_add_doc','<a target=_blank href="'.$name.'">Отчет</a>',array('data'=>$result)) ;
      }
      echo $text ;
      damp_array($result,1,-1) ;
    }


  function convert_PDF_to_JPG2($target_fname,&$result)
  {
      echo 'Преобразовываем PDF в JPG<br>' ;
      $saved_file_dir=$target_fname ;
      $saved_file_name=basename($target_fname) ;
      $arr_images=array() ; $result=false ;

      $images = new Imagick();
      $images->setResolution(300,300);
      $images->readImage($saved_file_dir);
      if (_sizeof($images)) foreach($images as $i=>$image)
      {  $saved_img_file_name=$saved_file_name.'_page'.$i.'.jpg' ;
         $saved_img_file_dir=_TEMP_DIR.'uploads/'.$saved_file_name.'_page'.$i.'.jpg' ;
         $image->setColorspace(imagick::IMGTYPE_GRAYSCALE);
         $image->setCompression(Imagick::COMPRESSION_JPEG);
         $image->setCompressionQuality(80);
         $image->setImageFormat("jpg");
         $image->writeImage($saved_img_file_dir);
         if (file_exists($saved_img_file_dir))
         { $arr_info=getimagesize($saved_img_file_dir,$arr_info2) ;
           echo 'Преобразование выполнено успешно, тип файла '.$arr_info['mime'].', разрешение '.$arr_info[0].'x'.$arr_info[1].', размер '.show_size(filesize($saved_img_file_dir)).'<br>' ;
           $finfo['saved_images'][]=array('file'=>$saved_img_file_dir,'preview'=>'<img src="'._UPLOADS_DIR.$saved_img_file_name.'" width="100">') ;
           $arr_images[]=_UPLOADS_DIR.$saved_img_file_name ;
         }
         $result['file_name'][]=_DIR_TO_ROOT._UPLOADS_DIR.$saved_img_file_name ;
         //$target_fname=_DIR_TO_ROOT._UPLOADS_DIR.$saved_img_file_name ;

      } else echo 'Не удалось выполнить открыть PDF для преобразования<br>' ;
  }

  function upload_register_scan()
  {  $result=array() ;
     if (_sizeof($_FILES))
     { foreach($_FILES as $file_info)
      {   $abs_upload_fname=$this->upload_scan($file_info['name'],$file_info['tmp_name']) ;

          if ($file_info['type']=='application/pdf') $this->convert_PDF_to_JPG2($abs_upload_fname,$result) ;
          else $result['file_name'][]=$abs_upload_fname  ;

          // регистрируем скан в таблице сканов
          if (_sizeof($result['file_name'])) foreach($result['file_name'] as $abs_upload_fname) $this->register_file_scan($abs_upload_fname) ;
      }
      $result['status']='ok'  ;
     }
     else $result['status']='error'  ;
     return($result) ;
  }

  function upload_scan($tmp_name,$original_fname='')
  {   $result=false ;
      if (!$original_fname) $original_fname=basename($tmp_name) ;
      ?>Загружаем файл <strong>"<?echo $original_fname?>"</strong><?
      $target_fname=_DIR_TO_ROOT._UPLOADS_DIR.safe_file_names($original_fname) ;
      if (is_uploaded_file($tmp_name))
      { if (move_uploaded_file($tmp_name,$target_fname)) { echo '<div class="green">Файл успешно сохранен</div>' ; $result=$target_fname ; }
        else                                             echo '<div class="red">Не удалось сохранить файл</div>' ;
      }
      else if (file_exists($tmp_name))
      { if (rename($tmp_name,$target_fname)) { echo '<div class="green">Файл успешно сохранен</div>' ; $result=$target_fname ; }
        else                                 echo '<div class="red">Не удалось сохранить файл</div>' ;
      }
      else                                   echo '<div class="red">Не удалось получить загруженный файл</div>' ;

      return($result) ;
  }

  // регистрируем скан в таблице сканов
  function register_file_scan($saved_img_file_name,$options=array())
  {   $result=[] ;
      $data=array('obj_name'=>hide_server_dir($saved_img_file_name),'status'=>1,'account_upload'=>MEMBER()->id,'group_upload'=>MEMBER()->cur_group_id) ;
      if ($options['personal_id']) $data['personal_id']=$options['personal_id'] ;
      if ($options['data_work']) $data['data_work']=$options['data_work'] ;
      if ($options['account_work']) $data['account_work']=$options['account_work'] ;
      if ($options['status']) $data['status']=$options['status'] ;
      if ($result['scan_id'][0]) $data['parent']=$result['scan_id'][0] ;
      $data['indx']=_sizeof($result['scan_id'])+1 ;
      $reg_result=$this->reg_scan($data) ;
      $scan_reffer=$reg_result['doc_reffer'] ;
      list($id,$tkey)=explode('.',$scan_reffer) ;
      echo 'Скан успешно зарегистрирован в системе, ID='.$id.'<br>' ;
      return($id) ;
  }

  // дейсвия после приема скана, стандартно
   function on_scan_doc_apply($options=array())
   { // пишем в скан диагноз
     $data_doc=($options['data_doc'])? strtotime($options['data_doc']):0 ;
     $this->scan_update($options['scan_id'],array('account_work'=>MEMBER()->id,'data_set'=>time(),'data_doc'=>$data_doc,'status'=>3,'after_block_mo'=>$options['action_after'],'comment'=>$options['comment'])) ;
     // $_POST['action_after'] = 1 - разрешить прохождение МО
     // $_POST['action_after'] = 2 - заблокировать прохождение МО
     if ($_POST['action_after']==2)  update_rec_in_table('obj_site_personals',array('mo_block'=>1,'mo_block_comment'=>'Запрет прохождения МО после сдачи скана документа, скан ID='.$options['scan_id']),'pkey='.$options['personal_id']) ;

     $result=array('current_window'=>'close','opener_window'=>'reload') ;
     return($result) ;
   }

   function reg_virtual_doc_type($code,$name)
   {
       $exists_ids=execSQL_line('select pkey from reports where type=2 and (code="'.$code.'" or obj_name="'.$name.'")') ;
       if (_sizeof($exists_ids)) $result=['error'=>'Тип документа "'.$name.'" уже зарегистрирован'] ;
       else
       { $id=adding_rec_to_table('reports',['clss'=>255,'code'=>$code,'obj_name'=>$name,'type'=>2,'virt'=>1]) ;
         $result=['success'=>1,'id'=>$id] ;
       }
       return($result) ;
   }

   function update_virtual_doc_type($id,$data)
   {
       $rec=[] ;
       if ($data['name']) { $rec['obj_name']=$data['name'] ; $rec['code']=safe_file_names($data['name']) ; }
       if (_sizeof($rec))
       {   $exists_ids=execSQL_line('select pkey from reports where type=2 and (code="'.$rec['code'].'" or obj_name="'.$rec['obj_name'].'") and pkey!='.$id) ;
           if (_sizeof($exists_ids)) $result=['error'=>'Тип документа "'.$rec['obj_name'].'" уже зарегистрирован'] ;
           else
           { update_rec_in_table('reports',$rec,'pkey='.$id) ;
             $result=['success'=>1,'id'=>$id] ;
           }
       } else $result=['error'=>'Изминений не обнаружено','id'=>$id] ;
       return($result) ;
   }

   function virtual_doc_type_delete($id)
   {
     execSQL_update('delete from reports where pkey='.$id.' and virt=1') ;
   }




}



?>
