Browse Source

after merge

Администратор 6 years ago
parent
commit
d190e8d977
79 changed files with 657 additions and 294 deletions
  1. 19 5
      app/Http/Controllers/Admin/ItemsAdminController.php
  2. 5 0
      app/Http/Controllers/Admin/UsersAdminController.php
  3. 1 1
      app/Http/Controllers/Auth/RegisterController.php
  4. 0 1
      app/Http/Controllers/HomeController.php
  5. 36 39
      app/Http/Controllers/ItemController.php
  6. 18 7
      app/Http/Controllers/ItemsInfoController.php
  7. 1 0
      app/Models/Item.php
  8. 35 35
      app/Models/Picture.php
  9. 5 6
      database/seeds/PicturesTableSeeder.php
  10. 26 1
      public/css/admin_items.css
  11. 1 0
      public/css/fine_card.css
  12. 15 17
      public/css/image-upload.css
  13. 6 8
      public/css/item_info_page.css
  14. 3 2
      public/css/item_small_view.css
  15. 2 3
      public/css/main.css
  16. 6 1
      public/js/image-upload-preview.js
  17. 63 0
      resources/views/admin/form.blade.php
  18. 24 0
      resources/views/admin/from_edit.blade.php
  19. 0 2
      resources/views/admin/index.blade.php
  20. 9 32
      resources/views/admin/items.blade.php
  21. 93 12
      resources/views/admin/users.blade.php
  22. 61 0
      resources/views/itemregister/item.blade.php
  23. 57 33
      resources/views/items/info_page.blade.php
  24. 119 0
      resources/views/items/item_modify.blade.php
  25. 2 1
      resources/views/templates/image_upload.blade.php
  26. 11 19
      resources/views/templates/modal_form.blade.php
  27. 2 9
      resources/views/templates/search_input.blade.php
  28. 4 4
      resources/views/userprofile/templates.blade.php
  29. 32 56
      routes/web.php
  30. 1 0
      storage/app/images/items/.gitignore
  31. BIN
      storage/app/images/items/item_1/22zdHJbBxGDQW1LUovIR9cRh55JOZXxnGC0dfiZ2.jpeg
  32. BIN
      storage/app/images/items/item_1/874zEXsQiubYhpNPAg89FIkbFWD3hZW2ZhenvoJB.jpeg
  33. BIN
      storage/app/images/items/item_1/SzqgP2HrnGoXcVngqcRoiUd1GZED6nUlCjPy2kfi.jpeg
  34. BIN
      storage/app/images/items/item_11/3MwU4oNipT4Ti4PJ1aFFdNUxP8W4kXzKg2p54jzF.jpeg
  35. BIN
      storage/app/images/items/item_11/QPQ9iLG7b3zyGcMvWZP1qQOolmkLtEvwbaHOPpD4.jpeg
  36. BIN
      storage/app/images/items/item_11/WD4DDluFBuTTJohVMQTaEDXBWIDFrCl2B6OnUjBn.jpeg
  37. BIN
      storage/app/images/items/item_11/tss3EjVnXAeVKNvVEfYIdjOd6XNfokjhpbC7o1rT.jpeg
  38. BIN
      storage/app/images/items/item_11/uzkp6SJFXABBSlp3mHNWMjzORP3daPb5BZu8zOjf.jpeg
  39. BIN
      storage/app/images/items/item_12/zI9ANaQlYViqit9HkWJi1MvPiG6xq29LMPeOKyuM.jpeg
  40. BIN
      storage/app/images/items/item_13/2Ud5eKmIEapnUkXBElZWWRgMulNnn56sT4xQmPGa.jpeg
  41. BIN
      storage/app/images/items/item_13/OYEY4Vt84eegjRmth1U7GdxvKAr6pY81yX6KLu58.jpeg
  42. BIN
      storage/app/images/items/item_14/AYMp7PCqJPSOmasmuXTFqIsHfVOi3xwXgXzocP9M.jpeg
  43. BIN
      storage/app/images/items/item_14/Z46PmAwMZbTv06P2FeeLCrkszz3QGIKxBs22efB3.jpeg
  44. BIN
      storage/app/images/items/item_15/8fwO3z5l8Au5mXWAMGabnxUVMlkoldt85VVrzMYd.jpeg
  45. BIN
      storage/app/images/items/item_15/Hx0EfRa9mQxMw5Zqc712B3JrAOQXTM734jcGyr11.jpeg
  46. BIN
      storage/app/images/items/item_16/4yUl3CjNSzgzspn1WBnr3X8ASGcTz2fGUgydN8p9.jpeg
  47. BIN
      storage/app/images/items/item_16/WcXMPwNyYDsYkPHBScUEozojaXmP598I1soXh7Xa.jpeg
  48. BIN
      storage/app/images/items/item_2/5o4h0RnM1T3HYRmRAoUjjrtOIk00mjSTgNWLBXcB.jpeg
  49. BIN
      storage/app/images/items/item_2/7jXFZeTeRmye310p0CGKOgCzNOOhjlNihCk0YAYo.jpeg
  50. BIN
      storage/app/images/items/item_2/ldsa7DohFifkx2opL97egxwFtDBpVQ9LUhHIVBPC.jpeg
  51. BIN
      storage/app/images/items/item_2/rcTXGcQZwfCnXSYwZYMgqdTMmm2VZc1YmeEyBDkn.jpeg
  52. BIN
      storage/app/images/items/item_3/Dzmtk2HvXisKvxVMbQptcCh4Nuavo0CDjbX2c3QE.jpeg
  53. BIN
      storage/app/images/items/item_3/F8Cd2XcCZAvOxYbt5wmwTKWVM5PeBeHkJc8gaquE.jpeg
  54. BIN
      storage/app/images/items/item_3/G9G218Rq7hhrP13zCtWoxdduT0Tltwgl4iujtw70.jpeg
  55. BIN
      storage/app/images/items/item_4/EasVr7fjaGlZEg27QB9GW7XTKRcZprEVuJBq6bVF.jpeg
  56. BIN
      storage/app/images/items/item_4/Kw0VpASepkrbp8b1d64wysmMtQgHAlABNzTeTIE2.jpeg
  57. BIN
      storage/app/images/items/item_4/LYei3CegaO90jeHoNPwqvvIIY808dQSRY6EWSbzq.jpeg
  58. BIN
      storage/app/images/items/item_5/0gtPhY7fc6i5iFFoFr92YtFbp9RwK5kMPh3eJBRV.jpeg
  59. BIN
      storage/app/images/items/item_5/29ks3DPuCbKKpxnRVk6nXr9PO4a80pjQhwDkgDBm.jpeg
  60. BIN
      storage/app/images/items/item_5/44KDu4uQKSJ0FFdYYl3xP6D3ijB6vrTlv46Anefn.jpeg
  61. BIN
      storage/app/images/items/item_5/8JxRYIYQCwxEev2lcprwSP3VxxvbGJRcmtvdvdxA.jpeg
  62. BIN
      storage/app/images/items/item_5/fMmIT28ugwoycemGUor09IgfaQ2JDhJjtb0MeXKb.jpeg
  63. BIN
      storage/app/images/items/item_5/oHMHbhtxPff71KpB3GUE5VOSFQ2VlSn0sD4uhYbS.jpeg
  64. BIN
      storage/app/images/items/item_6/7Pm3icuqHJGczU3OtAo737FE4oXfKcDFmYj7Yrnk.jpeg
  65. BIN
      storage/app/images/items/item_6/9syEYDd4L651FyrsSsmMWsnmrnE3FoQ3NfZJ2hRa.jpeg
  66. BIN
      storage/app/images/items/item_6/XtVC6jAXHlG8kB1i4sGYLkJv37H4PYgNoEAmCQEA.jpeg
  67. BIN
      storage/app/images/items/item_6/gNAnsnmyYdY8EFipxjUyrFVBOGYu59hgPqbEsFJp.jpeg
  68. BIN
      storage/app/images/items/item_7/7mq0WDB8BvynO5vJWSjMbtH71RJyAAHt3Ec1A4YZ.jpeg
  69. BIN
      storage/app/images/items/item_7/8tLel3ybelDujP7tGOE4zHDoxairMYrQjXxiByGO.jpeg
  70. BIN
      storage/app/images/items/item_7/9ddwPCIp0F24EE7AwAVJEsmWug2Y5COGTODzvIya.jpeg
  71. BIN
      storage/app/images/items/item_7/BHwIfe5zHwf47EVpE15Nz6nHEG8q2pgDT6J6cT8K.jpeg
  72. BIN
      storage/app/images/items/item_7/K1dLwLEZOgM9SgNFQacHUdYFa0Mf4nptpQkEUAd4.jpeg
  73. BIN
      storage/app/images/items/item_7/TFWK3ShSkXUqehGzhsMC7e5dPMEb09jk27acGxoD.jpeg
  74. BIN
      storage/app/images/items/item_7/k2cctKiAW77B3Hfk9FC2eVwwZDQWZd0036IKpGZk.jpeg
  75. BIN
      storage/app/images/items/item_7/uVdv9lpmSrHCS6VpmydzJzT7UL9R9EAsBLELgV2D.jpeg
  76. BIN
      storage/app/images/items/item_7/xhnHmVSNMHzzq0ibYluJRXnpFrzf2uqK99Ej1sI6.jpeg
  77. BIN
      storage/app/images/items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg
  78. BIN
      storage/app/images/items/item_9/1KTvJOBrBw8Le0f1jjlZcmLRqBFqLCos7ZjcXB5D.jpeg
  79. BIN
      storage/app/images/items/item_9/j43mj3Zi3cBWZV9P4PMhUKwH25AbCEPwxnMUHVm6.jpeg

+ 19 - 5
app/Http/Controllers/Admin/ItemsAdminController.php

