From 9e14e39b661adb7b7c437a5672c55d79f03aec64 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 3 Aug 2017 13:48:10 +0200 Subject: [PATCH] Added Comments in Controllers called html_escape function for all textfields before saving (against html injection) Reformatted Fixed Studienjahr Dropdown prefill in Studiensemester view --- .../controllers/organisation/Studienjahr.php | 79 +++++++++++++++++-- .../organisation/Studiensemester.php | 62 ++++++++++++--- .../views/organisation/studienjahr.php | 4 +- .../views/organisation/studienjahrEdit.php | 2 +- .../views/organisation/studienjahrForm.php | 4 +- .../views/organisation/studienjahrNew.php | 23 ++++-- .../views/organisation/studiensemester.php | 2 +- .../organisation/studiensemesterEdit.php | 5 +- .../views/organisation/studiensemesterNew.php | 50 ++++++++++-- 9 files changed, 195 insertions(+), 36 deletions(-) diff --git a/application/controllers/organisation/Studienjahr.php b/application/controllers/organisation/Studienjahr.php index 46f6145ba..8c98a4c8b 100644 --- a/application/controllers/organisation/Studienjahr.php +++ b/application/controllers/organisation/Studienjahr.php @@ -2,20 +2,33 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); +/** + * Studienjahr controller for listing, editing and removing a Studienjahr + */ class Studienjahr extends VileSci_Controller { + /** + * Studienjahr constructor. + * loads model for Studienjahr + */ public function __construct() { parent::__construct(); $this->load->model("organisation/Studienjahr_model", "StudienjahrModel"); } - public function index() - { - $this->listStudienjahr(); - } + /** + * by default, Studienjahre are listed by calling the listStudienjahr function + */ + /* public function index() + { + $this->listStudienjahr(); + }*/ + /** + * lists all Studienjahre + */ public function listStudienjahr() { $studienjahr = $this->StudienjahrModel->load(); @@ -30,6 +43,13 @@ class Studienjahr extends VileSci_Controller $this->load->view("organisation/studienjahr.php", $data); } + /** + * shows view for editing a Studienjahr with a given Kurzbezeichnung + * replaces slash in Kurzbezeichnung with underscore, + * otherwise the Kurzbezeichnung is treated as part of url navigation + * e.g. organisation/studienjahr/editStudienjahr/2017/18 + * @param $studienjahr_kurzbez Studienjahrkurzbezeichnung, e.g. 2017/18 + */ public function editStudienjahr($studienjahr_kurzbez) { $studienjahr_kurzbez = str_replace("_", "/", $studienjahr_kurzbez); @@ -44,6 +64,12 @@ class Studienjahr extends VileSci_Controller $this->load->view("organisation/studienjahrEdit.php", $data); } + /** + * shows view for adding a Studienjahr + * retrieves all Studienjahre, increases last Studienjahr in database by 1 to get current Studienjahr + * sends current Studienjahrkurzbezeichnung to view + * So view can prefill fields with current Studienjahr + */ public function newStudienjahr() { $this->StudienjahrModel->addOrder('studienjahr_kurzbz', "DESC"); @@ -60,6 +86,11 @@ class Studienjahr extends VileSci_Controller $this->load->view("organisation/studienjahrNew.php", $data); } + /** + * helper function for extracting the two years from Studienjahrkurzbezeichnung + * @param $studienjahr_kurzbez Studienjahrkurzbezeichnung, e.g. 2017/18 + * @return array contains the two years, e.g. [0] - 2017, [1] - 18 + */ private function __getYearsFromStudienjahr($studienjahr_kurzbez) { $firstyear = intval(substr($studienjahr_kurzbez, 0, 4)); @@ -67,6 +98,12 @@ class Studienjahr extends VileSci_Controller return array($firstyear, $secondyear); } + /** + * inserts a Studienjahr + * replaces slash in Kurzbezeichnung with underscore, + * redirects to edit page after inserting. + * saved=true is a GET parameter passed for showing save message + */ public function insStudienjahr() { $data = $this->__retrieveStudienjahrData(); @@ -80,13 +117,20 @@ class Studienjahr extends VileSci_Controller redirect("/organisation/studienjahr/editStudienjahr/".str_replace("/", "_", $data['studienjahr_kurzbz']."?saved=true")); } - private function __retrieveStudienjahrData(){ + /** + * gets Studienjahr data from input fields (POST request) + * escapes html characters for all texts coming from text input fields + * validates the Studienjahr data before returning it or throwing an error + * @return array contains all data for a Studienjahr + */ + private function __retrieveStudienjahrData() + { $studienjahr_kurzbz = $this->input->post("studienjahrkurzbz"); $bezeichnung = $this->input->post("studienjahrbz"); $data = array( "studienjahr_kurzbz" => $studienjahr_kurzbz, - "bezeichnung" => $bezeichnung, + "bezeichnung" => html_escape($bezeichnung) ); $validation = $this->_validate($data); @@ -99,17 +143,30 @@ class Studienjahr extends VileSci_Controller } } + /** + * runs checks on Studienjahr data + * checks if Studienjahr Kurzbezeichnung has the correct form e.g. 2017/18 + * checks if second year in Studienjahr is exactly one year after first + * @param $data contains all data for a Studienjahr + * @return array errorarray with error text if a check failed or success-array if all checks succeeded + */ private function _validate($data) { $studienjahr_kurzbz = $data['studienjahr_kurzbz']; $years = $this->__getYearsFromStudienjahr($studienjahr_kurzbz); - //if not desired form or second year comes not right after the first + //if wrong form or second year comes not right after the first $correctyears = $years[0] % 100 == $years[1] - 1; if (!preg_match("/^\d{4}\/\d{2}$/", $studienjahr_kurzbz) || !$correctyears) return error("Studienjahrbezeichnung muss folgende Form haben: Jahreszahl/letzeZweiZahlenDesNächstenJahres, z.B. 2017/18"); - return success("Semesterdaten sind valide"); + return success("Studienjahrdaten sind valide"); } + /** + * updates a Studienjahr + * redirects to edit page after inserting + * replaces slash in Kurzbezeichnung with underscore + * saved=true is a GET parameter passed for showing save message + */ public function saveStudienjahr() { $data = $this->__retrieveStudienjahrData(); @@ -123,6 +180,12 @@ class Studienjahr extends VileSci_Controller redirect("/organisation/studienjahr/editStudienjahr/".str_replace("/", "_", $data['studienjahr_kurzbz']."?saved=true")); } + /** + * deletes a Studienjahr + * redirects to list Studienjahr view after deleting + * replaces slash in Kurzbezeichnung with underscore + * @param $studienjahr_kurzbez Studienjahrkurzbezeichnung, e.g. SS2017 + */ public function deleteStudienjahr($studienjahr_kurzbez) { $studienjahr_kurzbez = str_replace("_", "/", $studienjahr_kurzbez); diff --git a/application/controllers/organisation/Studiensemester.php b/application/controllers/organisation/Studiensemester.php index 242335bc7..5707bba4a 100644 --- a/application/controllers/organisation/Studiensemester.php +++ b/application/controllers/organisation/Studiensemester.php @@ -3,13 +3,15 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); /** - * Description of Semester - * - * @author root + * Studiensemester controller for listing, editing and removing a Studiensemester */ class Studiensemester extends VileSci_Controller { + /** + * Studiensemester constructor. + * loads model for Studiensemester and Studienjahr (Studienjahr needed for dropdown) + */ public function __construct() { parent::__construct(); @@ -17,11 +19,17 @@ class Studiensemester extends VileSci_Controller $this->load->model("organisation/Studienjahr_model", "StudienjahrModel"); } - public function index() - { - $this->listStudiensemester(); - } + /** + * by default, Studiensemesters are listed by calling the listStudiensemester function + */ + /* public function index() + { + $this->listStudiensemester(); + }*/ + /** + * lists all Studiensemesters + */ public function listStudiensemester() { $semester = $this->StudiensemesterModel->load(); @@ -36,6 +44,11 @@ class Studiensemester extends VileSci_Controller $this->load->view("organisation/studiensemester.php", $data); } + /** + * shows view for editing a Studiensemester with a given Kurzbezeichnung + * retrieves Studienjahre for showing in a dropdown in descending order + * @param $semester_kurzbez Semesterkurzbezeichnung, e.g. SS2017 + */ public function editStudiensemester($semester_kurzbez) { $semester = $this->StudiensemesterModel->load($semester_kurzbez); @@ -57,6 +70,10 @@ class Studiensemester extends VileSci_Controller $this->load->view("organisation/studiensemesterEdit.php", $data); } + /** + * shows view for adding a Studiensemester + * retrieves Studienjahre for showing in a dropdown in descending order + */ public function newStudiensemester() { $this->StudienjahrModel->addOrder('studienjahr_kurzbz', "DESC"); @@ -75,7 +92,8 @@ class Studiensemester extends VileSci_Controller /** * inserts a Studiensemester - * formats dates in english as required by database + * redirects to edit page after inserting. + * saved=true is a GET parameter passed for showing save message */ public function insStudiensemester() { @@ -91,6 +109,13 @@ class Studiensemester extends VileSci_Controller } + /** + * gets Studiensemester data from input fields (POST request) + * formats Studiensemester begin and end date as required by the database (english format) + * escapes html characters for all texts coming from text input fields + * validates the Studiensemester data before returning it or throwing an error + * @return array contains all data for a Studiensemester + */ private function __retrieveStudiensemesterData() { $studiensemester_kurzbz = $this->input->post("semkurzbz"); @@ -104,11 +129,11 @@ class Studiensemester extends VileSci_Controller $data = array( "studiensemester_kurzbz" => $studiensemester_kurzbz, - "bezeichnung" => $bezeichnung, + "bezeichnung" => html_escape($bezeichnung), "start" => $start, "ende" => $ende, "studienjahr_kurzbz" => $studienjahr_kurzbz, - "beschreibung" => $beschreibung, + "beschreibung" => html_escape($beschreibung), "onlinebewerbung" => $onlinebewerbung ); @@ -125,6 +150,13 @@ class Studiensemester extends VileSci_Controller } } + /** + * runs checks on Studiensemester data + * checks if Studiensemester Kurzbezeichnung has the correct form e.g. SS2017 + * checks if date was given in the correct format dd.mm.yyyy (german format) + * @param $data contains all data for a Studiensemester + * @return array errorarray with error text if a check failed or success-array if all checks succeeded + */ private function _validate($data) { $datepattern = "/^\d{2}.\d{2}.\d{4}$/"; @@ -138,6 +170,11 @@ class Studiensemester extends VileSci_Controller return success("Semesterdaten sind valide"); } + /** + * updates a Studiensemester + * redirects to edit page after inserting + * saved=true is a GET parameter passed for showing save message + */ public function saveStudiensemester() { $data = $this->__retrieveStudiensemesterData(); @@ -151,6 +188,11 @@ class Studiensemester extends VileSci_Controller redirect("/organisation/studiensemester/editStudiensemester/".$data['studiensemester_kurzbz']."?saved=true"); } + /** + * deletes a Studiensemester + * redirects to list Studiensemester view after deleting + * @param $semester_kurzbez Semesterkurzbezeichnung, e.g. SS2017 + */ public function deleteStudiensemester($semester_kurzbez) { $semester = $this->StudiensemesterModel->delete($semester_kurzbez); diff --git a/application/views/organisation/studienjahr.php b/application/views/organisation/studienjahr.php index c57761e6f..8cef4634d 100644 --- a/application/views/organisation/studienjahr.php +++ b/application/views/organisation/studienjahr.php @@ -1,5 +1,5 @@ load->view('templates/header', array('title' => 'StudienjahrList', 'tablesort' => true, 'tableid' => 't1', 'headers' => '2:{sorter:false}, 3:{sorter:false}', 'sortList' =>'0,1')); +$this->load->view('templates/header', array('title' => 'StudienjahrList', 'tablesort' => true, 'tableid' => 't1', 'headers' => '2:{sorter:false}, 3:{sorter:false}', 'sortList' => '0,1')); ?>
@@ -20,7 +20,7 @@ $this->load->view('templates/header', array('title' => 'StudienjahrList', 'table studienjahr_kurzbz); - ?> + ?> studienjahr_kurzbz; ?> bezeichnung; ?> diff --git a/application/views/organisation/studienjahrEdit.php b/application/views/organisation/studienjahrEdit.php index 0da943d12..b8e3817d0 100644 --- a/application/views/organisation/studienjahrEdit.php +++ b/application/views/organisation/studienjahrEdit.php @@ -6,7 +6,7 @@ $this->load->view('templates/header', array('title' => 'StudienjahrEdit', 'jquer
-

Studienjahr bearbeiten: bezeichnung; ?>

+

Studienjahr bearbeiten: studienjahr_kurzbz; ?>

"> diff --git a/application/views/organisation/studienjahrForm.php b/application/views/organisation/studienjahrForm.php index 17524a4f8..c68271f16 100644 --- a/application/views/organisation/studienjahrForm.php +++ b/application/views/organisation/studienjahrForm.php @@ -1,5 +1,5 @@ bezeichnung))?$jahr->bezeichnung:(isset($studienjahrkurzbz)?"Studienjahr ".$studienjahrkurzbz:""); +$bezeichnung = (isset($jahr->bezeichnung)) ? $jahr->bezeichnung : (isset($studienjahrkurzbz) ? "Studienjahr ".$studienjahrkurzbz : ""); ?> @@ -44,6 +44,6 @@ $bezeichnung = (isset($jahr->bezeichnung))?$jahr->bezeichnung:(isset($studienjah
-
+
\ No newline at end of file diff --git a/application/views/organisation/studienjahrNew.php b/application/views/organisation/studienjahrNew.php index ccc420e70..61c11b12e 100644 --- a/application/views/organisation/studienjahrNew.php +++ b/application/views/organisation/studienjahrNew.php @@ -8,7 +8,8 @@ $this->load->view('templates/header', array('title' => 'StudienjahrNew', 'jquery

Neues Studienjahr anlegen

" id="newStudienjahrForm"> + action="" + id="newStudienjahrForm">
@@ -22,6 +23,11 @@ $this->load->view('templates/header', array('title' => 'StudienjahrNew', 'jquery diff --git a/application/views/organisation/studiensemester.php b/application/views/organisation/studiensemester.php index 3e12df906..bc40b0ca8 100644 --- a/application/views/organisation/studiensemester.php +++ b/application/views/organisation/studiensemester.php @@ -1,5 +1,5 @@ load->view('templates/header', array('title' => 'StudiensemesterList', 'tablesort' => true, 'tableid' => 't1', 'headers' => '7:{sorter:false}, 8:{sorter:false}', 'sortList' =>'4,1')); +$this->load->view('templates/header', array('title' => 'StudiensemesterList', 'tablesort' => true, 'tableid' => 't1', 'headers' => '7:{sorter:false}, 8:{sorter:false}', 'sortList' => '4,1],[0,0')); ?>
diff --git a/application/views/organisation/studiensemesterEdit.php b/application/views/organisation/studiensemesterEdit.php index 2a8c36902..5bb574c23 100644 --- a/application/views/organisation/studiensemesterEdit.php +++ b/application/views/organisation/studiensemesterEdit.php @@ -7,10 +7,11 @@ $this->load->view('templates/header', array('title' => 'StudiensemesterEdit', 'd

Studiensemester bearbeiten: studiensemester_kurzbz; ?>

- "> + "> - + diff --git a/application/views/organisation/studiensemesterNew.php b/application/views/organisation/studiensemesterNew.php index dfda83df9..15494ed98 100644 --- a/application/views/organisation/studiensemesterNew.php +++ b/application/views/organisation/studiensemesterNew.php @@ -38,6 +38,11 @@ $this->load->view('templates/header', array('title' => 'StudiensemesterNew', 'jq ); }); + /** + * prefills all date-associated input fields depending on given Semesterkurzbezeichnung + * fires when value in input field Semesterkurzbezeichnung is changed + * @param semesterkurzbez + */ function prefillYearFields(semesterkurzbez) { if (!checkSemesterkurzbez(semesterkurzbez))return; var semester = semesterkurzbez.substr(0, 2); @@ -52,7 +57,7 @@ $this->load->view('templates/header', array('title' => 'StudiensemesterNew', 'jq } else { wsssbezeichnung = "Sommersemester"; jahrbez = jahr; - studienjahr = jahr + "/" + (parseInt(jahr.substr(2, 4)) - 1); + studienjahr = (parseInt(jahr) - 1) + "/" + (parseInt(jahr.substr(2, 4))); start = "01.02." + jahr; ende = "01.08." + jahr; } @@ -60,20 +65,55 @@ $this->load->view('templates/header', array('title' => 'StudiensemesterNew', 'jq $('input[name=sembz]').val(bezeichnung); $('input[name=semstart]').val(start); $('input[name=semende]').val(ende); - $('input[name=studienjahrkurzbz]').val(studienjahr); + $('select[name=studienjahrkurzbz]').val(studienjahr); } + /** + * prevents submitting the form data if data entered incorrectly + * additional check before php check for user-friendliness (no php die) + * outputs errormessages in case of wrong inputs + */ $('#newSemesterForm').submit(function (event) { var semesterkurzbez = $('input[name=semkurzbz]').val(); - if (checkSemesterkurzbez(semesterkurzbez))return; - $('#errormessage').text("Semesterkurzbezeichnung muss mit WS oder SS beginnen und mit einer Jahreszahl enden, z.B. SS2017"); - event.preventDefault(); + var startdatum = $('input[name=semstart]').val(); + var enddatum = $('input[name=semende]').val(); + var errormessage = ""; + var error = false; + if (!checkSemesterkurzbez(semesterkurzbez)) { + errormessage = "Semesterkurzbezeichnung muss mit WS oder SS beginnen und mit einer Jahreszahl enden, z.B. SS2017"; + error = true; + } else if (!checkDate(startdatum)) { + errormessage = "Startdatum falsch eingegeben. Richtiges Format: dd.mm.yyyy, z.B. 01.01.2017"; + error = true; + } else if (!checkDate(enddatum)) { + errormessage = "Enddatum falsch eingegeben. Richtiges Format: dd.mm.yyyy, z.B. 01.01.2017"; + error = true; + } + if (error) { + event.preventDefault(); + $('#errormessage').text(errormessage); + } }); + /** + * checks correct Semesterkurzbezeichnung format with regex + * @param semesterkurzbez + * @returns {boolean} whether the Semesterkurzbezeichnung has correct format + */ function checkSemesterkurzbez(semesterkurzbez) { var pattern = /^(WS|SS)\d{4}$/; return pattern.test(semesterkurzbez); } + + /** + * checks date for right (german) format + * @param date + * @returns {boolean} whether the Semesterkurzbezeichnung has correct format + */ + function checkDate(date) { + var pattern = /^\d{2}.\d{2}.\d{4}$/; + return pattern.test(date); + }