<?php
include_once("c_esmo_gateway_upload.php");
include_once(_DIR_TO_ENGINE.'/admin/i_admin_system.php') ;
class c_page_cab_esmo_gateway_upload_personals_excel_background extends c_page_cab_esmo_gateway_upload

{


 public $h1='Загрузка списка сотрудников (файл 1С) - в фоновом режиме' ;
 var $read_only=0 ;
 var $full_update=0 ;
 var $background=0 ;

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

   $this->read_only=($_POST['read_only'])? 1:0 ;
   $this->full_update=($_POST['full_update'])? 1:0 ;
   $this->background=($_POST['background'])? 1:0 ;

   if ($_POST['cmd']=='upload_file')
   { if ($_POST['background']==1) $this->panel_upload_file_background() ;
     else                         $this->panel_upload_file() ;
   }
   else $this->panel_upload_promt() ;
 }

 function panel_upload_promt()
 { ?><div id="panel_upload_promt"><form action="" method="POST" enctype="multipart/form-data"><input type="hidden" name="cmd" value="upload_file">
      <p>Загрузите список сотрудников, используя заранее подготовленный файл Excel. <a href="<?echo _PATH_TO_EXT?>/aspmo_personal/demo/members.xls">Образец файла</a><p>
      <p><strong>Внимание!</strong><p>
      <ul class="info"><li>Записи из файла будут добавлены к существующим записям базы</li>
          <li>При совпадении ФИО сотрудника записи в базе будут затерты.</li>
      </ul>
      <div class=comment>Размер файла не более 1М, формат файла - Excel XLS.</div>

      <div class=buttons>
          <input name="upload_file[]" type="file" size="50">
          <input type="submit" value="Загрузить файл" class=button_green>&nbsp;&nbsp;&nbsp;&nbsp;
          <input type="checkbox" name=read_only value="1"> Только показать загруженные данные
          <input type="checkbox" name=full_update value="1"> Полная выгрузка
          <input type="checkbox" name=background value="1"> Фоновый режим
      </div>
     </form>
     </div><?
 }

 var $xls_fname ;
 var $session_UID ;
 var $fname ;
 var $log_fname ;

 function panel_upload_file()
 {
     $result=0 ;
     $this->session_UID=ENGINE()->generate_UID() ;
     // загружаем файл
     if (_sizeof($_FILES))
           { $recs_files=conver_FILES_to_recs($_FILES['upload_file']) ;
             if (_sizeof($recs_files[0]))
               { //if ($recs_files[0]['type']=='application/vnd.ms-excel')
                 { ?><h2>Загружаем данные из файла "<?echo $recs_files[0]['name']?>"</h2><?
                   $this->fname=$recs_files[0]['name'] ;
                   $this->xls_fname='/temp/members_'.$this->session_UID.'.xls' ;
                   $result=move_uploaded_file($recs_files[0]['tmp_name'],_DIR_TO_ROOT.$this->xls_fname) ;
                   if ($result) echo 'Файл загружен в: <a target=_blank href="'.$this->xls_fname.'">'.$this->xls_fname.'</a><br>' ;
                   else
                   { echo '<div class=alert>Не удалось загрузить файл: <a target=_blank href="'.$this->xls_fname.'">'.$this->xls_fname.'</a></div>' ;
                     ?><h3>upload info</h3><?
                     damp_array($recs_files[0],1,-1) ;
                     $perm=ENGINE()->get_file_perms_info(_DIR_TO_ROOT.'/temp/',array('symbol'=>1)) ;
                     ?><h3>/temp/ permissions</h3><?
                     damp_array($perm,1,-1) ;

                   }
                 }
               }
           }

     if (!$result) return ;

     include_once('i_upload_persons_xls_background.php') ;
     $upload=new i_upload_persons_xls_background(array('uid'=>$this->session_UID,
                                                       'read_only'=>$this->read_only,
                                                       'full_update'=>$this->full_update
             )) ;
     $upload->exec() ;
 }

 function panel_upload_file_background()
  { set_time_limit(0) ;
    $result=0 ;
    $this->session_UID=ENGINE()->generate_UID() ;
    // загружаем файл
    if (_sizeof($_FILES))
      { $recs_files=conver_FILES_to_recs($_FILES['upload_file']) ;
        if (_sizeof($recs_files[0]))
          { //if ($recs_files[0]['type']=='application/vnd.ms-excel')
            { ?><h2>Загружаем данные из файла "<?echo $recs_files[0]['name']?>"</h2><?
              $this->fname=$recs_files[0]['name'] ;
              $this->xls_fname='/temp/members_'.$this->session_UID.'.xls' ;
              $result=move_uploaded_file($recs_files[0]['tmp_name'],_DIR_TO_ROOT.$this->xls_fname) ;
              if ($result) echo 'Файл загружен в: <a target=_blank href="'.$this->xls_fname.'">'.$this->xls_fname.'</a><br>' ;
              else
              { echo '<div class=alert>Не удалось загрузить файл: <a target=_blank href="'.$this->xls_fname.'">'.$this->xls_fname.'</a></div>' ;
                ?><h3>upload info</h3><?
                damp_array($recs_files[0],1,-1) ;
                $perm=ENGINE()->get_file_perms_info(_DIR_TO_ROOT.'/temp/',array('symbol'=>1)) ;
                ?><h3>/temp/ permissions</h3><?
                damp_array($perm,1,-1) ;

              }
            }
          }
      }

    if (!$result) return ;
    $this->log_fname=FILE_LOG($this->session_UID)->log_fname ;
    $log_bash=_DIR_TO_ROOT.'/temp/log_bash_'.$this->session_UID.'.txt' ;
    $page_output=_DIR_TO_ROOT.'/temp/result_page_'.$this->session_UID.'.html' ;


    // делаем JS вывод лога
    ?><script type="text/javascript">
          $j(document).ready(function()
                      {  $j('body').everyTime(1000,'update_upload_log',function()
                      {  var url='<?echo $this->log_fname?>' ;    // url для получения статики через скрипт
                         console.log(url) ;
                         jQuery.get( url,{},exec_get_html,'json');
                      }) ;
          })
          var last_mess_id=0 ;
          function exec_get_html(data, textStatus, jqXHR)
                { if (textStatus=='success' && data!=null) $j.each(data,function(mess_id,value)
                  {  if (mess_id!=last_mess_id)
                        { console.log(mess_id+' => '+value.text) ;
                          $j('#panel_log_uplod').append('<div class=item>'+value.text+'</div>');
                          $j('#panel_log_uplod')[0].scrollTop = 9999;
                          last_mess_id=mess_id ;
                          if (value.text=='END')
                          {   $j('body').stopTime('update_upload_log') ;
                              var url='/temp/full_<?echo basename($this->log_fname)?>' ;    // url для получения статики через скрипт
                              jQuery.get( url,{},exec_get_html_full,'text');
                              var url2='/temp/<?echo basename($page_output)?>' ;    // url для получения статики через скрипт
                              jQuery.get( url2,{},exec_get_html_report,'text');
                          }
                        }
                  }) ;
               }
          function exec_get_html_full(data, textStatus, jqXHR)
                { if (textStatus=='success' && data!=null)
                  {  $j('#panel_log_uplod').html(data);
                     $j('#panel_log_uplod')[0].scrollTop = 9999;
                  }
               }
          function exec_get_html_report(data, textStatus, jqXHR)
                { if (textStatus=='success' && data!=null)
                  {  $j('#panel_result_form').html(data);
                     //$j('#panel_result_form')[0].scrollTop = 9999;
                  }
               }
      </script>
      <?

    $url=_PATH_TO_SITE.'/services/esmo_gateway/upload_persons_xls_background/?uid='.$this->session_UID ;
    // специальано для магнита
    //$url='https://localhost/services/aspmo_personal/upload_persons/?uid='.$this->session_UID ;
    //$url='https://localhost/services/aspmo_personal/upload_persons/?uid='.$this->session_UID ;
    if ($_POST['read_only']) $url.='&read_only=1' ;
    if ($_POST['full_update']) $url.='&full_update=1' ;
    $cmd="/usr/bin/wget -b --timeout=0 -O ".$page_output." --no-check-certificate '".$url."' > ".$log_bash." 2>&1 & echo $!" ;
    // запускам задание на обработку файла
    shell_exec('bash -c "'.$cmd.'"'); // тоже работает но не async
    //echo 'Скрипт обработки файла: <a href="'.$url.'" target=_blank>'.$url.'</a><br>' ;
    //echo 'Пошаговый лог: <a href="'.$this->log_fname.'" target=_blank>'.$this->log_fname.'</a><br>' ;
    ?><br>
      <div id="panel_result_form"><div style="font-size:18px;color:green;text-align:center;">Ожидайте, идет импорт файла</div><br><br><div style="text-align:center;"><img src="/images/loading17.gif"></div></div>
      <br><?
    echo 'Лог этапов: <a href="/temp/full_'.basename($this->log_fname).'" target=_blank>'.basename($this->log_fname).'</a><br>' ;
    echo 'Лог BASH: <a href="/temp/'.basename($log_bash).'" target=_blank>'.basename($log_bash).'</a><br>' ;
    echo 'Лог импорта: <a href="/temp/'.basename($page_output).'" target=_blank>'.basename($page_output).'</a><br>' ;

    ?><h3>Лог загрузки:</h3>
      <div id=panel_log_uplod style="width:100%;height:400px;overflow:scroll;border:1px solid darkgreen;"></div>
    <?

  }

}



?>
