Exemplo n.º 1
0
        public SeoUrlKeyword[] GetSeoKeywords(SeoUrlKeywordTypes type, string language = null, string keyword = null, string keywordvalue = null)
        {
            if (keyword == null && keywordvalue == null)
            {
                throw new ArgumentNullException("keyword","Keyword or KeywordValue must be provided");
            }

            var allKeywords = GetAllSeoKeywords();

            return
                allKeywords.Where(
                        s =>
                        (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase))
                        && (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase))
                        && (keywordvalue == null
                            || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase))
                        && (int)type == s.KeywordType && s.IsActive).ToArray();
            /*
            return CacheHelper.Get(string.Format(SeoKeywordCacheKey, type, language ?? "", keyword ?? "", keywordvalue ?? ""),
                () => _appConfigRepository.SeoUrlKeywords
                    .Where(s => (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase)) && 
                        (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase)) &&
                        (keywordvalue == null || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase)) &&
                        (int)type == s.KeywordType && 
                        s.IsActive).ToArray(), AppConfigConfiguration.Instance.Cache.SeoKeywordsTimeout, _isEnabled);
             * */
        }
Exemplo n.º 2
0
        protected virtual void DecodeRouteData(RouteValueDictionary values, SeoUrlKeywordTypes type)
        {
            string routeValueKey = type.ToString().ToLower();
            var    language      = values.ContainsKey(Constants.Language) ? values[Constants.Language] as string : null;

            if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null)
            {
                values[routeValueKey] = SettingsHelper.SeoDecode(values[routeValueKey].ToString(), type, language);
            }
        }
Exemplo n.º 3
0
        protected virtual void EncodeVirtualPath(RouteValueDictionary values, SeoUrlKeywordTypes type)
        {
            var routeValueKey = type.ToString().ToLower();
            var language      = values.ContainsKey(Constants.Language)
                ? values[Constants.Language] as string
                : Thread.CurrentThread.CurrentUICulture.Name;

            if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null)
            {
                values[routeValueKey] = this.EncodeRouteValue(values[routeValueKey].ToString(), type, language);
            }
        }
Exemplo n.º 4
0
        public SeoUrlKeyword[] GetSeoKeywords(SeoUrlKeywordTypes type, string language = null, string keyword = null, string keywordvalue = null)
        {
            if (keyword == null && keywordvalue == null)
            {
                throw new ArgumentNullException("keyword", "Keyword or KeywordValue must be provided");
            }

            var allKeywords = GetAllSeoKeywords();

            return
                (allKeywords.Where(
                     s =>
                     (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase)) &&
                     (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase)) &&
                     (keywordvalue == null ||
                      keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase)) &&
                     (int)type == s.KeywordType && s.IsActive).ToArray());
        }
Exemplo n.º 5
0
        public SeoUrlKeyword[] GetSeoKeywords(SeoUrlKeywordTypes type, string language = null, string keyword = null, string keywordvalue = null)
        {
            if (keyword == null && keywordvalue == null)
            {
                throw new ArgumentNullException("keyword","Keyword or KeywordValue must be provided");
            }

            var allKeywords = GetAllSeoKeywords();

            return
                allKeywords.Where(
                        s =>
                        (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase))
                        && (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase))
                        && (keywordvalue == null
                            || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase))
                        && (int)type == s.KeywordType && s.IsActive).ToArray();
        }
Exemplo n.º 6
0
        private string EncodeRouteValue(string routeValue, SeoUrlKeywordTypes type, string language = null)
        {
            if (!string.IsNullOrEmpty(routeValue))
            {
                routeValue = routeValue.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last();
                var keyword = routeValue;
                // this.GetKeyword(routeValue, type, language); Sasha: routevalue here is already a keyword

                var client = ClientContext.Clients.CreateBrowseClient();

                if (keyword != null)
                {
                    switch (type)
                    {
                    case SeoUrlKeywordTypes.Store:
                    case SeoUrlKeywordTypes.Item:
                        return(routeValue);

                    case SeoUrlKeywordTypes.Category:
                        /*
                         * var category =
                         *  Task.Run(
                         *      () =>
                         *          client.GetCategoryAsync(routeValue))
                         *      .Result.AsWebModel();
                         * if (category != null)
                         * {
                         *  return string.Join("/", category.BuildOutline(language).Select(x => x.Value));
                         * }
                         * */

                        return(routeValue);    // routevalue for category is outline
                    }
                }
            }

            return(routeValue);
        }
