120 lines
4.5 KiB
Plaintext
120 lines
4.5 KiB
Plaintext
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 <department>{$area}</department>
|
|
return $result:)
|
|
let $OrgChunk := <departments>
|
|
{
|
|
for $area in fn:doc($OrgChart)/taxonomy/descendant::*:facet/@xml:id/string()
|
|
let $depatment := <department>{$area}</department>
|
|
return $depatment
|
|
}
|
|
</departments>
|
|
|
|
|
|
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 := <user><id>{$userID}</id><name>Bloomsbury</name><email>admin@bloomsbury.com</email><created>{fn:current-dateTime()}</created><updated>{fn:current-dateTime()}</updated><locked>No</locked><password-updated>{fn:current-dateTime()}</password-updated><role>admin</role><active>Yes</active></user>
|
|
return
|
|
(
|
|
db:add($databasName, $userXml, $userUri),
|
|
user:create($userXml/email/text(), 'admin', 'admin'),
|
|
update:output("user created"),
|
|
|
|
|
|
let $auditChunk := <audit>
|
|
<id>{random:uuid()}</id>
|
|
<requester-id>bloomsbury</requester-id>
|
|
<requester-email>admin@bloomsbury.com</requester-email>
|
|
<type>'user create'</type>
|
|
<date-time>{fn:adjust-dateTime-to-timezone(convert:integer-to-dateTime(prof:current-ms()))}</date-time>
|
|
</audit>
|
|
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,<audits failed-logins='0'>{$auditChunk}</audits>,$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')
|
|
)
|
|
|