xquery version "1.0"; declare option exist:profiling "enabled=yes verbosity=10 logger=xquery.profiling"; declare namespace util="http://exist-db.org/xquery/util"; declare namespace i18n="http://apache.org/cocoon/i18n/2.1"; declare namespace xmldb="http://exist-db.org/xquery/xmldb"; import module namespace save="http://www.risten.no/edit/save" at "saveroutines.xqm"; import module namespace ristenutil="http://www.risten.no/shared/util" at "../xquery/ristenutil.xqm"; (: Assemble the query string :) declare function local:build-query($record as xs:string, $entrylang as xs:string) as xs:string { let $pos := request:request-parameter("pos", "S"), $newRecID := ristenutil:makeTermID($record, $pos), $expr := ristenutil:id-filter($newRecID), $doc := ristenutil:get-doc($entrylang) return concat("for $r in document('", $doc, "')//entry[", $expr, "] return $r") }; (: Check for the existence of the new entry: :) declare function local:check-exists($entry as xs:string, $entrylang as xs:string) as xs:boolean { let $query := local:build-query($entry, $entrylang), $hits := util:eval( $query ), $count := count($hits) return if ( $count = 0 ) then false() else true() }; (: Check for the existence of the language in the term center - only one term/language in each term record: :) declare function local:check-center($centerid as xs:string, $entrylang as xs:string) as xs:boolean { let $query := concat("for $r in document", "('/db/ordbase/terms/SD-terms/termcenter.xml')", "/termCenter/entry[@id='", $centerid, "']/entryref[@xml:lang='", $entrylang, "'] return $r"), $hits := util:eval( $query ), $count := count($hits) return if ( $count = 0 ) then false() else true() }; (: Main function - retrieves some request attributes, forks further processing to other defined functions depending on the retrieved values :) declare function local:main() as element()+ { let $centerid := request:request-parameter("id", ""), $entrylang := request:request-parameter("lang", ""), $rawentry := request:request-parameter("entry", ""), $pos := request:request-parameter("pos", ""), $entry := ristenutil:cleanEntry( $rawentry ) let $l := request:set-session-attribute("entrylang", $entrylang), $p := request:set-session-attribute("pos", $pos) let $exists := local:check-exists($entry, $entrylang), $cntrexists := local:check-center($centerid, $entrylang) let $dummy := util:log("info", "main") return if ( $cntrexists ) then
WARNING: The term record «{$centerid}» does already have an entry for this language! If you want to add alternative terms, please add them as synonyms (click the existing term to add synonyms).
else if( $exists ) then let $savedentry := save:saveExistingEntry($centerid), $savedcenter := save:updatecenter($centerid), $query := local:build-query($entry, $entrylang), $hits := util:eval( $query ) return ( (:The result: {$savedentry}
,In Term Record: {$savedcenter}
, :) ristenutil:display($entrylang, $hits) ) else let $saveresult := save:saveNewEntry($centerid), $savedcenter := save:updatecenter($centerid), $query := local:build-query($entry, $entrylang), $hits := util:eval( $query ) return if (empty($hits)) then (ERROR! Record {$centerid} not found!
,Your language: {$entrylang}
,Your request: {$centerid}
,Your entry: {$entry}
,New entry exists: {$exists}
,Your search query:
Your search query:
The save result: {$saveresult}
,The article does exist: {$exists}
, :) ristenutil:display($entrylang, $hits) ) };