| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868 |
- using DevExpress.Utils;
- using DevExpress.Web;
- using DevExpress.Web.ASPxThemes;
- using DevExpress.Web.Mvc;
- using DevExpress.XtraPrinting;
- using DevExpress.XtraScheduler;
- using GreenTree.Nachtragsmanagement.Core.Authentication;
- using GreenTree.Nachtragsmanagement.Core.Domain.Deviation;
- using GreenTree.Nachtragsmanagement.Core.Domain.User;
- using GreenTree.Nachtragsmanagement.Services.Appendix;
- using GreenTree.Nachtragsmanagement.Services.Configuration;
- using GreenTree.Nachtragsmanagement.Services.Deviation;
- using GreenTree.Nachtragsmanagement.Services.Logging;
- using GreenTree.Nachtragsmanagement.Services.Misc;
- using GreenTree.Nachtragsmanagement.Services.Scheduling;
- using GreenTree.Nachtragsmanagement.Services.User;
- using GreenTree.Nachtragsmanagement.Web.Extensions;
- using GreenTree.Nachtragsmanagement.Web.Framework.Authorization;
- using GreenTree.Nachtragsmanagement.Web.Models.Config;
- using GreenTree.Nachtragsmanagement.Web.Models.Global;
- using GreenTree.Nachtragsmanagement.Web.Models.Misc;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net.Mime;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using static GreenTree.Nachtragsmanagement.Web.Extensions.MVCxGridViewGeneratorHelper;
- namespace GreenTree.Nachtragsmanagement.Web.Controllers
- {
- public class MiscController : Controller
- {
- private readonly IMiscService _miscService;
- private readonly IUserService _userService;
- private readonly INotificationService _notificationService;
- private readonly INotificationScheduler _notificationScheduler;
- private readonly IConfigurationService _configurationService;
- private readonly IUserHelper _userHelper;
- private readonly ILogger _logger;
- public MiscController(
- IMiscService miscService,
- IUserService userService,
- INotificationService notificationService,
- INotificationScheduler notificationScheduler,
- IConfigurationService configurationService,
- IUserHelper userHelper,
- ILogger logger)
- {
- _miscService = miscService;
- _userService = userService;
- _notificationService = notificationService;
- _notificationScheduler = notificationScheduler;
- _configurationService = configurationService;
- _userHelper = userHelper;
- _logger = logger;
- ViewData["AllUsers"] = _userService.GetAllUsers();
- ViewData["AllUsersWithRole"] =
- _userService.GetAllUsers()
- .Select(u => new
- {
- Id = u.Id,
- Description = String.Format("{0} - {1}", u.Lastname,
- String.Join(", ", u.Roles
- .Select(r => r.Description)))
- })
- .ToList();
- ViewData["AllNotificationPlugins"] =
- _notificationService.GetNotificationPlugins();
- }
- #region MailNotifications
- /// <summary>
- /// Basic mailNotification view function
- /// </summary>
- [FunctionAuthorize(true, "Misc-MailNotifications")]
- public ActionResult ViewMailNotifications()
- {
- var mailNotifications = _miscService.GetAllMailNotifications();
- var mailNotificationModels = mailNotifications
- .Select(u => MailNotificationDataModel.FromMailNotification(
- u, false, _notificationService, _notificationScheduler))
- .ToList();
- return View("~/Views/Misc/MailNotifications.cshtml", mailNotificationModels);
- }
- /// <summary>
- /// Get JSON data of specific mailNotification
- /// </summary>
- /// <param name="id">MailNotification id.</param>
- public ActionResult GetMailNotification(int id = -1)
- {
- var mailNotification = _miscService.GetMailNotificationById(id);
- if (mailNotification == null)
- return new JsonResult
- {
- Data = "notFound",
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- var mailNotificationModel = MailNotificationDataModel.FromMailNotification(
- mailNotification, false, _notificationService, _notificationScheduler);
-
- return new JsonResult
- {
- Data = JsonConvert.SerializeObject(mailNotificationModel),
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- }
- /// <summary>
- /// Callback result for mailNotification grid
- /// </summary>
- /// <param name="scrollHeight">The height of the grid scrollable component.</param>
- public ActionResult PartialMailNotifications(int scrollHeight = -1)
- {
- var mailNotifications = _miscService.GetAllMailNotifications();
- var mailNotificationModels = mailNotifications
- .Select(u => MailNotificationDataModel.FromMailNotification(
- u, false, _notificationService, _notificationScheduler))
- .ToList();
- ViewData["ScrollHeight"] = scrollHeight;
- return PartialView("~/Views/Misc/_MailNotificationGridPartial.cshtml", mailNotificationModels);
- }
- /// <summary>
- /// Callback result for mailNotification job combobox
- /// </summary>
- /// <param name="pluginSystemName">The system name of the corresponding notification plugin.</param>
- public ActionResult PartialNotificationPluginJobs(string pluginSystemName)
- {
- var notificationPlugin = _notificationService.GetNotificationPlugin(pluginSystemName);
- if (notificationPlugin == null)
- return PartialView("~/Views/Misc/_MailNotificationPluginJobsPartial.cshtml", null);
- var mailNotificationModel = new MailNotificationDataModel
- {
- NotificationPlugin = notificationPlugin
- };
- return PartialView("~/Views/Misc/_MailNotificationPluginJobsPartial.cshtml", mailNotificationModel);
- }
- /// <summary>
- /// Partial edit for editing of existing or for new mailNotification
- /// </summary>
- /// <param name="id">Id for existing mailNotification, otherweise -1.</param>
- public ActionResult EditMailNotification(int id = -1)
- {
- var mailNotification = _miscService.GetMailNotificationById(id);
- var mailNotificationModel = MailNotificationDataModel.FromMailNotification(
- mailNotification, true, _notificationService, _notificationScheduler);
- return PartialView("~/Views/Misc/_MailNotificationEditPartial.cshtml", mailNotificationModel);
- }
- /// <summary>
- /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
- /// </summary>
- /// <param name="mailNotificationModel">MailNotification model to be saved.</param>
- [HttpPost, ValidateInput(false)]
- public ActionResult EditMailNotification(MailNotificationDataModel mailNotificationModel)
- {
- try
- {
- if (!ModelState.IsValid)
- {
- foreach (var role in mailNotificationModel.UserValues)
- mailNotificationModel.UserDescriptions.Add(
- ((IList<User>)ViewData["AllUsers"])
- .First(r => r.Id == role).Lastname);
- var notificationPlugin = _notificationService.GetNotificationPlugin(mailNotificationModel.NotificationPluginSystemName);
- if (notificationPlugin != null)
- mailNotificationModel.NotificationPlugin = notificationPlugin;
- return PartialView("~/Views/Misc/_MailNotificationEditPartial.cshtml", mailNotificationModel);
- }
- if (mailNotificationModel.CronExpression.Split(' ').Length == 5)
- mailNotificationModel.CronExpression = mailNotificationModel.CronExpression + " *";
- var selectedUsers = _userService.GetUsersByIds(mailNotificationModel.UserValues.ToArray());
- if (mailNotificationModel.Id == -1)
- {
- var mailNotification = mailNotificationModel.ToMailNotification();
- mailNotification.SetUsers(selectedUsers);
- _miscService.InsertMailNotification(mailNotification);
- _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
- }
- else
- {
- var mailNotification = _miscService.GetMailNotificationById(mailNotificationModel.Id);
- mailNotification.CronExpression = mailNotificationModel.CronExpression;
- mailNotification.NotificationPluginSystemName = mailNotificationModel.NotificationPluginSystemName;
- mailNotification.NotificationJobSystemName = mailNotificationModel.NotificationJobSystemName;
- mailNotification.SetUsers(selectedUsers);
- _miscService.UpdateMailNotification(mailNotification);
- _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
- }
- _notificationScheduler.Start();
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Speicherung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- /// <summary>
- /// Simple JSON result for deleting a specific mailNotification
- /// </summary>
- /// <param name="id">MailNotification id.</param>
- [HttpPost]
- public ActionResult DeleteMailNotification(int id)
- {
- try
- {
- var mailNotification = _miscService.GetMailNotificationById(id);
- if (mailNotification != null)
- _miscService.DeleteMailNotification(mailNotification);
- _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Löschung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- /// <summary>
- /// Processes the specific mailNotification
- /// </summary>
- /// <param name="id">MailNotification id.</param>
- [HttpPost]
- public ActionResult ProcessMailNotification(int id)
- {
- try
- {
- var mailNotification = _miscService.GetMailNotificationById(id);
- if (mailNotification != null)
- {
- var notificationPlugin = _notificationService.GetNotificationPlugin(mailNotification.NotificationPluginSystemName);
- notificationPlugin.ProcessNotifications(new[] { mailNotification });
- }
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Ausführung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- #endregion
- #region Logs
- /// <summary>
- /// Basic log view function
- /// </summary>
- [FunctionAuthorize(true, "Misc-Logs")]
- public ActionResult ViewLogs()
- {
- var logs = _logger.GetAllLogs();
- var logModels = logs
- .Select(u => LogDataModel.FromLog(u, false))
- .ToList();
- return View("~/Views/Misc/Logs.cshtml", logModels);
- }
- /// <summary>
- /// Get JSON data of specific log
- /// </summary>
- /// <param name="id">Log id.</param>
- public ActionResult GetLog(int id = -1)
- {
- var log = _logger.GetLogById(id);
- if (log == null)
- return new JsonResult
- {
- Data = "notFound",
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- var logModel = LogDataModel.FromLog(log, false);
- return new JsonResult
- {
- Data = JsonConvert.SerializeObject(logModel),
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- }
- /// <summary>
- /// Callback result for log grid
- /// </summary>
- /// <param name="scrollHeight">The height of the grid scrollable component.</param>
- public ActionResult PartialLogs(int scrollHeight = -1)
- {
- var logs = _logger.GetAllLogs();
- var logModels = logs
- .Select(u => LogDataModel.FromLog(u, false))
- .ToList();
- ViewData["ScrollHeight"] = scrollHeight;
- return PartialView("~/Views/Misc/_LogGridPartial.cshtml", logModels);
- }
- /// <summary>
- /// Export result for misc grid
- /// </summary>
- [HttpPost]
- public ActionResult ExportPartialLogs(string displayMode, string exportformat)
- {
- if (String.IsNullOrEmpty(displayMode))
- return new EmptyResult();
- var currentUser = _userHelper.FromCookies();
- var logs = _logger.GetAllLogs();
- var logModels = logs
- .Select(u => LogDataModel.FromLog(u, false))
- .ToList();
- var viewContext = new ViewContext();
- var viewPage = new ViewPage();
- var htmlHelper = new System.Web.Mvc.HtmlHelper(viewContext, viewPage);
- MVCxGridViewState gridViewState = (MVCxGridViewState)Session["LogGridViewState"];
- var settings = GridViewSettingsHelper.LogGridViewSettings(htmlHelper);
- if (gridViewState != null)
- {
- var generator = new MVCReportGeneratonHelper();
- generator.CustomizeColumnsCollection += new CustomizeColumnsCollectionEventHandler(logGenerator_CustomizeColumnsCollection);
- var report = generator.GenerateMVCReport(gridViewState, logModels, "Logliste");
- if (displayMode == "popup")
- {
- return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml",
- new PrintGridModel(report, "devGridViewLog",
- new { Controller = "Misc", Action = "ExportPartialLogs",
- displayMode = "callback", exportformat = String.Empty },
- new { Controller = "Misc", Action = "ExportPartialLogs",
- displayMode = "export", exportformat = String.Empty }));
- }
- else if (displayMode == "callback")
- {
- return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml",
- new PrintGridModel(report, "devGridViewLog",
- new { Controller = "Misc", Action = "ExportPartialLogs",
- displayMode = "callback", exportformat = String.Empty },
- new { Controller = "Misc", Action = "ExportPartialLogs",
- displayMode = "export", exportformat = String.Empty }));
- }
- else if (displayMode == "export")
- {
- switch (exportformat.ToLower())
- {
- case "xlsx":
- return GridViewExtension.ExportToXlsx(settings, logModels);
- case "xls":
- return GridViewExtension.ExportToXls(settings, logModels);
- case "pdf":
- report.Name = "Logliste";
- return DocumentViewerExtension.ExportTo(report);
- }
- }
- return new EmptyResult();
- }
- else
- return new EmptyResult();
- }
- /// <summary>
- /// Customize created columns
- /// </summary>
- private void logGenerator_CustomizeColumnsCollection(object source, ColumnsCreationEventArgs e)
- {
- foreach (var column in e.ColumnsInfo)
- {
- if (column.ColumnCaption == "#") { column.IsVisible = false; }
- if (column.FieldName == "LogLevelDescription") { column.ColumnWidth = 60; }
- if (column.FieldName == "ShortMessage") { column.ColumnWidth = 300; }
- if (column.FieldName == "FullMessage") { column.IsVisible = false; column.IsDetail = true; }
- if (column.FieldName == "IpAddress") { column.ColumnWidth = 70; }
- if (column.FieldName == "UserDescription") { column.ColumnWidth = 70; }
- if (column.FieldName == "EntityType") { column.ColumnWidth = 60; }
- if (column.FieldName == "EntityId") { column.ColumnWidth = 50; }
- if (column.FieldName == "CreatedOnUtc") { column.ColumnWidth = 70; }
- }
- }
- /// <summary>
- /// Partial edit for editing of existing or for new log
- /// </summary>
- /// <param name="id">Id for existing log, otherweise -1.</param>
- public ActionResult ViewLog(int id = -1)
- {
- var log = _logger.GetLogById(id);
- var logModel = LogDataModel.FromLog(log, true);
- return PartialView("~/Views/Misc/_LogViewPartial.cshtml", logModel);
- }
- /// <summary>
- /// Simple JSON result for deleting a specific log
- /// </summary>
- /// <param name="id">Log id.</param>
- [HttpPost]
- public ActionResult DeleteLog(int id)
- {
- try
- {
- var log = _logger.GetLogById(id);
- if (log != null)
- _logger.DeleteLog(log);
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Löschung eines Logs.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- #endregion
- #region ConfigItems
- /// <summary>
- /// Basic configItem view function
- /// </summary>
- [FunctionAuthorize(true, "Misc-ConfigItems")]
- public ActionResult ViewConfigItems()
- {
- var configItems = _configurationService.GetAllConfigItems();
- var configItemModels = configItems
- .Select(u => ConfigItemDataModel.FromConfigItem(u, false))
- .ToList();
- return View("~/Views/Config/View.cshtml", configItemModels);
- }
- /// <summary>
- /// Get JSON data of specific configItem
- /// </summary>
- /// <param name="id">ConfigItem id.</param>
- public ActionResult GetConfigItem(int id = -1)
- {
- var configItem = _configurationService.GetConfigItemById(id);
- if (configItem == null)
- return new JsonResult
- {
- Data = "notFound",
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- var configItemModel = ConfigItemDataModel.FromConfigItem(configItem, false);
- return new JsonResult
- {
- Data = JsonConvert.SerializeObject(configItemModel),
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- }
- /// <summary>
- /// Callback result for configItem grid
- /// </summary>
- /// <param name="scrollHeight">The height of the grid scrollable component.</param>
- public ActionResult PartialConfigItems(int scrollHeight = -1)
- {
- var configItems = _configurationService.GetAllConfigItems();
- var configItemModels = configItems
- .Select(u => ConfigItemDataModel.FromConfigItem(u, false))
- .ToList();
- ViewData["ScrollHeight"] = scrollHeight;
- return PartialView("~/Views/Config/_ConfigItemGridPartial.cshtml", configItemModels);
- }
- /// <summary>
- /// Partial edit for config item value
- /// </summary>
- /// <param name="typeFullName">Value type.</param>
- public ActionResult GetValueTypePartialEdit(string typeFullName)
- {
- var model = new ConfigItemDataModel
- {
- TypeFullName = typeFullName
- };
- return PartialView("~/Views/Config/_ConfigItemValueEditPartial.cshtml", model);
- }
- /// <summary>
- /// Partial edit for editing of existing or for new configItem
- /// </summary>
- /// <param name="id">Id for existing configItem, otherweise -1.</param>
- public ActionResult EditConfigItem(int id = -1)
- {
- var configItem = _configurationService.GetConfigItemById(id);
- var configItemModel = ConfigItemDataModel.FromConfigItem(configItem, true);
- return PartialView("~/Views/Config/_ConfigItemEditPartial.cshtml", configItemModel);
- }
- /// <summary>
- /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
- /// </summary>
- /// <param name="configItemModel">ConfigItem model to be saved.</param>
- [HttpPost, ValidateInput(false)]
- public ActionResult EditConfigItem(ConfigItemDataModel configItemModel)
- {
- try
- {
- if (!ModelState.IsValid)
- return PartialView("~/Views/Config/_ConfigItemEditPartial.cshtml", configItemModel);
- if (configItemModel.Id == -1)
- {
- var configItem = configItemModel.ToConfigItem();
- _configurationService.InsertConfigItem(configItem);
- _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
- }
- else
- {
- var configItem = _configurationService.GetConfigItemById(configItemModel.Id);
- configItem.Name = configItemModel.Name;
- configItem.TypeFullName = configItemModel.TypeFullName;
- configItem.Value = configItemModel.Value;
- configItem.Description = configItemModel.Description;
- _configurationService.UpdateConfigItem(configItem);
- _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
- }
- _notificationScheduler.Start();
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Speicherung einer Einstellung.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- /// <summary>
- /// Simple JSON result for deleting a specific configItem
- /// </summary>
- /// <param name="id">ConfigItem id.</param>
- [HttpPost]
- public ActionResult DeleteConfigItem(int id)
- {
- try
- {
- var configItem = _configurationService.GetConfigItemById(id);
- if (configItem != null)
- _configurationService.DeleteConfigItem(configItem);
- _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Löschung einer Einstellung.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- #endregion
- #region HelpPages
- /// <summary>
- /// Basic helpPage view function
- /// </summary>
- [FunctionAuthorize(true, "Misc-HelpPages")]
- public ActionResult ViewHelpPages()
- {
- var helpPages = _miscService.GetAllHelpPages();
- var helpPageModels = helpPages
- .Select(u => HelpPageDataModel.FromHelpPage(u, false))
- .ToList();
- var helpPageTreeModelList = new List<HelpPageTreeModel>();
- var categoryPageModels = helpPageModels
- .Where(p => String.IsNullOrEmpty(p.Category))
- .OrderBy(p => p.DisplayIndex)
- .ToList();
- foreach (var categoryPageModel in categoryPageModels)
- {
- helpPageTreeModelList.Add(new HelpPageTreeModel
- {
- Text = categoryPageModel.Title,
- HelpPageId = categoryPageModel.Id
- });
- }
- var categoryModels = helpPageModels
- .Where(p => !String.IsNullOrEmpty(p.Category))
- .OrderBy(p => p.DisplayIndex)
- .GroupBy(p => p.Category)
- .ToList();
- foreach (var categoryModel in categoryModels)
- {
- var categoryTreeModel = new HelpPageTreeModel
- {
- Text = categoryModel.Key
- };
- helpPageTreeModelList.Add(categoryTreeModel);
- var subcategoryPageModels = helpPageModels
- .Where(p => p.Category == categoryModel.Key && String.IsNullOrEmpty(p.Subcategory))
- .OrderBy(p => p.DisplayIndex)
- .ToList();
- foreach (var subcategoryPageModel in subcategoryPageModels)
- {
- var subcategoryTreePageModel = new HelpPageTreeModel
- {
- Text = subcategoryPageModel.Title,
- HelpPageId = subcategoryPageModel.Id
- };
- categoryTreeModel.Elements.Add(subcategoryTreePageModel);
- }
- var subcategoryModels = helpPageModels
- .Where(p => p.Category == categoryModel.Key && !String.IsNullOrEmpty(p.Subcategory))
- .OrderBy(p => p.DisplayIndex)
- .GroupBy(p => p.Subcategory)
- .ToList();
- foreach (var subcategoryModel in subcategoryModels)
- {
- var subcategoryTreeModel = new HelpPageTreeModel
- {
- Text = subcategoryModel.Key
- };
- categoryTreeModel.Elements.Add(subcategoryTreeModel);
- var subcategoryHelpPageModels = helpPageModels
- .Where(p => p.Category == categoryModel.Key && p.Subcategory == subcategoryModel.Key)
- .OrderBy(p => p.DisplayIndex)
- .ToList();
- foreach (var subcategoryHelpPageModel in subcategoryHelpPageModels)
- {
- var helpPageTreeModel = new HelpPageTreeModel
- {
- Text = subcategoryHelpPageModel.Title,
- HelpPageId = subcategoryHelpPageModel.Id
- };
- subcategoryTreeModel.Elements.Add(helpPageTreeModel);
- }
- }
- }
- return View("~/Views/Misc/HelpPages.cshtml", helpPageTreeModelList);
- }
- /// <summary>
- /// Get JSON data of specific helpPage
- /// </summary>
- /// <param name="id">HelpPage id.</param>
- public ActionResult GetHelpPage(int id = -1)
- {
- var helpPage = _miscService.GetHelpPageById(id);
- if (helpPage == null)
- return new JsonResult
- {
- Data = "notFound",
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- var helpPageModel = HelpPageDataModel.FromHelpPage(helpPage, false);
- return new JsonResult
- {
- Data = JsonConvert.SerializeObject(helpPageModel),
- JsonRequestBehavior = JsonRequestBehavior.AllowGet
- };
- }
- /// <summary>
- /// Partial edit for editing of existing or for new helpPage
- /// </summary>
- /// <param name="id">Id for existing helpPage, otherweise -1.</param>
- public ActionResult ViewHelpPage(int id = -1)
- {
- var helpPage = _miscService.GetHelpPageById(id);
- var helpPageModel = HelpPageDataModel.FromHelpPage(helpPage, true);
- if (helpPage != null)
- return PartialView("~/Views/Misc/_HelpPageViewPartial.cshtml", helpPageModel);
- return new EmptyResult();
- }
- /// <summary>
- /// Partial edit for editing of existing or for new helpPage
- /// </summary>
- /// <param name="id">Id for existing helpPage, otherweise -1.</param>
- public ActionResult EditHelpPage(int id = -1)
- {
- var helpPage = _miscService.GetHelpPageById(id);
- var helpPageModel = HelpPageDataModel.FromHelpPage(helpPage, true);
- return PartialView("~/Views/Misc/_HelpPageEditPartial.cshtml", helpPageModel);
- }
- /// <summary>
- /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
- /// </summary>
- /// <param name="helpPageModel">HelpPage model to be saved.</param>
- [HttpPost, ValidateInput(false)]
- public ActionResult EditHelpPage(HelpPageDataModel helpPageModel)
- {
- try
- {
- if (!ModelState.IsValid)
- return PartialView("~/Views/Misc/_HelpPageEditPartial.cshtml", helpPageModel);
- if (helpPageModel.Id == -1)
- {
- var helpPage = helpPageModel.ToHelpPage();
- _miscService.InsertHelpPage(helpPage);
- _logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
- }
- else
- {
- var helpPage = _miscService.GetHelpPageById(helpPageModel.Id);
- helpPage.Title = helpPageModel.Title;
- helpPage.Content = helpPageModel.Content;
- helpPage.Category = helpPage.Category;
- helpPage.Subcategory = helpPage.Subcategory;
- helpPage.DisplayIndex = helpPage.DisplayIndex;
- _miscService.UpdateHelpPage(helpPage);
- _logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
- }
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Speicherung einer Hilfe-Seite.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- /// <summary>
- /// Simple JSON result for deleting a specific helpPage
- /// </summary>
- /// <param name="id">HelpPage id.</param>
- [HttpPost]
- public ActionResult DeleteHelpPage(int id)
- {
- try
- {
- var helpPage = _miscService.GetHelpPageById(id);
- if (helpPage != null)
- _miscService.DeleteHelpPage(helpPage);
- return new JsonResult
- {
- Data = "success"
- };
- }
- catch (Exception ex)
- {
- _logger.Error("Fehler bei Löschung einer Hilfe-Seite.", ex, _userHelper.FromCookies());
- return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
- }
- }
- #endregion
- }
- }
|