From 0b5644d6f1ac4f63f7bd8b1679d8e0528dbdbefa Mon Sep 17 00:00:00 2001 From: bison Date: Tue, 6 Sep 2016 15:52:34 +0200 Subject: [PATCH] - Added method getStudiengangBewerbung to controller Studiengang2 - Renamed method loadList to loadTree - Improved method loadTree - Added method getStudiengangBewerbung to model Studiengang_model --- .../api/v1/organisation/Studiengang2.php | 7 ++++ application/core/DB_Model.php | 36 ++++++++++++----- .../models/organisation/Studiengang_model.php | 39 ++++++++++++++++++- 3 files changed, 71 insertions(+), 11 deletions(-) diff --git a/application/controllers/api/v1/organisation/Studiengang2.php b/application/controllers/api/v1/organisation/Studiengang2.php index 43d43247c..c589d6a1e 100644 --- a/application/controllers/api/v1/organisation/Studiengang2.php +++ b/application/controllers/api/v1/organisation/Studiengang2.php @@ -73,4 +73,11 @@ class Studiengang2 extends APIv1_Controller $this->response(); } } + + public function getStudiengangBewerbung() + { + $result = $this->StudiengangModel->getStudiengangBewerbung(); + + $this->response($result, REST_Controller::HTTP_OK); + } } \ No newline at end of file diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index 6f4561d89..483377cc2 100644 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -192,11 +192,11 @@ class DB_Model extends FHC_Model * * TODO: * - Adding support for composed primary key - * - Adding support for cascading side tables + * - Adding support for cascading side tables (?) * * @return array */ - public function loadList($mainTable, $sideTables, $where = null, $sideTablesAliases = null) + public function loadTree($mainTable, $sideTables, $where = null, $sideTablesAliases = null) { // Check Class-Attributes if (is_null($this->dbTable)) @@ -247,7 +247,6 @@ class DB_Model extends FHC_Model // of a side table $returnArray = array(); $returnArrayCounter = 0; // Array counter - $prevPK = null; // Previous primary key // Iterates the array that contains data from DB for ($i = 0; $i < count($resultArray); $i++) @@ -282,17 +281,18 @@ class DB_Model extends FHC_Model $sideTableProperty = $sideTablesAliases[$t -1]; } - if ($prevPK == $mainTableObj->{$this->pk}) - { - array_push($returnArray[$returnArrayCounter - 1]->{$sideTableProperty}, $sideTableObj); - } - else + if (($k = $this->findMainTable($mainTableObj, $returnArray)) === false) { $mainTableObj->{$sideTableProperty} = array($sideTableObj); $returnArray[$returnArrayCounter++] = $mainTableObj; } - - $prevPK = $mainTableObj->{$this->pk}; + else + { + if (array_search($sideTableObj, $returnArray[$k]->{$sideTableProperty}) === false) + { + array_push($returnArray[$k]->{$sideTableProperty}, $sideTableObj); + } + } } } @@ -306,6 +306,22 @@ class DB_Model extends FHC_Model return $result; } + + /** + * Used in loadTree + */ + private function findMainTable($mainTableObj, $mainTableArray) + { + for ($i = 0; $i < count($mainTableArray); $i++) + { + if ($mainTableObj->{$this->pk} == $mainTableArray[$i]->{$this->pk}) + { + return $i; + } + } + + return false; + } /** --------------------------------------------------------------- * Add a table to join with diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 894ca0e5e..620a8c337 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -117,7 +117,7 @@ class Studiengang_model extends DB_Model $this->addOrder("public.tbl_studiengang.studiengang_kz"); $this->addOrder("lehre.tbl_studienplan.studienplan_id"); - $result = $this->loadList( + $result = $this->loadTree( "tbl_studiengang", array( "tbl_studienplan" @@ -135,4 +135,41 @@ class Studiengang_model extends DB_Model return $result; } + + /** + * + */ + public function getStudiengangBewerbung() + { + // Join table public.tbl_studiengang with table lehre.tbl_studienordnung on column studiengang_kz + $this->addJoin("lehre.tbl_studienordnung", "studiengang_kz"); + // Then join with table lehre.tbl_studienplan on column studienordnung_id + $this->addJoin("lehre.tbl_studienplan", "studienordnung_id"); + // Then join with table lehre.tbl_studienplan_semester on column studienplan_id + $this->addJoin("lehre.tbl_studienplan_semester", "studienplan_id"); + // Then join with table lehre.tbl_bewerbungsfrist on column studiensemester_kurzbz + $this->addJoin("public.tbl_bewerbungstermine", "studiensemester_kurzbz"); + + // Ordering by studiengang_kz and studienplan_id + $this->addOrder("public.tbl_studiengang.studiengang_kz"); + $this->addOrder("lehre.tbl_studienplan.studienplan_id"); + + $result = $this->loadTree( + "tbl_studiengang", + array( + "tbl_studienplan" + ), + array( + "public.tbl_studiengang.aktiv" => "true", + "public.tbl_studiengang.onlinebewerbung" => "true", + "public.tbl_bewerbungstermine.beginn <= " => "NOW()", + "public.tbl_bewerbungstermine.ende >= " => "NOW()" + ), + array( + "studienplaene" + ) + ); + + return $result; + } } \ No newline at end of file