Advertisement
kesenai

Untitled

Oct 25th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.08 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers\AdminExpert;
  4.  
  5. use App\Expert;
  6. use App\Http\Requests;
  7. use App\Http\Controllers\Controller;
  8. use Illuminate\Http\Request;
  9. use App\ReviewPhoto;
  10. use App\AnswerReviewPhoto;
  11. use App\Helpers\ImageResize;
  12. use App\DirectCRM\Api;
  13. use Auth;
  14. use Carbon\Carbon;
  15. use App\Helpers\AuthoriseHelper;
  16.  
  17. class IndexController extends Controller
  18. {
  19. /**
  20. * Количество элементов в выводе пагинации
  21. */
  22. const PAGINATE_ITEMS = 10;
  23.  
  24. /**
  25. * IndexController constructor.
  26. */
  27. public function __construct()
  28. {
  29. if (!Auth::check()) {
  30. die('Требуется авторизация на основном сайте.');
  31. }
  32.  
  33. session_start();
  34. }
  35.  
  36. /**
  37. * @param int $status
  38. * @return mixed
  39. */
  40. private function getReviewsByStatus($status = 0)
  41. {
  42. return ReviewPhoto::where('status', '=', $status)->paginate(self::PAGINATE_ITEMS);
  43. }
  44.  
  45. /**
  46. * @param $array
  47. * @return mixed
  48. */
  49. private function getReviewsByIds($array)
  50. {
  51. return ReviewPhoto::whereIn('id', $array)->paginate(self::PAGINATE_ITEMS);
  52. }
  53.  
  54. /**
  55. * @return array
  56. */
  57. private function getQuestionsIds()
  58. {
  59. $questions = array();
  60.  
  61. $checkAnswers = AnswerReviewPhoto::where('status', '=', 0)->where('type', '=', 1)->get();
  62. $reviewIds = array();
  63. foreach ($checkAnswers as $itemAnswer) {
  64. if (!in_array($itemAnswer->toArray()['review_id'], $reviewIds)) {
  65. $reviewIds[] = $itemAnswer->toArray()['review_id'];
  66. }
  67. }
  68.  
  69. foreach ($reviewIds as $itemId) {
  70. $result = AnswerReviewPhoto::where('review_id', '=', $itemId)->orderBy('id', 'desc')->first();
  71. if (count($result)) {
  72. $itemArray = $result->toArray();
  73. if ($itemArray['status'] == 0 && $itemArray['type'] == 1) {
  74. $questions[] = $itemArray['review_id'];
  75. }
  76. }
  77. }
  78.  
  79. return $questions;
  80. }
  81.  
  82. /**
  83. * @return mixed
  84. * Возвращает загрузки за текущим днём
  85. */
  86. private function getTodayUploads()
  87. {
  88. return ReviewPhoto::where('created_at', '>=', Carbon::today()->toDateString())->paginate(self::PAGINATE_ITEMS);
  89. }
  90.  
  91. /**
  92. * @param Request $request
  93. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View
  94. * Вывод списка работ на ревью.
  95. */
  96. public function index(Request $request)
  97. {
  98. if (!isset($_SESSION['is_admin_expert'])) {
  99. return redirect(url('admin/expert/login'));
  100. }
  101.  
  102. $dateSort = $request->get('date');
  103.  
  104. if ($dateSort != "asc"):
  105. $dateSort = "desc";
  106. endif;
  107.  
  108. $expertSort = $request->get('expert');
  109.  
  110. if ($dateSort == 'asc' || $dateSort == 'desc' || $expertSort) {
  111. if (is_numeric($expertSort)) {
  112. $awaitingReviews = ReviewPhoto::orderBy('created_at', $dateSort)
  113. ->where('expert_id', '=', $expertSort)
  114. ->paginate(self::PAGINATE_ITEMS);
  115. } else {
  116. $awaitingReviews = ReviewPhoto::orderBy('created_at', $dateSort)->paginate(self::PAGINATE_ITEMS);
  117. }
  118. } else {
  119. $awaitingReviews = ReviewPhoto::where('id', '>', 0)->paginate(self::PAGINATE_ITEMS);
  120. }
  121.  
  122. $experts = Expert::all();
  123.  
  124. /**
  125. * Количество неотвеченных
  126. */
  127. $unAnswered = ReviewPhoto::where('status', '=', 0)->count();
  128.  
  129. /**
  130. * Массив уточняющих вопросов
  131. */
  132. $questions = $this->getQuestionsIds();
  133.  
  134. if ($request->get('show')) {
  135. switch ($request->get('show')) {
  136. /**
  137. * Вывод списка уточняющих вопросов
  138. */
  139. case "questions":
  140. $awaitingReviews = $this->getReviewsByIds($questions);
  141. break;
  142. /**
  143. * Вывод списка неотвеченных
  144. */
  145. case "unanswered":
  146. $awaitingReviews = $this->getReviewsByStatus(0);
  147. break;
  148. /**
  149. * Вывод списка сегодняшних загрузок
  150. */
  151. case "todayUploads":
  152. $awaitingReviews = $this->getTodayUploads();
  153. break;
  154. }
  155. }
  156.  
  157. /**
  158. * Фильтрация по статусу
  159. */
  160. if ($request->get('status')) {
  161. switch ($request->get('status')) {
  162. /**
  163. * Вывод списка уточняющих вопросов
  164. */
  165. case "1":
  166. $awaitingReviews = $this->getReviewsByIds($questions);
  167. break;
  168. /**
  169. * Вывод списка отвеченных
  170. */
  171. case "0":
  172. $awaitingReviews = $this->getReviewsByStatus(1);
  173. break;
  174. /**
  175. * Вывод списка неотвеченных
  176. */
  177. case "-1":
  178. $awaitingReviews = $this->getReviewsByStatus(0);
  179. break;
  180. }
  181. }
  182.  
  183. return view('expert/review_list', [
  184. 'awaitingReviews' => $awaitingReviews,
  185. 'experts' => $experts,
  186. 'request' => $request,
  187. 'unAnswered' => $unAnswered,
  188. 'questions' => count($questions),
  189. 'todayUploads' => count($this->getTodayUploads()),
  190. ]);
  191. }
  192.  
  193. /**
  194. * @param Request $request
  195. * Редактирование последнего комментария эксперта
  196. */
  197. public function edit(Request $request, $id)
  198. {
  199. if (is_numeric($id)) {
  200. /**
  201. * Сохранение отредактированного комментария
  202. */
  203. if (Auth::Check()) {
  204. if ($request->isMethod('POST')) {
  205. $review = AnswerReviewPhoto::find($request->comment_id);
  206. $review->comment = str_replace("\r\n", "<br/>", trim($request->text));
  207. $review->save();
  208. }
  209. }
  210. /**
  211. * Вывод
  212. */
  213. // Данные по пользовательской фотографии
  214. $awaitingReview = ReviewPhoto::where('id', '=', $id)->get();
  215.  
  216. // Данные по комментариям к ревью
  217. $commentToReview = AnswerReviewPhoto::where('review_id', '=', $id)->get();
  218.  
  219. // Список экспертов
  220. $experts = Expert::all();
  221.  
  222. return view('expert/review_edit_last_expert_comment', [
  223. 'experts' => $experts,
  224. 'awaitingReview' => $awaitingReview,
  225. 'commentToReview' => $commentToReview,
  226. ]);
  227. }
  228.  
  229. return redirect(url('admin/expert'));
  230. }
  231.  
  232. public function login(Request $request)
  233. {
  234. $error = false;
  235.  
  236. /**
  237. * Проверяем, авторизован ли пользователь на основном сайте
  238. */
  239. /*if (Auth::check()) {
  240. $userId = Auth::user()->data->id;
  241.  
  242. $expertdata = Expert::where('crmid', '=', $userId)->first();
  243.  
  244. if ($expertdata != null) {
  245. $expertdata = $expertdata->toArray();
  246. if ($expertdata['crmid'] == $userId) {
  247. \Session::set('is_admin_expert', true);
  248. return redirect(url('admin/expert'));
  249. }
  250. }
  251. }*/
  252.  
  253. if ($request->isMethod('POST')) {
  254. $this->validate($request, ['login' => 'required', 'password' => 'required']);
  255.  
  256. $response = AuthoriseHelper::expertLogin($request->get('login'), $request->get('password'));
  257. if ($response) {
  258. $_SESSION['is_admin_expert'] = true;
  259. return redirect(url('admin/expert'));
  260. } else {
  261. $error = 'Данные неверны';
  262. }
  263. }
  264.  
  265. return view('admin.auth.login', ['error' => $error, 'route' => 'admin.expert.login']);
  266. }
  267.  
  268. public function logout()
  269. {
  270. \Session::forget('is_admin_expert');
  271.  
  272. return redirect(url('admin/expert'));
  273. }
  274.  
  275. /**
  276. * @param $id
  277. * Вывод страницы операций с фотографией на ревью
  278. */
  279. public function review($id)
  280. {
  281. if (is_numeric($id)) {
  282.  
  283. // Данные по пользовательской фотографии
  284. $awaitingReview = ReviewPhoto::where('id', '=', $id)->get();
  285.  
  286. // Данные по комментариям к ревью
  287. $commentToReview = AnswerReviewPhoto::where('review_id', '=', $id)->get();
  288.  
  289. // Список экспертов
  290. $experts = Expert::all();
  291.  
  292. /**
  293. * Предыдущие фотографии пользователя
  294. */
  295. $userPhotos = array();
  296. if (count($awaitingReview)) {
  297. $awaitingReviewArray = $awaitingReview->toArray();
  298. $userId = array_shift($awaitingReviewArray)['user_id'];
  299. $userPhotos = ReviewPhoto::where('user_id', '=', $userId)->paginate(self::PAGINATE_ITEMS);
  300. }
  301.  
  302. return view('expert/review_single', [
  303. 'experts' => $experts,
  304. 'awaitingReview' => $awaitingReview,
  305. 'commentToReview' => $commentToReview,
  306. 'userPhotos' => $userPhotos,
  307. ]);
  308. }
  309.  
  310. return redirect(url('admin/expert'));
  311. }
  312.  
  313. /**
  314. * Делаем помеченным как отвечен уточняющий вопрос.
  315. */
  316. public function markread(Request $request, $id)
  317. {
  318. if (is_numeric($id)) {
  319. $answer = AnswerReviewPhoto::find($id);
  320. $answer->status = 1;
  321. $answer->save();
  322. }
  323.  
  324. return redirect(url('admin/expert'));
  325. }
  326.  
  327. /**
  328. * Сохранение ревью эксперта в БД
  329. */
  330. public function saveReview(Request $request)
  331. {
  332. if (Auth::Check()) {
  333. if ($request->isMethod('POST')) {
  334. if (is_numeric($request->get('id'))) {
  335. $review = ReviewPhoto::find($request->get('id'));
  336. $review->status = 1;
  337. $review->save();
  338.  
  339. $answer = new AnswerReviewPhoto;
  340. $answer->review_id = $request->id;
  341. $answer->user_id = $request->user_id;
  342.  
  343.  
  344. $request->text = str_replace("\r\n", "<br/>", trim($request->text));
  345.  
  346. $answer->comment = $request->text;
  347. $answer->expert_id = '0';
  348.  
  349. if ($request->file('answer')) {
  350. $temp_name = time();
  351. $imageName = $temp_name . '.' . $request->file('answer')->getClientOriginalExtension();
  352.  
  353. $request->file('answer')->move(
  354. base_path() . '/public/upload/', $imageName
  355. );
  356.  
  357. // Права на бою
  358. chmod(base_path() . '/public/upload/' . $imageName, 0755);
  359.  
  360. $resize_file_path = ImageResize::resize(base_path() . '/public/upload/' . $imageName, 380, 380, false, false);
  361. $fullpath = '/upload/' . $imageName;
  362.  
  363. $answer->file = $fullpath;
  364. }
  365.  
  366. $answer->save();
  367.  
  368. /**
  369. * Отправка письма
  370. * Берём последнюю загруженную фотку
  371. */
  372. $lastPhotoObj = ReviewPhoto::where('id', '=', $request->get('id'))->first();
  373. if ($lastPhotoObj) {
  374. $lastPhotoArray = $lastPhotoObj->toArray();
  375. }
  376.  
  377. $masterphoto = url() . "/{$lastPhotoArray['picture']}";
  378.  
  379. /**
  380. * Отправка первого письма с ответом эксперта пользователю.
  381. */
  382.  
  383. $answersCount = AnswerReviewPhoto::where([
  384. 'review_id' => $request->id,
  385. 'is_first_comment' => 0,
  386. ])->get()->count();
  387.  
  388. if ($answersCount == 1) {
  389. app('directCRMApi')->sendExpertAnswer($review['email'],
  390. $request->user_id, strip_tags($request->text), null,
  391. $masterphoto, url() . '/profile/reviewphoto#popup-review_' . $request->id);
  392. } else {
  393. app('directCRMApi')->sendExpert2Answer($review['email'],
  394. $request->user_id, strip_tags($request->text), null,
  395. $masterphoto, url() . '/profile/reviewphoto#popup-review_' . $request->id);
  396. }
  397. }
  398. }
  399. }
  400.  
  401. return redirect(url('admin/expert'));
  402. }
  403.  
  404. /**
  405. * Просмотр вопросов эксперту
  406. */
  407. public function questionsList()
  408. {
  409. $awaitingQuestions = AnswerReviewPhoto::where('status', '=', 2)->get();
  410.  
  411. return view('expert/questions_list', [
  412. 'awaitingQuestions' => $awaitingQuestions,
  413. ]);
  414. }
  415. }
  416. 0Жучки
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement