/// <summary> /// Gets the name of the key word property. /// </summary> /// <param name="page">The page.</param> /// <returns>The propertyinfo.</returns> private PropertyInfo GetAddtionalSearchContentProperty(PageData page) { PropertyInfo keywordsMetatagProperty = page.GetType().GetProperties() .FirstOrDefault(predicate: this.HasAttribute <AdditionalSearchContentAttribute>); return(keywordsMetatagProperty); }
public static bool IsIndexablePageType(this PageData page) { return(!page .GetType() .GetCustomAttributes(typeof(ExcludeFromSitemapAttribute), true) .Any()); }
/// <summary> /// Gets the name of the key word property. /// </summary> /// <param name="page">The page.</param> /// <returns>System.String.</returns> private static PropertyInfo GetAddtionalSearchContentProperty(PageData page) { PropertyInfo keywordsMetatagProperty = page.GetType().GetProperties().Where(HasAttribute <AdditionalSearchContentAttribute>).FirstOrDefault(); return(keywordsMetatagProperty); }
/// <summary> /// Creates a writable clone of the PageData object /// </summary> /// <returns></returns> public new PageData CreateWritableClone() { PageData page = base.CreateWritableClone(); IEnumerable <PropertyInfo> properties = page.GetType().GetPageTypePropertyGroupProperties(); new TypedPageActivator().CreateAndPopulateNestedPropertyGroupInstances(page as TypedPageData, page, properties, string.Empty); return(page); }
public void GivenPageDataWithUnmappedType_ConvertToTyped_ReturnsPageDataObject() { PageTypeResolver.Instance = new PageTypeResolver(); PageData pageData = new PageData(); pageData.Property.Add("PageTypeID", new PropertyNumber(1)); PageData returnedObject = PageTypeResolver.Instance.ConvertToTyped(pageData); Assert.NotNull(returnedObject); Assert.Equal <Type>(typeof(PageData), returnedObject.GetType()); }
/// <summary> /// The is restricted. /// </summary> /// <param name="item"> /// The item. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> private bool IsRestricted(PageData item) { var strContentType = item.GetType().FullName; strContentType = strContentType.Replace("Proxy", string.Empty); strContentType = strContentType.Replace("Castle.Proxies.", string.Empty); var restrictedContentTypes = this.dataFromBase.RestrictedTypes; var restrictedType = restrictedContentTypes?.FirstOrDefault(x => x.ContentType == strContentType); return(restrictedType != null && restrictedType.Restricted); }
public static bool InheritsFromType <T>(this PageData page) where T : TypedPageData { return(typeof(T).IsAssignableFrom(page.GetType())); }
/// <summary> /// The build sitemap item. /// </summary> /// <param name="doc"> /// The doc. /// </param> /// <param name="item"> /// The item. /// </param> /// <param name="culture"> /// The culture. /// </param> /// <param name="site"> /// The site. /// </param> /// <returns> /// The <see cref="XmlDocument"/>. /// </returns> private XmlDocument BuildSitemapItem(XmlDocument doc, PageData item, CultureInfo culture, SiteDefinition site) { var url = HttpUtility.HtmlEncode(this.GetItemUrl(item, culture ?? this.defaultLanguage.Culture, site)); var lastMod = HttpUtility.HtmlEncode(item.Saved.ToString("yyyy-MM-ddTHH:mm:sszzz")); var urlSetNode = doc.LastChild; var urlNode = doc.CreateElement("url"); urlSetNode.AppendChild(urlNode); var locNode = doc.CreateElement("loc"); urlNode.AppendChild(locNode); locNode.AppendChild(doc.CreateTextNode(!showTrailingSlash ? url : url + "/")); if (showLocalizedUrls) { // Add different languages to the sitemap as specified in https://support.google.com/webmasters/answer/2620865?hl=en var existingLanguages = item.ExistingLanguages; var rep = ServiceLocator.Current.GetInstance <IContentLoader>(); foreach (var lang in existingLanguages) { var culturedPage = rep.Get <PageData>(item.ContentLink, lang); var culturedUrl = HttpUtility.HtmlEncode(this.GetItemUrl(culturedPage.ContentLink, lang, site)); var languageNode = doc.CreateElement("link"); languageNode.SetAttribute("rel", "alternate"); languageNode.SetAttribute("hreflang", lang.Name); languageNode.SetAttribute("href", !showTrailingSlash ? culturedUrl : culturedUrl + "/"); urlNode.AppendChild(languageNode); } } var seoProperty = item.GetType().GetProperty("Priority"); if (seoProperty?.GetValue(item) is string) { var priority = seoProperty.GetValue(item) as string; if (!string.IsNullOrEmpty(priority)) { // possibly validate it's between 0.0 or 1.0? or leave up to content author? double priorityNumber; if (double.TryParse(priority, out priorityNumber)) { if (priorityNumber >= 0.0 && priorityNumber <= 1.0) { XmlNode priorityNode = doc.CreateElement("priority"); urlNode.AppendChild(priorityNode); priorityNode.AppendChild(doc.CreateTextNode(priority)); } } } } seoProperty = item.GetType().GetProperty("ChangeFrequency"); if (seoProperty?.GetValue(item) is string) { var frecuency = seoProperty.GetValue(item) as string; if (!string.IsNullOrEmpty(frecuency)) { XmlNode chgNode = doc.CreateElement("changefreq"); urlNode.AppendChild(chgNode); chgNode.AppendChild(doc.CreateTextNode(frecuency)); } } XmlNode lastModNode = doc.CreateElement("lastmod"); urlNode.AppendChild(lastModNode); lastModNode.AppendChild(doc.CreateTextNode(lastMod)); return(doc); }