<?php
include_once("c_setting_config.php");
class c_page_cab_setting_config_system_integrity_monitoring extends c_page_cab_setting_config
{
  public $h1='Контроль целостности системы' ;

    var $arr_cmd=array('check_docs'=>'Проверка файлов документов',
                         //'check_import_propusk_from_skud_RO'=>'Проверка импорта пропусков из СКУД (только чтение)',
              ) ;

 function block_main()
 { $this->page_title() ;

     ?> <form action="/cab/setting/config/system_integrity_monitoring/">
       <select name="check_cmd"><option></option><?if (_sizeof($this->arr_cmd)) foreach($this->arr_cmd as $cmd=>$title){?><option value="<?echo $cmd?>" <?if ($_POST['check_cmd']==$cmd) echo 'selected'?>><?echo $title?></option><?}?></select>
       <button class="v1" cmd="exec_check">Выполнить</button>
       <br><br></form>
     <?
      $cmd=$_POST['check_cmd'] ;
      $t1=fixed_time() ;
      ob_start() ;
      if ($cmd and method_exists($this,$cmd)) $this->$cmd() ;
      $t2=fixed_time($t1) ;
      echo 'Проверка заняла <strong>'.round($t2,5).'</strong> сек.<br>' ;
      $text=ob_get_clean() ;
      echo $text ;
      LOGS()->reg_log('system_integrity_monitoring',$this->arr_cmd[$cmd],array('save_to_file'=>$text,'time_exec'=>$t2))   ;


 }

