init
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
Steps:
|
||||
1. Backup your existing database
|
||||
2. Execute upgrade.sql script over your database
|
||||
3. Remove all files from the previous version except App_Data\Settings.txt and App_Data\InstalledPlugins.txt
|
||||
4. Upload new site files
|
||||
5. Copy back App_Data\Settings.txt and App_Data\InstalledPlugins.txt files
|
||||
6. Ensure that everything is OK
|
||||
|
||||
Notes:
|
||||
1. If you stored your pictures on the file system, then also backup them (\Content\Images\) and copy back after upgrade
|
||||
@@ -0,0 +1,804 @@
|
||||
--upgrade scripts from nopCommerce 2.60 to nopCommerce 2.65
|
||||
|
||||
--new locale resources
|
||||
declare @resources xml
|
||||
--a resource will be delete if its value is empty
|
||||
set @resources='
|
||||
<Language>
|
||||
<LocaleResource Name="ShoppingCart.QuantityShouldPositive">
|
||||
<Value>Quantity should be positive</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Checkout.Button">
|
||||
<Value>Checkout</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="ContactUs.FullName.Hint">
|
||||
<Value>Enter your name</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="ContactUs.Email.Hint">
|
||||
<Value>Enter your email address</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="ContactUs.Enquiry.Hint">
|
||||
<Value>Enter your enquiry</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.EmailAFriend.FriendEmail.Hint">
|
||||
<Value>Enter friend''s email</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.EmailAFriend.YourEmailAddress.Hint">
|
||||
<Value>Enter your email address</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.EmailAFriend.PersonalMessage.Hint">
|
||||
<Value>Enter personal message (optional)</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Wishlist.EmailAFriend.FriendEmail.Hint">
|
||||
<Value>Enter friend''s email</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Wishlist.EmailAFriend.YourEmailAddress.Hint">
|
||||
<Value>Enter your email address</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Wishlist.EmailAFriend.PersonalMessage.Hint">
|
||||
<Value>Enter personal message (optional)</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.ProductHasBeenAddedToTheCart">
|
||||
<Value>The product has been added to your shopping cart</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.ProductHasBeenAddedToTheCart.Link">
|
||||
<Value><![CDATA[The product has been added to your <a href="{0}">shopping cart</a>]]></Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.ProductHasBeenAddedToTheWishlist">
|
||||
<Value>The product has been added to your wishlist</Value>
|
||||
</LocaleResource>
|
||||
<LocaleResource Name="Products.ProductHasBeenAddedToTheWishlist.Link">
|
||||
<Value><![CDATA[The product has been added to your <a href="{0}">wishlist</a>]]></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
|
||||
|
||||
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'securitysettings.forcesslforallpages')
|
||||
BEGIN
|
||||
INSERT [Setting] ([Name], [Value])
|
||||
VALUES (N'securitysettings.forcesslforallpages', N'false')
|
||||
END
|
||||
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 [ProductLoadAllPaged]
|
||||
(
|
||||
@CategoryIds nvarchar(MAX) = null, --a list of category IDs (comma-separated list). e.g. 1,2,3
|
||||
@ManufacturerId 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
|
||||
@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
|
||||
--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>
|
||||
|
||||
--remove wrong chars (' ")
|
||||
SET @Keywords = REPLACE(@Keywords, '''', '')
|
||||
SET @Keywords = REPLACE(@Keywords, '"', '')
|
||||
--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)
|
||||
|
||||
--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
|
||||
|
||||
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
|
||||
|
||||
--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
|
||||
|
||||
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(1000))
|
||||
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
|
||||
|
||||
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM sys.objects
|
||||
WHERE object_id = OBJECT_ID(N'[FullText_Disable]') AND OBJECTPROPERTY(object_id,N'IsProcedure') = 1)
|
||||
DROP PROCEDURE [FullText_Disable]
|
||||
GO
|
||||
CREATE PROCEDURE [FullText_Disable]
|
||||
AS
|
||||
BEGIN
|
||||
EXEC('
|
||||
--drop indexes
|
||||
IF EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[Product]''))
|
||||
DROP FULLTEXT INDEX ON [Product]
|
||||
')
|
||||
|
||||
EXEC('
|
||||
IF EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[ProductVariant]''))
|
||||
DROP FULLTEXT INDEX ON [ProductVariant]
|
||||
')
|
||||
|
||||
EXEC('
|
||||
IF EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[LocalizedProperty]''))
|
||||
DROP FULLTEXT INDEX ON [LocalizedProperty]
|
||||
')
|
||||
|
||||
EXEC('
|
||||
IF EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[ProductTag]''))
|
||||
DROP FULLTEXT INDEX ON [ProductTag]
|
||||
')
|
||||
|
||||
--drop catalog
|
||||
EXEC('
|
||||
IF EXISTS (SELECT 1 FROM sys.fulltext_catalogs WHERE [name] = ''nopCommerceFullTextCatalog'')
|
||||
DROP FULLTEXT CATALOG [nopCommerceFullTextCatalog]
|
||||
')
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM sys.objects
|
||||
WHERE object_id = OBJECT_ID(N'[FullText_Enable]') AND OBJECTPROPERTY(object_id,N'IsProcedure') = 1)
|
||||
DROP PROCEDURE [FullText_Enable]
|
||||
GO
|
||||
CREATE PROCEDURE [FullText_Enable]
|
||||
AS
|
||||
BEGIN
|
||||
--create catalog
|
||||
EXEC('
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_catalogs WHERE [name] = ''nopCommerceFullTextCatalog'')
|
||||
CREATE FULLTEXT CATALOG [nopCommerceFullTextCatalog] AS DEFAULT')
|
||||
|
||||
--create indexes
|
||||
DECLARE @create_index_text nvarchar(4000)
|
||||
SET @create_index_text = '
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[Product]''))
|
||||
CREATE FULLTEXT INDEX ON [Product]([Name], [ShortDescription], [FullDescription])
|
||||
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('Product') + '] ON [nopCommerceFullTextCatalog] WITH CHANGE_TRACKING AUTO'
|
||||
EXEC(@create_index_text)
|
||||
|
||||
SET @create_index_text = '
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[ProductVariant]''))
|
||||
CREATE FULLTEXT INDEX ON [ProductVariant]([Name], [Description], [SKU])
|
||||
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('ProductVariant') + '] ON [nopCommerceFullTextCatalog] WITH CHANGE_TRACKING AUTO'
|
||||
EXEC(@create_index_text)
|
||||
|
||||
SET @create_index_text = '
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[LocalizedProperty]''))
|
||||
CREATE FULLTEXT INDEX ON [LocalizedProperty]([LocaleValue])
|
||||
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('LocalizedProperty') + '] ON [nopCommerceFullTextCatalog] WITH CHANGE_TRACKING AUTO'
|
||||
EXEC(@create_index_text)
|
||||
|
||||
SET @create_index_text = '
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[ProductTag]''))
|
||||
CREATE FULLTEXT INDEX ON [ProductTag]([Name])
|
||||
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('ProductTag') + '] ON [nopCommerceFullTextCatalog] WITH CHANGE_TRACKING AUTO'
|
||||
EXEC(@create_index_text)
|
||||
END
|
||||
GO
|
||||
|
||||
--Full-text support
|
||||
IF EXISTS (SELECT 1 FROM [Setting] WHERE [name] = N'commonsettings.usefulltextsearch' AND [value]=N'true')
|
||||
BEGIN
|
||||
DECLARE @FullTextIsSupported int
|
||||
SET @FullTextIsSupported = CASE SERVERPROPERTY('IsFullTextInstalled')
|
||||
WHEN 1 THEN
|
||||
CASE DatabaseProperty (DB_NAME(DB_ID()), 'IsFulltextEnabled')
|
||||
WHEN 1 THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
ELSE 0
|
||||
END
|
||||
IF (@FullTextIsSupported = 1)
|
||||
BEGIN
|
||||
--create full-text indexes for product tags
|
||||
DECLARE @create_index_text nvarchar(4000)
|
||||
SET @create_index_text = '
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[ProductTag]''))
|
||||
CREATE FULLTEXT INDEX ON [ProductTag]([Name])
|
||||
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('ProductTag') + '] ON [nopCommerceFullTextCatalog] WITH CHANGE_TRACKING AUTO'
|
||||
EXEC(@create_index_text)
|
||||
END
|
||||
END
|
||||
GO
|
||||
|
||||
--indexes
|
||||
IF NOT EXISTS (SELECT 1 from sys.indexes WHERE [NAME]=N'IX_ProductTag_Name' and object_id=object_id(N'[ProductTag]'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX [IX_ProductTag_Name] ON [ProductTag] ([Name] ASC)
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user