mirror of
https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
synced 2025-10-29 17:25:32 +00:00
99 lines
5.1 KiB
C#
99 lines
5.1 KiB
C#
using System.Diagnostics;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using HaWeb.Models;
|
||
using HaWeb.FileHelpers;
|
||
using HaDocument.Interfaces;
|
||
using HaXMLReader.Interfaces;
|
||
using HaDocument.Models;
|
||
|
||
namespace HaWeb.Controllers;
|
||
|
||
public class Briefecontroller : Controller {
|
||
[BindProperty(SupportsGet = true)]
|
||
public string? id { get; set; }
|
||
|
||
// DI
|
||
private IHaDocumentWrappper _lib;
|
||
private IReaderService _readerService;
|
||
|
||
public Briefecontroller(IHaDocumentWrappper lib, IReaderService readerService) {
|
||
_lib = lib;
|
||
_readerService = readerService;
|
||
}
|
||
|
||
[Route("/HKB/Briefe")]
|
||
[Route("/HKB/Briefe/{id?}")]
|
||
public IActionResult Index(string? id, string? search = null) {
|
||
// Setup settings and variables
|
||
var lib = _lib.GetLibrary();
|
||
var url = "/HKB/Briefe/";
|
||
var defaultID = "1";
|
||
|
||
// Normalisation and Validation, (some) data aquisition
|
||
if (id == null) return Redirect(url + defaultID);
|
||
id = id.ToLower();
|
||
var preliminarymeta = lib.Metas.Where(x => x.Value.Autopsic == id);
|
||
if (preliminarymeta == null || !preliminarymeta.Any()) return error404();
|
||
|
||
// Get all neccessary data
|
||
var index = preliminarymeta.First().Key;
|
||
var meta = preliminarymeta.First().Value;
|
||
var text = lib.Letters.ContainsKey(index) ? lib.Letters[index] : null;
|
||
var marginals = lib.MarginalsByLetter.Contains(index) ? lib.MarginalsByLetter[index] : null;
|
||
var tradition = lib.Traditions.ContainsKey(index) ? lib.Traditions[index] : null;
|
||
var editreasons = lib.Editreasons.ContainsKey(index) ? lib.EditreasonsByLetter[index] : null; // TODO: Order
|
||
var hands = lib.Hands.ContainsKey(index) ? lib.Hands[index] : null;
|
||
var nextmeta = meta != lib.MetasByDate.Last() ? lib.MetasByDate.ItemRef(lib.MetasByDate.IndexOf(meta) + 1) : null;
|
||
var prevmeta = meta != lib.MetasByDate.First() ? lib.MetasByDate.ItemRef(lib.MetasByDate.IndexOf(meta) - 1) : null;
|
||
|
||
// More Settings and variables
|
||
ViewData["Title"] = "HKB – Brief " + id.ToLower();
|
||
ViewData["SEODescription"] = "HKB – Brief " + id.ToLower();
|
||
ViewData["Filename"] = "HKB_" + meta.Autopsic + ".pdf";
|
||
if (!string.IsNullOrWhiteSpace(search)) {
|
||
ViewData["Mark"] = search;
|
||
}
|
||
|
||
// Model creation
|
||
var hasMarginals = false;
|
||
if (marginals != null && marginals.Any()) hasMarginals = true;
|
||
var model = new BriefeViewModel(id, index, generateMetaViewModel(lib, meta, hasMarginals));
|
||
if (nextmeta != null) model.MetaData.Next = (generateMetaViewModel(lib, nextmeta, false), url + nextmeta.Autopsic);
|
||
if (prevmeta != null) model.MetaData.Prev = (generateMetaViewModel(lib, prevmeta, false), url + prevmeta.Autopsic);
|
||
if (hands != null && hands.Any()) model.ParsedHands = HaWeb.HTMLHelpers.LetterHelpers.CreateHands(lib, hands);
|
||
if (editreasons != null && editreasons.Any()) model.ParsedEdits = HaWeb.HTMLHelpers.LetterHelpers.CreateEdits(lib, _readerService, editreasons);
|
||
if (tradition != null && !String.IsNullOrWhiteSpace(tradition.Element)) {
|
||
var parsedTraditions = HaWeb.HTMLHelpers.LetterHelpers.CreateTraditions(lib, _readerService, marginals, tradition, hands, editreasons);
|
||
(model.ParsedTradition, model.ParsedMarginals, model.MinWidthTrad) = (parsedTraditions.sb_tradition.ToString(), parsedTraditions.ParsedMarginals, parsedTraditions.minwidth);
|
||
}
|
||
if (text != null && !String.IsNullOrWhiteSpace(text.Element)) {
|
||
var parsedLetter = HaWeb.HTMLHelpers.LetterHelpers.CreateLetter(lib, _readerService, meta, text, marginals, hands, editreasons);
|
||
(model.ParsedText, model.MinWidth) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.minwidth);
|
||
if (model.ParsedMarginals != null && parsedLetter.ParsedMarginals != null) model.ParsedMarginals.AddRange(parsedLetter.ParsedMarginals);
|
||
else model.ParsedMarginals = parsedLetter.ParsedMarginals;
|
||
model.MetaData.Startline = parsedLetter.Startline;
|
||
model.MetaData.Startpage = parsedLetter.Startpage;
|
||
if (String.IsNullOrWhiteSpace(model.ParsedText))
|
||
model.MetaData.HasText = false;
|
||
}
|
||
|
||
// Return
|
||
return View("~/Views/HKB/Dynamic/Briefe.cshtml", model);
|
||
}
|
||
|
||
private IActionResult error404() {
|
||
Response.StatusCode = 404;
|
||
return Redirect("/Error404");
|
||
}
|
||
|
||
private BriefeMetaViewModel generateMetaViewModel(ILibrary lib, Meta meta, bool hasMarginals) {
|
||
var senders = meta.Senders.Select(x => lib.Persons[x].Name) ?? new List<string>();
|
||
var recivers = meta.Receivers.Select(x => lib.Persons[x].Name) ?? new List<string>();
|
||
var zhstring = meta.ZH != null ? HaWeb.HTMLHelpers.LetterHelpers.CreateZHString(meta) : null;
|
||
return new BriefeMetaViewModel(meta, hasMarginals) {
|
||
ParsedZHString = zhstring,
|
||
ParsedSenders = HTMLHelpers.StringHelpers.GetEnumerationString(senders),
|
||
ParsedReceivers = HTMLHelpers.StringHelpers.GetEnumerationString(recivers)
|
||
};
|
||
}
|
||
} |