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
///
/// Basic mailNotification view function
///
[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);
}
///
/// Get JSON data of specific mailNotification
///
/// MailNotification id.
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
};
}
///
/// Callback result for mailNotification grid
///
/// The height of the grid scrollable component.
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);
}
///
/// Callback result for mailNotification job combobox
///
/// The system name of the corresponding notification plugin.
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);
}
///
/// Partial edit for editing of existing or for new mailNotification
///
/// Id for existing mailNotification, otherweise -1.
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);
}
///
/// Partial edit result if ModelState is valid, otherwise simple JSON result for success
///
/// MailNotification model to be saved.
[HttpPost, ValidateInput(false)]
public ActionResult EditMailNotification(MailNotificationDataModel mailNotificationModel)
{
try
{
if (!ModelState.IsValid)
{
foreach (var role in mailNotificationModel.UserValues)
mailNotificationModel.UserDescriptions.Add(
((IList)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);
}
}
///
/// Simple JSON result for deleting a specific mailNotification
///
/// MailNotification id.
[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);
}
}
///
/// Processes the specific mailNotification
///
/// MailNotification id.
[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
///
/// Basic log view function
///
[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);
}
///
/// Get JSON data of specific log
///
/// Log id.
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
};
}
///
/// Callback result for log grid
///
/// The height of the grid scrollable component.
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);
}
///
/// Export result for misc grid
///
[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();
}
///
/// Customize created columns
///
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; }
}
}
///
/// Partial edit for editing of existing or for new log
///
/// Id for existing log, otherweise -1.
public ActionResult ViewLog(int id = -1)
{
var log = _logger.GetLogById(id);
var logModel = LogDataModel.FromLog(log, true);
return PartialView("~/Views/Misc/_LogViewPartial.cshtml", logModel);
}
///
/// Simple JSON result for deleting a specific log
///
/// Log id.
[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
///
/// Basic configItem view function
///
[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);
}
///
/// Get JSON data of specific configItem
///
/// ConfigItem id.
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
};
}
///
/// Callback result for configItem grid
///
/// The height of the grid scrollable component.
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);
}
///
/// Partial edit for config item value
///
/// Value type.
public ActionResult GetValueTypePartialEdit(string typeFullName)
{
var model = new ConfigItemDataModel
{
TypeFullName = typeFullName
};
if (typeFullName.StartsWith("ConfigurationReference"))
{
var configurationReference = ConfigurationHelper.GetConfigurationReferenceByName(typeFullName);
if (configurationReference != null)
{
model.IsValueCollection = configurationReference.IsMultipleSelection;
ViewData["ConfigReferenceValues"] = configurationReference.GetAvailableValues();
}
return PartialView("~/Views/Config/_ConfigItemReferenceEditPartial.cshtml", model);
}
else
return PartialView("~/Views/Config/_ConfigItemValueEditPartial.cshtml", model);
}
///
/// Partial edit for editing of existing or for new configItem
///
/// Id for existing configItem, otherweise -1.
public ActionResult EditConfigItem(int id = -1)
{
var configItem = _configurationService.GetConfigItemById(id);
var configItemModel = ConfigItemDataModel.FromConfigItem(configItem, true);
if (configItem != null && configItem.TypeFullName.StartsWith("ConfigurationReference"))
{
var configurationReference = ConfigurationHelper.GetConfigurationReferenceByName(configItem.TypeFullName);
if (configurationReference != null)
ViewData["ConfigReferenceValues"] = configurationReference.GetAvailableValues();
}
return PartialView("~/Views/Config/_ConfigItemEditPartial.cshtml", configItemModel);
}
///
/// Partial edit result if ModelState is valid, otherwise simple JSON result for success
///
/// ConfigItem model to be saved.
[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.Description = configItemModel.Description;
if (ConfigItemDataModel.FullTypeTranslations.ContainsKey(configItemModel.TypeFullName))
{
configItem.Value = configItemModel.Value;
}
else
{
var configurationReference = ConfigurationHelper.GetConfigurationReferenceByName(configItemModel.TypeFullName);
if (configurationReference != null)
{
if (configurationReference.IsMultipleSelection)
configItem.Value = configurationReference.TransformValueCollectionToValue(configItemModel.Values);
else
configItem.Value = configItemModel.Value;
}
}
_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);
}
}
///
/// Simple JSON result for deleting a specific configItem
///
/// ConfigItem id.
[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
///
/// Default fileSaveSettings for the image uploader of the htmlEditor
///
private static HtmlEditorFileSaveSettings fileSaveSettings;
///
/// Default fileSaveSettings for the image uploader of the htmlEditor
///
public static HtmlEditorFileSaveSettings FileSaveSettings
{
get
{
if (fileSaveSettings == null)
{
fileSaveSettings = new HtmlEditorFileSaveSettings();
fileSaveSettings.FileSystemSettings.UploadFolder = "../Content/Images/HelpPages/";
}
return fileSaveSettings;
}
}
///
/// Default validationSettings for the image uploader of the htmlEditor
///
public static readonly UploadControlValidationSettings ImageUploadValidationSettings = new UploadControlValidationSettings
{
AllowedFileExtensions = new string[] { ".jpg", ".jpeg", ".jpe", ".gif", ".png" },
MaxFileSize = 4000000
};
///
/// Creates the helpPage tree recursively
///
/// Full helpPage model list.
/// Parent node collection.
/// Parent node id.
public static void CreateHelpPageTree(IEnumerable models, MVCxTreeViewNodeCollection nodesCollection,
int? parentID)
{
var children = models
.Where(p => p.ParentId == parentID);
foreach (var model in children)
{
var node = nodesCollection.Add(model.Title, model.Id.ToString());
node.Expanded = true;
CreateHelpPageTree(models, node.Nodes, model.Id);
}
}
///
/// Basic helpPage view function
///
/// Id of initial editing helpPage.
[FunctionAuthorize(true, "Misc-HelpPages")]
public ActionResult ViewHelpPages(int id = -1)
{
var helpPages = _miscService.GetAllHelpPagesWithoutContent();
var helpPageModels = helpPages
.Select(u => HelpPageDataModel.FromHelpPage(u, false))
.OrderBy(u => u.DisplayIndex)
.ToList();
var initialHelpPageModelExists = helpPageModels
.Any(p => p.Id == id);
if (initialHelpPageModelExists)
ViewData["InitialEditHelpPage"] = id;
ViewData["IsHelpPageSelectionTree"] = false;
return View("~/Views/Misc/HelpPages.cshtml", helpPageModels);
}
///
/// Callback result for editing of help page
///
/// HelpPage model to be edited.
public ActionResult PartialHtmlEditor(HelpPageDataModel helpPageModel)
{
return PartialView("~/Views/Misc/_HelpPageHtmlEditPartial.cshtml", helpPageModel);
}
///
/// Callback result for processing the upload of an image for a helpPage
///
public ActionResult UploadProcessingImageUpload()
{
FileSavingEventHandler onFileSaving = (s, e) => {
using (var fileContent = e.UploadedFile.FileContent)
{
using (var image = System.Drawing.Image.FromStream(fileContent))
{
var memoryStream = new MemoryStream();
image.Save(memoryStream, image.RawFormat);
e.OutputStream = memoryStream;
e.FileName = e.UploadedFile.FileName;
}
}
};
HtmlEditorExtension.SaveUploadedFile(FileSaveSettings, ImageUploadValidationSettings, onFileSaving);
return null;
}
///
/// Get JSON data of specific helpPage
///
/// HelpPage id.
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
};
}
///
/// Partial edit for editing of existing or for new helpPage
///
/// Id for existing helpPage, otherweise -1.
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();
}
///
/// Partial edit for editing of existing or for new helpPage
///
/// Id for existing helpPage, otherweise -1.
public ActionResult EditHelpPage(int id = -1)
{
var helpPages = _miscService.GetAllHelpPages();
var helpPageModels = helpPages
.Select(u => HelpPageDataModel.FromHelpPage(u, false))
.ToList();
var helpPage = _miscService.GetHelpPageById(id);
var helpPageModel = HelpPageDataModel.FromHelpPage(helpPage, true);
ViewData["AllHelpPages"] = helpPageModels;
ViewData["IsHelpPageSelectionTree"] = true;
return PartialView("~/Views/Misc/_HelpPageEditPartial.cshtml", helpPageModel);
}
///
/// Partial edit result if ModelState is valid, otherwise simple JSON result for success
///
/// HelpPage model to be saved.
[HttpPost, ValidateInput(false)]
public ActionResult EditHelpPage(HelpPageDataModel helpPageModel)
{
try
{
if (!ModelState.IsValid)
{
var helpPages = _miscService.GetAllHelpPages();
var helpPageModels = helpPages
.Select(u => HelpPageDataModel.FromHelpPage(u, false))
.ToList();
ViewData["IsHelpPageSelectionTree"] = true;
ViewData["AllHelpPages"] = helpPageModels;
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());
return new JsonResult
{
Data = String.Format("success-{0}", helpPage.Id)
};
}
else
{
var helpPage = _miscService.GetHelpPageById(helpPageModel.Id);
helpPage.Title = helpPageModel.Title;
helpPage.Content = helpPageModel.Content;
helpPage.ParentId = helpPageModel.ParentId;
helpPage.DisplayIndex = helpPageModel.DisplayIndex;
_miscService.UpdateHelpPage(helpPage);
_logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
return new JsonResult
{
Data = String.Format("success-{0}", helpPage.Id)
};
}
}
catch (Exception ex)
{
_logger.Error("Fehler bei Speicherung einer Hilfe-Seite.", ex, _userHelper.FromCookies());
return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
}
}
///
/// Simple JSON result for deleting a specific helpPage
///
/// HelpPage id.
[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
}
}