# Copyright for the Uniform Repository Service (c) 1995 - 2022, # by Gerald Banon. All rights reserved. # Version 2.1 # mirrorget.tcl # ---------------------------------------------------------------------- # MirrorGet # displays a full reference, BibTeX, Refer or fullXML # Examples: if 0 { http://gjfb/col/dpi.inpe.br/banon/1999/06.19.17.00/doc/mirrorget.cgi?languagebutton=pt-BR&metadatarepository=iconet.com.br/banon/2002/02.02.20.42.32&choice=fullXML http://banon-pc2/col/dpi.inpe.br/banon/1999/06.19.17.00/doc/mirrorget.cgi?languagebutton=pt-BR&metadatarepository=iconet.com.br/banon/2000/12.31.20.38.58&choice=fullXML http://mtc-m17.sid.inpe.br/col/lcp.inpe.br/ignes/2004/02.12.18.39.49/doc/mirrorget.cgi?metadatarepository=sid.inpe.br/mtc-m17@80/2007/03.23.19.00.16&choice=fullXML http://banon-pc3/col/dpi.inpe.br/banon/1999/06.19.17.00/doc/mirrorget.cgi?languagebutton=pt-BR&metadatarepository=iconet.com.br/banon/2009/03.16.01.30.32&index=0&serveraddress=banon-pc3+800&choice=briefTitleAuthorMisc&outputformat=abstract+repository+update http://gjfb:1905/col/dpi.inpe.br/banon/1999/06.19.17.00/doc/mirrorget.cgi?languagebutton=pt-BR&metadatarepository=iconet.com.br/banon/2009/03.16.01.30.32&index=0&choice=briefTitleAuthorMisc&outputformat=abstract+repository+update http://gjfb:1905/col/dpi.inpe.br/banon/1999/06.19.17.00/doc/mirrorget.cgi?metadatarepository=urlib.net/www/2013/06.21.00.03.30&index=0 http://gjfb:1905/urlib.net/www/2013/06.21.00.03: } proc MirrorGet {} { if [catch { global env global cgi global currentRep # global maximumNumberOfReferences global homePath ;# used in FindLanguage global accessDate global {Jan} global {Feb} global {Mar} global {Apr} global {May} global {Jun} global {Jul} global {Aug} global {Sep} global {Oct} global {Nov} global {Dec} global mirrorHomePageRep ;# defined in FindLanguage (utilities1.tcl) global topFull # global {Document Stage} global completed global {Empty Fields} global update global bottomFull global Kbyte global Kbytes global {Is a Copy?} global {copy to clipboard} global {Available from:} global {Access in:} global {Subject:} global {How to Make the Citation of this Document using the INPE Standard - BibINPE Format} global {Citation to be made within a document inside the IBI network} global {that is, a document deposited in an Archive of the IBI network} global {Citation to be made within a document outside the IBI network} global {See also:} global {Warning: Previous edition not found.} global {Warning: Next edition not found.} global {How to Make the In-Text Citation - by author/year} global {and} global {as proposed by} global {may be found in the literature} global {missing or empty field: } global {incomplete reference} global {not an BibINPE reference} global {Is a Copy?} ;# used in CreateFullEntry only global {yes} ;# used in CreateFullEntry only global {no} ;# used in CreateFullEntry only global {History} # global {Document Stage} global {Content Stage} global {work-in-progress} global {completed} global {transferred to} ;# used in CreateFullEntry only global {not transferred} ;# used in CreateFullEntry only global {not transferred} ;# used in CreateFullEntry only - added by GJFB in 2024-07-25 - required when displaying metadata with CreateFullEntry after the search expression 'doc transferre*' global {slides} global {Slides} global {Translation by} ;# used in CreateFullBibINPEEntry only global {Arrangement} ;# used in CreateFullEntry only global {doc Directory Content} ;# used in CreateFullEntry only global {source Directory Content} ;# used in CreateFullEntry only global {there are no files} ;# used in CreateFullEntry only if 1 { # the two lines below have become obsolete since 2011-06-05 global {agreement Directory Link} ;# used in CreateFullEntry only global {directory doesn't exist} ;# ' used in CreateFullEntry only } global {agreement Directory Content} ;# used in CreateFullEntry only global {see directory content} ;# used in CreateFullEntry only set col ../../../../.. set URLibServiceRepository $env(URLIB_SERVICE_REP) source ../$col/$URLibServiceRepository/doc/utilities1.tcl source ../$col/$URLibServiceRepository/doc/cgi/mirrorfind-.tcl # homePath (used in LoadService, Help and FindLanguage) set homePath $env(DOCUMENT_ROOT) set currentProcedureName MirrorGet # set currentFileName $homePath/col/$URLibServiceRepository/doc/cgi/mirrorget.tcl set currentProcedureFileName $homePath/col/$URLibServiceRepository/doc/cgi/mirrorget.tcl set pathInfo [file split $env(PATH_INFO)] # currentRep regsub -all { } [lrange $pathInfo 1 4] {/} currentRep ;# mirror # Find the language and the language repository # foreach {language languageRep1 languageRep2} [FindLanguage $currentRep] {break} foreach {language languageRep1 languageRep2 firstLanguageRep \ submissionFormRep submissionFormLanguage submissionFormLanguageRep} \ [FindLanguage $currentRep] {break} # Find the language and the language repository - end # administratorUserName regsub {@.*$} $env(SERVER_ADMIN) {} administratorUserName if [info exists env(QUERY_STRING)] { foreach {name value} [split $env(QUERY_STRING) &=] { set cgi([DecodeURL $name]) [DecodeURL $value] } } ConditionalSet languageButton cgi(languagebutton) $language ;# added by GJFB in 2022-06-17 - to avoid the need of defining explicitely the language in the URL calling the script mirrorget.cgi - this is after turning the title 'Metadata' a link (see topFull) if 0 { # test returning field name/value list - not used # http://gjfb:1905/urlib.net/www/2013/06.21.00.03:?fieldlist=shorttitle+nexthigherunit puts {Content-Type: text/html} puts {} global serverAddress ;# used by SetFieldValue # serverAddress set serverAddress [list $env(SERVER_NAME) $env(URLIB_PORT)] ;# local site SetFieldValue $serverAddress $cgi(metadatarepository)-0 $cgi(fieldlist) set nameValueList {} foreach field $cgi(fieldlist) { lappend nameValueList $field [set $field] } puts $nameValueList return } # display # set display [subst [GetFrameName $mirrorHomePageRep]] set display [GetFrameName] source ../$col/$languageRep2/doc/mirror/${language}SearchResult.tcl source ../$col/$languageRep2/doc/mirror/${language}FieldName.tcl ;# for full format - array set field::conversionTable # accessdate set accessDate [subst [GetAccessDate $accessDate]] # if index doesn't exist, we assume 0 if ![info exists cgi(index)] {set cgi(index) 0} set rep-i $cgi(metadatarepository)-$cgi(index) # if site doesn't exist, we assume the local site # if ![info exists cgi(site)] {set cgi(site) $env(SERVER_NAME):$env(SERVER_PORT)} # serverAddress # if ![info exists cgi(serveraddress)] {set cgi(serveraddress) [list $env(SERVER_NAME) $env(URLIB_PORT)]} # set serverAddress $cgi(serveraddress) ConditionalSet serverAddress cgi(serveraddress) [list $env(SERVER_NAME) $env(URLIB_PORT)] # localSite set localSite [ReturnHTTPHost $serverAddress] # regexp {(.*):(.*)} $site m serverName portNumber foreach {serverName urlibPort} [ReturnCommunicationAddress $serverAddress] {break} # encodingName set encodingName [Execute $serverAddress [list GetEncodingName]] # set localURLibClientSocketId [StartCommunication $serverName $urlibPort] # set localURLibClientSocketId [StartCommunication $serverName $urlibPort 1 utf-8] ;# solves the accent problem - communication from banon-pc3 to plutao - done by GJFB in 2010-07-09 - doesn't work when displaying iconet.com.br/banon/2007/10.27.03.57 in banon-pc3 # set localURLibClientSocketId [StartCommunication $serverName $urlibPort 1 $encodingName] ;# solves the accent problem - communication from banon-pc3 to plutao - doesn't work when displaying 8JMKD3MGP7W/37RP2TH in m19 from banon-pc3 set localURLibClientSocketId [StartCommunication $serverName $urlibPort] ;# added by GJFB in 2010-12-11 - the problems are now solved like in LoopOverEntries (see set entry2 at the end of this procedure) set repName [Submit $localURLibClientSocketId [list ReturnRepositoryName $cgi(metadatarepository)] 0] ;# not async # choice=full or fullbibtex or fullrefer (see utilitiesMirror.tcl) # if choice don't exist, we assume full if ![info exists cgi(choice)] {set cgi(choice) full} ConditionalSet keywords cgi(keywords) {} ConditionalSet accent cgi(accent) yes ;# used to highlight words ConditionalSet case cgi(case) yes ;# used to highlight words ConditionalSet outputFormat cgi(outputformat) {} ConditionalSet imageFlag cgi(imageflag) 1 ConditionalSet serverAddress2 cgi(serveraddress) $serverAddress ;# added by GJFB in 2022-04-16 - used in topFull for arrangement update ConditionalSet lastUpdate2 cgi(lastupdate) {} ;# added by GJFB in 2022-04-16 - used in topFull for arrangement update # set mirrorGetFlag 1 ;# added by GJFB in 2022-02-07- commented by GJFB in 2022-04-16 ConditionalSet mirrorGetFlag cgi(mirrorgetflag) 0 ;# added by GJFB in 2022-04-16 - used in topFull for arrangement update ConditionalSet continue cgi(continue) {} ;# needed with the short option set siteList2 {} ;# needed with the short option if [string equal {brief} $cgi(choice)] { puts {Content-Type: text/html} puts {} puts "MirrorGet error: brief choice is not supported" return } set returnButton {} ;# used in subst [join $entry \n] when entry comes from CreateBriefTitleAuthorEntry and outputFormat list contains the element update # EXTRA # set extra [list $keywords {} {} $env(REMOTE_ADDR)] ;# used when displaying the update link in a full entry # set extra [list $keywords {} {} $env(REMOTE_ADDR)] ;# used when displaying the update link in a full entry # set extra [list $keywords {^$} {1} $env(REMOTE_ADDR) {} $outputFormat {} $timeStamp {} {} {} {} {} {} {} {} {} $accent $case {} {} $imageFlag] # set extra [list $keywords {^$} {1} $env(REMOTE_ADDR) {} $outputFormat {} {} {} {} {} {} {} {} {} {} {} $accent $case {} {} $imageFlag] ;# commented by GJFB in 2022-02-07 set extra [list $keywords {^$} {1} $env(REMOTE_ADDR) {} $outputFormat {} {} {} {} {} {} {} {} {} {} {} $accent $case {} {} $imageFlag $mirrorGetFlag] ;# added by GJFB in 2022-02-07 # set extra [list $keywords $excludedFields 0 $env(REMOTE_ADDR) $numbering $outputFormat $cellBackgroundColor $timeStamp $pageFlag $includeReturnAddress $linkType $hideSimilarButton $targetValue $dateFieldName $siteFieldName $nameFormat $nameSeparator $accent $case $similarity $originalRepForSimilarity $imageFlag] # currentRep is the current mirror repository #set entry [Submit $localURLibClientSocketId \ #[list GetEntry ${rep-i} $currentRep $cgi(choice) {} $language $extra] 0] ;# not async # SUBMIT set entry [Submit $localURLibClientSocketId \ [list GetEntry ${rep-i} $currentRep $cgi(choice) {} $languageRep2 $extra] 0] ;# not async close $localURLibClientSocketId # set xxx --$entry-- # Store xxx C:/tmp/bbb.txt auto 0 a # puts --$entry-- ;# >>> useful in case of "Document contains no data" <<< may contain an error message # exit # puts [list Execute $serverAddress [list GetEntry ${rep-i} $currentRep $cgi(choice) {} $languageRep2 $extra]] # catch {Execute $serverAddress [list GetEntry ${rep-i} $currentRep $cgi(choice) {} $languageRep2 $extra]} entry # set metadataLastUpdate2 [lindex $entry 0] if [catch {lindex $entry 0} metadataLastUpdate2] { # puts {Content-Type: text/html} puts {Content-Type: text/plain} puts {} if [regexp {<(.*)>} $entry m entry2] {set entry [join $entry2 \n]} puts $entry # puts
[CallTrace]
puts {} ;# new line puts [CallTrace] # exit return } if {[llength $entry] == 3} { set citationMetadaTagList [lindex $entry 1] ;# embedded metadata (or just DOI) (for Zotero) - added by GJFB in 2015-10-21 - not in used; see CreateFullBibINPEEntry } set entry [lindex $entry end] if {[info exists cgi(returnbutton)] && \ [string equal {yes} $cgi(returnbutton)] && \ [info exists cgi(lastupdate)]} { if ![regexp "$cgi(lastupdate)" $metadataLastUpdate2] { # Out-of-date set output [subst $bodyOutOfDate2] puts {Content-Type: text/html} puts {} puts $output return # Out-of-date - end } } # a full reference to display if [regexp {fullXML} $cgi(choice)] { set header 0 # puts {Content-Type: text/xml} ;# commented by GJFB in 2020-06-17 puts {Content-Type: text/html} ;# added by GJFB in 2020-06-17 - to display the metadata when selecting the full XML search result format in the green field of the mirror page } else { set header 1 puts {Content-Type: text/html} } puts {} if [regexp {fullXML} $cgi(choice)] { puts
	;# added by GJFB in 2020-06-17
