File: D:/web/groundscrewcentre/create-image-cache.asp
<%Option Explicit%>
<!--#include file="dbfunctions.asp"-->
<!--#include file="apputils.asp"-->
<html>
<head><%HTMLHeadStart%>
<title>Create Image Cache</title>
</head>
<body>
<div>
<%
CreateImageCache
%>
</body>
</html>
<%Finalise%>
<%
' *** need to set the date & time of the file using last updated from the table
' *** check if file already exists with same date/time, and don't save if it does
' *** ? add a password or security code to run this
' (SS,23/08/18) Modified Sub SaveBinaryData to only save when file doesn't already exist with same name, date/time.
' (SS,5/4/19) modified to add category, subcategory, other and option images
' (SS,8/4/19) new improved version which calls GetImageName to create the image (if necessary)
Sub CreateImageCache
' go through each active picture in database
' save to file as main, small and large thumbnails, perhaps add others
ClearCreateImageCacheLog
' to do, img src set
Dim LSQL, LType, LCode, LCode2, LImageName, LPictureCount, LImagesCreatedCount, LImagesExistCount, LImagesDeletedCount
'LProductCode = "CDC-460"
Dim LPictureID
' (SS,8/4/19)
Dim LImageFileNameList, LImageCount
ReDim LImageFileNameList(-1)
LImageCount = 0
' (SS,23/8/18)
LPictureCount = 0
LImagesCreatedCount = 0
LImagesExistCount = 0
LImagesDeletedCount = 0
' (SS,5/4/19) removed products.ProductCode, products.ProductName, moved ORDER BY to later
LSQL = "SELECT pictures.PictureID, pictures.Type, pictures.Code, pictures.Code2, pictures.SortOrder" &_
" FROM pictures" &_
" INNER JOIN products ON products.ProductCode = pictures.Code" &_
" WHERE pictures.Type = 'P' AND pictures.Enabled AND NOT products.ProductDisabled"
' (SS,5/4/19) added union all to include category, subcategory, other and option value pictures
LSQL = LSQL & " UNION ALL "
' (SS,5/4/19) include category, subcategory, other and option value pictures
LSQL = LSQL &_
"SELECT PictureID, Type, Code, Code2, SortOrder FROM pictures" &_
" WHERE Type <> 'P' AND pictures.Enabled"
' " ORDER BY products.ProductCode, pictures.SortOrder, pictures.Code2, pictures.PictureID"
' (SS,5/4/19) replaced above with following for all records in union query
LSQL = LSQL & " ORDER BY IF(Type = 'P', ' ', Type), Code, SortOrder, Code2, PictureID"
OpenQuery(LSQL)
'Response.Write "### " & LSQL & " ###<br>"
Do While Not EndOfQuery
LPictureCount = LPictureCount + 1
LType = GetQueryValue("Type") ' (SS,5/4/19)
LCode = GetQueryValue("Code")
LCode2 = GetQueryValue("Code2")
LPictureID = GetQueryValue("PictureID")
' create the original full size image, then large thumbnail and then small thumbnail
CreateImageInCache LType, LCode, LCode2, LPictureID, "o", LImagesCreatedCount, LImagesExistCount, LImageCount, LImageFileNameList
CreateImageInCache LType, LCode, LCode2, LPictureID, "l", LImagesCreatedCount, LImagesExistCount, LImageCount, LImageFileNameList
CreateImageInCache LType, LCode, LCode2, LPictureID, "s", LImagesCreatedCount, LImagesExistCount, LImageCount, LImageFileNameList
NextQueryRecord
Loop
' (SS,9/4/19) delete images files that are no longer required
Dim LImageCacheFolder, objFSO, LFolder, LSubFolder, LSubFolders
LImageCacheFolder = GetImageCacheFolder
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set LFolder = objFSO.GetFolder(Server.MapPath(LImageCacheFolder))
For Each LSubFolder in LFolder.SubFolders
' AddToCreateImageCacheLog "Sub Folder: " & LImageCacheFolder + "/" + LSubFolder.Name & BR & NL
PurgeImageCacheFolder LImageCacheFolder + "/" + LSubFolder.Name, LImagesDeletedCount, LImageFileNameList
Next
Set LFolder = Nothing
Set objFSO = Nothing
AddToCreateImageCacheLog "<br>" & NL
AddToCreateImageCacheLog "Pictures checked: " & LPictureCount & "<br>" & NL
AddToCreateImageCacheLog "New images created in cache: " & LImagesCreatedCount & "<br>" & NL
AddToCreateImageCacheLog "Images already in cache: " & LImagesExistCount & "<br>" & NL
AddToCreateImageCacheLog "Images deleted from cache: " & LImagesDeletedCount & "<br>" & NL
' show list of all images
'Dim i
'For i = 0 To UBound(LImageFileNameList)
' AddToCreateImageCacheLog LImageFileNameList(i) & BR & NL
'Next
' show time taken
AddToCreateImageCacheLog "<br>" & NL
AddToCreateImageCacheLog "Time taken: " & GetTimer & BR & NL
CloseQuery
' (SS,24/8/18) send log as email
SendEmail "contactforms@itpartnership.com", "", "", FEmailOrderConfirmationFrom, "Create Image Cache Results for " & GetStoreName, GetCreateImageCacheLog, True
End Sub
' (SS,9/4/19) purge image cache, i.e. delete unwanted images in given folder
Sub PurgeImageCacheFolder(AFolderPath, AImagesDeletedCount, AImageFileNameList)
Dim objFSO, LFolder, LFile, LFileName, LFound, i
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set LFolder = objFSO.GetFolder(Server.MapPath(AFolderPath))
For Each LFile in LFolder.Files
LFileName = AFolderPath + "/" + LFile.Name
' look for image in list, delete file if not found in list
LFound = False
For i = 0 To UBound(AImageFileNameList)
If AImageFileNameList(i) = LFileName Then
LFound = True
End If
Next
If Not LFound Then
objFSO.DeleteFile(Server.MapPath(LFileName))
AddToCreateImageCacheLog "Deleted " & LFileName & BR & NL
AImagesDeletedCount = AImagesDeletedCount + 1
End If
Next
Set LFolder = Nothing
Set objFSO = Nothing
End Sub
' (SS,8/4/19)
Sub CreateImageInCache(AType, ACode, ACode2, APictureID, ASize, ByRef AImagesCreatedCount, ByRef AImagesExistCount, ByRef AImageCount, ByRef AImageFileNameList)
Dim LImageName
LImageName = GetImageName(AType, ACode, ACode2, APictureID, ASize)
' added full image file name to list
ReDim Preserve AImageFileNameList(UBound(AImageFileNameList) + 1)
AImageFileNameList(AImageCount) = LImageName
AImageCount = AImageCount + 1
If GetImageCreatedInCache Then
AddToCreateImageCacheLog "Created " & LImageName & "<br>" & NL
AImagesCreatedCount = AImagesCreatedCount + 1
Else
AImagesExistCount = AImagesExistCount + 1
End If
End Sub
Sub ClearCreateImageCacheLog
Session("CreateImageCacheLog") = ""
End Sub
' (SS,24/8/18)
Sub AddToCreateImageCacheLog(AMessage)
Session("CreateImageCacheLog") = Session("CreateImageCacheLog") & AMessage
Response.Write AMessage
End Sub
Function GetCreateImageCacheLog
GetCreateImageCacheLog = Session("CreateImageCacheLog")
End Function
%>