Information stored in a Orckestra CMS page url
Ejemplo n.º 1
0
        public IDataReference GetData(PageUrlData pageUrlData)
        {
            string pathInfo = pageUrlData.PathInfo;
            if (pathInfo == null)
            {
                return null;
            }

            string[] pathInfoParts = pathInfo.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            if (pathInfoParts.Length != 4) return null;

            if (string.IsNullOrEmpty(pathInfo)) return null;

            int year, month, day;

            if (int.TryParse(pathInfoParts[0], out year) 
                && int.TryParse(pathInfoParts[1], out month) 
                && int.TryParse(pathInfoParts[2], out day)
                && DateTimeUtils.IsValidDate(year, month, day))
            {
                Guid pageId = pageUrlData.PageId;
                string titleUrl = pathInfoParts[3];
                var date = new DateTime(year, month, day);

                var data = DataFacade.GetData<NewsItem>()
                    .FirstOrDefault(n => n.PageId == pageId && n.Date.Date == date && n.TitleUrl == titleUrl);

                return data != null ? data.ToDataReference() : null;
            }

            return null;
        }
        public string TryGetUrl(EntityToken entityToken)
        {
            var dataEntityToken = entityToken as DataEntityToken;

            if (dataEntityToken == null)
            {
                return null;
            }

            var data = dataEntityToken.Data;
            if (data == null)
            {
                return null;
            }

            PageUrlData pageUrlData;

            var page = data as IPage;
            if (page != null)
            {
                pageUrlData = new PageUrlData(page);
            }
            else
            {
                pageUrlData = DataUrls.TryGetPageUrlData(data.ToDataReference());
            }

            return pageUrlData != null ? GetPagePreviewUrl(pageUrlData) : null;
        }
        private static string GetPagePreviewUrl(PageUrlData pageUrlData)
        {
            var httpContext = HttpContext.Current;

            var urlSpace = new UrlSpace();
            if (HostnameBindingsFacade.GetBindingForCurrentRequest() != null
                || HostnameBindingsFacade.GetAliasBinding(httpContext) != null)
            {
                urlSpace.ForceRelativeUrls = true;
            }

            return PageUrls.BuildUrl(pageUrlData, UrlKind.Public, urlSpace)
                      ?? PageUrls.BuildUrl(pageUrlData, UrlKind.Renderer, urlSpace);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Gets the data item by page url data; returns <value>null</value> if no data url mappers found.
        /// </summary>
        /// <param name="pageUrlData"></param>
        /// <returns></returns>
        public static IDataReference TryGetData(PageUrlData pageUrlData)
        {
            Verify.ArgumentNotNull(pageUrlData, "pageUrlData");

            if (string.IsNullOrEmpty(pageUrlData.PathInfo) && !pageUrlData.HasQueryParameters)
            {
                return(null);
            }

            foreach (var globalDataUrlMapper in _globalDataUrlMappers)
            {
                try
                {
                    var data = globalDataUrlMapper.Value.GetData(pageUrlData);
                    if (data != null)
                    {
                        return(data);
                    }
                }
                catch (Exception ex)
                {
                    Log.LogError(LogTitle, ex);
                }
            }

            var page = pageUrlData.GetPage();

            if (page == null)
            {
                return(null);
            }

            foreach (var mapper in GetMappersForPage(page.Id))
            {
                try
                {
                    var data = mapper.GetData(pageUrlData);
                    if (data != null)
                    {
                        return(data);
                    }
                }
                catch (Exception ex)
                {
                    Log.LogError(LogTitle, ex);
                }
            }

            return(null);
        }
        public IDataReference GetData(PageUrlData pageUrlData)
        {
            string pathInfo = pageUrlData.PathInfo;
            if(string.IsNullOrEmpty(pathInfo)) return null;

            string[] pathInfoParts = pathInfo.Split('/');
            if (pathInfoParts.Length != 5) return null;

            var filter = BlogFacade.GetBlogFilter(pageUrlData.PageId, pathInfoParts);
            if (filter == null) return null;

            var entry = DataFacade.GetData<Entries>().Where(filter).FirstOrDefault();

            return entry != null ? entry.ToDataReference() : null;
        }
        public IDataReference GetData(PageUrlData pageUrlData)
        {
            if (_pageId.HasValue && pageUrlData.PageId != _pageId.Value)
            {
                return null;
            }

            string pathInfo = pageUrlData.PathInfo;
            if(string.IsNullOrEmpty(pathInfo)) return null;

            string fieldUrlFragment;

            string[] urlParts = pathInfo.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries);

            if (_actionName != null)
            {
                if (urlParts.Length != 2 || !_actionName.Equals(urlParts[0], StringComparison.OrdinalIgnoreCase))
                {
                    return null;
                }

                fieldUrlFragment = urlParts[1];
            }
            else
            {
                if (urlParts.Length != 1) return null;

                fieldUrlFragment = urlParts[0];
            }

            var fieldType = _propertyInfo.PropertyType;
            object keyValue = ValueTypeConverter.Convert(fieldUrlFragment, fieldType);

            if (keyValue == null
                || (keyValue is Guid && (Guid)keyValue == Guid.Empty && fieldUrlFragment != Guid.Empty.ToString()))
            {
                return null;
            }

            IData data = _isKeyField
                ? DataFacade.TryGetDataByUniqueKey(_dataType, keyValue)
                : GetDataByLabel(fieldUrlFragment);

            return data != null ? data.ToDataReference() : null;
        }
