<?php
include_once("c_debug_info.php");
include_once(_DIR_TO_MODULES."/engine/i_disk.php");

class c_page_cab_debug_dir_info extends c_page_cab_debug_info
{
  public $h1='Информация по файлам хоста' ;
  var $step='1d' ;
  public $use_fusioncharts=1 ;
  public $rec_dir=array() ;
  private $char1='/' ;
  private $char2='|' ;

  function select_obj_info()
  {
	 if (_CUR_ID)
     {  $this->rec_dir=DISK()->get_dir_rec_by_id(_CUR_ID) ;
        if ($this->rec_dir['pkey']) $this->h1='Информация по директории хоста "'.$this->rec_dir['obj_name'].'"' ;
     }

  }

  function block_main()
  { $this->page_title() ;
    if ($this->filter['dir']) $this->panel_dir_info() ;
    else                      $this->panel_host_info() ;
  }

  function update_prev_data()
  {   $data=mktime(0,0,0,01,25,2017) ;
      while($data<time())
      { DISK()->update_DB_dir_size_info($data) ;
        $data+=60*60*24 ;
      }
  }

  function panel_dir_info()
  {  /*?><button class="v1" cmd="exec_disk_stats">Обновить данные</button>&nbsp;&nbsp;&nbsp;&nbsp;<?*/
     $dir=str_replace($this->char2,$this->char1,$this->filter['dir'])  ;
     $cont=DISK()->exec_filestat(array($dir)) ;
     if ($cont!=null) $res_filestat=json_decode($cont)  ;// damp_array($res_filestat) ;

     ?><h3>Путь к директории</h3><?
     $arr=explode('/',$dir) ;
     $cur_dir=[] ; $show_dir=['хост'=>'/'] ;
     if (_sizeof($arr)) foreach($arr as $subdir) if ($subdir)
     { $cur_dir[]=$subdir ;
       $show_dir[$subdir]='/'.implode('/',$cur_dir).'/' ;
     }
     $path=[] ;
     if (_sizeof($show_dir)) foreach($show_dir as $subdir=>$fulldir) $path[]='<a href="/cab/debug/dir_info/[dir='.str_replace($this->char1,$this->char2,$fulldir).']/">'.$subdir.'</a>' ;
     echo implode(' / ',$path).' /' ;

     //damp_array($show_dir,1,-1) ;

     if (_sizeof($res_filestat->content))
     {   ?><h3>Информация по директории (включая поддиректории)</h3><?
         $this->panel_files_stats2($res_filestat->content[0]) ;

         //unset($res_filestat->content[0]) ;
         // считаем сколько файлов непосредственно в самой директории
         $cnt=0 ; $size=0 ;
         foreach($res_filestat->content as $i=>$obj) if ($i) {$cnt+=$obj->file_count  ; $size+=$obj->size ;}
         $res_filestat->content[0]->size-=$size ;
         $res_filestat->content[0]->file_count-=$cnt ;




         $this->show_dir_info2('Содержимое '.$dir,$res_filestat->content) ;
     }


      return ;
     // для директории /public/mo_photo/ делаем подсчет кол-ва файлов по типам
     if ($this->rec_dir['obj_name']=='/public/mo_photo/') $this->panel_mo_photo_stats() ;
     else $this->panel_files_stats() ;

      // информация по поддиректориям второго уровня
      if ($this->rec_dir['level']==1)
      { $recs=execSQL('select * from obj_site_disk_du where clss=282 and obj_name like "'.$this->rec_dir['obj_name'].'%" and pkey!='.$this->rec_dir['pkey'].' order by obj_name') ;
        $this->show_dir_info('Поддиректории '.$this->rec_dir['obj_name'],$recs) ;
      }

     ?><h3>Статистика в БД по директории</h3><?
      $recs=execSQL('select pkey,c_data,size,cnt from obj_site_disk_du where clss=280 and parent='.$this->rec_dir['pkey'].' order by pkey') ;
      //execSQL_update('delete from obj_site_disk_du where enabled=0') ;
      print_2x_arr($recs) ;

  }

  function panel_files_stats()
  {  $result=DISK()->exec_du_stats($this->rec_dir['obj_name'],'',array('get_older_file_time'=>1,'get_younger_file_time'=>1)) ;
      ?><table class="basic fz_small">
               <tr><th>Число файлов в директории</th>
                   <td><?echo $result[$this->rec_dir['obj_name']]['count']?></td>
               </tr>
               <tr><th>Размер файлов в директории</th>
                   <td><?echo show_size($result[$this->rec_dir['obj_name']]['size'])?></td>
               </tr>
               <tr><th>Дата создания файла, от</th>
                   <td><?echo date('d.m.Y H:i:s',$result[$this->rec_dir['obj_name']]['older_file_data'])?></td>
               </tr>
               <tr><th>Дата создания файла, до</th>
                   <td><?echo date('d.m.Y H:i:s',$result[$this->rec_dir['obj_name']]['younger_file_data'])?></td>
               </tr>
             </table>
           <?
     //damp_array($result) ;

  }

