using System.Collections.Generic; using System.IO; using System.Linq; using gehGassi.Core.Interfaces; using gehGassi.Domain.Placeholders; using gehGassi.Domain.Users; using Newtonsoft.Json; namespace gehGassi.Core.Services { /// /// Service der Funktionen rund um die Variablen/Platzhalter bietet /// public class PlaceHolderService : IPlaceHolderService { private readonly string _directory; /// /// Erstellt eine Instanz /// /// Pfad in welchem die Platzhalter-Dateien liegen public PlaceHolderService(string directory) { _directory = directory; } /// /// Gibt die Liste der verfügbaren Platzhalter-Kategorien zurück /// /// Sprache ISO2 /// Liste Kategorien public List GetCategories(string lang) { var list = Load(lang); return list; } /// /// Gibt die Liste der Platzhalter-Variablen für eine Kategorie zurück /// /// Id der Kategorie /// Sprache ISO2 /// Liste Platzhalter public List GetPlaceholders(int categoryId, string lang) { var list = new List(); var categories = Load(lang); if (categories == null || !categories.Any()) return list; var category = categories.FirstOrDefault(c => c.Id == categoryId); if (category != null) list = category.PlaceHolders.ToList(); return list; } /// /// Ersetzt in einem Text alle Platzhalter mit den entsprechenden Daten, sofern diese zur Verfügung gestellt wurden. /// /// Text in welchem die Platzhalter ausgefüllt werden sollen /// Sprache ISO2 /// Id der Timezone für Datums-Operationen /// Soll bei manchen Ersatzoperationen HTML verwendet werden? Z.B. Adress-Block /// Optional: Mandant /// Optional: Benutzer /// Optional: Kurs /// Optional: Student /// Anzahl ersetzer Platzhalter. Der Text ist als ref Parameter bearbeitet public int FillIn(ref string content, string lang, string timezoneId, bool useHtml = false, ApplicationUser user = null) { var replaceCount = 0; return replaceCount; } #region Private /// /// Laden der Datei mit den Paltzhaltern /// /// /// private List Load(string lang) { var list = new List(); //Prüfen ob das Verzeichnis existiert if (!Directory.Exists(_directory)) Directory.CreateDirectory(_directory); try { var filename = Path.Combine(_directory, $"placeholders_{lang}.json"); if (File.Exists(filename)) { list = JsonConvert.DeserializeObject(File.ReadAllText(filename)).ToList(); } } catch { // ignored } return list; } #endregion } }