Passed
Push — master ( 3b9459...1d6d9a )
by Ron
11:07 queued 34s
created

SettingsController::delBackup()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 4
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 8
ccs 0
cts 5
cp 0
crap 2
rs 10
1
<?php
2
3
namespace App\Http\Controllers\Installer;
4
5
use App\User;
6
use App\Settings;
7
use Carbon\Carbon;
8
use App\Mail\TestEmail;
9
use Illuminate\Http\Request;
10
use Illuminate\Support\Facades\Log;
11
use Illuminate\Support\Facades\Auth;
12
use Illuminate\Support\Facades\Mail;
13
use App\Http\Controllers\Controller;
14
use Illuminate\Support\Facades\Route;
15
use Illuminate\Support\Facades\Config;
16
use Illuminate\Support\Facades\Storage;
17
use Illuminate\Support\Facades\Artisan;
18
19
class SettingsController extends Controller
20
{
21 24
    public function __construct()
22
    {
23 24
        $this->middleware(['auth', 'can:is_installer']);
24 24
    }
25
26
    //  Bring up the change logo form
27 2
    public function logoSettings()
28
    {
29 2
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
30
31 2
        return view('installer.logoSettings');
32
    }
33
    //  Submit the new company logo
34 2
    public function submitLogo(Request $request)
35
    {
36 2
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data - ', $request->toArray());
37
38 2
        $request->validate([
39 2
            'file' => 'mimes:jpeg,bmp,png,jpg,gif'
40
        ]);
41
42 2
        $file     = $request->file;
43 2
        $fileName = $file->getClientOriginalName();
44 2
        $file->storeAs('img', $fileName, 'public');
45
46 2
        Settings::firstOrCreate(
47 2
            ['key'   => 'app.logo'],
48 2
            ['key'   => 'app.logo', 'value' => '/storage/img/' . $fileName]
49 2
        )->update(['value' => '/storage/img/' . $fileName]);
50
51 2
        Log::notice('A new company logo has been uploaded by ' . Auth::user()->full_name);
52
53 2
        return response()->json(['url' => '/storage/img/' . $fileName]);
54
    }
55
56 2
    public function configuration()
57
    {
58 2
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
59
60 2
        $settings = collect([
61
            // 'url'      => config('app.url'),
62 2
            'timezone' => config('app.timezone'),
63 2
            'filesize' => config('filesystems.paths.max_size'),
64
        ]);
65
66 2
        return view('installer.configuration', [
67 2
            'timzone_list' => \Timezonelist::toArray(),
68 2
            'settings'     => $settings,
69
        ]);
70
    }
71
72 2
    public function submitConfiguration(Request $request)
73
    {
74 2
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data - ', $request->toArray());
75
76 2
        $request->validate([
77 2
            'timezone' => 'required',
78
            'filesize' => 'required',
79
            //  TODO - add additinal validation to make sure proper information is passed in
80
        ]);
81
82
        //  Update the site timezone
83 2
        if (config('app.timezone') !== $request->timezone) {
84 2
            Settings::firstOrCreate(
85 2
                ['key'   => 'app.timezone'],
86 2
                ['key'   => 'app.timezone', 'value' => $request->timezone]
87 2
            )->update(['value' => $request->timezone]);
88
        }
89
        //  Update the maximum file upload size
90 2
        if (config('filesystems.paths.max_size') !== $request->filesize) {
91 2
            Settings::firstOrCreate(
92 2
                ['key'   => 'filesystems.paths.max_size'],
93 2
                ['key'   => 'filesystems.paths.max_size', 'value' => $request->filesize]
94 2
            )->update(['value' => $request->filesize]);
95
        }
96 2
        $request->session()->flash('success', 'Configuration Updated');
97
98 2
        return response()->json(['success' => true]);
99
    }
100
101
    //  System backups index page
102
    public function backupsIndex()
103
    {
104
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
105
106
        return view('installer.backupsIndex');
107
    }
108
109
    //  Retrieve the list of backups
110
    public function getBackups()
111
    {
112
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
113
114
        $backups = Storage::disk('backup')->files();
115
        $buArray = [];
116
117
        //  Filter list to include timestamp
118
        foreach($backups as $backup)
119
        {
120
            $parts = pathinfo($backup);
121
            if($parts['extension'] === 'zip')
122
            {
123
                $buArray[] = [
124
                    'name' => $backup,
125
                    'date' => Carbon::createFromTimestamp(Storage::disk('backup')->lastModified($backup))->format('M d, Y h:m a'),
126
                ];
127
            }
128
        }
129
130
        return $buArray;
131
    }
132
133
    //  Delete a backup
134
    public function delBackup($name)
135
    {
136
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
137
138
        Storage::disk('backup')->delete($name);
139
140
        Log::notice('Backup '.$name.' deleted by '.Auth::user()->full_name);
141
        return response()->json(['success' => true]);
142
    }
143
144
    //  Download a backup
145
    public function downloadBackup($name)
146
    {
147
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
148
149
        if(Storage::disk('backup')->exists($name))
150
        {
151
            Log::info('Backup '.$name.' downloaded by '.Auth::user()->full_name);
152
            return Storage::disk('backup')->download($name);
153
        }
154
155
        Log::error('User '.Auth::user()->full_name.' tried to download a backup named '.$name.' that does not exist');
156
        return view('err.badFile');
157
    }
158
159
    //  Create a new backup
160
    public function runBackup()
161
    {
162
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
163
164
        Artisan::call('tb-backup:run');
165
166
        Log::notice('Backup created by '.Auth::user()->full_name);
167
        return response()->json(['success' => true]);
168
    }
169
170
171
172
173
174
175
    //  Email Settings form
176
    public function emailSettings()
177
    {
178
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
179
180
        $settings = collect([
181
            'host'       => config('mail.host'),
182
            'port'       => config('mail.port'),
183
            'encryption' => config('mail.encryption'),
184
            'username'   => config('mail.username'),
185
            'fromEmail'  =>config('mail.from.address'),
186
            'fromName'   => config('mail.from.name'),
187
        ]);
188
189
        return view('installer.emailSettings', [
190
            'settings' => $settings,
191
        ]);
192
    }
193
194
    //  Send a test email
195
    public function sendTestEmail(Request $request)
196
    {
197
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data - ', $request->toArray());
198
199
        //  TODO - fix this and make it work
200
        return response()->json(['success' => false]);
201
        // $request->validate([
202
        //     'host'       => 'required',
203
        //     'port'       => 'required|numeric',
204
        //     'encryption' => 'required',
205
        //     'username'   => 'required',
206
        //     'fromEmail'  => 'required',
207
        //     'fromName'   => 'required',
208
        // ]);
209
210
        // //  Update each setting
211
        // Settings::firstOrCreate(
212
        //     ['key'   => 'mail.host'],
213
        //     ['key'   => 'mail.host', 'value' => $request->host]
214
        // )->update(['value' => $request->host]);
215
        // Settings::firstOrCreate(
216
        //     ['key'   => 'mail.port'],
217
        //     ['key'   => 'mail.port', 'value' => $request->port]
218
        // )->update(['value' => $request->port]);
219
        // Settings::firstOrCreate(
220
        //     ['key'   => 'mail.encryption'],
221
        //     ['key'   => 'mail.encryption', 'value' => $request->encryption]
222
        // )->update(['value' => $request->encryption]);
223
        // Settings::firstOrCreate(
224
        //     ['key'   => 'mail.username'],
225
        //     ['key'   => 'mail.username', 'value' => $request->username]
226
        // )->update(['value' => $request->username]);
227
        // Settings::firstOrCreate(
228
        //     ['key'   => 'mail.from.address'],
229
        //     ['key'   => 'mail.from.address', 'value' => $request->fromEmail]
230
        // )->update(['value' => $request->fromEmail]);
231
        // Settings::firstOrCreate(
232
        //     ['key'   => 'mail.from.name'],
233
        //     ['key'   => 'mail.from.name', 'value' => $request->fromName]
234
        // )->update(['value' => $request->fromName]);
235
        // //  Only update the password if it has changed
236
        // if (!empty($request->password) && $request->password !== 'NULL') {
237
        //     // Settings::where('key', 'mail.password')->update(['value' => $request->password]);
238
        //     Settings::firstOrCreate(
239
        //         ['key'   => 'mail.password'],
240
        //         ['key'   => 'mail.password', 'value' => $request->password]
241
        //     )->update(['value' => $request->password]);
242
        // }
243
244
        // try
245
        // {
246
        //     Mail::to(Auth::user())->send(new TestEmail($request));
247
        // }
248
        // catch (\Exception $e)
249
        // {
250
        //     // return $e->getMessage();
251
        //     return response()->json(['success' => false, 'message' => $e->getMessage()]);
252
        // }
253
254
        // return response()->json(['success' => true, 'message' => 'Email successfully sent to '.Auth::user()->email]);
255
    }
256
257
    //  Submit the test email form
258
    public function submitEmailSettings(Request $request)
259
    {
260
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data - ', $request->toArray());
261
262
        $request->validate([
263
            'host'       => 'required',
264
            'port'       => 'required|numeric',
265
            'encryption' => 'required',
266
            'fromEmail'  => 'required',
267
            'fromName'   => 'required',
268
        ]);
269
270
        //  Update each setting
271
        Settings::firstOrCreate(
272
            ['key'   => 'mail.host'],
273
            ['key'   => 'mail.host', 'value' => $request->host]
274
        )->update(['value' => $request->host]);
275
        Settings::firstOrCreate(
276
            ['key'   => 'mail.port'],
277
            ['key'   => 'mail.port', 'value' => $request->port]
278
        )->update(['value' => $request->port]);
279
        Settings::firstOrCreate(
280
            ['key'   => 'mail.encryption'],
281
            ['key'   => 'mail.encryption', 'value' => $request->encryption]
282
        )->update(['value' => $request->encryption]);
283
        Settings::firstOrCreate(
284
            ['key'   => 'mail.username'],
285
            ['key'   => 'mail.username', 'value' => $request->username]
286
        )->update(['value' => $request->username]);
287
        Settings::firstOrCreate(
288
            ['key'   => 'mail.from.address'],
289
            ['key'   => 'mail.from.address', 'value' => $request->fromEmail]
290
        )->update(['value' => $request->fromEmail]);
291
        Settings::firstOrCreate(
292
            ['key'   => 'mail.from.name'],
293
            ['key'   => 'mail.from.name', 'value' => $request->fromName]
294
        )->update(['value' => $request->fromName]);
295
        //  Only update the password if it has changed
296
        if(!empty($request->password) && $request->password !== 'NULL')
297
        {
298
            // Settings::where('key', 'mail.password')->update(['value' => $request->password]);
299
            Settings::firstOrCreate(
300
                ['key'   => 'mail.password'],
301
                ['key'   => 'mail.password', 'value' => $request->password]
302
            )->update(['value' => $request->password]);
303
        }
304
305
        Log::notice('Email Settings have been changed by '.Auth::user()->full_name);
306
        return response()->json(['success' => true]);
307
    }
308
}
309