  function panel_files_stats2($rec)
  {  $rec=(array)$rec ;
      ?><table class="basic fz_small left">
               <tr><th class="right">Число файлов в директории</th>
                   <td><?echo $rec['file_count']?></td>
               </tr>
               <tr><th>Размер файлов в директории</th>
                   <td><?echo show_size($rec['size'])?></td>
               </tr>
               <tr><th>Новейший файл, дата</th>
                   <td><?echo date('d.m.Y H:i:s',$rec['newest_file_time'])?></td>
               </tr>
               <tr><th>Новейший файл, имя</th>
                   <td><?echo hide_server_dir($rec['newest_file_path'])?></td>
               </tr>
               <tr><th>Старейший файл, дата</th>
                   <td><?echo date('d.m.Y H:i:s',$rec['oldest_file_time'])?></td>
               </tr>
               <tr><th>Старейший файл, имя</th>
                   <td><?echo hide_server_dir($rec['oldest_file_path'])?></td>
               </tr>
             </table>
           <?
     //damp_array($result) ;

  }

  function panel_mo_photo_stats()
  {  $result_sign=DISK()->exec_du_stats('/public/mo_photo/','*.png',array('get_older_file_time'=>1,'get_younger_file_time'=>1)) ;
     $result_auth=DISK()->exec_du_stats('/public/mo_photo/','*_auth.jpg',array('get_older_file_time'=>1,'get_younger_file_time'=>1)) ;
     $result_alco=DISK()->exec_du_stats('/public/mo_photo/','*_alco.jpg',array('get_older_file_time'=>1,'get_younger_file_time'=>1)) ;
     ?><table class="basic fz_small">
         <tr><th></th><th>Число файлов</th><th>Дата создания файла, от</th><th>Дата создания файла, до</th></tr>
         <tr><th>Фото авторизиации МО</th>
             <td><?echo $result_auth['/public/mo_photo/']['count']?></td>
             <td><?echo date('d.m.Y H:i:s',$result_auth['/public/mo_photo/']['older_file_data'])?></td>
             <td><?echo date('d.m.Y H:i:s',$result_auth['/public/mo_photo/']['younger_file_data'])?></td>
         </tr>
         <tr><th>Фото алкотеста МО</th>
             <td><?echo $result_alco['/public/mo_photo/']['count']?></td>
             <td><?echo date('d.m.Y H:i:s',$result_alco['/public/mo_photo/']['older_file_data'])?></td>
             <td><?echo date('d.m.Y H:i:s',$result_alco['/public/mo_photo/']['younger_file_data'])?></td>
         </tr>
         <tr><th>Изображение подписи</th>
             <td><?echo $result_sign['/public/mo_photo/']['count']?></td>
             <td><?echo date('d.m.Y H:i:s',$result_sign['/public/mo_photo/']['older_file_data'])?></td>
             <td><?echo date('d.m.Y H:i:s',$result_sign['/public/mo_photo/']['younger_file_data'])?></td>
         </tr>
       </table>
     <?
  }

  function panel_host_info()
  {
      /*?><button class="v1" cmd="convert_to_new_format">Преобразовать в новый формат</button>&nbsp;&nbsp;&nbsp;&nbsp;<?*/
      ?><button class="v1" cmd="exec_disk_stats">Обновить данные</button>&nbsp;&nbsp;&nbsp;&nbsp;<?
      ?><button class="v1" cmd="show_disk_stats">Текущая информация по диску</button>&nbsp;&nbsp;&nbsp;&nbsp;<?
      ?><button class="v1" cmd="check_mo_file_move">Проверка перемещения старых файлов МО</button>&nbsp;&nbsp;&nbsp;&nbsp;<?



      //DISK()->update_DB_dir_size_info() ;


      //execSQL('select pkey,obj_name,size,cnt,status from obj_site_disk where c_data>=1487797200 and c_data<1487883599 order by status,obj_name',2) ;


      $dir=_DIR_TO_ROOT.'/' ;
     // получаем данные из базы
     $last_data=execSQL_van('select * from obj_site_disk_du where clss=282 and obj_name="/"') ;
     ?><table class="basic fz_small left">
         <tr><th class="right">Данные на дату:</th><td><?echo date('d.m.Y H:i:s',$last_data['r_data'])?></td></tr>
         <tr><th class="right">Размер диска:</th><td><?echo show_size(disk_total_space($dir))?></td></tr>
         <tr><th class="right">Свободное пространство:</th><td><?echo show_size(disk_free_space($dir))?></td></tr>
         <tr><th class="right">Размер файлов хоста:</th><td><?echo show_size($last_data['size'])?></td></tr>
         <tr><th class="right">Число файлов хоста:</th><td><?echo number_format($last_data['cnt'], 0, ',', ' ')?></td></tr>
     </table><?

     // выводим полученыый массив в три колонки по типу директорий
     $recs=execSQL('select * from obj_site_disk_du where clss=282 and level=1 order by obj_name') ;
     ?><table id="dir_info"><tr><?
     ?><td><? $this->show_dir_info('Пользователькие данные',$recs,USER_DATA) ;?></td><?
     ?><td><? $this->show_dir_info('Временные файлы',$recs,TEMP_FILE) ; ?></td><?
     ?><td><? $this->show_dir_info('Исходный код ЭСМО',$recs,SOURCE_CODE) ; ?></td><?
     ?></tr></table>
      <style type="text/css">
          table#dir_info{width:100%;table-layout:fixed;}
          table#dir_info td{width:auto;vertical-align: top;}
      </style>
      <?
  }