#	puts {}
	puts {<?xml version="1.0" encoding="ISO-8859-1"?>}	;# added by GJFB in 2020-06-17
#	puts 
	puts {<metadatalist>}	;# added by GJFB in 2020-06-17
} else {
# SUBST	
	set output [subst $topFull]
	puts $output
	if [regexp {fullbibtex} $cgi(choice)] {
		puts 
	}
}

regsub -all {\[} $entry {\[} entry	;# [ -> \[
regsub -all {\]} $entry {\]} entry	;# ] -> \]
# regsub -all {\\&} $entry {\\\\&} entry	;# \& -> \\&	;# commented by GJFB in 2018-06-14 - with this line CreateBibTeXEntry displays \$z as \\$z - nevertheless, \\$z causes a BibTeX compilation error - \& -> \\& implies \$z -> \\$z that is \$z -> \\$z

if [regexp {fullXML} $cgi(choice)] {	;# added by GJFB in 2020-06-17
	regsub -all {<} $entry {\<} entry	;# < -> < 
	regsub -all {>} $entry {\>} entry	;# > -> > 
}

# Migration - 2009-09-10
	if [string equal {en} $language ] {
		array set field::conversionTable {identificator {Identifier}}
	} else {
		array set field::conversionTable {identificator {Identificador}}
	}
