Skip to content
Snippets Groups Projects
Commit 4bbfbe87 authored by Владислав Яковлев's avatar Владислав Яковлев
Browse files

Refactor discipline api

parent b3d8fd38
Branches
Tags
No related merge requests found
<?php <?php
class Controller_Api_V0_StudyPlan extends Controller_Handler_Api { class Controller_Api_V0_StudyPlan extends Controller_Handler_Api {
private function normalizeDisciplinesData($discipline, $facultyID) { private function normalizeDisciplinesData($disciplineData, $facultyID) {
if (!isset($discipline->subjectID) && isset($discipline->externalID)) { if (!isset($disciplineData->subjectID) && isset($disciplineData->externalID)) {
$discipline->subjectID = Model_Subject::withExternalID($discipline->externalID, $discipline->name, '', $facultyID); $disciplineData->subjectID = Model_Subject::withExternalID($disciplineData->externalID, $disciplineData->name, '', $facultyID);
} }
foreach ($discipline->teachers as $teacher) { foreach ($disciplineData->teachers as $teacherData) {
if (empty($teacher->hashSnils)) { if (empty($teacherData->hashSnils)) {
Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array( Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
'{0}' => 'SYNC_DISCIPLINES', '{0}' => 'SYNC_DISCIPLINES',
'{1}' => 'Discipline with empty teacher\'s hash INILA', '{1}' => 'Discipline with empty teacher\'s hash INILA',
'{2}' => json_encode($discipline), '{2}' => json_encode($disciplineData),
)); ));
} else { } else {
$ID = Model_Teacher::withINILA($teacher->hashSnils); $ID = Model_Teacher::withINILA($teacherData->hashSnils);
if ($ID != -1) { if ($ID != -1) {
$discipline->teacherIDs[] = $ID; $disciplineData->teacherIDs[] = $ID;
} }
} }
} }
if (empty($discipline->teacherIDs)) { if (empty($disciplineData->teacherIDs)) {
if (!empty($discipline->teachers)) { if (!empty($disciplineData->teachers)) {
Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array( Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
'{0}' => 'SYNC_DISCIPLINES', '{0}' => 'SYNC_DISCIPLINES',
'{1}' => 'Discipline without teachers', '{1}' => 'Discipline without teachers',
'{2}' => json_encode($discipline), '{2}' => json_encode($disciplineData),
)); ));
} }
} }
switch ($discipline->type) { switch ($disciplineData->type) {
case 'Экзамен': case 'Экзамен':
$discipline->type = Model_Discipline::EXAM; $disciplineData->type = Model_Discipline::EXAM;
break; break;
case 'Зачет': case 'Зачет':
$discipline->type = Model_Discipline::CREDIT; $disciplineData->type = Model_Discipline::CREDIT;
break; break;
default: default:
throw new InvalidArgumentException('Discipline has bad type'); throw new InvalidArgumentException('Discipline has bad type');
} }
return $discipline; return $disciplineData;
} }
private function processStudyPlan($studyPlan, $year, $facultyID) { private function processStudyPlan($studyPlanData, $year, $facultyID) {
if (!isset($studyPlan->id) && isset($studyPlan->externalID)) { if (!isset($studyPlanData->id) && isset($studyPlanData->externalID)) {
$ID = Model_Plan::withExternalID($studyPlan->externalID); $ID = Model_Plan::withExternalID($studyPlanData->externalID);
if ($ID == -1) { if ($ID == -1) {
$studyPlan->planModel = Model_Plan::make() $studyPlanData->planModel = Model_Plan::make()
->externalID($studyPlan->externalID) ->externalID($studyPlanData->externalID)
->year($year) ->year($year)
->faculty($facultyID) ->faculty($facultyID)
->create(); ->create();
} else { } else {
$studyPlan->planModel = Model_Plan::load($ID); $studyPlanData->planModel = Model_Plan::load($ID);
} }
} }
foreach ($studyPlan->disciplines as &$discipline) { foreach ($studyPlanData->disciplines as &$disciplineData) {
try { try {
$discipline = $this->normalizeDisciplinesData($discipline, $facultyID); $disciplineData = $this->normalizeDisciplinesData($disciplineData, $facultyID);
} catch (Exception $e) { } catch (Exception $e) {
Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array( Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
'{0}' => 'SYNC_DISCIPLINES', '{0}' => 'SYNC_DISCIPLINES',
'{1}' => $e->getMessage(), '{1}' => $e->getMessage(),
'{2}' => json_encode($discipline), '{2}' => json_encode($disciplineData),
)); ));
$discipline = null; $disciplineData = null;
} }
} }
return $studyPlan; return $studyPlanData;
} }
private function processDiscipline($discipline, $semesterID, $facultyID) { private function processDiscipline($disciplineData, $semesterID, $facultyID) {
if (isset($discipline->subjectID)) { if (isset($disciplineData->subjectID)) {
$disciplineModel = Model_Discipline::find($facultyID, $semesterID, $discipline->subjectID, $discipline->type); $discipline = Model_Discipline::find($facultyID, $semesterID, $disciplineData->subjectID, $disciplineData->type);
} }
$lTeacherIDs = []; $lTeacherIDs = [];
if (!empty($disciplineModel)) { if (!empty($discipline)) {
$disciplineModel->update(); $discipline->update();
// Сравнить список пришедших преподавателей и тех, которые уже прикреплены // Сравнить список пришедших преподавателей и тех, которые уже прикреплены
if (!empty($discipline->teacherIDs)) { if (!empty($disciplineData->teacherIDs)) {
$lTeacherIDs = array_diff($discipline->teacherIDs, $disciplineModel->getTeachers()->as_array()); $lTeacherIDs = array_diff($disciplineData->teacherIDs, $discipline->getTeachers()->as_array());
} }
} else { } else {
if (empty($discipline->teacherIDs)) { if (empty($disciplineData->teacherIDs)) {
throw new InvalidArgumentException('Cannot create discipline without teachers'); throw new InvalidArgumentException('Cannot create discipline without teachers');
} }
$disciplineModel = Model_Discipline::make() $discipline = Model_Discipline::make()
->author($discipline->teacherIDs[0]) ->author($disciplineData->teacherIDs[0])
->subject($discipline->subjectID) ->subject($disciplineData->subjectID)
->semester($semesterID) ->semester($semesterID)
->type($discipline->type) ->type($disciplineData->type)
->faculty($facultyID) ->faculty($facultyID)
->create(); ->create();
$lTeacher = $disciplineModel->getTeachers()->as_array(); $lTeacher = $discipline->getTeachers()->as_array();
foreach ($lTeacher as $teacher) { foreach ($lTeacher as $teacher) {
$lTeacherIDs[] = $teacher['ID']; $lTeacherIDs[] = $teacher['ID'];
} }
...@@ -111,30 +111,30 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api { ...@@ -111,30 +111,30 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api {
foreach ($lTeacherIDs as $teacherID) { foreach ($lTeacherIDs as $teacherID) {
$teacher = Model_Teacher::with($teacherID); $teacher = Model_Teacher::with($teacherID);
$disciplineModel->bind($teacher); $discipline->bind($teacher);
} }
return (int)$disciplineModel->ID; return (int)$discipline->ID;
} }
private function processDisciplines($studyPlan, $semesterID, $facultyID) { private function processDisciplines($studyPlan, $semesterID, $facultyID) {
$res = []; $disciplineIDs = [];
foreach ($studyPlan->disciplines as $discipline) { foreach ($studyPlan->disciplines as $disciplineData) {
if ($discipline == null) continue; if (is_null($disciplineData)) continue;
try { try {
$res[] = $this->processDiscipline($discipline, $semesterID, $facultyID); $disciplineIDs[] = $this->processDiscipline($disciplineData, $semesterID, $facultyID);
} catch (Exception $e) { } catch (Exception $e) {
Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array( Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
'{0}' => 'SYNC_DISCIPLINES', '{0}' => 'SYNC_DISCIPLINES',
'{1}' => $e->getMessage(), '{1}' => $e->getMessage(),
'{2}' => json_encode($discipline), '{2}' => json_encode($disciplineData),
)); ));
} }
} }
return $res; return $disciplineIDs;
} }
// /** // /**
...@@ -158,9 +158,9 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api { ...@@ -158,9 +158,9 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api {
$semesterID = (int)Model_Semesters::find($year, (int)$data->semester)->ID; $semesterID = (int)Model_Semesters::find($year, (int)$data->semester)->ID;
$facultyID = Model_Faculties::getIdByExternalID($data->faculty); $facultyID = Model_Faculties::getIdByExternalID($data->faculty);
foreach ($data->plans as $item) { foreach ($data->plans as $studyPlanData) {
$planData = $this->processStudyPlan($item, $year, $facultyID); $studyPlanData = $this->processStudyPlan($studyPlanData, $year, $facultyID);
$res[] = $this->processDisciplines($planData, $semesterID, $facultyID); $res[] = $this->processDisciplines($studyPlanData, $semesterID, $facultyID);
} }
} else { } else {
throw new InvalidArgumentException('No batch data received!'); throw new InvalidArgumentException('No batch data received!');
......
...@@ -235,8 +235,9 @@ class Controller_Api_V0_Teacher extends Controller_Handler_Api { ...@@ -235,8 +235,9 @@ class Controller_Api_V0_Teacher extends Controller_Handler_Api {
$facultyID = Model_Faculties::getIdByExternalID($data->faculty); $facultyID = Model_Faculties::getIdByExternalID($data->faculty);
foreach ($data->teachers as $teacherData) { foreach ($data->teachers as $teacherData) {
$teacherData->facultyID = $facultyID;
try { try {
$teacherData->facultyID = $facultyID;
$teacherData = $this->normalizeTeacherData($teacherData); $teacherData = $this->normalizeTeacherData($teacherData);
if (isset($teacherData->id)) { if (isset($teacherData->id)) {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment