mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-01-05 23:33:45 +08:00
49 lines
1.1 KiB
PHP
49 lines
1.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace BookStack\Exports;
|
||
|
|
||
|
use BookStack\Entities\Models\Page;
|
||
|
use BookStack\Exceptions\ZipExportException;
|
||
|
use ZipArchive;
|
||
|
|
||
|
class ZipExportBuilder
|
||
|
{
|
||
|
protected array $data = [];
|
||
|
|
||
|
/**
|
||
|
* @throws ZipExportException
|
||
|
*/
|
||
|
public function buildForPage(Page $page): string
|
||
|
{
|
||
|
$this->data['page'] = [
|
||
|
'id' => $page->id,
|
||
|
];
|
||
|
|
||
|
return $this->build();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @throws ZipExportException
|
||
|
*/
|
||
|
protected function build(): string
|
||
|
{
|
||
|
$this->data['exported_at'] = date(DATE_ATOM);
|
||
|
$this->data['instance'] = [
|
||
|
'version' => trim(file_get_contents(base_path('version'))),
|
||
|
'id_ciphertext' => encrypt('bookstack'),
|
||
|
];
|
||
|
|
||
|
$zipFile = tempnam(sys_get_temp_dir(), 'bszip-');
|
||
|
$zip = new ZipArchive();
|
||
|
$opened = $zip->open($zipFile, ZipArchive::CREATE);
|
||
|
if ($opened !== true) {
|
||
|
throw new ZipExportException('Failed to create zip file for export.');
|
||
|
}
|
||
|
|
||
|
$zip->addFromString('data.json', json_encode($this->data));
|
||
|
$zip->addEmptyDir('files');
|
||
|
|
||
|
return $zipFile;
|
||
|
}
|
||
|
}
|