@@ -4,6 +4,8 @@ namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
 use App\Models\Item;
+use App\Models\Role;
+use App\User;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
@@ -41,9 +43,8 @@ class ItemsAdminController extends Controller
         return view('admin.items', ['items' => $items ?? collect()]);
     }
 
-    public function ajaxRequest(Request $request)
+    public function ajaxItemsRequest(Request $request)
     {
-
         $content = json_decode($request->getContent());
 
         if ($content->item) {
@@ -53,12 +54,25 @@ class ItemsAdminController extends Controller
             $data->item->colNames = $data->item->getAttributes();
             $data->categories = DB::table('categories')->get();
             $data->subcategories = DB::table('subcategories')->get();
-            $route = route('item.delete', $data->item);
             $data->pictures = $data->item->getPictures();
-//            $data->item->picturesPath = $data->item->getPicturesOnlyPath();
 
-            return view('templates.modal_form', ['route' => $route, 'data' => $data]);
+            return view('templates.modal_form', ['data' => $data]);
         }
+        return null;
+    }
+
+    public function ajaxUsersRequest(Request $request)
+    {
+        $content = json_decode($request->getContent());
 
+        if ($content->user) {
+
+            $data = collect([]);
+            $data->user = User::find((int)$content->user);
+            $data->roles = Role::all();
+
+            return view('templates.modal_form', ['data' => $data]);
+        }
+        return null;
     }
 }

+ 5 - 0
app/Http/Controllers/Admin/UsersAdminController.php

@@ -23,4 +23,9 @@ class UsersAdminController extends Controller
         return view('admin.users', ['users' => $users]);
     }
 
+    public function ajaxUsersRequest(Request $request)
+    {
+        return dump($request->json()->all());
+    }
+
 }

+ 1 - 1
app/Http/Controllers/Auth/RegisterController.php

@@ -28,7 +28,7 @@ class RegisterController extends Controller
      *
      * @var string
      */
-    protected $redirectTo = 'users/home';
+    protected $redirectTo = 'user/home';
 
     /**
      * Create a new controller instance.

+ 0 - 1
app/Http/Controllers/HomeController.php

@@ -26,7 +26,6 @@ class HomeController extends Controller
     public function index()
     {
         return redirect()->route('home');
-//        return view('home');
     }
 
     public function welcome()

+ 36 - 39
app/Http/Controllers/ItemController.php

@@ -10,6 +10,7 @@ use App\Models\Subcategory;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Storage;
 
 class ItemController extends Controller
 {
@@ -57,22 +58,6 @@ class ItemController extends Controller
             return redirect()->back()->with(['message' => 'Новый объект создан']);
         }
 
-//        $item = app(Item::class);
-//        $item->fill($input);
-//        $item->created_at = 'NOW()';
-//        $item->save();
-//        return redirect()->route('admin.items');
-// ---------------- Сохранение через объект пользователя -------
-//        $user = User::find($input["user_id"]);
-//        $item = Item::create([
-//            'user_id' => $input["user_id"],
-//            'caption' => 'тестовый товар',
-//            'category_id' => '1',
-//            'subcategory_id' => '2',
-//            'description' => 'какойто текст'
-//        ]);
-//        $user->items()->save($item);
-//---------------- ---------------------------------------------
         return redirect()->back()->with(['message' => 'Объект не создан!']);
     }
 
@@ -108,34 +93,36 @@ class ItemController extends Controller
      */
     public function update(Request $request, Item $item)
     {
-        $item = $item ?? Item::find(Input::get('id'));
-        if (!is_object($item)) {
-            abort(404);
-        }
-
-        // не учтено.. если не менять картинку при редактирование объекта то может быть пустой файл картинки
-
-        $item->pictures = $item->getPictures(); // не хорошо, нужно переделать.. ($item->pictures)??---------
         if ($request->isMethod('PUT')) {
-            $item->pictures = !empty(Input::file());
-            dd($item);
-            $item->update([$request->all()
-            ]);
+            $item = $item ?? Item::find(Input::get('id'));
+            if (!is_object($item)) {
+                abort(404);
+            }
 
-            $result = $this->validate($request, [
-                "files.image_0" => 'image|max:5000',
-                "files.image_1" => 'image|max:5000',
-                "files.image_2" => 'image|max:5000',
-            ]);
-
-//            dd($result);
-//            (new ItemPicturesController)->storeInputFiles(Input::file());
+            $item->pictures = !empty(Input::file());
+            $item->update($request->all());
+
+            $pictures = $item->getPictures();
+
+            $deletedFiles = $request->all()['files'] ?? [];
+            foreach ($deletedFiles as $key => $file) {
+                if ($file) {
+                    $picture = $pictures[explode('_', $key)[1]] ?? null;
+                    if ($picture){
+                        Storage::disk('images')->delete($picture->path);
+                        $picture->delete();
+                    }
+                }
+            }
+
+            $files = $request->allFiles()['files'] ?? [];
+            foreach ($files as $file) {
+                Picture::store($item, $file);
+            }
 
-//            Picture::fromRequest($item);        // метод стоит переназвать!! --------------------------------
             return redirect()->back()->with(['message' => 'Информация обновлена']);
         }
         return redirect()->back()->with(['message' => 'Информация не обновлена']);
-
     }
 
     /**
@@ -147,11 +134,21 @@ class ItemController extends Controller
     public function destroy(Item $item)
     {
         $user = Auth::user();
+
         if ($user->can('destroy', $item)) {
             $item->delete();
             return redirect()->back();
         }
-        return redirect()->route('welcome');
+        return redirect()->back()->with('errors','У Вас нет прав');
     }
 
+//    public function userItemsAJAX(Request $request)
+//    {
+//        $itemListResponse = '';
+//        $items = Item::where('user_id',Auth::id())->where('archive','0')->get();
+//        foreach ($items as $item) {
+//            $itemListResponse .= view('templates.info_card', ['item' => $item]);
+//        }
+//        return $itemListResponse;
+//    }
 }

+ 18 - 7
app/Http/Controllers/ItemsInfoController.php

@@ -5,23 +5,34 @@ namespace App\Http\Controllers;
 use App\Models\Item;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 
 class ItemsInfoController extends Controller
 {
-    public function show(Request $request, Item $item)
-    {
-        $item->load('category');
-        return view('items.info_page', ['item' => $item]);
-    }
 
     public function userItemsAJAX(Request $request)
     {
         $itemListResponse = '';
-        foreach (Item::where('user_id',Auth::id())->where('archive','0')->get() as $item) {
+        $items = Item::where('user_id', Auth::id())->where('archive', '0')->get();
+        foreach ($items as $item) {
             $itemListResponse .= view('templates.info_card', ['item' => $item]);
-//            $itemListResponse .= view('templates.item_small_view', ['item' => $item]);
         }
         return $itemListResponse;
     }
 
+    public function userItemModifyAJAX(Request $request, Item $item)
+    {
+        $user = $request->user();
+        if ($item->user_id === $user->id) {
+
+            $data = collect();
+            $data->item = $item;
+            $data->categories = DB::table('categories')->get();
+            $data->subcategories = DB::table('subcategories')->get();
+            $data->pictures = $data->item->getPictures();
+
+            return view('items.item_modify', ['data' => $data]);
+        }
+//        return view('templates.modal_form', ['item' => $item]);
+    }
 }

+ 1 - 0
app/Models/Item.php

@@ -9,6 +9,7 @@ class Item extends Model
 {
     public $timestamps = true;
 
+    protected $guarded = ['id'];
     protected $fillable = [
         'caption',
         'category_id',

+ 35 - 35
app/Models/Picture.php

@@ -2,58 +2,58 @@
 
 namespace App\Models;
 
+
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\UploadedFile;
 use Illuminate\Support\Facades\Input;
 use Illuminate\Support\Facades\Storage;
+use Illuminate\Support\Facades\Validator;
 
 class Picture extends Model
 {
     //
-    protected $fillable = ['path', 'cache', 'item_id', 'real_name', 'mime_type', 'size','updated_at'];
+    protected $fillable = ['path', 'cache', 'item_id', 'real_name', 'mime_type', 'size', 'updated_at'];
     protected $guarded = ['id'];
     public $timestamps = true; // для seeder дожна быть public
-    protected $attributes = [
-//        'id' => '',
-//        'path' => '',
-//        'cache' => '',
-//        'item_id' => '',
-//        'real_name' => '',
-//        'mime_type' => '',
-    ];
-
-    public static function fromRequest(Item $item = null) // скорее всего должно приходить два объекта Item & Files[]
+
+    public static function fromRequest(Item $item)
     {
-        $pictures = collect();
-        $itemId = ($item) ? $item->id : Input::get('id');
-        $dirName = '/items/item_' . $itemId;
-        foreach (Input::file() as $files) {
-            if (is_array($files) && $itemId) {
-//                Storage::deleteDirectory($dirName);  // нужно ли удалять папку перед сохранением или обновлением?
-                // удаление старых записей из базы
-                Picture::where('item_id', $itemId)->delete();
-                // --------------
-                foreach ($files as $key => $file) {
-                    $picture = new self([
-                        'path' => Storage::putFile($dirName, $file),
-//                        'cache' =>  // file caching code
-                        'item_id' => $itemId,
-                        'real_name' => $file->getClientOriginalName(),
-                        'mime_type' => $file->getClientOriginalExtension(),
-                        'size' => $file->getSize()
-                    ]);
-                    $picture->save();
-                    $pictures->$key = $picture;
-                }
-//                return true;
-            }
+        $pictures = [];
+        $files = Input::file()['files'] ?? [];
+        foreach ($files as $file) {
+            $pictures[] = self::store($item, $file);
         }
         return $pictures;
     }
 
+
+    public static function store(Item $item, UploadedFile $file): Picture
+    {
+        if (self::validatePicture($file)) {
+
+            $prefix = 'items/item_' . $item->id;
+            $picture = new self([
+                'path' => Storage::disk('images')->putFile($prefix, $file),
+                'item_id' => $item->id,
+                'real_name' => $file->getClientOriginalName(),
+                'mime_type' => $file->getClientOriginalExtension(),
+                'size' => $file->getSize()
+            ]);
+            $picture->save();
+            return $picture;
+        }
+        return redirect()->back()->with('message', 'Файл должен быть картинкой до 5 Mb');
+    }
+
     public function item()
     {
         return $this->belongsTo(Item::class);
-//        return $this->hasOne(Item::class);
     }
 
+    public static function validatePicture(UploadedFile $file): bool
+    {
+        $validFile['image'] = $file;
+        $rules = ['image' => 'file|image|max:5000'];
+        return Validator::make($validFile, $rules)->passes();
+    }
 }

+ 5 - 6
database/seeds/PicturesTableSeeder.php

@@ -28,13 +28,12 @@ class PicturesTableSeeder extends Seeder
         ['items/item_7/K1dLwLEZOgM9SgNFQacHUdYFa0Mf4nptpQkEUAd4.jpeg', '7', 'holodos-saumsung[2].jpg', 'jpg', '466028'],
         ['items/item_7/xhnHmVSNMHzzq0ibYluJRXnpFrzf2uqK99Ej1sI6.jpeg', '7', 'holodos-saumsung[3].jpg', 'jpg', '466028'],
         ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '8', 'shapka.jpg', 'jpg', '466028'],
+        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '9', 'Samsug32SmartTV.jpg', 'jpg', '466028'],
+        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '9', 'Samsug32SmartTV[1].jpg', 'jpg', '466028'],
+        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '9', 'Samsug32SmartTV[2].jpg', 'jpg', '466028'],
+        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '10', 'SobachkaPavlova.jpg', 'jpg', '466028'],
+        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '10', 'SobachkaPavlova[1].jpg', 'jpg', '466028'],
 
-        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '9', 'SobachkaPavlova.jpg', 'jpg', '466028'],
-        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '9', 'SobachkaPavlova[1].jpg', 'jpg', '466028'],
-
-        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '11', 'Samsug32SmartTV.jpg', 'jpg', '466028'],
-        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '11', 'Samsug32SmartTV[1].jpg', 'jpg', '466028'],
-        ['items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg', '11', 'Samsug32SmartTV[2].jpg', 'jpg', '466028'],
     ];
 
     protected $columnNames = ['path', 'item_id', 'real_name', 'mime_type', 'size'];

+ 26 - 1
public/css/admin_items.css

@@ -70,4 +70,29 @@ tbody tr.table-hover:hover {
 
 span.glyphicon-plus {
     font-size: 0.7em;
-}
+}
+
+@media screen and (min-width: 700px){
+    #myModal .modal-content {
+        width: 600px;
+    }
+}
+
+/*i.glyphicon {*/
+    /*display: inline-block;*/
+    /*border: 2px dashed #9d9d9d;*/
+    /*color: #7d7d7d;*/
+    /*padding: 6px;*/
+    /*border-radius: .3em;*/
+    /*font-size: 1.2em;*/
+/*}*/
+/*i.glyphicon-remove:hover {*/
+    /*color: #b6581f;*/
+    /*border: 2px solid #db6121;*/
+    /*box-shadow: 0 0 0.3em #ffa781;*/
+/*}*/
+/*i.glyphicon-remove.active {*/
+    /*color: #b6581f;*/
+    /*border: 2px solid #db6121;*/
+    /*box-shadow: 0 0 0.3em #ffa781;*/
+/*}*/

