xquery version "1.0"; (: $Id: admin.xql 14995 2011-07-30 19:57:47Z dizzzz $ :) (: Main module of the database administration interface. :) declare namespace xdb="http://exist-db.org/xquery/xmldb"; declare namespace request = "http://exist-db.org/xquery/request"; declare option exist:serialize "method=text media-type=text/plain omit-xml-declaration=yes"; declare function local:get-schemas() as node() *{ let $colName := rebind:getSetting('schema-folder') for $child in xdb:get-child-resources($colName) let $path := concat($colName, '/', $child) return if(ends-with($child,".xsd"))then( doc($path) )else() }; (: main entry point :) let $isAllowedUser := xdb:is-admin-user(xdb:get-current-user()) (: TODO #29: allow for admins and contributing scientist of the current project :) (:let $collection := rebind:getSetting('schema-folder'):) return if($isAllowedUser) then ( let $report-file := request:get-parameter("file", ()) let $collection := request:get-parameter("collection", ()) let $validation-collection := xdb:create-collection($collection, 'validation-report') (:lorna: adding saving of validation report so can display errors instead of Issues Queue - after validation but before correction:) let $input-doc := doc($report-file) return if(exists($input-doc))then ( let $schemas := local:get-schemas() let $report := validation:jaxv-report($input-doc, $schemas) let $store := xdb:decode-uri(xs:anyURI(xdb:store($validation-collection, xdb:encode-uri("validation.xml"), $report))) return count($report//message[@level="Error"]) )else(concat("error 01 ",$report-file)) ) else ("error 02 ")