 function check_docs()
 {  $stats=array() ;
    $recs=execSQL('select t1.pkey,t1.obj_name,t1.c_data,t1.doc_dir,t1.doc_name,t1.member_id,t1.personal_id,t1.sign_data,t1.report_code,t1.event_id,t1.source_pkey,t1.source_tkey,t1.source_obj,t1.lession_id 
                   from obj_site_docs t1 
                   where t1.clss=215 
                   order by sign_data desc,report_code 
                   ') ;

    ob_start() ;
    if (_sizeof($recs)) foreach($recs as $rec)
    {  $report_code=($rec['report_code'])? $rec['report_code']:'Неизвестный документ'  ;
       $stats[$report_code][0][0]++ ;

       if ($rec['sign_data']) $stats[$report_code][1][1]++ ;
       else                   $stats[$report_code][0][1]++ ;



       // проверяем наличие файла документа при заполненном doc_dir
       if ($rec['doc_dir']) // проверяме по новому пути
       {   // проверяем корректность doc_dir
           $doc_dir=DOCS()->get_doc_dir($report_code,$rec['c_data']) ;
           if ($rec['doc_dir']!=$doc_dir) echo 'doc # '.$rec['pkey'].': doc_dir="'.$rec['doc_dir'].'", корректный doc_dir="'.$doc_dir.'"<br>' ;

           $file_dir=_DIR_TO_ROOT.DOCS()->storage_pdf.$rec['doc_dir'].$rec['doc_name'] ;
           if (file_exists($file_dir))
           {  if ($rec['sign_data'])    $stats[$report_code][1][2]++ ;
              else                      $stats[$report_code][0][2]++ ;
           }
           else // проверяем файл по старому пути
           {  $file_dir=_DIR_TO_ROOT.'/docs/'.$rec['doc_name'] ;
              if (file_exists($file_dir))
              {  echo 'doc # '.$rec['pkey'].': doc_dir="'.$rec['doc_dir'].'", файл находиться в /docs/<br>' ;
                 if ($rec['sign_data'])
                 { $stats[$report_code][1][3]++ ;
                   $stats[$report_code][1][8]++ ;
                 }
                 else
                 { $stats[$report_code][0][3]++ ;
                   $stats[$report_code][0][5]++ ;
                 }
              }
              else  // файл не найден ни по старому ни по новому пути
              {  if ($rec['sign_data'])    $stats[$report_code][1][4]++ ;
                 else                      $stats[$report_code][0][4]++ ;
              }
           }
       }
       else
       {
           $file_dir=_DIR_TO_ROOT.'/docs/'.$rec['doc_name'] ;
           if (file_exists($file_dir))
           { if ($rec['sign_data']) $stats[$report_code][1][3]++ ;
             else                   $stats[$report_code][0][3]++ ;
           }
           else  // файл не найден ни по старому ни по новому пути
           {  if ($rec['sign_data'])    $stats[$report_code][1][4]++ ;
              else                      $stats[$report_code][0][4]++ ;
           }
       }


       // проверяем наличие подписи документа
       if ($rec['sign_data'])
       {   // проверяем наличие файла документа при заполненном doc_dir
              if ($rec['doc_dir']) // проверяме по новому пути
              {   $file_dir=_DIR_TO_ROOT.DOCS()->storage_pdf.$rec['doc_dir'].$rec['doc_name'].'.zip' ;
                  if (file_exists($file_dir)) $stats[$report_code][1][5]++ ;
                  else // проверяем файл по старому пути
                  {  $file_dir=_DIR_TO_ROOT.'/docs/'.$rec['doc_name'].'.zip' ;
                     if (file_exists($file_dir))
                     { $stats[$report_code][1][6]++ ;
                       echo 'doc # '.$rec['pkey'].': doc_dir="'.$rec['doc_dir'].'", подпись находиться в /docs/<br>' ;
                       $stats[$report_code][1][9]++ ;
                     }
                     else $stats[$report_code][1][4]++ ; // файл не найден ни по старому ни по новому пути
                  }
              }
              else
              {
                  $file_dir=_DIR_TO_ROOT.'/docs/'.$rec['doc_name'].'.zip' ;
                  if (file_exists($file_dir)) $stats[$report_code][1][7]++ ;
                  else $stats[$report_code][1][4]++ ; // файл не найден ни по старому ни по новому пути
              }
       }

    }
    $text=ob_get_clean() ;
    ?><h2>Результат проверки файлов документов</h2><?

    ?><table class="basic fz_small full auto">
        <tr>
           <th rowspan="3">Наименование типа документа</th>
           <th rowspan="3">Проверено документов</th>
           <th colspan="7">Подписанные документы</th>
           <th colspan="4">Неподписанные документы</th>
        </tr>
        <tr>
            <th rowspan="2">Документов</th>
            <th colspan="3">Файл документа</th>
            <th colspan="3">Файл подписи</th>
            <th rowspan="2">Документов</th>
            <th colspan="4">Файл документа</th>
        </tr>
        <tr>
            <th>Файл в наличии</th>
            <th>Файл в /docs</th>
            <th>Файл не найден</th>
            <th>Файл в наличии</th>
            <th>Файл в /docs</th>
            <th>Файл не найден</th>
            <th>Файл в наличии</th>
            <th>Файл в /docs</th>
            <th>Файл не найден</th>
        </tr>
     <? foreach($stats as $doc_type=>$stats_rec)
         {   $status_sign=(!$stats_rec[1][4] and !$stats_rec[1][7])? 'green':'red' ;
             $status_non_sign=(!$stats_rec[0][4])? 'green':'red' ;
             $doc_obj=REPORTS()->get_report_obj_by_code($doc_type) ;

             ?><tr>
                <td class="left"><?echo (is_object($doc_obj))? $doc_obj->title.'<div class="comment">'.$doc_type.'</div>':$doc_type?></td>
                <td><?echo $stats_rec[0][0]?></td>
                <td style="color:<?echo $status_sign?>"><?echo $stats_rec[1][1]?></td>
                <td><?echo $stats_rec[1][2]?></td>
                <td><?echo $stats_rec[1][3]?></td>
                <td><?echo $stats_rec[1][4]?></td>
                <td><?echo $stats_rec[1][5]?></td>
                <td><?echo $stats_rec[1][6]?></td>
                <td><?echo $stats_rec[1][7]?></td>
                <td style="color:<?echo $status_non_sign?>"><?echo $stats_rec[0][1]?></td>
                <td><?echo $stats_rec[0][2]?></td>
                <td><?echo $stats_rec[0][3]?></td>
                <td><?echo $stats_rec[0][4]?></td>
             </tr>
            <?
         }
     ?>
      </table>
    <?
     //damp_array($doc_obj) ;
    if ($text)
    {   ?><h2>Замечания</h2><?
        echo $text ;
    }
 }






}



?>