Exemplo n.º 7
0
        protected virtual void DecodeRouteData(RouteValueDictionary values, SeoUrlKeywordTypes type)
        {
            string routeValueKey = type.ToString().ToLower();
            var language = values.ContainsKey(Constants.Language) ? values[Constants.Language] as string : null;

            if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null)
            {
                values[routeValueKey] = SettingsHelper.SeoDecode(values[routeValueKey].ToString(), type, language);
            }
        }
Exemplo n.º 8
0
        private static string SeoDecodeInternal(string keyword, SeoUrlKeywordTypes type, string language = null)
        {
            var seoKeyword = SeoKeyword(keyword, type, language, false);

            return(seoKeyword != null ? seoKeyword.KeywordValue : keyword);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Decodes the given SEO keyword to original value.
        /// </summary>
        /// <param name="keyword">The keyword.</param>
        /// <param name="type">The type.</param>
        /// <param name="language">The language.</param>
        /// <returns></returns>
        public static string SeoDecode(string keyword, SeoUrlKeywordTypes type, string language = null, char seperator = '/')
        {
            var decoded = keyword.Split(new[] { seperator }).Select(x => SeoDecodeInternal(x, type, language)).ToList();

            return(string.Join(seperator.ToString(CultureInfo.InvariantCulture), decoded));
        }
Exemplo n.º 10
0
        private static string SeoEncodeInternal(string value, SeoUrlKeywordTypes type, string language = null)
        {
            var seoKeyword = SeoKeyword(value, type, language);

            return(seoKeyword != null ? seoKeyword.Keyword : value);
        }
Exemplo n.º 11
0
        public static SeoUrlKeyword SeoKeyword(string val, SeoUrlKeywordTypes type, string language = null, bool byValue = true)
        {
            language = language ?? CustomerSession.Language;
            var langInfo = TryGetCultureInfo(language);

            language = langInfo != null ? langInfo.Name : language;

            var seoKeywords = byValue
                ? SeoKeywordClient.GetSeoKeywords(type, keywordvalue: val)
                : SeoKeywordClient.GetSeoKeywords(type, keyword: val);

            //Filter keywords with valid language
            seoKeywords = seoKeywords.Where(x => TryGetCultureInfo(x.Language) != null).ToArray();

            //If not found for given langauge try default store language
            if (seoKeywords.Length != 0)
            {
                var seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(language, StringComparison.InvariantCultureIgnoreCase));

                if (seoKeyword != null)
                {
                    return(seoKeyword);
                }

                //Default language failover scenario
                var store = StoreHelper.StoreClient.GetCurrentStore();

                //Current store can be null when called from StoreHttpModule and store is not yet initialzed
                if (store == null && type == SeoUrlKeywordTypes.Store)
                {
                    store = StoreHelper.StoreClient.GetStoreById(seoKeywords[0].KeywordValue);
                }

                if (store != null && !store.DefaultLanguage.Equals(language, StringComparison.OrdinalIgnoreCase))
                {
                    seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(store.DefaultLanguage, StringComparison.InvariantCultureIgnoreCase));

                    //If we managed to decode in default language need to check if same value was not encoded in original language
                    if (seoKeyword != null)
                    {
                        //If we are encodoing simply encode it in default language, because not found in original language
                        if (byValue)
                        {
                            return(seoKeyword);
                        }

                        //If it was encoded in original language it should not allow to decode in default language.
                        //ex.: say in in english we have category keyword video with value tv-video and in russian there is also same value with keyword videoRussian
                        //If requested language is russian and keyword video we would get null, but default language (suppose is english) would return tv-video
                        var originalKeyword =
                            SeoKeywordClient.GetSeoKeywords(type, language, keywordvalue: seoKeyword.KeywordValue)
                            .FirstOrDefault();

                        if (originalKeyword == null)
                        {
                            return(seoKeyword);
                        }
                    }
                }
            }

            return(null);
        }
