diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index ddda4a8bd..d9b4ff1ed 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -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; + } + } } ?> diff --git a/include/lvregel.class.php b/include/lvregel.class.php index 360469dc3..424da7778 100644 --- a/include/lvregel.class.php +++ b/include/lvregel.class.php @@ -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('
'); - $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('
- Subregel '.$regel->lvregel_id.' -'); diff --git a/skin/images/index.php b/skin/images/index.php new file mode 100644 index 000000000..548d001b9 --- /dev/null +++ b/skin/images/index.php @@ -0,0 +1,35 @@ + + + + + + + + +

Bilder

+ + + + + '; + //echo "filename: $file : filetype: " . . "\n"; + } + closedir($dh); + } +} +?> +
+ + '.$file.'
+ diff --git a/vilesci/lehre/studienordnung_autocomplete.php b/vilesci/lehre/studienordnung_autocomplete.php new file mode 100644 index 000000000..345595b39 --- /dev/null +++ b/vilesci/lehre/studienordnung_autocomplete.php @@ -0,0 +1,75 @@ + + */ +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; +} +?> diff --git a/vilesci/lehre/studienordnung_lvregel.js b/vilesci/lehre/studienordnung_lvregel.js index fee8d7726..02e58fa50 100644 --- a/vilesci/lehre/studienordnung_lvregel.js +++ b/vilesci/lehre/studienordnung_lvregel.js @@ -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+'
  • '; - val = val+''; + val = val+''; val = val+''; val = val+''; if(regel.neu==true) @@ -125,7 +185,7 @@ function drawRegel(regel) val = val+''; //LVRegelTypen - val = val+''; for(var i in LVREGEL_lvRegelTypen) { @@ -139,10 +199,35 @@ function drawRegel(regel) val = val+''; // Parameter - val = val+''; + // Input Feld verstecken wenn der Typ LVpositiv ist + if(regel.lvregeltyp_kurzbz=='lvpositiv') + var style='style="display:none"'; + else + var style=''; + val = val+''; + + if(regel.lvregeltyp_kurzbz=='lvpositiv') + var style=''; + else + var style='style="display: none"'; + + val = val+''; // Lehrveranstaltung ID - val = val+''; + val = val+''; + + // Autocomplete Feld fuer Lehrveranstaltung + val = val+''; + 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+' '+lvbezeichnung+''; + // 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+''; // Speichern Button val = val+' '; @@ -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('