fipamo/app/Services/Upkeep/MaintenanceService.php
ro 36d04c8f68
reorganized services
service classes are beginning to swell as there functionality is being
fleshed out, so a new organizational structure was needed to make sure
class sizes don't become too large and to increase site managability and
legibilty as more features get added and the code base grows.

data is for retrieving, managing site information, assets interact with external files
and upkeep is for maintenance.

some additional tweaks were also made to the options menu template to
prep it for it's transition to a toolbar component
2024-05-12 22:14:53 -06:00

119 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);
}
}
//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!"];
}
}