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')
)