forked from projects/fipamo
ro
234453b900
the back up process did not include saving document and video assets so that needed to be updated to save all of those references along with images once that was done, the restore process had to be updated to look for docs and videos and create the corresponding directories to move them too the script responsible for moving those assets was also streamlined so a seperate process was not needed for each asset type. the last update date in the settings template was displaying incorrectly, so that was fixed as well.
120 lines
5 KiB
PHP
120 lines
5 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
class MaintenanceService
|
|
{
|
|
protected $settings;
|
|
|
|
public function __construct(SettingsService $settingsService)
|
|
{
|
|
$this->settings = $settingsService;
|
|
}
|
|
|
|
public function createBackUp()
|
|
{
|
|
//make sure back directory is there
|
|
$stamp = Carbon::now()->format("YmdGis");
|
|
if (!is_dir('../content/backups')) {
|
|
mkdir('../content/backups', 0755, true);
|
|
}
|
|
//creat backup zip
|
|
$zip = new \ZipArchive();
|
|
|
|
$zip->open(
|
|
'../content/backups/backup-' . $stamp . '.zip',
|
|
\ZipArchive::CREATE | \ZipArchive::OVERWRITE
|
|
);
|
|
//gather data and path info for md pages
|
|
$pagePath = '../content/pages';
|
|
$yearPaths = glob($pagePath . '/*', GLOB_ONLYDIR);
|
|
foreach ($yearPaths as $years) {
|
|
$year = explode('/', $years);
|
|
//grap the index and save it
|
|
if (trim($year[3]) == 'start') {
|
|
$options = [
|
|
'add_path' => 'content/pages/' . $year[3] . '/',
|
|
'remove_all_path' => true,
|
|
];
|
|
$zip->addGlob($years . '/*.md', GLOB_BRACE, $options);
|
|
}
|
|
$monthsPath = glob($pagePath . '/' . $year[3] . '/*', GLOB_ONLYDIR);
|
|
foreach ($monthsPath as $months) {
|
|
$month = explode('/', $months);
|
|
//once info is collected, add md pages to zip
|
|
$options = [
|
|
'add_path' => 'content/pages/' . $year[3] . '/' . $month[4] . '/',
|
|
'remove_all_path' => true,
|
|
];
|
|
$zip->addGlob($months . '/*.md', GLOB_BRACE, $options);
|
|
}
|
|
}
|
|
//TODO: add collectors for docs and vids
|
|
//gather paths for blog images
|
|
$blogImages = [];
|
|
$dir = new \RecursiveDirectoryIterator('../public/assets/images/blog');
|
|
$flat = new \RecursiveIteratorIterator($dir);
|
|
$files = new \RegexIterator($flat, '/\.png|jpg|gif$/i');
|
|
foreach ($files as $file) {
|
|
$blogImages[] = ['path' => $file->getPath(), 'file' => $file->getFilename()];
|
|
};
|
|
|
|
//gather paths for user images
|
|
$userImages = [];
|
|
$dir = new \RecursiveDirectoryIterator('../public/assets/images/user');
|
|
$flat = new \RecursiveIteratorIterator($dir);
|
|
$files = new \RegexIterator($flat, '/\.png|jpg|gif$/i');
|
|
foreach ($files as $file) {
|
|
$userImages[] = ['path' => $file->getPath(), 'file' => $file->getFilename()];
|
|
};
|
|
|
|
//gather paths for blog documents
|
|
$blogDocs = [];
|
|
$dir = new \RecursiveDirectoryIterator('../public/assets/docs/blog');
|
|
$flat = new \RecursiveIteratorIterator($dir);
|
|
$files = new \RegexIterator($flat, '/\.txt|pdf|rtf$/i');
|
|
foreach ($files as $file) {
|
|
$blogDocs[] = ['path' => $file->getPath(), 'file' => $file->getFilename()];
|
|
};
|
|
//gather paths for blog videos
|
|
$blogVids = [];
|
|
$dir = new \RecursiveDirectoryIterator('../public/assets/video/blog');
|
|
$flat = new \RecursiveIteratorIterator($dir);
|
|
$files = new \RegexIterator($flat, '/\.mp4$/i');
|
|
foreach ($files as $file) {
|
|
$blogVids[] = ['path' => $file->getPath(), 'file' => $file->getFilename()];
|
|
};
|
|
|
|
//add directory for settings and save them
|
|
$zip->addEmptyDir('config');
|
|
$zip->addEmptyDir('assets');
|
|
$zip->addFile(env('SETTINGS_PATH'), 'config/settings.json');
|
|
$zip->addFile(env('FOLKS_PATH'), 'config/folks.json');
|
|
$zip->addFile(env('TAGS_PATH'), 'config/tags.json');
|
|
// create temp files for image lists
|
|
file_put_contents('../content/backups/blog_images_temp.json', json_encode($blogImages));
|
|
file_put_contents('../content/backups/user_images_temp.json', json_encode($userImages));
|
|
file_put_contents('../content/backups/blog_docs_temp.json', json_encode($blogDocs));
|
|
file_put_contents('../content/backups/blog_vids_temp.json', json_encode($blogVids));
|
|
//add to zip
|
|
$zip->addFile('../content/backups/blog_images_temp.json', 'assets/blog_images.json');
|
|
$zip->addFile('../content/backups/user_images_temp.json', 'assets/user_images.json');
|
|
$zip->addFile('../content/backups/blog_docs_temp.json', 'assets/blog_docs.json');
|
|
$zip->addFile('../content/backups/blog_vids_temp.json', 'assets/blog_videos.json');
|
|
//save zip file
|
|
$zip->close();
|
|
//clean up temp files
|
|
unlink('../content/backups/blog_images_temp.json');
|
|
unlink('../content/backups/user_images_temp.json');
|
|
unlink('../content/backups/blog_docs_temp.json');
|
|
unlink('../content/backups/blog_vids_temp.json');
|
|
|
|
//update settings file with latest back up date
|
|
$this->settings->updateGlobalData('last_backup', $stamp);
|
|
|
|
return ['message' => "Backup created. THIS IS A SAFE SPACE!"];
|
|
}
|
|
}
|