Files
FHC-Core/vilesci/lehre/lehrveranstaltung_kompatibel_vergleichen.php
T
ma0048 374c1b66b5 alle fehlenden lvs markieren
alle abwaehlen
id im title
beim delete autocomplete beruecksichtigen
2025-09-02 12:56:45 +02:00

760 lines
20 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/studiengang.class.php');
require_once('../../include/functions.inc.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/fachbereich.class.php');
require_once('../../include/lvinfo.class.php');
require_once('../../include/lehrveranstaltung.class.php');
require_once('../../include/organisationsform.class.php');
require_once('../../include/organisationseinheit.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
$getKompatibleLVs = filter_input(INPUT_POST, 'getKompatibleLVs', FILTER_VALIDATE_BOOLEAN);
if ($getKompatibleLVs)
{
if (isset($_POST['lv_id']))
{
$lv = new lehrveranstaltung();
$lv->load($_POST['lv_id']);
$kompatibleLvs = $lv->loadLVkompatibel($_POST['lv_id']);
if (is_array($kompatibleLvs) && count($kompatibleLvs) > 0)
{
$result = array();
foreach($kompatibleLvs as $lvId)
{
$lv->load($lvId);
$studiengang = new studiengang();
$studiengang->load($lv->studiengang_kz);
$oe = new organisationseinheit();
$oe->load($lv->oe_kurzbz);
$result[] = array(
"lehrveranstaltung_id" => $lv->lehrveranstaltung_id,
"kurzbz" => $lv->kurzbz,
"bezeichnung" => $lv->bezeichnung,
"ects" => $lv->ects,
"studiengang_kuerzel" => $studiengang->kuerzel,
"oe_bezeichnung" => $oe->bezeichnung
);
}
echo json_encode(["result" => $result]);
exit();
}
echo json_encode(["result" => array()]);
exit();
}
}
if (isset($_REQUEST['autocomplete']) && ($_REQUEST['autocomplete'] === 'From' || $_REQUEST['autocomplete'] === 'To'))
{
$search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : ''));
if (is_null($search) || $search == '')
{
exit();
}
$qry = "SELECT lehre.tbl_lehrveranstaltung.*
FROM lehre.tbl_lehrveranstaltung
WHERE
lower(bezeichnung) like '%" . $db->db_escape(mb_strtolower($search)) . "%' OR
lehrveranstaltung_id::text like '%" . $db->db_escape(mb_strtolower($search)) . "%' OR
studiengang_kz::text like '%" . $db->db_escape(mb_strtolower($search)) . "%'
ORDER BY lehrveranstaltung_id DESC
LIMIT 10
";
if ($result = $db->db_query($qry))
{
$result_obj = array();
while ($row = $db->db_fetch_object($result))
{
$item['lehrveranstaltung_id'] = html_entity_decode($row->lehrveranstaltung_id);
$item['bezeichnung'] = html_entity_decode($row->bezeichnung);
$item['oe_kurzbz'] = html_entity_decode($row->oe_kurzbz);
$result_obj[] = $item;
}
echo json_encode($result_obj);
}
exit();
}
?><!DOCTYPE html>
<html>
<head>
<title>Lehrveranstaltung Verwaltung</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../skin/fhcomplete.css" type="text/css">
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
<link rel="stylesheet" href="../../skin/jquery.css" type="text/css"/>
<script type="text/javascript" src="../../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<link rel="stylesheet" href="../../skin/tablesort.css" type="text/css"/>
<style>
.container {
display: flex;
gap: 20px;
width: 100%;
}
.box {
flex: 1;
padding: 20px;
border: 1px solid #333;
text-align: center;
width: 50%;
}
.lvDropdown {
width: 100%;
}
.missing-in-to td {
background-color: #fff3cd !important;
}
.autocomplete {
width: 100%;
box-sizing: border-box;
}
.hidden {
visibility: hidden;
}
</style>
<script>
$(document).ready(function () {
initBox("From");
initBox("To");
searchDropdownCleaner("From")
searchDropdownCleaner("To")
$('#kompatibleLVsUbernehmen').on("click", function() {
let lvidFrom = $('#lvDropdownFrom').val();
let lvidTo = $('#lvDropdownTo').val();
let uebernahmenCheckboxen = $("input[name='lvUebernehmenCheckbox']:checked");
let checkboxenUebernahmeCount = uebernahmenCheckboxen.length;
let lvidautoFrom = $('#autocompleteFrom').data("lv-id");
let lvidautoTo = $('#autocompleteTo').data("lv-id");
if ((!lvidFrom && !lvidautoFrom) || (!lvidTo && !lvidautoTo))
{
alert("Bitte in beiden Dropdowns eine LV auswählen!");
return;
}
lvidTo = lvidTo || lvidautoTo;
if (checkboxenUebernahmeCount === 0)
{
alert("Bitte Kompatible LV´s auswählen die übernommen werden sollen!");
return;
}
let done = 0;
uebernahmenCheckboxen.each(function()
{
saveKompatibleLv(lvidTo, this.value, function() {
done++;
if (done === checkboxenUebernahmeCount)
{
let drodpwonval = $('#lvDropdownTo').val();
let autocompleteval = $('#autocompleteTo').data('lv-id');
if (drodpwonval)
{
$('#lvDropdownTo').trigger('change');
}
else if (autocompleteval)
{
callLoadKompatibleLvs(autocompleteval, 'To');
}
}
});
});
}),
$('#alleLVsMarkieren').on("click", function()
{
let checkboxen = $("#kompatibleLVsFrom tbody tr.missing-in-to").find("input[name='lvUebernehmenCheckbox']");
checkboxen.prop("checked", true);
}),
$('#alleLVsAbwaehlen').on("click", function()
{
let checkboxen = $("#kompatibleLVsFrom tbody").find("input[name='lvUebernehmenCheckbox']");
checkboxen.prop("checked", false);
})
});
function searchDropdownCleaner(side)
{
let search = $("#autocomplete" + side);
let studiengang = $("#stgDropdown" + side);
let oe = $("#oeDropdown" + side);
let semester = $("#semDropdown" + side);
let lvDropdown = $("#lvDropdown" + side);
let dropdowns = [studiengang, oe, semester, lvDropdown];
search.on("input", function() {
if (search.val().trim().length > 0)
{
dropdowns.forEach(element => {
element.closest("tr").addClass("hidden");
});
}
else
{
dropdowns.forEach(element => {
element.closest("tr").removeClass("hidden");
});
}
})
}
function initBox(side)
{
loadSemester(side);
$('#stgDropdown' + side).on("change", function() {
loadSemester(side)
})
$('#oeDropdown' + side).on("change", function() {
loadLehrveranstaltungen(side)
})
$('#semDropdown' + side).on("change", function() {
loadLehrveranstaltungen(side)
})
$('#lvDropdown' + side).on("change", function() {
loadKompatibleLvs(side)
})
$('#kompatibleLVs' + side).data('ts-initialized', false);
$("#autocomplete" + side).autocomplete({
source: "lehrveranstaltung_kompatibel_vergleichen.php?autocomplete=" + side,
minLength: 3,
response: function(event, ui) {
for (let i in ui.content) {
if (ui.content.hasOwnProperty(i))
{
let option = ui.content[i];
option.value = option.bezeichnung + " (" + option.lehrveranstaltung_id + "/" + option.oe_kurzbz + ")";
option.label = option.bezeichnung + " (" + option.lehrveranstaltung_id + "/" + option.oe_kurzbz + ")";
}
}
},
select: function(event, ui) {
callLoadKompatibleLvs(ui.item.lehrveranstaltung_id, side)
$(this).data("lv-id", ui.item.lehrveranstaltung_id);
$("#lvBezeichnung" + side).html(ui.item.bezeichnung + " (ID: " + ui.item.lehrveranstaltung_id + ")");
}
});
}
function sortTable(side)
{
if ($("#kompatibleLVs" + side + " tbody tr").length > 0 && !$('#kompatibleLVs' + side).data('ts-initialized'))
{
$('#kompatibleLVs' + side).tablesorter({
widgets: ["zebra"],
});
}
}
function loadSemester(side)
{
var studiengang_kz = $("#stgDropdown" + side).val();
$.ajax(
{
dataType: "json",
url: "../../soap/studienplan.json.php",
data: {
"method": "getSemesterFromStudiengang",
"studiengang_kz": studiengang_kz
}
}).success(function(data)
{
let html = "";
let result = Array.isArray(data?.result) ? data.result : [];
if (result.length > 0)
{
result.forEach(function(option)
{
html+="<option value='"+ option +"'>Semester "+ option +"</option>";
});
$("#semDropdown" + side).html(html);
}
loadLehrveranstaltungen(side);
});
}
function loadKompatibleLvs(side)
{
let lv_id = $("#lvDropdown" + side).val();
if (lv_id === null)
$("#lvBezeichnung" + side).html("")
else
{
let bezeichnung = $("#lvDropdown" + side + " option:selected").text();
$("#lvBezeichnung" + side).html(bezeichnung);
callLoadKompatibleLvs(lv_id, side)
}
}
function callLoadKompatibleLvs(lv_id, side)
{
$.ajax({
url: "lehrveranstaltung_kompatibel_vergleichen.php",
data: {
'getKompatibleLVs': true,
'lv_id' : lv_id
},
type: "POST",
dataType: "json",
success: function(data)
{
var html = "";
data.result.forEach(function(option)
{
html += "<tr data-lv-id='" + option.lehrveranstaltung_id + "'>" +
"<td>"+ option.lehrveranstaltung_id +"</td>" +
"<td>"+ option.kurzbz +"</td>" +
"<td>"+ option.bezeichnung +"</td>" +
"<td>"+ option.ects +"</td>" +
"<td>"+ option.studiengang_kuerzel +"</td>" +
"<td>"+ option.oe_bezeichnung +"</td>" +
(side === "From" ? "<td><input type='checkbox' name='lvUebernehmenCheckbox' value='" + option.lehrveranstaltung_id + "'></td>" : "") +
"<td>" +
"<a href='#' onclick=\"deleteKompatibleLv('" + lv_id + "', '" + option.lehrveranstaltung_id + "', '" + side + "')\">" +
"<img height='20' src='../../skin/images/false.png' alt='Delete'></a>" +
"</td>" +
"</tr>";
});
$("#kompatibleLVs" + side + " tbody").html(html);
sortTable(side);
markDifferences();
},
error: function(jqXHR, textStatus, errorThrown)
{
}
});
}
function markDifferences() {
let fromVal = $("#lvDropdownFrom").val();
let toVal = $("#lvDropdownTo").val();
let lvidautoFrom = $('#autocompleteFrom').data("lv-id");
let lvidautoTo = $('#autocompleteTo').data("lv-id");
fromVal = fromVal || lvidautoFrom;
toVal = toVal || lvidautoTo;
if (!fromVal || fromVal === "null" || !toVal || toVal === "null")
{
$("#kompatibleLVsFrom tbody tr").removeClass("missing-in-to");
return;
}
$("#kompatibleLVsFrom tbody tr").removeClass("missing-in-to");
$("#kompatibleLVsFrom tbody tr").each(function ()
{
const id = $(this).data("lv-id");
const existsInTo = $("#kompatibleLVsTo tbody tr[data-lv-id='" + id + "']").length > 0;
if (!existsInTo)
{
$(this).addClass("missing-in-to")
}
});
}
function loadLehrveranstaltungen(side)
{
let studiengang_kz = $("#stgDropdown" + side).val();
let semester = $("#semDropdown" + side).val();
let oe_kurzbz = $("#oeDropdown" + side).val();
if(oe_kurzbz === "null")
{
$.ajax(
{
dataType: "json",
url: "../../soap/fhcomplete.php",
type: "POST",
data: {
"typ": "json",
"class": "lehrveranstaltung",
"method": "load_lva",
"parameter_0": studiengang_kz,
"parameter_1": semester,
"parameter_2": "null",
"parameter_3": "null",
"parameter_4": "true"
}
}).success(function(data)
{
let html = "";
let result = Array.isArray(data?.result) ? data.result : [];
if (result.length > 0)
{
result.forEach(function(option)
{
if (option.lehrveranstaltung_id !== null)
html+="<option value='"+ option.lehrveranstaltung_id +"'>"+ option.bezeichnung + " (" + option.lehrveranstaltung_id + "/" + option.oe_kurzbz + ") </option>";
});
$("#lvDropdown" + side).html(html);
}
loadKompatibleLvs(side);
});
}
else
{
$.ajax(
{
dataType: "json",
url: "../../soap/fhcomplete.php",
type: "POST",
data: {
"typ": "json",
"class": "lehrveranstaltung",
"method": "load_lva_oe",
"parameter_0": oe_kurzbz,
"parameter_1": true,
"parameter_2": "null",
"parameter_3": "bezeichnung"
}
}).success(function(data)
{
let html = "";
let result = Array.isArray(data?.result) ? data.result : [];
if (result.length > 0)
{
result.forEach(function(option)
{
if (option.lehrveranstaltung_id !== null)
html+="<option value='"+ option.lehrveranstaltung_id +"'>"+ option.bezeichnung +"</option>";
});
$("#lvDropdown" + side).html(html);
}
loadKompatibleLvs(side);
});
}
}
function loadOrganisationseinheiten(side)
{
$.ajax(
{
dataType: "json",
url: "../../soap/fhcomplete.php",
type: "POST",
data: {
"typ": "json",
"class": "lehrveranstaltung",
"method": "load_lva",
"parameter_0": studiengang_kz,
"parameter_1": semester,
"parameter_2": "null",
"parameter_3": "null",
"parameter_4": "true"
}
}).success(function(data)
{
var html = "";
data.result.forEach(function(option)
{
html+="<option value='"+ option.lehrveranstaltung_id +"'>"+ option.bezeichnung +"</option>";
});
$("#lvDropdown" +side).html(html);
});
}
function saveKompatibleLv(lehrveranstaltung_id, kompatible_id, onComplete)
{
$.ajax(
{
dataType: "json",
url: "../../soap/lehrveranstaltung.json.php",
type: "POST",
data: {
"typ": "json",
"class": "lehrveranstaltung",
"method": "saveKompatibleLehrveranstaltung",
"lehrveranstaltung_id":lehrveranstaltung_id,
"lehrveranstaltung_id_kompatibel": kompatible_id
}
}).success(function(data)
{
if(data.error === "true")
{
alert(data.errormsg);
}
if (onComplete)
onComplete();
}).error(function(data)
{
alert(data.responseText);
if (onComplete)
onComplete();
});
}
function deleteKompatibleLv(lehrveranstaltung_id, lehrveranstaltung_id_kompatibel, side)
{
$.ajax(
{
dataType: "json",
url: "../../soap/lehrveranstaltung.json.php",
type: "POST",
data: {
"typ": "json",
"class": "lehrveranstaltung",
"method": "deleteKompatibleLehrveranstaltung",
"lehrveranstaltung_id":lehrveranstaltung_id,
"lehrveranstaltung_id_kompatibel":lehrveranstaltung_id_kompatibel
}
}).success(function(data)
{
if(data.error === "true")
{
alert(data.errormsg);
}
let fromValDropdown = $("#lvDropdownFrom").val();
let toValDropdwon = $("#lvDropdownTo").val();
let lvidautoFrom = $('#autocompleteFrom').data("lv-id");
let lvidautoTo = $('#autocompleteTo').data("lv-id");
let fromVal = fromValDropdown || lvidautoFrom;
let toVal = toValDropdwon || lvidautoTo;
if (fromVal === toVal)
{
if (fromValDropdown)
$('#lvDropdownFrom').trigger('change');
else if (lvidautoFrom)
callLoadKompatibleLvs(fromVal, 'From');
if (toValDropdwon)
$('#lvDropdownTo').trigger('change');
else if (lvidautoFrom)
callLoadKompatibleLvs(toVal, 'To');
}
else
{
let dropdownVal = $("#lvDropdown" + side).val();
let autoVal = $('#autocomplete' + side).data("lv-id");
if (dropdownVal)
{
$('#lvDropdown' + side).trigger('change');
}
else if (autoVal)
{
callLoadKompatibleLvs(autoVal, side);
}
}
}).error(function(data)
{
alert(data.responseText);
});
}
</script>
</head>
<body>
<?php
$user = get_uid();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user);
if(!$rechte->isBerechtigt('lehre/lehrveranstaltung', 'suid'))
die('Sie haben keine Berechtigung fuer diese Seite');
$studiengang = new studiengang();
$studiengang->getAll("kurzbzlang");
$organisationseinheit = new organisationseinheit();
$organisationseinheit->getAll(true, true);
echo "<div class='container'>
<div class='box'>
<div style='padding-top: 1em;'>
<table>
<tr>
<td><b>Suche: </b></td>
<td colspan='3'>
<input type='text' class='autocomplete' id='autocompleteFrom' placeholder='Suche...'/>
</td>
</tr>
<tr>
<td><b>Studiengang: </b></td>
<td>
<select id='stgDropdownFrom' style='margin-right: 1em;'>";
foreach($studiengang->result as $stg)
{
echo "<option value=".$stg->studiengang_kz.">".$stg->kuerzel." - ".$stg->kurzbzlang."</option>";
}
echo "</select>
</td>
<td><b>OE:</b></td>";
echo "<td>
<select id='oeDropdownFrom' style='margin-right: 1em;'>
<option value='null'>-- Keine --</option>";
foreach($organisationseinheit->result as $oe)
{
echo "<option value=".$oe->oe_kurzbz.">".$oe->organisationseinheittyp_kurzbz." ".$oe->bezeichnung."</option>";
}
echo "</select></td>
</tr>
<tr>
<td><b>Semester: </b></td>
<td>
<select id='semDropdownFrom' style='margin-right: 1em;'>
</select>
</td>
</tr>
<tr>
<td><b>Lehrveranstaltungen: </b></td>
<td colspan='3'>
<select class='lvDropdown' id='lvDropdownFrom'></select>
</td>
</tr>
</table>
</div>
Kompatible Lehrveranstaltungen - <span id='lvBezeichnungFrom'></span>
<br />
<br />
<input type='button' id='alleLVsMarkieren' value='Alle fehlenden auswählen'/>
<input type='button' id='alleLVsAbwaehlen' value='Alle abwählen'/>
<table style='width: auto;' class='tablesorter' id='kompatibleLVsFrom'>
<thead>
<tr>
<th>ID</th>
<th>Kurzbezeichnung</th>
<th>Bezeichnung</th>
<th>ECTS</th>
<th>Studiengang</th>
<th>Organisationseiheit</th>
<th>Übernehmen?</th>
<th>Löschen?</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<input type='button' id='kompatibleLVsUbernehmen' value='Übernehmen'/>
</div>
<div class='box'>
<div style='padding-top: 1em;'>
<table>
<tr>
<td><b>Suche: </b></td>
<td colspan='3'>
<input type='text' class='autocomplete' id='autocompleteTo' placeholder='Suche...'/>
</td>
</tr>
<tr>
<td><b>Studiengang: </b></td>
<td>
<select id='stgDropdownTo' style='margin-right: 1em;'>";
foreach($studiengang->result as $stg)
{
echo "<option value=".$stg->studiengang_kz.">".$stg->kuerzel." - ".$stg->kurzbzlang."</option>";
}
echo "</select>
</td>
<td><b>OE:</b></td>";
echo "<td>
<select id='oeDropdownTo' style='margin-right: 1em;'>
<option value='null'>-- Keine --</option>";
foreach($organisationseinheit->result as $oe)
{
echo "<option value=".$oe->oe_kurzbz.">".$oe->organisationseinheittyp_kurzbz." ".$oe->bezeichnung."</option>";
}
echo "</select></td>
</tr>
<tr>
<td><b>Semester: </b></td>
<td>
<select id='semDropdownTo' style='margin-right: 1em;'>
</select>
</td>
</tr>
<tr>
<td><b>Lehrveranstaltungen: </b></td>
<td colspan='3'>
<select class='lvDropdown' id='lvDropdownTo'></select>
</td>
</tr>
</table>
</div>
Kompatible Lehrveranstaltungen - <span id='lvBezeichnungTo'></span>
<table style='width: auto;' class='tablesorter' id='kompatibleLVsTo'>
<thead>
<tr>
<th>ID</th>
<th>Kurzbezeichnung</th>
<th>Bezeichnung</th>
<th>ECTS</th>
<th>Studiengang</th>
<th>Organisationseiheit</th>
<th>Löschen?</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
";
echo "</body>
</html>";
?>