+ 1 - 0
public/css/fine_card.css

@@ -175,6 +175,7 @@
     height: 380px;
     z-index: 4;
     opacity: 1;
+    width: 100%;
     background-color: whitesmoke;
     /*-webkit-transition: all 400ms ease-in-out;*/
     /*transition: all 400ms ease-in-out;*/

+ 15 - 17
public/css/image-upload.css

@@ -1,4 +1,4 @@
-.wrapper {
+#upload-files .wrapper {
     display: -webkit-box;
     display: -ms-flexbox;
     display: flex;
@@ -16,7 +16,7 @@
     justify-content: center;
 }
 
-.box {
+#upload-files .box {
     position: relative;
     display: block;
     min-width: 160px;
@@ -30,11 +30,11 @@
     overflow: hidden;
 }
 
-.wrapper .box:first-child {
+#upload-files .wrapper .box:first-child {
     background-color: #e6ffe6;
 }
 
-.upload-options {
+#upload-files .upload-options {
     position: relative;
     height: 40px;
     background-color: cadetblue;
@@ -45,11 +45,11 @@
     transition: background-color ease-in-out 150ms;
 }
 
-.upload-options:hover {
+#upload-files .upload-options:hover {
     background-color: #7fb1b3;
 }
 
-.upload-options label {
+#upload-files .upload-options label {
     padding-top: 3px;
     width: 100%;
     height: 100%;
@@ -57,18 +57,18 @@
     overflow: hidden;
 }
 
-.upload-options span {
+#upload-files .upload-options span {
     position: relative;
     margin: auto;
     color: #e6ffe6;
     font-size: 2.1em;
 }
 
-.upload-options label span:hover {
+#upload-files .upload-options label span:hover {
     color: white;
 }
 
-.upload-options input {
+#upload-files .upload-options input {
     width: 0.1px;
     height: 0.1px;
     opacity: 0;
@@ -77,7 +77,7 @@
     z-index: -1;
 }
 
-.js--image-preview {
+#upload-files .js--image-preview {
     height: 140px;
     width: 100%;
     position: relative;
@@ -90,7 +90,7 @@
     background-size: cover;
 }
 
-.js--image-preview span {
+#upload-files .js--image-preview span {
     font-size: 5.5em;
     color: #7fb1b3; /*##bfbfbf;*/
     margin-top: 15%;
@@ -98,7 +98,7 @@
     z-index: 0;
 }
 
-.js--image-preview.js--no-default::after {
+#upload-files .js--image-preview.js--no-default::after {
     display: none;
 }
 
@@ -120,11 +120,11 @@
 
 /* Required field START */
 
-.required-field-block {
+#upload-files .required-field-block {
     position: relative;
 }
 
-.required-field-block .required-icon {
+#upload-files .required-field-block .required-icon {
     display: inline-block;
     vertical-align: middle;
     background-color: rgba(240, 240, 240, 0.9); /*#E8E8E8;*/
@@ -142,7 +142,7 @@
     transition: background 0.1s linear;
 }
 
-.required-field-block .required-icon {
+#upload-files.required-field-block .required-icon {
     background-color: transparent;
     position: absolute;
     top: -0.1em;
@@ -182,6 +182,4 @@
     margin: -3px 0 0 12px;
 }
 
-glyphicon glyphicon-plus
-
 /* Required field END */

+ 6 - 8
public/css/item_info_page.css

@@ -213,14 +213,6 @@
 }
 
 .offer.card i.glyphicon-transfer{
-    /*float: right;*/
-    /*height: 1.3em;*/
-    /*border-radius: 0.1em;*/
-    /*border: 2px dashed #ca5354;*/
-    /*padding: 5px;*/
-    /*display: block;*/
-    /*font-size: 1.5em;*/
-    /*color: #ca5354;*/
     display: inline-block;
     border: 2px dashed #9d9d9d;
     color: #7d7d7d;
@@ -235,4 +227,10 @@
     background-color: #ca5354;
     color: #eee;
     border: 2px solid #ff7277;
+}
+
+@media screen and (min-width: 700px) {
+    #itemModify .modal-content {
+        width: 600px !important;
+    }
 }

+ 3 - 2
public/css/item_small_view.css

@@ -11,8 +11,9 @@
     text-align: left;
 }
 #item-small-view img {
-    width: 100%;
-    height: 100%;
+    height: 150px;
+    width: auto;
+
 }
 
 #item-small-view div {

+ 2 - 3
public/css/main.css

@@ -5,17 +5,16 @@ body {
     /*margin-bottom: 70px;*/
 }
 
-<<<<<<< HEAD
+
 /*.navbar {*/
     /*height: 60px;*/
     /*border-radius: 0px;*/
     /*!*background-image: url("/img/8-temnyy-fon-tkani.png");*!*/
 /*}*/
-=======
+
 nav {
     margin-bottom: 15px;
 }
