Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 35 additions & 3 deletions profiles/base10/modules/registers.xql
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,10 @@ declare function rapi:save($request as map(*)) {
let $body := $request?body/*[1]

let $type := local-name($body)
let $type := if ($type = 'org') then "organization" else $type
let $type := switch($type)
case "org" return "organization"
case "bibl" return "work"
default return $type
let $id := ($body/@xml:id, $request?parameters?id)[1]

let $data := rapi:prepare-record($body, $user, $type)
Expand Down Expand Up @@ -123,6 +126,8 @@ declare function rapi:insert-point($type as xs:string) {
collection($config:register-root)/id($root)//tei:listOrg
case "term" return
collection($config:register-root)/id($root)//tei:taxonomy
case "work" return
collection($config:register-root)/id($root)//tei:listBibl
default return
collection($config:register-root)/id($root)//tei:listPerson
};
Expand Down Expand Up @@ -193,15 +198,22 @@ declare function rapi:next($type) {
switch ($type)
case 'place'
return collection($config:register-root)/id($config?id)//tei:place[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix)
case 'organization'
return collection($config:register-root)/id($config?id)//tei:org[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix)
case 'term'
return collection($config:register-root)/id($config?id)//tei:category[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix)
case 'work'
return collection($config:register-root)/id($config?id)//(tei:bibl|tei:biblStruct)[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix)
default
return collection($config:register-root)/id($config?id)//tei:person[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix)

let $last := if (count($all-ids)) then sort($all-ids)[last()] else 1
let $numeric-ids := for $id in $all-ids return if ($id castable as xs:integer) then $id else ()
let $last := if (count($all-ids)) then sort($numeric-ids)[last()] else 1
let $next :=
try {
xs:integer($last) + 1
} catch * {
'_error'
1
}

return $config?prefix || rapi:pad($next, 6)
Expand Down Expand Up @@ -272,6 +284,15 @@ declare function rapi:query($type as xs:string, $query as xs:string?) {
"id": $term/@xml:id/string(),
"label": $term/tei:catDesc/string()
}
case "work" return
for $bibl in collection($config:register-root)//tei:bibl[ft:query(tei:title, $query)]
return
map {
"id": $bibl/@xml:id/string(),
"label": $bibl/tei:title[@type="main"]/string(),
"details": ``[`{$bibl/tei:author}`; `{$bibl/tei:note/string()}`]``,
"link": $bibl/tei:ptr/@target/string()
}
default return
()
} catch * {
Expand Down Expand Up @@ -359,6 +380,16 @@ declare function rapi:create-record($type as xs:string, $id as xs:string, $data
<category xmlns="http://www.tei-c.org/ns/1.0" xml:id="{$id}">
<catDesc>{$data?name}</catDesc>
</category>
case "work" return
<bibl xmlns="http://www.tei-c.org/ns/1.0" xml:id="{$id}">
<title type="main">{$data?name}</title>
{
rapi:process-array($data?firstAuthor, function($item) {
<author xmlns="http://www.tei-c.org/ns/1.0">{$item?label}</author>
})
}
<note>{$data?note}</note>
</bibl>
default return
()
};
Expand Down Expand Up @@ -401,6 +432,7 @@ declare function rapi:local-search-strings($type as xs:string, $entry as element
case "place" return $entry/tei:placeName/string()
case "organization" return $entry/tei:orgName/string()
case "term" return $entry/tei:catDesc/string()
case "work" return $entry/tei:title/string()
default return $entry/tei:persName/string()
};

Expand Down
Loading