mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
492 lines
15 KiB
PHP
492 lines
15 KiB
PHP
<?php
|
|
/* Copyright (C) 2006 Technikum-Wien
|
|
*
|
|
* 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: Christian Paminger <christian.paminger@technikum-wien.at>,
|
|
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
|
|
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>,
|
|
* Manfred Kindl <manfred.kindl@technikum-wien.at>
|
|
* Cristina Hainberger <hainberg@technikum-wien.at>
|
|
*/
|
|
|
|
require_once('../../config/cis.config.inc.php');
|
|
require_once('../../config/global.config.inc.php');
|
|
require_once('../../include/basis_db.class.php');
|
|
require_once('../../include/sprache.class.php');
|
|
require_once '../../include/phrasen.class.php';
|
|
require_once '../../include/studiengang.class.php';
|
|
require_once('../../include/gebiet.class.php');
|
|
|
|
if (!$db = new basis_db())
|
|
die('Fehler beim Oeffnen der Datenbankverbindung');
|
|
|
|
// Start session
|
|
require_once './session_init.php';
|
|
|
|
// If language is changed by language select menu, reset language and session variables
|
|
if(isset($_GET['sprache_user']) && !empty($_GET['sprache_user']))
|
|
{
|
|
$sprache_user = $_GET['sprache_user'];
|
|
$_SESSION['sprache_user'] = $_GET['sprache_user'];
|
|
}
|
|
|
|
// Set language variable, which impacts the navigation menu
|
|
$sprache_user = (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) ? $_SESSION['sprache_user'] : DEFAULT_LANGUAGE;
|
|
$p = new phrasen($sprache_user);
|
|
|
|
?><!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<link href="../../skin/style.css.php" rel="stylesheet" type="text/css">
|
|
<link rel="stylesheet" href="../../vendor/twbs/bootstrap3/dist/css/bootstrap.min.css" type="text/css"/>
|
|
<script type="text/javascript" src="../../vendor/components/jquery/jquery.min.js"></script>
|
|
<script type="text/javascript" src="../../vendor/twbs/bootstrap3/dist/js/bootstrap.min.js"></script>
|
|
</head>
|
|
|
|
<body scroll="no">
|
|
<?php
|
|
$gebiet_hasMathML = false; // true, wenn irgendein Gebiet eine/n Frage/Vorschlag im MathML-Format enthält
|
|
$invalid_gebiete = false;
|
|
if ((isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true) &&
|
|
isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === false)
|
|
{
|
|
exit;
|
|
}
|
|
else if (isset($_SESSION['pruefling_id']))
|
|
{
|
|
//content_id fuer Einfuehrung auslesen
|
|
$qry = "SELECT content_id FROM testtool.tbl_ablauf_vorgaben WHERE studiengang_kz=".$db->db_add_param($_SESSION['studiengang_kz'])." LIMIT 1";
|
|
$result = $db->db_query($qry);
|
|
|
|
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0" style="border-right-width:1px;border-right-color:#BCBCBC; border-collapse: separate;
|
|
border-spacing: 0 3px;">';
|
|
|
|
// Link zur Startseite
|
|
echo '<tr><td class="ItemTesttool" style="margin-left: 20px;" nowrap>
|
|
<a class="ItemTesttool navButton" href="login.php" onclick="return loadContent(this.href);">'.$p->t('testtool/startseite').'</a>
|
|
</td></tr>';
|
|
|
|
// Link zur Einleitung
|
|
if ($content_id = $db->db_fetch_object($result))
|
|
{
|
|
if($content_id->content_id!='')
|
|
{
|
|
echo '
|
|
<tr id="tr-einleitung"><td class="ItemTesttool" style="margin-left: 20px;" nowrap>
|
|
<a class="ItemTesttool navButton" href="../../cms/content.php?content_id='.$content_id->content_id.'&sprache='.$sprache_user.'" onclick="return loadContent(this.href);">'.$p->t('testtool/einleitung').'</a>
|
|
</td></tr>
|
|
';
|
|
}
|
|
}
|
|
echo '<tr><td style="padding-left: 20px;" nowrap>';
|
|
|
|
$studiengang_kz = (isset($_SESSION['studiengang_kz'])) ? $_SESSION['studiengang_kz'] : '';
|
|
$stg = new Studiengang($studiengang_kz);
|
|
|
|
$sprache_mehrsprachig = new sprache();
|
|
$bezeichnung_mehrsprachig = $sprache_mehrsprachig->getSprachQuery('bezeichnung_mehrsprachig');
|
|
|
|
/**
|
|
* Spaltennamen-Aliase extrahieren um sie im Outer-Select verwenden zu können
|
|
* $bezeichnung_mehrsprachig liefert: bezeichnung_mehrsprachig[1] as bezeichnung_mehrsprachig_1,...
|
|
* $bezeichnung_mehrsprachig_sel liefert: bezeichnung_mehrsprachig_1, bezeichnung_mehrsprachig_2,...
|
|
*/
|
|
$bezeichnung_mehrsprachig_sel = explode(",", $bezeichnung_mehrsprachig);
|
|
foreach ($bezeichnung_mehrsprachig_sel as &$bm)
|
|
{
|
|
$bm = strrchr($bm, ' as ');
|
|
}
|
|
$bezeichnung_mehrsprachig_sel = implode(', ', $bezeichnung_mehrsprachig_sel);
|
|
|
|
/**
|
|
* Reihungstestgebiete der Person ermitteln; Zusammenfassen, falls RT für mehrere Studien
|
|
* 1. Aktuelle Prestudenten zur Person über den Prüfling ermitteln,
|
|
* 2. Einstiegssemester (Erstsemester/Quereinsteiger) und Studienplan pro Prestudent ermitteln,
|
|
* 3. RT-Gebiete falls vorhanden über Studienplan, sonst über STG ermitteln
|
|
* 4. Für Quereinsteiger zusätzlich auch Erstsemestrigen-Gebiete
|
|
*/
|
|
$qry = "
|
|
WITH prestudent_data AS
|
|
(
|
|
SELECT DISTINCT ON (prestudent_id)
|
|
prestudent_id,
|
|
studienplan_id,
|
|
studiengang_kz,
|
|
typ,
|
|
tbl_studiengangstyp.bezeichnung AS typ_bz,
|
|
ausbildungssemester AS semester
|
|
FROM
|
|
public.tbl_prestudentstatus AS ps_status
|
|
JOIN
|
|
public.tbl_prestudent USING (prestudent_id)
|
|
JOIN
|
|
public.tbl_studiengang USING (studiengang_kz)
|
|
JOIN
|
|
public.tbl_studiengangstyp USING (typ)
|
|
WHERE
|
|
tbl_prestudent.person_id = (
|
|
SELECT
|
|
person_id
|
|
FROM
|
|
public.tbl_prestudent
|
|
WHERE
|
|
prestudent_id = ".$db->db_add_param($_SESSION['prestudent_id'])."
|
|
)
|
|
|
|
/* Filter only future studiensemester (incl. actual one) */
|
|
AND
|
|
studiensemester_kurzbz IN (
|
|
SELECT
|
|
studiensemester_kurzbz
|
|
FROM
|
|
public.tbl_studiensemester
|
|
WHERE
|
|
ende > now()
|
|
)
|
|
|
|
/* Filter out all Abgewiesene */
|
|
AND NOT EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
tbl_prestudentstatus
|
|
WHERE
|
|
status_kurzbz = 'Abgewiesener'
|
|
AND
|
|
prestudent_id = ps_status.prestudent_id
|
|
)
|
|
|
|
AND
|
|
status_kurzbz = 'Interessent'";
|
|
|
|
/* If the logged-in prestudents study is a Bachelor-study, filter only Bachelor-studies */
|
|
if ($stg->typ == 'b')
|
|
{
|
|
$qry .= "
|
|
AND tbl_studiengang.typ = 'b'";
|
|
}
|
|
/* If the logged-in prestudents study is NOT a Bachelor-study, get only the specific study */
|
|
else
|
|
{
|
|
$qry .= "
|
|
AND tbl_studiengang.studiengang_kz = ". $studiengang_kz;
|
|
}
|
|
|
|
$qry .= "
|
|
AND ps_status.bewerbung_abgeschicktamum IS NOT NULL
|
|
|
|
/* Order to get last semester when using distinct on */
|
|
ORDER BY
|
|
prestudent_id,
|
|
datum DESC,
|
|
ps_status.insertamum DESC,
|
|
ps_status.ext_id DESC
|
|
)
|
|
|
|
|
|
SELECT DISTINCT ON
|
|
(gebiet_id, semester, reihung)
|
|
semester,
|
|
gebiet_id,
|
|
STRING_AGG(studiengang_kz::TEXT, ', ' ORDER BY studiengang_kz) AS studiengang_kz_list,
|
|
bezeichnung,
|
|
MIN(reihung) AS reihung,
|
|
". $bezeichnung_mehrsprachig_sel. "
|
|
FROM (
|
|
SELECT
|
|
*
|
|
FROM (
|
|
(SELECT
|
|
prestudent_data.semester AS ps_sem,
|
|
gebiet_id,
|
|
bezeichnung,
|
|
tbl_ablauf.studienplan_id,
|
|
tbl_ablauf.studiengang_kz,
|
|
tbl_ablauf.semester,
|
|
tbl_ablauf.reihung,
|
|
".$bezeichnung_mehrsprachig. "
|
|
FROM
|
|
prestudent_data
|
|
JOIN
|
|
testtool.tbl_ablauf USING (studiengang_kz)
|
|
JOIN
|
|
testtool.tbl_gebiet USING (gebiet_id)
|
|
WHERE
|
|
(
|
|
(prestudent_data.semester= 1 AND tbl_ablauf.semester = 1)
|
|
OR
|
|
(prestudent_data.semester= 2 AND tbl_ablauf.semester = 2)
|
|
OR
|
|
(prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3))
|
|
)
|
|
AND (
|
|
prestudent_data.studienplan_id = tbl_ablauf.studienplan_id
|
|
OR
|
|
tbl_ablauf.studienplan_id IS NULL
|
|
)
|
|
)
|
|
|
|
UNION
|
|
|
|
(
|
|
SELECT
|
|
prestudent_data.semester AS ps_sem,
|
|
gebiet_id,
|
|
bezeichnung,
|
|
tbl_ablauf.studienplan_id,
|
|
tbl_ablauf.studiengang_kz,
|
|
tbl_ablauf.semester,
|
|
tbl_ablauf.reihung,
|
|
". $bezeichnung_mehrsprachig. "
|
|
FROM
|
|
prestudent_data
|
|
JOIN
|
|
testtool.tbl_ablauf USING (studienplan_id)
|
|
JOIN
|
|
testtool.tbl_gebiet USING (gebiet_id)
|
|
WHERE
|
|
(prestudent_data.semester= 1 AND tbl_ablauf.semester = 1)
|
|
OR
|
|
(prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3))
|
|
)
|
|
) temp
|
|
) temp2
|
|
|
|
GROUP BY
|
|
semester,
|
|
gebiet_id,
|
|
bezeichnung,
|
|
". $bezeichnung_mehrsprachig_sel ."
|
|
|
|
ORDER BY
|
|
semester,
|
|
reihung,
|
|
gebiet_id
|
|
";
|
|
|
|
$result = $db->db_query($qry);
|
|
$anzahlGebiete = $db->db_num_rows($result);
|
|
$lastsemester = '';
|
|
$quereinsteiger_stg = '';
|
|
$_SESSION['alleGebiete']= [];
|
|
while($row = $db->db_fetch_object($result))
|
|
{
|
|
//Jedes Semester in einer eigenen Tabelle anzeigen
|
|
if($lastsemester!=$row->semester)
|
|
{
|
|
if($lastsemester!='')
|
|
{
|
|
echo '</table>';
|
|
}
|
|
$lastsemester = $row->semester;
|
|
|
|
echo '<table border="0" cellspacing="0" cellpadding="0" id="Gebiet" style="display: visible; border-collapse: separate; border-spacing: 0 3px; margin-top: 5px;">';
|
|
echo '<tr><td class="HeaderTesttool">'. ($row->semester == '1' ? $p->t('testtool/basisgebiete') : $p->t('testtool/quereinstiegsgebiete')).'</td></tr>';
|
|
}
|
|
|
|
// Bei Quereinstiegsgebieten nach STG clustern und die STG anzeigen
|
|
if($row->semester != '1')
|
|
{
|
|
if($quereinsteiger_stg != $row->studiengang_kz_list)
|
|
{
|
|
//echo "<br>"; // Abstand zwischen Erstsemester- und Quereinstiegs-Gebietsblock
|
|
$quereinsteiger_stg = $row->studiengang_kz_list;
|
|
$quereinsteiger_stg_arr = explode(',', $row->studiengang_kz_list);
|
|
$quereinsteiger_stg_string = '';
|
|
$cnt = 0;
|
|
foreach ($quereinsteiger_stg_arr as $qe_stg)
|
|
{
|
|
$stg = new Studiengang($qe_stg);
|
|
$quereinsteiger_stg_string .= ($cnt > 0) ? ",<br>" : '';
|
|
$quereinsteiger_stg_string .= $stg->bezeichnung;
|
|
$cnt++;
|
|
}
|
|
echo '<tr><td bgcolor="#73a9d6" class="HeaderTesttoolSTG">'. $quereinsteiger_stg_string. '</td></tr>';
|
|
}
|
|
}
|
|
$gebiet = new gebiet();
|
|
|
|
// Prüfen, ob das Gebiet eine/n Frage/Vorschlag im MathML-Format enthält
|
|
if (!$gebiet_hasMathML) // sobald nur ein MathML Format gefunden, variable nicht mehr überschreiben
|
|
{
|
|
$gebiet_hasMathML = $gebiet->hasMathML($row->gebiet_id);
|
|
}
|
|
|
|
if($gebiet->check_gebiet($row->gebiet_id))
|
|
{
|
|
//Status der Gebiete Pruefen
|
|
$gebiet->load($row->gebiet_id);
|
|
|
|
$qry = "SELECT extract('epoch' from '".$gebiet->zeit."'-(now()-min(begintime))) as time
|
|
FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id)
|
|
WHERE gebiet_id=".$db->db_add_param($row->gebiet_id)." AND pruefling_id=".$db->db_add_param($_SESSION['pruefling_id']);
|
|
if($result_time = $db->db_query($qry))
|
|
{
|
|
if($row_time = $db->db_fetch_object($result_time))
|
|
{
|
|
if($row_time->time>0)
|
|
{
|
|
//Gebiet gestartet aber noch nicht zu ende
|
|
$style='';
|
|
$class='ItemTesttool ItemTesttoolAktiv';
|
|
}
|
|
else
|
|
{
|
|
if($row_time->time=='')
|
|
{
|
|
//Gebiet noch nicht gestartet
|
|
$style='';
|
|
$class='ItemTesttool';
|
|
}
|
|
else
|
|
{
|
|
//Gebiet ist zu Ende
|
|
$style='';
|
|
$class='ItemTesttool ItemTesttoolBeendet';
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$style='';
|
|
$class='ItemTesttool';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$style='';
|
|
$class='ItemTesttool';
|
|
}
|
|
|
|
// Fallback für Gebietbezeichnung, falls nicht in gewählter Sprache vorhanden
|
|
$gebietbezeichnung = $sprache_mehrsprachig->parseSprachResult("bezeichnung_mehrsprachig", $row)[$sprache_user];
|
|
if ($gebietbezeichnung == '')
|
|
{
|
|
$gebietbezeichnung = $sprache_mehrsprachig->parseSprachResult("bezeichnung_mehrsprachig", $row)[DEFAULT_LANGUAGE];
|
|
|
|
if ($gebietbezeichnung == '')
|
|
{
|
|
$gebietbezeichnung = $row->bezeichnung;
|
|
}
|
|
}
|
|
|
|
|
|
echo '<tr>
|
|
<!--<td width="10" class="ItemTesttoolLeft" nowrap> </td>-->
|
|
|
|
<td class="'.$class.'">
|
|
<a class="'.$class.'" href="frage.php?gebiet_id='.$row->gebiet_id.'" onclick="return loadContent(this.href);" style="'.$style.'">'.$gebietbezeichnung.'</a>
|
|
|
|
</td>
|
|
<!--<td width="10" class="ItemTesttoolRight" nowrap> </td>-->
|
|
</tr>';
|
|
$_SESSION['alleGebiete'][] = $row->gebiet_id;
|
|
}
|
|
else
|
|
{
|
|
$invalid_gebiete = true;
|
|
}
|
|
}
|
|
if ($anzahlGebiete > 0)
|
|
{
|
|
echo '</table>';
|
|
}
|
|
|
|
if (isset($_SESSION['pruefling_id']) && !empty($_SESSION['alleGebiete']))
|
|
{
|
|
$alleGebiete = array_map('intval', $_SESSION['alleGebiete']);
|
|
$pruefling_id = (int)$_SESSION['pruefling_id'];
|
|
|
|
$qry = "SELECT COUNT(DISTINCT gebiet_id) AS anzahl
|
|
FROM testtool.tbl_pruefling_frage
|
|
JOIN testtool.tbl_frage USING(frage_id)
|
|
WHERE gebiet_id IN (". implode(',', $alleGebiete) .")
|
|
AND pruefling_id = ". $pruefling_id;
|
|
|
|
$result_check = $db->db_query($qry);
|
|
$row_check = $db->db_fetch_object($result_check);
|
|
|
|
if ((int)$row_check->anzahl === count($alleGebiete))
|
|
{
|
|
echo '<tr><td>
|
|
<div class="alert alert-success small" style="margin-left: 20px; width: 170px; margin-top: 3px;" role="alert">
|
|
<strong>'.$p->t('testtool/alleGebietGestartet').'</strong>
|
|
</div>
|
|
</td></tr>';
|
|
}
|
|
}
|
|
// Link zum Logout
|
|
|
|
echo '<tr><td class="ItemTesttool" style="margin-left: 20px;" nowrap>
|
|
<a class="ItemTesttool navButton" href="login.php?logout=true" onclick="return loadContent(this.href);">Logout</a>
|
|
</td></tr>';
|
|
|
|
echo '</td></tr></table>';
|
|
}
|
|
else
|
|
{
|
|
echo '</td></tr></table>';
|
|
}
|
|
?>
|
|
</body>
|
|
|
|
<script type="text/javascript">
|
|
$(document).ready(function () {
|
|
$(document).on("keydown", function (e) {
|
|
if (((e.ctrlKey || e.metaKey) && e.keyCode === 85) || e.keyCode === 123) {
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
|
|
$(document).on("contextmenu", function (e) {
|
|
e.preventDefault();
|
|
});
|
|
});
|
|
// Error massage if check_gebiet function returns false
|
|
$(function() {
|
|
var invalid_gebiete = "<?php echo (isset($invalid_gebiete)?$invalid_gebiete:''); ?>";
|
|
if(invalid_gebiete == true)
|
|
{
|
|
$('#tr-einleitung').append('' +
|
|
'<tr><td>' +
|
|
'<div class="alert alert-danger small" style="margin-left: 20px; margin-bottom:-3px; width: 170px; margin-top: 3px;" role="alert">' +
|
|
'<span class="text-uppercase"><strong><?php echo $p->t("errors/achtung"); ?></strong></span><br>' +
|
|
'<?php echo $p->t("testtool/invalideGebiete"); ?>' +
|
|
'</div>' +
|
|
'</td></tr>');
|
|
}
|
|
});
|
|
|
|
function loadContent(url)
|
|
{
|
|
if (parent && typeof parent.loadInContent === 'function')
|
|
{
|
|
parent.loadInContent(url);
|
|
return false;
|
|
}
|
|
|
|
let frame = parent?.frames?.["content"];
|
|
if (frame)
|
|
{
|
|
frame.location.href = url;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</html>
|