<?
// сервис распакоывавает обновления из файлов-архивов, переданных в настройках
include_once(_DIR_TO_MODULES.'/engine/i_backgroup_process.php') ;
include_once(_DIR_TO_MODULES.'/engine/i_setup.php') ;
include_once(_DIR_TO_ENGINE . '/AddOns/pclzip.lib.php');
class c_services_aspmo_setting_upload_zip extends i_backgroup_process_exec
{
	function exec()
    { ob_start() ;
      if (_sizeof($this->setting['files'])) foreach($this->setting['files'] as $fname)
      {
        $this->upload_from_zip($fname) ;
      }
      FILE_LOG()->append('END') ;
      $text=ob_get_clean() ;
      LOGS()->reg_log('system_update','update from zip file',array('data'=>$this->setting['files'],'save_to_file'=>$text)) ;
      echo $text ;
    }

	function upload_from_zip($fname)
    {        FILE_LOG()->append('Производиться распаковка пакета '.$fname.'') ;
             echo 'Производиться распаковка пакета  <strong>'.$fname.'</strong><br>' ;
             $zip = new ZipArchive;
             if ($zip->open(_DIR_TO_ROOT.'/updates/'.$fname) === TRUE)
             { //$stat=$zip->statIndex(0);
               //$zip_dir_name=basename($stat['name']); // использовать имя первой директории нельзя так как в архиве может быть много директорий в корне
               $zip_dir_name=str_replace('.zip','',$fname);
               $dir_to_extract=_DIR_TO_ROOT.'/updates/'.$zip_dir_name.'/' ;
               SETUP()->remove_dir_or_file($dir_to_extract) ;
               mkdir($dir_to_extract) ;
               $res=$zip->extractTo($dir_to_extract);
               $zip->close();
               if ($res)
               { echo '<div class="green">Пакет '.$fname.' был успешно распакован в директорию /updates/'.$zip_dir_name.'/</div>' ;
                 FILE_LOG()->append('Пакет '.$fname.' был успешно распакован') ;
                 shell_exec('/usr/bin/chmod -R g+w '.$dir_to_extract) ;
                 echo '<div class="black">Производим установку пакета <strong>'.$zip_dir_name.'</strong> в директорию хоста</div>' ;
                 $cnt_errors=SETUP()->recurse_copy($dir_to_extract,_DIR_TO_ROOT.'/') ;
                 if (!$cnt_errors)
                 { echo '<div class="green">Пакет '.$fname.' был успешно установлен</div>' ;
                   FILE_LOG()->append('Пакет '.$fname.' был успешно установлен') ;
                   FILE_LOG()->append('Обновление  '.$fname.' было успешно установлено') ;
                   FILE_LOG()->append('Выполняем удаление временных файлов: '.hide_server_dir($dir_to_extract)) ;
                   ob_start() ;
                   SETUP()->remove_old_dir(hide_server_dir($dir_to_extract));
                   $text=ob_get_clean() ;
                 }
                 else
                 { echo '<div class="red">При установке пакета возникли проблемы по '.$cnt_errors.' директориям/файлам</div>' ;
                 }
               }
               else
               { echo '<div class="red">Не удалось распаковать пакет '.$fname.' в директрию обновлений. Проверьте права доступа к директории '._DIR_TO_ROOT.'/updates/</div>' ;
               }
             }

    }
}

?>