# identicator and identifier are not used any more within metadata repository after 2010
# identifier is used only within data repository
# Migration - 2009-09-10 - end

# puts --$entry--	;# <<< may contain an error message - this error message might contain expression like "expr $previousAreaNumber == 2 && $areaNumber == 3" that produce another error message when applying the subst command below
# puts [join $entry \n]
#	regsub {} $entry {} entry	;# added by GJFB in 2024-07-25 required when displaying metadata with CreateFullEntry after the search expression 'doc transferre*'
if [string equal {utf-8} $encodingName] {
	puts [encoding convertfrom utf-8 [subst [join $entry \n]]]	;# solves the accent problem - added by GJFB in 2010-12-11 - needed when displaying a full reference of plutao (see for example title of J8LNKAN8RW/38JE8FB in plutao (working with utf-8)) from banon-pc3
} else {
	puts [subst [join $entry \n]]	;# needed when displaying a full reference with symbols like – (see for example title of 8JMKD3MGP7W/37RP2TH in m19 (working with iso8859-1)) from banon-pc3
}

if [regexp {fullXML} $cgi(choice)] {
#	puts 
	puts {</metadatalist>}	;# added by GJFB in 2020-06-17
	puts 
;# added by GJFB in 2020-06-17 } else { if [regexp {fullbibtex} $cgi(choice)] { puts
} set output [subst $bottomFull] puts $output # puts [CreateReturnButton
$col/$languageRep2/doc/mirror http://$env(HTTP_HOST)/rep/$repName {} $Return] puts } } m] { if ![string equal {} $m] { puts {Content-Type: text/html} puts {} puts $m if 0 {global errorInfo; puts $errorInfo} } } # < } # MirrorGet - end # ----------------------------------------------------------------------