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