diff --git a/app/Http/Controllers/TestResultController.php b/app/Http/Controllers/TestResultController.php index e7db160a..97c41b0b 100644 --- a/app/Http/Controllers/TestResultController.php +++ b/app/Http/Controllers/TestResultController.php @@ -12,6 +12,7 @@ use App\MedicalCenter; use App\TestType; use App\Gallery; use App\Uploadable; +use App\Media; use Intervention\Image\ImageManagerStatic as Image; use Intervention\Image\ImageManager; use Illuminate\Support\Facades\Storage; @@ -113,14 +114,12 @@ class TestResultController extends Controller public function store(StoreTestResultRequest $request) { - // dd($request->result); try { $return_value = \DB::transaction(function () use ($request) { $TestResult = [ 'user_id' => auth('api')->user()->id, 'cycle_number' => $request->cycle_number, - // 'device_id' => $request->device_id, 'date' => $request->date, 'test_type_id' => $request->test_type_id, 'result' => $request->result, @@ -174,25 +173,18 @@ class TestResultController extends Controller } ///////////////////////////////////////////////////////////////////////////Inputs ///////////////////////////////////////////////////////////////////////////Images - if ($request->imgs != null) { - - foreach ($request->imgs as $key => $img) { - $Image = $img; - $Manager = new ImageManager(array('driver' => 'imagick')); - $InterventionImage = $Manager->make($Image); - - // $InterventionImage = Image::make($Image); - $Mime = explode('/', $InterventionImage->mime()); - - $ImageName = time().$key.'.'.$Mime[1]; - $Path = 'uploads'.'/TestResults'.'/'.$TestResultObj->id .'/'.$ImageName; - - Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResultObj->id); - $InterventionImage->save(public_path($Path)); - - $GalleryObj = Gallery::create(['user_id' => auth('api')->user()->id, 'path' => $Path]); - $Uploadable = Uploadable::create(['uploadable_id' => $TestResultObj->id, 'uploadable_type' => 'App\TestResult', 'gallery_id' => $GalleryObj->id, 'image_role' => 'TitleImage']); - } + $Images = Media::whereNull('model_id')->where('batch_id', $request->file_batch_id)->get(); + if($Images){ + foreach ($Images as $Image) { + $NewPath = 'media'.'/TestResults'.'/'.$TestResultObj->id .'/'.$Image->file_name; + Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResultObj->id); + if (\File::exists(public_path($Image->path))) { + \File::move(public_path($Image->path), public_path($NewPath)); + } + $Image->model_id = $TestResultObj->id; + $Image->path = $NewPath; + $Image->save(); + } } ///////////////////////////////////////////////////////////////////////////Images @@ -252,13 +244,12 @@ class TestResultController extends Controller } $ImagesPath = []; - if (count($TestResult->TitleImage)) { - foreach ($TestResult->TitleImage as $Key => $TitleImage) { - $ImagesPath[] = $TitleImage->path; + if (count($TestResult->images)) { + foreach ($TestResult->images as $Key => $Image) { + $ImagesPath[] = $Image->path; } $TestResult['imagesPath'] = $ImagesPath; } - // dd($TestResult->test_type()->device_label); $TestResult['device_label'] = $TestResult->test_type->device_label; return \MessageResponse::data($TestResult); } @@ -282,9 +273,10 @@ class TestResultController extends Controller } $ImagesPath = []; - if (count($TestResult->TitleImage)) { - foreach ($TestResult->TitleImage as $Key => $TitleImage) { - $ImagesPath[] = $TitleImage->path; + + if (count($TestResult->images)) { + foreach ($TestResult->images as $Key => $Image) { + $ImagesPath[] = $Image; } $TestResult['imagesPath'] = $ImagesPath; } @@ -297,8 +289,8 @@ class TestResultController extends Controller public static function storage_path($path) { - if (starts_with($path, 'uploads/')) { - $path = substr($path, 8); + if (starts_with($path, 'media/')) { + $path = substr($path, 6); } return $path; } @@ -306,9 +298,7 @@ class TestResultController extends Controller public function update(StoreTestResultRequest $request, TestResult $TestResult) { $TestResultData = [ - // 'autoclave_id' => $request->autoclave_id, 'cycle_number' => $request->cycle_number, - // 'device_id' => $request->device_id, 'date' => $request->date, 'test_type_id' => $request->test_type_id, 'result' => $request->result, @@ -363,71 +353,6 @@ class TestResultController extends Controller } } /////////////////////////////////////////////////////////////////////Images - $images = ''; - $imageExist = []; - $imagesDeleted = []; - if (count($TestResult->TitleImage)) - { - $images = $TestResult->TitleImage; - foreach ($images as $key => $image) { - - $imageExist[] = '/'.$image->path; - if (!in_array('/'.$image->path, $request->imgs)) { - $imagesDeleted[] = $image->path; - } - } - - } - - if ($request->imgs != null) { - $request_imgs = array_diff($request->imgs, $imageExist); - - foreach ($request_imgs as $key => $img) {// - - if (strrpos($img, "base64") !== false) { - - $Image = $img; - $Manager = new ImageManager(array('driver' => 'imagick')); - $InterventionImage = $Manager->make($Image); - // $InterventionImage = Image::make($Image); - $Mime = explode('/', $InterventionImage->mime()); - - $ImageName = time().$key.'.'.$Mime[1]; - $Path = 'uploads'.'/TestResults'.'/'.$TestResult->id .'/'.$ImageName; - - Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResult->id); - $InterventionImage->save(public_path($Path)); - - //-------------------------------------------------------- - $GalleryObj = Gallery::create(['user_id' => auth('api')->user()->id, 'path' => $Path]); - $Uploadable = Uploadable::create(['uploadable_id' => $TestResult->id, 'uploadable_type' => 'App\TestResult', 'gallery_id' => $GalleryObj->id, 'image_role' => 'TitleImage']); - //-------------------------------------------------------- - } - } - - // if (count($imagesDeleted)) { - // foreach ($imagesDeleted as $key => $imageDeleted) { - // $Gallery = Gallery::where('path', $imageDeleted)->first(); - // if ($Gallery) { - // Storage::disk('public')->delete(static::storage_path($imageDeleted)); - // Uploadable::where('gallery_id', $Gallery->id)->where('uploadable_id', $TestResult->id)->where('uploadable_type', get_class($TestResult))->delete(); - // $Gallery->delete(); - // } - // } - // } - - } - if (count($imagesDeleted)) { - foreach ($imagesDeleted as $key => $imageDeleted) { - $Gallery = Gallery::where('path', $imageDeleted)->first(); - if ($Gallery) { - Storage::disk('public')->delete(static::storage_path($imageDeleted)); - Uploadable::where('gallery_id', $Gallery->id)->where('uploadable_id', $TestResult->id)->where('uploadable_type', get_class($TestResult))->delete(); - $Gallery->delete(); - } - } - } - return \MessageResponse::success(null,trans('messages.update')); } @@ -439,11 +364,10 @@ class TestResultController extends Controller if (count($TestResult->input_values)) { InputValue::where('test_result_id', $TestResult->id)->get()->each->delete(); } - if (count($TestResult->TitleImage)){ - foreach ($TestResult->TitleImage as $image) { + if (count($TestResult->images)){ + foreach ($TestResult->images as $image) { Storage::disk('public')->delete(static::storage_path($image->path)); - Uploadable::where('gallery_id', $image->id)->where('uploadable_id', $TestResult->id)->where('uploadable_type', get_class($TestResult))->delete(); - Gallery::where('id', $image->id)->delete(); + Media::where('id', $image->id)->delete(); } } $TestResult->delete(); diff --git a/app/Http/Controllers/UploadController.php b/app/Http/Controllers/UploadController.php new file mode 100644 index 00000000..3062c32d --- /dev/null +++ b/app/Http/Controllers/UploadController.php @@ -0,0 +1,92 @@ + 'required|image|mimes:jpeg,png,jpg|max:2048', + ]; + $this->validate($request, $rules); + + if ($request->model_id !== null && is_numeric($request->model_id)) { + $Model = 'App\\'.$request->model_type; + $Object = $Model::findOrFail($request->model_id); + if ($Object) { + $Image = $request->file('image'); + $Manager = new ImageManager(array('driver' => 'imagick')); + $InterventionImage = $Manager->make($Image); + $Mime = explode('/', $InterventionImage->mime()); + + $ImageName = time().'.'.$Mime[1]; + $Path = 'media'.'/TestResults'.'/'.$Object->id .'/'.$ImageName; + + Storage::disk('public')->makeDirectory('TestResults'.'/'.$Object->id); + $InterventionImage->save(public_path($Path)); + + $MediaData = [ + 'model_id' => $Object->id, + 'batch_id' => $request->batch_id, + 'model_type' => 'App\\'.$request->model_type, + 'path' => $Path, + 'user_id' => auth('api')->user()->id, + 'file_name' => $ImageName + ]; + $Media = Media::create($MediaData); + } + } + else { + $Image = $request->file('image'); + $Manager = new ImageManager(array('driver' => 'imagick')); + $InterventionImage = $Manager->make($Image); + $Mime = explode('/', $InterventionImage->mime()); + + $ImageName = time().'.'.$Mime[1]; + $Path = 'media'.'/Temp'.'/'.$request->batch_id .'/'.$ImageName; + + Storage::disk('public')->makeDirectory('Temp'.'/'.$request->batch_id); + $InterventionImage->save(public_path($Path)); + + $MediaData = [ + 'model_id' => null, + 'batch_id' => $request->batch_id, + 'model_type' => 'App\\'.$request->model_type, + 'path' => $Path, + 'user_id' => auth('api')->user()->id, + 'file_name' => $ImageName + ]; + $Media = Media::create($MediaData); + } + return \MessageResponse::success(trans('messages.success_message'), null, $Media); + } + + public function deleteImage(Request $request) + { + if ($request->model_id != null && is_numeric($request->model_id)) { + $Media = Media::findOrFail($request->media_id); + if($Media){ + if (\File::exists(public_path($Media->path))) { + \File::delete(public_path($Media->path)); + } + $Media->delete(); + } + } + else { + $Media = Media::findOrFail($request->media_id); + if($Media){ + if(\File::exists(public_path($Media->path))){ + \File::delete(public_path($Media->path)); + } + $Media->delete(); + } + } + return \MessageResponse::success(trans('messages.success_message')); + } +} diff --git a/app/Media.php b/app/Media.php new file mode 100644 index 00000000..b445ee02 --- /dev/null +++ b/app/Media.php @@ -0,0 +1,22 @@ +belongsTo('App\User'); + } + public function model() + { + return $this->morphTo(); + } + +} diff --git a/app/TestResult.php b/app/TestResult.php index 69d0cf57..0f9bd2c0 100644 --- a/app/TestResult.php +++ b/app/TestResult.php @@ -19,6 +19,10 @@ class TestResult extends Model { return $this->hasMany('App\InputValue'); } + public function images() + { + return $this->morphMany('App\Media', 'model'); + } public function TitleImage() { return $this->morphToMany('App\Gallery', 'uploadable')->wherePivot('image_role', 'TitleImage'); diff --git a/app/Uploadable.php b/app/Uploadable.php index 5a36207a..6918b2a9 100644 --- a/app/Uploadable.php +++ b/app/Uploadable.php @@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model; class Uploadable extends Model { - protected $fillable = ['uploadable_id', 'uploadable_type', 'gallery_id', 'image_role']; + protected $fillable = ['uploadable_id', 'uploadable_type', 'gallery_id', 'image_role', 'batch_id']; public $timestamps = false; public function gallery() diff --git a/config/filesystems.php b/config/filesystems.php index e43f3cba..c6f3c6d0 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -50,7 +50,7 @@ return [ 'public' => [ 'driver' => 'local', - 'root' => public_path('uploads'), + 'root' => public_path('media'), // 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', ], diff --git a/public/media/TestResults/79/1591704182.png b/public/media/TestResults/79/1591704182.png new file mode 100644 index 00000000..6415ee73 Binary files /dev/null and b/public/media/TestResults/79/1591704182.png differ diff --git a/public/media/TestResults/79/1591704272.jpeg b/public/media/TestResults/79/1591704272.jpeg new file mode 100644 index 00000000..15c7f4d9 Binary files /dev/null and b/public/media/TestResults/79/1591704272.jpeg differ diff --git a/public/media/TestResults/79/1591706622.jpeg b/public/media/TestResults/79/1591706622.jpeg new file mode 100644 index 00000000..80520094 Binary files /dev/null and b/public/media/TestResults/79/1591706622.jpeg differ diff --git a/resources/js/vue/components/core/Dropzone.vue b/resources/js/vue/components/core/Dropzone.vue new file mode 100644 index 00000000..3e4a7589 --- /dev/null +++ b/resources/js/vue/components/core/Dropzone.vue @@ -0,0 +1,95 @@ + + + diff --git a/resources/js/vue/components/modal/testresult/Show.vue b/resources/js/vue/components/modal/testresult/Show.vue index 73d299b4..6670b052 100644 --- a/resources/js/vue/components/modal/testresult/Show.vue +++ b/resources/js/vue/components/modal/testresult/Show.vue @@ -139,7 +139,7 @@
- + diff --git a/resources/js/vue/config/urls.js b/resources/js/vue/config/urls.js index 88d25137..c32ef6b4 100644 --- a/resources/js/vue/config/urls.js +++ b/resources/js/vue/config/urls.js @@ -19,6 +19,7 @@ const urls = { sendVerifyCode: `/password/verifyCode`, changePassword: `/password/reset`, storeMessages: `/Messages`, + deleteImage: `/DeleteImage`, listMessages: function(page) { return `/Messages?page=${page}`; }, @@ -173,7 +174,7 @@ const urls = { return `/Item/Verify/${id}`; }, Barcode: function(code, type) { - + return `/BarCode/${code}/${type}`; }, packageBarcode: function(code) { diff --git a/resources/js/vue/views/TestResult/AddEdit.vue b/resources/js/vue/views/TestResult/AddEdit.vue index aab83262..d30f853c 100644 --- a/resources/js/vue/views/TestResult/AddEdit.vue +++ b/resources/js/vue/views/TestResult/AddEdit.vue @@ -85,23 +85,15 @@ - -
- - -
+ + + + - - - - - close - - - + @@ -422,10 +414,17 @@