Passed
Push — dev5 ( da16e0...6692a0 )
by Ron
08:20
created

SaveFileLinkFile::attachFile()   A

Complexity

Conditions 4
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 8
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 12
ccs 9
cts 9
cp 1
crap 4
rs 10
1
<?php
2
3
namespace App\Domains\FileLinks;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Log;
7
use Illuminate\Support\Facades\Auth;
8
use Illuminate\Support\Facades\Storage;
9
use Illuminate\Support\Facades\Notification;
10
11
use App\User;
12
use App\Files;
13
use App\FileLinkFiles;
14
use App\CustomerFiles;
15
16
use App\Domains\FilesDomain;
17
18
use App\Notifications\NewFileUpload;
19
20
use Pion\Laravel\ChunkUpload\Receiver\FileReceiver;
21
use Pion\Laravel\ChunkUpload\Handler\HandlerFactory;
22
23
use App\Http\Requests\MoveFileLinkFileToCustomerRequest;
24
25
class SaveFileLinkFile extends FilesDomain
26
{
27
    //  Execute will process an uploading file
28 10
    public function execute(Request $request, $new = true)
29
    {
30 10
        $this->receiver = new FileReceiver('file', $request, HandlerFactory::classFromRequest($request));
31
32 10
        $save = $this->receiver->receive();
33 10
        if($save->isFinished())
34
        {
35 10
            if(!$new)
36
            {
37 8
                $this->path = config('filesystems.paths.links').DIRECTORY_SEPARATOR.$request->linkID;
38
            }
39
40 10
            $fileID = $this->saveFile($save->getFile());
41
42 10
            if($new)
43
            {
44 2
                $fileArr = session('newLinkFile') != null ? session('newLinkFile') : [];
45 2
                $fileArr[] = $fileID;
46 2
                session(['newLinkFile' => $fileArr]);
47
            }
48
            else
49
            {
50
                // $uploadDetails = null;
51 8
                if($request->name)
52
                {
53
                    $uploadDetails = [
54 6
                        'name' => $request->name,
55 6
                        'note' => $request->comments,
56
                    ];
57
58 6
                    $this->attachFile($request->linkID, $fileID, true, $uploadDetails);
59
                }
60
                else
61
                {
62 2
                    $this->attachFile($request->linkID, $fileID);
63
                }
64
            }
65
66 10
            return true;
67
        }
68
69
        return false;
70
    }
71
72
    //  Move a file in the link to a customers files folder
73 4
    public function moveFileToCustomer(MoveFileLinkFileToCustomerRequest $request, $linkID)
74
    {
75 4
        $linkCustomer = (new GetFileLinkDetails($linkID))->getLinkCustomer();
76 4
        $this->path = config('filesystems.paths.customers').DIRECTORY_SEPARATOR.$linkCustomer.DIRECTORY_SEPARATOR;
77
78 4
        if($this->checkForDup($request->fileID, $linkCustomer))
79
        {
80 2
            return false;
81
        }
82
83 4
        if(!$this->moveFile($this->path, $request->fileID))
84
        {
85 2
            return false;
86
        }
87
88 2
        CustomerFiles::create([
89 2
            'file_id'      => $request->fileID,
90 2
            'file_type_id' => $request->fileType,
91 2
            'cust_id'      => $linkCustomer,
92 2
            'user_id'      => Auth::user()->user_id,
93 2
            'name'         => $request->fileName
94
        ]);
95
96 2
        return true;
97
    }
98
99
    //  Delete a file attached to file link
100 2
    public function deleteLinkFile($fileLinkID)
101
    {
102 2
        $fileData = FileLinkFiles::find($fileLinkID);
103 2
        $fileID   = $fileData->file_id;
104 2
        $fileData->delete();
105
106 2
        $this->deleteFile($fileID);
107 2
    }
108
109
    //  Attach a file to a file link
110 10
    protected function attachFile($linkID, $fileID, $upload = false, $uploadDetails = null)
111
    {
112 10
        $fileData = FileLinkFiles::create([
113 10
            'link_id'  => $linkID,
114 10
            'file_id'  => $fileID,
115 10
            'user_id'  => $upload ? null : Auth::user()->user_id,
116 10
            'added_by' => $upload ? $uploadDetails['name'] : null,
117 10
            'upload'   => $upload,
118 10
            'note'     => $upload ? $uploadDetails['note'] : null,
119
        ]);
120
121 10
        return $fileData;
122
    }
123
124
    //  Move files from the default file location to the proper file link folder
125 2
    public function relocateFiles($linkID)
126
    {
127 2
        $files = session('newLinkFile');
128 2
        $this->path = config('filesystems.paths.links').DIRECTORY_SEPARATOR.$linkID;
129
130 2
        foreach($files as $file)
131
        {
132 2
            $this->moveFile($this->path, $file);
133
134 2
            $this->attachFile($linkID, $file);
135 2
            Log::info('File Added for link ID - '.$linkID.' by '.Auth::user()->full_name.'.  File ID-'.$file);
136
        }
137
138 2
        session()->forget('newLinkFile');
139 2
    }
140
141
    //  When a guest uploads a new file, the owner is notified
142 2
    public function notifyOwnerOfUpload($userID, $linkDetails)
143
    {
144 2
        $userData = User::find($userID);
145 2
        Notification::send($userData, new NewFileUpload($linkDetails));
146
147 2
        return true;
148
    }
149
150 4
    protected function checkForDup($fileID, $custID)
151
    {
152 4
        $fileData = Files::find($fileID);
153
154 4
        $dup = CustomerFiles::where('file_id', $fileData->fileID)->where('cust_id', $custID)->count();
155 4
        if($dup || Storage::exists($this->path.$fileData->file_name))
156
        {
157 2
            return true;
158
        }
159
160 4
        return false;
161
    }
162
}
163