Completed
Push — dev5 ( 2669f0...795d1f )
by Ron
09:30
created

CustomerFilesController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Files;
6
use App\Customers;
7
use App\CustomerFiles;
8
use Illuminate\Http\Request;
9
use Illuminate\Http\UploadedFile;
10
use Illuminate\Support\Facades\Log;
11
use App\Http\Controllers\Controller;
12
use Illuminate\Support\Facades\Auth;
13
use Illuminate\Support\Facades\Route;
14
use Pion\Laravel\ChunkUpload\Receiver\FileReceiver;
15
use Pion\Laravel\ChunkUpload\Handler\HandlerFactory;
16
use Pion\Laravel\ChunkUpload\Handler\AbstractHandler;
17
use Pion\Laravel\ChunkUpload\Exceptions\UploadMissingFileException;
18
19
class CustomerFilesController extends Controller
20
{
21
    public function __construct()
22
    {
23
        $this->middleware('auth');
24
    }
25
26
    //  Store a new customer file
27
    public function store(Request $request)
28
    {
29
        //  Validate the form
30
        $request->validate([
31
            'custID' => 'required',
32
            'name'   => 'required',
33
            'type'   => 'required'
34
        ]);
35
        
36
        $receiver = new FileReceiver('file', $request, HandlerFactory::classFromRequest($request));
37
        
38
        //  Verify that the upload is valid and being processed
39
        if($receiver->isUploaded() === false)
40
        {
41
            Log::error('Upload File Missing - '.$request->toArray());
42
            throw new UploadMissingFileException();
43
        }
44
        
45
        //  Receive and process the file
46
        $save = $receiver->receive();
47
        
48
        //  See if the upload has finished
49
        if($save->isFinished())
50
        {
51
            //  Set file locationi and clean filename for duplicates
52
            $filePath = config('filesystems.paths.customers').DIRECTORY_SEPARATOR.$request->custID;
53
            $fileName = Files::cleanFileName($filePath, $request->file->getClientOriginalName());
54
55
            //  Store the file
56
            $request->file->storeAs($filePath, $fileName);
57
58
            //  Put the file in the database
59
            $file = Files::create(
60
            [
61
                'file_name' => $fileName,
62
                'file_link' => $filePath.DIRECTORY_SEPARATOR
63
            ]);
64
65
            //  Get information for system files table
66
            $fileID = $file->file_id;
67
68
            //  Input the file into the customer files table
69
            CustomerFiles::create([
70
                'file_id'      => $fileID,
71
                'file_type_id' => $request->type,
72
                'cust_id'      => $request->custID,
73
                'user_id'      => Auth::user()->user_id,
74
                'name'         => $request->name
75
            ]);
76
            
77
            Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
78
            Log::debug('Submitted Data - ', $request->toArray());
79
            Log::info('File added for Customer ID-'.$request->custID.' by User ID-'.Auth::user()->user_id.'.  New File ID-'.$fileID);
80
        }
81
        
82
        //  Get the current progress
83
        $handler = $save->handler();
84
85
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
86
        Log::debug('File being uploaded.  Percentage done - '.$handler->getPercentageDone());
87
        return response()->json([
88
            'done'   => $handler->getPercentageDone(),
89
            'status' => true
90
        ]);
91
    }
92
93
    //  Get the files for the customer
94
    public function show($id)
95
    {
96
        $files = CustomerFiles::where('cust_id', $id)
97
            ->select('name', 'customer_file_types.description as type', 
98
            'first_name', 'last_name', 'customer_files.updated_at as added_on',
99
            'files.file_id', 'files.file_name', 'cust_file_id')
100
            ->LeftJoin('customer_file_types', 'customer_files.file_type_id', '=', 'customer_file_types.file_type_id')
101
            ->LeftJoin('users', 'customer_files.user_id', '=', 'users.user_id')
102
            ->Join('files', 'customer_files.file_id', '=', 'files.file_id')
103
            ->orderBy('customer_files.file_type_id', 'asc')
104
            ->get();
105
        
106
        return response()->json($files);
107
    }
108
109
    //  Remove a customer file
110
    public function destroy($id)
111
    {
112
        //  Remove the file from SystemFiles table
113
        $data = CustomerFiles::find($id);
114
        $fileID = $data->file_id;
115
        $data->delete();
116
        
117
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
118
        Log::info('File Deleted For Customer ID-'.$data->custID.' by User ID-'.Auth::user()->user_id.'.  File ID-'.$id);
119
        
120
        //  Delete from system if no longer in use
121
        Files::deleteFile($fileID);
122
        
123
        return response()->json(['success' => true]);
124
    }
125
}
126