Erweiterung der LV Regeln

This commit is contained in:
Andreas Österreicher
2013-11-25 13:02:59 +00:00
parent 20aa8639bf
commit 48e4303106
5 changed files with 376 additions and 24 deletions
+64
View File
@@ -1201,5 +1201,69 @@ class lehrveranstaltung extends basis_db {
return false;
}
}
/**
* Sucht nach Lehrveranstaltungen
* @param $filter Suchfilter
*/
public function search($filter)
{
$qry = "SELECT
tbl_lehrveranstaltung.*, tbl_studiengang.kurzbzlang as studiengang_kurzbzlang
FROM
lehre.tbl_lehrveranstaltung
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
lower(tbl_lehrveranstaltung.bezeichnung || ' ' || tbl_studiengang.kurzbzlang || ' ' || tbl_lehrveranstaltung.semester) like lower('%".$this->db_escape($filter)."%')
OR lower(tbl_studiengang.kurzbzlang || ' ' || tbl_lehrveranstaltung.semester || ' ' || tbl_lehrveranstaltung.bezeichnung) like lower('%".$this->db_escape($filter)."%')
";
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$lv_obj = new lehrveranstaltung();
$lv_obj->lehrveranstaltung_id = $row->lehrveranstaltung_id;
$lv_obj->studiengang_kz = $row->studiengang_kz;
$lv_obj->bezeichnung = $row->bezeichnung;
$lv_obj->kurzbz = $row->kurzbz;
$lv_obj->lehrform_kurzbz = $row->lehrform_kurzbz;
$lv_obj->semester = $row->semester;
$lv_obj->ects = $row->ects;
$lv_obj->semesterstunden = $row->semesterstunden;
$lv_obj->anmerkung = $row->anmerkung;
$lv_obj->lehre = $this->db_parse_bool($row->lehre);
$lv_obj->lehreverzeichnis = $row->lehreverzeichnis;
$lv_obj->aktiv = $this->db_parse_bool($row->aktiv);
$lv_obj->ext_id = $row->ext_id;
$lv_obj->insertamum = $row->insertamum;
$lv_obj->insertvon = $row->insertvon;
$lv_obj->planfaktor = $row->planfaktor;
$lv_obj->planlektoren = $row->planlektoren;
$lv_obj->planpersonalkosten = $row->planpersonalkosten;
$lv_obj->plankostenprolektor = $row->plankostenprolektor;
$lv_obj->updateamum = $row->updateamum;
$lv_obj->updatevon = $row->updatevon;
$lv_obj->sprache = $row->sprache;
$lv_obj->sort = $row->sort;
$lv_obj->incoming = $row->incoming;
$lv_obj->zeugnis = $this->db_parse_bool($row->zeugnis);
$lv_obj->projektarbeit = $this->db_parse_bool($row->projektarbeit);
$lv_obj->koordinator = $row->koordinator;
$lv_obj->bezeichnung_english = $row->bezeichnung_english;
$lv_obj->orgform_kurzbz = $row->orgform_kurzbz;
$lv_obj->studiengang_kurzbzlang = $row->studiengang_kurzbzlang;
$this->lehrveranstaltungen[] = $lv_obj;
}
return true;
}
else
{
$this->errormsg='Fehler bei Datenbankabfrage';
return false;
}
}
}
?>
+74 -16
View File
@@ -25,10 +25,12 @@
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/student.class.php');
require_once(dirname(__FILE__).'/prestudent.class.php');
require_once(dirname(__FILE__).'/studiensemester.class.php');
class lvregel extends basis_db
{
protected $new=true; // boolean
protected $new=true; // boolean
public $result = array(); // Result Objekt
//Tabellenspalten
@@ -47,6 +49,9 @@ class lvregel extends basis_db
protected $lvregeltyp_arr=array();
protected $bezeichnung; //varchar(256)
protected $lehrveranstaltung_bezeichnung;
protected $cache;
/**
* Konstruktor
*/
@@ -333,7 +338,7 @@ class lvregel extends basis_db
public function loadLVRegeln($studienplan_lehrveranstaltung_id)
{
$qry = 'SELECT
*
*, (SELECT bezeichnung FROM lehre.tbl_lehrveranstaltung WHERE lehrveranstaltung_id=tbl_lvregel.lehrveranstaltung_id) as lvbezeichnung
FROM
lehre.tbl_lvregel
WHERE
@@ -357,6 +362,7 @@ class lvregel extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updatevon = $row->updatevon;
$obj->updateamum = $row->updateamum;
$obj->lehrveranstaltung_bezeichnung = $row->lvbezeichnung;
$this->result[] = $obj;
}
@@ -371,6 +377,8 @@ class lvregel extends basis_db
/**
* Liefert die Lehrveranstaltungen als verschachtelten Tree
* @param $studienplan_lehrveranstaltung_id
* @return Array mit den verschachtelten Regeln
*/
public function getLVRegelTree($studienplan_lehrveranstaltung_id)
{
@@ -390,7 +398,9 @@ class lvregel extends basis_db
}
/**
* Generiert die Subtrees des Lehrveranstaltungstrees
* Generiert rekursiv die Subtrees des Lehrveranstaltungstrees
* @param $lvregel_id Regel ID des Teilbaumes
* @param Array mit den Subtree Elementen des Regelbaumes
*/
protected function getLVRegelTreeChilds($lvregel_id)
{
@@ -406,6 +416,9 @@ class lvregel extends basis_db
return $childs;
}
/**
* Erstellt ein Array aus dem Result Objekt für die Webservice Verwendung
*/
public function cleanResult()
{
$data = array();
@@ -430,6 +443,7 @@ class lvregel extends basis_db
$obj->lvregeltyp_kurzbz = $row->lvregeltyp_kurzbz;
$obj->bezeichnung = $row->bezeichnung;
$obj->lehrveranstaltung_bezeichnung = $row->lehrveranstaltung_bezeichnung;
$data[]=$obj;
}
}
@@ -451,33 +465,39 @@ class lvregel extends basis_db
$obj->lvregeltyp_kurzbz = $this->lvregeltyp_kurzbz;
$obj->bezeichnung = $this->bezeichnung;
$obj->lehrveranstaltung_bezeichnung = $this->lehrveranstaltung_bezeichnung;
$data[]=$obj;
}
return $data;
}
/**
* Prüft ob sich eine Studierender zu einer Lehrveranstaltung anmelden darf
* Prüft ob sich ein Student zu einer Lehrveranstaltung anmelden darf
* @param $uid UID des Studierenden
* @param $studienplan_lehrveranstaltung_id ID der Lehrveranstaltungszuordnung
*/
public function isZugangsberechtigt($uid, $studienplan_lehrveranstaltung_id)
public function isZugangsberechtigt($uid, $studienplan_lehrveranstaltung_id, $studiensemester_kurzbz=null)
{
$this->debug('Teste Zugangsberechtigung für '.$uid);
if($result = $this->getLVRegelTree($studienplan_lehrveranstaltung_id))
{
return $this->TestRegeln($uid, $result);
return $this->TestRegeln($uid, $result, $studiensemester_kurzbz);
}
}
public function TestRegeln($uid, $regel_obj)
/**
* Prueft die Regeln fuer einen Studierenden
* @param $uid UID des Studierenden
* @param $regel_obj Regel Baum
* @param $studiensemester_kurzbz Studiensemester das geprueft werden soll
*/
public function TestRegeln($uid, $regel_obj, $studiensemester_kurzbz=null)
{
$retval=true;
foreach($regel_obj as $regel)
{
$this->debug('<br>');
$testval = $this->Test($uid, $regel);
$testval = $this->Test($uid, $regel, $studiensemester_kurzbz);
$retval = $this->Compare($regel[0]->operator, $retval, $testval);
$this->debug(' - RETVAL:'.($retval?'TRUE':'FALSE'));
}
@@ -485,6 +505,13 @@ class lvregel extends basis_db
return $retval;
}
/**
* Vergleicht die Regeln untereinander anhand des Operators
* @param $operator Operator der Regel
* @param $retval Boolean Wert der Ausgangsregel
* @param $testval Boolean Wert der Vergleichsregel
* @return Boolean Ergebnis des Vergleichs
*/
public function Compare($operator, $retval, $testval)
{
switch($operator)
@@ -508,7 +535,13 @@ class lvregel extends basis_db
return $retval;
}
public function Test($uid, $regel_obj)
/**
* Testet die Regel für einen Studenten
* @param $uid User
* @param $regel_obj
* @param $studiensemester_kurzbz
*/
public function Test($uid, $regel_obj, $studiensemester_kurzbz=null)
{
$regel = $regel_obj[0];
@@ -517,20 +550,43 @@ class lvregel extends basis_db
switch($regel->lvregeltyp_kurzbz)
{
case 'ausbsemmin':
/* Prueft ob das Ausbildungssemester das mindestens erforderlich ist
um die Lehrveranstaltung zu besuchen */
$this->debug('Regeltyp ausbsemmin');
$student = new student();
$student->load($uid);
if($student->semester>=$regel->parameter)
// Wenn das Studiensemester nicht gesetzt ist, wird das aktuelle verwendet
if($studiensemester_kurzbz=='')
{
$this->debug('StudSem: '.$student->semester.' >= RegelParam: '.$regel->parameter);
$studiensemester = new studiensemester();
$studiensemester_kurzbz = $studiensemester->getaktorNext();
}
// Ausbildungssemester wird nur beim 1. durchlauf ermittelt
if(!isset($this->cache[$uid]) && !isset($this->cache[$uid][$studiensemester_kurzbz]))
{
$student = new student();
$student->load($uid);
// Ausbildungssemester aus dem Status holen
$prestudent = new prestudent();
if($prestudent->getLastStatus($student->prestudent_id, $studiensemester_kurzbz))
{
$this->cache[$uid][$studiensemester_kurzbz]=$prestudent->semester;
}
}
$ausbildungssemester = $this->cache[$uid][$studiensemester_kurzbz];
// Vergleichen des Ausbildungssemesters mit dem RegelParameter
if($ausbildungssemester>=$regel->parameter)
{
$this->debug('StudSem: '.$ausbildungssemester.' >= RegelParam: '.$regel->parameter);
$this->debug('TRUE');
$retval = true;
}
else
{
$this->debug('StudSem: '.$student->semester.' >= RegelParam: '.$regel->parameter);
$this->debug('StudSem: '.$ausbildungssemester.' >= RegelParam: '.$regel->parameter);
$this->debug('FALSE');
$retval = false;
}
@@ -576,6 +632,8 @@ class lvregel extends basis_db
// Eventuell in Addons nach Regeltypen suchen
break;
}
// Subregeln dieser LVRegel pruefen
if(isset($regel_obj['childs']) && count($regel_obj['childs'])>0)
{
$this->debug('<br> - Subregel '.$regel->lvregel_id.' -');
+35
View File
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../fhcomplete.css" />
<link rel="stylesheet" href="../vilesci.css" />
</head>
<body>
<h1>Bilder</h1>
<table>
<?php
$dir = dirname(__FILE__).'/';
if (is_dir($dir))
{
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if(filetype($dir . $file)=='file')
echo '
<tr>
<td>
<img src="'.$file.'" style="max-height:30px; max-width:50px" />
</td>
<td><a href="'.$file.'">'.$file.'</a></td>
</tr>';
//echo "filename: $file : filetype: " . . "\n";
}
closedir($dh);
}
}
?>
</table>
</body>
@@ -0,0 +1,75 @@
<?php
/* Copyright (C) 2013 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
*/
header( 'Expires: -1' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Pragma: no-cache' );
header('Content-Type: text/html;charset=UTF-8');
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/functions.inc.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/lehrveranstaltung.class.php');
if (!$uid = get_uid())
die('Keine UID gefunden');
$rechte = new benutzerberechtigung();
if(!$rechte->getBerechtigungen($uid))
die('Sie haben keine Berechtigung fuer diese Seite');
if(!$rechte->isBerechtigt('lehre/studienordnung'))
die('Sie haben keine Berechtigung fuer diese Seite');
$work = (isset($_REQUEST['work'])?$_REQUEST['work']:'');
switch ($work)
{
case 'searchlehrveranstaltung':
$filter=trim((isset($_REQUEST['term']) ? $_REQUEST['term']:''));
if (is_null($filter) || $filter=='')
exit();
$result=array();
$lehrveranstaltung = new lehrveranstaltung();
if(!$lehrveranstaltung->search($filter))
die($lehrveranstaltung->errormsg);
foreach($lehrveranstaltung->lehrveranstaltungen as $row)
{
$item['lehrveranstaltung_id']=$row->lehrveranstaltung_id;
$item['bezeichnung']=$row->bezeichnung;
$item['semester']=$row->semester;
$item['kurzbz']=$row->kurzbz;
$item['aktiv']=$row->aktiv;
$item['lehre']=$row->lehre;
$item['studiengang_kurzbzlang']=$row->studiengang_kurzbzlang;
$result[]=$item;
}
echo json_encode($result);
break;
default:
echo 'Unbekannter Vorgang';
break;
}
?>
+128 -8
View File
@@ -1,7 +1,7 @@
var LVREGEL_lvRegelTypen=''; // Array mit den Regeltypen
var LVREGELnewcounter=0; // Counter fuer neue Regeln
var LVREGELStudienplanLehrveranstaltungID=''; // ID der ausgewaehlten Lehrveranstaltungszuordnung
var LVREGELLehrveranstaltungAutocompleteArray=new Array(); // Enthaelt die IDs der Input Felder die zu Autocomplete Feldern werden sollen
/**
* Laedt die Regeln zu einer Lehrveranstaltungszuordnung
*/
@@ -9,9 +9,6 @@ function LVRegelnloadRegeln(studienplan_lehrveranstaltung_id)
{
LVREGELStudienplanLehrveranstaltungID=studienplan_lehrveranstaltung_id;
//$('#menueRechts').hide();
// Laden der Regeltypen
$.ajax(
{
@@ -63,6 +60,7 @@ function LVRegelnloadRegeln(studienplan_lehrveranstaltung_id)
function drawLVRegeln(data)
{
$('#LVREGELDetailsDialog').html(getChilds(data));
LVRegelAddAutocomplete();
jqUi("#LVREGELDetailsDialog").dialog( "open" );
}
@@ -93,6 +91,68 @@ function getChilds(data, parent='')
return obj;
}
/**
* Macht aus allen LV Input Feldern die zuvor angelegt wurden Autocomplete Felder
*/
function LVRegelAddAutocomplete()
{
for(var i in LVREGELLehrveranstaltungAutocompleteArray)
{
jqUi('#lvregel_lehrveranstaltung_id_autocomplete'+LVREGELLehrveranstaltungAutocompleteArray[i]).autocomplete({
source: function(request, response)
{
$.ajax({
url: "studienordnung_autocomplete.php",
datatype:"json",
data: {
term: request.term,
work: 'searchlehrveranstaltung',
},
success: function(data)
{
data=eval(data);
response($.map(data, function(item)
{
return {
value:item.lehrveranstaltung_id,
label:item.bezeichnung+' '+item.studiengang_kurzbzlang+' '+item.semester+'. Semester ('+item.lehrveranstaltung_id+')'
}
}));
}
});
},
minLength:3,
select: function(event, ui)
{
var lvregel_id = event.target.attributes.lvregel_id.value;
// ausgewaehlte ID in Hidden Feld speichern
$('#lvregel_lehrveranstaltung_id'+lvregel_id).val(ui.item.value);
// Bezeichnung im Textfeld anzeigen
$('#'+event.target.id).val(ui.item.label);
$('#lvregel_lehrveranstaltung_span'+lvregel_id).text(ui.item.label);
LVRegelShowAutocomplete(lvregel_id,false);
return false;
},
change: function(event,ui)
{
// Wenn das Textfeld geleert wird, auch die ID leeren
if(ui.item==null)
{
var lvregel_id = event.target.attributes.lvregel_id.value;
$('#lvregel_lehrveranstaltung_id'+lvregel_id).val('');
$('#'+event.target.id).val('');
$('#lvregel_lehrveranstaltung_span'+lvregel_id).text('klicken um LV auszuwählen');
LVRegelShowAutocomplete(lvregel_id,false);
}
}
});
$('#lvregel_lehrveranstaltung_id_autocomplete'+LVREGELLehrveranstaltungAutocompleteArray[i]).hide();
}
// Array wieder leeren
LVREGELLehrveranstaltungAutocompleteArray= new Array();
}
/**
* Zeichnet den Eintrag fuer eine Regel
*/
@@ -107,7 +167,7 @@ function drawRegel(regel)
val = val+'<li id="lvregel_li'+regel.lvregel_id+'" '+neustyle+'>';
val = val+'<input size="2" type="text" value="'+regel.lvregel_id+'" />';
val = val+'<input size="2" type="hidden" value="'+regel.lvregel_id+'" />';
val = val+'<input type="hidden" id="lvregel_lvregel_id_parent'+regel.lvregel_id+'" value="'+ClearNull(regel.lvregel_id_parent)+'" />';
val = val+'<input type="hidden" id="lvregel_studienplan_lehrveranstaltung_id'+regel.lvregel_id+'" value="'+regel.studienplan_lehrveranstaltung_id+'" />';
if(regel.neu==true)
@@ -125,7 +185,7 @@ function drawRegel(regel)
val = val+'</select>';
//LVRegelTypen
val = val+'<select id="lvregel_lvregeltyp'+regel.lvregel_id+'">';
val = val+'<select id="lvregel_lvregeltyp'+regel.lvregel_id+'" onchange="LVRegelTypChange(\''+regel.lvregel_id+'\')">';
for(var i in LVREGEL_lvRegelTypen)
{
@@ -139,10 +199,35 @@ function drawRegel(regel)
val = val+'</select>';
// Parameter
val = val+'<input type="text" size="1" id="lvregel_parameter'+regel.lvregel_id+'" value="'+ClearNull(regel.parameter)+'" />';
// Input Feld verstecken wenn der Typ LVpositiv ist
if(regel.lvregeltyp_kurzbz=='lvpositiv')
var style='style="display:none"';
else
var style='';
val = val+'<input type="text" '+style+' size="1" id="lvregel_parameter'+regel.lvregel_id+'" value="'+ClearNull(regel.parameter)+'" />';
if(regel.lvregeltyp_kurzbz=='lvpositiv')
var style='';
else
var style='style="display: none"';
val = val+'<span '+style+' id="lvregel_lehrveranstaltung_data'+regel.lvregel_id+'">';
// Lehrveranstaltung ID
val = val+'<input type="text" size="4" id="lvregel_lehrveranstaltung_id'+regel.lvregel_id+'" value="'+ClearNull(regel.lehrveranstaltung_id)+'" />';
val = val+'<input type="hidden" size="4" id="lvregel_lehrveranstaltung_id'+regel.lvregel_id+'" value="'+ClearNull(regel.lehrveranstaltung_id)+'" />';
// Autocomplete Feld fuer Lehrveranstaltung
val = val+'<input type="text" size="12" id="lvregel_lehrveranstaltung_id_autocomplete'+regel.lvregel_id+'" value="'+ClearNull(regel.lehrveranstaltung_bezeichnung)+'" lvregel_id="'+regel.lvregel_id+'"/>';
if(regel.lehrveranstaltung_bezeichnung==null || regel.lehrveranstaltung_bezeichnung=='undefined' || regel.lehrveranstaltung_bezeichnung=='')
var lvbezeichnung = 'klicken um LV auszuwählen';
else
var lvbezeichnung = regel.lehrveranstaltung_bezeichnung;
val = val+' <a href="#" style="font-size: x-small" onclick="LVRegelShowAutocomplete(\''+regel.lvregel_id+'\',true);return false;" id="lvregel_lehrveranstaltung_span'+regel.lvregel_id+'">'+lvbezeichnung+'</a>';
// Die Autocomplete Funktionalitaet wird erst hinzugefuegt, wenn das Input Feld tatsaechlich existiert und
// bis dort hin zwischengespeichert
LVREGELLehrveranstaltungAutocompleteArray[LVREGELLehrveranstaltungAutocompleteArray.length]=regel.lvregel_id; // WORKING
val = val+'</span>';
// Speichern Button
val = val+' <input type="button" onclick="saveRegel(\''+regel.lvregel_id+'\');return false;" value="ok">';
@@ -164,6 +249,37 @@ function drawRegel(regel)
return val;
}
function LVRegelTypChange(id)
{
var typ = $('#lvregel_lvregeltyp'+id+' option:selected').val();
if(typ=='lvpositiv')
{
$('#lvregel_lehrveranstaltung_data'+id).show();
$('#lvregel_parameter'+id).hide();
}
else
{
$('#lvregel_lehrveranstaltung_data'+id).hide();
$('#lvregel_parameter'+id).show();
}
}
function LVRegelShowAutocomplete(lvregel_id,show)
{
if(show)
{
$('#lvregel_lehrveranstaltung_id_autocomplete'+lvregel_id).show();
$('#lvregel_lehrveranstaltung_id_autocomplete'+lvregel_id).focus();
$('#lvregel_lehrveranstaltung_id_autocomplete'+lvregel_id).select();
$('#lvregel_lehrveranstaltung_span'+lvregel_id).hide();
}
else
{
$('#lvregel_lehrveranstaltung_id_autocomplete'+lvregel_id).hide();
$('#lvregel_lehrveranstaltung_span'+lvregel_id).show();
}
}
/**
* Speichert eine Regel
*/
@@ -176,6 +292,7 @@ function saveRegel(id)
var operator = $('#lvregel_operator'+id+' option:selected').val();
var studienplan_lehrveranstaltung_id = $('#lvregel_studienplan_lehrveranstaltung_id'+id).val();
var lvregel_id_parent = $('#lvregel_lvregel_id_parent'+id).val();
var lehrveranstaltung_bezeichnung=$('#lvregel_lehrveranstaltung_span'+id).text();
lvregel_id_parent=ClearNull(lvregel_id_parent);
// Vorhandene Eintraege werden vor dem Speichern geladen
@@ -219,9 +336,11 @@ function saveRegel(id)
{
// Gespeicherte Zeile neue Zeichnen
//$('#lvregel_li'+id).parent().append(drawRegel(data.result[0]));
data.result[0].lehrveranstaltung_bezeichnung=lehrveranstaltung_bezeichnung;
$(drawRegel(data.result[0])).insertAfter('#lvregel_li'+id);
// Neu Zeile entfernen
$('#lvregel_li'+id).remove();
LVRegelAddAutocomplete();
}
},
error: loadError
@@ -253,6 +372,7 @@ function addRegel(lvregel_id_parent)
{
$('#lvregel_li'+lvregel_id_parent).append('<ul id="lvregel_ul'+lvregel_id_parent+'">'+drawRegel(regel)+'<ul>');
}
LVRegelAddAutocomplete();
}
/**