forked from projects/fipamo
ro
59b9f481af
there were places in the codebase where path to fipamo specific paths and file were hard-coded into the system, reducing flexibility and customozation for people that want to define their own path. those hard-coded elements have been removed and replaced with references to the env file so those paths can be changed to whatever is needed the .env.example file has also been updated to contain default paths for easier installation.
120 lines
5.1 KiB
PHP
120 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Upkeep;
|
|
|
|
use App\Services\Data\SettingsService;
|
|
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(env('FIPAMO_BACKUPS'))) {
|
|
mkdir(env('FIPAMO_BACKUPS'), 0755, true);
|
|
}
|
|
//creat backup zip
|
|
$zip = new \ZipArchive();
|
|
|
|
$zip->open(
|
|
env('FIPAMO_BACKUPS') . '/backup-' . $stamp . '.zip',
|
|
\ZipArchive::CREATE | \ZipArchive::OVERWRITE
|
|
);
|
|
//gather data and path info for md pages
|
|
$pagePath = env('PAGES_PATH');
|
|
$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);
|
|
}
|
|
}
|
|
//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(env('FIPAMO_BACKUPS') . '/blog_images_temp.json', json_encode($blogImages));
|
|
file_put_contents(env('FIPAMO_BACKUPS') . '/user_images_temp.json', json_encode($userImages));
|
|
file_put_contents(env('FIPAMO_BACKUPS') . '/blog_docs_temp.json', json_encode($blogDocs));
|
|
file_put_contents(env('FIPAMO_BACKUPS') . '/blog_vids_temp.json', json_encode($blogVids));
|
|
//add to zip
|
|
$zip->addFile(env('FIPAMO_BACKUPS') . '/blog_images_temp.json', 'assets/blog_images.json');
|
|
$zip->addFile(env('FIPAMO_BACKUPS') . '/user_images_temp.json', 'assets/user_images.json');
|
|
$zip->addFile(env('FIPAMO_BACKUPS') . '/blog_docs_temp.json', 'assets/blog_docs.json');
|
|
$zip->addFile(env('FIPAMO_BACKUPS') . '/blog_vids_temp.json', 'assets/blog_videos.json');
|
|
//save zip file
|
|
$zip->close();
|
|
//clean up temp files
|
|
unlink(env('FIPAMO_BACKUPS') . '/blog_images_temp.json');
|
|
unlink(env('FIPAMO_BACKUPS') . '/user_images_temp.json');
|
|
unlink(env('FIPAMO_BACKUPS') . '/blog_docs_temp.json');
|
|
unlink(env('FIPAMO_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!"];
|
|
}
|
|
}
|