/**
* Created by Roland on 2021/07/01.
* Updated for BIBB Layout 2024
*/
// CLASSIFICATIONS
// Show blank screen to add new Classification
function newClassificationsShow() {
// Sichere Element-Zugriffe mit Null-Checks
var saveBtn = document.getElementById("newClassificationSave");
var dismissBtn = document.getElementById("newClassificationDismiss");
var modifyBtn = document.getElementById("ClassificationModifySave");
var termField = document.getElementById("new_term");
var notationField = document.getElementById("new_notation");
var scopenoteField = document.getElementById("new_scopenote");
var relationLabel = document.getElementById("new_relation_label");
var relationDismissBtn = document.getElementById("newRelationClassificationDismiss");
var relationTable = document.getElementById("relation_table");
var errorDiv = document.getElementById("errorNewClassification");
if (saveBtn) saveBtn.style.display = 'inline';
if (dismissBtn) dismissBtn.style.display = 'inline';
if (modifyBtn) modifyBtn.style.display = 'none';
if (termField) termField.disabled = false;
if (notationField) notationField.disabled = false;
if (scopenoteField) scopenoteField.disabled = false;
// Relationen-Bereich verstecken bei neuer Klassifikation
if (relationLabel) relationLabel.style.display = 'none';
if (relationDismissBtn) relationDismissBtn.style.display = 'none';
showRelations(0,0,0);
if (relationTable) relationTable.style.display = 'none';
if (errorDiv) errorDiv.style.display = 'none';
$("#new_term").val("");
$("#new_notation").val("");
$("#new_scopenote").val("");
$("#NewClassificationModal").modal("show");
}
// Insert new classification record
function CreateNewEntry(type) {
// get values
var term = $("#new_term").val();
term = term.trim();
var notation = $("#new_notation").val();
notation = notation.trim();
var detailtype = "";
var classification = "";
var scopenote = $("#new_scopenote").val();
scopenote = scopenote.trim();
if (term.length == 0) {
var a = document.getElementById("errorNewClassification");
a.classList.add('alert-danger');
a.textContent = 'Bitte Klassifikation eingeben!';
a.style.display = 'block';
return;
}
var a = document.getElementById("errorNewClassification");
a.classList.remove('alert-danger');
a.textContent = '';
a.style.display = 'none';
$.post("ajax/newClassification.php", {
term : term,
type : type,
notation : notation,
detailtype : detailtype,
classification: classification,
scopenote : scopenote
}, function (data, status) {
var dt = (typeof data === 'string') ? JSON.parse(data) : data;
var e = document.getElementById("errorNewClassification");
if (dt['status'] == 200)
{
var AnchorID = dt["Anchor"];
var EntryID = dt["Entry"];
var LinkingID = dt["Linking"];
var b = document.getElementById("newClassificationSave");
b.style.display='none';
var c = document.getElementById("newClassificationDismiss");
c.style.display='none';
document.getElementById("new_term").disabled = true;
document.getElementById("new_notation").disabled = true;
document.getElementById("new_scopenote").disabled = true;
$table.bootstrapTable('refresh');
e.classList.remove('alert-danger');
e.classList.add('alert-success');
e.textContent = 'Neue Klassifikation 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("newRelationClassificationDismiss").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 classification record
function showRelations(Anchor,Entry,Linking)
{
$.get("ajax/getRelations.php", {
anchorID:Anchor,
authType:"Classification"
},
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';
}
}
$("#NewClassificationModal").modal("show");
}
}
);
}
// create new relation for a classification 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('Serverfehler:
' + 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('Unerwartete Antwort:
' +
'' + response.substring(0, 200) + '');
}
}
},
error: function(xhr, status, error) {
console.error("❌ AJAX Error:", { status, error, xhr });
var errorMessage = 'Fehler beim Speichern der Relation
';
if (xhr.status === 0) {
errorMessage += '❌ Keine Verbindung zum Server möglich
';
errorMessage += 'Prüfen Sie Ihre Internetverbindung';
} else if (xhr.status === 404) {
errorMessage += '❌ Datei nicht gefunden (404)
';
errorMessage += 'ajax/writeNewRelation.php existiert nicht';
} else if (xhr.status === 500) {
errorMessage += '❌ Interner Serverfehler (500)
';
if (xhr.responseText) {
errorMessage += 'Details anzeigen
' +
xhr.responseText.substring(0, 500) + '
';
errorMessage += 'Der Server hat nicht rechtzeitig geantwortet';
} else if (status === 'parsererror') {
errorMessage += '❌ Fehler beim Verarbeiten der Server-Antwort
';
errorMessage += 'Die Server-Antwort war ungültig';
} else {
errorMessage += '❌ ' + status + ' (' + xhr.status + ')';
if (error) {
errorMessage += '
' + error + '';
}
}
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('JavaScript-Fehler:
' + e.message);
return false;
}
}
function showError(message) {
var errorElement = document.getElementById("errorNewClassification");
if (errorElement) {
errorElement.className = 'alert alert-danger';
errorElement.innerHTML = '' + message.replace(/\n/g, '
');
errorElement.style.display = 'block';
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
setTimeout(function() {
fadeOutAlert();
}, 8000);
}
}
function showSuccess(message) {
var errorElement = document.getElementById("errorNewClassification");
if (errorElement) {
errorElement.className = 'alert alert-success';
errorElement.innerHTML = '' + message;
errorElement.style.display = 'block';
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
setTimeout(function() {
fadeOutAlert();
}, 3000);
}
}
function showWarning(message) {
var errorElement = document.getElementById("errorNewClassification");
if (errorElement) {
errorElement.className = 'alert alert-warning';
errorElement.innerHTML = '' + message;
errorElement.style.display = 'block';
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
setTimeout(function() {
fadeOutAlert();
}, 5000);
}
}
function showLoading() {
var errorElement = document.getElementById("errorNewClassification");
if (errorElement) {
errorElement.className = 'alert alert-info';
errorElement.innerHTML = '