Ejemplo n.º 1
0
        public static void Configure()
        {
            var instanceManager = EngineContext.Current.Resolve <ICommerceInstanceManager>();

            // Ensure sqlce db folder for each instances
            var instances = instanceManager.GetInstances().ToList();

            foreach (var instance in instances)
            {
                var folder = DataFolders.Instances.GetFolder(instance.Name).GetFolder("Multilingual");
                if (!folder.Exists)
                {
                    folder.Create();
                }
            }

            // Configure DbConfiguration
            DbConfiguration.Loaded += DbConfiguration_Loaded;

            // Register stores


            foreach (var instance in instances)
            {
                LanguageStores.Register(instance.Name, new CachedLanguageStore(new SqlceLanguageStore(instance.Name, instanceManager)));
                TranslationStores.Register(instance.Name, new CachedTranslactionStore(new SqlceTranslationStore(instance.Name, instanceManager)));
            }
        }
        public void Handle(CommerceInstanceCreated @event, CommerceInstance instance)
        {
            var folder = DataFolders.Instances.GetFolder(@event.Settings.Name).GetFolder("Multilingual");

            folder.Create();

            var instanceManager = EngineContext.Current.Resolve <ICommerceInstanceManager>();

            // Register stores
            LanguageStores.Register(@event.InstanceName, new CachedLanguageStore(new SqlceLanguageStore(instance.Name, instanceManager)));
            TranslationStores.Register(@event.InstanceName, new CachedTranslactionStore(new SqlceTranslationStore(instance.Name, instanceManager)));
        }
Ejemplo n.º 3
0
        public override void Inject(MenuItem menu, System.Web.Mvc.ControllerContext controllerContext)
        {
            if (CommerceInstance.Current == null)
            {
                return;
            }

            var root = new MenuItem
            {
                Name = "Multiligual",
                Text = "Multiligual"
            };

            menu.Items.Add(root);

            root.Items.Add(new MultilingualMenuItem
            {
                Name       = "Languages",
                Text       = "Languages",
                Controller = "Language",
                Action     = "Index"
            });

            var instance = CommerceInstance.Current;
            var database = instance.Database;

            foreach (var lang in LanguageStores.Get(instance.Name).All())
            {
                var langItem = new MenuItem
                {
                    Name = "Language-" + lang.Name,
                    Text = lang.Name
                };

                root.Items.Add(langItem);
                AddLanguageChildItems(langItem, lang, database);
            }
        }
Ejemplo n.º 4
0
        public object Execute(CommerceDataSourceContext context)
        {
            var culture = CultureInfo.InvariantCulture;

            if (!String.IsNullOrEmpty(context.Site.Culture))
            {
                var languageStore = LanguageStores.Get(context.Instance);
                if (languageStore.Exists(context.Site.Culture))
                {
                    culture = CultureInfo.GetCultureInfo(context.Site.Culture);
                }
            }

            var store = IndexStores.Get <ProductModel>(context.Instance, culture);
            var query = store.Query();

            // Apply defined filters
            if (Filters != null)
            {
                query = query.ApplyFilters(ParseFilters(context), culture);
            }

            // Apply implicit facet filters repsented in url query
            IList <Filter> facetFilters = null;

            if (IncludeFacets && Facets != null && Facets.Count > 0)
            {
                facetFilters = GetFacetFilters(context);
                if (facetFilters.Count > 0)
                {
                    query = query.ApplyFilters(facetFilters, culture);
                }
            }

            // Apply sorting
            var sortField = ParameterizedFieldValue.GetFieldValue(SortField, context.ValueProvider);

            if (!String.IsNullOrEmpty(sortField))
            {
                query.AddOrderBy(sortField);
            }

            // Execute result
            var result = new ProductSearchResult();

            var pagination = query.Paginate(EvaluatePageNumber(context) - 1, EvaluatePageSize(context));

            result.Total    = pagination.TotalItems;
            result.Products = ToProducts(pagination.Cast <ProductModel>().ToList(), context.Site.Commerce());

            // Get facets
            if (IncludeFacets && Facets != null && Facets.Count > 0)
            {
                result.Facets = query.ToFacets(Facets);

                // Generate facet urls
                var url = HttpContext.Current.Request.RawUrl;

                CategoryTree localizedCategoryTree = null;

                foreach (var facetResult in result.Facets)
                {
                    // Categories are in tree structure, and all level of categories of a product are indexed for seaier search.
                    // If Category facet is not presented in url query, we should only return the ROOT level categories.
                    // If Category facet is presented in url query, we should only return it's children categories.
                    // Otherwise there'll be too many category results.
                    if (facetResult.Field == FacetDefinition.Category.Field)
                    {
                        if (localizedCategoryTree == null)
                        {
                            localizedCategoryTree = CategoryTree.Get(context.Instance).Localize(culture, "Name");
                        }

                        var filter = facetFilters.FirstOrDefault(f => f.Name == FacetDefinition.Category.Name);

                        if (filter != null)
                        {
                            var category = localizedCategoryTree.Desendants().FirstOrDefault(c => c.Name == filter.FieldValue);
                            foreach (var value in facetResult.Values.ToList())
                            {
                                if (!category.Children.Any(c => c.Name == value.Term))
                                {
                                    facetResult.Values.Remove(value);
                                }
                            }
                        }
                        else
                        {
                            foreach (var value in facetResult.Values.ToList())
                            {
                                if (!localizedCategoryTree.Categories.Any(c => c.Name == value.Term))
                                {
                                    facetResult.Values.Remove(value);
                                }
                            }
                        }
                    }

                    foreach (var value in facetResult.Values)
                    {
                        var paramName = facetResult.Name;
                        value.Url = UrlUtility.RemoveQuery(url, paramName);
                        value.Url = UrlUtility.AddQueryParam(value.Url, paramName, value.Term);
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
 public ProductEventsSubscription()
 {
     _languageStore = LanguageStores.Get(CommerceInstance.Current.Name);
 }
Ejemplo n.º 6
0
 public IndexesController()
 {
     _languageStore = LanguageStores.Get(CommerceInstance.Current.Name);
 }
 public void Handle(CommerceInstanceDeleted @event, CommerceInstance instance)
 {
     LanguageStores.Remove(@event.InstanceName);
     TranslationStores.Remove(@event.InstanceName);
 }
Ejemplo n.º 8
0
 public LanguageController()
 {
     _languageStore = LanguageStores.Get(CurrentInstance.Name);
 }