Preview:
using Newtonsoft.Json;
using SitefinityWebApp.Mvc.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Mvc;
using Telerik.Sitefinity.Services.Search;
using Telerik.Sitefinity.Services.Search.Data;

namespace SitefinityWebApp.Mvc.Controllers
{
    [ControllerToolboxItem(Name = "CarouselBanner", Title = "Carousel Banner", SectionName = "SBF Custom")]
    public class CarouselBannerController : Controller
    {
        public string ItemType
        {
            get
            {
                return this.itemType;
            }

            set
            {
                this.itemType = value;
            }
        }

        string itemType = CarouselBannerModuleBuilder.Type;
        public string SelectedItems { get; set; }

        public string SelectedItemIds { get; set; }



     

        public string ItemType2
        {
            get
            {
                return this.itemType2;
            }

            set
            {
                this.itemType2 = value;
            }
        }

        string itemType2 = FeaturedMenuModuleBuilder.Type;
        public string SelectedItems2 { get; set; }

        public string SelectedItemIds2 { get; set; }




        public ActionResult Index()
        {
            var result = new CarouselBannerWidgetModel();

            var service = Telerik.Sitefinity.Services.ServiceBus.ResolveService<ISearchService>();
            var queryBuilder = ObjectFactory.Resolve<IQueryBuilder>();

            GetCarouselBanner(result, service, queryBuilder);
            GetFeaturedMenu(result, service, queryBuilder);
            return View(result);
        }

        private void GetCarouselBanner(CarouselBannerWidgetModel result, ISearchService service, IQueryBuilder queryBuilder)
        {
            var keysearch = string.Format("({0})", "true");
            var searchQuery = queryBuilder.BuildQuery(keysearch, new[] { "si_issearch" });
            searchQuery.IndexName = CarouselBannerModuleBuilder.IndexName;

            #region Compose where clause
            if (!string.IsNullOrWhiteSpace(this.SelectedItemIds))
            {
                var ids = JsonConvert.DeserializeObject<Guid[]>(this.SelectedItemIds).ToList();
                if (ids != null && ids.Count > 0)
                {
                    var testimonialTypeGroup = new SearchQueryGroup();
                    testimonialTypeGroup.Operator = QueryOperator.Or;
                    foreach (var value in ids)
                    {
                        testimonialTypeGroup.AddTerm(new SearchTerm()
                        {
                            Field = CarouselBannerModuleBuilder.Id,
                            Value = string.Format("({0})", value)
                        });
                    }
                    var searchGroup = searchQuery.SearchGroup;
                    searchQuery.SearchGroup = new SearchQueryGroup
                    {
                        Groups = new[] { searchGroup, testimonialTypeGroup },
                        Operator = QueryOperator.And
                    };
                }
            }
            #endregion

            List<IDocument> finalResult = null;
            IEnumerable<IDocument> whereItems = null;

            whereItems = service.Search(searchQuery);
            finalResult = whereItems.ToList();

            for (int i = 0; i < finalResult.Count(); i++)
            {
                CarouselBannerModel modelItem = new CarouselBannerModel();
                modelItem = ComposeBannerSlider(finalResult[i]);
                result.CarouselBannerItems.Add(modelItem);
            }
            result.CarouselBannerItems = result.CarouselBannerItems.OrderBy(t => t.Order).ToList();
        }

        private void GetFeaturedMenu(CarouselBannerWidgetModel result, ISearchService service, IQueryBuilder queryBuilder)
        {
            var keysearch = string.Format("({0})", "true");
            var searchQuery = queryBuilder.BuildQuery(keysearch, new[] { "si_issearch" });
            searchQuery.IndexName = FeaturedMenuModuleBuilder.IndexName;

            #region Compose where clause

            if (!string.IsNullOrWhiteSpace(this.SelectedItemIds2))
            {
                var ids = JsonConvert.DeserializeObject<Guid[]>(this.SelectedItemIds2).ToList();
                if (ids != null && ids.Count > 0)
                {
                    var testimonialTypeGroup = new SearchQueryGroup();
                    testimonialTypeGroup.Operator = QueryOperator.Or;
                    foreach (var value in ids)
                    {
                        testimonialTypeGroup.AddTerm(new SearchTerm()
                        {
                            Field = FeaturedMenuModuleBuilder.Id,
                            Value = string.Format("({0})", value)
                        });
                    }
                    var searchGroup = searchQuery.SearchGroup;
                    searchQuery.SearchGroup = new SearchQueryGroup
                    {
                        Groups = new[] { searchGroup, testimonialTypeGroup },
                        Operator = QueryOperator.And
                    };
                }
            }
       
            #endregion

            List<IDocument> finalResult = null;
            IEnumerable<IDocument> whereItems = null;

            whereItems = service.Search(searchQuery);
            finalResult = whereItems.ToList();

            for (int i = 0; i < finalResult.Count(); i++)
            {
                FeaturedMenuModel modelItem = new FeaturedMenuModel();
                modelItem = ComposeFeatureMenu(finalResult[i]);
                result.FeatureMenuItems.Add(modelItem);
            }
            result.FeatureMenuItems = result.FeatureMenuItems.OrderBy(t => t.Order).ToList();
        }

        private CarouselBannerModel ComposeBannerSlider(IDocument itemLive)
        {
            CarouselBannerModel bookModel = new CarouselBannerModel();
            bookModel.Title = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.Title}").ToString();
            bookModel.Header = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.Header}").ToString();
            bookModel.Description = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.Description}").ToString();
            bookModel.CTALink = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.CTALink}").ToString();
            bookModel.ImageUrl = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.Image}").ToString();
            bookModel.PortraitImageUrl = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.PortraitImage}").ToString();
            bookModel.StyleOption = itemLive.GetValue($"si_{CarouselBannerModuleBuilder.StyleOption}").ToString();
            bookModel.IsDark = bookModel.StyleOption == "2";
            bookModel.Order = !string.IsNullOrWhiteSpace(itemLive.GetValue($"si_{CarouselBannerModuleBuilder.Order}").ToString()) ? int.Parse(itemLive.GetValue($"si_{CarouselBannerModuleBuilder.Order}").ToString()) : int.MaxValue;

            return bookModel;
        }

        private FeaturedMenuModel ComposeFeatureMenu(IDocument itemLive)
        {
            FeaturedMenuModel bookModel = new FeaturedMenuModel();
            bookModel.Title = itemLive.GetValue($"si_{FeaturedMenuModuleBuilder.Title}").ToString();
            bookModel.URL = itemLive.GetValue($"si_{FeaturedMenuModuleBuilder.URL}").ToString();
            bookModel.Order = !string.IsNullOrWhiteSpace(itemLive.GetValue($"si_{FeaturedMenuModuleBuilder.Order}").ToString()) ? int.Parse(itemLive.GetValue($"si_{FeaturedMenuModuleBuilder.Order}").ToString()) : int.MaxValue;

            return bookModel;
        }

    }
}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter