<?
include_once(_DIR_EXT.'/HTML/c_page_XML_AJAX.php') ;
//include_once('messages.php') ;
class c_page_ajax extends c_page_XML_AJAX
{

    function report_select()
       { $rec_report=REPORTS()->reports_list[$_POST['report_type']] ;
         $script_dir=$rec_report['script_dir'] ;
         $class_name=$rec_report['class_name'] ;
         if (file_exists(_DIR_EXT.'/'.$script_dir))
            { include_once(_DIR_EXT.'/'.$script_dir) ;
              if (class_exists($class_name))
              { $this->go_url='/cab/reports/'.$_POST['report_type'].'/' ;
           }
           }
         }

       function view_as_html()
       {  $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
          $this->go_url=$url ;
       }

       function view_as_pdf()
       {  $_POST['filter']['view']=($_POST['mode']=='HTML2PDF')? 'prePDF':'PDF' ;
          $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
          $this->go_url=$url ;
       }


       function view_as_xls()
       {  $_POST['filter']['view']='XLS' ;
          $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
          $this->go_url=$url ;
       }

       function view_as_CSV()
       {  $_POST['filter']['view']='CSV' ;
          $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
          $this->go_url=$url ;
       }

       function view_as_JSON()
       {  $_POST['filter']['view']='JSON' ;
          $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
          $this->go_url=$url ;
       }

       function to_print()
       {  $_POST['filter']['view']='print' ;
          $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
          $this->go_url=$url ;
       }

       function set_report_to_cron()
       {
          damp_array($_POST,1,-1) ;
          $this->add_element('show_modal_window','HTML',array('title'=>'Планировщик')) ;
       }

       // сохраняем отчет в документах
     /*
       function save_as_doc()
       {  $arr=explode('/',$_POST['filter_dir']) ;
          $report_type=($_POST['report_type'])? $_POST['report_type']:$arr[3] ;
          $report_mode=($_POST['report_mode'])? $_POST['report_mode']:'PDF' ; // ??? зачем, если отчет все равно сохраняется в PDF
          //damp_array($_POST) ;
          $this->add_element('show_modal_window','HTML') ;

          // комментарий к отчету
          $report_info='' ;
          if ($_POST['time_from']) $report_info=$_POST['time_from'] ;
          if ($_POST['time_to'])   $report_info.=' - '.$_POST['time_to'] ;

          $res=DOCS()->doc_create($report_type,$_POST['filter'],array('report_info'=>$report_info)) ;
          if ($res['error']) $this->add_element('show_notife',$res['error'],array('type'=>'error')) ;
          else $this->add_element('go_url','/cab/docs/pdf/'.$res['doc_id'].'/') ;   // переходим на страницу личного кабинета
       } */

  function update_log_view()
  {   ob_start() ;
     $outputfile='log_'.$_POST['cmd_uid'].'.txt' ;
     if (file_exists(_TEMP_DIR.$outputfile)) echo file_get_contents(_TEMP_DIR.$outputfile) ;
     else   echo 'Не найден лог подготовки документа <strong>'.$outputfile.'</strong><br>' ;
     $text=ob_get_clean() ;
     $this->add_element('log_view.HTML',nl2br($text)) ;
     if (strpos($text,'Done')!==false  and strpos($text,'100%')!==false)
      { if ($_POST['url_page_doc_view'])
        { $this->add_element('go_url',$_POST['url_page_doc_view']) ;   //  автоматичнский переход на страницу документа
          $this->add_element('buttons777.HTML','<button class="v1 button_green" href="'.$_POST['url_page_doc_view'].'">Далее</button>') ;
        }
        if ($_POST['url_link_doc_view'])
        { $this->add_element('buttons777.HTML','<button new_window="PDF_doc" class="v1 button_green" href="'.$_POST['url_link_doc_view'].'">Открыть PDF документ</a>') ;
        }
        $this->add_element('JSCODE','<script type="text/javascript">$j("#log_view").stopTime("update_log_view");</script>') ;
      }

  }

