using System;
using System.Web;
using umbraco.presentation.LiveEditing;
using umbraco.BasePages;
using umbraco.cms.businesslogic.web;
namespace umbraco.presentation
{
///
/// Class that encapsulates Umbraco information of a specific HTTP request.
///
public class UmbracoContext
{
private HttpContext m_HttpContext;
///
/// Gets the current Umbraco Context.
///
public static UmbracoContext Current
{
get
{
return (UmbracoContext)HttpContext.Current.Items["UmbracoContext"];
}
set
{
if (Current != null)
throw new ApplicationException("The current httpContext can only be set once during a request.");
HttpContext.Current.Items["UmbracoContext"] = value;
}
}
///
/// Gets the current page ID, or null if no page ID is available (e.g. a custom page).
///
public virtual int? PageId
{
get
{
try
{
return int.Parse(m_HttpContext.Items["pageID"].ToString());
}
catch
{
return null;
}
}
}
///
/// Determines whether the current user has the specified permission on the current page.
///
/// The permission token.
///
/// true if the user has permission; otherwise, false.
///
public virtual bool HasPermission(char permissionToken)
{
int? pageId = UmbracoContext.Current.PageId;
return pageId.HasValue
&& UmbracoEnsuredPage.CurrentUser != null
&& UmbracoEnsuredPage.CurrentUser.GetPermissions(new Document(pageId.Value).Path)
.Contains(permissionToken.ToString());
}
///
/// Gets the current Live Editing Context.
///
public virtual ILiveEditingContext LiveEditingContext
{
get
{
ILiveEditingContext value = (ILiveEditingContext)m_HttpContext.Items["LiveEditingContext"];
if (value == null)
{
LiveEditingContext = value = new DefaultLiveEditingContext();
}
return value;
}
set
{
m_HttpContext.Items["LiveEditingContext"] = value;
}
}
///
/// Creates a new Umbraco context.
///
/// The HTTP context on which the Umbraco context operates.
public UmbracoContext(HttpContext httpContext)
{
m_HttpContext = httpContext;
}
///
/// Gets the response for the current context
///
/// The response.
public HttpResponse Response
{
get
{
return this.m_HttpContext.Response;
}
}
///
/// Gets the request for the current context
///
/// The request.
public HttpRequest Request
{
get
{
return this.m_HttpContext.Request;
}
}
}
}