src/Service/Loader/Legacy/StudentWriterService.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Service\Loader\Legacy;
  3. use App\CIC\Service\Legacy\Transformer\SinfoStudentTransformer;
  4. use App\Entity\School\Student\StudentProfile;
  5. use App\Service\CsscHelperService;
  6. use CIC\CSSC\SINFO;
  7. use CIC\DB\envLoader\db;
  8. use Doctrine\DBAL\Platforms\Keywords\DB2Keywords;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. class StudentWriterService
  11. {
  12.     private EntityManagerInterface $em;
  13.     private db $db;
  14.     private SINFO $sinfo;
  15.     private SinfoStudentTransformer $transformer;
  16.     public function __construct()
  17.     {
  18. //        $this->em = $em;
  19. //        $this->db = $db;
  20. //        $this->sinfo=$cssc->getSinfo();
  21. //
  22. //        $this->transformer = $transformer;
  23.     }
  24.     function create(StudentProfile $student)
  25.     {
  26. //        $sinfo = $this->transformer->revert($student);
  27. //        //lets check if the student exists
  28. //        if(!$this->getStudentRow($student->getStudentNumber())) {
  29. //            $this->createLegacyRecord('SINFO',$sinfo);
  30. //            // $this->createLegacyRecord('SINFO_XTRA',['IDNUM'=>$student->getStudentNumber()]); //cic_cron handles this right now....
  31. //        }
  32.     }
  33.     function update(StudentProfile $student) {
  34.         //find record.
  35. //
  36. //        $sinfo = $this->transformer->revert($student);
  37. ////        updateLegacyRecord(string $table,array $data,string $where,array $criteria) {
  38. ////            return $this->db->update(
  39. ////                $table,
  40. ////                $data,
  41. ////                $where,
  42. ////                $criteria,
  43. ////            );
  44. //
  45.     }
  46.     function legacy_update(StudentProfile $student) {
  47. //        $this->sinfo->refresh($student->getStudentNumber());
  48. //        $sinfo=$this->getSinfo($student);
  49. //        $changes=$this->getChanges($student,$sinfo);
  50. //        $data=array_diff_assoc($changes,$sinfo);
  51. //        if(count($data) > 0) {
  52. //            $this->db->update('SINFO',$data,'IDNUM=?',$student->getStudentNumber());
  53. //            $this->sinfo->refresh($student->getStudentNumber());
  54. //        }
  55.     }
  56.     function legacy_create(StudentProfile $student) {
  57. //        $this->sinfo->refresh($student->getStudentNumber());
  58. //        $data=$this->getMap($student);
  59. //        $data['IDNUM']=$student->getStudentNumber();
  60. //        if(count($data) > 0) {
  61. //            $this->db->insert('SINFO',$data);
  62. //            $this->sinfo->refresh($student->getStudentNumber());
  63. //        }
  64.     }
  65.     function findByStudentNumber($idnum) {
  66.     }
  67.     function findByUuid($uuid) {
  68.     }
  69.     private function getSinfo(StudentProfile $student) {
  70.         //because cssc/sinfo does NOT have uuid lookup (yet) do it ourselves
  71.         $this->db->query(
  72.             "SELECT IDNUM from SINFO WHERE uuid=?",
  73.             [$student->getUuid()]
  74.         );
  75.         if($this->db->returned_rows>0){
  76.             //got a record
  77.             $result=$this->db->fetch_obj();
  78.             return $this->sinfo->get($result->IDNUM);
  79.         }
  80.         return $this->sinfo->get($student->getStudentNumber());
  81.     }
  82.     private function getChanges(StudentProfile $student, array $sinfo) {
  83.         $map=$this->getMap($student);
  84.         foreach($map as $key=>$value) {
  85.             $sinfo=$this->change($sinfo,$key,$value);
  86.         }
  87.         return $sinfo;
  88.     }
  89.     private function change($array,$key,$value) {
  90.         if(array_key_exists($key$array)) {
  91.             if($array[$key]!=$value) {
  92.                 $array[$key]=$value;
  93.             }
  94.         }
  95.         return $array;
  96.     }
  97.     private function getMap(StudentProfile $student) {
  98.         $map=[
  99. //            'IDNUM'=>$student->getStudentNumber(),
  100.             'FIRSTN'=>$student->getGivenName(),
  101.             'LASTN'=>$student->getLastName(),
  102.             'DBIRTH'=>$student->getDateOfBirth()->format("Y-m-d"),
  103.             'MOTHER'=>implode(" ",[$student->getParent1()->getGivenName(),$student->getParent1()->getSurName()]),
  104.             'FATHER'=>implode(" ",[$student->getParent2()->getGivenName(),$student->getParent2()->getSurName()]),
  105.         ];
  106.         return $map;
  107.     }
  108.     /************************/
  109.     function getStudentRow($idnum) {
  110.         $q="SELECT * FROM SINFO WHERE IDNUM=?";
  111.         $this->db->query($q,[$idnum]);
  112.         if($this->db->returned_rows<1)
  113.             return;
  114.         /******************************/
  115.         $SINFO=$this->db->fetch_assoc();
  116.         $q="SELECT * FROM SINFO_XTRA WHERE IDNUM=?";
  117.         $this->db->query($q,[$idnum]);
  118.         $SINFO_XTRA=$this->db->fetch_assoc();
  119.         return [
  120.             'SINFO'=>$SINFO,
  121.             'SINFO_XTRA'=>$SINFO_XTRA,
  122.         ];
  123.     }
  124.     private function updateLegacyRecord(string $table,array $data,string $where,array $criteria) {
  125.         return $this->db->update(
  126.             $table,
  127.             $data,
  128.             $where,
  129.             $criteria,
  130.         );
  131.     }
  132.     private function createLegacyRecord(string $table,array $data) {
  133.         return $this->db->insert(
  134.             $table,
  135.             $data
  136.         );
  137.     }
  138. }