# Copyright for the Uniform Repository Service (c) 1995 - 2023, # by Gerald Banon. All rights reserved. # Version 2.1 # mirrorsearch.tcl # example: # http://banon-pc2/col/dpi.inpe.br/banon/1999/06.19.17.00/doc/mirrorsearch.cgi?languagebutton=pt-BR&returnbutton=yes&query=ti+clipping*&choice=briefTitleAuthor&linktype=2&cssfileurl=http://banon-pc2/col/dpi.inpe.br/banon/1999/06.19.22.43/doc/mirrorStandard.css # ---------------------------------------------------------------------- # MirrorSearch proc MirrorSearch {} { if [catch { if 0 { # testing progressive loading puts {Content-Type: text/html} puts {} puts 1 puts "" ;# to have the previous puts displayed set x 0; after 1000 {set x 1}; vwait x puts 2 return } global currentProcedureName ;# used in LoopOverEntries # global currentFileName ;# used in CreateOutput and LoopOverEntries global currentProcedureFileName ;# used in CreateOutput and LoopOverEntries global env global cgi global currentRep global language # global administratorUserName ;# used in CreateReturnButton global homePath ;# used in CreateOutput and FindLanguage global URLibServiceRepository ;# used in MultipleSubmit (called in MultipleExecute2 called in CreateOutput) global queueLengthFlag ;# used in MultipleSubmit (called in MultipleExecute2 called in CreateOutput) global serverAddressWithIP ;# used in SynchronizeRepository called in sourceDisplayControl global mirrorHomePageRepository ;# used in LoopOverEntries to access submission.js # array set environment [array get env] ;# used in MultipleSubmit set col ../../../../.. set URLibServiceRepository dpi.inpe.br/banon/1998/08.02.08.56 source ../$col/$URLibServiceRepository/doc/utilities1.tcl source ../$col/$URLibServiceRepository/doc/cgi/mirrorfind-.tcl source ../$col/$URLibServiceRepository/doc/utilitiesMirror.tcl ;# FindIdentifierNameFromIBI # set queueLengthFlag 1 ;# could be anything - added by GJFB in 2013-04-17 in order to detect not writable site (site that doesn't reply) if 0 { puts {Content-Type: text/html} puts {} puts ok4 puts "" ;# to have the previous puts displayed # return } # homePath (used in CreateReturnButton and FindLanguage) set homePath $env(DOCUMENT_ROOT) # pathInfo if [info exists env(PATH_INFO)] { set pathInfo [file split $env(PATH_INFO)] } else { set pathInfo [file split /$env(LOBIMIREP)] } # currentRep regsub -all { } [lrange $pathInfo 1 4] {/} currentRep # mirrorIdentifier (childIdentifier) set mirrorIdentifier [FindIdentifierNameFromIBI $currentRep] ;# added by GJFB in 2022-06-13 set display [GetFrameName] ;# added by GJFB in 2020-06-19 - used when setting window.name javascript property in cgi/submit mirror/xxSubmit.tcl and xxUpdateSubmission.html set currentProcedureName MirrorSearch # set currentFileName $homePath/col/$URLibServiceRepository/doc/cgi/mirrorsearch.tcl set currentProcedureFileName $homePath/col/$URLibServiceRepository/doc/cgi/mirrorsearch.tcl # set serverAddress [list $env(SERVER_NAME) $env(URLIB_PORT)] # serverAddressWithIP set serverAddressWithIP [list $env(IP_ADDR) $env(URLIB_PORT)] # administratorUserName ## regsub {@.*$} $env(SERVER_ADMIN) {} administratorUserName # set administratorUserName administrator # Find the language and the language repository foreach {language languageRep1 languageRep2 firstLanguageRep \ submissionFormRep submissionFormLanguage submissionFormLanguageRep} \ [FindLanguage $currentRep] {break} # Find the language and the language repository - end # used with GET # doesn't hidden password1 and codedpassword1 if [info exists env(QUERY_STRING)] { if [regexp {^(.*)&(returnaddress)=(.+)$} $env(QUERY_STRING) m queryString name value] { set cgi($name) $value } else { set queryString $env(QUERY_STRING) } foreach {name value} [split $queryString &=] { set cgi([DecodeURL $name]) [DecodeURL $value] } } if 0 { puts {Content-Type: text/html} puts {} puts $env(QUERY_STRING) puts
puts
puts [array get cgi] } # mirrorHomePageRepository # used in sourceDisplayControl and topForContinue set mirrorHomePageRepository dpi.inpe.br/banon/2000/01.23.20.24 ;# added by GJFB in 2018-05-28 - required in sourceDisplayControl if {[info exists cgi(choice)] && [info exists cgi(outputformat)]} { ;# added by GJFB in 2021-04-25 to speed up search result display set choice $cgi(choice) set outputFormat $cgi(outputformat) } else { # Source displayControl.tcl - added by GJFB in 2018-05-28 set enableOutput 0 eval $sourceDisplayControl ;# required for setting choice and outputFormat only # Source displayControl.tc - end } CreateCGIArray ;# used with POST if 0 { puts {Content-Type: text/html} puts {} puts [array get cgi] puts --$outputFormat-- } if ![info exists cgi(query)] {set cgi(query) {}} set searchInputValue $cgi(query) ;# added by GJFB in 2022-06-13 # path of searchInputValue from MirrorSearch to mirrorHomePage.html: # URL with the field query # MirrorSearch (query -> searchInputValue) # CreateOutput # LoopOverEntries # ServeLocalCollection # GetEntry # CreateBriefEntry # Get # mirror/xxCover.tcl (click '<') # CreateMirror # mirrorHomePage.html (uses forceRecentFlag) if ![info exists cgi(alternatequery)] {set cgi(alternatequery) {}} if ![info exists cgi(queryfieldtype)] {set cgi(queryfieldtype) {first}} if ![info exists cgi(targetvalue)] {set cgi(targetvalue) {_blank}} ;# added by GJFB in 2022-02-13 if ![info exists cgi(accent)] {set cgi(accent) no} ;# values are: yes no array set accentArray {true yes false no yes yes no no {} no} set cgi(accent) $accentArray($cgi(accent)) # if [info exists cgi(case2)] {set cgi(case) $cgi(case2)} array set caseArray {true yes false no yes yes no no {} no} if [info exists cgi(case2)] {set cgi(case) $caseArray($cgi(case2))} if ![info exists cgi(case)] {set cgi(case) no} ;# values are: yes no # if ![info exists cgi(choice)] {set cgi(choice) brief} ;# values are: short brief briefTitleAuthor briefTitleAuthorMisc full fullbibtex fullrefer fullBibINPE fullXML if ![info exists cgi(choice)] {set cgi(choice) $choice} ;# values are: short brief briefTitleAuthor briefTitleAuthorMisc full fullbibtex fullrefer fullBibINPE fullXML - added by GJFB in 2018-05-28 to customize the search result from displayControl.tcl if ![info exists cgi(returnbutton)] {set cgi(returnbutton) no} ;# values are: yes no if ![info exists cgi(sort)] {set cgi(sort) {}} ;# values are: key dateplus dateminus # if ![info exists cgi(outputformat)] {set cgi(outputformat) 1} ;# used with the option briefTitleAuthorMisc - ex: outputformat=e-mailaddress+abstract if ![info exists cgi(outputformat)] {set cgi(outputformat) $outputFormat} ;# used with the option briefTitleAuthorMisc - ex: outputformat=e-mailaddress+abstract - added by GJFB in 2018-05-28 to customize the search result from displayControl.tcl if ![info exists cgi(subsetofgroups)] {set cgi(subsetofgroups) {}} if ![info exists cgi(languagebutton)] {set cgi(languagebutton) $language} ;# values are: en pt-BR if ![info exists cgi(username)] {set cgi(username) {}} if ![info exists cgi(session)] {set cgi(session) {}} if ![info exists cgi(nameformat)] {set cgi(nameformat) {short}} ;# used with the option briefTitleAuthorMisc - ex: nameformat=familynamelast if ![info exists cgi(nameseparator)] {set cgi(nameseparator) {; }} ;# used with the option briefTitleAuthorMisc - ex: nameseparator=
if ![info exists cgi(imageflag)] {set cgi(imageflag) 0} ;# added by GJFB in 2018-05-28 - don't display the thumbnail (if any) - required when setting choice == CreateBriefTitleAuthorEntry in displayControl.tcl # linkType used by CreateBriefTitleAuthorEntry (see CreateBriefTitleAuthorEntry) # ConditionalSet linkType cgi(linktype) 0 ;# values are: 0 1 2 3 4 5 6 7 (see CreateBriefTitleAuthorEntry) ConditionalSet linkType cgi(linktype) 1 ;# values are: 0 1 2 3 4 5 6 7 (see CreateBriefTitleAuthorEntry) ;# added by GJFB in 2018-05-28 to let use choice == briefTitleAuthorMisc in col/dpi.inpe.br/banon/2000/01.23.20.24/auxdoc/displayControl.tcl ConditionalSet cssFileURL cgi(cssfileurl) {} ConditionalSet forceRecentFlag cgi(forcerecentflag) 0 ;# added by GJFB in 2023-06-09 ConditionalSet forceHistoryBackFlag cgi(forcehistorybackflag) 1 ;# added by GJFB in 2023-06-09 set returnButton $cgi(returnbutton) ;# used in LoopOverEntries if 0 { # Update @searchExpressionLog # Waiting for the completion of other search while {[EnterQueue [pid] search]} { set x 0; after 100 {set x 1}; vwait x } # Waiting for the completion of other search - end Store cgi(query) $homePath/@searchExpressionLog auto 0 a LeaveQueue [pid] search # Update @searchExpressionLog - end } if [regexp {fullXML} $cgi(choice)] { # set header 0 ;# commented by GJFB in 2020-06-17 set header 1 ;# added by GJFB in 2020-06-17 set cgi(continue) yes # puts {Content-Type: text/xml} ;# commented by GJFB in 2020-06-17 puts {Content-Type: text/html} ;# added by GJFB in 2020-06-17 } else { set header 1 # puts {Content-Type: text/html; charset=utf-8} ;# doesn't solve the accent problem puts {Content-Type: text/html} } puts {} # return # puts [array get cgi] # puts $cgi(query) if [string equal {second} $cgi(queryfieldtype)] { set cgi(query) $cgi(alternatequery) } else { ProcessQuery ;# compute cgi(query) } # puts $cgi(query) # puts $env(QUERY_STRING) # puts $env(REQUEST_URI) # return if [info exists cgi(fieldnamelist)] { source ../$col/$URLibServiceRepository/doc/utilities3.tcl ConditionalSet cssFileURL cgi(cssfileurl) {} set searchExpression $cgi(query) ;# ref Journal set fieldNameList $cgi(fieldnamelist) ;# journal set accent {yes} set case {yes} set siteList {} set page {no} set choice2 {briefTitleAuthorMisc} set linkType {0} set displayEverything {0} set test {1} puts "Field Value List" puts "

