From 4bbfbe87fe0a665c38590c2233dd66053e9132a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D1=81=D0=BB=D0=B0=D0=B2=20?=
 =?UTF-8?q?=D0=AF=D0=BA=D0=BE=D0=B2=D0=BB=D0=B5=D0=B2?=
 <vlad309523@gmail.com>
Date: Sat, 14 Oct 2017 10:13:28 +0300
Subject: [PATCH] Refactor discipline api

---
 .../classes/Controller/Api/V0/StudyPlan.php   | 100 +++++++++---------
 .../classes/Controller/Api/V0/Teacher.php     |   3 +-
 2 files changed, 52 insertions(+), 51 deletions(-)

diff --git a/~dev_rating/application/classes/Controller/Api/V0/StudyPlan.php b/~dev_rating/application/classes/Controller/Api/V0/StudyPlan.php
index 59e3133d0..1c07f18cb 100644
--- a/~dev_rating/application/classes/Controller/Api/V0/StudyPlan.php
+++ b/~dev_rating/application/classes/Controller/Api/V0/StudyPlan.php
@@ -1,109 +1,109 @@
 <?php
 
 class Controller_Api_V0_StudyPlan extends Controller_Handler_Api {
-    private function normalizeDisciplinesData($discipline, $facultyID) {
-        if (!isset($discipline->subjectID) && isset($discipline->externalID)) {
-            $discipline->subjectID = Model_Subject::withExternalID($discipline->externalID, $discipline->name, '', $facultyID);
+    private function normalizeDisciplinesData($disciplineData, $facultyID) {
+        if (!isset($disciplineData->subjectID) && isset($disciplineData->externalID)) {
+            $disciplineData->subjectID = Model_Subject::withExternalID($disciplineData->externalID, $disciplineData->name, '', $facultyID);
         }
 
-        foreach ($discipline->teachers as $teacher) {
-            if (empty($teacher->hashSnils)) {
+        foreach ($disciplineData->teachers as $teacherData) {
+            if (empty($teacherData->hashSnils)) {
                 Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
                     '{0}' => 'SYNC_DISCIPLINES',
                     '{1}' => 'Discipline with empty teacher\'s hash INILA',
-                    '{2}' => json_encode($discipline),
+                    '{2}' => json_encode($disciplineData),
                 ));
             } else {
-                $ID = Model_Teacher::withINILA($teacher->hashSnils);
+                $ID = Model_Teacher::withINILA($teacherData->hashSnils);
                 if ($ID != -1) {
-                    $discipline->teacherIDs[] = $ID;
+                    $disciplineData->teacherIDs[] = $ID;
                 }
             }
         }
 
-        if (empty($discipline->teacherIDs)) {
-            if (!empty($discipline->teachers)) {
+        if (empty($disciplineData->teacherIDs)) {
+            if (!empty($disciplineData->teachers)) {
                 Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
                     '{0}' => 'SYNC_DISCIPLINES',
                     '{1}' => 'Discipline without teachers',
-                    '{2}' => json_encode($discipline),
+                    '{2}' => json_encode($disciplineData),
                 ));
             }
         }
 
-        switch ($discipline->type) {
+        switch ($disciplineData->type) {
             case 'Экзамен':
-                $discipline->type = Model_Discipline::EXAM;
+                $disciplineData->type = Model_Discipline::EXAM;
                 break;
 
             case 'Зачет':
-                $discipline->type = Model_Discipline::CREDIT;
+                $disciplineData->type = Model_Discipline::CREDIT;
                 break;
 
             default:
                 throw new InvalidArgumentException('Discipline has bad type');
         }
 
-        return $discipline;
+        return $disciplineData;
     }
 
-    private function processStudyPlan($studyPlan, $year, $facultyID) {
-        if (!isset($studyPlan->id) && isset($studyPlan->externalID)) {
-            $ID = Model_Plan::withExternalID($studyPlan->externalID);
+    private function processStudyPlan($studyPlanData, $year, $facultyID) {
+        if (!isset($studyPlanData->id) && isset($studyPlanData->externalID)) {
+            $ID = Model_Plan::withExternalID($studyPlanData->externalID);
             if ($ID == -1) {
-                $studyPlan->planModel = Model_Plan::make()
-                    ->externalID($studyPlan->externalID)
+                $studyPlanData->planModel = Model_Plan::make()
+                    ->externalID($studyPlanData->externalID)
                     ->year($year)
                     ->faculty($facultyID)
                     ->create();
             } else {
-                $studyPlan->planModel = Model_Plan::load($ID);
+                $studyPlanData->planModel = Model_Plan::load($ID);
             }
         }
 
-        foreach ($studyPlan->disciplines as &$discipline) {
+        foreach ($studyPlanData->disciplines as &$disciplineData) {
             try {
-                $discipline = $this->normalizeDisciplinesData($discipline, $facultyID);
+                $disciplineData = $this->normalizeDisciplinesData($disciplineData, $facultyID);
             } catch (Exception $e) {
                 Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
                     '{0}' => 'SYNC_DISCIPLINES',
                     '{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) {
-        if (isset($discipline->subjectID)) {
-            $disciplineModel = Model_Discipline::find($facultyID, $semesterID, $discipline->subjectID, $discipline->type);
+    private function processDiscipline($disciplineData, $semesterID, $facultyID) {
+        if (isset($disciplineData->subjectID)) {
+            $discipline = Model_Discipline::find($facultyID, $semesterID, $disciplineData->subjectID, $disciplineData->type);
         }
 
         $lTeacherIDs = [];
-        if (!empty($disciplineModel)) {
-            $disciplineModel->update();
+        if (!empty($discipline)) {
+            $discipline->update();
 
             // Сравнить список пришедших преподавателей и тех, которые уже прикреплены
-            if (!empty($discipline->teacherIDs)) {
-                $lTeacherIDs = array_diff($discipline->teacherIDs, $disciplineModel->getTeachers()->as_array());
+            if (!empty($disciplineData->teacherIDs)) {
+                $lTeacherIDs = array_diff($disciplineData->teacherIDs, $discipline->getTeachers()->as_array());
             }
         } else {
-            if (empty($discipline->teacherIDs)) {
+            if (empty($disciplineData->teacherIDs)) {
                 throw new InvalidArgumentException('Cannot create discipline without teachers');
             }
 
-            $disciplineModel = Model_Discipline::make()
-                ->author($discipline->teacherIDs[0])
-                ->subject($discipline->subjectID)
+            $discipline = Model_Discipline::make()
+                ->author($disciplineData->teacherIDs[0])
+                ->subject($disciplineData->subjectID)
                 ->semester($semesterID)
-                ->type($discipline->type)
+                ->type($disciplineData->type)
                 ->faculty($facultyID)
                 ->create();
 
-            $lTeacher = $disciplineModel->getTeachers()->as_array();
+            $lTeacher = $discipline->getTeachers()->as_array();
             foreach ($lTeacher as $teacher) {
                 $lTeacherIDs[] = $teacher['ID'];
             }
@@ -111,30 +111,30 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api {
 
         foreach ($lTeacherIDs as $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) {
-        $res = [];
+        $disciplineIDs = [];
 
-        foreach ($studyPlan->disciplines as $discipline) {
-            if ($discipline == null) continue;
+        foreach ($studyPlan->disciplines as $disciplineData) {
+            if (is_null($disciplineData)) continue;
 
             try {
-                $res[] = $this->processDiscipline($discipline, $semesterID, $facultyID);
+                $disciplineIDs[] = $this->processDiscipline($disciplineData, $semesterID, $facultyID);
             } catch (Exception $e) {
                 Log::instance()->add(Log::WARNING, '{0} {1}: {2}', array(
                     '{0}' => 'SYNC_DISCIPLINES',
                     '{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 {
                 $semesterID = (int)Model_Semesters::find($year, (int)$data->semester)->ID;
                 $facultyID = Model_Faculties::getIdByExternalID($data->faculty);
 
-                foreach ($data->plans as $item) {
-                    $planData = $this->processStudyPlan($item, $year, $facultyID);
-                    $res[] = $this->processDisciplines($planData, $semesterID, $facultyID);
+                foreach ($data->plans as $studyPlanData) {
+                    $studyPlanData = $this->processStudyPlan($studyPlanData, $year, $facultyID);
+                    $res[] = $this->processDisciplines($studyPlanData, $semesterID, $facultyID);
                 }
             } else {
                 throw new InvalidArgumentException('No batch data received!');
diff --git a/~dev_rating/application/classes/Controller/Api/V0/Teacher.php b/~dev_rating/application/classes/Controller/Api/V0/Teacher.php
index f717d5d77..8e8a37199 100644
--- a/~dev_rating/application/classes/Controller/Api/V0/Teacher.php
+++ b/~dev_rating/application/classes/Controller/Api/V0/Teacher.php
@@ -235,8 +235,9 @@ class Controller_Api_V0_Teacher extends Controller_Handler_Api {
                 $facultyID = Model_Faculties::getIdByExternalID($data->faculty);
 
                 foreach ($data->teachers as $teacherData) {
+                    $teacherData->facultyID = $facultyID;
+
                     try {
-                        $teacherData->facultyID = $facultyID;
                         $teacherData = $this->normalizeTeacherData($teacherData);
 
                         if (isset($teacherData->id)) {
-- 
GitLab