634 lines
23 KiB
JavaScript
634 lines
23 KiB
JavaScript
/**
|
||
* Created by Roland on 2021/07/01.
|
||
* Updated for BIBB Layout 2024
|
||
*/
|
||
// CORPORATES
|
||
|
||
// Show blank screen to add new Corporate
|
||
function newCorporatesShow() {
|
||
|
||
var b = document.getElementById("newCorporateSave");
|
||
b.style.display='inline';
|
||
var c = document.getElementById("newCorporateDismiss");
|
||
c.style.display='inline';
|
||
document.getElementById("CorporateModifySave").style.display = 'none';
|
||
document.getElementById("new_term").disabled = false;
|
||
document.getElementById("new_type").disabled = false;
|
||
document.getElementById("new_scopenote").disabled = false;
|
||
|
||
// Relationen-Bereich verstecken bei neuer Körperschaft
|
||
document.getElementById("new_relation_label").style.display = 'none';
|
||
document.getElementById("newRelationCorporateDismiss").style.display = 'none';
|
||
showRelations(0,0,0);
|
||
var a = document.getElementById("relation_table");
|
||
if (a != undefined) {
|
||
document.getElementById("relation_table").style.display = 'none';
|
||
}
|
||
var e = document.getElementById("errorNewCorporate");
|
||
e.style.display = 'none';
|
||
|
||
$("#new_term").val("");
|
||
$("#new_scopenote").val("");
|
||
|
||
$("#NewCorporateModal").modal("show");
|
||
}
|
||
|
||
// Insert new corporate record
|
||
function CreateNewEntry(type) {
|
||
// get values
|
||
|
||
var term = $("#new_term").val();
|
||
term = term.trim();
|
||
var type = $("#new_type").val();
|
||
type = type.trim();
|
||
var detailtype = "";
|
||
var classification = "";
|
||
var scopenote = $("#new_scopenote").val();
|
||
scopenote = scopenote.trim();
|
||
|
||
if (term.length == 0) {
|
||
var a = document.getElementById("errorNewCorporate");
|
||
a.classList.add('alert-danger');
|
||
a.textContent = 'Bitte Körperschaft eingeben!';
|
||
a.style.display = 'block';
|
||
return;
|
||
}
|
||
|
||
var a = document.getElementById("errorNewCorporate");
|
||
a.classList.remove('alert-danger');
|
||
a.textContent = '';
|
||
a.style.display = 'none';
|
||
|
||
$.post("ajax/newCorporate.php", {
|
||
term : term,
|
||
type : type,
|
||
detailtype : detailtype,
|
||
classification: classification,
|
||
scopenote : scopenote
|
||
}, function (data, status) {
|
||
|
||
var dt = (typeof data === 'string') ? JSON.parse(data) : data;
|
||
var e = document.getElementById("errorNewCorporate");
|
||
|
||
if (dt['status'] == 200)
|
||
{
|
||
var AnchorID = dt["Anchor"];
|
||
var EntryID = dt["Entry"];
|
||
var LinkingID = dt["Linking"];
|
||
|
||
var b = document.getElementById("newCorporateSave");
|
||
b.style.display='none';
|
||
var c = document.getElementById("newCorporateDismiss");
|
||
c.style.display='none';
|
||
document.getElementById("new_term").disabled = true;
|
||
document.getElementById("new_type").disabled = true;
|
||
document.getElementById("new_scopenote").disabled = true;
|
||
$table.bootstrapTable('refresh');
|
||
|
||
e.classList.remove('alert-danger');
|
||
e.classList.add('alert-success');
|
||
e.textContent = 'Neue Körperschaft aufgenommen';
|
||
e.style.display = 'block';
|
||
|
||
// ID setzen für Relationen
|
||
$('#ID').val(AnchorID);
|
||
|
||
// Relationen-Bereich anzeigen nach Speichern
|
||
document.getElementById("new_relation_label").style.display = 'block';
|
||
document.getElementById("newRelationCorporateDismiss").style.display = 'inline';
|
||
showRelations(AnchorID,EntryID,LinkingID);
|
||
} else {
|
||
e.classList.remove('alert-success');
|
||
e.classList.add('alert-danger');
|
||
e.textContent = dt['message'];
|
||
e.style.display = 'block';
|
||
return;
|
||
}
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// Show relations of a corporate record
|
||
function showRelations(Anchor,Entry,Linking)
|
||
{
|
||
$.get("ajax/getRelations.php", {
|
||
anchorID:Anchor,
|
||
authType:"Corporate"
|
||
},
|
||
function (data, status) {
|
||
if (status=="success")
|
||
{
|
||
$(".new_modal_content").html(data);
|
||
// Tabelle nur anzeigen wenn Relationen vorhanden
|
||
var relationTable = document.getElementById("relation_table");
|
||
if (relationTable) {
|
||
if (data && data.trim().length > 0) {
|
||
relationTable.style.display = 'block';
|
||
} else {
|
||
relationTable.style.display = 'none';
|
||
}
|
||
}
|
||
$("#NewCorporateModal").modal("show");
|
||
}
|
||
}
|
||
);
|
||
|
||
}
|
||
|
||
|
||
// create new relation for a corporate record
|
||
function CreateNewRelation(AnchorID, relationID, event) {
|
||
if (event) {
|
||
event.preventDefault();
|
||
event.stopPropagation();
|
||
}
|
||
|
||
console.log('🚀 CreateNewRelation:', { AnchorID, relationID });
|
||
|
||
try {
|
||
// Validierung
|
||
if (!AnchorID || !relationID) {
|
||
showError('Fehlende Parameter: AnchorID oder relationID');
|
||
return false;
|
||
}
|
||
|
||
var relationTypeElement = document.getElementById("new_relationtype");
|
||
|
||
if (!relationTypeElement) {
|
||
showError('Relationstyp-Element nicht gefunden');
|
||
return false;
|
||
}
|
||
|
||
var relationType = relationTypeElement.value;
|
||
|
||
if (!relationType || relationType.trim() === '') {
|
||
showError('Bitte wählen Sie einen Relationstyp aus');
|
||
return false;
|
||
}
|
||
|
||
// Loading anzeigen
|
||
showLoading();
|
||
|
||
$.ajax({
|
||
url: "ajax/writeNewRelation.php",
|
||
type: "POST",
|
||
data: {
|
||
AnchorID: AnchorID,
|
||
relationType: relationType,
|
||
relationID: relationID
|
||
},
|
||
dataType: "text",
|
||
timeout: 10000,
|
||
|
||
success: function(response) {
|
||
console.log("✅ Success! Response:", response);
|
||
|
||
try {
|
||
var data = JSON.parse(response);
|
||
|
||
if (data.error) {
|
||
showError('<strong>Serverfehler:</strong><br>' + data.error);
|
||
return;
|
||
}
|
||
|
||
if (data.success === true) {
|
||
showSuccess('Neue Relation erfolgreich aufgenommen!');
|
||
|
||
if (typeof showRelations === 'function') {
|
||
setTimeout(function() {
|
||
showRelations(AnchorID, 0, 0);
|
||
}, 500);
|
||
}
|
||
|
||
resetForm();
|
||
} else {
|
||
showError('Unerwartete Antwort vom Server');
|
||
}
|
||
|
||
} catch (parseError) {
|
||
console.log("⚠️ Keine JSON-Antwort, prüfe Plain-Text");
|
||
|
||
if (response && response.length > 0 && !isNaN(response.trim())) {
|
||
showSuccess('Neue Relation erfolgreich aufgenommen! (ID: ' + response.trim() + ')');
|
||
|
||
if (typeof showRelations === 'function') {
|
||
setTimeout(function() {
|
||
showRelations(AnchorID, 0, 0);
|
||
}, 500);
|
||
}
|
||
|
||
resetForm();
|
||
} else {
|
||
showError('<strong>Unerwartete Antwort:</strong><br>' +
|
||
'<code>' + response.substring(0, 200) + '</code>');
|
||
}
|
||
}
|
||
},
|
||
|
||
error: function(xhr, status, error) {
|
||
console.error("❌ AJAX Error:", { status, error, xhr });
|
||
|
||
var errorMessage = '<strong>Fehler beim Speichern der Relation</strong><br><br>';
|
||
|
||
if (xhr.status === 0) {
|
||
errorMessage += '❌ Keine Verbindung zum Server möglich<br>';
|
||
errorMessage += '<small>Prüfen Sie Ihre Internetverbindung</small>';
|
||
} else if (xhr.status === 404) {
|
||
errorMessage += '❌ Datei nicht gefunden (404)<br>';
|
||
errorMessage += '<small>ajax/writeNewRelation.php existiert nicht</small>';
|
||
} else if (xhr.status === 500) {
|
||
errorMessage += '❌ Interner Serverfehler (500)<br>';
|
||
if (xhr.responseText) {
|
||
errorMessage += '<br><details><summary>Details anzeigen</summary><pre>' +
|
||
xhr.responseText.substring(0, 500) + '</pre></details>';
|
||
}
|
||
} else if (status === 'timeout') {
|
||
errorMessage += '❌ Zeitüberschreitung<br>';
|
||
errorMessage += '<small>Der Server hat nicht rechtzeitig geantwortet</small>';
|
||
} else if (status === 'parsererror') {
|
||
errorMessage += '❌ Fehler beim Verarbeiten der Server-Antwort<br>';
|
||
errorMessage += '<small>Die Server-Antwort war ungültig</small>';
|
||
} else {
|
||
errorMessage += '❌ ' + status + ' (' + xhr.status + ')';
|
||
if (error) {
|
||
errorMessage += '<br><small>' + error + '</small>';
|
||
}
|
||
}
|
||
|
||
showError(errorMessage);
|
||
},
|
||
|
||
complete: function(xhr, status) {
|
||
console.log("🏁 Request abgeschlossen:", status);
|
||
if (status !== 'success') {
|
||
hideLoading();
|
||
}
|
||
}
|
||
});
|
||
|
||
return false;
|
||
|
||
} catch (e) {
|
||
hideLoading();
|
||
console.error("💥 Exception:", e);
|
||
showError('<strong>JavaScript-Fehler:</strong><br>' + e.message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function showError(message) {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement) {
|
||
errorElement.className = 'alert alert-danger';
|
||
errorElement.innerHTML = '<i class="fas fa-exclamation-circle me-2"></i>' + message.replace(/\n/g, '<br>');
|
||
errorElement.style.display = 'block';
|
||
|
||
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||
|
||
setTimeout(function() {
|
||
fadeOutAlert();
|
||
}, 8000);
|
||
}
|
||
}
|
||
|
||
function showSuccess(message) {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement) {
|
||
errorElement.className = 'alert alert-success';
|
||
errorElement.innerHTML = '<i class="fas fa-check-circle me-2"></i>' + message;
|
||
errorElement.style.display = 'block';
|
||
|
||
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||
|
||
setTimeout(function() {
|
||
fadeOutAlert();
|
||
}, 3000);
|
||
}
|
||
}
|
||
|
||
function showWarning(message) {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement) {
|
||
errorElement.className = 'alert alert-warning';
|
||
errorElement.innerHTML = '<i class="fas fa-exclamation-triangle me-2"></i>' + message;
|
||
errorElement.style.display = 'block';
|
||
|
||
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||
|
||
setTimeout(function() {
|
||
fadeOutAlert();
|
||
}, 5000);
|
||
}
|
||
}
|
||
|
||
function showLoading() {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement) {
|
||
errorElement.className = 'alert alert-info';
|
||
errorElement.innerHTML = '<div class="d-flex align-items-center"><div class="spinner-border spinner-border-sm me-3" role="status"><span class="visually-hidden">Laden...</span></div><div>Speichere Relation...</div></div>';
|
||
errorElement.style.display = 'block';
|
||
|
||
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||
}
|
||
}
|
||
|
||
function hideLoading() {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement) {
|
||
errorElement.style.display = 'none';
|
||
}
|
||
}
|
||
|
||
function hideAlert() {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement) {
|
||
errorElement.style.display = 'none';
|
||
}
|
||
}
|
||
|
||
function fadeOutAlert() {
|
||
var errorElement = document.getElementById("errorNewCorporate");
|
||
if (errorElement && errorElement.style.display !== 'none') {
|
||
$(errorElement).fadeOut(500, function() {
|
||
errorElement.style.display = 'none';
|
||
});
|
||
}
|
||
}
|
||
|
||
function resetForm() {
|
||
var relationTextElement = document.getElementById("search_relation");
|
||
if (relationTextElement) {
|
||
relationTextElement.value = '';
|
||
}
|
||
$('#corporate-anlegen').removeData('record-id');
|
||
$('#corporate-anlegen').removeData('relation-id');
|
||
hideAlert();
|
||
}
|
||
|
||
|
||
// Delete relation for a corporate
|
||
function DeleteRelation(AnchorID, LinkingID)
|
||
{
|
||
if (!confirm('Möchten Sie diese Relation wirklich löschen?')) {
|
||
return;
|
||
}
|
||
|
||
$.post("ajax/deleteRelation.php", {
|
||
AnchorID : AnchorID,
|
||
LinkingID : LinkingID
|
||
},
|
||
function (data, status) {
|
||
if (status=="success")
|
||
{
|
||
var e = document.getElementById("errorNewCorporate");
|
||
e.classList.add('alert-success');
|
||
e.textContent = ' Relation gelöscht';
|
||
e.style.display = 'block';
|
||
|
||
showRelations(AnchorID,0,0)
|
||
}
|
||
|
||
}
|
||
);
|
||
}
|
||
|
||
// delete the whole corporate entry
|
||
function DeleteTerm(AnchorID)
|
||
{
|
||
if (!confirm('Möchten Sie diesen Eintrag wirklich löschen?')) {
|
||
return;
|
||
}
|
||
|
||
$.post("ajax/deleteTerm.php", {
|
||
AnchorID: AnchorID[0]
|
||
},
|
||
function (data, status) {
|
||
var metadata = (typeof data === 'string') ? JSON.parse(data) : data;
|
||
|
||
if (status === "success" && metadata.success === true) {
|
||
// Tabelle neu laden – Zeile ist serverseitig wirklich gelöscht
|
||
$table.bootstrapTable('refresh');
|
||
} else {
|
||
// Serverseitiger Fehler: Zeile wieder einblenden und Meldung anzeigen
|
||
$table.bootstrapTable('refresh');
|
||
alert('Fehler beim Löschen: ' + (metadata.error || 'Unbekannter Fehler'));
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
|
||
// Modify corporate and its relations
|
||
function ModifyTerm(AnchorID)
|
||
{
|
||
// Name-Feld deaktivieren (darf nicht geändert werden)
|
||
document.getElementById("new_term").disabled = true;
|
||
|
||
// Andere Felder aktivieren
|
||
document.getElementById("new_type").disabled = false;
|
||
document.getElementById("new_scopenote").disabled = false;
|
||
|
||
$("#ID").val(AnchorID[0]);
|
||
|
||
// Relationen-Bereich sofort sichtbar machen bei Bearbeitung!
|
||
document.getElementById("new_relation_label").style.display = 'block';
|
||
document.getElementById("relation_table").style.display = 'block';
|
||
|
||
// Buttons konfigurieren
|
||
document.getElementById("newCorporateSave").style.display = 'none';
|
||
document.getElementById("newCorporateDismiss").style.display = 'inline';
|
||
document.getElementById("CorporateModifySave").style.display = 'inline';
|
||
document.getElementById("newRelationCorporateDismiss").style.display = 'none';
|
||
|
||
// Alert verstecken
|
||
document.getElementById("errorNewCorporate").style.display = 'none';
|
||
|
||
$("#NewCorporateModalHeadline").text("Körperschaft ändern");
|
||
|
||
$.get("/Thesaurus/ajax/getAuthorityDataRaw.php", {
|
||
id : AnchorID[0],
|
||
authType :"Corporate"
|
||
},
|
||
function (data, status) {
|
||
console.log('📥 getAuthorityDataRaw status:', status);
|
||
console.log('📥 getAuthorityDataRaw data:', data);
|
||
if (status == "success")
|
||
{
|
||
var metadata = (typeof data === 'string') ? JSON.parse(data) : data;
|
||
console.log('📥 metadata:', metadata);
|
||
dt = (metadata['rows'][0]);
|
||
console.log('📥 dt:', dt);
|
||
if (dt) {
|
||
$("#new_term").val(dt.Text);
|
||
$("#new_id").val(dt.ID);
|
||
$("#new_descriptor").val(dt.Descriptor);
|
||
$("#new_type").val(dt.Type);
|
||
$("#new_scopenote").val(dt.Scopenote);
|
||
console.log('✅ Felder befüllt mit:', dt.Text);
|
||
} else {
|
||
console.error('❌ Keine Daten in rows[0]');
|
||
}
|
||
}
|
||
|
||
}
|
||
).fail(function(xhr, status, error) {
|
||
console.error('❌ AJAX Fehler:', status, error);
|
||
});
|
||
|
||
$.get("ajax/getRelations.php", {
|
||
anchorID:AnchorID[0],
|
||
authType: "Corporate"
|
||
},
|
||
function (data, status) {
|
||
if (status=="success")
|
||
{
|
||
$(".new_modal_content").html(data);
|
||
$("#NewCorporateModal").modal("show");
|
||
|
||
// Autocomplete neu initialisieren nach Modal-Öffnung
|
||
setTimeout(function() {
|
||
if (typeof searchRelation === 'function') {
|
||
console.log('🔄 Autocomplete wird neu initialisiert...');
|
||
searchRelation();
|
||
}
|
||
}, 300);
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
// rewrite records after updating a corporate entry
|
||
function UpdateEntry(authType)
|
||
{
|
||
var AnchorID = $("#ID").val();
|
||
var term = $("#new_term").val();
|
||
term = term.trim();
|
||
var type = $("#new_type").val();
|
||
type = type.trim();
|
||
var detailtype = '';
|
||
var classification = '';
|
||
var scopenote = $("#new_scopenote").val();
|
||
scopenote = scopenote.trim();
|
||
|
||
if (term.length == 0) {
|
||
var a = document.getElementById("errorNewCorporate");
|
||
a.classList.add('alert-danger');
|
||
a.textContent = 'Bitte Körperschaft eingeben!';
|
||
a.style.display = 'block';
|
||
return;
|
||
}
|
||
|
||
var a = document.getElementById("errorNewCorporate");
|
||
a.classList.remove('alert-danger');
|
||
a.textContent = '';
|
||
a.style.display = 'none';
|
||
|
||
|
||
|
||
$.post("ajax/UpdateTerm.php", {
|
||
AnchorID: AnchorID,
|
||
authType: "Corporate",
|
||
term: term,
|
||
type: type,
|
||
detailtype: detailtype,
|
||
classification: classification,
|
||
scopenote: scopenote
|
||
},
|
||
function (data, status) {
|
||
if (status=="success")
|
||
{
|
||
document.getElementById("relation_table").style.display = 'block'
|
||
document.getElementById("newCorporateSave").style.display = 'none'
|
||
document.getElementById("newCorporateDismiss").style.display = 'inline'
|
||
document.getElementById("CorporateModifySave").style.display = 'none'
|
||
document.getElementById("newRelationCorporateDismiss").style.display = 'none'
|
||
var e = document.getElementById("errorNewCorporate");
|
||
e.classList.add('alert-success');
|
||
e.textContent = ' Körperschaft geändert ';
|
||
e.style.display = 'block';
|
||
|
||
$("#NewCorporateModalHeadline").text("Körperschaft ändern");
|
||
$("#NewCorporateModal").modal("show");
|
||
}
|
||
}
|
||
);
|
||
$table.bootstrapTable('refresh')
|
||
}
|
||
|
||
function ShowModalDetails(id) {
|
||
|
||
$.get("/Thesaurus/ajax/getDetailAuthorityData.php", {
|
||
authType : 'Corporate',
|
||
offset : 0,
|
||
id : id,
|
||
sort : 'Anchor.Text',
|
||
limit : 1
|
||
},
|
||
function(data, status) {
|
||
if (status == "success") {
|
||
var metadata = (typeof data === 'string') ? JSON.parse(data) : data;
|
||
var row = metadata['rows'];
|
||
|
||
if (!row || row.length === 0) {
|
||
console.error('❌ Keine Daten gefunden für ID:', id);
|
||
return;
|
||
}
|
||
|
||
//Assign existing values to the modal popup fields
|
||
$("#display_term").val(row[0].Text);
|
||
$("#display_id").val(row[0].ID);
|
||
$("#display_id_show").val(row[0].ID);
|
||
$("#display_descriptor").val(row[0].Descriptor);
|
||
$("#display_type").val(row[0].Type);
|
||
$("#display_scopenote").val(row[0].Scopenote);
|
||
|
||
var html = []
|
||
var txt = ''
|
||
$.each(row[0].Relations, function (key, value) {
|
||
txt = txt +'<div class="col-sm-12">';
|
||
txt = txt +'<div class="col-sm-2"></div>';
|
||
txt = txt + '<div class="col-sm-3"><input type="text" class="form-control" disabled id="display_relationtype_' +key +'" /></div>';
|
||
txt = txt + '<div class="col-sm-5"><input type="text" class="form-control" disabled id="display_textrelation_' +key +'" /></div>';
|
||
txt = txt + '<div class="col-sm-2"><input type="text" class="form-control" disabled id="display_IDRelation_' +key +'" /></div>';
|
||
txt = txt +'</div>';
|
||
})
|
||
$(".modal_content").html(txt);
|
||
$.each(row[0].Relations, function (key, value) {
|
||
$("#display_relationtype_" +key).val(value['Relationtype']);
|
||
$("#display_textrelation_" +key).val(value['TextRelation']);
|
||
$("#display_IDRelation_" +key).val(value['IDRelation']);
|
||
})
|
||
$("#display_relations").val(txt);
|
||
|
||
// Modal anzeigen
|
||
$("#DetailsModal").modal("show");
|
||
|
||
// Semantisches Netz erstellen (nach Modal sichtbar)
|
||
setTimeout(function() {
|
||
if (typeof createSemanticNetwork === 'function') {
|
||
createSemanticNetwork(row[0].Text, row[0].ID, row[0].Relations);
|
||
}
|
||
}, 300);
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
|
||
|
||
function refreshPage()
|
||
{
|
||
location.reload();
|
||
}
|
||
|
||
function CopyLink(value)
|
||
{
|
||
var tempInput = document.createElement("input");
|
||
tempInput.value = value;
|
||
document.body.appendChild(tempInput);
|
||
tempInput.select();
|
||
document.execCommand("copy");
|
||
document.body.removeChild(tempInput);
|
||
}
|