1
|
|
|
<?php
|
2
|
|
|
namespace App\Http\Controllers\Backend;
|
3
|
|
|
|
4
|
|
|
use App\Http\Controllers\Controller;
|
5
|
|
|
use Illuminate\Http\Request;
|
6
|
|
|
use Symfony\Component\Filesystem\Filesystem;
|
7
|
|
|
use Validator;
|
8
|
|
|
use Image;
|
9
|
|
|
|
10
|
|
|
/**
|
11
|
|
|
* Class UploadController.
|
12
|
|
|
*/
|
13
|
|
|
class UploadController extends Controller
|
14
|
|
|
{
|
15
|
|
|
/**
|
16
|
|
|
* @return json
|
17
|
|
|
*
|
18
|
|
|
*/
|
19
|
|
|
protected $validation_error = [];
|
20
|
|
|
|
21
|
|
|
public function upload(Request $request)
|
22
|
|
|
{
|
23
|
|
|
$file = $request->file('file');
|
24
|
|
|
$moduleName = $request->input('moduleName');
|
25
|
|
|
$field = $request->input('field');
|
26
|
|
|
|
27
|
|
|
$valid = $this->validateUpload($file, $moduleName, $field);
|
28
|
|
|
|
29
|
|
|
if($valid){
|
30
|
|
|
$imagename = $this->getWritableFilename(str_slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)).'.'.$file->getClientOriginalExtension(), $moduleName, true);;
|
|
|
|
|
31
|
|
|
|
32
|
|
|
$destinationPath = storage_path('images/'.$moduleName);
|
33
|
|
|
|
34
|
|
|
$file->move($destinationPath, $imagename);
|
35
|
|
|
|
36
|
|
|
return response()->json(['message' => 'File successfully uploaded', 'filename' => $imagename, 'status' => 200], 200);
|
37
|
|
|
}
|
38
|
|
|
|
39
|
|
|
return response()->json(['message' => $this->validation_error, 'filename' => false, 'status' => 500], 200);
|
40
|
|
|
}
|
41
|
|
|
|
42
|
|
|
public function uploadGallery(Request $request)
|
43
|
|
|
{
|
44
|
|
|
$moduleName = $request->input('moduleName');
|
45
|
|
|
$field = $request->input('field');
|
|
|
|
|
46
|
|
|
$files = [];
|
47
|
|
|
|
48
|
|
|
foreach ($request->file('file') as $file) {
|
49
|
|
|
$imagename = $this->getWritableFilename(str_slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)).'.'.$file->getClientOriginalExtension(), $moduleName, true);;
|
|
|
|
|
50
|
|
|
$destinationPath = storage_path('images/'.$moduleName);
|
51
|
|
|
try {
|
52
|
|
|
$file->move($destinationPath, $imagename);
|
53
|
|
|
$files[] = $imagename;
|
54
|
|
|
} catch (\Throwable $th) {
|
55
|
|
|
$error = $th->getMessage();
|
56
|
|
|
}
|
57
|
|
|
}
|
58
|
|
|
|
59
|
|
|
if(!isset($error)){
|
60
|
|
|
return response()->json(['message' => 'File successfully uploaded', 'filenames' => $files, 'status' => 200], 200);
|
61
|
|
|
}
|
62
|
|
|
|
63
|
|
|
return response()->json(['message' => $error, 'filename' => false, 'status' => 500], 200);
|
64
|
|
|
}
|
65
|
|
|
|
66
|
|
|
public function delete(Request $request)
|
67
|
|
|
{
|
68
|
|
|
$moduleName = $request->input('modelName');
|
69
|
|
|
$modelToCall = "App\\Models\\" . ucfirst($moduleName);
|
70
|
|
|
$model = $modelToCall::find($request->input('modelId'));
|
71
|
|
|
$field = $request->input('field');
|
72
|
|
|
$filename = $model->$field;
|
73
|
|
|
$filePath = public_path('images/'.$moduleName.'/'.$filename);
|
74
|
|
|
$fileSystem = new Filesystem;
|
75
|
|
|
|
76
|
|
|
try {
|
77
|
|
|
$fileSystem->remove($filePath);
|
78
|
|
|
} catch (\Exception $ex) {
|
79
|
|
|
return response()->json(['message' => 'File removal failed'], 500);
|
80
|
|
|
}
|
81
|
|
|
|
82
|
|
|
$model->$field = null;
|
83
|
|
|
$model->save();
|
84
|
|
|
return response()->json(['message' => 'File successfully removed'], 200);
|
85
|
|
|
}
|
86
|
|
|
|
87
|
|
|
/**
|
88
|
|
|
* @return string
|
89
|
|
|
*/
|
90
|
|
|
public function process($filename, $moduleName)
|
91
|
|
|
{
|
92
|
|
|
$messages=['errors'=>[]];
|
93
|
|
|
$tempFile = storage_path('images/'.$moduleName.'/'.$filename);
|
94
|
|
|
$fileToWrite = $this->getWritableFilename($filename, $moduleName);
|
95
|
|
|
|
96
|
|
|
$tempImage = Image::make($tempFile);
|
97
|
|
|
|
98
|
|
|
$methodToUse = $tempImage->width() > $tempImage->height() ? 'widen' : 'heighten';
|
99
|
|
|
|
100
|
|
|
try {
|
101
|
|
|
$tempImage->$methodToUse(2000, function ($constraint){
|
102
|
|
|
$constraint->upsize();
|
103
|
|
|
})->save($fileToWrite);
|
104
|
|
|
$messages['success']['filename'] = $fileToWrite;
|
105
|
|
|
} catch (\Exception $ex) {
|
106
|
|
|
$messages['errors'][] = [ 'fileError' => $ex->getMessage()];
|
107
|
|
|
}
|
108
|
|
|
return $messages;
|
|
|
|
|
109
|
|
|
}
|
110
|
|
|
|
111
|
|
|
protected function getWritableFilename($filename, $moduleName, $is_storage=false)
|
112
|
|
|
{
|
113
|
|
|
$dir = $is_storage ? $this->getPath(storage_path('images/'.$moduleName)) : $this->getPath(public_path('images/'.$moduleName));
|
114
|
|
|
$path = $dir.'/'.$filename;
|
115
|
|
|
if (file_exists($path)) {
|
116
|
|
|
$filename = pathinfo($path, PATHINFO_FILENAME);
|
117
|
|
|
$filename .= rand(0,9).'.'.pathinfo($path, PATHINFO_EXTENSION);
|
118
|
|
|
return $this->getWritableFilename($filename, $moduleName, $is_storage);
|
119
|
|
|
}else{
|
120
|
|
|
return $is_storage ? $filename : $path;
|
121
|
|
|
}
|
122
|
|
|
}
|
123
|
|
|
|
124
|
|
|
protected function getPath($path)
|
125
|
|
|
{
|
126
|
|
|
if (!is_dir($path))
|
127
|
|
|
mkdir($path, 0755, true);
|
128
|
|
|
|
129
|
|
|
return $path;
|
130
|
|
|
}
|
131
|
|
|
|
132
|
|
|
protected function validateUpload($file, $moduleName, $field)
|
133
|
|
|
{
|
134
|
|
|
|
135
|
|
|
$moduleData = config('laragen.modules')[str_plural($moduleName)];
|
|
|
|
|
136
|
|
|
$rules = $moduleData[$field];
|
137
|
|
|
|
138
|
|
|
$file = array($field => $file);
|
139
|
|
|
|
140
|
|
|
$validator = Validator::make($file , [
|
141
|
|
|
$field => $rules,
|
142
|
|
|
]);
|
143
|
|
|
|
144
|
|
|
if ($validator->passes())
|
145
|
|
|
{
|
146
|
|
|
return true;
|
147
|
|
|
}
|
148
|
|
|
$this->validation_error = $validator->errors()->all();
|
149
|
|
|
return false;
|
150
|
|
|
}
|
151
|
|
|
}
|
152
|
|
|
|
This function has been deprecated. The supplier of the function has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.