Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers\AdminExpert;
- use App\Expert;
- use App\Http\Requests;
- use App\Http\Controllers\Controller;
- use Illuminate\Http\Request;
- use App\ReviewPhoto;
- use App\AnswerReviewPhoto;
- use App\Helpers\ImageResize;
- use App\DirectCRM\Api;
- use Auth;
- use Carbon\Carbon;
- use App\Helpers\AuthoriseHelper;
- class IndexController extends Controller
- {
- /**
- * Количество элементов в выводе пагинации
- */
- const PAGINATE_ITEMS = 10;
- /**
- * IndexController constructor.
- */
- public function __construct()
- {
- if (!Auth::check()) {
- die('Требуется авторизация на основном сайте.');
- }
- session_start();
- }
- /**
- * @param int $status
- * @return mixed
- */
- private function getReviewsByStatus($status = 0)
- {
- return ReviewPhoto::where('status', '=', $status)->paginate(self::PAGINATE_ITEMS);
- }
- /**
- * @param $array
- * @return mixed
- */
- private function getReviewsByIds($array)
- {
- return ReviewPhoto::whereIn('id', $array)->paginate(self::PAGINATE_ITEMS);
- }
- /**
- * @return array
- */
- private function getQuestionsIds()
- {
- $questions = array();
- $checkAnswers = AnswerReviewPhoto::where('status', '=', 0)->where('type', '=', 1)->get();
- $reviewIds = array();
- foreach ($checkAnswers as $itemAnswer) {
- if (!in_array($itemAnswer->toArray()['review_id'], $reviewIds)) {
- $reviewIds[] = $itemAnswer->toArray()['review_id'];
- }
- }
- foreach ($reviewIds as $itemId) {
- $result = AnswerReviewPhoto::where('review_id', '=', $itemId)->orderBy('id', 'desc')->first();
- if (count($result)) {
- $itemArray = $result->toArray();
- if ($itemArray['status'] == 0 && $itemArray['type'] == 1) {
- $questions[] = $itemArray['review_id'];
- }
- }
- }
- return $questions;
- }
- /**
- * @return mixed
- * Возвращает загрузки за текущим днём
- */
- private function getTodayUploads()
- {
- return ReviewPhoto::where('created_at', '>=', Carbon::today()->toDateString())->paginate(self::PAGINATE_ITEMS);
- }
- /**
- * @param Request $request
- * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View
- * Вывод списка работ на ревью.
- */
- public function index(Request $request)
- {
- if (!isset($_SESSION['is_admin_expert'])) {
- return redirect(url('admin/expert/login'));
- }
- $dateSort = $request->get('date');
- if ($dateSort != "asc"):
- $dateSort = "desc";
- endif;
- $expertSort = $request->get('expert');
- if ($dateSort == 'asc' || $dateSort == 'desc' || $expertSort) {
- if (is_numeric($expertSort)) {
- $awaitingReviews = ReviewPhoto::orderBy('created_at', $dateSort)
- ->where('expert_id', '=', $expertSort)
- ->paginate(self::PAGINATE_ITEMS);
- } else {
- $awaitingReviews = ReviewPhoto::orderBy('created_at', $dateSort)->paginate(self::PAGINATE_ITEMS);
- }
- } else {
- $awaitingReviews = ReviewPhoto::where('id', '>', 0)->paginate(self::PAGINATE_ITEMS);
- }
- $experts = Expert::all();
- /**
- * Количество неотвеченных
- */
- $unAnswered = ReviewPhoto::where('status', '=', 0)->count();
- /**
- * Массив уточняющих вопросов
- */
- $questions = $this->getQuestionsIds();
- if ($request->get('show')) {
- switch ($request->get('show')) {
- /**
- * Вывод списка уточняющих вопросов
- */
- case "questions":
- $awaitingReviews = $this->getReviewsByIds($questions);
- break;
- /**
- * Вывод списка неотвеченных
- */
- case "unanswered":
- $awaitingReviews = $this->getReviewsByStatus(0);
- break;
- /**
- * Вывод списка сегодняшних загрузок
- */
- case "todayUploads":
- $awaitingReviews = $this->getTodayUploads();
- break;
- }
- }
- /**
- * Фильтрация по статусу
- */
- if ($request->get('status')) {
- switch ($request->get('status')) {
- /**
- * Вывод списка уточняющих вопросов
- */
- case "1":
- $awaitingReviews = $this->getReviewsByIds($questions);
- break;
- /**
- * Вывод списка отвеченных
- */
- case "0":
- $awaitingReviews = $this->getReviewsByStatus(1);
- break;
- /**
- * Вывод списка неотвеченных
- */
- case "-1":
- $awaitingReviews = $this->getReviewsByStatus(0);
- break;
- }
- }
- return view('expert/review_list', [
- 'awaitingReviews' => $awaitingReviews,
- 'experts' => $experts,
- 'request' => $request,
- 'unAnswered' => $unAnswered,
- 'questions' => count($questions),
- 'todayUploads' => count($this->getTodayUploads()),
- ]);
- }
- /**
- * @param Request $request
- * Редактирование последнего комментария эксперта
- */
- public function edit(Request $request, $id)
- {
- if (is_numeric($id)) {
- /**
- * Сохранение отредактированного комментария
- */
- if (Auth::Check()) {
- if ($request->isMethod('POST')) {
- $review = AnswerReviewPhoto::find($request->comment_id);
- $review->comment = str_replace("\r\n", "<br/>", trim($request->text));
- $review->save();
- }
- }
- /**
- * Вывод
- */
- // Данные по пользовательской фотографии
- $awaitingReview = ReviewPhoto::where('id', '=', $id)->get();
- // Данные по комментариям к ревью
- $commentToReview = AnswerReviewPhoto::where('review_id', '=', $id)->get();
- // Список экспертов
- $experts = Expert::all();
- return view('expert/review_edit_last_expert_comment', [
- 'experts' => $experts,
- 'awaitingReview' => $awaitingReview,
- 'commentToReview' => $commentToReview,
- ]);
- }
- return redirect(url('admin/expert'));
- }
- public function login(Request $request)
- {
- $error = false;
- /**
- * Проверяем, авторизован ли пользователь на основном сайте
- */
- /*if (Auth::check()) {
- $userId = Auth::user()->data->id;
- $expertdata = Expert::where('crmid', '=', $userId)->first();
- if ($expertdata != null) {
- $expertdata = $expertdata->toArray();
- if ($expertdata['crmid'] == $userId) {
- \Session::set('is_admin_expert', true);
- return redirect(url('admin/expert'));
- }
- }
- }*/
- if ($request->isMethod('POST')) {
- $this->validate($request, ['login' => 'required', 'password' => 'required']);
- $response = AuthoriseHelper::expertLogin($request->get('login'), $request->get('password'));
- if ($response) {
- $_SESSION['is_admin_expert'] = true;
- return redirect(url('admin/expert'));
- } else {
- $error = 'Данные неверны';
- }
- }
- return view('admin.auth.login', ['error' => $error, 'route' => 'admin.expert.login']);
- }
- public function logout()
- {
- \Session::forget('is_admin_expert');
- return redirect(url('admin/expert'));
- }
- /**
- * @param $id
- * Вывод страницы операций с фотографией на ревью
- */
- public function review($id)
- {
- if (is_numeric($id)) {
- // Данные по пользовательской фотографии
- $awaitingReview = ReviewPhoto::where('id', '=', $id)->get();
- // Данные по комментариям к ревью
- $commentToReview = AnswerReviewPhoto::where('review_id', '=', $id)->get();
- // Список экспертов
- $experts = Expert::all();
- /**
- * Предыдущие фотографии пользователя
- */
- $userPhotos = array();
- if (count($awaitingReview)) {
- $awaitingReviewArray = $awaitingReview->toArray();
- $userId = array_shift($awaitingReviewArray)['user_id'];
- $userPhotos = ReviewPhoto::where('user_id', '=', $userId)->paginate(self::PAGINATE_ITEMS);
- }
- return view('expert/review_single', [
- 'experts' => $experts,
- 'awaitingReview' => $awaitingReview,
- 'commentToReview' => $commentToReview,
- 'userPhotos' => $userPhotos,
- ]);
- }
- return redirect(url('admin/expert'));
- }
- /**
- * Делаем помеченным как отвечен уточняющий вопрос.
- */
- public function markread(Request $request, $id)
- {
- if (is_numeric($id)) {
- $answer = AnswerReviewPhoto::find($id);
- $answer->status = 1;
- $answer->save();
- }
- return redirect(url('admin/expert'));
- }
- /**
- * Сохранение ревью эксперта в БД
- */
- public function saveReview(Request $request)
- {
- if (Auth::Check()) {
- if ($request->isMethod('POST')) {
- if (is_numeric($request->get('id'))) {
- $review = ReviewPhoto::find($request->get('id'));
- $review->status = 1;
- $review->save();
- $answer = new AnswerReviewPhoto;
- $answer->review_id = $request->id;
- $answer->user_id = $request->user_id;
- $request->text = str_replace("\r\n", "<br/>", trim($request->text));
- $answer->comment = $request->text;
- $answer->expert_id = '0';
- if ($request->file('answer')) {
- $temp_name = time();
- $imageName = $temp_name . '.' . $request->file('answer')->getClientOriginalExtension();
- $request->file('answer')->move(
- base_path() . '/public/upload/', $imageName
- );
- // Права на бою
- chmod(base_path() . '/public/upload/' . $imageName, 0755);
- $resize_file_path = ImageResize::resize(base_path() . '/public/upload/' . $imageName, 380, 380, false, false);
- $fullpath = '/upload/' . $imageName;
- $answer->file = $fullpath;
- }
- $answer->save();
- /**
- * Отправка письма
- * Берём последнюю загруженную фотку
- */
- $lastPhotoObj = ReviewPhoto::where('id', '=', $request->get('id'))->first();
- if ($lastPhotoObj) {
- $lastPhotoArray = $lastPhotoObj->toArray();
- }
- $masterphoto = url() . "/{$lastPhotoArray['picture']}";
- /**
- * Отправка первого письма с ответом эксперта пользователю.
- */
- $answersCount = AnswerReviewPhoto::where([
- 'review_id' => $request->id,
- 'is_first_comment' => 0,
- ])->get()->count();
- if ($answersCount == 1) {
- app('directCRMApi')->sendExpertAnswer($review['email'],
- $request->user_id, strip_tags($request->text), null,
- $masterphoto, url() . '/profile/reviewphoto#popup-review_' . $request->id);
- } else {
- app('directCRMApi')->sendExpert2Answer($review['email'],
- $request->user_id, strip_tags($request->text), null,
- $masterphoto, url() . '/profile/reviewphoto#popup-review_' . $request->id);
- }
- }
- }
- }
- return redirect(url('admin/expert'));
- }
- /**
- * Просмотр вопросов эксперту
- */
- public function questionsList()
- {
- $awaitingQuestions = AnswerReviewPhoto::where('status', '=', 2)->get();
- return view('expert/questions_list', [
- 'awaitingQuestions' => $awaitingQuestions,
- ]);
- }
- }
- 0Жучки
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement