<% Dim englishHeader, englishFooter, francaisHeader, francaisFooter, language, currentPage, tableName Dim searchKey, booleanFilter, resultsPerPage, numMatches Dim keys, fileName(), fileNameTruncated(), descriptionFull() language = "english" currentPage = 0 tableName = "searchable_web_files" searchKey = "" languageFilter = "english" booleanFilter = "AND" resultsPerPage = 20 numMatches = 0 ParseForm() If searchKey <> "" Then Search() End If If language = "francais" Then Response.Write "recherche" %> <% Else Response.Write "Search" %> <% End If If numMatches > 0 Then Output() End If If searchKey <> "" AND numMatches <= 0 Then TryAgain() End If If searchKey = "" Then DisplaySearchPage() End If If language = "francais" Then %> <% Else %> <% End If %> <% Function ParseForm() If Request.QueryString("searchKey") <> "" Then searchKey = Request.QueryString("searchKey") keys = Split(searchKey) End If If Request.QueryString("language") <> "" Then language = Request.QueryString("language") End If If Request.QueryString("currentPage") <> "" Then currentPage = Request.QueryString("currentPage") End If If Request.QueryString("booleanFilter") <> "" Then booleanFilter = Request.QueryString("booleanFilter") End If If Request.QueryString("resultsPerPage") <> "" Then resultsPerPage = Request.QueryString("resultsPerPage") End If End Function %> <% 'Search the database Function Search() Dim query 'Open the ODBC connection Set SearchConn = Server.CreateObject("ADODB.Connection") SearchConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/naturewatch_website_search.mdb") 'Read matches from database query = "SELECT file_id, file_name, language, description FROM " & tableName & " WHERE" query = query & " language = '" & language & "' AND" query = query & " (description like '%" & keys(0) & "%'" For i = 1 To UBound(keys) query = query & " " & booleanFilter & " description like '%" & keys(i) & "%'" Next query = query & ")" Set RSSearch = CreateObject("ADODB.Recordset") RSSearch.Open query, SearchConn, 1 numMatches = RSSearch.RecordCount ReDim fileName(numMatches) ReDim fileNameTruncated(numMatches) ReDim descriptionFull(numMatches) For j = 0 To (numMatches - 1) fileName(j) = RSSearch("file_name") fileName(j) = Replace(fileName(j), "C:/inetpub/wwwroot/", "http://www.naturewatch.ca/") fileNameTruncated(j) = fileName(j) If Len(fileNameTruncated(j)) > 80 Then fileNameTruncated(j) = Left(fileNameTruncated(j), 77) fileNameTruncated(j) = fileNameTruncated(j) & "..." End If descriptionFull(j) = RSSearch("description") descriptionFull(j) = Left(descriptionFull(j), 300) RSSearch.Movenext Next RSSearch.Close Set RSSearch = Nothing 'Close the database connection SearchConn.Close End Function %> <% Function Output() Dim maxPage, previousPage, nextPage, rangeStart, displayRangeStart, rangeEnd, i, x If language = "francais" Then Response.Write "

Résultats de votre recherche" Else Response.Write "

Search results" End If maxPage = Int(numMatches) / Int(resultsPerPage) maxPage = maxPage + 0.5 maxPage = Int(maxPage) previousPage = Int(currentPage) - 1 nextPage = Int(currentPage) + 1 rangeStart = Int(resultsPerPage) * (Int(currentPage) - 1) If Int(rangeStart) < 0 Then rangeStart = 0 End If displayRangeStart = Int(rangeStart) + 1 rangeEnd = Int(rangeStart) + Int(resultsPerPage) If Int(numMatches) < Int(resultsPerPage) Then rangeEnd = Int(numMatches) End If If Int(currentPage) >= Int(maxPage) Then rangeEnd = Int(numMatches) End If If language = "francais" Then Response.Write "

Résumé des résultats de la recherche; " & numMatches & " items trouvés.
Affichage de documents; pages " & displayRangeStart & " - " & rangeEnd & ".

" Else Response.Write "

Found " & numMatches & " documents matching your query.
Displaying documents " & displayRangeStart & " - " & rangeEnd & ".

" End If For i = displayRangeStart To rangeEnd Response.Write "" Response.Write "" Response.Write "
" Response.Write "" & fileNameTruncated(i) & "
" Response.Write descriptionFull(i) Response.Write "

" Next If Int(numMatches) > Int(resultsPerPage) Then Response.Write "
" If Int(currentPage) > 1 Then Response.Write "<< Previous | " End If For x = 1 To Int(maxPage) If x <> currentPage Then Response.Write "" & x & " | " Else Response.Write x & " | " End If Next If Int(currentPage) < Int(maxPage) Then Response.Write "Next >> " End If Response.Write "
" End If End Function %> <% Function TryAgain() Response.Write "" Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write "
" If language = "francais" Then Response.Write "

Aucun équivalent n'a été trouvé

" Else Response.Write "

Sorry, no matches were found

" End If Response.Write "
" If language = "francais" Then Response.Write " S.V.P. modifiez votre recherche et recommencez." Else Response.Write " Please modify your search and try again." End If Response.Write "
" Response.Write "
" Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write "
" Response.Write " " If language = "francais" Then Response.Write " " Else Response.Write " " End If Response.Write "
" Response.Write " Les documents doivent satisfaire à tous les critères choisis." Else Response.Write "> Items must match all of the selected criteria." End If Response.Write " " Response.Write "  " Response.Write "
" Response.Write " Les documents doivent satisfaire à au moins un des critères choisis." Else Response.Write "> Items must match at least one of the selected criteria." End If Response.Write " " Response.Write "  " Response.Write "
" Response.Write " " If language = "francais" Then Response.Write " Nombre maximal de résultats par page." Else Response.Write " Maximum number of results per page." End If Response.Write "
" Response.Write "
" Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write "
" If language = "francais" Then Response.Write " Vous ne trouvez pas ce que vous cherchez? Contactez-nous." Else Response.Write " Can't find what you're looking for? Contact us." End If Response.Write "
" End Function %> <% Function DisplaySearchPage() Response.Write "" Response.Write " " Response.Write " " Response.Write " " Response.Write "
" If language = "francais" Then Response.Write "

Recherche

" Else Response.Write "

Search

" End If Response.Write "
" Response.Write "
" Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write " " Response.Write "
" Response.Write " " If language = "francais" Then Response.Write " " Else Response.Write " " End If Response.Write "
" Response.Write " Les documents doivent satisfaire à tous les critères choisis." Else Response.Write "> Items must match all of the selected criteria." End If Response.Write " " Response.Write "  " Response.Write "
" Response.Write " Les documents doivent satisfaire à au moins un des critères choisis." Else Response.Write "> Items must match at least one of the selected criteria." End If Response.Write " " Response.Write "  " Response.Write "
" Response.Write " " If language = "francais" Then Response.Write " Nombre maximal de résultats par page." Else Response.Write " Maximum number of results per page." End If Response.Write "
" Response.Write "
" End Function %>