199 lines
8.1 KiB
C#
199 lines
8.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Entity.Validation;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using EnVisage.Code;
|
|
using NLog;
|
|
using EnVisage.Code.Session;
|
|
|
|
namespace EnVisage.Controllers
|
|
{
|
|
[Authorize]
|
|
public abstract class BaseController : Controller
|
|
{
|
|
protected readonly EnVisageEntities DbContext = new EnVisageEntities();
|
|
|
|
protected static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
public void LogError(ExceptionContext exceptionContext)
|
|
{
|
|
Logger.Fatal(exceptionContext.Exception);
|
|
}
|
|
|
|
public void LogError(string message)
|
|
{
|
|
Logger.Fatal(message);
|
|
}
|
|
|
|
public void LogException(Exception ex)
|
|
{
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine(string.Format("{0}: {1}", ex.GetType(), ex.Message));
|
|
sb.AppendLine(ex.StackTrace);
|
|
|
|
var innerCount = 0;
|
|
var innerEx = ex;
|
|
while (innerEx.InnerException != null && innerCount++ < Constants.MAX_INNER_EXCEPTION_LOG_LEVEL)
|
|
{
|
|
if (innerEx.Message != innerEx.InnerException.Message)
|
|
sb.AppendLine("Inner Exception Message: " + innerEx.InnerException.Message);
|
|
innerEx = innerEx.InnerException;
|
|
}
|
|
var dbEntityValidationException = ex as DbEntityValidationException;
|
|
if (dbEntityValidationException != null)
|
|
{
|
|
foreach (var validationErrors in dbEntityValidationException.EntityValidationErrors)
|
|
{
|
|
foreach (var validationError in validationErrors.ValidationErrors)
|
|
{
|
|
sb.AppendFormat("Property: {0} Error: {1}", validationError.PropertyName,
|
|
validationError.ErrorMessage);
|
|
|
|
}
|
|
}
|
|
sb.AppendLine(dbEntityValidationException.StackTrace);
|
|
}
|
|
if (System.Web.HttpContext.Current != null)
|
|
{
|
|
sb.AppendLine();
|
|
sb.AppendLine(string.Format("URL: {0}", System.Web.HttpContext.Current.Request.Url));
|
|
sb.AppendLine(string.Format("Referrer: {0}", System.Web.HttpContext.Current.Request.UrlReferrer));
|
|
sb.AppendLine(string.Format("QueryString: {0}", System.Web.HttpContext.Current.Request.QueryString));
|
|
sb.AppendLine(string.Format("UserHostAddress: {0}", System.Web.HttpContext.Current.Request.UserHostAddress));
|
|
sb.AppendLine(string.Format("UserAgent: {0}", System.Web.HttpContext.Current.Request.UserAgent));
|
|
if (System.Web.HttpContext.Current.Request.Form.Count > 0)
|
|
{
|
|
sb.AppendLine();
|
|
sb.AppendLine("Form:");
|
|
foreach (string key in System.Web.HttpContext.Current.Request.Form.Keys)
|
|
{
|
|
sb.AppendLine(string.Format("{0}: {1}", key, System.Web.HttpContext.Current.Request.Form[key]));
|
|
}
|
|
}
|
|
}
|
|
|
|
// log error using NLog
|
|
Logger.Fatal(sb.ToString());
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
DbContext.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
protected virtual void SetErrorScript(string title = Constants.ERROR_GENERAL_TITLE_TEMPLATE,
|
|
string message = Constants.ERROR_GENERAL_MESSAGE_TEMPLATE)
|
|
{
|
|
ViewBag.StartUpJS = string.Format("showErrorModal('{0}','{1}');", title.Replace("'", "''"),
|
|
message.Replace("'", "''"));
|
|
}
|
|
|
|
protected BaseController()
|
|
{
|
|
ViewBag.GlobalVariables = string.Format("var _isLockCheckIntervalMs = {0};{1}var _periodOfInactivity = {2};",
|
|
Properties.Settings.Default.JSLockCheckInterval, Environment.NewLine,
|
|
Properties.Settings.Default.UnlockInterval);
|
|
|
|
if (SessionManager.Exists(Constants.USERVOICE_SSO_TOKEN))
|
|
{
|
|
ViewBag.ssoToken = SessionManager.GetValue<string>(Constants.USERVOICE_SSO_TOKEN);
|
|
}
|
|
else
|
|
{
|
|
if (System.Web.HttpContext.Current.Request.Cookies[Constants.USERVOICE_COOKIE_CONTEXT] != null)
|
|
{
|
|
ViewBag.ssoToken = System.Web.HttpContext.Current.Request.Cookies[Constants.USERVOICE_COOKIE_CONTEXT][Constants.USERVOICE_SSO_TOKEN];
|
|
}
|
|
}
|
|
}
|
|
|
|
// TEMPLATE FOR ANY GET METHOD
|
|
//public ActionResult Index()
|
|
//{
|
|
// try
|
|
// {
|
|
// // check permission to get this info
|
|
// if (!HtmlHelpers.CheckSecurityObjectPermission(null, "Fiscal Calendar", "Area", User.Identity.GetID()))
|
|
// return Redirect("/");
|
|
// // load data from DB using BLL object
|
|
// var manager = new FiscalCalendarManager(DbContext);
|
|
// var model = manager.LoadFiscalCalendarSettings();
|
|
// // return model filled with data from DB
|
|
// return View(model);
|
|
// }
|
|
// catch (BLLException blEx) // handle any system specific error
|
|
// {
|
|
// // display error message if required
|
|
// if (blEx.DisplayError)
|
|
// SetErrorScript(message: blEx.Message);
|
|
// else // if display not requried then display modal form with general error message
|
|
// {
|
|
// LogException(blEx);
|
|
// SetErrorScript();
|
|
// }
|
|
// }
|
|
// catch (Exception exception) // handle any unexpected error
|
|
// {
|
|
// LogException(exception);
|
|
// SetErrorScript();
|
|
// }
|
|
// // return empty model with validation message (if any)
|
|
// return View(new FiscalCalendarModel());
|
|
//}
|
|
|
|
// TEMPLATE FOR ANY POST METHOD
|
|
//[HttpPost]
|
|
//[ValidateAntiForgeryToken]
|
|
//public ActionResult Edit(FiscalCalendarModel model)
|
|
//{
|
|
// // remove whitespaces from string model properties
|
|
// model.TrimStringProperties();
|
|
|
|
// Example of logging object
|
|
//var sb = new StringBuilder();
|
|
//sb.AppendLine("Model of the Edit method (post):");
|
|
//model.DebugObjectProperties(sb);
|
|
//Logger.Debug(sb);
|
|
|
|
// if (ModelState.IsValid)
|
|
// {
|
|
// try
|
|
// {
|
|
// // save data from model to the DB
|
|
// var manager = new FiscalCalendarManager(DbContext);
|
|
// manager.SaveFiscalCalendarSettings(model);
|
|
// DbContext.SaveChanges();
|
|
// // remove content lock
|
|
// ContentLocker.RemoveLock("SystemSettings", model.TypeSettingId.ToString(), User.Identity.Name);
|
|
// // refresh the page on successful result
|
|
// return RedirectToAction("Index");
|
|
// }
|
|
// catch (BLLException blEx) // handle any system specific error
|
|
// {
|
|
// // display error message if required
|
|
// if (blEx.DisplayError)
|
|
// ModelState.AddModelError(string.Empty, blEx.Message);
|
|
// else // if display not requried then display modal form with general error message
|
|
// {
|
|
// LogException(blEx);
|
|
// SetErrorScript();
|
|
// }
|
|
// }
|
|
// catch (Exception exception) // handle any unexpected error
|
|
// {
|
|
// LogException(exception);
|
|
// SetErrorScript();
|
|
// }
|
|
// }
|
|
// // return empty model with validation message (if any)
|
|
// return View(model);
|
|
//}
|
|
}
|
|
} |