Added Comments in Controllers

called html_escape function for all textfields before saving (against html injection)
Reformatted
Fixed Studienjahr Dropdown prefill in Studiensemester view
This commit is contained in:
alex
2017-08-03 13:48:10 +02:00
parent 42960ffe20
commit 9e14e39b66
9 changed files with 195 additions and 36 deletions
@@ -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);
@@ -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);
@@ -1,5 +1,5 @@
<?php
$this->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'));
?>
<body>
<div class="row">
@@ -20,7 +20,7 @@ $this->load->view('templates/header', array('title' => 'StudienjahrList', 'table
<tbody>
<?php foreach ($studienjahr as $jahr):
$escapedstudienjahrkurzbz = str_replace("/", "_", $jahr->studienjahr_kurzbz);
?>
?>
<tr>
<td><?php echo $jahr->studienjahr_kurzbz; ?></td>
<td><?php echo $jahr->bezeichnung; ?></td>
@@ -6,7 +6,7 @@ $this->load->view('templates/header', array('title' => 'StudienjahrEdit', 'jquer
<div class="row">
<div class="row">
<div class="span4">
<h2>Studienjahr bearbeiten: <?php echo $jahr->bezeichnung; ?></h2>
<h2>Studienjahr bearbeiten: <?php echo $jahr->studienjahr_kurzbz; ?></h2>
<form method="post" action="<?php echo APP_ROOT."index.ci.php/organisation/studienjahr/saveStudienjahr" ?>">
<table>
@@ -1,5 +1,5 @@
<?php
$bezeichnung = (isset($jahr->bezeichnung))?$jahr->bezeichnung:(isset($studienjahrkurzbz)?"Studienjahr ".$studienjahrkurzbz:"");
$bezeichnung = (isset($jahr->bezeichnung)) ? $jahr->bezeichnung : (isset($studienjahrkurzbz) ? "Studienjahr ".$studienjahrkurzbz : "");
?>
<tr>
@@ -44,6 +44,6 @@ $bezeichnung = (isset($jahr->bezeichnung))?$jahr->bezeichnung:(isset($studienjah
</table>
<br />
<br/>
<div class="input_ok"><?php if (isset($_GET['saved']) && $_GET['saved']) echo 'Studienjahr wurde gespeichert.'; ?></div>
<div class="input_error" id="errormessage"></div>
@@ -8,7 +8,8 @@ $this->load->view('templates/header', array('title' => 'StudienjahrNew', 'jquery
<div class="span4">
<h2>Neues Studienjahr anlegen</h2>
<form method="post"
action="<?php echo APP_ROOT."index.ci.php/organisation/studienjahr/insStudienjahr"; ?>" id="newStudienjahrForm">
action="<?php echo APP_ROOT."index.ci.php/organisation/studienjahr/insStudienjahr"; ?>"
id="newStudienjahrForm">
<table>
<tr>
<td colspan="2">
@@ -22,6 +23,11 @@ $this->load->view('templates/header', array('title' => 'StudienjahrNew', 'jquery
</div>
</div>
<script>
/**
* 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
*/
$('#newStudienjahrForm').submit(function (event) {
var studienjahrkurzbez = $('input[name=studienjahrkurzbz]').val();
if (checkStudienjahrkurzbez(studienjahrkurzbez))return;
@@ -29,11 +35,18 @@ $this->load->view('templates/header', array('title' => 'StudienjahrNew', 'jquery
event.preventDefault();
});
function checkStudienjahrkurzbez(semesterkurzbez) {
var firstyear = parseInt(semesterkurzbez.substr(2,2));
var secondyear = parseInt(semesterkurzbez.substr(5,2));
/**
* checks correct Studienjahrkurzbezeichnung format with regex
* first check is whether the form ist right: e.g. 2017/18
* second check is whether first year is second year - 1
* @param studienjahrkurzbez
* @returns {boolean} whether the Studienjahrkurzbezeichnung has correct format
*/
function checkStudienjahrkurzbez(studienjahrkurzbez) {
var firstyear = parseInt(studienjahrkurzbez.substr(2, 2));
var secondyear = parseInt(studienjahrkurzbez.substr(5, 2));
var pattern = /^\d{4}\/\d{2}$/;
return pattern.test(semesterkurzbez) && secondyear - firstyear === 1;
return pattern.test(studienjahrkurzbez) && secondyear - firstyear === 1;
}
</script>
</body>
@@ -1,5 +1,5 @@
<?php
$this->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'));
?>
<body>
<div class="row">
@@ -7,10 +7,11 @@ $this->load->view('templates/header', array('title' => 'StudiensemesterEdit', 'd
<div class="row">
<div class="span4">
<h2>Studiensemester bearbeiten: <?php echo $sem->studiensemester_kurzbz; ?></h2>
<form method="post" action="<?php echo APP_ROOT."index.ci.php/organisation/studiensemester/saveStudiensemester" ?>">
<form method="post"
action="<?php echo APP_ROOT."index.ci.php/organisation/studiensemester/saveStudiensemester" ?>">
<table>
<?php include('studiensemesterForm.php'); ?>
<input type="hidden" name="semkurzbz" value="<?php echo $sem->studiensemester_kurzbz; ?>"/>
<input type="hidden" name="semkurzbz" value="<?php echo $sem->studiensemester_kurzbz; ?>"/>
</form>
</div>
</div>
@@ -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);
}
</script>
</body>
</html>