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"]; } } } }