Implement unpacking logic

This commit is contained in:
Starbeamrainbowlabs 2019-04-06 13:15:52 +01:00
parent 97f2b2972c
commit c2b8c152bc
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
2 changed files with 51 additions and 0 deletions

View File

@ -623,3 +623,26 @@ function email_users($usernames, $subject, $body)
}
return $emailsSent;
}
/**
* Recursively deletes a directory and it's contents.
* Adapted by Starbeamrainbowlabs
* @param string $path The path to the directory to delete.
* @param bool $delete_self Whether to delete the top-level directory. Set this to false to delete only a directory's contents
* @source https://stackoverflow.com/questions/4490637/recursive-delete
*/
function delete_recursive($path, $delete_self = true) {
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($it as $file) {
if (in_array($file->getBasename(), [".", ".."]))
continue;
if($file->isDir())
rmdir($file->getPathname());
else
unlink($file->getPathname());
}
if($delete_self) rmdir($path);
}

28
core/07-unpack.php Normal file
View File

@ -0,0 +1,28 @@
<?php
// If the extra data directory:
// - doesn't exist already
// - has an mtime before that of this file
// ...extract it again
if(!file_exists($paths->extra_data_directory) ||
filemtime(__FILE__) > filemtime($paths->extra_data_directory)) {
if(file_exists($paths->extra_data_directory))
delete_recursive($paths->extra_data_directory, false);
else
mkdir($paths->extra_data_directory, 0700);
touch($paths->extra_data_directory);
$temp_file = tmpfile();
$source = fopen(__FILE__, "r");
fseek($source, __COMPILER_HALT_OFFSET__);
stream_copy_to_stream($source, $temp_file);
$temp_filename = stream_get_meta_data($temp_file)["uri"];
$extractor = new ZipArchive();
$extractor->open($temp_filename);
$extractor->extractTo($paths->extra_data_directory);
$extractor->close();
fclose($temp_file);
}