/*
Kooboo is a content management system based on ASP.NET MVC framework. Copyright 2009 Yardi Technology Limited.
This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License version 3 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program.
If not, see http://www.kooboo.com/gpl3/.
*/
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Everest.Library.Mvc;
using Everest.Library.Reflection;
using Everest.Library.ExtensionMethod;
using Everest.CmsServices.MvcHelper;
namespace Everest.CmsServices.Extension.Module{
public class ModuleController : Controller
{
public ModuleController()
{
ActionResultHelper = new ActionResultHelper(this);
this.TempDataProvider = new ModuleSessionStateTempDataProvider();
}
#region Property
/// <summary>
/// Gets the parent page context.
/// </summary>
/// <value>The parent page context.</value>
public ParentPageContext ParentPageContext
{
get
{
return ((ModuleRequestContext)this.ControllerContext.RequestContext).ParentPageContext;
}
}
/// <summary>
/// Gets the module info.
/// </summary>
/// <value>The module info.</value>
public ModuleInfo ModuleInfo
{
get
{
return ((ModuleRequestContext)this.ControllerContext.RequestContext).ModuleInfo;
}
}
/// <summary>
/// Gets the CMS context.
/// </summary>
/// <value>The CMS context.</value>
public CmsContext CmsContext
{
get
{
return this.ControllerContext.HttpContext.GetCmsContext();
}
}
bool enableTheming = true;
public bool EnableTheming
{
get
{
return enableTheming;
}
set
{
enableTheming = value;
}
}
bool _includeJavascript = true;
public bool IncludeJavascript
{
get
{
return _includeJavascript;
}
set
{
_includeJavascript = value;
}
}
private UrlHelper _urlHelper;
public new UrlHelper Url
{
get
{
if (this._urlHelper == null)
{
this._urlHelper = new UrlHelper(this.ControllerContext.RequestContext, ModuleInfo.RouteTable);
}
return this._urlHelper;
}
}
#endregion
#region ExecuteAction
/// <summary>
/// Gets or sets the action result.
/// </summary>
/// <value>The action result.</value>
private ActionResult ActionResult { get; set; }
/// <summary>
/// Invokes the action without execute the ActionResult.
/// </summary>
/// <param name="requestContext">The request context.</param>
/// <returns></returns>
internal ActionResult InvokeAction(RequestContext requestContext)
{
if (requestContext == null)
{
throw new ArgumentNullException("requestContext");
}
this.Initialize(requestContext);
this.ActionInvoker = new ModuleControllerActionInvoker(ModuleInfo);
ActionResult = this.InvokeActionCore();
return ActionResult;
}
/// <summary>
/// Executes the result.
/// </summary>
internal void ExecuteResult()
{
string actionName = this.RouteData.GetRequiredString("action");
var actionResultWrapper = ActionResult;
if (ActionResult is FileResult)
{
actionResultWrapper = new ModuleFileResult((FileResult)ActionResult);
}
if (ActionResult is PartialViewResult)
{
actionResultWrapper = new ModulePartialViewResult((PartialViewResult)ActionResult);
}
if (ActionResult is JsonResult)
{
actionResultWrapper = new ModuleJsonResult((JsonResult)ActionResult);
}
if (ActionResult is ContentResult)
{
actionResultWrapper = new ModuleContentResult((ContentResult)ActionResult);
}
if (ActionResult is JavaScriptResult)
{
actionResultWrapper = new ModuleJavaScriptResult((JavaScriptResult)ActionResult);
}
if (ActionResult is RedirectToRouteResult)
{
SetRouteTable((RedirectToRouteResult)ActionResult);
}
((ModuleControllerActionInvoker)this.ActionInvoker).ExecuteActionResult(ControllerContext, actionName, actionResultWrapper);
}
/// <summary>
/// Sets the route table.
/// Set the module route table to redirect action result.
/// </summary>
/// <param name="redirectToRouteResult">The redirect to route result.</param>
private void SetRouteTable(RedirectToRouteResult redirectToRouteResult)
{
typeof(RedirectToRouteResult).SetPropertyValue("Routes", redirectToRouteResult, ((ModuleRequestContext)(this.ControllerContext.RequestContext)).RouteTable);
}
/// <summary>
/// Executes the core.
/// Invoke the action without execute the actionresult.
/// </summary>
/// <returns></returns>
protected ActionResult InvokeActionCore()
{
base.TempData.Load(base.ControllerContext, this.TempDataProvider);
try
{
string actionName = this.RouteData.GetRequiredString("action");
var actionResult = ((ModuleControllerActionInvoker)this.ActionInvoker).InvokeActionWithoutExecuteResult(base.ControllerContext, actionName);
if (actionResult == null)
{
HandleUnknownAction(actionName);
}
return actionResult;
}
finally
{
base.TempData.Save(base.ControllerContext, this.TempDataProvider);
}
}
#endregion
#region Public Method
/// <summary>
/// Sets the page title.
/// </summary>
/// <param name="title">The title.</param>
protected virtual void SetPageTitle(string title)
{
if (ModuleInfo.ModuleSettings.EnabledPageTitle)
{
ParentPageContext.ViewPage.Title = string.Format(ModuleInfo.ModuleSettings.PageTitleFormat, title);
}
}
/// <summary>
/// Sets the HTML meta.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="content">The content.</param>
protected virtual void SetHtmlMeta(string name, string content)
{
SetHtmlMeta(name, content, "", "");
}
/// <summary>
/// Sets the HTML meta.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="content">The content.</param>
/// <param name="httpEquiv">The HTTP equiv.</param>
/// <param name="schema">The schema.</param>
protected virtual void SetHtmlMeta(string name, string content, string httpEquiv, string schema)
{
this.ParentPageContext.ViewPage.SetHtmlMeta(name, content, httpEquiv, schema);
}
#region Get TextResource
/// <summary>
/// Gets the text resource.
/// </summary>
/// <param name="key">The key.</param>
/// <returns></returns>
protected string GetTextResource(string key)
{
return ParentPageContext.ViewPage.GetResource(key);
}
/// <summary>
/// Gets the text resource.
/// </summary>
/// <param name="key">The key.</param>
/// <param name="defaultValue">The default value.</param>
/// <returns></returns>
protected string GetTextResource(string key, string defaultValue)
{
return ParentPageContext.ViewPage.GetResource(key, defaultValue);
}
/// <summary>
/// Gets the text resource.
/// </summary>
/// <param name="strNamespace">The STR namespace.</param>
/// <param name="key">The key.</param>
/// <param name="defaultValue">The default value.</param>
/// <returns></returns>
protected string GetTextResource(string strNamespace, string key, string defaultValue)
{
return ParentPageContext.ViewPage.GetResource(strNamespace, key, defaultValue);
}
#endregion
#endregion
public ActionResultHelper ActionResultHelper { get; set; }
}
}
|