Passed
Push — master ( 836696...7e7f2a )
by Ron
01:43 queued 11s
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;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Auth;
7
use Illuminate\Support\Facades\Log;
8
use App\Customers;
9
use App\CustomerFiles;
10
use App\CustomerFileTypes;
11
use App\Files;
12
13
use Pion\Laravel\ChunkUpload\Exceptions\UploadMissingFileException;
14
use Pion\Laravel\ChunkUpload\Handler\AbstractHandler;
15
use Pion\Laravel\ChunkUpload\Handler\HandlerFactory;
16
use Pion\Laravel\ChunkUpload\Receiver\FileReceiver;
17
use Illuminate\Http\UploadedFile;
18
19
class CustomerFilesController extends Controller
20
{
21
    //  Only authorized users have access
22
    public function __construct()
23
    {
24
        $this->middleware('auth');
25
    }
26
27
    //  Load form to create a new file
28
    public function create()
29
    {
30
        $fileTypes = CustomerFileTypes::all();
31
        $fTypes = [];
32
        foreach($fileTypes as $type)
33
        {
34
            $fTypes[$type->file_type_id] = $type->description;
35
        }
36
        
37
        return view('customer.form.newFile', [
38
            'fileTypes' => $fTypes
39
        ]);
40
    }
41
42
    //  Store the new file
43
    public function store(Request $request)
44
    {
45
        $request->validate([
46
            'custID' => 'required|numeric',
47
            'name'   => 'required',
48
            'type'   => 'required',
49
            'file'   => 'required'
50
        ]);
51
        
52
        //  Set file locationi and clean filename for duplicates
53
        $filePath = config('filesystems.paths.customers').DIRECTORY_SEPARATOR.$request->custID;
54
55
        // create the file receiver
56
        $receiver = new FileReceiver("file", $request, HandlerFactory::classFromRequest($request));
57
        
58
        // check if the upload is success, throw exception or return response you need
59
        if ($receiver->isUploaded() === false) {
60
            throw new UploadMissingFileException();
61
        }
62
        
63
        // receive the file
64
        $save = $receiver->receive();
65
        // check if the upload has finished (in chunk mode it will send smaller files)
66
        if ($save->isFinished()) {
67
        
68
        
69
            $fileID = $this->saveFile($save->getFile(), $filePath);
70
71
            //  Input the file into the customer files table
72
            CustomerFiles::create([
73
                'file_id'      => $fileID,
74
                'file_type_id' => $request->type,
75
                'cust_id'      => $request->custID,
76
                'user_id'      => Auth::user()->user_id,
77
                'name'         => $request->name
78
            ]);
79
80
            Log::info('File Added For Customer ID-'.$request->custID.' by User ID-'.Auth::user()->user_id.'.  New File ID-'.$fileID);
81
        }
82
        
83
        $handler = $save->handler();
84
        
85
        return response()->json([
86
            "done" => $handler->getPercentageDone(),
87
            'status' => true
88
        ]);
89
    }
90
    
91
    public function saveFile(UploadedFile $file, $filePath)
92
    {
93
        $fileName = Files::cleanFileName($filePath, $file->getClientOriginalName());
94
        
95
        //  Store the file
96
        $file->storeAs($filePath, $fileName);
97
        
98
        //  Put the file in the database
99
        $file = Files::create(
100
        [
101
            'file_name' => $fileName,
102
            'file_link' => $filePath.DIRECTORY_SEPARATOR
103
        ]);
104
        
105
        return $file->file_id;
106
    }
107
108
    //  Show customer files
109
    public function show($id)
110
    {
111
        $files = CustomerFiles::where('cust_id', $id)
112
            ->LeftJoin('customer_file_types', 'customer_files.file_type_id', '=', 'customer_file_types.file_type_id')
113
            ->LeftJoin('users', 'customer_files.user_id', '=', 'users.user_id')
114
            ->Join('files', 'customer_files.file_id', '=', 'files.file_id')
115
            ->orderBy('customer_files.file_type_id', 'asc')
116
            ->get();
117
        
118
        return view('customer.files', [
119
            'files' => $files
120
        ]);
121
    }
122
123
    //  Edit a customer file
124
    public function edit($id)
125
    {
126
        $custFile  = CustomerFiles::find($id);
127
        $fileTypes = CustomerFileTypes::all();
128
        $fTypes    = [];
129
        foreach($fileTypes as $type)
130
        {
131
            $fTypes[$type->file_type_id] = $type->description;
132
        }
133
        
134
        return view('customer.form.editFile', [
135
            'file'      => $custFile,
136
            'fileTypes' => $fTypes,
137
            'fileID'    => $id
138
        ]);
139
    }
140
141
    //  Update a customer file
142
    public function update(Request $request, $id)
143
    {
144
        $request->validate([
145
            'name'           => 'required',
146
            'file_type_id'   => 'required'
147
        ]);
148
        
149
        CustomerFiles::find($id)->update([
150
            'name'         => $request->name,
151
            'file_type_id' => $request->file_type_id
152
        ]);
153
        
154
        Log::info('File ID-'.$id.' Updated For Customer by User ID-'.Auth::user()->user_id);
155
    }
156
157
    //  Remove a customer file
158
    public function destroy($id)
159
    {
160
        //  Remove the file from SystemFiles table
161
        $data = CustomerFiles::find($id);
162
        $fileID = $data->file_id;
163
        $data->delete();
164
        
165
        Log::info('File Deleted For Customer ID-'.$data->custID.' by User ID-'.Auth::user()->user_id.'.  File ID-'.$id);
166
        
167
        //  Delete from system if no longer in use
168
        Files::deleteFile($fileID);
169
    }
170
}
171