Completed
Push — dev5 ( 707f8f...3b02fc )
by Ron
15:42
created

LinkFilesController::update()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 41
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 23
nc 2
nop 2
dl 0
loc 41
rs 9.552
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\FileLinks;
4
5
use App\Files;
6
use App\FileLinks;
7
use App\FileLinkFiles;
8
use App\CustomerFiles;
9
use Illuminate\Http\Request;
10
use Illuminate\Http\UploadedFile;
11
use Illuminate\Support\Facades\Log;
12
use App\Http\Controllers\Controller;
13
use Illuminate\Support\Facades\Auth;
14
use Illuminate\Support\Facades\Route;
15
use Illuminate\Support\Facades\Storage;
16
use Pion\Laravel\ChunkUpload\Receiver\FileReceiver;
17
use Pion\Laravel\ChunkUpload\Handler\HandlerFactory;
18
use Pion\Laravel\ChunkUpload\Handler\AbstractHandler;
19
use Pion\Laravel\ChunkUpload\Exceptions\UploadMissingFileException;
20
21
class LinkFilesController extends Controller
22
{
23
    public function __construct()
24
    {
25
        $this->middleware('auth');
26
    }
27
    
28
    //  Add a file to the file link
29
    public function store(Request $request)
30
    {
31
        $receiver = new FileReceiver('file', $request, HandlerFactory::classFromRequest($request));
32
            
33
        //  Verify that the upload is valid and being processed
34
        if($receiver->isUploaded() === false)
35
        {
36
            Log::error('Upload File Missing - '.$request->toArray());
37
            throw new UploadMissingFileException();
38
        }
39
40
        //  Recieve and process the file
41
        $save = $receiver->receive();
42
43
        //  See if the uploade has finished
44
        if($save->isFinished())
45
        {
46
            $filePath = config('filesystems.paths.links').DIRECTORY_SEPARATOR.$request->linkID;
47
            $file = $save->getFile();
48
        
49
            //  Clean the file and store it
50
            $fileName = Files::cleanFilename($filePath, $file->getClientOriginalName());
51
            $file->storeAs($filePath, $fileName);
52
53
            //  Place file in Files table of DB
54
            $newFile = Files::create([
55
                'file_name' => $fileName,
56
                'file_link' => $filePath.DIRECTORY_SEPARATOR
57
            ]);
58
            $fileID = $newFile->file_id;
59
60
            //  Place the file in the file link files table of DB
61
            FileLinkFiles::create([
62
                'link_id'  => $request->linkID,
63
                'file_id'  => $fileID,
64
                'user_id'  => Auth::user()->user_id,
65
                'upload'   => 0
66
            ]);
67
68
            //  Log stored file
69
            Log::info('File Stored', ['file_id' => $fileID, 'file_path' => $filePath.DIRECTORY_SEPARATOR.$fileName]);
70
71
            return response()->json(['success' => true]); ;
72
        }
73
74
        //  Get the current progress
75
        $handler = $save->handler();
76
77
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
78
        Log::debug('File being uploaded.  Percentage done - '.$handler->getPercentageDone());
79
        return response()->json([
80
            'done'   => $handler->getPercentageDone(),
81
            'status' => true
82
        ]);
83
    }
84
85
    //  Show the files attached to a link
86
    public function show($id)
87
    {
88
        $files = FileLinkFiles::where('file_link_files.link_id', $id)
89
            ->select('added_by', 'file_link_files.created_at', 'files.file_id', 'files.file_name', 'file_link_files.link_file_id', 'note', 'upload')
90
            ->join('files', 'file_link_files.file_id', '=', 'files.file_id')
91
            ->leftJoin('file_link_notes', 'file_link_files.file_id', '=', 'file_link_notes.file_id')
92
            ->orderBy('user_id', 'ASC')
93
            ->orderBy('file_link_files.created_at', 'ASC')
94
            ->get();
95
        
96
        foreach($files as $file)
97
        {
98
            $file->timestamp = date('M d, Y', strtotime($file->created_at));
99
        }
100
        
101
        return response()->json($files);
102
    }
103
104
    //  Move a file to a customer file
105
    public function update(Request $request, $id)
106
    {
107
        $request->validate([
108
            'fileID'   => 'required',
109
            'fileName' => 'required',
110
            'fileType' => 'required'
111
        ]);
112
        
113
        $linkData = FileLinks::find($id);
114
        
115
        $newPath = config('filesystems.paths.customer').DIRECTORY_SEPARATOR.$linkData->cust_id.DIRECTORY_SEPARATOR;
116
        $fileData = Files::find($request->fileID);
117
        
118
        //  Verify that the file does not already exist in the customerdata or file
119
        $dup = CustomerFiles::where('file_id', $request->fileID)->where('cust_id', $linkData->cust_id)->count();
120
        if($dup || Storage::exists($newPath.$fileData->file_name))
121
        {
122
            return response()->json(['success' => 'duplicate']);
123
        }
124
        
125
        //  Move the file to the customrs file folder
126
        Storage::move($fileData->file_link.$fileData->file_name, $newPath.$fileData->file_name);
127
        
128
        //  Update the file path in the database
129
        $fileData->update([
130
            'file_link' => $newPath
131
        ]);
132
        
133
        //  Place the file in the customer database
134
        CustomerFiles::create([
135
            'file_id'      => $request->fileID,
136
            'file_type_id' => $request->fileType,
137
            'cust_id'      => $linkData->cust_id,
138
            'user_id'      => Auth::user()->user_id,
139
            'name'         => $request->fileName
140
        ]);
141
        
142
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
143
        Log::debug('File Data - ', $request->toArray());
144
        Log::info('File ID-'.$request->fileId.' moved to customer ID-'.$linkData->cust_id.' for link ID-'.$id);
145
        return response()->json(['success' => true]);
146
    }
147
148
    //  Delete a file attached to a link
149
    public function destroy($id)
150
    {
151
        $fileData = FileLinkFiles::find($id);
152
        $fileID   = $fileData->file_id;
153
        $fileData->delete();
154
        
155
        Files::deleteFile($fileID);
156
        
157
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
158
        Log::info('File ID-'.$fileData->file_id.' deleted for Link ID-'.$fileData->link_id);
159
        return response()->json(['success' => true]);
160
    }
161
}
162