Ejemplo n.º 7
0
        public string BuildUrl(PageUrlData pageUrlData, UrlKind urlKind, UrlSpace urlSpace)
        {
            Verify.ArgumentCondition(urlKind != UrlKind.Undefined, "urlKind", "Url kind is undefined");

            /*var page = pageUrlData.Data;
            Verify.ArgumentCondition(page != null, "urlData", "Failed to get page from UrlData<IPage>");*/

            if (urlKind == UrlKind.Public)
            {
                return BuildPublicUrl(pageUrlData, urlSpace);
            }

            if (urlKind == UrlKind.Renderer)
            {
                return BuildRenderUrl(pageUrlData);
            }

            if (urlKind == UrlKind.Internal)
            {
                return BuildInternalUrl(pageUrlData);
            }

            throw new NotImplementedException("Only 'Public' and 'Internal' url types are supported.");
        }
        /// <summary>
        ///  Fixes up the hostname when using the preview-tab in the Console, since the requested page can belong to 
        /// a different domain than the console was opened in
        /// </summary>
        /// <param name="uri">The URI.</param>
        /// <returns></returns>
        protected Uri ProcessUrl(Uri uri)
        {
            PageUrlData urlData;

            var context = HttpContext.Current;

            var overriddenContext = SiteMapContext.Current;
            if (overriddenContext != null)
            {
                urlData = new PageUrlData(overriddenContext.RootPage);
            }
            else
            {
                string currentUrl = context.Request.Url.ToString();

                string _previewKey = context.Request.QueryString["previewKey"];
                if (!String.IsNullOrEmpty(_previewKey))
                {
                    var page = (IPage)context.Cache.Get(_previewKey + "_SelectedPage");
                    urlData = new PageUrlData(page);
                }
                else
                {
                    urlData = PageUrls.ParseUrl(currentUrl);
                }
            }

            if (urlData != null)
            {
                var publicUrl = PageUrls.BuildUrl(urlData, UrlKind.Public, new UrlSpace { Hostname = uri.Host, ForceRelativeUrls = false });
                if (Uri.IsWellFormedUriString(publicUrl, UriKind.Absolute))
                {
                    var newHost = new Uri(publicUrl).Host;

                    uri = new Uri(ReplaceFirstOccurrence(uri.ToString(), uri.Host, newHost));
                }
            }

            return uri;
        }
