3813 lines
121 KiB
Transact-SQL
3813 lines
121 KiB
Transact-SQL
--upgrade scripts from nopCommerce 2.80 to 3.00
|
|
|
|
--new locale resources
|
|
declare @resources xml
|
|
--a resource will be delete if its value is empty
|
|
set @resources='
|
|
<Language>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.StartDate.Hint">
|
|
<Value>Set the blog post start date in Coordinated Universal Time (UTC). You can also leave it empty.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.EndDate.Hint">
|
|
<Value>Set the blog post end date in Coordinated Universal Time (UTC). You can also leave it empty.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Polls.Fields.StartDate.Hint">
|
|
<Value>Set the poll start date in Coordinated Universal Time (UTC). You can also leave it empty.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Polls.Fields.EndDate.Hint">
|
|
<Value>Set the poll end date in Coordinated Universal Time (UTC). You can also leave it empty.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.StartDate.Hint">
|
|
<Value>Set the news item start date in Coordinated Universal Time (UTC). You can also leave it empty.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.EndDate.Hint">
|
|
<Value>Set the news item end date in Coordinated Universal Time (UTC). You can also leave it empty.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="PageTitle.PageNotFound">
|
|
<Value>Page not found</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Account.Fields.Username.Required">
|
|
<Value>Username is required.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Account.Register.Errors.UsernameIsNotProvided">
|
|
<Value>Username is required.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Account.Register.Errors.EmailIsNotProvided">
|
|
<Value>Email is required.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.RewardPoints.MinimumRewardPointsToUse">
|
|
<Value>Minimum reward points to use</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.RewardPoints.MinimumRewardPointsToUse.Hint">
|
|
<Value>Customers won''t be able to use reward points before they have X amount of points. Set to 0 if you do not want to use this setting.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="RewardPoints.MinimumBalance">
|
|
<Value>Minimum balance allowed to use is {0} reward points ({1}).</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.AddNew">
|
|
<Value>Add a new store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.BackToList">
|
|
<Value>back to store list</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.EditStoreDetails">
|
|
<Value>Edit store details</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Name">
|
|
<Value>Store name</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Name.Hint">
|
|
<Value>Enter the name of your store e.g. Your Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Name.Required">
|
|
<Value>Please provide a name.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.DisplayOrder">
|
|
<Value>Display order</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.DisplayOrder.Hint">
|
|
<Value>The display order for this store. 1 represents the top of the list.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Added">
|
|
<Value>The new store has been added successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Updated">
|
|
<Value>The store has been updated successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Deleted">
|
|
<Value>The store has been deleted successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Manufacturers.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Manufacturers.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Manufacturers.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the manufacturer is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Manufacturers.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Manufacturers.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the manufacturer will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Categories.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Categories.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Categories.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the category is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Categories.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Categories.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the category will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the product is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the product will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Languages.Info">
|
|
<Value>Info</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Languages.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Languages.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Languages.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the language is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Languages.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Languages.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the language will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Currencies.Info">
|
|
<Value>Info</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Currencies.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Currencies.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Currencies.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the currency is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Currencies.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Currencies.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the currency will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.CurrentCarts.Store">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.List.Store">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.List.Store.Hint">
|
|
<Value>Search by a specific store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.Fields.Store">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.Fields.Store.Hint">
|
|
<Value>A store name in which this order was placed.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.Orders.Store">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Hosts">
|
|
<Value>HOST values</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Hosts.Hint">
|
|
<Value>The comma separated list of possible HTTP_POST values (for example, "yourstore.com,www.yourstore.com"). This property is required only when you have a multi-store solution to determine the current store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.System.SystemInfo.HTTPHOST">
|
|
<Value>HTTP_HOST</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.System.SystemInfo.HTTPHOST.Hint">
|
|
<Value>HTTP_HOST is used when you have run a multi-store solution to determine the current store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Promotions.Discounts.Requirements.Remove">
|
|
<Value>Remove requirement</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.StoreName">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.StoreName.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.StoreUrl">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.StoreUrl.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Url">
|
|
<Value>Store URL</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Url.Hint">
|
|
<Value>The URL of your store e.g. http://www.yourstore.com/</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.Url.Required">
|
|
<Value>Please provide a store URL.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.List.SearchStore">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.List.SearchStore.Hint">
|
|
<Value>Search by a specific store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.GenerateStaticFileEachMinutes">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.GenerateStaticFileEachMinutes.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.TaskEnabled">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.TaskEnabled.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.TaskRestart">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Info">
|
|
<Value>Info</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the message template is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the message template will be active.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Deleted">
|
|
<Value>The message template has been deleted successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.Copy">
|
|
<Value>Copy template</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.List.SearchStore">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.MessageTemplates.List.SearchStore.Hint">
|
|
<Value>Search by a specific store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the topic is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the topic will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.List.SearchStore">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Topics.List.SearchStore.Hint">
|
|
<Value>Search by a specific store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Info">
|
|
<Value>Info</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the news is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the news will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.List.SearchStore">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.List.SearchStore.Hint">
|
|
<Value>Search by a specific store.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.SslEnabled">
|
|
<Value>SSL enabled</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.SslEnabled.Hint">
|
|
<Value>Check if your store will be SSL secured.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.SslEnabled.Hint2">
|
|
<Value>WARNING: Do not enable it until you have SSL certificate installed on the server.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.SecureUrl">
|
|
<Value>Secure URL</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Stores.Fields.SecureUrl.Hint">
|
|
<Value>The secure URL of your store e.g. https://www.yourstore.com/ or http://sharedssl.yourstore.com/. Leave it empty if you want nopCommerce to detect secure URL automatically.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.UseSSL">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.UseSSL.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.SharedSSLUrl">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.SharedSSLUrl.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.NonSharedSSLUrl">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.NonSharedSSLUrl.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.SSLSettings">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.SSLSettings.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.ClickHere">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.SuccessResult">
|
|
<Value>Froogle feed has been successfully generated.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.Store">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Feed.Froogle.Store.Hint">
|
|
<Value>Select the store that will be used to generate the feed.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.AllSettings.Fields.StoreName.AllStores">
|
|
<Value>All stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.AllSettings.Fields.StoreName">
|
|
<Value>Store</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.StoreScope">
|
|
<Value>Multi-store configuration for</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.StoreScope.AllStores">
|
|
<Value>All stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.StoreScope.CheckAll">
|
|
<Value>Check/uncheck all</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.StoreScope.CheckAll.Hint">
|
|
<Value>(check boxes if you want to set a custom value for this shop)</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payments.Manual.Fields.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payment.CashOnDelivery.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payment.CheckMoneyOrder.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payment.PurchaseOrder.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payments.AuthorizeNet.Fields.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payments.PayPalStandard.Fields.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payments.PayPalDirect.Fields.AdditionalFeePercentage">
|
|
<Value>Additional fee. Use percentage</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Wishlist.EmailAFriend.FriendEmail.Hint">
|
|
<Value>Enter friend''s email</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Sitemap.Topics">
|
|
<Value>Topics</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.Mini.OneItemText">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.Mini.OneItem">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.Mini.SeveralItemsText">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.Mini.SeveralItems">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.Mini.ItemsText">
|
|
<Value>There are {0} in your cart.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.Mini.Items">
|
|
<Value>{0} item(s)</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payments.GoogleCheckout.Fields.PassEditLink">
|
|
<Value>Pass ''edit cart'' link</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Plugins.Payments.GoogleCheckout.Fields.PassEditLink.Hint">
|
|
<Value>Check to pass ''edit cart'' link to Google Checkout</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.Comments.Fields.IPAddress">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.ProductReviews.Fields.IPAddress">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.ProductReviews.Fields.IPAddress.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.Comments.Fields.IPAddress">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.HeaderQuantity">
|
|
<Value>({0})</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Wishlist.HeaderQuantity">
|
|
<Value>({0})</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.MetaKeywords">
|
|
<Value>Meta keywords</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.MetaKeywords.Hint">
|
|
<Value>Meta keywords to be added to blog post page header.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.MetaDescription">
|
|
<Value>Meta description</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.MetaDescription.Hint">
|
|
<Value>Meta description to be added to blog post page header.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.MetaTitle">
|
|
<Value>Meta title</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.MetaTitle.Hint">
|
|
<Value>Override the page title. The default is the title of the blog post.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Info">
|
|
<Value>Info</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.MetaKeywords">
|
|
<Value>Meta keywords</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.MetaKeywords.Hint">
|
|
<Value>Meta keywords to be added to news page header.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.MetaDescription">
|
|
<Value>Meta description</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.MetaDescription.Hint">
|
|
<Value>Meta description to be added to news page header.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.MetaTitle">
|
|
<Value>Meta title</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Fields.MetaTitle.Hint">
|
|
<Value>Override the page title. The default is the title of the news.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.News.NewsItems.Info">
|
|
<Value>Info</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.LoadAllLocaleRecordsOnStartup">
|
|
<Value>Load all locales on startup</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.GeneralCommon.LoadAllLocaleRecordsOnStartup.Hint">
|
|
<Value>When enabled, all locale resources will be loaded on application startup. The application start will be slower, but then all pages could be opened much faster.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.CustomerUser.StoreLastVisitedPage">
|
|
<Value>Store last visited page</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Configuration.Settings.CustomerUser.StoreLastVisitedPage.Hint">
|
|
<Value>When enabled, the last visited page will be stored. When disabled, it can improved performance.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Categories.Acl">
|
|
<Value>Access control list</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Manufacturers.Acl">
|
|
<Value>Access control list</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Acl">
|
|
<Value>Access control list</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Stores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.LimitedToStores">
|
|
<Value>Limited to stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.LimitedToStores.Hint">
|
|
<Value>Determines whether the blog post is available only at certain stores.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.AvailableStores">
|
|
<Value>Stores</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Blog.BlogPosts.Fields.AvailableStores.Hint">
|
|
<Value>Select stores for which the blog post will be shown.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors">
|
|
<Value>Vendors</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.AddNew">
|
|
<Value>Add a new vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.BackToList">
|
|
<Value>back to vendor list</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.EditVendorDetails">
|
|
<Value>Edit vendor details</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Added">
|
|
<Value>The new vendor has been added successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Deleted">
|
|
<Value>The vendor has been deleted successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Updated">
|
|
<Value>The vendor has been updated successfully.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Name">
|
|
<Value>Name</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Name.Hint">
|
|
<Value>The name of the vendor.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Name.Required">
|
|
<Value>Please provide a name.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Email">
|
|
<Value>Email</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Email.Hint">
|
|
<Value>Enter email</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Email.Required">
|
|
<Value>Email is required.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Description">
|
|
<Value>Description</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Description.Hint">
|
|
<Value>The description of the vendor.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.AdminComment">
|
|
<Value>Admin comment</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.AdminComment.Hint">
|
|
<Value>Admin comment. For internal use.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Active">
|
|
<Value>Active</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.Active.Hint">
|
|
<Value>A value indicating whether the vendor is active.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.Vendor">
|
|
<Value>Vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.Vendor.Hint">
|
|
<Value>Choose a vendor of this product. This can be useful if you''re using multi-vendor functionality.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.Fields.Vendor.None">
|
|
<Value>No vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.List.SearchVendor">
|
|
<Value>Vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Catalog.Products.List.SearchVendor.Hint">
|
|
<Value>Search by a specific vendor.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.List.Vendor">
|
|
<Value>Vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.List.Vendor.Hint">
|
|
<Value>Search by a specific vendor. You''ll see orders with products from a specified vendor.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.Products.Vendor">
|
|
<Value>Vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.Fields.Vendor">
|
|
<Value>Manager of vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.Fields.Vendor.Hint">
|
|
<Value>Choose a vendor associated to this customer account. When associated this customer will be able to login to the chosen vendor portal and manage his products and orders.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.Fields.Vendor.None">
|
|
<Value>Not a vendor</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.AssociatedCustomerEmails">
|
|
<Value>Customers</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.AssociatedCustomerEmails.Hint">
|
|
<Value>A list of customer accounts which could be used to manage products and orders of this vendor (have access to the vendor portal). You can associate customers to a vendor on a customer details page. If you don''t want the vendor to have access to the vendor portal, then do not associate any customer account with it.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Vendors.Fields.AssociatedCustomerEmails.None">
|
|
<Value>No customer account associated to this vendor.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.AdminCouldNotbeVendor">
|
|
<Value>A customer with a vendor associated could not be in "Administrators" role.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.VendorShouldBeInVendorsRole">
|
|
<Value>Note: if you have a vendor associated with this customer, then also ensure it is in "Vendors" customer role.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Telerik.EditorLocalization.Close">
|
|
<Value>Close</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Telerik.EditorLocalization.Or">
|
|
<Value>or</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Telerik.EditorLocalization.Tooltip">
|
|
<Value>Tooltip</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Telerik.EditorLocalization.WebAddress">
|
|
<Value>Web address</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Forums.ForumGroup.Fields.Description">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.ContentManagement.Forums.ForumGroup.Fields.Description.Hint">
|
|
<Value></Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.MaximumShoppingCartItems">
|
|
<Value>The maximum number of distinct products allowed in the cart is {0}.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="ShoppingCart.MaximumWishlistItems">
|
|
<Value>The maximum number of distinct products allowed in the wishlist is {0}.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Customers.Customers.CannotBeInVendoRoleWithoutVendorAssociated">
|
|
<Value>A customer in the Vendors role should have a vendor account associated.</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.Shipments.PrintPackagingSlip.NoShipments">
|
|
<Value>No shipments selected</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Common.Close">
|
|
<Value>Close</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.Fields.UsedDiscounts">
|
|
<Value>Used discounts</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="Admin.Orders.Fields.UsedDiscounts.Hint">
|
|
<Value>A list of used discounts</Value>
|
|
</LocaleResource>
|
|
<LocaleResource Name="RewardPoints.Message.EarnedForRegistration">
|
|
<Value>Registered as customer</Value>
|
|
</LocaleResource>
|
|
</Language>
|
|
'
|
|
|
|
CREATE TABLE #LocaleStringResourceTmp
|
|
(
|
|
[ResourceName] [nvarchar](200) NOT NULL,
|
|
[ResourceValue] [nvarchar](max) NOT NULL
|
|
)
|
|
|
|
INSERT INTO #LocaleStringResourceTmp (ResourceName, ResourceValue)
|
|
SELECT nref.value('@Name', 'nvarchar(200)'), nref.value('Value[1]', 'nvarchar(MAX)')
|
|
FROM @resources.nodes('//Language/LocaleResource') AS R(nref)
|
|
|
|
--do it for each existing language
|
|
DECLARE @ExistingLanguageID int
|
|
DECLARE cur_existinglanguage CURSOR FOR
|
|
SELECT [ID]
|
|
FROM [Language]
|
|
OPEN cur_existinglanguage
|
|
FETCH NEXT FROM cur_existinglanguage INTO @ExistingLanguageID
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
DECLARE @ResourceName nvarchar(200)
|
|
DECLARE @ResourceValue nvarchar(MAX)
|
|
DECLARE cur_localeresource CURSOR FOR
|
|
SELECT ResourceName, ResourceValue
|
|
FROM #LocaleStringResourceTmp
|
|
OPEN cur_localeresource
|
|
FETCH NEXT FROM cur_localeresource INTO @ResourceName, @ResourceValue
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
IF (EXISTS (SELECT 1 FROM [LocaleStringResource] WHERE LanguageID=@ExistingLanguageID AND ResourceName=@ResourceName))
|
|
BEGIN
|
|
UPDATE [LocaleStringResource]
|
|
SET [ResourceValue]=@ResourceValue
|
|
WHERE LanguageID=@ExistingLanguageID AND ResourceName=@ResourceName
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
INSERT INTO [LocaleStringResource]
|
|
(
|
|
[LanguageId],
|
|
[ResourceName],
|
|
[ResourceValue]
|
|
)
|
|
VALUES
|
|
(
|
|
@ExistingLanguageID,
|
|
@ResourceName,
|
|
@ResourceValue
|
|
)
|
|
END
|
|
|
|
IF (@ResourceValue is null or @ResourceValue = '')
|
|
BEGIN
|
|
DELETE [LocaleStringResource]
|
|
WHERE LanguageID=@ExistingLanguageID AND ResourceName=@ResourceName
|
|
END
|
|
|
|
FETCH NEXT FROM cur_localeresource INTO @ResourceName, @ResourceValue
|
|
END
|
|
CLOSE cur_localeresource
|
|
DEALLOCATE cur_localeresource
|
|
|
|
|
|
--fetch next language identifier
|
|
FETCH NEXT FROM cur_existinglanguage INTO @ExistingLanguageID
|
|
END
|
|
CLOSE cur_existinglanguage
|
|
DEALLOCATE cur_existinglanguage
|
|
|
|
DROP TABLE #LocaleStringResourceTmp
|
|
GO
|
|
|
|
--add new "one word" URL to "reservedurlrecordslugs" setting
|
|
IF EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'seosettings.reservedurlrecordslugs')
|
|
BEGIN
|
|
DECLARE @NewUrlRecord nvarchar(4000)
|
|
SET @NewUrlRecord = N'page-not-found'
|
|
|
|
DECLARE @reservedurlrecordslugs nvarchar(4000)
|
|
SELECT @reservedurlrecordslugs = [Value] FROM [Setting] WHERE [name] = N'seosettings.reservedurlrecordslugs'
|
|
|
|
IF (CHARINDEX(@NewUrlRecord, @reservedurlrecordslugs) = 0)
|
|
BEGIN
|
|
UPDATE [Setting]
|
|
SET [Value] = @reservedurlrecordslugs + ',' + @NewUrlRecord
|
|
WHERE [name] = N'seosettings.reservedurlrecordslugs'
|
|
END
|
|
END
|
|
GO
|
|
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[Topic]
|
|
WHERE [SystemName] = N'PageNotFound')
|
|
BEGIN
|
|
INSERT [dbo].[Topic] ([SystemName], [IncludeInSitemap], [IsPasswordProtected], [Title], [Body])
|
|
VALUES (N'PageNotFound', 0, 0, N'', N'<p><strong>The page you requested was not found, and we have a fine guess why.</strong>
|
|
<ul>
|
|
<li>If you typed the URL directly, please make sure the spelling is correct.</li>
|
|
<li>The page no longer exists. In this case, we profusely apologize for the inconvenience and for any damage this may cause.</li>
|
|
</ul></p>')
|
|
END
|
|
GO
|
|
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'rewardpointssettings.minimumrewardpointstouse')
|
|
BEGIN
|
|
INSERT [Setting] ([Name], [Value])
|
|
VALUES (N'rewardpointssettings.minimumrewardpointstouse', N'0')
|
|
END
|
|
GO
|
|
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'mediasettings.multiplethumbdirectories')
|
|
BEGIN
|
|
INSERT [Setting] ([Name], [Value])
|
|
VALUES (N'mediasettings.multiplethumbdirectories', N'false')
|
|
END
|
|
GO
|
|
|
|
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Store]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Store](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[Name] nvarchar(400) NOT NULL,
|
|
[Url] nvarchar(400) NOT NULL,
|
|
[SslEnabled] bit NOT NULL,
|
|
[SecureUrl] nvarchar(400) NULL,
|
|
[Hosts] nvarchar(1000) NULL,
|
|
[DisplayOrder] int NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
|
|
DECLARE @DEFAULT_STORE_NAME nvarchar(400)
|
|
SELECT @DEFAULT_STORE_NAME = [Value] FROM [Setting] WHERE [name] = N'storeinformationsettings.storename'
|
|
if (@DEFAULT_STORE_NAME is null)
|
|
SET @DEFAULT_STORE_NAME = N'Your store name'
|
|
DECLARE @DEFAULT_STORE_URL nvarchar(400)
|
|
SELECT @DEFAULT_STORE_URL= [Value] FROM [Setting] WHERE [name] = N'storeinformationsettings.storeurl'
|
|
if (@DEFAULT_STORE_URL is null)
|
|
SET @DEFAULT_STORE_URL = N'http://www.yourstore.com/'
|
|
|
|
--create the first store
|
|
INSERT INTO [Store] ([Name], [Url], [SslEnabled], [Hosts], [DisplayOrder])
|
|
VALUES (@DEFAULT_STORE_NAME, @DEFAULT_STORE_URL, 0, N'yourstore.com,www.yourstore.com', 1)
|
|
|
|
DELETE FROM [Setting] WHERE [name] = N'storeinformationsettings.storename'
|
|
DELETE FROM [Setting] WHERE [name] = N'storeinformationsettings.storeurl'
|
|
END
|
|
GO
|
|
|
|
--new permission
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageStores')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Stores', N'ManageStores', N'Configuration')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[StoreMapping]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[StoreMapping](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[EntityId] [int] NOT NULL,
|
|
[EntityName] nvarchar(400) NOT NULL,
|
|
[StoreId] [int] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 from sys.indexes WHERE [NAME]=N'IX_StoreMapping_EntityId_EntityName' and object_id=object_id(N'[StoreMapping]'))
|
|
BEGIN
|
|
CREATE NONCLUSTERED INDEX [IX_StoreMapping_EntityId_EntityName] ON [StoreMapping] ([EntityId] ASC, [EntityName] ASC)
|
|
END
|
|
GO
|
|
|
|
--Store mapping for manufacturers
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Manufacturer]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [Manufacturer]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Manufacturer]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Manufacturer] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
--Store mapping for categories
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Category]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [Category]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Category]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Category] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
|
|
--Store mapping for products
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Product]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [Product]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Product]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Product] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
IF EXISTS (
|
|
SELECT *
|
|
FROM sys.objects
|
|
WHERE object_id = OBJECT_ID(N'[ProductLoadAllPaged]') AND OBJECTPROPERTY(object_id,N'IsProcedure') = 1)
|
|
DROP PROCEDURE [ProductLoadAllPaged]
|
|
GO
|
|
CREATE PROCEDURE [dbo].[ProductLoadAllPaged]
|
|
(
|
|
@CategoryIds nvarchar(MAX) = null, --a list of category IDs (comma-separated list). e.g. 1,2,3
|
|
@ManufacturerId int = 0,
|
|
@StoreId int = 0,
|
|
@ProductTagId int = 0,
|
|
@FeaturedProducts bit = null, --0 featured only , 1 not featured only, null - load all products
|
|
@PriceMin decimal(18, 4) = null,
|
|
@PriceMax decimal(18, 4) = null,
|
|
@Keywords nvarchar(4000) = null,
|
|
@SearchDescriptions bit = 0, --a value indicating whether to search by a specified "keyword" in product descriptions
|
|
@SearchProductTags bit = 0, --a value indicating whether to search by a specified "keyword" in product tags
|
|
@UseFullTextSearch bit = 0,
|
|
@FullTextMode int = 0, --0 using CONTAINS with <prefix_term>, 5 - using CONTAINS and OR with <prefix_term>, 10 - using CONTAINS and AND with <prefix_term>
|
|
@FilteredSpecs nvarchar(MAX) = null, --filter by attributes (comma-separated list). e.g. 14,15,16
|
|
@LanguageId int = 0,
|
|
@OrderBy int = 0, --0 position, 5 - Name: A to Z, 6 - Name: Z to A, 10 - Price: Low to High, 11 - Price: High to Low, 15 - creation date
|
|
@AllowedCustomerRoleIds nvarchar(MAX) = null, --a list of customer role IDs (comma-separated list) for which a product should be shown (if a subjet to ACL)
|
|
@PageIndex int = 0,
|
|
@PageSize int = 2147483644,
|
|
@ShowHidden bit = 0,
|
|
@LoadFilterableSpecificationAttributeOptionIds bit = 0, --a value indicating whether we should load the specification attribute option identifiers applied to loaded products (all pages)
|
|
@FilterableSpecificationAttributeOptionIds nvarchar(MAX) = null OUTPUT, --the specification attribute option identifiers applied to loaded products (all pages). returned as a comma separated list of identifiers
|
|
@TotalRecords int = null OUTPUT
|
|
)
|
|
AS
|
|
BEGIN
|
|
|
|
/* Products that filtered by keywords */
|
|
CREATE TABLE #KeywordProducts
|
|
(
|
|
[ProductId] int NOT NULL
|
|
)
|
|
|
|
DECLARE
|
|
@SearchKeywords bit,
|
|
@sql nvarchar(max),
|
|
@sql_orderby nvarchar(max)
|
|
|
|
SET NOCOUNT ON
|
|
|
|
--filter by keywords
|
|
SET @Keywords = isnull(@Keywords, '')
|
|
SET @Keywords = rtrim(ltrim(@Keywords))
|
|
IF ISNULL(@Keywords, '') != ''
|
|
BEGIN
|
|
SET @SearchKeywords = 1
|
|
|
|
IF @UseFullTextSearch = 1
|
|
BEGIN
|
|
--remove wrong chars (' ")
|
|
SET @Keywords = REPLACE(@Keywords, '''', '')
|
|
SET @Keywords = REPLACE(@Keywords, '"', '')
|
|
|
|
--full-text search
|
|
IF @FullTextMode = 0
|
|
BEGIN
|
|
--0 - using CONTAINS with <prefix_term>
|
|
SET @Keywords = ' "' + @Keywords + '*" '
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
--5 - using CONTAINS and OR with <prefix_term>
|
|
--10 - using CONTAINS and AND with <prefix_term>
|
|
|
|
--clean multiple spaces
|
|
WHILE CHARINDEX(' ', @Keywords) > 0
|
|
SET @Keywords = REPLACE(@Keywords, ' ', ' ')
|
|
|
|
DECLARE @concat_term nvarchar(100)
|
|
IF @FullTextMode = 5 --5 - using CONTAINS and OR with <prefix_term>
|
|
BEGIN
|
|
SET @concat_term = 'OR'
|
|
END
|
|
IF @FullTextMode = 10 --10 - using CONTAINS and AND with <prefix_term>
|
|
BEGIN
|
|
SET @concat_term = 'AND'
|
|
END
|
|
|
|
--now let's build search string
|
|
declare @fulltext_keywords nvarchar(4000)
|
|
set @fulltext_keywords = N''
|
|
declare @index int
|
|
|
|
set @index = CHARINDEX(' ', @Keywords, 0)
|
|
|
|
-- if index = 0, then only one field was passed
|
|
IF(@index = 0)
|
|
set @fulltext_keywords = ' "' + @Keywords + '*" '
|
|
ELSE
|
|
BEGIN
|
|
DECLARE @first BIT
|
|
SET @first = 1
|
|
WHILE @index > 0
|
|
BEGIN
|
|
IF (@first = 0)
|
|
SET @fulltext_keywords = @fulltext_keywords + ' ' + @concat_term + ' '
|
|
ELSE
|
|
SET @first = 0
|
|
|
|
SET @fulltext_keywords = @fulltext_keywords + '"' + SUBSTRING(@Keywords, 1, @index - 1) + '*"'
|
|
SET @Keywords = SUBSTRING(@Keywords, @index + 1, LEN(@Keywords) - @index)
|
|
SET @index = CHARINDEX(' ', @Keywords, 0)
|
|
end
|
|
|
|
-- add the last field
|
|
IF LEN(@fulltext_keywords) > 0
|
|
SET @fulltext_keywords = @fulltext_keywords + ' ' + @concat_term + ' ' + '"' + SUBSTRING(@Keywords, 1, LEN(@Keywords)) + '*"'
|
|
END
|
|
SET @Keywords = @fulltext_keywords
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
--usual search by PATINDEX
|
|
SET @Keywords = '%' + @Keywords + '%'
|
|
END
|
|
--PRINT @Keywords
|
|
|
|
--product name
|
|
SET @sql = '
|
|
INSERT INTO #KeywordProducts ([ProductId])
|
|
SELECT p.Id
|
|
FROM Product p with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(p.[Name], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, p.[Name]) > 0 '
|
|
|
|
|
|
--product variant name
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pv.ProductId
|
|
FROM ProductVariant pv with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pv.[Name], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pv.[Name]) > 0 '
|
|
|
|
|
|
--SKU
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pv.ProductId
|
|
FROM ProductVariant pv with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pv.[Sku], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pv.[Sku]) > 0 '
|
|
|
|
|
|
--localized product name
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT lp.EntityId
|
|
FROM LocalizedProperty lp with (NOLOCK)
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''Product''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''Name'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
|
|
|
|
IF @SearchDescriptions = 1
|
|
BEGIN
|
|
--product short description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT p.Id
|
|
FROM Product p with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(p.[ShortDescription], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, p.[ShortDescription]) > 0 '
|
|
|
|
|
|
--product full description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT p.Id
|
|
FROM Product p with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(p.[FullDescription], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, p.[FullDescription]) > 0 '
|
|
|
|
|
|
--product variant description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pv.ProductId
|
|
FROM ProductVariant pv with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pv.[Description], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pv.[Description]) > 0 '
|
|
|
|
|
|
--localized product short description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT lp.EntityId
|
|
FROM LocalizedProperty lp with (NOLOCK)
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''Product''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''ShortDescription'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
|
|
|
|
--localized product full description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT lp.EntityId
|
|
FROM LocalizedProperty lp with (NOLOCK)
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''Product''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''FullDescription'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
END
|
|
|
|
|
|
|
|
IF @SearchProductTags = 1
|
|
BEGIN
|
|
--product tag
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pptm.Product_Id
|
|
FROM Product_ProductTag_Mapping pptm with(NOLOCK) INNER JOIN ProductTag pt with(NOLOCK) ON pt.Id = pptm.ProductTag_Id
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pt.[Name], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pt.[Name]) > 0 '
|
|
|
|
--localized product tag
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pptm.Product_Id
|
|
FROM LocalizedProperty lp with (NOLOCK) INNER JOIN Product_ProductTag_Mapping pptm with(NOLOCK) ON lp.EntityId = pptm.ProductTag_Id
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''ProductTag''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''Name'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
END
|
|
|
|
--PRINT (@sql)
|
|
EXEC sp_executesql @sql, N'@Keywords nvarchar(4000)', @Keywords
|
|
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @SearchKeywords = 0
|
|
END
|
|
|
|
--filter by category IDs
|
|
SET @CategoryIds = isnull(@CategoryIds, '')
|
|
CREATE TABLE #FilteredCategoryIds
|
|
(
|
|
CategoryId int not null
|
|
)
|
|
INSERT INTO #FilteredCategoryIds (CategoryId)
|
|
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@CategoryIds, ',')
|
|
DECLARE @CategoryIdsCount int
|
|
SET @CategoryIdsCount = (SELECT COUNT(1) FROM #FilteredCategoryIds)
|
|
|
|
--filter by attributes
|
|
SET @FilteredSpecs = isnull(@FilteredSpecs, '')
|
|
CREATE TABLE #FilteredSpecs
|
|
(
|
|
SpecificationAttributeOptionId int not null
|
|
)
|
|
INSERT INTO #FilteredSpecs (SpecificationAttributeOptionId)
|
|
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@FilteredSpecs, ',')
|
|
DECLARE @SpecAttributesCount int
|
|
SET @SpecAttributesCount = (SELECT COUNT(1) FROM #FilteredSpecs)
|
|
|
|
--filter by customer role IDs (access control list)
|
|
SET @AllowedCustomerRoleIds = isnull(@AllowedCustomerRoleIds, '')
|
|
CREATE TABLE #FilteredCustomerRoleIds
|
|
(
|
|
CustomerRoleId int not null
|
|
)
|
|
INSERT INTO #FilteredCustomerRoleIds (CustomerRoleId)
|
|
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@AllowedCustomerRoleIds, ',')
|
|
|
|
--paging
|
|
DECLARE @PageLowerBound int
|
|
DECLARE @PageUpperBound int
|
|
DECLARE @RowsToReturn int
|
|
SET @RowsToReturn = @PageSize * (@PageIndex + 1)
|
|
SET @PageLowerBound = @PageSize * @PageIndex
|
|
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
|
|
|
|
CREATE TABLE #DisplayOrderTmp
|
|
(
|
|
[Id] int IDENTITY (1, 1) NOT NULL,
|
|
[ProductId] int NOT NULL
|
|
)
|
|
|
|
SET @sql = '
|
|
INSERT INTO #DisplayOrderTmp ([ProductId])
|
|
SELECT p.Id
|
|
FROM
|
|
Product p with (NOLOCK)'
|
|
|
|
IF @CategoryIdsCount > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN Product_Category_Mapping pcm with (NOLOCK)
|
|
ON p.Id = pcm.ProductId'
|
|
END
|
|
|
|
IF @ManufacturerId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN Product_Manufacturer_Mapping pmm with (NOLOCK)
|
|
ON p.Id = pmm.ProductId'
|
|
END
|
|
|
|
IF ISNULL(@ProductTagId, 0) != 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN Product_ProductTag_Mapping pptm with (NOLOCK)
|
|
ON p.Id = pptm.Product_Id'
|
|
END
|
|
|
|
IF @ShowHidden = 0
|
|
OR @PriceMin > 0
|
|
OR @PriceMax > 0
|
|
OR @OrderBy = 10 /* Price: Low to High */
|
|
OR @OrderBy = 11 /* Price: High to Low */
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN ProductVariant pv with (NOLOCK)
|
|
ON p.Id = pv.ProductId'
|
|
END
|
|
|
|
--searching by keywords
|
|
IF @SearchKeywords = 1
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
JOIN #KeywordProducts kp
|
|
ON p.Id = kp.ProductId'
|
|
END
|
|
|
|
SET @sql = @sql + '
|
|
WHERE
|
|
p.Deleted = 0'
|
|
|
|
--filter by category
|
|
IF @CategoryIdsCount > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pcm.CategoryId IN (SELECT CategoryId FROM #FilteredCategoryIds)'
|
|
|
|
IF @FeaturedProducts IS NOT NULL
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pcm.IsFeaturedProduct = ' + CAST(@FeaturedProducts AS nvarchar(max))
|
|
END
|
|
END
|
|
|
|
--filter by manufacturer
|
|
IF @ManufacturerId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pmm.ManufacturerId = ' + CAST(@ManufacturerId AS nvarchar(max))
|
|
|
|
IF @FeaturedProducts IS NOT NULL
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pmm.IsFeaturedProduct = ' + CAST(@FeaturedProducts AS nvarchar(max))
|
|
END
|
|
END
|
|
|
|
--filter by product tag
|
|
IF ISNULL(@ProductTagId, 0) != 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pptm.ProductTag_Id = ' + CAST(@ProductTagId AS nvarchar(max))
|
|
END
|
|
|
|
--show hidden
|
|
IF @ShowHidden = 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND p.Published = 1
|
|
AND pv.Published = 1
|
|
AND pv.Deleted = 0
|
|
AND (getutcdate() BETWEEN ISNULL(pv.AvailableStartDateTimeUtc, ''1/1/1900'') and ISNULL(pv.AvailableEndDateTimeUtc, ''1/1/2999''))'
|
|
END
|
|
|
|
--min price
|
|
IF @PriceMin > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (
|
|
(
|
|
--special price (specified price and valid date range)
|
|
(pv.SpecialPrice IS NOT NULL AND (getutcdate() BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.SpecialPrice >= ' + CAST(@PriceMin AS nvarchar(max)) + ')
|
|
)
|
|
OR
|
|
(
|
|
--regular price (price isnt specified or date range isnt valid)
|
|
(pv.SpecialPrice IS NULL OR (getutcdate() NOT BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.Price >= ' + CAST(@PriceMin AS nvarchar(max)) + ')
|
|
)
|
|
)'
|
|
END
|
|
|
|
--max price
|
|
IF @PriceMax > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (
|
|
(
|
|
--special price (specified price and valid date range)
|
|
(pv.SpecialPrice IS NOT NULL AND (getutcdate() BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.SpecialPrice <= ' + CAST(@PriceMax AS nvarchar(max)) + ')
|
|
)
|
|
OR
|
|
(
|
|
--regular price (price isnt specified or date range isnt valid)
|
|
(pv.SpecialPrice IS NULL OR (getutcdate() NOT BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.Price <= ' + CAST(@PriceMax AS nvarchar(max)) + ')
|
|
)
|
|
)'
|
|
END
|
|
|
|
--show hidden and ACL
|
|
IF @ShowHidden = 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (p.SubjectToAcl = 0 OR EXISTS (
|
|
SELECT 1 FROM #FilteredCustomerRoleIds [fcr]
|
|
WHERE
|
|
[fcr].CustomerRoleId IN (
|
|
SELECT [acl].CustomerRoleId
|
|
FROM [AclRecord] acl
|
|
WHERE [acl].EntityId = p.Id AND [acl].EntityName = ''Product''
|
|
)
|
|
))'
|
|
END
|
|
|
|
--show hidden and filter by store
|
|
IF @StoreId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (p.LimitedToStores = 0 OR EXISTS (
|
|
SELECT 1 FROM [StoreMapping] sm
|
|
WHERE [sm].EntityId = p.Id AND [sm].EntityName = ''Product'' and [sm].StoreId=' + CAST(@StoreId AS nvarchar(max)) + '
|
|
))'
|
|
END
|
|
|
|
--filter by specs
|
|
IF @SpecAttributesCount > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM #FilteredSpecs [fs]
|
|
WHERE
|
|
[fs].SpecificationAttributeOptionId NOT IN (
|
|
SELECT psam.SpecificationAttributeOptionId
|
|
FROM Product_SpecificationAttribute_Mapping psam
|
|
WHERE psam.AllowFiltering = 1 AND psam.ProductId = p.Id
|
|
)
|
|
)'
|
|
END
|
|
|
|
--sorting
|
|
SET @sql_orderby = ''
|
|
IF @OrderBy = 5 /* Name: A to Z */
|
|
SET @sql_orderby = ' p.[Name] ASC'
|
|
ELSE IF @OrderBy = 6 /* Name: Z to A */
|
|
SET @sql_orderby = ' p.[Name] DESC'
|
|
ELSE IF @OrderBy = 10 /* Price: Low to High */
|
|
SET @sql_orderby = ' pv.[Price] ASC'
|
|
ELSE IF @OrderBy = 11 /* Price: High to Low */
|
|
SET @sql_orderby = ' pv.[Price] DESC'
|
|
ELSE IF @OrderBy = 15 /* creation date */
|
|
SET @sql_orderby = ' p.[CreatedOnUtc] DESC'
|
|
ELSE /* default sorting, 0 (position) */
|
|
BEGIN
|
|
--category position (display order)
|
|
IF @CategoryIdsCount > 0 SET @sql_orderby = ' pcm.DisplayOrder ASC'
|
|
|
|
--manufacturer position (display order)
|
|
IF @ManufacturerId > 0
|
|
BEGIN
|
|
IF LEN(@sql_orderby) > 0 SET @sql_orderby = @sql_orderby + ', '
|
|
SET @sql_orderby = @sql_orderby + ' pmm.DisplayOrder ASC'
|
|
END
|
|
|
|
--name
|
|
IF LEN(@sql_orderby) > 0 SET @sql_orderby = @sql_orderby + ', '
|
|
SET @sql_orderby = @sql_orderby + ' p.[Name] ASC'
|
|
END
|
|
|
|
SET @sql = @sql + '
|
|
ORDER BY' + @sql_orderby
|
|
|
|
--PRINT (@sql)
|
|
EXEC sp_executesql @sql
|
|
|
|
DROP TABLE #FilteredCategoryIds
|
|
DROP TABLE #FilteredSpecs
|
|
DROP TABLE #FilteredCustomerRoleIds
|
|
|
|
CREATE TABLE #PageIndex
|
|
(
|
|
[IndexId] int IDENTITY (1, 1) NOT NULL,
|
|
[ProductId] int NOT NULL
|
|
)
|
|
INSERT INTO #PageIndex ([ProductId])
|
|
SELECT ProductId
|
|
FROM #DisplayOrderTmp
|
|
GROUP BY ProductId
|
|
ORDER BY min([Id])
|
|
|
|
--total records
|
|
SET @TotalRecords = @@rowcount
|
|
|
|
DROP TABLE #DisplayOrderTmp
|
|
|
|
--prepare filterable specification attribute option identifier (if requested)
|
|
IF @LoadFilterableSpecificationAttributeOptionIds = 1
|
|
BEGIN
|
|
CREATE TABLE #FilterableSpecs
|
|
(
|
|
[SpecificationAttributeOptionId] int NOT NULL
|
|
)
|
|
INSERT INTO #FilterableSpecs ([SpecificationAttributeOptionId])
|
|
SELECT DISTINCT [psam].SpecificationAttributeOptionId
|
|
FROM [Product_SpecificationAttribute_Mapping] [psam]
|
|
WHERE [psam].[AllowFiltering] = 1
|
|
AND [psam].[ProductId] IN (SELECT [pi].ProductId FROM #PageIndex [pi])
|
|
|
|
--build comma separated list of filterable identifiers
|
|
SELECT @FilterableSpecificationAttributeOptionIds = COALESCE(@FilterableSpecificationAttributeOptionIds + ',' , '') + CAST(SpecificationAttributeOptionId as nvarchar(4000))
|
|
FROM #FilterableSpecs
|
|
|
|
DROP TABLE #FilterableSpecs
|
|
END
|
|
|
|
--return products
|
|
SELECT TOP (@RowsToReturn)
|
|
p.*
|
|
FROM
|
|
#PageIndex [pi]
|
|
INNER JOIN Product p on p.Id = [pi].[ProductId]
|
|
WHERE
|
|
[pi].IndexId > @PageLowerBound AND
|
|
[pi].IndexId < @PageUpperBound
|
|
ORDER BY
|
|
[pi].IndexId
|
|
|
|
DROP TABLE #PageIndex
|
|
END
|
|
GO
|
|
|
|
|
|
--Store mapping for languages
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Language]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [Language]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Language]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Language] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
|
|
--Store mapping for currencies
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Currency]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [Currency]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Currency]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Currency] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
--drop some constraints
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'Customer_Currency'
|
|
AND parent_object_id = Object_id('Customer')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[Customer]
|
|
DROP CONSTRAINT Customer_Currency
|
|
|
|
EXEC ('UPDATE [Customer] SET [CurrencyId] = 0 WHERE [CurrencyId] IS NULL')
|
|
|
|
EXEC ('ALTER TABLE [Customer] ALTER COLUMN [CurrencyId] int NOT NULL')
|
|
END
|
|
GO
|
|
|
|
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'Customer_Language'
|
|
AND parent_object_id = Object_id('Customer')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[Customer]
|
|
DROP CONSTRAINT Customer_Language
|
|
|
|
EXEC ('UPDATE [Customer] SET [LanguageId] = 0 WHERE [LanguageId] IS NULL')
|
|
|
|
EXEC ('ALTER TABLE [Customer] ALTER COLUMN [LanguageId] int NOT NULL')
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'Customer_Affiliate'
|
|
AND parent_object_id = Object_id('Customer')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[Customer]
|
|
DROP CONSTRAINT Customer_Affiliate
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'Affiliate_AffiliatedCustomers'
|
|
AND parent_object_id = Object_id('Customer')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[Customer]
|
|
DROP CONSTRAINT Affiliate_AffiliatedCustomers
|
|
END
|
|
GO
|
|
|
|
UPDATE [Customer]
|
|
SET [AffiliateId] = 0
|
|
WHERE [AffiliateId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Customer] ALTER COLUMN [AffiliateId] int NOT NULL
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'Order_Affiliate'
|
|
AND parent_object_id = Object_id('Order')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[Order]
|
|
DROP CONSTRAINT Order_Affiliate
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'Affiliate_AffiliatedOrders'
|
|
AND parent_object_id = Object_id('Order')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[Order]
|
|
DROP CONSTRAINT Affiliate_AffiliatedOrders
|
|
END
|
|
GO
|
|
|
|
UPDATE [Order]
|
|
SET [AffiliateId] = 0
|
|
WHERE [AffiliateId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Order] ALTER COLUMN [AffiliateId] int NOT NULL
|
|
GO
|
|
|
|
|
|
--Store mapping to shopping cart items
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ShoppingCartItem]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [ShoppingCartItem]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
DECLARE @DEFAULT_STORE_ID int
|
|
SELECT @DEFAULT_STORE_ID = [Id] FROM [Store] ORDER BY [DisplayOrder]
|
|
UPDATE [ShoppingCartItem]
|
|
SET [StoreId] = @DEFAULT_STORE_ID
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [ShoppingCartItem] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
|
|
--Store mapping to orders
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Order]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [Order]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
DECLARE @DEFAULT_STORE_ID int
|
|
SELECT @DEFAULT_STORE_ID = [Id] FROM [Store] ORDER BY [DisplayOrder]
|
|
UPDATE [Order]
|
|
SET [StoreId] = @DEFAULT_STORE_ID
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Order] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
--Store mapping to return requests
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ReturnRequest]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [ReturnRequest]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
DECLARE @DEFAULT_STORE_ID int
|
|
SELECT @DEFAULT_STORE_ID = [Id] FROM [Store] ORDER BY [DisplayOrder]
|
|
UPDATE [ReturnRequest]
|
|
SET [StoreId] = @DEFAULT_STORE_ID
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [ReturnRequest] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
DELETE FROM [ScheduleTask]
|
|
WHERE [Type] like N'Nop.Plugin.Feed.Froogle.StaticFileGenerationTask, Nop.Plugin.Feed.Froogle'
|
|
|
|
--Store mapping to message templates
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[MessageTemplate]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [MessageTemplate]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [MessageTemplate]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [MessageTemplate] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
--Store mapping for topics
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Topic]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [Topic]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Topic]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Topic] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
|
|
|
|
--Store mapping for news
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[News]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [News]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [News]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [News] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
--Store mapping to BackInStockSubscription
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BackInStockSubscription]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [BackInStockSubscription]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
DECLARE @DEFAULT_STORE_ID int
|
|
SELECT @DEFAULT_STORE_ID = [Id] FROM [Store] ORDER BY [DisplayOrder]
|
|
UPDATE [BackInStockSubscription]
|
|
SET [StoreId] = @DEFAULT_STORE_ID
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [BackInStockSubscription] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
--Store mapping to Forums_PrivateMessage
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Forums_PrivateMessage]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [Forums_PrivateMessage]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
DECLARE @DEFAULT_STORE_ID int
|
|
SELECT @DEFAULT_STORE_ID = [Id] FROM [Store] ORDER BY [DisplayOrder]
|
|
UPDATE [Forums_PrivateMessage]
|
|
SET [StoreId] = @DEFAULT_STORE_ID
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Forums_PrivateMessage] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
|
|
--GenericAttributes cuold be limited to some specific store name
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[GenericAttribute]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [GenericAttribute]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [GenericAttribute]
|
|
SET [StoreId] = 0
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [GenericAttribute] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
--delete generic attributes which depends on a specific store now
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [KeyGroup] =N'Customer' and [Key]=N'NotifiedAboutNewPrivateMessages' and [StoreId] = 0
|
|
GO
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [KeyGroup] =N'Customer' and [Key]=N'WorkingDesktopThemeName' and [StoreId] = 0
|
|
GO
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [KeyGroup] =N'Customer' and [Key]=N'DontUseMobileVersion' and [StoreId] = 0
|
|
GO
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [KeyGroup] =N'Customer' and [Key]=N'LastContinueShoppingPage' and [StoreId] = 0
|
|
GO
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [KeyGroup] =N'Customer' and [Key]=N'LastShippingOption' and [StoreId] = 0
|
|
GO
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [KeyGroup] =N'Customer' and [Key]=N'OfferedShippingOptions' and [StoreId] = 0
|
|
GO
|
|
|
|
--Moved several properties from [Customer] to [GenericAtrribute]
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='TaxDisplayTypeId')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [TaxDisplayTypeId]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='SelectedPaymentMethodSystemName')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [SelectedPaymentMethodSystemName]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='UseRewardPointsDuringCheckout')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [UseRewardPointsDuringCheckout]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='CurrencyId')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [CurrencyId]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='LanguageId')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [LanguageId]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='VatNumber')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [VatNumber]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='VatNumberStatusId')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [VatNumberStatusId]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='TimeZoneId')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [TimeZoneId]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='DiscountCouponCode')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [DiscountCouponCode]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='GiftCardCouponCodes')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [GiftCardCouponCodes]
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='CheckoutAttributes')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
DROP COLUMN [CheckoutAttributes]
|
|
END
|
|
GO
|
|
|
|
|
|
--Store mapping to Setting
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Setting]') and NAME='StoreId')
|
|
BEGIN
|
|
ALTER TABLE [Setting]
|
|
ADD [StoreId] int NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Setting]
|
|
SET [StoreId] = 0
|
|
WHERE [StoreId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Setting] ALTER COLUMN [StoreId] int NOT NULL
|
|
GO
|
|
|
|
--built-in user record for background tasks
|
|
IF NOT EXISTS (SELECT 1 FROM [Customer] WHERE [SystemName] = N'BackgroundTask')
|
|
BEGIN
|
|
INSERT [Customer] ([CustomerGuid], [Email], [PasswordFormatId], [AdminComment], [IsTaxExempt], [AffiliateId], [Active], [Deleted], [IsSystemAccount], [SystemName], [CreatedOnUtc], [LastActivityDateUtc])
|
|
VALUES (NEWID(), N'builtin@background-task-record.com', 0, N'Built-in system record used for background tasks.', 0, 0, 1, 0, 1, N'BackgroundTask',GETUTCDATE(),GETUTCDATE())
|
|
END
|
|
GO
|
|
|
|
--move records from CustomerContent to NewsComment
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[NewsComment]') and NAME='CreatedOnUtc')
|
|
BEGIN
|
|
ALTER TABLE [NewsComment]
|
|
ADD [CreatedOnUtc] datetime NULL
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[NewsComment]') and NAME='CustomerId')
|
|
BEGIN
|
|
ALTER TABLE [NewsComment]
|
|
ADD [CustomerId] int NULL
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[CustomerContent]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
DECLARE @ExistingNewsCommentID int
|
|
DECLARE cur_existingcomment CURSOR FOR
|
|
SELECT [ID]
|
|
FROM [NewsComment]
|
|
OPEN cur_existingcomment
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingNewsCommentID
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
DECLARE @CustomerID int
|
|
SET @CustomerID = null -- clear cache (variable scope)
|
|
|
|
DECLARE @CreatedOnUtc datetime
|
|
SET @CreatedOnUtc = null -- clear cache (variable scope)
|
|
|
|
DECLARE @sql nvarchar(4000)
|
|
SET @sql = 'SELECT @CustomerID = cc.[CustomerId], @CreatedOnUtc = cc.[CreatedOnUtc] FROM [CustomerContent] cc WHERE cc.[Id]=' + ISNULL(CAST(@ExistingNewsCommentID AS nvarchar(max)), '0')
|
|
EXEC sp_executesql @sql,N'@CustomerID int OUTPUT, @CreatedOnUtc datetime OUTPUT',@CustomerID OUTPUT,@CreatedOnUtc OUTPUT
|
|
|
|
UPDATE [NewsComment]
|
|
SET [CustomerId] = @CustomerID,
|
|
[CreatedOnUtc] = @CreatedOnUtc
|
|
WHERE [Id]=@ExistingNewsCommentID
|
|
|
|
--fetch next language identifier
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingNewsCommentID
|
|
END
|
|
CLOSE cur_existingcomment
|
|
DEALLOCATE cur_existingcomment
|
|
END
|
|
GO
|
|
|
|
ALTER TABLE [NewsComment] ALTER COLUMN [CustomerId] int NOT NULL
|
|
GO
|
|
|
|
ALTER TABLE [NewsComment] ALTER COLUMN [CreatedOnUtc] datetime NOT NULL
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'NewsComment_Customer'
|
|
AND parent_object_id = Object_id('NewsComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE [dbo].[NewsComment] WITH CHECK ADD CONSTRAINT [NewsComment_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
END
|
|
GO
|
|
|
|
|
|
--move records from CustomerContent to BlogComment
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogComment]') and NAME='CreatedOnUtc')
|
|
BEGIN
|
|
ALTER TABLE [BlogComment]
|
|
ADD [CreatedOnUtc] datetime NULL
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogComment]') and NAME='CustomerId')
|
|
BEGIN
|
|
ALTER TABLE [BlogComment]
|
|
ADD [CustomerId] int NULL
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[CustomerContent]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
DECLARE @ExistingBlogCommentID int
|
|
DECLARE cur_existingcomment CURSOR FOR
|
|
SELECT [ID]
|
|
FROM [BlogComment]
|
|
OPEN cur_existingcomment
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingBlogCommentID
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
DECLARE @CustomerID int
|
|
SET @CustomerID = null -- clear cache (variable scope)
|
|
|
|
DECLARE @CreatedOnUtc datetime
|
|
SET @CreatedOnUtc = null -- clear cache (variable scope)
|
|
|
|
DECLARE @sql nvarchar(4000)
|
|
SET @sql = 'SELECT @CustomerID = cc.[CustomerId], @CreatedOnUtc = cc.[CreatedOnUtc] FROM [CustomerContent] cc WHERE cc.[Id]=' + ISNULL(CAST(@ExistingBlogCommentID AS nvarchar(max)), '0')
|
|
EXEC sp_executesql @sql,N'@CustomerID int OUTPUT, @CreatedOnUtc datetime OUTPUT',@CustomerID OUTPUT,@CreatedOnUtc OUTPUT
|
|
|
|
UPDATE [BlogComment]
|
|
SET [CustomerId] = @CustomerID,
|
|
[CreatedOnUtc] = @CreatedOnUtc
|
|
WHERE [Id]=@ExistingBlogCommentID
|
|
|
|
--fetch next language identifier
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingBlogCommentID
|
|
END
|
|
CLOSE cur_existingcomment
|
|
DEALLOCATE cur_existingcomment
|
|
END
|
|
GO
|
|
|
|
ALTER TABLE [BlogComment] ALTER COLUMN [CustomerId] int NOT NULL
|
|
GO
|
|
|
|
ALTER TABLE [BlogComment] ALTER COLUMN [CreatedOnUtc] datetime NOT NULL
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'BlogComment_Customer'
|
|
AND parent_object_id = Object_id('BlogComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE [dbo].[BlogComment] WITH CHECK ADD CONSTRAINT [BlogComment_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
END
|
|
GO
|
|
|
|
|
|
--move records from CustomerContent to ProductReview
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ProductReview]') and NAME='CreatedOnUtc')
|
|
BEGIN
|
|
ALTER TABLE [ProductReview]
|
|
ADD [CreatedOnUtc] datetime NULL
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ProductReview]') and NAME='IsApproved')
|
|
BEGIN
|
|
ALTER TABLE [ProductReview]
|
|
ADD [IsApproved] bit NULL
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ProductReview]') and NAME='CustomerId')
|
|
BEGIN
|
|
ALTER TABLE [ProductReview]
|
|
ADD [CustomerId] int NULL
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[CustomerContent]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
DECLARE @ExistingProductReviewID int
|
|
DECLARE cur_existingcomment CURSOR FOR
|
|
SELECT [ID]
|
|
FROM [ProductReview]
|
|
OPEN cur_existingcomment
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingProductReviewID
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
DECLARE @CustomerID int
|
|
SET @CustomerID = null -- clear cache (variable scope)
|
|
|
|
DECLARE @IsApproved bit
|
|
SET @IsApproved = null -- clear cache (variable scope)
|
|
|
|
DECLARE @CreatedOnUtc datetime
|
|
SET @CreatedOnUtc = null -- clear cache (variable scope)
|
|
|
|
DECLARE @sql nvarchar(4000)
|
|
SET @sql = 'SELECT @CustomerID = cc.[CustomerId], @IsApproved = cc.[IsApproved], @CreatedOnUtc = cc.[CreatedOnUtc] FROM [CustomerContent] cc WHERE cc.[Id]=' + ISNULL(CAST(@ExistingProductReviewID AS nvarchar(max)), '0')
|
|
EXEC sp_executesql @sql,N'@CustomerID int OUTPUT, @IsApproved bit OUTPUT, @CreatedOnUtc datetime OUTPUT',@CustomerID OUTPUT,@IsApproved OUTPUT,@CreatedOnUtc OUTPUT
|
|
|
|
UPDATE [ProductReview]
|
|
SET [CustomerId] = @CustomerID,
|
|
[IsApproved] = @IsApproved,
|
|
[CreatedOnUtc] = @CreatedOnUtc
|
|
WHERE [Id]=@ExistingProductReviewID
|
|
|
|
--fetch next language identifier
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingProductReviewID
|
|
END
|
|
CLOSE cur_existingcomment
|
|
DEALLOCATE cur_existingcomment
|
|
END
|
|
GO
|
|
|
|
ALTER TABLE [ProductReview] ALTER COLUMN [CustomerId] int NOT NULL
|
|
GO
|
|
|
|
ALTER TABLE [ProductReview] ALTER COLUMN [IsApproved] bit NOT NULL
|
|
GO
|
|
|
|
ALTER TABLE [ProductReview] ALTER COLUMN [CreatedOnUtc] datetime NOT NULL
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReview_Customer'
|
|
AND parent_object_id = Object_id('ProductReview')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE [dbo].[ProductReview] WITH CHECK ADD CONSTRAINT [ProductReview_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
END
|
|
GO
|
|
|
|
|
|
|
|
--move records from CustomerContent to ProductReviewHelpfulness
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ProductReviewHelpfulness]') and NAME='CustomerId')
|
|
BEGIN
|
|
ALTER TABLE [ProductReviewHelpfulness]
|
|
ADD [CustomerId] int NULL
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[CustomerContent]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
DECLARE @ExistingProductReviewHelpfulnessID int
|
|
DECLARE cur_existingcomment CURSOR FOR
|
|
SELECT [ID]
|
|
FROM [ProductReviewHelpfulness]
|
|
OPEN cur_existingcomment
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingProductReviewHelpfulnessID
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
DECLARE @CustomerID int
|
|
SET @CustomerID = null -- clear cache (variable scope)
|
|
|
|
DECLARE @sql nvarchar(4000)
|
|
SET @sql = 'SELECT @CustomerID = cc.[CustomerId] FROM [CustomerContent] cc WHERE cc.[Id]=' + ISNULL(CAST(@ExistingProductReviewHelpfulnessID AS nvarchar(max)), '0')
|
|
EXEC sp_executesql @sql,N'@CustomerID int OUTPUT',@CustomerID OUTPUT
|
|
|
|
UPDATE [ProductReviewHelpfulness]
|
|
SET [CustomerId] = @CustomerID
|
|
WHERE [Id]=@ExistingProductReviewHelpfulnessID
|
|
|
|
--fetch next language identifier
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingProductReviewHelpfulnessID
|
|
END
|
|
CLOSE cur_existingcomment
|
|
DEALLOCATE cur_existingcomment
|
|
END
|
|
GO
|
|
|
|
ALTER TABLE [ProductReviewHelpfulness] ALTER COLUMN [CustomerId] int NOT NULL
|
|
GO
|
|
|
|
|
|
|
|
--move records from CustomerContent to PollVotingRecord
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[PollVotingRecord]') and NAME='CustomerId')
|
|
BEGIN
|
|
ALTER TABLE [PollVotingRecord]
|
|
ADD [CustomerId] int NULL
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[PollVotingRecord]') and NAME='CreatedOnUtc')
|
|
BEGIN
|
|
ALTER TABLE [PollVotingRecord]
|
|
ADD [CreatedOnUtc] datetime NULL
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[CustomerContent]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
DECLARE @ExistingPollVotingRecordID int
|
|
DECLARE cur_existingcomment CURSOR FOR
|
|
SELECT [ID]
|
|
FROM [PollVotingRecord]
|
|
OPEN cur_existingcomment
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingPollVotingRecordID
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
DECLARE @CustomerID int
|
|
SET @CustomerID = null -- clear cache (variable scope)
|
|
|
|
DECLARE @CreatedOnUtc datetime
|
|
SET @CreatedOnUtc = null -- clear cache (variable scope)
|
|
|
|
DECLARE @sql nvarchar(4000)
|
|
SET @sql = 'SELECT @CustomerID = cc.[CustomerId], @CreatedOnUtc = cc.[CreatedOnUtc] FROM [CustomerContent] cc WHERE cc.[Id]=' + ISNULL(CAST(@ExistingPollVotingRecordID AS nvarchar(max)), '0')
|
|
EXEC sp_executesql @sql,N'@CustomerID int OUTPUT, @CreatedOnUtc datetime OUTPUT',@CustomerID OUTPUT, @CreatedOnUtc OUTPUT
|
|
|
|
UPDATE [PollVotingRecord]
|
|
SET [CustomerId] = @CustomerID,
|
|
[CreatedOnUtc] = @CreatedOnUtc
|
|
WHERE [Id]=@ExistingPollVotingRecordID
|
|
|
|
--fetch next language identifier
|
|
FETCH NEXT FROM cur_existingcomment INTO @ExistingPollVotingRecordID
|
|
END
|
|
CLOSE cur_existingcomment
|
|
DEALLOCATE cur_existingcomment
|
|
END
|
|
GO
|
|
|
|
ALTER TABLE [PollVotingRecord] ALTER COLUMN [CustomerId] int NOT NULL
|
|
GO
|
|
|
|
UPDATE [PollVotingRecord]
|
|
SET [CreatedOnUtc] = GETUTCDATE()
|
|
WHERE [CreatedOnUtc] is null
|
|
GO
|
|
|
|
ALTER TABLE [PollVotingRecord] ALTER COLUMN [CreatedOnUtc] datetime NOT NULL
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'PollVotingRecord_Customer'
|
|
AND parent_object_id = Object_id('PollVotingRecord')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE [dbo].[PollVotingRecord] WITH CHECK ADD CONSTRAINT [PollVotingRecord_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
END
|
|
GO
|
|
|
|
--remove CustomerContent table
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'BlogComment_TypeConstraint_From_CustomerContent_To_BlogComment'
|
|
AND parent_object_id = Object_id('BlogComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[BlogComment]
|
|
DROP CONSTRAINT BlogComment_TypeConstraint_From_CustomerContent_To_BlogComment
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReview_TypeConstraint_From_CustomerContent_To_ProductReview'
|
|
AND parent_object_id = Object_id('ProductReview')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReview]
|
|
DROP CONSTRAINT ProductReview_TypeConstraint_From_CustomerContent_To_ProductReview
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReviewHelpfulness_TypeConstraint_From_CustomerContent_To_ProductReviewHelpfulness'
|
|
AND parent_object_id = Object_id('ProductReviewHelpfulness')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReviewHelpfulness]
|
|
DROP CONSTRAINT ProductReviewHelpfulness_TypeConstraint_From_CustomerContent_To_ProductReviewHelpfulness
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'NewsComment_TypeConstraint_From_CustomerContent_To_NewsComment'
|
|
AND parent_object_id = Object_id('NewsComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[NewsComment]
|
|
DROP CONSTRAINT NewsComment_TypeConstraint_From_CustomerContent_To_NewsComment
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'PollVotingRecord_TypeConstraint_From_CustomerContent_To_PollVotingRecord'
|
|
AND parent_object_id = Object_id('PollVotingRecord')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[PollVotingRecord]
|
|
DROP CONSTRAINT PollVotingRecord_TypeConstraint_From_CustomerContent_To_PollVotingRecord
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'CustomerContent_Customer'
|
|
AND parent_object_id = Object_id('CustomerContent')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[CustomerContent]
|
|
DROP CONSTRAINT CustomerContent_Customer
|
|
END
|
|
GO
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[CustomerContent]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
EXEC('DROP TABLE [CustomerContent]')
|
|
END
|
|
GO
|
|
|
|
--now we should add IDENTITY to the primary keys of these tables (moved from CustomerContent)
|
|
--1. Product reviews
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReview_Customer'
|
|
AND parent_object_id = Object_id('ProductReview')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReview]
|
|
DROP CONSTRAINT ProductReview_Customer
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReview_Product1'
|
|
AND parent_object_id = Object_id('ProductReview')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReview]
|
|
DROP CONSTRAINT ProductReview_Product1
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReview_Product'
|
|
AND parent_object_id = Object_id('ProductReview')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReview]
|
|
DROP CONSTRAINT ProductReview_Product
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReviewHelpfulness_ProductReview1'
|
|
AND parent_object_id = Object_id('ProductReviewHelpfulness')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReviewHelpfulness]
|
|
DROP CONSTRAINT ProductReviewHelpfulness_ProductReview1
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReviewHelpfulness_ProductReview'
|
|
AND parent_object_id = Object_id('ProductReviewHelpfulness')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReviewHelpfulness]
|
|
DROP CONSTRAINT ProductReviewHelpfulness_ProductReview
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Tmp_ProductReview]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Tmp_ProductReview](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[CustomerId] [int] NOT NULL,
|
|
[ProductId] [int] NOT NULL,
|
|
[IsApproved] [bit] NOT NULL,
|
|
[Title] [nvarchar](max) NULL,
|
|
[ReviewText] [nvarchar](max) NULL,
|
|
[Rating] [int] NOT NULL,
|
|
[HelpfulYesTotal] [int] NOT NULL,
|
|
[HelpfulNoTotal] [int] NOT NULL,
|
|
[CreatedOnUtc] [datetime] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_ProductReview ON
|
|
GO
|
|
IF EXISTS(SELECT TOP 1 * FROM dbo.ProductReview)
|
|
EXEC('INSERT INTO dbo.Tmp_ProductReview ([Id],[ProductId],[Title],[ReviewText],[Rating],[HelpfulYesTotal],[HelpfulNoTotal],[CreatedOnUtc],[CustomerId],[IsApproved])
|
|
SELECT [Id],[ProductId],[Title],[ReviewText],[Rating],[HelpfulYesTotal],[HelpfulNoTotal],[CreatedOnUtc],[CustomerId],[IsApproved] FROM dbo.ProductReview')
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_ProductReview OFF
|
|
GO
|
|
DROP TABLE dbo.ProductReview
|
|
GO
|
|
EXECUTE sp_rename N'dbo.Tmp_ProductReview', N'ProductReview', 'OBJECT'
|
|
GO
|
|
ALTER TABLE [dbo].[ProductReview] WITH CHECK ADD CONSTRAINT [ProductReview_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
ALTER TABLE [dbo].[ProductReview] WITH CHECK ADD CONSTRAINT [ProductReview_Product] FOREIGN KEY([ProductId])
|
|
REFERENCES [dbo].[Product] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
ALTER TABLE [dbo].[ProductReviewHelpfulness] WITH CHECK ADD CONSTRAINT [ProductReviewHelpfulness_ProductReview] FOREIGN KEY([ProductReviewId])
|
|
REFERENCES [dbo].[ProductReview] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
|
|
|
|
|
|
|
|
|
|
--2. News comment
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'NewsComment_Customer'
|
|
AND parent_object_id = Object_id('NewsComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[NewsComment]
|
|
DROP CONSTRAINT NewsComment_Customer
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'NewsComment_NewsItem1'
|
|
AND parent_object_id = Object_id('NewsComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[NewsComment]
|
|
DROP CONSTRAINT NewsComment_NewsItem1
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'NewsComment_NewsItem'
|
|
AND parent_object_id = Object_id('NewsComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[NewsComment]
|
|
DROP CONSTRAINT NewsComment_NewsItem
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Tmp_NewsComment]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Tmp_NewsComment](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[CommentTitle] [nvarchar](max) NULL,
|
|
[CommentText] [nvarchar](max) NULL,
|
|
[NewsItemId] [int] NOT NULL,
|
|
[CustomerId] [int] NOT NULL,
|
|
[CreatedOnUtc] [datetime] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_NewsComment ON
|
|
GO
|
|
IF EXISTS(SELECT TOP 1 * FROM dbo.NewsComment)
|
|
EXEC('INSERT INTO dbo.Tmp_NewsComment ([Id],[CommentTitle],[CommentText],[NewsItemId],[CustomerId],[CreatedOnUtc])
|
|
SELECT [Id],[CommentTitle],[CommentText],[NewsItemId],[CustomerId],[CreatedOnUtc] FROM dbo.NewsComment')
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_NewsComment OFF
|
|
GO
|
|
DROP TABLE dbo.NewsComment
|
|
GO
|
|
EXECUTE sp_rename N'dbo.Tmp_NewsComment', N'NewsComment', 'OBJECT'
|
|
GO
|
|
ALTER TABLE [dbo].[NewsComment] WITH CHECK ADD CONSTRAINT [NewsComment_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
ALTER TABLE [dbo].[NewsComment] WITH CHECK ADD CONSTRAINT [NewsComment_NewsItem] FOREIGN KEY([NewsItemId])
|
|
REFERENCES [dbo].[News] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
|
|
|
|
--3. Blog comment
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'BlogComment_Customer'
|
|
AND parent_object_id = Object_id('BlogComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[BlogComment]
|
|
DROP CONSTRAINT BlogComment_Customer
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'BlogComment_BlogPost1'
|
|
AND parent_object_id = Object_id('BlogComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[BlogComment]
|
|
DROP CONSTRAINT BlogComment_BlogPost1
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'BlogComment_BlogPost'
|
|
AND parent_object_id = Object_id('BlogComment')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[BlogComment]
|
|
DROP CONSTRAINT BlogComment_BlogPost
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Tmp_BlogComment]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Tmp_BlogComment](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[CommentText] [nvarchar](max) NULL,
|
|
[BlogPostId] [int] NOT NULL,
|
|
[CustomerId] [int] NOT NULL,
|
|
[CreatedOnUtc] [datetime] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_BlogComment ON
|
|
GO
|
|
IF EXISTS(SELECT TOP 1 * FROM dbo.BlogComment)
|
|
EXEC('INSERT INTO dbo.Tmp_BlogComment ([Id],[CommentText],[BlogPostId],[CustomerId],[CreatedOnUtc])
|
|
SELECT [Id],[CommentText],[BlogPostId],[CustomerId],[CreatedOnUtc] FROM dbo.BlogComment')
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_BlogComment OFF
|
|
GO
|
|
DROP TABLE dbo.BlogComment
|
|
GO
|
|
EXECUTE sp_rename N'dbo.Tmp_BlogComment', N'BlogComment', 'OBJECT'
|
|
GO
|
|
ALTER TABLE [dbo].[BlogComment] WITH CHECK ADD CONSTRAINT [BlogComment_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
ALTER TABLE [dbo].[BlogComment] WITH CHECK ADD CONSTRAINT [BlogComment_BlogPost] FOREIGN KEY([BlogPostId])
|
|
REFERENCES [dbo].[BlogPost] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
|
|
|
|
|
|
--4. Product review helpfulness
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReviewHelpfulness_ProductReview'
|
|
AND parent_object_id = Object_id('ProductReviewHelpfulness')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReviewHelpfulness]
|
|
DROP CONSTRAINT ProductReviewHelpfulness_ProductReview
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'ProductReviewHelpfulness_ProductReview1'
|
|
AND parent_object_id = Object_id('ProductReviewHelpfulness')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[ProductReviewHelpfulness]
|
|
DROP CONSTRAINT ProductReviewHelpfulness_ProductReview1
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Tmp_ProductReviewHelpfulness]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Tmp_ProductReviewHelpfulness](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[ProductReviewId] [int] NOT NULL,
|
|
[WasHelpful] [bit] NOT NULL,
|
|
[CustomerId] [int] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_ProductReviewHelpfulness ON
|
|
GO
|
|
IF EXISTS(SELECT TOP 1 * FROM dbo.ProductReviewHelpfulness)
|
|
EXEC('INSERT INTO dbo.Tmp_ProductReviewHelpfulness ([Id],[ProductReviewId],[WasHelpful],[CustomerId])
|
|
SELECT [Id],[ProductReviewId],[WasHelpful],[CustomerId] FROM dbo.ProductReviewHelpfulness')
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_ProductReviewHelpfulness OFF
|
|
GO
|
|
DROP TABLE dbo.ProductReviewHelpfulness
|
|
GO
|
|
EXECUTE sp_rename N'dbo.Tmp_ProductReviewHelpfulness', N'ProductReviewHelpfulness', 'OBJECT'
|
|
GO
|
|
ALTER TABLE [dbo].[ProductReviewHelpfulness] WITH CHECK ADD CONSTRAINT [ProductReviewHelpfulness_ProductReview] FOREIGN KEY([ProductReviewId])
|
|
REFERENCES [dbo].[ProductReview] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
|
|
|
|
|
|
--5. Poll voting record
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'PollVotingRecord_Customer'
|
|
AND parent_object_id = Object_id('PollVotingRecord')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[PollVotingRecord]
|
|
DROP CONSTRAINT PollVotingRecord_Customer
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'PollVotingRecord_PollAnswer1'
|
|
AND parent_object_id = Object_id('PollVotingRecord')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[PollVotingRecord]
|
|
DROP CONSTRAINT PollVotingRecord_PollAnswer1
|
|
END
|
|
GO
|
|
IF EXISTS (SELECT 1
|
|
FROM sys.objects
|
|
WHERE name = 'PollVotingRecord_PollAnswer'
|
|
AND parent_object_id = Object_id('PollVotingRecord')
|
|
AND Objectproperty(object_id,N'IsForeignKey') = 1)
|
|
BEGIN
|
|
ALTER TABLE dbo.[PollVotingRecord]
|
|
DROP CONSTRAINT PollVotingRecord_PollAnswer
|
|
END
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Tmp_PollVotingRecord]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Tmp_PollVotingRecord](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[PollAnswerId] [int] NOT NULL,
|
|
[CustomerId] [int] NOT NULL,
|
|
[CreatedOnUtc] [datetime] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_PollVotingRecord ON
|
|
GO
|
|
IF EXISTS(SELECT TOP 1 * FROM dbo.PollVotingRecord)
|
|
EXEC('INSERT INTO dbo.Tmp_PollVotingRecord ([Id],[PollAnswerId],[CustomerId],[CreatedOnUtc])
|
|
SELECT [Id],[PollAnswerId],[CustomerId],[CreatedOnUtc] FROM dbo.PollVotingRecord')
|
|
GO
|
|
SET IDENTITY_INSERT dbo.Tmp_PollVotingRecord OFF
|
|
GO
|
|
DROP TABLE dbo.PollVotingRecord
|
|
GO
|
|
EXECUTE sp_rename N'dbo.Tmp_PollVotingRecord', N'PollVotingRecord', 'OBJECT'
|
|
GO
|
|
ALTER TABLE [dbo].[PollVotingRecord] WITH CHECK ADD CONSTRAINT [PollVotingRecord_Customer] FOREIGN KEY([CustomerId])
|
|
REFERENCES [dbo].[Customer] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
ALTER TABLE [dbo].[PollVotingRecord] WITH CHECK ADD CONSTRAINT [PollVotingRecord_PollAnswer] FOREIGN KEY([PollAnswerId])
|
|
REFERENCES [dbo].[PollAnswer] ([Id])
|
|
ON DELETE CASCADE
|
|
GO
|
|
|
|
|
|
--drop [ApprovedCommentCount] and [NotApprovedCommentCount] columns
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogPost]') and NAME='ApprovedCommentCount')
|
|
BEGIN
|
|
ALTER TABLE [BlogPost]
|
|
ADD [CommentCount] int NULL
|
|
|
|
EXEC ('UPDATE [BlogPost] SET [CommentCount] = [ApprovedCommentCount]')
|
|
|
|
ALTER TABLE [BlogPost] ALTER COLUMN [CommentCount] int NOT NULL
|
|
|
|
EXEC ('ALTER TABLE [BlogPost] DROP COLUMN [ApprovedCommentCount]')
|
|
|
|
EXEC ('ALTER TABLE [BlogPost] DROP COLUMN [NotApprovedCommentCount]')
|
|
END
|
|
GO
|
|
|
|
--drop [ApprovedCommentCount] and [NotApprovedCommentCount] columns
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[News]') and NAME='ApprovedCommentCount')
|
|
BEGIN
|
|
ALTER TABLE [News]
|
|
ADD [CommentCount] int NULL
|
|
|
|
EXEC ('UPDATE [News] SET [CommentCount] = [ApprovedCommentCount]')
|
|
|
|
ALTER TABLE [News] ALTER COLUMN [CommentCount] int NOT NULL
|
|
|
|
EXEC ('ALTER TABLE [News] DROP COLUMN [ApprovedCommentCount]')
|
|
|
|
EXEC ('ALTER TABLE [News] DROP COLUMN [NotApprovedCommentCount]')
|
|
END
|
|
GO
|
|
|
|
|
|
--SEO settings for blog
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogPost]') and NAME='MetaKeywords')
|
|
BEGIN
|
|
ALTER TABLE [BlogPost]
|
|
ADD [MetaKeywords] nvarchar(400) NULL
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogPost]') and NAME='MetaTitle')
|
|
BEGIN
|
|
ALTER TABLE [BlogPost]
|
|
ADD [MetaTitle] nvarchar(400) NULL
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogPost]') and NAME='MetaDescription')
|
|
BEGIN
|
|
ALTER TABLE [BlogPost]
|
|
ADD [MetaDescription] nvarchar(MAX) NULL
|
|
END
|
|
GO
|
|
|
|
|
|
--SEO settings for news
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[News]') and NAME='MetaKeywords')
|
|
BEGIN
|
|
ALTER TABLE [News]
|
|
ADD [MetaKeywords] nvarchar(400) NULL
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[News]') and NAME='MetaTitle')
|
|
BEGIN
|
|
ALTER TABLE [News]
|
|
ADD [MetaTitle] nvarchar(400) NULL
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[News]') and NAME='MetaDescription')
|
|
BEGIN
|
|
ALTER TABLE [News]
|
|
ADD [MetaDescription] nvarchar(MAX) NULL
|
|
END
|
|
GO
|
|
|
|
|
|
--delete abondoned records from [GenericAttribute] table
|
|
DELETE FROM [GenericAttribute]
|
|
WHERE [EntityId] NOT IN (SELECT c.[Id] FROM [Customer] c) and [KeyGroup]=N'Customer'
|
|
GO
|
|
|
|
|
|
|
|
--Store mapping for blog posts
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[BlogPost]') and NAME='LimitedToStores')
|
|
BEGIN
|
|
ALTER TABLE [BlogPost]
|
|
ADD [LimitedToStores] bit NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [BlogPost]
|
|
SET [LimitedToStores] = 0
|
|
WHERE [LimitedToStores] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [BlogPost] ALTER COLUMN [LimitedToStores] bit NOT NULL
|
|
GO
|
|
|
|
|
|
|
|
--vendor support
|
|
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[Vendor]') and OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Vendor](
|
|
[Id] [int] IDENTITY(1,1) NOT NULL,
|
|
[Name] nvarchar(400) NOT NULL,
|
|
[Email] nvarchar(400) NOT NULL,
|
|
[Description] nvarchar(MAX) NULL,
|
|
[AdminComment] nvarchar(MAX) NULL,
|
|
[Active] [bit] NOT NULL,
|
|
[Deleted] [bit] NOT NULL,
|
|
PRIMARY KEY CLUSTERED
|
|
(
|
|
[Id] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
)
|
|
END
|
|
GO
|
|
|
|
--new permission
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageVendors')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Vendors', N'ManageVendors', N'Customers')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
|
|
--Product-vendor mapping
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Product]') and NAME='VendorId')
|
|
BEGIN
|
|
ALTER TABLE [Product]
|
|
ADD [VendorId] int NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Product]
|
|
SET [VendorId] = 0
|
|
WHERE [VendorId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Product] ALTER COLUMN [VendorId] int NOT NULL
|
|
GO
|
|
|
|
IF EXISTS (
|
|
SELECT *
|
|
FROM sys.objects
|
|
WHERE object_id = OBJECT_ID(N'[ProductLoadAllPaged]') AND OBJECTPROPERTY(object_id,N'IsProcedure') = 1)
|
|
DROP PROCEDURE [ProductLoadAllPaged]
|
|
GO
|
|
CREATE PROCEDURE [dbo].[ProductLoadAllPaged]
|
|
(
|
|
@CategoryIds nvarchar(MAX) = null, --a list of category IDs (comma-separated list). e.g. 1,2,3
|
|
@ManufacturerId int = 0,
|
|
@StoreId int = 0,
|
|
@VendorId int = 0,
|
|
@ProductTagId int = 0,
|
|
@FeaturedProducts bit = null, --0 featured only , 1 not featured only, null - load all products
|
|
@PriceMin decimal(18, 4) = null,
|
|
@PriceMax decimal(18, 4) = null,
|
|
@Keywords nvarchar(4000) = null,
|
|
@SearchDescriptions bit = 0, --a value indicating whether to search by a specified "keyword" in product descriptions
|
|
@SearchProductTags bit = 0, --a value indicating whether to search by a specified "keyword" in product tags
|
|
@UseFullTextSearch bit = 0,
|
|
@FullTextMode int = 0, --0 using CONTAINS with <prefix_term>, 5 - using CONTAINS and OR with <prefix_term>, 10 - using CONTAINS and AND with <prefix_term>
|
|
@FilteredSpecs nvarchar(MAX) = null, --filter by attributes (comma-separated list). e.g. 14,15,16
|
|
@LanguageId int = 0,
|
|
@OrderBy int = 0, --0 position, 5 - Name: A to Z, 6 - Name: Z to A, 10 - Price: Low to High, 11 - Price: High to Low, 15 - creation date
|
|
@AllowedCustomerRoleIds nvarchar(MAX) = null, --a list of customer role IDs (comma-separated list) for which a product should be shown (if a subjet to ACL)
|
|
@PageIndex int = 0,
|
|
@PageSize int = 2147483644,
|
|
@ShowHidden bit = 0,
|
|
@LoadFilterableSpecificationAttributeOptionIds bit = 0, --a value indicating whether we should load the specification attribute option identifiers applied to loaded products (all pages)
|
|
@FilterableSpecificationAttributeOptionIds nvarchar(MAX) = null OUTPUT, --the specification attribute option identifiers applied to loaded products (all pages). returned as a comma separated list of identifiers
|
|
@TotalRecords int = null OUTPUT
|
|
)
|
|
AS
|
|
BEGIN
|
|
|
|
/* Products that filtered by keywords */
|
|
CREATE TABLE #KeywordProducts
|
|
(
|
|
[ProductId] int NOT NULL
|
|
)
|
|
|
|
DECLARE
|
|
@SearchKeywords bit,
|
|
@sql nvarchar(max),
|
|
@sql_orderby nvarchar(max)
|
|
|
|
SET NOCOUNT ON
|
|
|
|
--filter by keywords
|
|
SET @Keywords = isnull(@Keywords, '')
|
|
SET @Keywords = rtrim(ltrim(@Keywords))
|
|
IF ISNULL(@Keywords, '') != ''
|
|
BEGIN
|
|
SET @SearchKeywords = 1
|
|
|
|
IF @UseFullTextSearch = 1
|
|
BEGIN
|
|
--remove wrong chars (' ")
|
|
SET @Keywords = REPLACE(@Keywords, '''', '')
|
|
SET @Keywords = REPLACE(@Keywords, '"', '')
|
|
|
|
--full-text search
|
|
IF @FullTextMode = 0
|
|
BEGIN
|
|
--0 - using CONTAINS with <prefix_term>
|
|
SET @Keywords = ' "' + @Keywords + '*" '
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
--5 - using CONTAINS and OR with <prefix_term>
|
|
--10 - using CONTAINS and AND with <prefix_term>
|
|
|
|
--clean multiple spaces
|
|
WHILE CHARINDEX(' ', @Keywords) > 0
|
|
SET @Keywords = REPLACE(@Keywords, ' ', ' ')
|
|
|
|
DECLARE @concat_term nvarchar(100)
|
|
IF @FullTextMode = 5 --5 - using CONTAINS and OR with <prefix_term>
|
|
BEGIN
|
|
SET @concat_term = 'OR'
|
|
END
|
|
IF @FullTextMode = 10 --10 - using CONTAINS and AND with <prefix_term>
|
|
BEGIN
|
|
SET @concat_term = 'AND'
|
|
END
|
|
|
|
--now let's build search string
|
|
declare @fulltext_keywords nvarchar(4000)
|
|
set @fulltext_keywords = N''
|
|
declare @index int
|
|
|
|
set @index = CHARINDEX(' ', @Keywords, 0)
|
|
|
|
-- if index = 0, then only one field was passed
|
|
IF(@index = 0)
|
|
set @fulltext_keywords = ' "' + @Keywords + '*" '
|
|
ELSE
|
|
BEGIN
|
|
DECLARE @first BIT
|
|
SET @first = 1
|
|
WHILE @index > 0
|
|
BEGIN
|
|
IF (@first = 0)
|
|
SET @fulltext_keywords = @fulltext_keywords + ' ' + @concat_term + ' '
|
|
ELSE
|
|
SET @first = 0
|
|
|
|
SET @fulltext_keywords = @fulltext_keywords + '"' + SUBSTRING(@Keywords, 1, @index - 1) + '*"'
|
|
SET @Keywords = SUBSTRING(@Keywords, @index + 1, LEN(@Keywords) - @index)
|
|
SET @index = CHARINDEX(' ', @Keywords, 0)
|
|
end
|
|
|
|
-- add the last field
|
|
IF LEN(@fulltext_keywords) > 0
|
|
SET @fulltext_keywords = @fulltext_keywords + ' ' + @concat_term + ' ' + '"' + SUBSTRING(@Keywords, 1, LEN(@Keywords)) + '*"'
|
|
END
|
|
SET @Keywords = @fulltext_keywords
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
--usual search by PATINDEX
|
|
SET @Keywords = '%' + @Keywords + '%'
|
|
END
|
|
--PRINT @Keywords
|
|
|
|
--product name
|
|
SET @sql = '
|
|
INSERT INTO #KeywordProducts ([ProductId])
|
|
SELECT p.Id
|
|
FROM Product p with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(p.[Name], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, p.[Name]) > 0 '
|
|
|
|
|
|
--product variant name
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pv.ProductId
|
|
FROM ProductVariant pv with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pv.[Name], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pv.[Name]) > 0 '
|
|
|
|
|
|
--SKU
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pv.ProductId
|
|
FROM ProductVariant pv with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pv.[Sku], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pv.[Sku]) > 0 '
|
|
|
|
|
|
--localized product name
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT lp.EntityId
|
|
FROM LocalizedProperty lp with (NOLOCK)
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''Product''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''Name'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
|
|
|
|
IF @SearchDescriptions = 1
|
|
BEGIN
|
|
--product short description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT p.Id
|
|
FROM Product p with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(p.[ShortDescription], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, p.[ShortDescription]) > 0 '
|
|
|
|
|
|
--product full description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT p.Id
|
|
FROM Product p with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(p.[FullDescription], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, p.[FullDescription]) > 0 '
|
|
|
|
|
|
--product variant description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pv.ProductId
|
|
FROM ProductVariant pv with (NOLOCK)
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pv.[Description], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pv.[Description]) > 0 '
|
|
|
|
|
|
--localized product short description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT lp.EntityId
|
|
FROM LocalizedProperty lp with (NOLOCK)
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''Product''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''ShortDescription'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
|
|
|
|
--localized product full description
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT lp.EntityId
|
|
FROM LocalizedProperty lp with (NOLOCK)
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''Product''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''FullDescription'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
END
|
|
|
|
|
|
|
|
IF @SearchProductTags = 1
|
|
BEGIN
|
|
--product tag
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pptm.Product_Id
|
|
FROM Product_ProductTag_Mapping pptm with(NOLOCK) INNER JOIN ProductTag pt with(NOLOCK) ON pt.Id = pptm.ProductTag_Id
|
|
WHERE '
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + 'CONTAINS(pt.[Name], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + 'PATINDEX(@Keywords, pt.[Name]) > 0 '
|
|
|
|
--localized product tag
|
|
SET @sql = @sql + '
|
|
UNION
|
|
SELECT pptm.Product_Id
|
|
FROM LocalizedProperty lp with (NOLOCK) INNER JOIN Product_ProductTag_Mapping pptm with(NOLOCK) ON lp.EntityId = pptm.ProductTag_Id
|
|
WHERE
|
|
lp.LocaleKeyGroup = N''ProductTag''
|
|
AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
|
|
AND lp.LocaleKey = N''Name'''
|
|
IF @UseFullTextSearch = 1
|
|
SET @sql = @sql + ' AND CONTAINS(lp.[LocaleValue], @Keywords) '
|
|
ELSE
|
|
SET @sql = @sql + ' AND PATINDEX(@Keywords, lp.[LocaleValue]) > 0 '
|
|
END
|
|
|
|
--PRINT (@sql)
|
|
EXEC sp_executesql @sql, N'@Keywords nvarchar(4000)', @Keywords
|
|
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @SearchKeywords = 0
|
|
END
|
|
|
|
--filter by category IDs
|
|
SET @CategoryIds = isnull(@CategoryIds, '')
|
|
CREATE TABLE #FilteredCategoryIds
|
|
(
|
|
CategoryId int not null
|
|
)
|
|
INSERT INTO #FilteredCategoryIds (CategoryId)
|
|
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@CategoryIds, ',')
|
|
DECLARE @CategoryIdsCount int
|
|
SET @CategoryIdsCount = (SELECT COUNT(1) FROM #FilteredCategoryIds)
|
|
|
|
--filter by attributes
|
|
SET @FilteredSpecs = isnull(@FilteredSpecs, '')
|
|
CREATE TABLE #FilteredSpecs
|
|
(
|
|
SpecificationAttributeOptionId int not null
|
|
)
|
|
INSERT INTO #FilteredSpecs (SpecificationAttributeOptionId)
|
|
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@FilteredSpecs, ',')
|
|
DECLARE @SpecAttributesCount int
|
|
SET @SpecAttributesCount = (SELECT COUNT(1) FROM #FilteredSpecs)
|
|
|
|
--filter by customer role IDs (access control list)
|
|
SET @AllowedCustomerRoleIds = isnull(@AllowedCustomerRoleIds, '')
|
|
CREATE TABLE #FilteredCustomerRoleIds
|
|
(
|
|
CustomerRoleId int not null
|
|
)
|
|
INSERT INTO #FilteredCustomerRoleIds (CustomerRoleId)
|
|
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@AllowedCustomerRoleIds, ',')
|
|
|
|
--paging
|
|
DECLARE @PageLowerBound int
|
|
DECLARE @PageUpperBound int
|
|
DECLARE @RowsToReturn int
|
|
SET @RowsToReturn = @PageSize * (@PageIndex + 1)
|
|
SET @PageLowerBound = @PageSize * @PageIndex
|
|
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
|
|
|
|
CREATE TABLE #DisplayOrderTmp
|
|
(
|
|
[Id] int IDENTITY (1, 1) NOT NULL,
|
|
[ProductId] int NOT NULL
|
|
)
|
|
|
|
SET @sql = '
|
|
INSERT INTO #DisplayOrderTmp ([ProductId])
|
|
SELECT p.Id
|
|
FROM
|
|
Product p with (NOLOCK)'
|
|
|
|
IF @CategoryIdsCount > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN Product_Category_Mapping pcm with (NOLOCK)
|
|
ON p.Id = pcm.ProductId'
|
|
END
|
|
|
|
IF @ManufacturerId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN Product_Manufacturer_Mapping pmm with (NOLOCK)
|
|
ON p.Id = pmm.ProductId'
|
|
END
|
|
|
|
IF ISNULL(@ProductTagId, 0) != 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN Product_ProductTag_Mapping pptm with (NOLOCK)
|
|
ON p.Id = pptm.Product_Id'
|
|
END
|
|
|
|
IF @ShowHidden = 0
|
|
OR @PriceMin > 0
|
|
OR @PriceMax > 0
|
|
OR @OrderBy = 10 /* Price: Low to High */
|
|
OR @OrderBy = 11 /* Price: High to Low */
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
LEFT JOIN ProductVariant pv with (NOLOCK)
|
|
ON p.Id = pv.ProductId'
|
|
END
|
|
|
|
--searching by keywords
|
|
IF @SearchKeywords = 1
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
JOIN #KeywordProducts kp
|
|
ON p.Id = kp.ProductId'
|
|
END
|
|
|
|
SET @sql = @sql + '
|
|
WHERE
|
|
p.Deleted = 0'
|
|
|
|
--filter by category
|
|
IF @CategoryIdsCount > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pcm.CategoryId IN (SELECT CategoryId FROM #FilteredCategoryIds)'
|
|
|
|
IF @FeaturedProducts IS NOT NULL
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pcm.IsFeaturedProduct = ' + CAST(@FeaturedProducts AS nvarchar(max))
|
|
END
|
|
END
|
|
|
|
--filter by manufacturer
|
|
IF @ManufacturerId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pmm.ManufacturerId = ' + CAST(@ManufacturerId AS nvarchar(max))
|
|
|
|
IF @FeaturedProducts IS NOT NULL
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pmm.IsFeaturedProduct = ' + CAST(@FeaturedProducts AS nvarchar(max))
|
|
END
|
|
END
|
|
|
|
--filter by vendor
|
|
IF @VendorId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND p.VendorId = ' + CAST(@VendorId AS nvarchar(max))
|
|
END
|
|
|
|
--filter by product tag
|
|
IF ISNULL(@ProductTagId, 0) != 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND pptm.ProductTag_Id = ' + CAST(@ProductTagId AS nvarchar(max))
|
|
END
|
|
|
|
--show hidden
|
|
IF @ShowHidden = 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND p.Published = 1
|
|
AND pv.Published = 1
|
|
AND pv.Deleted = 0
|
|
AND (getutcdate() BETWEEN ISNULL(pv.AvailableStartDateTimeUtc, ''1/1/1900'') and ISNULL(pv.AvailableEndDateTimeUtc, ''1/1/2999''))'
|
|
END
|
|
|
|
--min price
|
|
IF @PriceMin > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (
|
|
(
|
|
--special price (specified price and valid date range)
|
|
(pv.SpecialPrice IS NOT NULL AND (getutcdate() BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.SpecialPrice >= ' + CAST(@PriceMin AS nvarchar(max)) + ')
|
|
)
|
|
OR
|
|
(
|
|
--regular price (price isnt specified or date range isnt valid)
|
|
(pv.SpecialPrice IS NULL OR (getutcdate() NOT BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.Price >= ' + CAST(@PriceMin AS nvarchar(max)) + ')
|
|
)
|
|
)'
|
|
END
|
|
|
|
--max price
|
|
IF @PriceMax > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (
|
|
(
|
|
--special price (specified price and valid date range)
|
|
(pv.SpecialPrice IS NOT NULL AND (getutcdate() BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.SpecialPrice <= ' + CAST(@PriceMax AS nvarchar(max)) + ')
|
|
)
|
|
OR
|
|
(
|
|
--regular price (price isnt specified or date range isnt valid)
|
|
(pv.SpecialPrice IS NULL OR (getutcdate() NOT BETWEEN isnull(pv.SpecialPriceStartDateTimeUtc, ''1/1/1900'') AND isnull(pv.SpecialPriceEndDateTimeUtc, ''1/1/2999'')))
|
|
AND
|
|
(pv.Price <= ' + CAST(@PriceMax AS nvarchar(max)) + ')
|
|
)
|
|
)'
|
|
END
|
|
|
|
--show hidden and ACL
|
|
IF @ShowHidden = 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (p.SubjectToAcl = 0 OR EXISTS (
|
|
SELECT 1 FROM #FilteredCustomerRoleIds [fcr]
|
|
WHERE
|
|
[fcr].CustomerRoleId IN (
|
|
SELECT [acl].CustomerRoleId
|
|
FROM [AclRecord] acl
|
|
WHERE [acl].EntityId = p.Id AND [acl].EntityName = ''Product''
|
|
)
|
|
))'
|
|
END
|
|
|
|
--show hidden and filter by store
|
|
IF @StoreId > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND (p.LimitedToStores = 0 OR EXISTS (
|
|
SELECT 1 FROM [StoreMapping] sm
|
|
WHERE [sm].EntityId = p.Id AND [sm].EntityName = ''Product'' and [sm].StoreId=' + CAST(@StoreId AS nvarchar(max)) + '
|
|
))'
|
|
END
|
|
|
|
--filter by specs
|
|
IF @SpecAttributesCount > 0
|
|
BEGIN
|
|
SET @sql = @sql + '
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM #FilteredSpecs [fs]
|
|
WHERE
|
|
[fs].SpecificationAttributeOptionId NOT IN (
|
|
SELECT psam.SpecificationAttributeOptionId
|
|
FROM Product_SpecificationAttribute_Mapping psam
|
|
WHERE psam.AllowFiltering = 1 AND psam.ProductId = p.Id
|
|
)
|
|
)'
|
|
END
|
|
|
|
--sorting
|
|
SET @sql_orderby = ''
|
|
IF @OrderBy = 5 /* Name: A to Z */
|
|
SET @sql_orderby = ' p.[Name] ASC'
|
|
ELSE IF @OrderBy = 6 /* Name: Z to A */
|
|
SET @sql_orderby = ' p.[Name] DESC'
|
|
ELSE IF @OrderBy = 10 /* Price: Low to High */
|
|
SET @sql_orderby = ' pv.[Price] ASC'
|
|
ELSE IF @OrderBy = 11 /* Price: High to Low */
|
|
SET @sql_orderby = ' pv.[Price] DESC'
|
|
ELSE IF @OrderBy = 15 /* creation date */
|
|
SET @sql_orderby = ' p.[CreatedOnUtc] DESC'
|
|
ELSE /* default sorting, 0 (position) */
|
|
BEGIN
|
|
--category position (display order)
|
|
IF @CategoryIdsCount > 0 SET @sql_orderby = ' pcm.DisplayOrder ASC'
|
|
|
|
--manufacturer position (display order)
|
|
IF @ManufacturerId > 0
|
|
BEGIN
|
|
IF LEN(@sql_orderby) > 0 SET @sql_orderby = @sql_orderby + ', '
|
|
SET @sql_orderby = @sql_orderby + ' pmm.DisplayOrder ASC'
|
|
END
|
|
|
|
--name
|
|
IF LEN(@sql_orderby) > 0 SET @sql_orderby = @sql_orderby + ', '
|
|
SET @sql_orderby = @sql_orderby + ' p.[Name] ASC'
|
|
END
|
|
|
|
SET @sql = @sql + '
|
|
ORDER BY' + @sql_orderby
|
|
|
|
--PRINT (@sql)
|
|
EXEC sp_executesql @sql
|
|
|
|
DROP TABLE #FilteredCategoryIds
|
|
DROP TABLE #FilteredSpecs
|
|
DROP TABLE #FilteredCustomerRoleIds
|
|
|
|
CREATE TABLE #PageIndex
|
|
(
|
|
[IndexId] int IDENTITY (1, 1) NOT NULL,
|
|
[ProductId] int NOT NULL
|
|
)
|
|
INSERT INTO #PageIndex ([ProductId])
|
|
SELECT ProductId
|
|
FROM #DisplayOrderTmp
|
|
GROUP BY ProductId
|
|
ORDER BY min([Id])
|
|
|
|
--total records
|
|
SET @TotalRecords = @@rowcount
|
|
|
|
DROP TABLE #DisplayOrderTmp
|
|
|
|
--prepare filterable specification attribute option identifier (if requested)
|
|
IF @LoadFilterableSpecificationAttributeOptionIds = 1
|
|
BEGIN
|
|
CREATE TABLE #FilterableSpecs
|
|
(
|
|
[SpecificationAttributeOptionId] int NOT NULL
|
|
)
|
|
INSERT INTO #FilterableSpecs ([SpecificationAttributeOptionId])
|
|
SELECT DISTINCT [psam].SpecificationAttributeOptionId
|
|
FROM [Product_SpecificationAttribute_Mapping] [psam]
|
|
WHERE [psam].[AllowFiltering] = 1
|
|
AND [psam].[ProductId] IN (SELECT [pi].ProductId FROM #PageIndex [pi])
|
|
|
|
--build comma separated list of filterable identifiers
|
|
SELECT @FilterableSpecificationAttributeOptionIds = COALESCE(@FilterableSpecificationAttributeOptionIds + ',' , '') + CAST(SpecificationAttributeOptionId as nvarchar(4000))
|
|
FROM #FilterableSpecs
|
|
|
|
DROP TABLE #FilterableSpecs
|
|
END
|
|
|
|
--return products
|
|
SELECT TOP (@RowsToReturn)
|
|
p.*
|
|
FROM
|
|
#PageIndex [pi]
|
|
INNER JOIN Product p on p.Id = [pi].[ProductId]
|
|
WHERE
|
|
[pi].IndexId > @PageLowerBound AND
|
|
[pi].IndexId < @PageUpperBound
|
|
ORDER BY
|
|
[pi].IndexId
|
|
|
|
DROP TABLE #PageIndex
|
|
END
|
|
GO
|
|
|
|
--Customer-vendor mapping (managers)
|
|
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Customer]') and NAME='VendorId')
|
|
BEGIN
|
|
ALTER TABLE [Customer]
|
|
ADD [VendorId] int NULL
|
|
END
|
|
GO
|
|
|
|
UPDATE [Customer]
|
|
SET [VendorId] = 0
|
|
WHERE [VendorId] IS NULL
|
|
GO
|
|
|
|
ALTER TABLE [Customer] ALTER COLUMN [VendorId] int NOT NULL
|
|
GO
|
|
|
|
--new "Vendors" customer role
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[CustomerRole]
|
|
WHERE [SystemName] = N'Vendors' and [IsSystemRole]=1)
|
|
BEGIN
|
|
INSERT [dbo].[CustomerRole] ([Name], [FreeShipping], [TaxExempt], [Active], [IsSystemRole], [SystemName])
|
|
VALUES (N'Vendors', 0, 0, 1, 1, N'Vendors')
|
|
|
|
DECLARE @VendorsCustomerRoleId INT
|
|
SET @VendorsCustomerRoleId = @@IDENTITY
|
|
|
|
DECLARE @AccessAdminPanelPermissionRecordId INT
|
|
SELECT @AccessAdminPanelPermissionRecordId = [Id] FROM [PermissionRecord]
|
|
WHERE [SystemName] = N'AccessAdminPanel'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@AccessAdminPanelPermissionRecordId, @VendorsCustomerRoleId)
|
|
|
|
|
|
DECLARE @ManageOrdersPermissionRecordId INT
|
|
SELECT @ManageOrdersPermissionRecordId = [Id] FROM [PermissionRecord]
|
|
WHERE [SystemName] = N'ManageOrders'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@ManageOrdersPermissionRecordId, @VendorsCustomerRoleId)
|
|
END
|
|
GO
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'AccessAdminPanel')
|
|
BEGIN
|
|
DECLARE @PermissionRecordId INT
|
|
SELECT @PermissionRecordId = [Id] FROM [PermissionRecord]
|
|
WHERE [SystemName] = N'AccessAdminPanel'
|
|
|
|
--add it to vendors role
|
|
DECLARE @VendorsCustomerRoleId int
|
|
SELECT @VendorsCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Vendors'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @VendorsCustomerRoleId)
|
|
END
|
|
GO
|
|
--split "Manage catalog" permission to several permissions
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageProducts')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Products', N'ManageProducts', N'Catalog')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
|
|
|
|
--add it to vendors role by default
|
|
DECLARE @VendorsCustomerRoleId int
|
|
SELECT @VendorsCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Vendors'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @VendorsCustomerRoleId)
|
|
END
|
|
GO
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageCategories')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Categories', N'ManageCategories', N'Catalog')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageManufacturers')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Manufacturers', N'ManageManufacturers', N'Catalog')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageProductReviews')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Product Reviews', N'ManageProductReviews', N'Catalog')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageProductTags')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Product Tags', N'ManageProductTags', N'Catalog')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageAttributes')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Attributes', N'ManageAttributes', N'Catalog')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
--delete obsolete permission
|
|
DELETE FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageCatalog'
|
|
GO
|
|
--enable "Hide admin menu items based on permissions" setting
|
|
UPDATE [Setting]
|
|
SET [Value] = N'true'
|
|
WHERE [name] = N'securitysettings.hideadminmenuitemsbasedonpermissions'
|
|
--delete obsolete permission
|
|
DELETE FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'UploadPictures'
|
|
GO
|
|
|
|
--new permission
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageCurrentCarts')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Current Carts', N'ManageCurrentCarts', N'Orders')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
|
|
--new permission
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[PermissionRecord]
|
|
WHERE [SystemName] = N'ManageRecurringPayments')
|
|
BEGIN
|
|
INSERT [dbo].[PermissionRecord] ([Name], [SystemName], [Category])
|
|
VALUES (N'Admin area. Manage Recurring Payments', N'ManageRecurringPayments', N'Orders')
|
|
|
|
DECLARE @PermissionRecordId INT
|
|
SET @PermissionRecordId = @@IDENTITY
|
|
|
|
|
|
--add it to admin role by default
|
|
DECLARE @AdminCustomerRoleId int
|
|
SELECT @AdminCustomerRoleId = Id
|
|
FROM [CustomerRole]
|
|
WHERE IsSystemRole=1 and [SystemName] = N'Administrators'
|
|
|
|
INSERT [dbo].[PermissionRecord_Role_Mapping] ([PermissionRecord_Id], [CustomerRole_Id])
|
|
VALUES (@PermissionRecordId, @AdminCustomerRoleId)
|
|
END
|
|
GO
|
|
|
|
|
|
--'Order placed for vendor' message template
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM [MessageTemplate]
|
|
WHERE [Name] = N'OrderPlaced.VendorNotification')
|
|
BEGIN
|
|
INSERT [MessageTemplate] ([Name], [BccEmailAddresses], [Subject], [Body], [IsActive], [EmailAccountId], [LimitedToStores])
|
|
VALUES (N'OrderPlaced.VendorNotification', null, N'%Store.Name%. Order placed', N'<p><a href="%Store.URL%">%Store.Name%</a> <br /><br />%Customer.FullName% (%Customer.Email%) has just placed on order. <br /><br />Order Number: %Order.OrderNumber%<br />Date Ordered: %Order.CreatedOn%</p>', 0, 0, 0)
|
|
END
|
|
GO
|
|
|
|
DELETE FROM [Setting]
|
|
WHERE [name] = N'GoogleAnalyticsSettings.WidgetZone'
|
|
GO
|
|
|
|
--new setting
|
|
IF NOT EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'commonsettings.breadcrumbdelimiter')
|
|
BEGIN
|
|
INSERT [Setting] ([Name], [Value], [StoreId])
|
|
VALUES (N'commonsettings.breadcrumbdelimiter', N'/', 0)
|
|
END
|
|
GO
|
|
|
|
--new setting
|
|
IF NOT EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'catalogsettings.compareproductsnumber')
|
|
BEGIN
|
|
INSERT [Setting] ([Name], [Value], [StoreId])
|
|
VALUES (N'catalogsettings.compareproductsnumber', N'4', 0)
|
|
END
|
|
GO
|
|
|
|
--do not store product tag count
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[ProductTag]') and NAME='ProductCount')
|
|
BEGIN
|
|
ALTER TABLE [ProductTag]
|
|
DROP COLUMN [ProductCount]
|
|
END
|
|
GO
|
|
|
|
|
|
|
|
--stored procedure to load product tags
|
|
IF EXISTS (
|
|
SELECT *
|
|
FROM sys.objects
|
|
WHERE OBJECT_ID = OBJECT_ID(N'[ProductTagCountLoadAll]') AND OBJECTPROPERTY(OBJECT_ID,N'IsProcedure') = 1)
|
|
DROP PROCEDURE [ProductTagCountLoadAll]
|
|
GO
|
|
CREATE PROCEDURE [dbo].[ProductTagCountLoadAll]
|
|
(
|
|
@StoreId int
|
|
)
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
|
|
SELECT pt.Id as [ProductTagId], COUNT(p.Id) as [ProductCount]
|
|
FROM ProductTag pt with (NOLOCK)
|
|
LEFT JOIN Product_ProductTag_Mapping pptm with (NOLOCK) ON pt.[Id] = pptm.[ProductTag_Id]
|
|
LEFT JOIN Product p with (NOLOCK) ON pptm.[Product_Id] = p.[Id]
|
|
WHERE
|
|
p.[Deleted] = 0
|
|
AND p.Published = 1
|
|
AND (@StoreId = 0 or (p.LimitedToStores = 0 OR EXISTS (
|
|
SELECT 1 FROM [StoreMapping] sm
|
|
WHERE [sm].EntityId = p.Id AND [sm].EntityName = 'Product' and [sm].StoreId=@StoreId
|
|
)))
|
|
GROUP BY pt.Id
|
|
ORDER BY pt.Id
|
|
END
|
|
GO
|
|
|
|
--forum group do not need description
|
|
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id=object_id('[Forums_Group]') and NAME='Description')
|
|
BEGIN
|
|
ALTER TABLE [Forums_Group]
|
|
DROP COLUMN [Description]
|
|
END
|
|
GO
|