xquery version "1.0";
(: $Id: media.xq 7220 2008-01-14 10:50:38Z wolfgang_m $ :)
declare namespace bib="http://exist-db.org/bibliography";
(: Load library modules :)
declare namespace request="http://exist-db.org/xquery/request";
declare namespace session="http://exist-db.org/xquery/session";
declare namespace xsl="http://exist-db.org/xquery/transform";
declare namespace util="http://exist-db.org/xquery/util";
declare namespace xdb="http://exist-db.org/xquery/xmldb";
declare namespace xi="http://www.w3.org/2001/XInclude";
declare namespace system="http://exist-db.org/xquery/system";
import module namespace conf="http://exist-db.org/modules/mods-config" at "memoirs-config.xqm";
import module namespace sort="http://exist-db.org/biblio/sort" at "memoirs-sort.xq";
import module namespace display="http://exist-db.org/biblio/display" at "memoirs-display.xq";
(: declare option exist:output-size-limit "-1"; :)
declare function bib:select-conference() as element() {
let $rec := "for $m in distinct-values(collection('/db/memorials')/record/conference/text()) order by $m return ",
$d := util:eval($rec)
return
};
declare variable $bib:sort-import {
'import module namespace sort="http://exist-db.org/biblio/sort"
at "memoirs-sort.xq";'
};
(: Removes a document :)
declare function bib:remove() as element()?
{
let $resources := request:get-parameter("r", ())
return
if(empty($resources)) then
else
for $r in $resources
let $log := util:log("DEBUG", ("$r: ", util:get-sequence-type($r), ": ", $r))
let $cached := session:get-attribute("cache"),
$rec := $cached[xs:int($r)]
return (
xdb:remove(util:collection-name($rec), util:document-name($rec)),
session:set-attribute("cache", remove($cached, xs:int($r)))
)
};
declare function bib:remove-folder() as element()? {
let $folder := request:get-parameter("folder", ())
return
if(not($folder)) then
else
xdb:remove($folder)
};
declare function bib:create-folder($homeColl as xs:string) as element()? {
let $name := request:get-parameter("name", ()),
$parentParam := request:get-parameter("folder", ()),
$parent :=
if ($parentParam) then
$parentParam
else
$homeColl
return
let $newCol := xdb:create-collection($parent, $name)
return ()
};
declare function bib:folders($root as xs:string, $current as xs:string) as element() {
{bib:scan-collection($root, $root, $current)}
};
declare function bib:scan-collection($home as xs:string, $collection as
xs:string, $current as xs:string) as element()+ {
let $displayName :=
if ($home eq $collection) then
"All folders"
else
substring-after(substring-after($collection, $home), '/')
return (
{
if ($collection eq $current) then
attribute checked { "checked" }
else
()
}
{$displayName}
,
for $child in xdb:get-child-collections($collection)
order by $child return
bib:scan-collection($home, concat($collection, '/', $child),
$current)
)
};
declare function bib:operand($field, $terms) as xs:string
{
let $mode := request:get-parameter("mode", "all")
return
if($mode eq "any") then
concat($field, " |= '", $terms, "'")
else if($mode eq "near") then
concat("near(", $field, ", '", $terms, "')")
else
concat($field, " &= '", $terms, "'")
};
(: Create an XPath expression for the current field and search terms :)
declare function bib:createXPath($collection as xs:string, $term1 as xs:string?)
as xs:string
{
let $field1 := request:get-parameter("field1", "any"),
$queryPart :=
if($term1) then
concat(conf:get-query-root($collection), "[", bib:operand(conf:queryField($field1), $term1))
else
conf:get-query-root($collection),
$l := util:log("debug", ("Part: ", $term1)),
$term2 := request:get-parameter("term2", ())
return
if($term2) then
let $field2 := request:get-parameter("field2", "any"),
$op := request:get-parameter("op", "and")
return
concat($queryPart, " ", $op, " ", bib:operand(conf:queryField($field2), $term2), "]")
else if($term1) then
concat($queryPart, "]")
else
$queryPart
};
declare function bib:displayOverview($recs as item()*, $collection) as element()+
{
let $count := count($recs),
$max := request:get-parameter("howmany", "10") cast as xs:int,
$start := request:get-parameter("start", "1") cast as xs:int,
$end := if ($start + $max - 1 < $count) then $start + $max - 1 else $count,
$expandAll := exists(request:get-parameter("expand", ())),
$preload := if ($expandAll) then true() else $conf:preload
return