Ejemplo n.º 9
0
        private static string BuildInternalUrl(PageUrlData pageUrlData)
        {
            var cultureInfo = pageUrlData.LocalizationScope;
            var publicationScope = pageUrlData.PublicationScope;

            var result = new UrlBuilder("~/page(" + pageUrlData.PageId + ")");

            string pathInfo = string.Empty;

            if (publicationScope == PublicationScope.Unpublished)
            {
                pathInfo = UrlMarker_Unpublished;
            }

            if (!pageUrlData.PathInfo.IsNullOrEmpty())
            {
                pathInfo += pageUrlData.PathInfo;
            }
            result.PathInfo = pathInfo;


            result["cultureInfo"] = cultureInfo.ToString();

            if (pageUrlData.QueryParameters != null)
            {
                result.AddQueryParameters(pageUrlData.QueryParameters);
            }

            return result;
        }
Ejemplo n.º 10
0
        private static string BuildRenderUrl(PageUrlData pageUrlData)
        {
            var cultureInfo = pageUrlData.LocalizationScope;
            string legacyScopeName = GetLegacyPublicationScopeIdentifier(pageUrlData.PublicationScope);

            string basePath = UrlUtils.ResolvePublicUrl("Renderers/Page.aspx");
            var result = new UrlBuilder(basePath);

            result["pageId"] = pageUrlData.PageId.ToString();
            result["cultureInfo"] = cultureInfo.ToString();
            result["dataScope"] = legacyScopeName;

            result.PathInfo = pageUrlData.PathInfo;
            if (pageUrlData.QueryParameters != null)
            {
                result.AddQueryParameters(pageUrlData.QueryParameters);
            }

            return result;
        }
