Beispiel #1
0
        protected override DriverResult Display(CookieCulturePickerPart part, string displayType, dynamic shapeHelper)
        {
            var urlHelper          = new UrlHelper(_orchardServices.WorkContext.HttpContext.Request.RequestContext);
            var cookieCultureItems = new List <CookieCultureItemViewModel>();
            // Is content item shown?
            var contentItem    = _cultureService.GetCurrentContentItem();
            var currentCulture = _cultureService.GetCurrentCulture();
            var returnUrl      = _orchardServices.WorkContext.HttpContext.Request.Url.LocalPath;
            var localizations  = contentItem != null?_cultureService.GetLocalizations(contentItem.As <LocalizationPart>(), VersionOptions.Latest).ToList() : null;

            if (!string.IsNullOrWhiteSpace(returnUrl) && returnUrl.IndexOf("/NotTranslated", StringComparison.OrdinalIgnoreCase) > 0)
            {
                returnUrl = urlHelper.Content("~/");
            }

            foreach (var cultureItem in _cultureService.ListCultures())
            {
                var cookieCultureItem = new CookieCultureItemViewModel
                {
                    CultureItem = cultureItem,
                    Current     = string.Equals(currentCulture, cultureItem.Culture, StringComparison.OrdinalIgnoreCase),
                    ReturnUrl   = returnUrl,
                    Rel         = contentItem == null ? "nofollow" : null
                };
                if (localizations != null)
                {
                    var localizedContentItem = localizations.Where(p => string.Equals(p.Culture.Culture, cultureItem.Culture, StringComparison.OrdinalIgnoreCase)).Select(p => p.ContentItem).FirstOrDefault();
                    var metadata             = localizedContentItem != null?localizedContentItem.ContentManager.GetItemMetadata(localizedContentItem) : null;

                    if (metadata != null && metadata.DisplayRouteValues != null)
                    {
                        cookieCultureItem.ReturnUrl = urlHelper.Content(urlHelper.RouteUrl(metadata.DisplayRouteValues));
                    }
                    else
                    {
                        cookieCultureItem.ReturnUrl = urlHelper.RouteUrl(new { Area = "RM.Localization", Action = "NotTranslated", Controller = "LocalizedHome", Culture = cultureItem.Culture, Id = contentItem.Id });
                        cookieCultureItem.Rel       = "nofollow";
                    }
                }
                cookieCultureItems.Add(cookieCultureItem);
            }

            if (part.Style == Styles[1])
            {
                return(ContentShape("Parts_CookieCulturePicker", () => shapeHelper.Parts_DropdownCookieCulturePicker(Cultures: cookieCultureItems, CurrentCulture: currentCulture)));
            }
            else
            {
                return(ContentShape("Parts_CookieCulturePicker", () => shapeHelper.Parts_InlineListCookieCulturePicker(Cultures: cookieCultureItems, CurrentCulture: currentCulture)));
            }
        }
Beispiel #2
0
        public List <CookieCultureItemViewModel> BuildViewModel(bool ShowBrowser, bool isBrowserCurrent, out string currentCulture)
        {
            RequestContext requestContext = _orchardServices.WorkContext.HttpContext.Request.RequestContext;
            var            urlHelper      = new UrlHelper(requestContext);
            var            contentItem    = GetCurrentContentItem();

            currentCulture = GetCurrentCulture();
            var returnUrl          = _orchardServices.WorkContext.HttpContext.Request.Url.LocalPath;
            var localizations      = (contentItem != null) ? GetLocalizations(contentItem.As <LocalizationPart>(), VersionOptions.Latest).ToList() : null;
            var cookieCultureItems = new List <CookieCultureItemViewModel>();
            // Add browser CultureItem
            var browserCultureItem = new CookieCultureItemViewModel
            {
                CultureItem = _browserCultureService.GetBrowserCulture(requestContext.HttpContext),
                Current     = isBrowserCurrent,
                ReturnUrl   = returnUrl,
                IsBrowser   = true,
                Rel         = (contentItem == null) ? "nofollow" : null
            };

            // Add available cutures
            foreach (var cultureItem in ListCultures())
            {
                var cookieCultureItem = new CookieCultureItemViewModel
                {
                    CultureItem = cultureItem,
                    Current     = (!isBrowserCurrent) && string.Equals(currentCulture, cultureItem.Culture, StringComparison.OrdinalIgnoreCase),
                    ReturnUrl   = returnUrl,
                    IsBrowser   = false,
                    Rel         = (contentItem == null) ? "nofollow" : null
                };
                if (localizations != null)
                {
                    var localizedContentItem = localizations.Where(p => string.Equals(p.Culture.Culture, cultureItem.Culture, StringComparison.OrdinalIgnoreCase))
                                               .Select(p => p.ContentItem).FirstOrDefault();
                    var metadata = localizedContentItem != null?localizedContentItem.ContentManager.GetItemMetadata(localizedContentItem) : null;

                    if (metadata != null && metadata.DisplayRouteValues != null)
                    {
                        cookieCultureItem.ReturnUrl = urlHelper.Content(urlHelper.RouteUrl(metadata.DisplayRouteValues));
                    }
                    else
                    {
                        // Apply Fallback on culture
                        string newUrl = null;
                        if ((contentItem != null) && _homePageService.Value.FindUrlFromFallbackCulture(contentItem.ContentItem, cultureItem.Culture, requestContext, out newUrl))
                        {
                            if (newUrl.StartsWith("~"))
                            {
                                newUrl = newUrl.Substring(1);
                            }
                            cookieCultureItem.ReturnUrl = newUrl;
                        }
                        else
                        {
                            cookieCultureItem.ReturnUrl = urlHelper.RouteUrl(new { Area = "Datwendo.Localization", Action = "NotTranslated", Controller = "LocalizedHome", Culture = cultureItem.Culture, Id = contentItem.Id });
                            cookieCultureItem.Rel       = "nofollow";
                        }
                    }
                }
                cookieCultureItems.Add(cookieCultureItem);
            }
            if (ShowBrowser)
            {
                cookieCultureItems.Add(browserCultureItem);
            }
            return(cookieCultureItems);
        }