  function exec_CSV_export()
  { if (!$_POST['setting_uid']) return ;
    $export_params=ENGINE()->load_temp_setting($_POST['setting_uid']) ;
    if (!sizeof($export_params)) return ;
    // необъодимо подключить скрипт отчета
    if ($export_params['report_script']) include_once(_DIR_TO_ROOT.$export_params['report_script']) ;
    //echo 'Подключаем отчет '._DIR_TO_ROOT.$export_params['report_script'].'<br>' ;
    //damp_array($export_params,1,-1) ;
    //print_r($export_params) ;
    if (!$export_params['row_to_req']) $export_params['row_to_req']=100 ;
    if (!$export_params['debug']) $export_params['debug']=0 ;
    $from=($export_params['from'])? $export_params['from']:0 ;
    $all=($export_params['all'])? $export_params['all']:0 ;
    $options['limit']='limit '.$from.', '.$export_params['row_to_req'] ;
    $options['order']='pkey' ;
    $options['from']=$from ;
    $options['panel_select_pages']=0;
    //$options['debug']=1;
    $fname=$export_params['fname'] ;
    // эта операци подключит нужный скрипт отчета и вернет экземпляр отчета, но он нам не нужен, так как не содержит свойсв, заданных при описании отчет в сприпте
    //$report_obj=REPORTS()->get_report_obj_by_code($export_params['report_class'],array('filter'=>$export_params['filter'])) ;
    // восстанавливем объект отчета из данных в сессии, он будет содержать все необходимые данные
    //if ($export_params['report_obj']) $report_obj=unserialize($export_params['report_obj']);
    if (file_exists(_TEMP_DIR.$_POST['setting_uid'].'.ser'))
    { $cont=file_get_contents(_TEMP_DIR.$_POST['setting_uid'].'.ser') ;
      $report_obj=unserialize(base64_decode($cont)) ;
    }
    //print_r($report_obj) ;
    //echo $export_params['report_obj'] ;
    if (!is_object($report_obj))
    { $this->add_element('exec_CSV_export_status.HTML','<div class="red">Не удалось восстановить объект отчета из сериализованых данных</div>') ;
      $export_params['error']='Не удалось восстановить объект отчета из сериализованых данных';
    }
    elseif ($report_obj->error)
    { $this->add_element('exec_CSV_export_status.HTML','<div class="red">Отчет <strong>'.$export_params['report_class'].'</strong> не зарегистрирован,<br><br>обратитесь к администратору системы</div>') ;
      $export_params['error']='Отчет '.$export_params['report_class'].' не зарегистрирован,<br><br>обратитесь к администратору системы';
    }
    else
    { ob_start() ;
      if ($export_params['filter']['debug']==1) damp_array($export_params['filter'],1,-1);
      $GLOBALS['stack_sql_stats']=1 ;
      //$report_obj->filter =$export_params['filter'];
      $t1=fixed_time() ;
      $report_obj->file_csv = fopen(_DIR_TO_ROOT.'/temp/'.$fname, 'a');
      $options['no_get_MO_image']=1 ;
      $cnt=$report_obj->CSV_report_body($options) ;
      $to=$from+$cnt ;
      fclose($report_obj->file_csv);
      $put_to_file=round(fixed_time()-$t1,5) ;
      $file_size=filesize(_DIR_TO_ROOT.'/temp/'.$fname) ;
      $now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
      $time_sql=0 ;
      if (_sizeof($GLOBALS['sql_stats'])) foreach($GLOBALS['sql_stats'] as $item) $time_sql+=$item['exec_sql']+$item['work_sql'] ;
      $time_prepare_public_info=$report_obj->get_items_time-$time_sql ;
      $export_params['log'][$now->format('H:i:s.u')]=array('от'=>$from,'до'=>$to,'число записей'=>$cnt,'SQL запрос'=>$time_sql,'Пост-обработка'=>$time_prepare_public_info,'Запись в CSV'=>$put_to_file,'Размер файла'=>show_size($file_size)) ;
      //$export_params['log_sql'][$now->format('H:i:s.u')]=$GLOBALS['sql_stats'] ;


      $GLOBALS['stack_sql_stats']=0 ;

      $text=ob_get_clean() ;
      $show_sql_log=0 ;
      if (strpos($text,'Ошибка при отработке SQL')!==false) { $this->add_element('error','db_req') ; $show_sql_log=1 ; }
      else if (!$to) { $this->add_element('error','to=0<br>'.$text) ; $show_sql_log=1 ; }
      else  $this->add_element('error','') ;

      if ($show_sql_log)
      {
          ob_start() ;
          print_2x_arr($GLOBALS['sql_stats']);
          $db_log=ob_get_clean() ;
         file_put_contents(_TEMP_DIR.'db_log_'.$_POST['setting_uid'].'.html',$db_log) ;
         if ($export_params['filter']['debug']==1) $text.=$db_log ;
         $this->add_element('setting_yaml',_PATH_TO_SITE.'/temp/'.'setting_'.$_POST['setting_uid'].'.yaml') ;
         $this->add_element('db_log',_PATH_TO_SITE.'/temp/'.'db_log_'.$_POST['setting_uid'].'.html') ;
      }

      $this->add_element('filter',print_r($export_params['filter'],true)) ;
      $this->add_element('exec_CSV_req_result.HTML',$text) ;

      $this->add_element('from',$from+1) ;
      $this->add_element('to',$to) ;
      $this->add_element('all',$all) ;
      $this->add_element('count',$cnt) ;
      $this->add_element('status',($to>=$all)? 'end':'process') ;
      if ($all>0) $this->add_element('proc',round($to/$all*100)) ;
      $this->add_element('file_size',format_size($file_size)) ;


    }
    $export_params['from']=$to ;
    ENGINE()->save_temp_setting($export_params,$_POST['setting_uid']) ;
  }

