BackupController::backups()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 27
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 17
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 27
ccs 0
cts 24
cp 0
crap 20
rs 9.7
1
<?php
2
3
namespace CodexShaper\DBM\Http\Controllers;
4
5
use CodexShaper\DBM\Facades\Manager as DBM;
6
use Illuminate\Http\Request;
7
use Illuminate\Support\Facades\Artisan;
8
use Illuminate\Support\Facades\Storage;
9
10
class BackupController extends Controller
11
{
12
    /**
13
     * Load backups.
14
     *
15
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
16
     */
17
    public function index()
18
    {
19
        return view('dbm::app');
20
    }
21
22
    /**
23
     * Get all backup files.
24
     *
25
     * @return \Illuminate\Http\JsonResponse
26
     */
27
    public function backups(Request $request)
28
    {
29
        if ($request->ajax()) {
30
            if (($response = DBM::authorize('backup.browse')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ackup.browse') !== true is always true.
Loading history...
31
                return $response;
32
            }
33
34
            $userPermissions = DBM::userPermissions();
35
            $files = $this->getPaginateFiles($request);
36
            $results = [];
37
            foreach ($files as $file) {
38
                $results[] = (object) [
39
                    'info' => pathinfo($file),
40
                    'lastModified' => date('F j, Y, g:i a', Storage::lastModified($file)),
41
                    'size' => Storage::size($file),
42
                ];
43
            }
44
45
            return response()->json([
46
                'success' => true,
47
                'files' => $results,
48
                'userPermissions' => $userPermissions,
49
                'pagination' => $files,
50
            ]);
51
        }
52
53
        return response()->json(['success' => false]);
54
    }
55
56
    /**
57
     * Get Pagination Data.
58
     *
59
     * @return \Illuminate\Pagination\LengthAwarePaginator
60
     */
61
    public function getPaginateFiles(Request $request)
62
    {
63
        $driver = dbm_driver();
64
        $directory = 'backups'.DIRECTORY_SEPARATOR.$driver;
65
        $files = collect(Storage::allFiles($directory));
66
67
        $query = $request->q;
68
        if (! empty($query)) {
69
            $files = $files->filter(function ($file) use ($query) {
70
                $info = pathinfo($file);
71
72
                return false !== stristr($info['basename'], $query);
73
            });
74
        }
75
        $page = (int) $request->page ?: 1;
76
        $perPage = (int) $request->perPage;
77
        $slice = $files->slice(($page - 1) * $perPage, $perPage);
78
79
        return new \Illuminate\Pagination\LengthAwarePaginator($slice, $files->count(), $perPage);
80
    }
81
82
    /**
83
     * Create new backup.
84
     *
85
     * @return \Illuminate\Http\JsonResponse
86
     */
87
    public function backup(Request $request)
88
    {
89
        if ($request->ajax()) {
90
            if (($response = DBM::authorize('backup.create')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ackup.create') !== true is always true.
Loading history...
91
                return $response;
92
            }
93
94
            try {
95
                $table = null;
96
97
                if ($request->isTable) {
98
                    $table = $request->table;
99
                }
100
101
                Artisan::call('dbm:backup', [
102
                    '--table' => $table,
103
                ]);
104
105
                return response()->json(['success' => true]);
106
            } catch (\Exception $e) {
107
                return response()->json([
108
                    'success' => true,
109
                    'errors' => [$e->getMessage()],
110
                ], 200);
111
            }
112
        }
113
114
        return response()->json(['success' => false]);
115
    }
116
117
    /**
118
     * Restore from a specific backup.
119
     *
120
     * @return \Illuminate\Http\JsonResponse
121
     */
122
    public function restore(Request $request)
123
    {
124
        if ($request->ajax()) {
125
            if (($response = DBM::authorize('backup.restore')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ckup.restore') !== true is always true.
Loading history...
126
                return $response;
127
            }
128
129
            try {
130
                Artisan::call('dbm:restore', [
131
                    '--path' => $request->path,
132
                ]);
133
134
                return response()->json(['success' => true]);
135
            } catch (\Exception $e) {
136
                return response()->json([
137
                    'success' => true,
138
                    'errors' => [$e->getMessage()],
139
                ], 200);
140
            }
141
        }
142
143
        return response()->json(['success' => false]);
144
    }
145
146
    /**
147
     * Return specific backup file for download.
148
     *
149
     * @return \Illuminate\Http\JsonResponse
150
     */
151
    public function download(Request $request)
152
    {
153
        if ($request->ajax()) {
154
            if (($response = DBM::authorize('backup.download')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...kup.download') !== true is always true.
Loading history...
155
                return $response;
156
            }
157
158
            try {
159
                $file = Storage::get($request->path);
160
161
                return response()->json(['success' => true, 'file' => $file]);
162
            } catch (\Exception $e) {
163
                return response()->json([
164
                    'success' => true,
165
                    'errors' => [$e->getMessage()],
166
                ], 200);
167
            }
168
        }
169
170
        return response()->json(['success' => false]);
171
    }
172
173
    /**
174
     * Remove a backup.
175
     *
176
     * @return \Illuminate\Http\JsonResponse
177
     */
178
    public function delete(Request $request)
179
    {
180
        if ($request->ajax()) {
181
            if (($response = DBM::authorize('backup.delete')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ackup.delete') !== true is always true.
Loading history...
182
                return $response;
183
            }
184
185
            try {
186
                Storage::delete($request->path);
187
188
                return response()->json(['success' => true]);
189
            } catch (\Exception $e) {
190
                return response()->json([
191
                    'success' => true,
192
                    'errors' => [$e->getMessage()],
193
                ], 200);
194
            }
195
        }
196
197
        return response()->json(['success' => false]);
198
    }
199
}
200