->>>>>>> 60ccba40973624db4e3dcf48e55ae2d7182c7110
 
 .login {
     display: inline-block;

+ 6 - 1
public/js/image-upload-preview.js

@@ -38,8 +38,9 @@ function initImageUpload(box) {
 
 }
 
-function clearInputFile(element){
+function clearInputFile(element) {
     box = element.parentElement;
+    setIsDeleted(box);
     box.querySelector('.image-upload').value = null;
     box.querySelector('.js--image-preview').style.backgroundImage = 'url("")';
     box.querySelector('.js--image-preview').className = 'js--image-preview';
@@ -47,6 +48,10 @@ function clearInputFile(element){
     $(box.querySelector('.js--image-preview span')).show();
 }
 
+function setIsDeleted(element) {
+    $(element).find('[data-is-deleted]').val('deleted');
+}
+
 var boxes = document.querySelectorAll('.box');
 for (let i = 0; i < boxes.length; i++) {
     let box = boxes[i];

+ 63 - 0
resources/views/admin/form.blade.php

@@ -0,0 +1,63 @@
+<form id="item-form" method="POST" action="{{ route('user.edit',$data->item) }}" enctype="multipart/form-data">
+    {{ csrf_field() }}
+    <input type="hidden" name="_method" value="POST">
+    <input type="hidden" name="id" value="{{ $user->id }}">
+
+    <div class="input-group mb-3">
+        <div class="input-group-prepend">
+            <span class="input-group-text"><i class="glyphicon glyphicon-user"></i></span>
+        </div>
+        <input type="text" class="form-control" aria-label="Item id" style="max-width: 130px" placeholder="Пользователь"
+               name="user_id" value="{{ $data->item->user_id }}">
+        <div class="input-group-prepend ml-3">
+            <span class="input-group-text"><i class="glyphicon glyphicon-calendar"></i></span>
+        </div>
+        <input type="text" disabled class="form-control" aria-label="data creating" placeholder="Дата создания"
+               {{--name="created_at"--}} value="{{ $user->created_at }}">
+    </div>
+
+    <div class="input-group mb-3">
+        <div class="input-group-prepend">
+            <span class="input-group-text"><i class="glyphicon glyphicon-bookmark"></i></span>
+        </div>
+        <input type="text" class="form-control" aria-label="data creating" placeholder="Заголовок"
+               name="caption" value="{{ $user->nickname }}">
+    </div>
+
+    {{--<div class="input-group mb-3">--}}
+        {{--<div class="input-group-prepend">--}}
+            {{--<span class="input-group-text"><i class="glyphicon glyphicon-indent-left"></i></span>--}}
+        {{--</div>--}}
+        {{--<select type="text" class="form-control" placeholder="Категория" title="Выберите категорию"--}}
+                {{--onchange="subcategoryPick(this)"--}}
+                {{--name="category_id" value="{{ $user->email }}">--}}
+            {{--<option disabled value="">Выберите категорию</option>--}}
+            {{--@foreach($data->categories as $category)--}}
+                {{--<option {{ ($category->id == $data->item->category_id) ? 'selected' : '' }}--}}
+                        {{--value="{{ $category->id }}">{{ $category->title }}--}}
+                {{--</option>--}}
+            {{--@endforeach--}}
+        {{--</select>--}}
+        {{--<div class="input-group-prepend ml-3">--}}
+            {{--<span class="input-group-text"><i class="glyphicon glyphicon-list"></i></span>--}}
+        {{--</div>--}}
+        {{--<select type="text" class="form-control" placeholder="Подкатегория" title="Выберите подкатегорию"--}}
+                {{--id="item-subcat"--}}
+                {{--name="created_at" value="{{ $data->item->subcategory->title }}">--}}
+            {{--<option disabled value="">Выберите подкатегорию</option>--}}
+            {{--@foreach($data->subcategories as $subcategory)--}}
+                {{--@if ($subcategory->category_id == $data->item->category_id)--}}
+                    {{--<option {{ ($subcategory->id == $data->item->subcategory_id) ? 'selected' : '' }}--}}
+                            {{--value="{{ $subcategory->id }}">{{ $subcategory->title }}</option>--}}
+                {{--@endif--}}
+            {{--@endforeach--}}
+        {{--</select>--}}
+    {{--</div>--}}
+
+    {{--<div class="form-group" style="margin-top: 15px">--}}
+        {{--<label for="description">Описание</label>--}}
+        {{--<textarea class="form-control" rows="5" id="item.description"--}}
+                  {{--name="description">{{ trim($data->item->description) }}</textarea>--}}
+    {{--</div>--}}
+
+</form>

+ 24 - 0
resources/views/admin/from_edit.blade.php

@@ -0,0 +1,24 @@
+<div id="myModal" class="modal animate" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
+     aria-hidden="true" data-backdrop="true">
+    <div class="modal-dialog a-zoomRight" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="exampleModalLabel">Редактирование итемки</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span>
+                </button>
+            </div>
+            <div class="modal-body text-center p-lg">
+                <p style="font-size: 1.2em">Содержимое отсутствует!</p>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-danger" data-action="DELETE" onclick="changeMethod(this)">Удалить
+                </button>
+                <button type="button" class="btn btn-primary" data-action="PUT" onclick="changeMethod(this)">Изменить
+                </button>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
+            </div>
+        </div>
+    </div>
+</div>
+

+ 0 - 2
resources/views/admin/index.blade.php

@@ -59,12 +59,10 @@
 @section('content')
     {{--<div class="card-header">--}}
         @if(count($errors)>0)
-            <div class="alert alert-danger" style="padding-top: 0px"></div>
             @foreach($errors->all() as $error)
                 <div class="alert alert-danger" style="display:inline!important">{{ $error }}</div>
             @endforeach
         @elseif(session('message'))
-            <div class="alert alert-success" style="padding-top: 0px"></div>
             @foreach((array)session('message') as $message)
                 <div class="alert alert-success" style="display:inline!important">{{ $message }}</div>
             @endforeach

+ 9 - 32
resources/views/admin/items.blade.php

@@ -9,42 +9,25 @@
 
 
 @section('content')
-    {{--<div class="header panel">--}}
-    {{--@if(count($errors)>0)--}}
-    {{--<div class="alert alert-danger" style="padding-top: 0px"></div>--}}
-    {{--@foreach($errors->all() as $error)--}}
-    {{--<div class="alert alert-danger" style="display:inline!important">{{ $error }}</div>--}}
-    {{--@endforeach--}}
-    {{--@elseif(session('message'))--}}
-    {{--<div class="alert alert-success" style="padding-top: 0px"></div>--}}
-    {{--@foreach((array)session('message') as $message)--}}
-    {{--<div class="alert alert-success" style="display:inline!important">{{ $message }}</div>--}}
-    {{--@endforeach--}}
-    {{--@else--}}
-    {{--<h2>Администрирование предметов</h2>--}}
-    {{--@endif--}}
-
-    {{--</div>--}}
 
     <div class="container">
-        <div class="admin-items card panel-default panel-table">
-            <div class="card-header">
-                <h4 class="panel-title">Список предметов</h4>
-            </div>
+        <div class="admin-items panel-default panel-table">
+                <h4 class="panel-title mb-2 pb-2">Список предметов</h4>
         </div>
         <div class="panel-body">
             @if ($items->total() > 0)
+
                 <table class="table table-striped table-hover table-bordered table-list">
                     <thead class="thead-dark">
                     <tr>
                         <th style="width:50px"><em class="fa fa-cog"></em></th>
                         <th>id</th>
                         <th>user</th>
-                        <th>caption</th>
-                        <th>description</th>
-                        <th>category</th>
-                        <th>subcategory</th>
-                        <th>created_at</th>
+                        <th>Заголовок</th>
+                        <th>Описание</th>
+                        <th>Категория</th>
+                        <th>Подкатегория</th>
+                        <th>Создан</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -94,7 +77,6 @@
                     <button type="button" class="btn btn-danger" data-action="DELETE" onclick="changeMethod(this)">Удалить</button>
                     <button type="button" class="btn btn-primary" data-action="PUT" onclick="changeMethod(this)">Изменить</button>
                     <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
-
                 </div>
             </div>
         </div>
@@ -130,21 +112,16 @@
 
         function changeMethod(element) {
             let method = $(element).data('action');
-//            console.log(method);
             $('#item-form').find('[name="_method"]').val(method);
-            {{--if (method === "POST") {--}}  // нужно если делать форму для регистрации итемок
-                {{--$('#item-form').attr('action', " {{ route('item.store') }} ");--}}
-            {{--}--}}
             $('#item-form').submit();
         }
 
         $(function () {
-//            $("#myModal").modal('show');
-
             $('#myModal').on('shown.bs.modal', function () {
                 $(this).find('[role="document"]').$('#myModal').focus();
             })
         })
+
     </script>
 @endsection
 

+ 93 - 12
resources/views/admin/users.blade.php

@@ -5,21 +5,13 @@
 @endsection
 @section('content')
     @parent
-
     <div class="container">
         <div class="table-users card">
             <div class="card-header">
                 <h4>Администрирование пользователей</h4>
             </div>
-            <div class="card-body">
-                <div class="table table-striped table-hover">
-                    <div class="card-header-tabs">
-
-                    </div>
-                </div>
-            </div>
             <table class="table table-striped table-hover">
-                <thead class="">
+                <thead class="table-dark">
                 <tr>
                     <th>action</th>
                     <th>id</th>
@@ -35,9 +27,12 @@
                 @foreach ( $users as $user)
                     <tr>
                         <td>
-                            <i class="fas-check"></i>
-                             delete change</td>
-                        <td>{{ $user->id }} </td>
+                            {{--<i class="fas fa-check"></i>--}}
+                            <i class="glyphicon glyphicon-remove" title="отклонить" data-status="delete"
+                               style="color: red"></i>
+                            <i class="glyphicon glyphicon-edit" title="редактировать" data-status="edit"></i>
+                        </td>
+                        <td data-id>{{ $user->id }} </td>
                         <td>{{ $user->nickname }} </td>
                         <td>{{ $user->email }} </td>
                         <td> reset</td>
@@ -56,5 +51,91 @@
         </div>
 
     </div>
+
+    {{----------------- MODAL USER -----------------------------}}
+    <div id="myModal" class="modal animate" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
+         aria-hidden="true" data-backdrop="true">
+        <div class="modal-dialog a-zoomRight" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title" id="exampleModalLabel">Редактирование итемки</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                </div>
+                <div class="modal-body text-center p-lg">
+                    <p style="font-size: 1.2em">Содержимое отсутствует!</p>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-danger" data-action="DELETE" onclick="changeMethod(this)">Удалить
+                    </button>
+                    <button type="button" class="btn btn-primary" data-action="PUT" onclick="changeMethod(this)">Изменить
+                    </button>
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
+                </div>
+            </div>
+        </div>
     </div>
+
+@endsection
+
+@section('scripts')
+    @parent
+    <script>
+        $(function () {
+            $('i.glyphicon').on('click', function (element) {
+                let action = $(this).data('status');
+                if (action === 'delete') {
+                    console.log($(this).closest('tr').find('[data-id]').text());
+                    ajaxUserEditRequest(1);
+                }
+            });
+        });
+
+        function ajaxUserEditRequest($id) {
+            $.ajax({
+                headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
+                url: '{{ route("admin.users.ajax", ["id"=> '0'])}}' + $id,
+                type: 'POST',
+                data: ( '{ "user": ' + $id + ' }' ),
+                contentType: 'json',
+                success: function (response) {
+                    $("#myModal .modal-body").html(response);
+//console.log(response);
+//                    let item = document.querySelector('#myModal input[name="id"]');
+//                    let title = document.querySelector('#myModal .modal-title');
+//                    title.innerHTML = "Редактирование итемки № <b>" + item.value + "</b>";
+                }
+            });
+        }
+
+        function optionShow($element) {
+            var $id = $element.getAttribute('value')
+
+            $.ajax({
+                headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
+                url: '{{ route("admin.users.ajax", ["id"=> '0'])}}' + $id,
+                type: 'POST',
+                data: ( '{ "user": ' + $id + ' }' ),
+                contentType: 'json',
+                success: function (response) {
+                    $("#myModal .modal-body").html(response);
+
+                    let item = document.querySelector('#myModal input[name="id"]');
+                    let title = document.querySelector('#myModal .modal-title');
+                    title.innerHTML = "Редактирование итемки № <b>" + item.value + "</b>";
+                }
+            });
+
+            $("#myModal").modal('show');
+            $("#myModal").attr('style', 'margin-top: 5%; transition: all 600ms ease-in-out;');
+        }
+
+        function changeMethod(element) {
+            let method = $(element).data('action');
+            $('#item-form').find('[name="_method"]').val(method);
+            $('#item-form').submit();
+        }
+
+    </script>
 @endsection

+ 61 - 0
resources/views/itemregister/item.blade.php

@@ -1,4 +1,11 @@
+<style>
+    #upload-files .js--image-preview span {
+        margin-top: 15%;
+        margin-left: 25%;
+    }
+</style>
 <div class="container">
+
     <style>
         body {
             color:black;
@@ -55,6 +62,60 @@
             </div>
         </div>
     </div>
+
+
+    {{--<div class="col-md-6"--}}{{----}}{{-- style="max-width:600px;min-width:600px;"--}}{{----}}{{-->--}}
+    {{--<form enctype="multipart/form-data" method="POST" action="{{ route('item.store') }}">--}}
+        {{--<div class="card" style="max-width: 600px">--}}
+            {{--<div class="card-body">--}}
+
+                {{--{{ csrf_field() }}--}}
+                {{--<div class="form-group">--}}
+                    {{--<label for="caption">Заголовок</label>--}}
+                    {{--<input type="text" id="caption" class="form-control" name="caption"--}}
+                           {{--placeholder="Название товара">--}}
+                {{--</div>--}}
+                {{--<div class="form-group">--}}
+                    {{--<label for="category">Выберите категорию</label>--}}
+                    {{--<select id="category" class="form-control" name="category_id"--}}
+                            {{--onchange="loadSubcategory(this)">--}}
+                        {{--<option value="" disabled>Выберите категорию</option>--}}
+                        {{--@foreach($categories as $category)--}}
+                            {{--<option value="{{$category->id}}">{{$category->title}}</option>--}}
+                        {{--@endforeach--}}
+                    {{--</select>--}}
+                    {{--@if ($errors->has('category'))--}}
+                        {{--<span class="invalid-feedback"><strong>{{ $errors->first('category') }}</strong></span>--}}
+                    {{--@endif--}}
+                {{--</div>--}}
+                {{--<div class="form-group">--}}
+                    {{--<label for="subcategory">Выберите подкатегорию</label>--}}
+                    {{--<select id="subcategory" class="form-control" name="subcategory_id">--}}
+                        {{--<option value="" disabled>Выберите подкатегорию</option>--}}
+                        {{--@foreach($subcategories as $subcategory)--}}
+                            {{--<option value="{{$subcategory->id}}">{{$subcategory->title}}</option>--}}
+                            {{--<option value="1">{{$subcategory}}</option>--}}
+                        {{--@endforeach--}}
+                    {{--</select>--}}
+                {{--</div>--}}
+                {{--<div class="form-group">--}}
+                    {{--<label for="description">Описание</label>--}}
+                    {{--<textarea name="description" class="form-control" id="description" rows="3"></textarea>--}}
+                {{--</div>--}}
+                {{--@include('templates.image_upload')--}}
+
+            {{--</div>--}}
+            {{--<div class="card-footer">--}}
+                {{--<div class="text-center">--}}
+                    {{--<input hidden name="user_id" value="{{ \Illuminate\Support\Facades\Auth::id() }}">--}}
+                    {{--<button type="submit" class="btn btn-primary" id="submitbtn" name="submit">--}}
+                        {{--Сохранить--}}
+                    {{--</button>--}}
+                {{--</div>--}}
+            {{--</div>--}}
+        {{--</div>--}}
+    {{--</form>--}}
+
 </div>
 {{--</div>--}}
 

+ 57 - 33
resources/views/items/info_page.blade.php

@@ -6,7 +6,6 @@
 @section('styles')
     @parent
     <link href="{{ asset('css/item_info_page.css') }}" rel="stylesheet">
-    {{--<link href="{{ asset('css/item_small_view.css') }}" rel="stylesheet">--}}
     <link href="{{ asset('css/animated_modal_4.css') }}" rel="stylesheet">
 @endsection
 
@@ -102,23 +101,31 @@
         <div id="exchenger" style="margin-top:15px">
             @if ($item->archive == 'false')
                 @auth
-                    @if ($item->user_id === \Illuminate\Support\Facades\Auth::id())
-                        <a href="#" class="btn btn-secondary btn-lg btn-block" role="button"
-                           onclick="userItemsModify()"
+                @if ($item->user_id === \Illuminate\Support\Facades\Auth::id())
+                    <div class="form-group form-inline">
+                        <form method="POST" action="{{ route('item.delete',$item) }}">
+                            {{ csrf_field() }}
+                            <input type="hidden" name="_method" value="DELETE">
+                            <button type="submit" class="btn btn-danger btn-lg">Удалить</button>
+                        </form>
+                        <a href="#" class="btn btn-secondary btn-lg mt-0 ml-3" role="button"
+                           onclick="userItemsModify({{ $item->id }})"
                            data-toggle="modal" data-target="#itemModify">Редактировать</a>
-                    @else
-                        <button type="button" class="btn btn-primary btn-lg btn-block" onclick="userItemsList()"
-                            data-toggle="modal" data-target="#itemListModal">Предложить обмен
-                        </button>
-                    @endif
+                    </div>
                 @else
-                     <a href="{{ route('login') }}" class="btn btn-secondary btn-lg btn-block" role="button">Предложить обмен</a>
+                    <button type="button" class="btn btn-primary btn-lg btn-block" onclick="userItemsList(this)"
+                            data-toggle="modal" data-target="#itemListModali">Предложить обмен
+                    </button>
+                @endif
+            @else
+                <a href="{{ route('login') }}" class="btn btn-secondary btn-lg btn-block" role="button">Предложить
+                    обмен</a>
                 @endauth
             @endif
         </div>
     </div>
 
-{{------------------------------ MODAL WINDOWS ------------------------}}
+    {{------------------------------ MODAL WINDOWS ------------------------}}
     <div class="modal fade" id="itemListModal" tabindex="-1" role="dialog" aria-labelledby="itemListModalLabel"
          aria-hidden="true">
         <div class="modal-dialog modal-dialog-slideout modal-lg" role="document">
@@ -148,7 +155,7 @@
     </div>
 
     <div class="modal fade" id="itemModify" tabindex="-1" role="dialog" aria-labelledby="itemModify" aria-hidden="true">
-        <div class="modal-dialog modal-dialog-slideout modal-lg" role="document">
+        <div class="modal-dialog a-zoomRight" role="document">
             <div class="modal-content">
                 <div class="modal-header">
                     <h5 class="modal-title" id="itemModifyLabel">Измение итемки</h5>
@@ -160,18 +167,18 @@
                     <h4> Итемка не выбрана </h4>
                 </div>
                 <div class="modal-footer">
-                    <form id="itemsUpdateForm" method="POST" role="form" hidden
-                          action="{{ route('item.exchange.store',['item'=>$item->id]) }}">
-                        {{ csrf_field() }}
-                        <input name="_method" value="PUT" hidden>
-                        <input name="item_id" value="{{ $item->id }}" hidden>
-
-                    </form>
+                    <button type="button" class="btn btn-danger" data-action="DELETE" onclick="changeMethod(this)">
+                        Удалить
+                    </button>
+                    <button type="button" class="btn btn-primary" data-action="PUT" onclick="changeMethod(this)">
+                        Изменить
+                    </button>
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
                 </div>
             </div>
         </div>
     </div>
-{{-------------------------- END MODAL WINDOWS ------------------------}}
+    {{-------------------------- END MODAL WINDOWS ------------------------}}
 
     @if (session('status.text'))
         <button data-toggle="modal" data-target="#alert">SHOW</button>
@@ -211,6 +218,8 @@
                     if (response.length !== 0) {
                         $("#itemListModal .modal-body").html(response);
                     }
+                    $('#itemListModal').modal('toggle');
+                    console.log(response);
                     $('a[href="#sendOffer"]').bind("click", function () {
                         let $id = $(this).data('item-id');
                         if ($id) {
@@ -223,26 +232,17 @@
             });
         }
 
-        function userItemsModify(item){
+        function userItemsModify(itemId) {
             $.ajax({
                 headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
-                url: '{{ route("user.items.ajax") }}',
+                url: '{{ route("user.item.modify.ajax",0) }}' + itemId,
                 type: 'POST',
-                data: ( '{ "item": ' + item +' }' ),
-                contentType: 'json',
-                processData: false,
+                data: ( '{ "item": ' + itemId + ' }' ),
                 success: function (response) {
+                    console.log(response);
                     if (response.length !== 0) {
                         $("#itemModify .modal-body").html(response);
                     }
-//                    $('a[href="#sendOffer"]').bind("click", function () {
-//                        let $id = $(this).data('item-id');
-//                        if ($id) {
-//                            $('form input#itemOfferId').val($id);
-//                            $('#itemsExchangeForm').submit();
-//                        }
-//                        console.log($id);
-//                    });
                 }
             });
         }
@@ -250,5 +250,29 @@
         $(function () {
             $('#alert').modal('toggle');
         });
+
+
+        function optionShow($element) {
+            var $id = $element.getAttribute('value');
+
+            $.ajax({
+                headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
+                url: '{{ route("admin.items.ajax", ["id"=> '0'])}}' + $id,
+                type: 'POST',
+                data: ( '{ "item": ' + $id + ' }' ),
+                contentType: 'json',
+                processData: false,
+                success: function (response) {
+                    $("#itemModify .modal-body").html(response);
+
+                    let item = document.querySelector('#myModal input[name="id"]');
+                    let title = document.querySelector('#myModal .modal-title');
+                    title.innerHTML = "Редактирование итемки № <b>" + item.value + "</b>";
+                }
+            });
+
+            $("#itemModify").modal('show');
+            $("#itemModify").attr('style', 'margin-top: 5%; transition: all 600ms ease-in-out;');
+        }
     </script>
 @endsection

+ 119 - 0
resources/views/items/item_modify.blade.php

@@ -0,0 +1,119 @@
+
+    <link href="{{ asset('css/animated_modal_4.css') }}" rel="stylesheet">
+    <!--suppress ALL -->
+    <div id="json-subcat" hidden>{{ (string)($data->subcategories) ?? '' }}</div>
+    <div id="data-pictures" hidden>{{ (string)($data->pictures) ?? '' }}</div>
+
+    <script>
+        var data = $('#data-pictures').text()
+        if (data != "") {
+            var $pictures = $.parseJSON($('#data-pictures').text());
+        }
+        var $subcat = $.parseJSON($('#json-subcat').text());
+        $('#json-subcat').remove();
+
+        function subcategoryPick(elem) {
+            let selected = $(elem).val()
+            var subCatOpt = '';
+            $subcat.forEach(function (subcat) {
+                if (subcat.category_id === +selected) {
+                    subCatOpt += '<option value="' + subcat.category_id + '">' + subcat.title + '</option><br>'
+                }
+            });
+            $('#item-subcat').html(subCatOpt);
+        }
+    </script>
+
+    <form id="item-form" method="POST" action="{{ route('item.update',$data->item) }}" enctype="multipart/form-data">
+        {{ csrf_field() }}
+        <input type="hidden" name="_method" value="PUT">
+        <input type="hidden" name="id" value="{{ $data->item->id }}">
+
+        <div class="input-group mb-3">
+            <div class="input-group-prepend">
+                <span class="input-group-text"><i class="glyphicon glyphicon-user"></i></span>
+            </div>
+
+            <div class="input-group-prepend ml-3">
+                <span class="input-group-text"><i class="glyphicon glyphicon-calendar"></i></span>
+            </div>
+            <input type="text" disabled class="form-control" aria-label="data creating" placeholder="Дата создания"
+                   {{--name="created_at"--}} value="{{ $data->item->created_at }}">
+        </div>
+
+        <div class="input-group mb-3">
+            <div class="input-group-prepend">
+                <span class="input-group-text"><i class="glyphicon glyphicon-bookmark"></i></span>
+            </div>
+            <input type="text" class="form-control" aria-label="data creating" placeholder="Заголовок"
+                   name="caption" value="{{ $data->item->caption }}">
+        </div>
+
+        <div class="input-group mb-3">
+            <div class="input-group-prepend">
+                <span class="input-group-text"><i class="glyphicon glyphicon-indent-left"></i></span>
+            </div>
+            <select type="text" class="form-control" placeholder="Категория" title="Выберите категорию"
+                    onchange="subcategoryPick(this)"
+                    name="category_id" value="{{ $data->item->category->title }}">
+                <option disabled value="">Выберите категорию</option>
+                @foreach($data->categories as $category)
+                    <option {{ ($category->id == $data->item->category_id) ? 'selected' : '' }}
+                            value="{{ $category->id }}">{{ $category->title }}
+                    </option>
+                @endforeach
+            </select>
+            <div class="input-group-prepend ml-3">
+                <span class="input-group-text"><i class="glyphicon glyphicon-list"></i></span>
+            </div>
+            <select type="text" class="form-control" placeholder="Подкатегория" title="Выберите подкатегорию"
+                    id="item-subcat"
+                    name="created_at" value="{{ $data->item->subcategory->title }}">
+                <option disabled value="">Выберите подкатегорию</option>
+                @foreach($data->subcategories as $subcategory)
+                    @if ($subcategory->category_id == $data->item->category_id)
+                        <option {{ ($subcategory->id == $data->item->subcategory_id) ? 'selected' : '' }}
+                                value="{{ $subcategory->id }}">{{ $subcategory->title }}</option>
+                    @endif
+                @endforeach
+            </select>
+        </div>
+
+        <div class="form-group" style="margin-top: 15px">
+            <label for="description">Описание</label>
+            <textarea class="form-control" rows="5" id="item.description"
+                      name="description">{{ trim($data->item->description) }}</textarea>
+        </div>
+
+        @include('templates.image_upload')
+
+    </form>
+
+
+@section('script')
+    @parent
+    <script>
+        $(document).ready(function () {
+            setInputFileViews();
+        });
+
+        function setInputFileViews() {
+            if ($pictures.length > 0) {
+                $pictures.forEach(function (file, key) {
+                    $(boxes[key].querySelector('.js--image-preview span')).hide();
+                    $(boxes[key].querySelector('.required-field-block')).show();
+
+                    let thumb = boxes[key].querySelector('.js--image-preview');
+                    let url = "{{ route('images','/') }}/" + file.path;
+                    thumb.style.backgroundImage = 'url(' + url + ')';
+                });
+            }
+        }
+        function changeMethod(element) {
+            let method = $(element).data('action');
+            $('#item-form').find('[name="_method"]').val(method);
+            $('#item-form').submit();
+        }
+    </script>
+@endsection
+@yield('script')

+ 2 - 1
resources/views/templates/image_upload.blade.php

@@ -1,6 +1,6 @@
 <link href=" {{ asset('css/image-upload.css') }}" rel="stylesheet">
 
-<div id="body">
+<div id="upload-files">
     <div class="wrapper">
         @for($i = 0; $i < 3; $i++)
             <div class="box">
@@ -18,6 +18,7 @@
                         <span class="glyphicon glyphicon-plus pt-1" style="font-size: 1.6em"></span>
                         {{--<input type="file" class="image-upload" accept="image/*" name="image_{{ $i }}"/>--}}
                         <input type="file" class="image-upload" accept="image/*" name="files[image_{{ $i }}]"/>
+                        <input class="image-upload" name="files[image_{{ $i }}]" data-is-deleted value=""/>
                     </label>
                 </div>
             </div>

+ 11 - 19
resources/views/templates/modal_form.blade.php

@@ -3,7 +3,6 @@
 <div id="data-pictures" hidden>{{ (string)($data->pictures) ?? '' }}</div>
 
 <script>
-            {{--    var $subcat = {!! (string)$data->subcategories !!};--}}
     var data = $('#data-pictures').text()
     if (data != "") {
         var $pictures = $.parseJSON($('#data-pictures').text());
@@ -11,8 +10,8 @@
     var $subcat = $.parseJSON($('#json-subcat').text());
     $('#json-subcat').remove();
 
-    function subcategoryPick() {
-        var selected = $('#item-cat').val()
+    function subcategoryPick(elem) {
+        let selected = $(elem).val()
         var subCatOpt = '';
         $subcat.forEach(function (subcat) {
             if (subcat.category_id === +selected) {
@@ -21,20 +20,12 @@
         });
         $('#item-subcat').html(subCatOpt);
     }
-//    if ($('.modal-footer button').length < 2) {
-//        $('.modal-footer').prepend(
-//            '<button type="button" class="btn btn-primary" _method="POST" onclick="changeMethod(this)">Создать</button>' +
-//            '<button type="button" class="btn btn-danger" _method="DELETE" onclick="changeMethod(this)">Удалить</button>' +
-//            '<button type="button" class="btn btn-info" _method="PUT" onclick="changeMethod(this)">Сохранить изменения</button>'
-//        )
-//    }
 </script>
 
 <form id="item-form" method="POST" action="{{ route('item.update',$data->item) }}" enctype="multipart/form-data">
     {{ csrf_field() }}
     <input type="hidden" name="_method" value="POST">
     <input type="hidden" name="id" value="{{ $data->item->id }}">
-    {{--<input id="item-form-submit" type="submit" hidden>--}}
 
     <div class="input-group mb-3">
         <div class="input-group-prepend">
@@ -45,8 +36,8 @@
         <div class="input-group-prepend ml-3">
             <span class="input-group-text"><i class="glyphicon glyphicon-calendar"></i></span>
         </div>
-        <input type="text" class="form-control" aria-label="data creating" placeholder="Дата создания"
-               name="created_at" value="{{ $data->item->created_at }}">
+        <input type="text" disabled class="form-control" aria-label="data creating" placeholder="Дата создания"
+               {{--name="created_at"--}} value="{{ $data->item->created_at }}">
     </div>
 
     <div class="input-group mb-3">
@@ -62,9 +53,9 @@
             <span class="input-group-text"><i class="glyphicon glyphicon-indent-left"></i></span>
         </div>
         <select type="text" class="form-control" placeholder="Категория" title="Выберите категорию"
-                onchange="subcategoryPick()"
+                onchange="subcategoryPick(this)"
                 name="category_id" value="{{ $data->item->category->title }}">
-            <option disabled value="#">Выберите категорию</option>
+            <option disabled value="">Выберите категорию</option>
             @foreach($data->categories as $category)
                 <option {{ ($category->id == $data->item->category_id) ? 'selected' : '' }}
                         value="{{ $category->id }}">{{ $category->title }}
@@ -100,6 +91,10 @@
 @section('script')
     @parent
     <script>
+        $(document).ready(function () {
+            setInputFileViews();
+        });
+
         function setInputFileViews() {
             if ($pictures.length > 0) {
                 $pictures.forEach(function (file, key) {
@@ -107,14 +102,11 @@
                     $(boxes[key].querySelector('.required-field-block')).show();
 
                     let thumb = boxes[key].querySelector('.js--image-preview');
-                    let url = "../image/" + file.path;
+                    let url = "{{ route('images','/') }}/" + file.path;
                     thumb.style.backgroundImage = 'url(' + url + ')';
                 });
             }
         }
-        $(document).ready(function () {
-            setInputFileViews();
-        });
     </script>
 @endsection
 @yield('script')

+ 2 - 9
resources/views/templates/search_input.blade.php

@@ -73,21 +73,14 @@
                             data-toggle="dropdown" aria-expanded="true">
                         <span class="caret"></span>
                     </button>
-<<<<<<< HEAD
-                    <div class="dropdown-menu" role="menu">
-                        <form class="form-horizontal" role="form">
-                            <div class="form-group">
-                                <label for="filter">Фильтр по категории</label>
-                                <select id=filter" class="form-control" name="subCat" id="subCat" value="0">
-                                    <option value="0" disabled selected hidden value="">Выберите категорию</option>
-=======
+
                     <div class="dropdown-menu dropdown-menu-right" role="menu">
                         {{--<form class="form-horizontal" role="form">--}}
                             <div class="form-group">
                                 <label for="filter">Фильтр по категории</label>
                                 <select class="form-control" name="subCat" id="subCat" value="0">
                                     <option value="0" disabled selected hidden>Выберите категорию</option>
->>>>>>> a19ec2e3569a32850b671356e8c5f1686affdda3
+
                                     @isset($categories)
                                         @foreach($categories as $category)
                                             <optgroup label="{{ $category->title }}">

+ 4 - 4
resources/views/userprofile/templates.blade.php

@@ -95,20 +95,20 @@
         <div class="card">
             <h4 class="card-header text-right bg-dark text-white">{{ $item->caption }}
                 <div class="float-left small">
-                    <a class="btn btn-raised btn-danger" href="#" title="Ver perfil de Miguel92" data-toggle="tooltip" data-placement="top">
+                    <a class="btn btn-raised btn-danger" href="#" data-toggle="tooltip" data-placement="top">
                         <i class="fa fa-user" aria-hidden="true"></i>
                     </a>
-                    <a class="btn btn-raised btn-danger" href="#" title="Enviar mensaje">
+                    <a class="btn btn-raised btn-danger" href="#" title="Отправить">
                         <i class="fa fa-envelope" aria-hidden="true"></i>
                     </a>
-                    <a class="btn btn-raised btn-danger" href="#" title="Seguir usuario">
+                    <a class="btn btn-raised btn-danger" href="#" title="Детально">
                         <i class="fa fa-eye" aria-hidden="true"></i>
                     </a>
                 </div>
             </h4>
             <div class="card-body">
                 <div class="image float-right user-r">
-                    <img src="image/{{ $item->picture[0]->path }}" class="img-thumbnail" alt="avatar">
+                    <img src="image/{{ $item->picture[0]->path }}" class="img-thumbnail">
                 </div>
                 {{--<h4 class="card-title">{{ $item->caption }}</h4>--}}
                 <div class="description">

+ 32 - 56
routes/web.php

@@ -18,107 +18,83 @@ Route::any('/debug', "DebugController@debug")->name('debug');
 Route::post('/debug/ajax', "DebugController@userItemsAJAX");
 // --must be deleted -------------------------------------------------------------------------------
 
+
+
 //------- IMAGES ROUTES ----------------------------------------------------------------------------
 Route::get('/image/{path}', 'ItemPicturesController@show')->name('images')->where(['path' => '.*']);
-//------- END -> IMAGES ROUTES ---------------------------------------------------------------------
-
 //------- SEARCH ROUTES ----------------------------------------------------------------------------
 Route::post('/search', 'SphinxSearchController@search')->name('sphinx.search');
-//------- END -> IMAGES ROUTES ---------------------------------------------------------------------
+//------- MAIL ROUTES ------------------------------------------------------------------------------
+Route::post('/mail', "MailSettingController@sendForm")->name('mail.send');
+
+
 
 //------- ITEM ROUTEs ------------------------------------------------------------------------------
-Route::group(['prefix' => 'item', 'as' => 'item'], function () {
-    Route::get('/all', "ItemController@index")->name('.index');
-    Route::get('/{item}', "ItemController@show")->name('.show');
+Route::group(['prefix' => 'item'], function () {
+    Route::get('/{item}', "ItemController@show")->name('item.info');
 
     Route::middleware(['auth'])->group(function () {
-        Route::get('/new', "ItemController@create")->name('.create');
-        Route::post('/', "ItemController@store")->name('.store');
-        Route::delete('/{item}', "ItemController@destroy")->name('.delete');
-        Route::put('/{item}', "ItemController@update")->name('.update');
-        Route::post('/exchange/{item?}', 'ItemsExchangeOfferController@store')->name('.exchange.store');
-//        Route::delete('/{item}', "ItemController@destroy")->middleware('can:destroy,item')->name('.delete');
-//        Route::put('/{item}', "ItemController@update")->middleware('can:update,item')->name('.update');
+        Route::post('/', "ItemController@store")->name('item.store');
+        Route::put('/{item}', "ItemController@update")->name('item.update');
+        Route::delete('/{item}', "ItemController@destroy")->name('item.delete');
+        Route::post('/exchange/{item?}', 'ItemsExchangeOfferController@store')->name('item.exchange.store');
     });
 });
 //------- END -> ITEM ROUTEs -----------------------------------------------------------------------
 
-Route::get('/', function () {
-    return view('welcome');
-});
+
 
 //------- ADMIN ROUTEs -----------------------------------------------------------------------------
 Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function () {
     Route::get('/', "Admin\AdminController@index")->name("admin.index");
-//    Route::get('/items', "Admin\ItemsAdminController@index")->name("admin.items");
     Route::get('/items', "Admin\ItemsAdminController@index")->name("admin.items");
     Route::delete('/items/{id}', "Admin\ItemsAdminController@destroy")->name("admin.items.delete");
 //    Route::put('/items/{id}', "Admin\ItemsAdminController@update")->name("admin.items.update");
-    Route::post('/items/{id}', "Admin\ItemsAdminController@ajaxRequest")->name("admin.items.ajax");
+    Route::post('/items/{id}', "Admin\ItemsAdminController@ajaxItemsRequest")->name("admin.items.ajax");
+
 
     Route::get('/users', "Admin\UsersAdminController@index")->name("admin.users");
     Route::get('/categories', "Admin\AdminController@categories")->name("admin.categories");
 });
 //------- END -> ADMIN ROUTEs ----------------------------------------------------------------------
 
-Route::group(['prefix' => 'user', 'middleware' => ['auth']], function () {
-    Route::get('/item', 'UserItemController@index')->name("user.item");
-//    Route::get('/{user}', 'UserController@show')->name("user.info");  // возможно стоит вынести за пределы Auth
-//    Route::get('/offers-list', 'UserOffersController@index')->name("user.offers");
-    Route::post('/items', 'ItemsInfoController@userItemsAJAX')->name('user.items.ajax');
-//    Route::get('/item', "UserController@create")->name("item.create");
-//    Route::get('/wishlist', 'UserController@wishList');
-});
-
-Route::post('/mail', "MailSettingController@sendForm")->name('mail.send');
+Route::any('/ausers', "Admin\UsersAdminController@ajaxUsersRequest")->name("admin.users.ajax");
+//Route::any('/ausers/{id?}', function($id =null){
+//    return dump('123123');
+//})->name("admin.users.ajax");
 
 //--------- USERS ROUTES ---------------------------------------------------------------------------
-Route::get('users/offers-list', 'UserOffersController@index')->name('user.offers')->middleware(['auth']);
-Route::get('users/offers-archive', 'UserOffersController@archive')->name('user.offers.archive')->middleware(['auth']);
-//Route::get('users/offers-to-user', 'UserOffersController@index')->name('user.offers.to')->middleware(['auth']);
-//Route::get('users/offers-from-user', 'UserOffersController@index')->name('user.offers.from')->middleware(['auth']);
-
-//Route::get('/users/item/index', 'UsersItemController@index');
-
-Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () {
+Route::group(['prefix' => 'user', 'middleware' => ['auth']], function () {
     Route::get('/item/index', 'UsersItemController@index');
     Route::get('/item', 'UsersItemController@create')->name('user.item.create');
-    Route::post('/item/', 'UsersItemController@store')->name('item.store');
+    Route::post('/item/', 'UsersItemController@store')->name('user.item.store');
     Route::any('/form/ajax', "RegisterItemController@jsonSubcategoryRequest")->name('form.ajax');
 
+    Route::post('/{user}', "UsersAdminController@ajaxUserEditRequest")->name('user.edit');
+
     Route::get('/home', "ProfileController@index")->name('home');
     Route::any('/items', "ProfileController@showAllItems")->name('user.items');
 
     Route::get('/profile', "RegisterProfileController@create")->name('user.profile');
     Route::post('/profile', "RegisterProfileController@store")->name('user.profile.store');
 
+    Route::post('/items/ajax', 'ItemsInfoController@userItemsAJAX')->name('user.items.ajax');
+    Route::post('/item/{item}', 'ItemsInfoController@userItemModifyAJAX')->name('user.item.modify.ajax');
 });
+//------- END -> USERS ROUTEs ----------------------------------------------------------------------
+
+
 
 //------- OUT OF AUTH ROUTEs -----------------------------------------------------------------------
 Route::get('/dashboard', 'DashboardController@index')->name('dashboard');
 Route::get('/category/{id}', 'DashboardController@category')->name('dashboard.category');
 Route::post('/dashboard/query', 'DashboardController@fromCategories');
-Route::get('/item/{item}', 'ItemsInfoController@show')->name('item.info');     /// это должен быть ItemController@show
+Route::get('users/offers-list', 'UserOffersController@index')->name('user.offers')->middleware(['auth']);
+Route::get('users/offers-archive', 'UserOffersController@archive')->name('user.offers.archive')->middleware(['auth']);
 //------- END -> UT OF AUTH ROUTEs -----------------------------------------------------------------
 
-/**  Auth::routes();
- * // Authentication Routes...
- * Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
- * Route::post('login', 'Auth\LoginController@login');
- * Route::post('logout', 'Auth\LoginController@logout');
- *
- * // Registration Routes...
- * Route::get('register', 'Auth\RegisterController@showRegistrationForm');
- * Route::post('register', 'Auth\RegisterController@register');
- *
- * // Password Reset Routes...
- * Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
- * Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
- * Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
- * Route::post('password/reset', 'Auth\ResetPasswordController@reset');
- */
 
-Auth::routes();
 
-//Route::get('/', 'HomeController@welcome')->name('welcome');
+Auth::routes();
+Route::get('/', 'HomeController@welcome')->name('welcome');
 Route::get('/home', 'HomeController@index');

+ 1 - 0
storage/app/images/items/.gitignore

@@ -0,0 +1 @@
+/*

BIN
storage/app/images/items/item_1/22zdHJbBxGDQW1LUovIR9cRh55JOZXxnGC0dfiZ2.jpeg


BIN
storage/app/images/items/item_1/874zEXsQiubYhpNPAg89FIkbFWD3hZW2ZhenvoJB.jpeg


BIN
storage/app/images/items/item_1/SzqgP2HrnGoXcVngqcRoiUd1GZED6nUlCjPy2kfi.jpeg


BIN
storage/app/images/items/item_11/3MwU4oNipT4Ti4PJ1aFFdNUxP8W4kXzKg2p54jzF.jpeg


BIN
storage/app/images/items/item_11/QPQ9iLG7b3zyGcMvWZP1qQOolmkLtEvwbaHOPpD4.jpeg


BIN
storage/app/images/items/item_11/WD4DDluFBuTTJohVMQTaEDXBWIDFrCl2B6OnUjBn.jpeg


BIN
storage/app/images/items/item_11/tss3EjVnXAeVKNvVEfYIdjOd6XNfokjhpbC7o1rT.jpeg


BIN
storage/app/images/items/item_11/uzkp6SJFXABBSlp3mHNWMjzORP3daPb5BZu8zOjf.jpeg


BIN
storage/app/images/items/item_12/zI9ANaQlYViqit9HkWJi1MvPiG6xq29LMPeOKyuM.jpeg


BIN
storage/app/images/items/item_13/2Ud5eKmIEapnUkXBElZWWRgMulNnn56sT4xQmPGa.jpeg


BIN
storage/app/images/items/item_13/OYEY4Vt84eegjRmth1U7GdxvKAr6pY81yX6KLu58.jpeg


BIN
storage/app/images/items/item_14/AYMp7PCqJPSOmasmuXTFqIsHfVOi3xwXgXzocP9M.jpeg


BIN
storage/app/images/items/item_14/Z46PmAwMZbTv06P2FeeLCrkszz3QGIKxBs22efB3.jpeg


BIN
storage/app/images/items/item_15/8fwO3z5l8Au5mXWAMGabnxUVMlkoldt85VVrzMYd.jpeg


BIN
storage/app/images/items/item_15/Hx0EfRa9mQxMw5Zqc712B3JrAOQXTM734jcGyr11.jpeg


BIN
storage/app/images/items/item_16/4yUl3CjNSzgzspn1WBnr3X8ASGcTz2fGUgydN8p9.jpeg


BIN
storage/app/images/items/item_16/WcXMPwNyYDsYkPHBScUEozojaXmP598I1soXh7Xa.jpeg


BIN
storage/app/images/items/item_2/5o4h0RnM1T3HYRmRAoUjjrtOIk00mjSTgNWLBXcB.jpeg


BIN
storage/app/images/items/item_2/7jXFZeTeRmye310p0CGKOgCzNOOhjlNihCk0YAYo.jpeg


BIN
storage/app/images/items/item_2/ldsa7DohFifkx2opL97egxwFtDBpVQ9LUhHIVBPC.jpeg


BIN
storage/app/images/items/item_2/rcTXGcQZwfCnXSYwZYMgqdTMmm2VZc1YmeEyBDkn.jpeg


BIN
storage/app/images/items/item_3/Dzmtk2HvXisKvxVMbQptcCh4Nuavo0CDjbX2c3QE.jpeg


BIN
storage/app/images/items/item_3/F8Cd2XcCZAvOxYbt5wmwTKWVM5PeBeHkJc8gaquE.jpeg


BIN
storage/app/images/items/item_3/G9G218Rq7hhrP13zCtWoxdduT0Tltwgl4iujtw70.jpeg


BIN
storage/app/images/items/item_4/EasVr7fjaGlZEg27QB9GW7XTKRcZprEVuJBq6bVF.jpeg


BIN
storage/app/images/items/item_4/Kw0VpASepkrbp8b1d64wysmMtQgHAlABNzTeTIE2.jpeg


BIN
storage/app/images/items/item_4/LYei3CegaO90jeHoNPwqvvIIY808dQSRY6EWSbzq.jpeg


BIN
storage/app/images/items/item_5/0gtPhY7fc6i5iFFoFr92YtFbp9RwK5kMPh3eJBRV.jpeg


BIN
storage/app/images/items/item_5/29ks3DPuCbKKpxnRVk6nXr9PO4a80pjQhwDkgDBm.jpeg


BIN
storage/app/images/items/item_5/44KDu4uQKSJ0FFdYYl3xP6D3ijB6vrTlv46Anefn.jpeg


BIN
storage/app/images/items/item_5/8JxRYIYQCwxEev2lcprwSP3VxxvbGJRcmtvdvdxA.jpeg


BIN
storage/app/images/items/item_5/fMmIT28ugwoycemGUor09IgfaQ2JDhJjtb0MeXKb.jpeg


BIN
storage/app/images/items/item_5/oHMHbhtxPff71KpB3GUE5VOSFQ2VlSn0sD4uhYbS.jpeg


BIN
storage/app/images/items/item_6/7Pm3icuqHJGczU3OtAo737FE4oXfKcDFmYj7Yrnk.jpeg


BIN
storage/app/images/items/item_6/9syEYDd4L651FyrsSsmMWsnmrnE3FoQ3NfZJ2hRa.jpeg


BIN
storage/app/images/items/item_6/XtVC6jAXHlG8kB1i4sGYLkJv37H4PYgNoEAmCQEA.jpeg


BIN
storage/app/images/items/item_6/gNAnsnmyYdY8EFipxjUyrFVBOGYu59hgPqbEsFJp.jpeg


BIN
storage/app/images/items/item_7/7mq0WDB8BvynO5vJWSjMbtH71RJyAAHt3Ec1A4YZ.jpeg


BIN
storage/app/images/items/item_7/8tLel3ybelDujP7tGOE4zHDoxairMYrQjXxiByGO.jpeg


BIN
storage/app/images/items/item_7/9ddwPCIp0F24EE7AwAVJEsmWug2Y5COGTODzvIya.jpeg


BIN
storage/app/images/items/item_7/BHwIfe5zHwf47EVpE15Nz6nHEG8q2pgDT6J6cT8K.jpeg


BIN
storage/app/images/items/item_7/K1dLwLEZOgM9SgNFQacHUdYFa0Mf4nptpQkEUAd4.jpeg


BIN
storage/app/images/items/item_7/TFWK3ShSkXUqehGzhsMC7e5dPMEb09jk27acGxoD.jpeg


BIN
storage/app/images/items/item_7/k2cctKiAW77B3Hfk9FC2eVwwZDQWZd0036IKpGZk.jpeg


BIN
storage/app/images/items/item_7/uVdv9lpmSrHCS6VpmydzJzT7UL9R9EAsBLELgV2D.jpeg


BIN
storage/app/images/items/item_7/xhnHmVSNMHzzq0ibYluJRXnpFrzf2uqK99Ej1sI6.jpeg


BIN
storage/app/images/items/item_8/lN5nQKCc9tpJBw5LTMF0LluuEvbZNTJQGGInobpa.jpeg


BIN
storage/app/images/items/item_9/1KTvJOBrBw8Le0f1jjlZcmLRqBFqLCos7ZjcXB5D.jpeg


BIN
storage/app/images/items/item_9/j43mj3Zi3cBWZV9P4PMhUKwH25AbCEPwxnMUHVm6.jpeg