/**
* Created by Roland on 2021/07/01.
*/
// SUBJECTS
// Show blank screen to add new Subject
function newSubjectShow() {
var b = document.getElementById("newSubjectSave");
b.style.display='inline';
var c = document.getElementById("newSubjectDismiss");
c.style.display='inline';
document.getElementById("SubjectModifySave").style.display = 'none'
document.getElementById("new_term").disabled = false;
document.getElementById("new_type").disabled = false;
document.getElementById("new_detailtype").disabled = false;
document.getElementById("new_classification").disabled = false;
document.getElementById("new_scopenote").disabled = false;
// Relationen-Bereich verstecken bei neuem Schlagwort
document.getElementById("new_relation_label").style.display = 'none';
document.getElementById("newRelationSubjectDismiss").style.display = 'none';
// Synonyme-Bereich verstecken bei neuem Schlagwort
var synSection = document.getElementById("synonyms_section");
if (synSection) {
synSection.style.display = 'none';
var tbody = document.getElementById("synonyms_body");
if (tbody) tbody.innerHTML = '';
}
showRelations(0,0,0);
var a = document.getElementById("relation_table");
if (a != undefined) {
document.getElementById("relation_table").style.display = 'none';
}
var e = document.getElementById("errorNewSubject");
e.style.display = 'none';
$("#new_term").val("");
$("#new_classification").val("");
$("#new_scopenote").val("");
$("#NewSubjectModal").modal("show");
}
// Insert new subject record
function CreateNewEntry(type) {
// get values
var term = $("#new_term").val();
term = term.trim();
var type = $("#new_type").val();
type = type.trim();
var detailtype = $("#new_detailtype").val();
detailtype = detailtype.trim();
var classification = $("#new_classification").val();
classification = classification.trim();
var scopenote = $("#new_scopenote").val();
scopenote = scopenote.trim();
if (term.length == 0) {
var a = document.getElementById("errorNewSubject");
a.classList.add('alert-danger');
a.textContent = 'Bitte Schlagwort eingeben!';
a.style.display = 'block';
return;
}
var a = document.getElementById("errorNewSubject");
a.classList.remove('alert-danger');
a.textContent = '';
a.style.display = 'none';
$.post("ajax/newSubject.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("errorNewSubject");
if (dt['status'] == 200)
{
var AnchorID = dt["Anchor"];
var EntryID = dt["Entry"];
var LinkingID = dt["Linking"];
// alert ("ANCHOR: " +AnchorID);
var b = document.getElementById("newSubjectSave");
b.style.display='none';
var c = document.getElementById("newSubjectDismiss");
c.style.display='none';
document.getElementById("new_term").disabled = true;
document.getElementById("new_type").disabled = true;
document.getElementById("new_detailtype").disabled = true;
document.getElementById("new_classification").disabled = true;
document.getElementById("new_scopenote").disabled = true;
$table.bootstrapTable('refresh');
e.classList.remove('alert-danger');
e.classList.add('alert-success');
e.textContent = 'Neues Schlagwort 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("newRelationSubjectDismiss").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 subect record
function showRelations(Anchor,Entry,Linking)
{
// alert ("showRelations AnchorID : " + Anchor);
$.get("ajax/getRelations.php", {
anchorID:Anchor,
authType: "Subject"
},
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';
}
}
$("#NewSubjectModal").modal("show");
}
}
);
}
// create new relation for a subject 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!');
// Relations neu laden nach kurzer Verzögerung
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");
// Fallback für alte API (nur ID zurück)
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);
// Loading nur ausblenden wenn kein Erfolg (Success zeigt eigene Meldung)
if (status !== 'success') {
hideLoading();
}
}
});
return false;
} catch (e) {
hideLoading();
console.error("💥 Exception:", e);
showError('JavaScript-Fehler:
' + e.message);
return false;
}
}
// Neue Funktion für Synonyme
function CreateNewSynonym(text1, text2, anchorID, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
console.log('🔗 CreateNewSynonym:', { text1, text2 });
try {
// Validierung
if (!text1 || !text2) {
showError('Fehlende Parameter: text1 oder text2');
return false;
}
if (text1.trim() === text2.trim()) {
showError('Ein Begriff kann nicht sein eigenes Synonym sein');
return false;
}
// Loading anzeigen
showLoading();
$.ajax({
url: "/Thesaurus/ajax/saveSynonym.php",
type: "POST",
data: {
text1: text1,
text2: text2,
action: 'add'
},
dataType: "json",
timeout: 10000,
success: function(response) {
console.log("✅ Synonym Success! Response:", response);
if (response.error) {
showError('Fehler:
' + response.error);
return;
}
if (response.success === true) {
showSuccess('Synonym erfolgreich hinzugefügt!');
// Synonyme neu laden
var termText = $('#new_term').val();
if (termText) {
loadSynonyms(termText);
}
// Relations neu laden nach kurzer Verzögerung
if (typeof showRelations === 'function' && anchorID) {
setTimeout(function() {
showRelations(anchorID, 0, 0);
}, 500);
}
resetForm();
} else {
showError('Unerwartete Antwort vom Server');
}
},
error: function(xhr, status, error) {
console.error("❌ AJAX Error:", { status, error, xhr });
var errorMessage = 'Fehler beim Speichern des Synonyms
';
if (xhr.status === 0) {
errorMessage += '❌ Keine Verbindung zum Server möglich';
} else if (xhr.status === 404) {
errorMessage += '❌ Datei nicht gefunden (404)
';
errorMessage += 'ajax/saveSynonym.php existiert nicht';
} else if (xhr.status === 500) {
errorMessage += '❌ Interner Serverfehler (500)';
} else {
errorMessage += '❌ ' + status + ' (' + xhr.status + ')';
}
showError(errorMessage);
},
complete: function() {
hideLoading();
}
});
return false;
} catch (e) {
hideLoading();
console.error("💥 Exception:", e);
showError('JavaScript-Fehler:
' + e.message);
return false;
}
}
// Synonyme für einen Begriff laden
function loadSynonyms(text) {
if (!text) return;
console.log('📋 Lade Synonyme für:', text);
$.ajax({
url: "/Thesaurus/ajax/getSynonyms.php",
type: "GET",
data: { text: text },
dataType: "json",
success: function(response) {
console.log('✅ Synonyme geladen:', response);
var section = document.getElementById('synonyms_section');
var tbody = document.getElementById('synonyms_body');
var noSyn = document.getElementById('no_synonyms');
if (response.success && response.count > 0) {
// Synonyme vorhanden - Bereich anzeigen
if (section) section.style.display = 'block';
if (tbody) tbody.innerHTML = response.html;
if (noSyn) noSyn.style.display = 'none';
} else {
// Keine Synonyme - Bereich komplett ausblenden
if (section) section.style.display = 'none';
if (tbody) tbody.innerHTML = '';
}
},
error: function(xhr, status, error) {
console.error('❌ Fehler beim Laden der Synonyme:', error);
}
});
}
// Synonym löschen
function DeleteSynonym(text1, text2) {
if (!confirm('Möchten Sie das Synonym "' + text2 + '" wirklich entfernen?')) {
return;
}
console.log('🗑️ Lösche Synonym:', { text1, text2 });
$.ajax({
url: "/Thesaurus/ajax/saveSynonym.php",
type: "POST",
data: {
text1: text1,
text2: text2,
action: 'remove'
},
dataType: "json",
success: function(response) {
console.log('✅ Synonym gelöscht:', response);
if (response.success) {
showSuccess('Synonym entfernt!');
// Synonyme neu laden
loadSynonyms(text1);
} else {
showError(response.error || 'Fehler beim Löschen');
}
},
error: function(xhr, status, error) {
console.error('❌ Fehler beim Löschen:', error);
showError('Fehler beim Löschen des Synonyms');
}
});
}
function showError(message) {
var errorElement = document.getElementById("errorNewSubject");
if (errorElement) {
errorElement.className = 'alert alert-danger';
errorElement.innerHTML = '' + message.replace(/\n/g, '
');
errorElement.style.display = 'block';
// Scroll zum Alert
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
// Optional: Auto-Hide nach 8 Sekunden
setTimeout(function() {
fadeOutAlert();
}, 8000);
}
}
function showSuccess(message) {
var errorElement = document.getElementById("errorNewSubject");
if (errorElement) {
errorElement.className = 'alert alert-success';
errorElement.innerHTML = '' + message;
errorElement.style.display = 'block';
// Scroll zum Alert
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
// Auto-Hide nach 3 Sekunden
setTimeout(function() {
fadeOutAlert();
}, 3000);
}
}
function showWarning(message) {
var errorElement = document.getElementById("errorNewSubject");
if (errorElement) {
errorElement.className = 'alert alert-warning';
errorElement.innerHTML = '' + message;
errorElement.style.display = 'block';
// Scroll zum Alert
errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
// Auto-Hide nach 5 Sekunden
setTimeout(function() {
fadeOutAlert();
}, 5000);
}
}
function showLoading() {
var errorElement = document.getElementById("errorNewSubject");
if (errorElement) {
errorElement.className = 'alert alert-info';
errorElement.innerHTML = '