  function show_dir_info($title,$recs,$show_status=0)
  {   ?><h3><?echo $title?></h3><?
      $size=0 ; $count=0 ;
      ?><table class="basic fz_small <?if ($show_status) echo 'full'?>"><tr><th>Директория</th><th>Размер</th><th>Число файлов</th><th>Старейший<br>файл</th><th>Новейшший<br>файл</th></tr><?
      if (_sizeof($recs)) foreach($recs as $rec)
         if (!$show_status or $rec['status']==$show_status)
         {?><tr><td class="left"><a href="/cab/debug/dir_info/[dir=<?echo str_replace($this->char1,$this->char2,$rec['obj_name'])?>]/"><?echo $rec['obj_name']?></a><?if (!$rec['enabled']) echo '<span class="red"> (директория удалена)</span>'?></td>
                <td><?echo show_size($rec['size']) ; $size+=$rec['size'] ;?></td>
                <td><?echo number_format($rec['cnt'], 0, ',', ' '); $count+=$rec['cnt'] ;?></td>
                <td><?if ($rec['oldest_time']) echo date('d.m.Y H:i',$rec['oldest_time']) ;?></td>
                <td><?if ($rec['newest_time']) echo date('d.m.Y H:i',$rec['newest_time']) ;?></td>
            </tr><?
         }
      ?><tr><th class="left">ИТОГО:</th><th><?echo show_size($size)?></th><th><?echo number_format($count, 0, ',', ' ')?></th><th></th><th></th></tr><?
      ?></table><br><?
  }

  function show_dir_info2($title,$recs)
  {   //damp_array($recs) ;
      ?><h3><?echo $title?></h3><?
      $size=0 ; $count=0 ;
      ?><table class="basic fz_small"><tr><th>Директория</th><th>Размер</th><th>Число файлов</th><th>Старейший<br>файл</th><th>Новейшший<br>файл</th></tr><?
      if (_sizeof($recs)) foreach($recs as $rec)
         {   $rec=(array)$rec ;
             ?><tr><td class="left"><a href="/cab/debug/dir_info/[dir=<?echo str_replace($this->char1,$this->char2,hide_server_dir($rec['path']))?>]/"><?echo hide_server_dir($rec['path'])?></a></td>
                <td><?echo show_size($rec['size']) ; $size+=$rec['size'] ;?></td>
                <td><?echo number_format($rec['file_count'], 0, ',', ' '); $count+=$rec['file_count'] ;?></td>
                <td><?if ($rec['oldest_file_time']) echo date('d.m.Y H:i',$rec['oldest_file_time']) ;?></td>
                <td><?if ($rec['newest_file_time']) echo date('d.m.Y H:i',$rec['newest_file_time']) ;?></td>
            </tr><?
         }
      ?><tr><th class="left">ИТОГО:</th><th><?echo show_size($size)?></th><th><?echo number_format($count, 0, ',', ' ')?></th><th></th><th></th></tr><?
      ?></table><br><?
  }

function CMD_convert_to_new_format()
    {
        DISK()->convert_to_new_format() ;
    }

    function CMD_exec_disk_stats()
    {   //execSQL_update('delete from obj_site_disk_du ',1) ;
        ?><h3>Обновление статистики по размеру и числу файлов в директориях</h3><?
        $result=DISK()->scan_dirs() ;
        damp_array($result,1,-1) ;

    }

    function CMD_show_disk_stats()
    {
        $recs=execSQL('select * from obj_site_disk_du where obj_name="/check/1/" order by pkey',array('debug'=>2)) ;

        $recs=execSQL('select * from obj_site_disk_du where clss=282 order by obj_name',array('debug'=>0)) ;
        ?><table class="basic fz_small auto"><tr><th>Директория</th><th>Статус</th><th>Level</th><th>Размер</th><th>Число файлов</th></tr><?
        if (_sizeof($recs)) foreach($recs as $rec)
        { ?><tr><td class="left"><?echo $rec['obj_name']?></td>
                <td><?echo ($rec['status'])?></td>
                <td><?echo ($rec['level'])?></td>
                <td><?echo show_size($rec['size'])?></td>
                <td><?echo number_format($rec['cnt'], 0, ',', ' ')?></td>
          <?
        }
        ?></table><?

    }

    function CMD_check_mo_file_move()
    {   ?><h3>Проверка перемещения файлов</h3><?
        $result=DISK()->move_old_mo_photo() ;
        damp_array($result,1,-1) ;
    }




}



?>
