import module namespace config = 'http://www.rave-tech.com/bloomsbury/config' at './module/config.xqm'; declare variable $databasName := $config:CoreDatabase; declare variable $userDirectory := $config:UserDir; declare variable $validationdirectory := $config:ValidationDir; declare variable $transformDirctory := $config:TransformDir; declare variable $Configfiles := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\config'; declare variable $schemadirectory := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\schemas'; declare variable $rncdirectory := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\rnc'; declare variable $xslt := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\transforms'; declare variable $OrgChart := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\config\organization_chart.xml'; (: Create database :) if($databasName) then update:output("database already exists") else ( db:create($databasName, (), (), ()), update:output("Database Created") ) , (: Ingest Config files :) for $files in file:children($Configfiles) let $uri := fn:concat($config:ConfigDir,fn:tokenize($files,'\\')[fn:last()]) return ( db:replace($databasName,$uri,fn:doc($files)), update:output("Config files ingested") ) , (: Create User :) if(db:open($databasName)/user[1]) then for $AdminUserId in fn:collection(fn:concat($databasName,'/user'))/user[role='admin'][fn:not(fn:matches(fn:base-uri(.),'(/version/|/audit/)'))]/id/text() let $UserXml := fn:doc(fn:concat($databasName,$config:UserDir,$AdminUserId,'.xml')) let $userUri := fn:concat($config:UserDir,$AdminUserId,'.xml') (:let $OrgChunk := for $area in fn:doc($OrgChart)/taxonomy/descendant::*:facet/@xml:id/string() let $result := if($area=$UserXml/user/departments/department/text()) then () else {$area} return $result:) let $OrgChunk := { for $area in fn:doc($OrgChart)/taxonomy/descendant::*:facet/@xml:id/string() let $depatment := {$area} return $depatment } let $UpdatedUserXml := copy $c := fn:doc(fn:concat($databasName,$config:UserDir,$AdminUserId,'.xml')) modify ( replace node $c/user/departments with $OrgChunk ) return $c return db:replace($databasName, $userUri, $UpdatedUserXml) else let $userID := fn:concat($config:UserIDPrefix,fn:string(convert:dateTime-to-integer(adjust-dateTime-to-timezone(convert:integer-to-dateTime(prof:current-ms()))))) let $userUri := fn:concat($userDirectory,$userID,'.xml') let $userXml := {$userID}Bloomsburyadmin@bloomsbury.com{fn:current-dateTime()}{fn:current-dateTime()}No{fn:current-dateTime()}adminYes return ( db:add($databasName, $userXml, $userUri), user:create($userXml/email/text(), 'admin', 'admin'), update:output("user created"), let $auditChunk := {random:uuid()} bloomsbury admin@bloomsbury.com 'user create' {fn:adjust-dateTime-to-timezone(convert:integer-to-dateTime(prof:current-ms()))} let $auditUri := fn:concat('/user/audit/',$userID,'_audit.xml') return if(db:open($databasName,$auditUri)) then insert node $auditChunk as last into db:open($config:CoreDatabase,$config:AuditDir)/audits else db:add($databasName,{$auditChunk},$auditUri) ) , (: Ingest schema files :) for $file in file:children($schemadirectory) let $uri := fn:concat('/validation/',fn:tokenize($file,'\\')[fn:last()]) return if(fn:ends-with(fn:lower-case($file),'.rnc')) then ( db:store($databasName,$uri, file:read-text($file)), update:output("***Setup -- Validation file uploaded : " ||$file|| "***") ) else ( db:replace($databasName,$uri,fn:doc($file)), update:output("***Setup -- Validation file uploaded : " ||$file|| "***") ) , (: Ingest XSLT files :) for $files in file:children($xslt) let $uri := fn:concat($transformDirctory,fn:tokenize($files,'\\')[fn:last()]) return ( db:replace($databasName,$uri,fn:doc($files)), update:output('XSLT files ingested') )