/** * 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) + '
'; } } else if (status === 'timeout') { errorMessage += '❌ Zeitüberschreitung
'; 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 = '
Laden...
Speichere Relation...
'; errorElement.style.display = 'block'; errorElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } } function hideLoading() { var errorElement = document.getElementById("errorNewClassification"); if (errorElement) { errorElement.style.display = 'none'; } } function hideAlert() { var errorElement = document.getElementById("errorNewClassification"); if (errorElement) { errorElement.style.display = 'none'; } } function fadeOutAlert() { var errorElement = document.getElementById("errorNewClassification"); 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 = ''; } $('#classification-anlegen').removeData('record-id'); $('#classification-anlegen').removeData('relation-id'); hideAlert(); } // Delete relation for a classification 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("errorNewClassification"); e.classList.add('alert-success'); e.textContent = ' Relation gelöscht'; e.style.display = 'block'; showRelations(AnchorID,0,0) } } ); } // delete the whole classification 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 classification and its relations function ModifyTerm(AnchorID) { $("#ID").val(AnchorID[0]); // Sichere Element-Zugriffe mit Null-Checks 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 relationTable = document.getElementById("relation_table"); var saveBtn = document.getElementById("newClassificationSave"); var dismissBtn = document.getElementById("newClassificationDismiss"); var modifyBtn = document.getElementById("ClassificationModifySave"); var relationDismissBtn = document.getElementById("newRelationClassificationDismiss"); var errorDiv = document.getElementById("errorNewClassification"); // Name-Feld deaktivieren (darf nicht geändert werden) if (termField) termField.disabled = true; // Andere Felder aktivieren if (notationField) notationField.disabled = false; if (scopenoteField) scopenoteField.disabled = false; // Relationen-Bereich sofort sichtbar machen bei Bearbeitung! if (relationLabel) relationLabel.style.display = 'block'; if (relationTable) relationTable.style.display = 'block'; // Buttons konfigurieren if (saveBtn) saveBtn.style.display = 'none'; if (dismissBtn) dismissBtn.style.display = 'inline'; if (modifyBtn) modifyBtn.style.display = 'inline'; if (relationDismissBtn) relationDismissBtn.style.display = 'none'; // Alert verstecken if (errorDiv) errorDiv.style.display = 'none'; $("#NewClassificationModalHeadline").text("Klassifikation ändern"); $.get("/Thesaurus/ajax/getAuthorityDataRaw.php", { id : AnchorID[0], authType :"Classification" }, 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_notation").val(dt.Notation); $("#new_descriptor").val(dt.Descriptor); $("#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: "Classification" }, function (data, status) { if (status=="success") { $(".new_modal_content").html(data); $("#NewClassificationModal").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 classification entry function UpdateEntry(authType) { var AnchorID = $("#ID").val(); var term = $("#new_term").val(); term = term.trim(); var notation = $("#new_notation").val(); notation = notation.trim(); var type = 'Classification'; 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/UpdateTerm.php", { AnchorID: AnchorID, authType: "Classification", term: term, notation: notation, type: type, detailtype: detailtype, classification: classification, scopenote: scopenote }, function (data, status) { if (status=="success") { document.getElementById("relation_table").style.display = 'block' document.getElementById("newClassificationSave").style.display = 'none' document.getElementById("newClassificationDismiss").style.display = 'inline' document.getElementById("ClassificationModifySave").style.display = 'none' document.getElementById("newRelationClassificationDismiss").style.display = 'none' var e = document.getElementById("errorNewClassification"); e.classList.add('alert-success'); e.textContent = ' Klassifikation geändert '; e.style.display = 'block'; $("#NewClassificationModalHeadline").text("Klassifikation ändern"); $("#NewClassificationModal").modal("show"); } } ); $table.bootstrapTable('refresh') } function ShowModalDetails(id) { $.get("/Thesaurus/ajax/getDetailAuthorityData.php", { authType : 'Classification', 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']; //Assign existing values to the modal popup fields $("#display_term").val(row[0].Text); $("#display_id").val(row[0].ID); $("#display_notation").val(row[0].Notation); $("#display_descriptor").val(row[0].Descriptor); $("#display_scopenote").val(row[0].Scopenote); var html = [] var txt = '' $.each(row[0].Relations, function (key, value) { txt = txt +'
'; txt = txt +'
'; txt = txt + '
'; txt = txt + '
'; txt = txt + '
'; txt = txt +'
'; }) $(".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); } } ); $("#DetailsModal").modal("show"); } 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); }