ModulesController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\UserController;
  4. use App\Championship;
  5. use App\Module;
  6. use App\Criterion;
  7. use Validator;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Storage;
  10. class ModulesController extends Controller
  11. {
  12. public function add(Request $request)
  13. {
  14. /*
  15. * Загружаем пользователя, который выполняет действие
  16. */
  17. $expert = UserController::getUserByToken($request->bearerToken());
  18. /*
  19. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  20. */
  21. if ($expert->position !== 1)
  22. return response()
  23. ->json(["status" => false, "message" => "Permission denied"])
  24. ->setStatusCode(403, 'Permission denied');
  25. $champ = Championship::find($request->champ_id);
  26. if (!$champ)
  27. return response()
  28. ->json(["status" => false, "message" => "Championship not found"])
  29. ->setStatusCode(404, 'Championship not found');
  30. if ($expert->position !== $champ->expert)
  31. return response()
  32. ->json(["status" => false, "message" => "Permission denied"])
  33. ->setStatusCode(403, 'Permission denied');
  34. $validator = Validator::make(
  35. $request->all(),
  36. [
  37. "title" => ['required'],
  38. ]
  39. );
  40. /*
  41. * Проверяем результаты валидации
  42. */
  43. if ($validator->fails())
  44. return response()
  45. ->json(["status" => false, "errors" => $validator->messages()])
  46. ->setStatusCode(400, "Error fields");
  47. $module = new Module();
  48. $module->title = $request->title;
  49. $module->championship = $request->champ_id;
  50. $module->save();
  51. return response()
  52. ->json(['status' => true, "message" => "Module is added"], 201);
  53. }
  54. public function remove(Request $request, $id)
  55. {
  56. /*
  57. * Загружаем пользователя, который выполняет действие
  58. */
  59. $expert = UserController::getUserByToken($request->bearerToken());
  60. /*
  61. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  62. */
  63. if ($expert->position !== 1)
  64. return response()
  65. ->json(["status" => false, "message" => "Permission denied"])
  66. ->setStatusCode(403, 'Permission denied');
  67. $champ = Championship::find($request->champ_id);
  68. if (!$champ)
  69. return response()
  70. ->json(["status" => false, "message" => "Championship not found"])
  71. ->setStatusCode(404, 'Championship not found');
  72. if ($expert->position !== $champ->expert)
  73. return response()
  74. ->json(["status" => false, "message" => "Permission denied"])
  75. ->setStatusCode(403, 'Permission denied');
  76. $module = Module::find($id);
  77. if ($module->championship !== $request->champ_id)
  78. return response()
  79. ->json(["status" => false, "message" => "Module not found"])
  80. ->setStatusCode(404, 'Module not found');
  81. $module->delete();
  82. return response()
  83. ->json(['status' => true, "message" => "Module is deleted"], 200);
  84. }
  85. public function one(Request $request, $id)
  86. {
  87. $module = Module::find($id);
  88. $res = [
  89. "id" => $module->id,
  90. "title" => $module->title,
  91. "criteria" => $module->criteria
  92. ];
  93. return response()
  94. ->json($res, 200);
  95. }
  96. public function update(Request $request, $id)
  97. {
  98. /*
  99. * Загружаем пользователя, который выполняет действие
  100. */
  101. $expert = UserController::getUserByToken($request->bearerToken());
  102. /*
  103. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  104. */
  105. if ($expert->position !== 1)
  106. return response()
  107. ->json(["status" => false, "message" => "Permission denied"])
  108. ->setStatusCode(403, 'Permission denied');
  109. $champ = Championship::find($request->champ_id);
  110. if (!$champ)
  111. return response()
  112. ->json(["status" => false, "message" => "Championship not found"])
  113. ->setStatusCode(404, 'Championship not found');
  114. if ($expert->position !== $champ->expert)
  115. return response()
  116. ->json(["status" => false, "message" => "Permission denied"])
  117. ->setStatusCode(403, 'Permission denied');
  118. $module = Module::find($id);
  119. if ($module->championship !== $request->champ_id)
  120. return response()
  121. ->json(["status" => false, "message" => "Module not found"])
  122. ->setStatusCode(404, 'Module not found');
  123. $validator = Validator::make(
  124. $request->all(),
  125. [
  126. "title" => ['required'],
  127. ]
  128. );
  129. /*
  130. * Проверяем результаты валидации
  131. */
  132. if ($validator->fails())
  133. return response()
  134. ->json(["status" => false, "errors" => $validator->messages()])
  135. ->setStatusCode(400, "Error fields");
  136. $module->title = $request->title;
  137. $module->save();
  138. return response()
  139. ->json(['status' => true, "message" => "Module is updated"], 200);
  140. }
  141. public function addCriterion(Request $request, $id)
  142. {
  143. /*
  144. * Загружаем пользователя, который выполняет действие
  145. */
  146. $expert = UserController::getUserByToken($request->bearerToken());
  147. /*
  148. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  149. */
  150. if ($expert->position !== 1)
  151. return response()
  152. ->json(["status" => false, "message" => "Permission denied"])
  153. ->setStatusCode(403, 'Permission denied');
  154. $module = Module::find($id);
  155. if (!$module)
  156. return response()
  157. ->json(["status" => false, "message" => "Module not found"])
  158. ->setStatusCode(404, 'Module not found');
  159. $validator = Validator::make(
  160. $request->all(),
  161. [
  162. "title" => ['required'],
  163. "type" => ['required'],
  164. "max" => ['required']
  165. ]
  166. );
  167. /*
  168. * Проверяем результаты валидации
  169. */
  170. if ($validator->fails())
  171. return response()
  172. ->json(["status" => false, "errors" => $validator->messages()])
  173. ->setStatusCode(400, "Error fields");
  174. $criterion = new Criterion();
  175. $criterion->title = $request->title;
  176. $criterion->module = $id;
  177. $criterion->type = $request->type;
  178. $criterion->max = $request->max;
  179. $criterion->save();
  180. return response()
  181. ->json(['status' => true, "message" => "Criterion is added"], 200);
  182. }
  183. public function removeCriterion(Request $request, $module_id, $criterion_id)
  184. {
  185. /*
  186. * Загружаем пользователя, который выполняет действие
  187. */
  188. $expert = UserController::getUserByToken($request->bearerToken());
  189. /*
  190. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  191. */
  192. if ($expert->position !== 1)
  193. return response()
  194. ->json(["status" => false, "message" => "Permission denied"])
  195. ->setStatusCode(403, 'Permission denied');
  196. $module = Module::find($module_id);
  197. if (!$module)
  198. return response()
  199. ->json(["status" => false, "message" => "Module not found"])
  200. ->setStatusCode(404, 'Module not found');
  201. $criterion = Criterion::find($criterion_id);
  202. if ($criterion->module !== $module->id)
  203. return response()
  204. ->json(["status" => false, "message" => "Criterion not found"])
  205. ->setStatusCode(404, 'Criterion not found');
  206. $criterion->delete();
  207. return response()
  208. ->json(['status' => true, "message" => "Criterion is deleted"], 200);
  209. }
  210. public function downloadCSV()
  211. {
  212. return Storage::download('csv_modules\template.csv');
  213. }
  214. public function importCSV(Request $request)
  215. {
  216. /*
  217. * Валидация полей
  218. */
  219. $validator = Validator::make(
  220. $request->all(),
  221. [
  222. "csv" => ['required', 'mimes:csv,txt']
  223. ]
  224. );
  225. /*
  226. * Проверяем результаты валидации
  227. */
  228. if ($validator->fails())
  229. return response()->json(["status" => false, "errors" => $validator->messages()])->setStatusCode(400, "Error fields");
  230. /*
  231. * Загружаем пользователя, который выполняет действие
  232. */
  233. $expert = UserController::getUserByToken($request->bearerToken());
  234. /*
  235. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  236. */
  237. if ($expert->position !== 1)
  238. return response()
  239. ->json(["status" => false, "message" => "Permission denied"])
  240. ->setStatusCode(403, 'Permission denied');
  241. $champ = Championship::find($request->champ);
  242. if (!$champ)
  243. return response()
  244. ->json(["status" => false, "message" => "Championship not found"])
  245. ->setStatusCode(404, 'Championship not found');
  246. if ($expert->position !== $champ->expert)
  247. return response()
  248. ->json(["status" => false, "message" => "Permission denied"])
  249. ->setStatusCode(403, 'Permission denied');
  250. $path = $request->file('csv')->store('csv_modules');
  251. $path = Storage::disk('local')->path($path);
  252. $csv_data = mb_convert_encoding(file($path), 'UTF-8', 'Windows-1251');
  253. //$titles = explode(';', $csv_data[0]);
  254. foreach ($csv_data as $key => $val) {
  255. if ($key === 0) continue;
  256. $val = str_replace("\r\n", '', $val);
  257. $params = explode(';', $val);
  258. $checkModule = Module::where('title', $params[0])
  259. ->where('championship', $champ->id)->first();
  260. $module_id = NULL;
  261. if (!$checkModule) {
  262. $module = new Module();
  263. $module->title = $params[0];
  264. $module->championship = $champ->id;
  265. $module->save();
  266. $module_id = $module->id;
  267. } else {
  268. $module_id = $checkModule->id;
  269. }
  270. $criterion = new Criterion();
  271. $criterion->type = $params[1];
  272. $criterion->title = $params[2];
  273. $criterion->note = $params[3];
  274. $criterion->max = $params[4];
  275. $criterion->module = $module_id;
  276. $criterion->save();
  277. }
  278. return response()->json(["status" => true, "message" => "Import criteria success"], 200);
  279. }
  280. }