예제 #1
0
        /// <summary>Calculates an item url by walking it's parent path.</summary>
        /// <param name="item">The item whose url to compute.</param>
        /// <returns>A friendly url to the supplied item.</returns>
        public override Url BuildUrl(ContentItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            if (item.VersionOf.HasValue)
            {
                return(BuildUrl(item.VersionOf)
                       .SetQueryParameter(PathData.VersionQueryKey, item.VersionIndex));
            }
            else if (item.ID == 0)
            {
                var page = Find.ClosestPage(item);
                if (page != null && page != item)
                {
                    return(BuildUrl(page)
                           .SetQueryParameter(PathData.VersionQueryKey, page.VersionIndex)
                           .SetQueryParameter("versionKey", item.GetVersionKey()));
                }
            }

            // move up until first real page
            var current = Find.ClosestPage(item);

            // no page found, throw
            if (current == null)
            {
                throw new N2Exception("Cannot build url to data item '{0}' with no containing page item.", item);
            }

            Url url = BuildPageUrl(current, ref current);

            var startPage = FindStartPage(current);

            // no start page found, use rewritten url
            if (startPage == null)
            {
                return(item.FindPath(PathData.DefaultAction).GetRewrittenUrl());
            }

            if (!item.IsPage)
            {
                // the item was not a page, add this information as a query string
                url = url.AppendQuery(PathData.ItemQueryKey, item.ID);
            }

            if (startPage.ID == host.CurrentSite.StartPageID)
            {
                // the start page belongs to the current site, use relative url
                return(Url.ToAbsolute("~" + url.PathAndQuery));
            }

            var site = host.GetSite(startPage.ID) ?? host.DefaultSite;

            return(GetHostedUrl(item, url, site));
        }
예제 #2
0
 public string SelectedUrl(Url baseUrl, ContentItem selected = null)
 {
     return baseUrl.AppendQuery(SelectedQueryKey, (selected ?? SelectedItem).Path).ResolveTokens();
 }
예제 #3
0
 private ActionResult RedirectToIndex(string errorText)
 {
     N2.Web.Url url = CurrentPage.Url;
     return(Redirect(url.AppendQuery("failure", CurrentItem.ID).AppendQuery("errorText", errorText)));
 }
예제 #4
0
 public ActionResult Reconfigure()
 {
     N2.Web.Url url = CurrentPage.Url;
     return(Redirect(url.AppendQuery("reconfigure", CurrentItem.ID)));
 }
예제 #5
0
 public ActionResult ChangeAccount()
 {
     N2.Web.Url url = CurrentPage.Url;
     return(Redirect(url.AppendQuery("changeaccount", CurrentItem.ID)));
 }
예제 #6
0
        public string GenerateCategoryLink(long? categoryId, bool? forceListPage, out object matchingCategoryPage)
        {
            //~~  a cheap and nasty chaos monkey
            //if (DateTime.Now.Minute % 2 == 1)
            //    throw new Exception("chaos happened " + categoryId);
            //~~

            string ret;
            var cacheKey = string.Format("{0} {1} {2} {3} {4}",
                WebSession.Current.SiteId, WebSession.Current.LanguageCode, "CategoryLink", categoryId, forceListPage);
            if (!_urlCache.TryGet(cacheKey, out ret))
            {
                var catPages = CmsFinder.FindDescendentsOrFallbackOfCurrentPageLanguageRoot<CatalogPage>();

                if (catPages.All(cps => cps.CategoryID.Length != 0))
                {
                    // find a category page from the root level that has no category ID
                    var defaultCatPage = CmsFinder.FindAllNonSiteDescendentsOfRoot<CatalogPage>()
                             .LastOrDefault(cps => cps.CategoryID.Length == 0);

                    if (defaultCatPage != null)
                        catPages.Add(defaultCatPage);
                }

                CatalogPage cp;

                if (forceListPage.HasValue && forceListPage.Value)
                    cp = catPages.LastOrDefault(catalogPage => catalogPage.CategoryID.Length == 0);
                else
                    cp = catPages.FirstOrDefault(catalogPage => catalogPage.CategoryID.Equals(categoryId.ToString(), StringComparison.InvariantCultureIgnoreCase)) ??
                             catPages.LastOrDefault(catalogPage => catalogPage.CategoryID.Length == 0);

                if (cp == null)
                    ret = null;
                else
                {
                    // If the category page came from the root, append it's name and parameters to the current page's url
                    var url = new Url(GetNormalizedPageUrl(cp));

                    if (string.IsNullOrEmpty(cp.CategoryID) && categoryId != null)
                        url = url.Append(categoryId.Value.ToString(CultureInfo.InvariantCulture));

                    if (forceListPage.HasValue && forceListPage.Value && string.IsNullOrEmpty(cp.CategoryID))
                        url = url.AppendQuery("list=true");

                    ret = url.ToString();
                }

                AddCache(cacheKey, ret, cp);
            }

            _itemCache.TryGet(cacheKey, out matchingCategoryPage);

            return ret;
        }
예제 #7
0
        /// <summary>Calculates an item url by walking it's parent path.</summary>
        /// <param name="item">The item whose url to compute.</param>
        /// <returns>A friendly url to the supplied item.</returns>
        public virtual Url BuildUrl(ContentItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            if (item.VersionOf.HasValue)
            {
                ContentItem version = item.VersionOf;
                if (version != null)
                {
                    return(BuildUrl(version)
                           .SetQueryParameter(PathData.VersionQueryKey, item.VersionIndex));
                }
            }
            else if (item.ID == 0)
            {
                var page = Find.ClosestPage(item);
                if (page != null && page != item)
                {
                    return(BuildUrl(page)
                           .SetQueryParameter(PathData.VersionQueryKey, page.VersionIndex)
                           .SetQueryParameter("versionKey", item.GetVersionKey()));
                }
            }

            var current = Find.ClosestPage(item);

            // no page found, throw
            if (current == null)
            {
                throw new N2Exception("Cannot build url to data item '{0}' with no containing page item.", item);
            }

            Url url = BuildPageUrl(current, ref current);

            if (current == null)
            {
                // no start page found, use rewritten url
                return(item.FindPath(PathData.DefaultAction).GetRewrittenUrl());
            }

            if (!item.IsPage)
            {
                // the item was not a page, add this information as a query string
                url = url.AppendQuery(PathData.ItemQueryKey, item.ID);
            }

            var absoluteUrl = Url.ToAbsolute("~" + url);

            if (BuiltUrl != null)
            {
                var args = new UrlEventArgs(item)
                {
                    Url = absoluteUrl
                };
                BuiltUrl(this, args);
                return(args.Url);
            }
            else
            {
                return(absoluteUrl);
            }
        }
		void securityEnforcer_AuthorizationFailed(object sender, CancellableItemEventArgs e)
		{
			var url = new Url("{ManagementUrl}/Login.aspx").ResolveTokens();
			url.AppendQuery("returnUrl", _context.Url.LocalUrl);
			_context.HttpContext.Response.Redirect(url);
		}