You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.4 KiB
85 lines
2.4 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\BackupUploadRequest;
|
|
use BackupManager\Filesystems\Destination;
|
|
use BackupManager\Manager;
|
|
use Illuminate\Http\Request;
|
|
use League\Flysystem\FileExistsException;
|
|
use League\Flysystem\FileNotFoundException;
|
|
|
|
class BackupsController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
if (!file_exists(storage_path('app/backup/db'))) {
|
|
$backups = [];
|
|
} else {
|
|
$backups = \File::allFiles(storage_path('app/backup/db'));
|
|
|
|
// Sort files by modified time DESC
|
|
usort($backups, function ($a, $b) {
|
|
return -1 * strcmp($a->getMTime(), $b->getMTime());
|
|
});
|
|
}
|
|
|
|
return view('backups.index', compact('backups'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$this->validate($request, [
|
|
'file_name' => 'nullable|max:30|regex:/^[\w._-]+$/',
|
|
]);
|
|
|
|
try {
|
|
$manager = app()->make(Manager::class);
|
|
$fileName = $request->get('file_name') ?: date('Y-m-d_Hi');
|
|
|
|
$manager->makeBackup()->run('mysql', [
|
|
new Destination('local', 'backup/db/'.$fileName),
|
|
], 'gzip');
|
|
|
|
return redirect()->route('backups.index');
|
|
} catch (FileExistsException $e) {
|
|
return redirect()->route('backups.index');
|
|
}
|
|
}
|
|
|
|
public function destroy($fileName)
|
|
{
|
|
if (file_exists(storage_path('app/backup/db/').$fileName)) {
|
|
unlink(storage_path('app/backup/db/').$fileName);
|
|
}
|
|
|
|
return redirect()->route('backups.index');
|
|
}
|
|
|
|
public function download($fileName)
|
|
{
|
|
return response()->download(storage_path('app/backup/db/').$fileName);
|
|
}
|
|
|
|
public function restore($fileName)
|
|
{
|
|
try {
|
|
$manager = app()->make(Manager::class);
|
|
$manager->makeRestore()->run('local', 'backup/db/'.$fileName, 'mysql', 'gzip');
|
|
} catch (FileNotFoundException $e) {
|
|
}
|
|
|
|
return redirect()->route('backups.index');
|
|
}
|
|
|
|
public function upload(BackupUploadRequest $request)
|
|
{
|
|
$file = $request->file('backup_file');
|
|
|
|
if (file_exists(storage_path('app/backup/db/').$file->getClientOriginalName()) == false) {
|
|
$file->storeAs('backup/db', $file->getClientOriginalName());
|
|
}
|
|
|
|
return redirect()->route('backups.index');
|
|
}
|
|
}
|