123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Controllers\UserController;
- use App\Championship;
- use App\Module;
- use App\Criterion;
- use Validator;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Storage;
- class ModulesController extends Controller
- {
- public function add(Request $request)
- {
- /*
- * Загружаем пользователя, который выполняет действие
- */
- $expert = UserController::getUserByToken($request->bearerToken());
- /*
- * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
- */
- if ($expert->position !== 1)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $champ = Championship::find($request->champ_id);
- if (!$champ)
- return response()
- ->json(["status" => false, "message" => "Championship not found"])
- ->setStatusCode(404, 'Championship not found');
- if ($expert->position !== $champ->expert)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $validator = Validator::make(
- $request->all(),
- [
- "title" => ['required'],
- ]
- );
- /*
- * Проверяем результаты валидации
- */
- if ($validator->fails())
- return response()
- ->json(["status" => false, "errors" => $validator->messages()])
- ->setStatusCode(400, "Error fields");
- $module = new Module();
- $module->title = $request->title;
- $module->championship = $request->champ_id;
- $module->save();
- return response()
- ->json(['status' => true, "message" => "Module is added"], 201);
- }
- public function remove(Request $request, $id)
- {
- /*
- * Загружаем пользователя, который выполняет действие
- */
- $expert = UserController::getUserByToken($request->bearerToken());
- /*
- * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
- */
- if ($expert->position !== 1)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $champ = Championship::find($request->champ_id);
- if (!$champ)
- return response()
- ->json(["status" => false, "message" => "Championship not found"])
- ->setStatusCode(404, 'Championship not found');
- if ($expert->position !== $champ->expert)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $module = Module::find($id);
- if ($module->championship !== $request->champ_id)
- return response()
- ->json(["status" => false, "message" => "Module not found"])
- ->setStatusCode(404, 'Module not found');
- $module->delete();
- return response()
- ->json(['status' => true, "message" => "Module is deleted"], 200);
- }
- public function one(Request $request, $id)
- {
- $module = Module::find($id);
- $res = [
- "id" => $module->id,
- "title" => $module->title,
- "criteria" => $module->criteria
- ];
- return response()
- ->json($res, 200);
- }
- public function update(Request $request, $id)
- {
- /*
- * Загружаем пользователя, который выполняет действие
- */
- $expert = UserController::getUserByToken($request->bearerToken());
- /*
- * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
- */
- if ($expert->position !== 1)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $champ = Championship::find($request->champ_id);
- if (!$champ)
- return response()
- ->json(["status" => false, "message" => "Championship not found"])
- ->setStatusCode(404, 'Championship not found');
- if ($expert->position !== $champ->expert)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $module = Module::find($id);
- if ($module->championship !== $request->champ_id)
- return response()
- ->json(["status" => false, "message" => "Module not found"])
- ->setStatusCode(404, 'Module not found');
- $validator = Validator::make(
- $request->all(),
- [
- "title" => ['required'],
- ]
- );
- /*
- * Проверяем результаты валидации
- */
- if ($validator->fails())
- return response()
- ->json(["status" => false, "errors" => $validator->messages()])
- ->setStatusCode(400, "Error fields");
- $module->title = $request->title;
- $module->save();
- return response()
- ->json(['status' => true, "message" => "Module is updated"], 200);
- }
- public function addCriterion(Request $request, $id)
- {
- /*
- * Загружаем пользователя, который выполняет действие
- */
- $expert = UserController::getUserByToken($request->bearerToken());
- /*
- * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
- */
- if ($expert->position !== 1)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $module = Module::find($id);
- if (!$module)
- return response()
- ->json(["status" => false, "message" => "Module not found"])
- ->setStatusCode(404, 'Module not found');
- $validator = Validator::make(
- $request->all(),
- [
- "title" => ['required'],
- "type" => ['required'],
- "max" => ['required']
- ]
- );
- /*
- * Проверяем результаты валидации
- */
- if ($validator->fails())
- return response()
- ->json(["status" => false, "errors" => $validator->messages()])
- ->setStatusCode(400, "Error fields");
- $criterion = new Criterion();
- $criterion->title = $request->title;
- $criterion->module = $id;
- $criterion->type = $request->type;
- $criterion->max = $request->max;
- $criterion->save();
- return response()
- ->json(['status' => true, "message" => "Criterion is added"], 200);
- }
- public function removeCriterion(Request $request, $module_id, $criterion_id)
- {
- /*
- * Загружаем пользователя, который выполняет действие
- */
- $expert = UserController::getUserByToken($request->bearerToken());
- /*
- * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
- */
- if ($expert->position !== 1)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $module = Module::find($module_id);
- if (!$module)
- return response()
- ->json(["status" => false, "message" => "Module not found"])
- ->setStatusCode(404, 'Module not found');
- $criterion = Criterion::find($criterion_id);
- if ($criterion->module !== $module->id)
- return response()
- ->json(["status" => false, "message" => "Criterion not found"])
- ->setStatusCode(404, 'Criterion not found');
- $criterion->delete();
- return response()
- ->json(['status' => true, "message" => "Criterion is deleted"], 200);
- }
- public function downloadCSV()
- {
- return Storage::download('csv_modules\template.csv');
- }
- public function importCSV(Request $request)
- {
- /*
- * Валидация полей
- */
- $validator = Validator::make(
- $request->all(),
- [
- "csv" => ['required', 'mimes:csv,txt']
- ]
- );
- /*
- * Проверяем результаты валидации
- */
- if ($validator->fails())
- return response()->json(["status" => false, "errors" => $validator->messages()])->setStatusCode(400, "Error fields");
- /*
- * Загружаем пользователя, который выполняет действие
- */
- $expert = UserController::getUserByToken($request->bearerToken());
- /*
- * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
- */
- if ($expert->position !== 1)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $champ = Championship::find($request->champ);
- if (!$champ)
- return response()
- ->json(["status" => false, "message" => "Championship not found"])
- ->setStatusCode(404, 'Championship not found');
- if ($expert->position !== $champ->expert)
- return response()
- ->json(["status" => false, "message" => "Permission denied"])
- ->setStatusCode(403, 'Permission denied');
- $path = $request->file('csv')->store('csv_modules');
- $path = Storage::disk('local')->path($path);
- $csv_data = mb_convert_encoding(file($path), 'UTF-8', 'Windows-1251');
- //$titles = explode(';', $csv_data[0]);
- foreach ($csv_data as $key => $val) {
- if ($key === 0) continue;
- $val = str_replace("\r\n", '', $val);
- $params = explode(';', $val);
- $checkModule = Module::where('title', $params[0])
- ->where('championship', $champ->id)->first();
- $module_id = NULL;
- if (!$checkModule) {
- $module = new Module();
- $module->title = $params[0];
- $module->championship = $champ->id;
- $module->save();
- $module_id = $module->id;
- } else {
- $module_id = $checkModule->id;
- }
- $criterion = new Criterion();
- $criterion->type = $params[1];
- $criterion->title = $params[2];
- $criterion->note = $params[3];
- $criterion->max = $params[4];
- $criterion->module = $module_id;
- $criterion->save();
- }
- return response()->json(["status" => true, "message" => "Import criteria success"], 200);
- }
- }
|