ILIAS  trunk Revision v11.0_alpha-1713-gd8962da2f67
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
LegacyArchives.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
24 
33 final class LegacyArchives
34 {
35  use PathHelper;
36 
40 
41  public function __construct()
42  {
43  $this->archives = new Archives();
44  if (defined('ILIAS_DATA_DIR') && defined('CLIENT_ID')) {
45  $base_temp_path = \ILIAS_DATA_DIR . '/' . \CLIENT_ID . '/temp';
46  } else {
47  $base_temp_path = sys_get_temp_dir();
48  }
49 
50  $this->zip_options = $this->archives->zipOptions();
51  $this->zip_options = $this->zip_options
52  ->withZipOutputPath($base_temp_path);
53  $this->unzip_options = $this->archives->unzipOptions();
54  }
55 
59  public function zip(
60  string $directory_to_zip,
61  string $path_to_output_zip,
62  bool $ensure_top_directory = false
63  ): bool {
64  $directory_to_zip = $this->normalizePath($directory_to_zip);
65  $path_to_output_zip = $this->normalizePath($path_to_output_zip);
66 
67  $zip = $this->archives->zip(
68  [],
69  $this->zip_options
70  ->withZipOutputPath(dirname($path_to_output_zip))
71  ->withZipOutputName(basename($path_to_output_zip))
72  ->withDirectoryHandling($ensure_top_directory ? ZipDirectoryHandling::ENSURE_SINGLE_TOP_DIR : ZipDirectoryHandling::KEEP_STRUCTURE)
73  );
74 
75  $zip->addDirectory($directory_to_zip);
76  $zip_stream = $zip->get();
77 
78  return $zip_stream->getSize() > 0;
79  }
80 
84  public function unzip(
85  string $path_to_zip,
86  ?string $extract_to_path = null,
87  bool $overwrite = false,
88  bool $flat = false,
89  bool $ensure_top_directory = false
90  ): bool {
91  $extract_to_path ??= dirname($path_to_zip);
92  if ($flat) {
94  } else {
95  $dir_handling = $ensure_top_directory ? ZipDirectoryHandling::ENSURE_SINGLE_TOP_DIR : ZipDirectoryHandling::KEEP_STRUCTURE;
96  }
97 
98  $unzip = $this->archives->unzip(
99  Streams::ofResource(fopen($path_to_zip, 'rb')),
100  $this->unzip_options
101  ->withZipOutputPath($extract_to_path)
102  ->withOverwrite($overwrite)
103  ->withDirectoryHandling($dir_handling)
104  );
105  return $unzip->extract();
106  }
107 }
Will keep the top directory of the ZIP file if there is one (simple unzip).
zip(string $directory_to_zip, string $path_to_output_zip, bool $ensure_top_directory=false)
unzip(string $path_to_zip, ?string $extract_to_path=null, bool $overwrite=false, bool $flat=false, bool $ensure_top_directory=false)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
const CLIENT_ID
Definition: constants.php:41
const ILIAS_DATA_DIR
Definition: constants.php:44