public function doit(Request $request)
 {
     $files = $request->file('documents');
     foreach ($files as $file) {
         $surl = $this->globalSiteSettings['site_url'];
         // Домен сайта из конфигов
         $filename = str_random(10) . '.' . $file->getClientOriginalExtension();
         $genLink = $surl . '/uploads/docs/' . $filename;
         $file->move(public_path() . '/uploads/docs/', $filename);
         $upload = new Uploads();
         $upload->type = 'doc';
         $upload->link = $genLink;
         $upload->save();
     }
     return $files;
 }
 /**
  * AJAX загрузка изображения
  */
 public function postImagesUpload(Request $request)
 {
     $file = $request->file('file');
     $filename = str_random(10);
     // Генерация случайного имени
     $extension = $file->getClientOriginalExtension();
     // Берем расширение файла
     $surl = $this->globalSiteSettings['site_url'];
     $imgurl = $surl . '/uploads/a/' . $filename . '.' . $extension;
     // Ссылка на полный файл
     $imgurl_min = $surl . '/uploads/a/' . $filename . '-sm.' . $extension;
     // Ссылка на миниатюру
     Image::make($request->file('file'))->save(public_path() . '/uploads/a/' . $filename . '.' . $extension);
     // Грузим полный файл
     Image::make($request->file('file'))->fit(230, 165)->save(public_path() . '/uploads/a/' . $filename . '-sm.' . $extension);
     // Грузим миниатюру, предварительно обрезав
     $add = new Uploads();
     // Создаем экземпляр загрузки
     $add->name = $filename . '.' . $extension;
     // Сохраняем имя файла
     $add->image = $imgurl;
     // Сохраняем ссылку на полный файл
     $add->image_small = $imgurl_min;
     // Сохраняем ссылку на миниатюру
     $add->save();
     // Сохраняем экземпляр
     // Возвращаем ответ в формате json со статусом, названием файла на сервере, прямой ссылкой на полную копию и миниатюру, ID экземпляра
     return response()->json(['status' => 'success', 'responseText' => 'yas', 'url' => $filename . '.' . $extension, 'img' => $imgurl, 'imgmin' => $imgurl_min, 'id' => $add->id], 200);
 }
 public function postUpdateLot(Request $request, $id)
 {
     $category = Cat::find($request->lot_category);
     // Категория в которую добавляем лот
     // Обязательные поля для заполнения: название, категория, область,
     $rights = ['lot_title' => 'required', 'lot_category' => 'required', 'region' => 'required', 'city' => 'required'];
     // Если категория имеет подкатегории - добавляем указание подкатегории обязательным для заполнения полем
     if ($category->children()->count() > 0) {
         $rights = array_add($rights, 'lot_type', 'required');
         // Тип лота
     }
     // Если добавлены прикрепления - добавляем валидацию по расширению файла
     if ($request->hasFile('documents')) {
         //$rights = array_add($rights, 'documents', 'mimes:jpeg,bmp,png,pdf,doc,docx');
     }
     // Если объект свободной продажи
     if ($request->free_sale) {
         // Если выбрана договорная цена - поле стоимости необязательно для заполнения
         if (!$request->negotiable_price) {
             $rights = array_add($rights, 'starting_price', 'required');
             // Стоимость
         }
     } else {
         $rights = array_add($rights, 'starting_price', 'required');
         // Стоимость
         $rights = array_add($rights, 'guarantee_fee', 'required');
         // Гарантийный взнос
         $rights = array_add($rights, 'bid_price', 'required');
         // Цена шага
         $rights = array_add($rights, 'data_start', 'required');
         // Дана начала аукциона
         $rights = array_add($rights, 'date_end', 'required');
         // Дата завершения
     }
     // Запрашиваем список обязательных полей для текущей категории и типа лота
     $rights = $this->getRightsForCategory($request->lot_category, $request->lot_type, $rights);
     // Собственный текст для ошибок
     $messages = array('lot_title.required' => 'Поле «Назва лоту» обязательно для заполнения.', 'lot_category.required' => 'Вы не выбрали категорию лота.', 'lot_image.required' => 'Нужно загрузить хотя бы основную фотографию лота.', 'region.required' => 'Вы не выбрали область.', 'city.required' => 'Поле «Місто» обязательно для заполнения.', 'starting_price.required' => 'Поле «Стартова ціна» обязательно для заполнения.', 'guarantee_fee.required' => 'Поле «Гарантійний внесок» обязательно для заполнения.', 'bid_price.required' => 'Поле «Крок аукціону» обязательно для заполнения.', 'data_start.required' => 'Поле «Дата початку аукціону» обязательно для заполнения.', 'date_end.required' => 'Поле «Дата завершення аукціону» обязательно для заполнения.', 'property_material.required' => 'Вы не выбрали материал здания.', 'property_floors.required' => 'Поле «Кiлькiсть поверхiв» обязательно для заполнения.', 'property_floor.required' => "Поле «Поверх» обов'язково для заповнення.", 'property_areas.required' => 'Поле «Кiмнат/примiщень» обязательно для заполнения.', 'property_totalarea.required' => 'Поле «Загальна площа» обязательно для заполнения.', 'property_livingarea.required' => 'Поле «Житлова площа» обязательно для заполнения.', 'auto_mark.required' => 'Вы не выбрали марку автомобиля.', 'auto_model.required' => 'Поле «Модель» обязательно для заполнения.', 'auto_year.required' => 'Поле «Pік випуску» обязательно для заполнения.', 'auto_transmission.required' => 'Поле «Коробка передач» обязательно для заполнения.', 'auto_drive.required' => 'Поле «Тип привода» обязательно для заполнения.', 'auto_fuel.required' => 'Поле «Тип пального» обязательно для заполнения.', 'auto_doors.required' => 'Поле «Кількість дверей» обязательно для заполнения.');
     // Если добавлены прикрепления - добавляем валидацию по расширению файла
     if ($request->hasFile('documents')) {
         //$rights = array_add($rights, 'documents', 'mimes:jpeg,bmp,png,pdf,doc,docx');
         $files = $request->file('documents');
         $i = 0;
         foreach ($files as $file) {
             //$rights = array_add($rights, 'documents'. $i, 'max:8000');
             $messages['documents.' . $i . '.max'] = 'Розмір файлу «' . $file->getClientOriginalName() . '» перевищує достустимый (8 мб).';
             $rights['documents.' . $i] = 'max:8000';
             $i++;
         }
     }
     // Выполняем валидацию
     $validator = Validator::make($request->all(), $rights, $messages);
     // При обнаружении ошибки - возвращаем пользователя на предыдущую страницу и выводим ошибки
     if ($validator->fails()) {
         return redirect()->back()->withInput()->withErrors($validator->errors());
     }
     /*
      * Обновление информации о лоте
      */
     $create = Auction::where('id', '=', $id)->with('bidders')->first();
     $create->title = $request->lot_title;
     $create->category = $request->lot_category;
     $create->lot_type = $request->lot_type;
     $this->getAddFieldsListCategory($request->lot_category, $create, $request);
     $create->more_information = $request->more_information;
     // Додаткові відомості
     $create->more_about = $request->more_about;
     // Відомості про майно, його склад, характеристики, опис
     $create->region = $request->region;
     // Область
     $create->city = $request->city;
     // Місцезнаходження
     $create->property_type = $request->property_type;
     // Тип майна
     $create->currency = $request->currency;
     // Валюта
     if ($request->lot_image) {
         $create->img = $request->lot_image;
         $create->img_min = $request->lot_image_min;
     } else {
         $create->img = "http://uace.com.ua/static/images/no-picture-max.jpg";
         $create->img_min = "http://uace.com.ua/static/images/no-picture-min.jpg";
     }
     // Если есть основная фотография
     if ($request->lot_image) {
         $create->img = $request->lot_image;
         $create->img_min = $request->lot_image_min;
     } else {
         // Если нет, ставим стандартные
         $create->img = "http://uace.com.ua/static/images/no-picture-max.jpg";
         $create->img_min = "http://uace.com.ua/static/images/no-picture-min.jpg";
     }
     // Если установлен флажок на "Свободная продажа"
     if ($request->free_sale) {
         $create->free_sale = 1;
         // Помечаем как свободно продаваемый объект
         // Если установлен флажок на "Ціна договірна"
         if ($request->negotiable_price) {
             $create->negotiable_price = 1;
             $create->starting_price = null;
         } else {
             // В противном случае записываем введенную цену
             $create->starting_price = str_replace(" ", "", $request->starting_price);
             $create->negotiable_price = null;
         }
         $create->data_start = null;
         // Записываем дату начала
         $create->date_end = null;
         // Записываем дату завершения
         $create->guarantee_fee = null;
         // Гарантийный взнос
         $create->bid_price = null;
         // Стоимость шага
     } else {
         $create->free_sale = null;
     }
     // Если добавлен предмет на аукцион
     if (!$request->free_sale) {
         $create->free_sale = null;
         // Помечаем, что это не свободная продажа
         $create->data_start = Carbon::parse($request->data_start)->format('Y-m-d H:i');
         // Записываем дату начала
         $create->date_end = Carbon::parse($request->date_end)->format('Y-m-d H:i');
         // Записываем дату завершения
         $create->guarantee_fee = str_replace(" ", "", $request->guarantee_fee);
         // Гарантийный взнос
         $create->starting_price = str_replace(" ", "", $request->starting_price);
         // Стартовую цену
         $create->bid_price = str_replace(" ", "", $request->bid_price);
         // Стоимость шага
     }
     // Если установлен флажок на "Можливий торг"
     if ($request->possible_bargain) {
         $create->possible_bargain = 1;
     } else {
         $create->possible_bargain = null;
     }
     // Если выбран статус Архив
     if ($request->in_archive) {
         $create->in_archive = 1;
         $create->save();
     } else {
         $create->in_archive = 0;
         $create->save();
     }
     if ($create->status === $request->status) {
         $create->status = $request->status;
         $create->save();
     } elseif (!$create->free_sale && $request->status == 2) {
         $this->sendNotificationToUser($create->user, 3, 'default', $create->id, $create->title);
         // Отправка оповещения владельцу
         $create->status = 2;
         $create->save();
     } elseif (!$create->free_sale && $request->status == 3) {
         $this->sendNotificationAllBidders($create->id, $create->title, $create->bidders);
         // Отправка оповещения всем допущенным участникам
         $create->status = 3;
         $create->save();
     } elseif ($create->free_sale && $request->status == 3 || $create->free_sale && $request->status == 5 || $create->free_sale && $request->status == 7) {
         $this->sendNotificationToUser($create->user, $request->status, 'free', $create->id, $create->title);
         if ($request->status == 7) {
             $create->in_archive = 1;
             // Помещаем аукцион в Архив
         } elseif ($request->status == 3) {
             $create->in_archive = 0;
         }
         $create->status = $request->status;
         $create->save();
     } elseif (!$create->free_sale && $request->status == 7) {
         $user = App\User::find($create->user);
         // Информация о создателе аукциона
         $win = App\Bets::where('auction_id', '=', $create->id)->orderBy('created_at', 'desc')->first();
         // Определение победителя
         $create->in_archive = 1;
         // Помещаем аукцион в Архив
         if ($win) {
             $win_user = App\User::find($win->user_id);
             // Информация о победителе
             $win_status = App\Bidders::where('auction_id', '=', $create->id)->where('user_id', '=', $win->user_id)->first();
             $win_status->status = 2;
             $win_status->save();
             $create->final_price = $win->bet;
             $create->status = 7;
             // Смена статуса на "Торги відбулися"
             $create->save();
             // Отправка письма создателю аукциона
             Mail::queue('emails.auction-end', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'middle_name' => $user->middle_name, 'auction_id' => $create->id, 'auction_cyr' => $create->currency, 'auction_title' => $create->title, 'auction_status' => 7, 'win_first_name' => $win_user->first_name, 'win_last_name' => $win_user->last_name, 'win_middle_name' => $win_user->middle_name, 'win_email' => $win_user->email, 'win_phone' => $win_user->phone, 'win_cost' => $win->bet], function ($message) use($user) {
                 $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Аукціон завершено');
             });
             // Отправка письма победителю аукциона
             Mail::queue('emails.auction-end-winner', ['first_name' => $win_user->first_name, 'last_name' => $win_user->last_name, 'auction_id' => $create->id, 'auction_title' => $create->title, 'auction_status' => 7, 'win_cost' => $win->bet], function ($message) use($win_user) {
                 $message->to($win_user->email, $win_user->first_name . ' ' . $win_user->last_name)->subject('Аукціон завершено');
             });
             // Отправка письма администратору
             $adminEmail = $this->globalSiteSettings['admin_email'];
             Mail::queue('emails.auction-end-admin', ['auction_id' => $create->id, 'auction_title' => $create->title, 'auction_status' => 7, 'win_first_name' => $win_user->first_name, 'win_last_name' => $win_user->last_name, 'win_middle_name' => $win_user->middle_name, 'win_email' => $win_user->email, 'win_phone' => $win_user->phone, 'win_cost' => $win->bet], function ($message) use($adminEmail) {
                 $message->to($adminEmail)->subject('Аукціон завершено');
             });
         } else {
             $create->status = 8;
             // Смена статуса на "Торги не відбулися"
             $create->save();
             // Отправка письма создателю аукциона
             Mail::queue('emails.auction-end', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'middle_name' => $user->middle_name, 'auction_id' => $create->id, 'auction_title' => $create->title, 'auction_status' => 8], function ($message) use($user) {
                 $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Аукціон завершено');
             });
             // Отправка письма администратору
             $adminEmail = $this->globalSiteSettings['admin_email'];
             Mail::queue('emails.auction-end-admin', ['auction_id' => $create->id, 'auction_title' => $create->title, 'auction_status' => 8], function ($message) use($adminEmail) {
                 $message->to($adminEmail)->subject('Аукціон завершено');
             });
         }
     } else {
         $create->status = $request->status;
         $create->save();
     }
     if ($request->more_images) {
         $attaches = App\Uploads::find($request->more_images);
         foreach ($attaches as $attach) {
             $attach->auction_id = $create->id;
             $attach->type = 'image';
             $attach->save();
         }
     }
     if ($request->hasFile('documents')) {
         $files = $request->file('documents');
         foreach ($files as $file) {
             $surl = $this->globalSiteSettings['site_url'];
             $filename = preg_replace('/.[^.]*$/', '', $file->getClientOriginalName());
             $filename = $filename . '-' . mt_rand(10, 100) . '.' . $file->getClientOriginalExtension();
             $genLink = $surl . '/uploads/docs/' . $filename;
             // Генерируем ссылку
             $file->move(public_path() . '/uploads/docs/', $filename);
             // Перемещаем файл
             $upload = new App\Uploads();
             // Создаем экземпляр модели
             $upload->type = 'doc';
             // Задаем тип экземпляра - документ
             $upload->link = $genLink;
             // Записываем сгенерированную ранее ссылку
             $upload->name = preg_replace('/.[^.]*$/', '', $file->getClientOriginalName());
             // Записываем имя
             $upload->auction_id = $create->id;
             // Записываем сгенерированную ранее ссылку
             $upload->save();
             // Сохраняем
         }
     }
     // Сбрасываем закешированные данные виджета "Останні надходження"
     if (Cache::has('last_lots')) {
         Cache::forget('last_lots');
     }
     return redirect('/dashboard/auctions');
 }