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'); }