Exemplo n.º 12
0
        public static SeoUrlKeyword SeoKeyword(string val, SeoUrlKeywordTypes type, string language = null, bool byValue = true)
        {
            language = language ?? CustomerSession.Language;
            var langInfo = TryGetCultureInfo(language);
            language = langInfo != null ? langInfo.Name : language;

            var seoKeywords = byValue
                ? SeoKeywordClient.GetSeoKeywords(type, keywordvalue: val)
                : SeoKeywordClient.GetSeoKeywords(type, keyword:val);

            //Filter keywords with valid language
            seoKeywords = seoKeywords.Where(x => TryGetCultureInfo(x.Language) != null).ToArray();

            //If not found for given langauge try default store language
            if (seoKeywords.Length != 0)
            {
                var seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(language, StringComparison.InvariantCultureIgnoreCase));

                if (seoKeyword != null)
                {
                    return seoKeyword;
                }

                //Default language failover scenario
                var store = StoreHelper.StoreClient.GetCurrentStore();

                //Current store can be null when called from StoreHttpModule and store is not yet initialzed
                if (store == null && type == SeoUrlKeywordTypes.Store)
                {
                    store = StoreHelper.StoreClient.GetStoreById(seoKeywords[0].KeywordValue);
                }

                if (store != null && !store.DefaultLanguage.Equals(language, StringComparison.OrdinalIgnoreCase))
                {
                    seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(store.DefaultLanguage, StringComparison.InvariantCultureIgnoreCase));

                    //If we managed to decode in default language need to check if same value was not encoded in original language   
                    if (seoKeyword != null)
                    {
                        //If we are encodoing simply encode it in default language, because not found in original language
                        if (byValue)
                        {
                            return seoKeyword;
                        }

                        //If it was encoded in original language it should not allow to decode in default language.
                        //ex.: say in in english we have category keyword video with value tv-video and in russian there is also same value with keyword videoRussian
                        //If requested language is russian and keyword video we would get null, but default language (suppose is english) would return tv-video
                        var originalKeyword =
                            SeoKeywordClient.GetSeoKeywords(type, language, keywordvalue: seoKeyword.KeywordValue)
                                .FirstOrDefault();

                        if (originalKeyword == null)
                        {
                            return seoKeyword;
                        }
                    }
                }
            }

            return null;
        }
Exemplo n.º 13
0
 private static string SeoDecodeInternal(string keyword, SeoUrlKeywordTypes type, string language = null)
 {
     var seoKeyword = SeoKeyword(keyword, type, language, false);
     return seoKeyword != null ? seoKeyword.KeywordValue : keyword;
 }
Exemplo n.º 14
0
 /// <summary>
 /// Decodes the given SEO keyword to original value.
 /// </summary>
 /// <param name="keyword">The keyword.</param>
 /// <param name="type">The type.</param>
 /// <param name="language">The language.</param>
 /// <returns></returns>
 public static string SeoDecode(string keyword, SeoUrlKeywordTypes type, string language = null, char seperator = '/')
 {
     var decoded = keyword.Split(new[] { seperator }).Select(x => SeoDecodeInternal(x, type, language)).ToList();
     return string.Join(seperator.ToString(CultureInfo.InvariantCulture), decoded);
 }
Exemplo n.º 15
0
 private static string SeoEncodeInternal(string value, SeoUrlKeywordTypes type, string language = null)
 {
     var seoKeyword = SeoKeyword(value, type, language);
     return seoKeyword != null ? seoKeyword.Keyword : value;
 }
Exemplo n.º 16
0
        protected virtual void DecodeRouteData(RouteValueDictionary values, SeoUrlKeywordTypes type)
        {
            // Need to skip decoding values in routes temporary because Sitemap calls GetRouteData and compares the values with the ones stored in siteMapNode
            // Sitemap node is configured to preserve route values and they are encoded. 
            // If values in current route does not match node route values sitemap fails to resolve current node
            if (HttpContext.Current.Items.Contains(Constants.SkipSeoDecodeKey) && (bool)HttpContext.Current.Items[Constants.SkipSeoDecodeKey])
                return;

            string routeValueKey = type.ToString().ToLower();
            var language = values.ContainsKey(Constants.Language) ? values[Constants.Language] as string : null;

            if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null)
            {
                values[routeValueKey] = SettingsHelper.SeoDecode(values[routeValueKey].ToString(), type, language);
            }
        }