using System;
using System.Web;
using umbraco.presentation.LiveEditing;
using umbraco.BasePages;
using umbraco.cms.businesslogic.web;
using System.Xml.Linq;
using umbraco.BusinessLogic;
using System.Xml;
using umbraco.presentation.preview;
using Examine.Providers;
using Examine;
namespace umbraco.presentation
{
///
/// Class that encapsulates Umbraco information of a specific HTTP request.
///
public class UmbracoContext
{
private UmbracoServerUtility m_Server;
private UmbracoRequest m_Request;
private UmbracoResponse m_Response;
private HttpContext m_HttpContext;
private XmlDocument previewDocument;
///
/// Creates a new Umbraco context.
///
/// The HTTP context on which the Umbraco context operates.
public UmbracoContext(HttpContext httpContext)
{
m_HttpContext = 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;
}
}
}
///
/// Gets the current logged in Umbraco user (editor).
///
/// The Umbraco user object or null
public virtual User UmbracoUser
{
get
{
return BasePages.UmbracoEnsuredPage.CurrentUser;
}
}
///
/// Determines whether the current user is in a preview mode and browsing the site (ie. not in the admin UI)
///
public virtual bool InPreviewMode
{
get
{
string currentUrl = Request.Url.AbsolutePath;
return !String.IsNullOrEmpty(StateHelper.GetCookieValue("PreviewSet")) &&
UmbracoUser != null && !currentUrl.StartsWith(IO.IOHelper.ResolveUrl(IO.SystemDirectories.Umbraco));
}
}
public XmlDocument GetXml()
{
if (InPreviewMode)
{
PreviewContent pc = new PreviewContent(new Guid(StateHelper.GetCookieValue("PreviewSet")));
pc.LoadPreviewset();
return pc.XmlContent;
}
else
{
return content.Instance.XmlContent;
}
}
///
/// 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());
}
public virtual bool NewSchemaMode
{
get
{
return !UmbracoSettings.UseLegacyXmlSchema;
}
}
///
/// 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;
}
}
///
/// Gets the response for the current context
///
/// The response.
public virtual UmbracoResponse Response
{
get
{
if (m_Response == null)
{
m_Response = new UmbracoResponse(this.m_HttpContext.Response);
}
return m_Response;
}
}
///
/// Gets the request for the current context
///
/// The request.
public virtual UmbracoRequest Request
{
get
{
if (m_Request == null)
{
m_Request = new UmbracoRequest(this.m_HttpContext.Request);
}
return m_Request;
}
}
///
/// Gets the base URL for the website
///
///
public virtual string GetBaseUrl()
{
return this.Request.Url.GetLeftPart(UriPartial.Authority);
}
public virtual UmbracoServerUtility Server
{
get
{
if (m_Server == null)
{
m_Server = new UmbracoServerUtility(this.m_HttpContext.Server);
}
return m_Server;
}
}
///
/// Gets the internal search provider from Examine.
///
/// The internal search provider.
public virtual BaseSearchProvider InternalSearchProvider
{
get
{
return ExamineManager.Instance.SearchProviderCollection["InternalSearcher"];
}
}
///
/// Gets the internal member search provider from Examine.
///
/// The internal search provider.
public virtual BaseSearchProvider InternalMemberSearchProvider
{
get
{
return ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"];
}
}
}
}