Ejemplo n.º 11
0
        private string BuildPublicUrl(PageUrlData pageUrlData, UrlSpace urlSpace)
        {
            var cultureInfo = pageUrlData.LocalizationScope;
            var publicationScope = pageUrlData.PublicationScope;

            var pageUrlPath = new StringBuilder();

            using (new DataScope(publicationScope, cultureInfo))
            {
                if (!BuildPageUrlPath(pageUrlData.PageId, cultureInfo, urlSpace, pageUrlPath))
                {
                    return null;
                }
            }

            if (publicationScope == PublicationScope.Unpublished)
            {
                AppendUrlPart(pageUrlPath, UrlMarker_Unpublished);
            }

            if (urlSpace.ForceRelativeUrls)
            {
                AppendUrlPart(pageUrlPath, UrlMarker_RelativeUrl);
            }

            if (!string.IsNullOrEmpty(UrlSuffix) 
                && pageUrlPath[pageUrlPath.Length - 1] != '/')
            {
                pageUrlPath.Append(UrlSuffix);
            }

            if (!string.IsNullOrEmpty(pageUrlData.PathInfo))
            {
                AppendPathInfo(pageUrlPath, pageUrlData.PathInfo);
            }


            string url = pageUrlPath.ToString();

            if (pageUrlData.QueryParameters != null)
            {
                var urlWithQuery = new UrlBuilder(url);
                urlWithQuery.AddQueryParameters(pageUrlData.QueryParameters);

                return urlWithQuery;
            }

            return url;
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Builds the URL.
        /// </summary>
        /// <param name="pageUrlData">The page URL data.</param>
        /// <param name="urlKind">Kind of the URL.</param>
        /// <param name="urlSpace">The URL space.</param>
        /// <returns></returns>
        public static string BuildUrl(PageUrlData pageUrlData, UrlKind urlKind = UrlKind.Public, UrlSpace urlSpace = null)
        {
            Verify.ArgumentNotNull(pageUrlData, "pageUrlData");

            return(UrlProvider.BuildUrl(pageUrlData, urlKind, urlSpace ?? new UrlSpace()));
        }
Ejemplo n.º 13
0
        private static string GetPagePreviewUrl(PageUrlData pageUrlData)
        {
            var urlSpace = new UrlSpace {ForceRelativeUrls = true};

            return PageUrls.BuildUrl(pageUrlData, UrlKind.Public, urlSpace)
                      ?? PageUrls.BuildUrl(pageUrlData, UrlKind.Renderer, urlSpace);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Builds a url of the the specified URL type.
        /// </summary>
        /// <param name="urlType">Type of the URL.</param>
        /// <returns></returns>
        public UrlBuilder Build(PageUrlType urlType)
        {
            IPage page = GetPage();
            if(page == null)
            {
                return null;
            }

            PageUrlData pageUrlData = new PageUrlData(page);

            string url = PageUrls.BuildUrl(pageUrlData, ToUrlKind(urlType), new UrlSpace());
            return url != null ? new UrlBuilder(url) : null;
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Builds the URL.
        /// </summary>
        /// <param name="pageUrlData">The page URL data.</param>
        /// <param name="urlKind">Kind of the URL.</param>
        /// <param name="urlSpace">The URL space.</param>
        /// <returns></returns>
        public static string BuildUrl(PageUrlData pageUrlData, UrlKind urlKind = UrlKind.Public, UrlSpace urlSpace = null) 
        {
            Verify.ArgumentNotNull(pageUrlData, "pageUrlData");

            return UrlProvider.BuildUrl(pageUrlData, urlKind, urlSpace ?? new UrlSpace());
        }
Ejemplo n.º 16
0
		public void ProcessRequest(HttpContext context)
		{
			context.Response.ContentType = "text/xml";
			CultureInfo culture = DataLocalizationFacade.DefaultLocalizationCulture;

		    string pathInfo = context.Request.PathInfo;
            if (pathInfo.Length > 1)
			{
                culture = new CultureInfo(pathInfo.Substring(1));
			}

			using (var con = new DataConnection(culture))
			{
				var feed = new SyndicationFeed
				{
				    Title = new TextSyndicationContent("News List")
				};
			    var items = new List<SyndicationItem>();

			    IQueryable<NewsItem> allNews = con.Get<NewsItem>();

				string hostname = context.Request.Url.Host;
			    var hostnameBinding = con.Get<IHostnameBinding>().FirstOrDefault(h => h.Hostname == hostname);
				if (hostnameBinding != null)
				{
					Guid homepageId = hostnameBinding.HomePageId;
					var sm = new SitemapNavigator(con);
					var pagesFilter = new HashSet<Guid>(
                        sm.GetPageNodeById(homepageId)
                          .GetPageNodes(SitemapScope.DescendantsAndCurrent)
                          .Select(p => p.Id));

                    allNews = allNews.Evaluate().Where(n => pagesFilter.Contains(n.PageId)).ToList().AsQueryable();
				}

			    IEnumerable<NewsItem> latestNews = allNews.OrderByDescending(d => d.Date).Take(10);

				foreach (var news in latestNews.Evaluate())
				{
				    var page = PageManager.GetPageById(news.PageId);
				    if (page == null)
				    {
				        continue;
				    }

				    var pageUrlData = new PageUrlData(page) {PathInfo = NewsFacade.GetPathInfo(news.TitleUrl, news.Date)};
                    string pageUrl = PageUrls.BuildUrl(pageUrlData);
				    if (pageUrl == null)
				    {
				        continue;
				    }

					var item = new SyndicationItem(
						news.Title,
						news.Teaser,
						context.GetPath(pageUrl),
						news.Id.ToString(),
						news.Date
						);
					item.Categories.Add( new SyndicationCategory(news.PageId.ToString()) );
					items.Add(item);
				}
				feed.Items = items;
				var writer = new XmlTextWriter(context.Response.Output);
				feed.SaveAsRss20(writer);
			}
		}