Skip to content
This repository has been archived by the owner on Nov 9, 2022. It is now read-only.

Commit

Permalink
#109 added support for db-online-event
Browse files Browse the repository at this point in the history
  • Loading branch information
dmcassel committed Mar 8, 2016
1 parent 14d3f65 commit c3f2000
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
25 changes: 22 additions & 3 deletions deploy/lib/xquery/triggers.xqy
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ declare function triggers:load-from-config($config as element(trgr:triggers))
for $trgr in $config/trgr:trigger
let $name := $trgr/trgr:name
let $desc as xs:string := $trgr/trgr:description
let $data-event := $trgr/trgr:data-event
let $event := triggers:get-event($trgr)
let $module :=
(: Convert from database name to id :)
<trgr:module>
<trgr:database>{xdmp:database($trgr/trgr:module/trgr:database/fn:string())}</trgr:database>
{
Expand All @@ -58,7 +59,7 @@ declare function triggers:load-from-config($config as element(trgr:triggers))
(: trigger already exists. update it :)
(
trgr:trigger-set-description($name, $desc),
trgr:trigger-set-event($name, $data-event),
trgr:trigger-set-event($name, $event),
trgr:trigger-set-module($name, $module),
if ($enabled) then trgr:trigger-enable($name)
else trgr:trigger-disable($name),
Expand All @@ -70,7 +71,7 @@ declare function triggers:load-from-config($config as element(trgr:triggers))
(: new trigger. create it. :)
trgr:create-trigger(
$name, $desc,
$data-event,
$event,
$module,
$enabled,
$permissions,
Expand All @@ -89,6 +90,24 @@ declare function triggers:resolve-permissions($perms as element(sec:permission)*
</sec:permission>
};

declare function triggers:get-event($trgr)
{
let $data-event := $trgr/trgr:data-event
let $db-online-event :=
if ($trgr/trgr:database-online-event) then
<trgr:database-online-event>
<trgr:user>{xdmp:user($trgr/trgr:database-online-event/trgr:user-name)}</trgr:user>
</trgr:database-online-event>
else ()
return
if (fn:exists($data-event)) then
$data-event
else if (fn:exists($db-online-event)) then
$db-online-event
else
fn:error(xs:QName("EVENT-REQUIRED"), "A trigger must have a data-event or database-online-event")
};

declare function triggers:clean-triggers()
{
for $trigger in /trgr:trigger
Expand Down
30 changes: 30 additions & 0 deletions deploy/sample/triggers-config.sample.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,36 @@
</trgr:document-content>
<trgr:when>pre-commit</trgr:when>
</trgr:data-event>
<!--
<trgr:database-online-event>
<trgr:user-name>admin</trgr:user-name>
</trgr:database-online-event>
-->
<trgr:module>
<trgr:database>${modules-db}</trgr:database>
<trgr:root>/triggers/</trgr:root>
<trgr:path>log-create.xqy</trgr:path>
</trgr:module>
<trgr:enabled>true</trgr:enabled>
<trgr:permissions>
<sec:permission>
<sec:capability>read</sec:capability>
<sec:role-name>${app-role}</sec:role-name>
</sec:permission>,
<sec:permission>
<sec:capability>update</sec:capability>
<sec:role-name>${app-role}</sec:role-name>
</sec:permission>
</trgr:permissions>
<trgr:recursive>false</trgr:recursive>
<trgr:task-priority>normal</trgr:task-priority>
</trgr:trigger>
<trgr:trigger>
<trgr:name>OnlineTrigger</trgr:name>
<trgr:description>Online Event trigger</trgr:description>
<trgr:database-online-event>
<trgr:user-name>admin</trgr:user-name>
</trgr:database-online-event>
<trgr:module>
<trgr:database>${modules-db}</trgr:database>
<trgr:root>/triggers/</trgr:root>
Expand Down

0 comments on commit c3f2000

Please sign in to comment.