Search expression: $searchExpression
Field name: $fieldNameList

" puts [DisplayMultipleSearch $searchExpression $fieldNameList $accent $case $siteList $page $choice2 $linkType $displayEverything $test] puts {} } else { if [string equal {full} $cgi(choice)] { source ../$col/$languageRep2/doc/mirror/${language}FieldName.tcl ;# for full format } if {$cgi(choice) == "site"} { set stampName lastupdate } else { set stampName metadatalastupdate } # Similar to Submit set passwordError 0 ;# no password error # puts [info exists cgi(codedpassword1)] # puts --$cgi(codedpassword1)-- if [info exists cgi(codedpassword1)] { set password1 $cgi(codedpassword1) } elseif {[info exists cgi(password1)]} { set password1 $cgi(password1) } elseif {[info exists cgi(pid)]} { # used to search hidden references (see xxUpdateSubmission.html and submit.tcl) set pid $cgi(pid) Load ../tmpForAdministratorPassword-$pid password1 binary file delete ../tmpForAdministratorPassword-$pid } else { set password1 {} } if {[info exists cgi(username)] && ![string equal {} $cgi(username)]} { # not a query from the simple form # puts [list CheckPassword $cgi(username) $password1] # set flag [Execute $serverAddressWithIP [list CheckPassword $cgi(username) $password1]] set command [list list CheckPassword $cgi(username) $password1] set flag [MultipleExecute [list $serverAddressWithIP] $command] # puts $flag if {[string equal {} $flag] || $flag && ![string equal {} $password1]} { # unknown username or wrong password set passwordError 1 } } # Similar to Submit - end # puts --$password1-- # puts --$passwordError-- # puts $cgi(query) set maximumNumberOfEntries 10 if ![info exists cgi(continue)] {set cgi(continue) no} ConditionalSet siteList cgi(sitelist) {} if [string equal {yes} $cgi(continue)] { # if {[string equal {yes} $cgi(continue)] || $cgi(choice) == "fullXML"} # set maximumNumberOfReferences 0 ;# returns all the entries } else { # part of the faster mirror search code # create output with a maximum of 10 + 1 references # set maximumNumberOfReferences 0 ;# old code set maximumNumberOfReferences [expr $maximumNumberOfEntries + 1] ;# new code - faster - GetMetadataRepositories doesn't return all the entries } # query if {[info exists cgi(query2)] && ![string equal {} $cgi(query2)]} { # multiple search set searchList [list $cgi(query) $cgi(query2)] set query [list list GetMetadataRepositories $currentRep 3 $searchList $cgi(accent) $cgi(case) 0 $stampName repArray $password1 $cgi(sort) $maximumNumberOfReferences $cgi(subsetofgroups) 1] } else { # simple search set query [list list GetMetadataRepositories $currentRep 3 $cgi(query) $cgi(accent) $cgi(case) 0 $stampName repArray $password1 $cgi(sort) $maximumNumberOfReferences $cgi(subsetofgroups)] } # query2String # values defined in query2String are used in mirrorget.tcl ? set query2String {query2=$cgi(query)&choice2=$cgi(choice)&accent2=$cgi(accent)&case2=$cgi(case)} # set xxx [list [pid] $cgi(query) [clock format [clock seconds] -format %Y:%m.%d.%H.%M.%S]] # Store xxx /dados/URLib/tmp/aaa auto 0 a # puts $query # puts $forceHistoryBackFlag # CREATE SEARCH RESULT if [catch {CreateOutput \ $language $languageRep1 $languageRep2 $query $query2String Search {} \ 0 $maximumNumberOfEntries $cgi(choice) $header \ {^$} 0 {} $cgi(outputformat) \ {#EEEEEE #E3E3E3} $siteList no \ yes $linkType $passwordError \ $cgi(targetvalue) metadatalastupdate \ site $returnButton $cssFileURL \ $cgi(nameformat) $cgi(nameseparator) $searchInputValue $mirrorIdentifier \ $forceRecentFlag $forceHistoryBackFlag} output2] { global errorInfo; puts "
MirrorSearch (1): $errorInfo
" # puts --$output2-- # set xxx $output2 # Store xxx /dados/URLib/tmp/aaa auto 0 a } if 0 { # commented by GJFB in 2020-06-17 - now fullXML has header if [regexp {fullXML} $cgi(choice)] { puts { Search Result

} puts
			puts {<?xml version="1.0" encoding="ISO-8859-1"?>}	;# added by GJFB in 2020-06-17
			puts {<metadatalist>}	;# added by GJFB in 2020-06-17
			regsub -all {<} $output2 {\<} output2	;# < -> < 
			regsub -all {>} $output2 {\>} output2	;# > -> > 
#			puts [encoding convertfrom $env(ENCODING_SYSTEM) [join $output2 \n]]	;# solves the accent problem
#			puts [join $output2 \n]
			puts [encoding convertfrom utf-8 [join $output2 \n]]	;# solves the accent problem
			puts {</metadatalist>}	;# added by GJFB in 2020-06-17
			puts 
puts " " } } } return } m] { if ![string equal {} $m] { puts {Content-Type: text/html} puts {} puts "
MirrorSearch (2): $m
" if 0 {global errorInfo; puts
$errorInfo
} } } } # MirrorSearch - end # ----------------------------------------------------------------------