  function log_CSV_export()
  { if (!$_POST['setting_uid']) return ;
    $export_params=ENGINE()->load_temp_setting($_POST['setting_uid']) ;

    ob_start() ;
    //print_r($export_params) ;
    if ($export_params['report_script']) include_once(_DIR_TO_ROOT.$export_params['report_script']) ;
    //$report_obj=REPORTS()->get_report_obj_by_code($export_params['report_class'],array('filter'=>$export_params['filter'])) ;
    if ($export_params['report_obj']) $report_obj=unserialize($export_params['report_obj']);

    ?><h2 class="center"><?echo $report_obj->title?></h2><?
    //echo $info_filter=$report_obj->panel_info_filter() ;
    print_2x_arr($export_params['log']) ;
    if (_sizeof($export_params['log_sql'])) foreach($export_params['log_sql'] as $time=>$log_sql)
    { ?><h3><?echo $time?></h3><?
      print_2x_arr($log_sql) ;
    }

    $text_log=ob_get_clean() ;
    $log_name=LOGS()->reg_file_log('CSV_export',$text_log) ;
    ob_start() ;
      echo '<strong>'.$report_obj->title.'</strong><br>' ;
      //echo $info_filter.'<br>' ;
      echo '<a target=_blank href="'.$log_name.'">Лог экспорта</a> ' ;
      echo '<a target=_blank href="'.'/temp/'.$export_params['fname'].'">Файл CSV</a> '  ;
    $text=ob_get_clean() ;
    $exec_end=fixed_time() ;
    $exec_time=round($exec_end-$export_params['exec_start']) ;
    $data=$report_obj->report_info ;
    $data['Число записей']=$export_params['all'] ;
    $data['report class']=$report_obj->report_class ;
    LOGS()->reg_log('CSV_export',$text,array('data'=>$data,'time_exec'=>$exec_time)) ;

    ob_start() ;
    echo '<a target=_blank href="'.'/temp/'.$export_params['fname'].'">Скачать файл Excel CSV</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="'.$log_name.'">Лог экспорта</a> ' ;


    if ($export_params['filter']['show_csv'])
    {  $row = 1;
      if (($handle = fopen(_DIR_TO_ROOT.'/temp/'.$export_params['fname'], "r")) !== FALSE) {
          while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
              $num = count($data);
              for ($c=0; $c < $num; $c++) $recs[$row][]=iconv('windows-1251','utf-8',$data[$c]) ;
              $row++;
          }
          fclose($handle);
          print_2x_arr($recs) ;
      }
    }

    $text=ob_get_clean() ;
    $this->add_element('exec_CSV_req_result.HTML',$text) ;
    $this->add_element('exec_CSV_export_title.HTML','<strong>Файл экспорта в CSV готов</strong>') ;
    $this->add_element('exec_CSV_export_status_from.HTML','1') ;

  }


  function get_report_contents()
  {   define('_CUR_FILTER',$_POST['filter']) ;
      ob_start() ;
      $report_obj=REPORTS()->get_report_obj_by_code($_POST['code']) ;
      $report_obj->no_view_title=1 ;
      $report_obj->view_panel_info=0 ;
      $report_obj->view(array('no_back_update'=>1)) ;
      $text=ob_get_clean() ;
      $this->add_element($_POST['panel_id'],$text) ;
  }

    function set_filter_with_button()
    {
        if ($_POST['view_value']) $_POST['filter']['view_value']=$_POST['view_value'];
        if ($_POST['filter']['type_view']==4)
        {
            if (!$_POST['filter']['data_from'] or !$_POST['filter']['data_to'])
            {
                $this->add_element('show_notife','Не заданы даты для интервала',array('color'=>'red')) ;
                return;
            }
        }

        $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
        $this->go_url=$url ;
    }

    function to_print_with_button()
    {
        $_POST['filter']['view']='print' ;
        if ($_POST['view_value']) $_POST['filter']['view_value']=$_POST['view_value'];
        if ($_POST['filter']['type_view']==4)
        {
            if (!$_POST['filter']['data_from'] or !$_POST['filter']['data_to'])
            {
                $this->add_element('show_notife','Не заданы даты для интервала',array('color'=>'red')) ;
                return;
            }
        }
        $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
        $this->go_url=$url ;
    }

    function view_as_pdf_with_button()
    {
        $_POST['filter']['view']=($_POST['mode']=='HTML2PDF')? 'prePDF':'PDF' ;
        if ($_POST['view_value']) $_POST['filter']['view_value']=$_POST['view_value'];
        if ($_POST['filter']['type_view']==4)
        {
            if (!$_POST['filter']['data_from'] or !$_POST['filter']['data_to'])
            {
                $this->add_element('show_notife','Не заданы даты для интервала',array('color'=>'red')) ;
                return;
            }
        }
        $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
        $this->go_url=$url ;
    }

    function view_as_html_with_button()
    {
        if ($_POST['view_value']) $_POST['filter']['view_value']=$_POST['view_value'];
        if ($_POST['filter']['type_view']==4)
        {
            if (!$_POST['filter']['data_from'] or !$_POST['filter']['data_to'])
            {
                $this->add_element('show_notife','Не заданы даты для интервала',array('color'=>'red')) ;
                return;
            }
        }
        $url=REPORT()->prepare_url($_POST['filter'],array('base_url'=>$_POST['filter_dir'])) ;
        $this->go_url=$url ;
    }

}
