diff --git a/modules/app/models/config-delete.xqy b/modules/app/models/config-delete.xqy
new file mode 100644
index 0000000..eae72b1
--- /dev/null
+++ b/modules/app/models/config-delete.xqy
@@ -0,0 +1,9 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
+
+declare variable $my:alert-name as xs:string external;
+
+alert:config-delete($my:alert-name)
\ No newline at end of file
diff --git a/modules/app/models/config-get.xqy b/modules/app/models/config-get.xqy
new file mode 100644
index 0000000..5a9e0c1
--- /dev/null
+++ b/modules/app/models/config-get.xqy
@@ -0,0 +1,9 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
+
+declare variable $my:alert-name as xs:string external;
+
+alert:config-get($my:alert-name)
\ No newline at end of file
diff --git a/modules/app/models/config-set-cpf-domain-names-insert.xqy b/modules/app/models/config-set-cpf-domain-names-insert.xqy
new file mode 100644
index 0000000..5b8085d
--- /dev/null
+++ b/modules/app/models/config-set-cpf-domain-names-insert.xqy
@@ -0,0 +1,11 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
+
+declare variable $my:alert-name as xs:string external;
+
+alert:config-insert(
+ alert:config-set-cpf-domain-names(alert:config-get($my:alert-name),())
+)
\ No newline at end of file
diff --git a/modules/app/models/config-set-cpf-domain-names.xqy b/modules/app/models/config-set-cpf-domain-names.xqy
new file mode 100644
index 0000000..5177284
--- /dev/null
+++ b/modules/app/models/config-set-cpf-domain-names.xqy
@@ -0,0 +1,10 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
+
+declare variable $my:alert-name as xs:string external;
+
+alert:config-set-cpf-domain-names(alert:config-get($my:alert-name), ())
\ No newline at end of file
diff --git a/modules/app/models/configure-domain.xqy b/modules/app/models/configure-domain.xqy
new file mode 100644
index 0000000..309864e
--- /dev/null
+++ b/modules/app/models/configure-domain.xqy
@@ -0,0 +1,25 @@
+xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts";
+
+import module namespace p="http://marklogic.com/cpf/pipelines" at "/MarkLogic/cpf/pipelines.xqy";
+import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";
+
+declare variable $m:pname as xs:string external;declare variable $m:pnames as xs:string* external;
+declare variable $m:mdb as xs:unsignedLong external;
+declare variable $m:type as xs:string external;
+declare variable $m:path as xs:string external;
+declare variable $m:otherpipeline as xs:string external;
+declare variable $m:depth as xs:string external;
+
+let $_ := xdmp:log("In eval")
+
+let $pids :=
+(xs:unsignedLong(p:pipelines()[p:pipeline-name = "Status Change Handling"]/p:pipeline-id),xs:unsignedLong(p:pipelines()[p:pipeline-name = $m:otherpipeline]/p:pipeline-id))
+let $_ := xdmp:log("second point")
+let $ds := dom:domain-scope($m:type,$m:path,$m:depth)
+let $_ := xdmp:log("third point")
+let $ec := dom:evaluation-context($m:mdb,"/")
+let $_ := xdmp:log("fourth point")
+let $dc := dom:create($m:pname,"Domain for "||$m:pname,
+ $ds,$ec,$pids,())
+let $_ := xdmp:log("fifth point")
+return $dc
diff --git a/modules/app/models/cpf-enable.xqy b/modules/app/models/cpf-enable.xqy
new file mode 100644
index 0000000..4e17e63
--- /dev/null
+++ b/modules/app/models/cpf-enable.xqy
@@ -0,0 +1,10 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+
+declare variable $my:alert-name as xs:string external;
+declare variable $my:cpf-domain as xs:string external;
+
+la:cpf-enable($my:alert-name,$my:cpf-domain)
\ No newline at end of file
diff --git a/modules/app/models/create-action.xqy b/modules/app/models/create-action.xqy
new file mode 100644
index 0000000..63c6424
--- /dev/null
+++ b/modules/app/models/create-action.xqy
@@ -0,0 +1,12 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+
+declare variable $my:alert-name as xs:string external;
+declare variable $my:alert-module as xs:string external;
+declare variable $my:db as xs:unsignedLong external;
+declare variable $my:options as element()* external;
+
+la:create-action($my:alert-name,$my:alert-module,$my:db, $my:options)
\ No newline at end of file
diff --git a/modules/app/models/create-config.xqy b/modules/app/models/create-config.xqy
new file mode 100644
index 0000000..e2c7d03
--- /dev/null
+++ b/modules/app/models/create-config.xqy
@@ -0,0 +1,9 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+
+declare variable $my:shortname as xs:string external;
+
+la:create-config($my:shortname)
\ No newline at end of file
diff --git a/modules/app/models/create-rule-notify.xqy b/modules/app/models/create-rule-notify.xqy
new file mode 100644
index 0000000..f25c454
--- /dev/null
+++ b/modules/app/models/create-rule-notify.xqy
@@ -0,0 +1,14 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+
+declare variable $my:alert-name as xs:string external;
+declare variable $my:alert-detail as xs:string external;
+declare variable $my:content-type as xs:string external;
+declare variable $my:notificationurl as xs:string external;
+declare variable $my:searchname as xs:string external;
+declare variable $my:searchdoc as cts:query external;
+
+la:create-rule-notify($my:alert-name,$my:alert-detail,$my:content-type,$my:notificationurl,$my:searchname,$my:searchdoc)
\ No newline at end of file
diff --git a/modules/app/models/create-rule.xqy b/modules/app/models/create-rule.xqy
new file mode 100644
index 0000000..7196153
--- /dev/null
+++ b/modules/app/models/create-rule.xqy
@@ -0,0 +1,9 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+
+declare variable $my:vars as map:map external;
+
+la:create-rule(map:get($my:vars,"alert-name"),map:get($my:vars,"query"),map:get($my:vars,"options"))
\ No newline at end of file
diff --git a/modules/app/models/get-domain.xqy b/modules/app/models/get-domain.xqy
new file mode 100644
index 0000000..b648b35
--- /dev/null
+++ b/modules/app/models/get-domain.xqy
@@ -0,0 +1,9 @@
+xquery version "1.0-ml";
+
+declare namespace m="http://marklogic.com/alerts";
+
+import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";
+
+declare variable $m:processmodeluri as xs:string external;
+
+dom:get($m:processmodeluri)
\ No newline at end of file
diff --git a/modules/app/models/lib-alerting.xqy b/modules/app/models/lib-alerting.xqy
new file mode 100644
index 0000000..a5948c0
--- /dev/null
+++ b/modules/app/models/lib-alerting.xqy
@@ -0,0 +1,325 @@
+xquery version "1.0-ml";
+
+module namespace la = "http://marklogic.com/alerts/alerting";
+
+import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
+import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
+
+declare namespace my="http://marklogic.com/alerts";
+
+declare variable $SAVE-SEARCH-MODULE := "/app/models/save-search.xqy";
+declare variable $CREATE-ACTION-MODULE := "/app/models/create-action.xqy";
+declare variable $CREATE-RULE-NOTIFY-MODULE := "/app/models/create-rule-notify.xqy";
+declare variable $CREATE-RULE-MODULE := "/app/models/create-rule.xqy";
+declare variable $CREATE-CONFIG-MODULE := "/app/models/create-config.xqy";
+declare variable $CPF-ENABLE-MODULE := "/app/models/cpf-enable.xqy";
+declare variable $CONFIG-SET-CPF-DOMAIN-NAMES-MODULE := "/app/models/config-set-cpf-domain-names.xqy";
+declare variable $CONFIG-SET-CPF-DOMAIN-NAMES-INSERT-MODULE := "/app/models/config-set-cpf-domain-names-insert.xqy";
+declare variable $CONFIG-DELETE-MODULE := "/app/models/config-delete.xqy";
+declare variable $CONFIG-GET-MODULE := "/app/models/config-get.xqy";
+declare variable $GET-DOMAIN-MODULE := "/app/models/get-domain.xqy";
+declare variable $REMOVE-DOMAIN-MODULE := "/app/models/remove-domain.xqy";
+declare variable $CONFIGURE-DOMAIN-MODULE := "/app/models/configure-domain.xqy";
+
+declare function la:create-collection-search($collection as xs:string) {
+ cts:collection-query($collection)
+};
+
+(: Default search grammar :)
+declare function la:create-basic-search($query as xs:string) {
+ search:parse($query)
+};
+
+(: same as from lib-adhoc-alerts.xqy - lon/lat/radius :)
+declare function la:create-geo-near-search($ns as xs:string,$elname as xs:string, $latattr as xs:string,$lonattr as xs:string,
+ $lat as xs:double,$lon as xs:double, $radiusmiles as xs:double) {
+ cts:element-geospatial-query(fn:QName($ns,$elname),cts:circle($radiusmiles, cts:point($lat, $lon)))
+};
+
+declare function la:save-search($searchdoc, $searchname as xs:string) as xs:string {
+ (: use current user on app server :)
+ let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml")
+ let $result := xdmp:document-insert($search-uri-user,
+ element la:saved-search {
+ attribute name {$searchname},
+ attribute uri {$search-uri-user},
+ $searchdoc
+ }
+ ,xdmp:default-permissions(),
+ (xdmp:default-collections(),"saved-search")
+ )
+ return $search-uri-user
+};
+
+declare function la:save-shared-search($searchdoc, $searchname as xs:string) as xs:string {
+ let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml")
+ let $result := xdmp:document-insert($search-uri-shared,
+ element la:saved-search {
+ attribute name {$searchname},
+ attribute uri {$search-uri-shared},
+ $searchdoc
+ }
+ ,xdmp:default-permissions(),
+ (xdmp:default-collections(),"saved-search")
+ )
+ return $search-uri-shared
+};
+
+declare function la:get-saved-searches() {
+ cts:search(fn:collection("saved-search"),cts:directory-query(fn:concat("/config/search/",xdmp:get-current-user(),"/"),"1"))/la:saved-search
+};
+
+declare function la:get-shared-searches() {
+ cts:search(fn:collection("saved-search"),cts:directory-query("/config/search/shared/","1"))/la:saved-search
+};
+
+declare function la:delete-search($searchname) {
+ let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml")
+ return xdmp:document-delete($search-uri-user)
+};
+
+declare function la:delete-shared-search($searchname) {
+ let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml")
+ return xdmp:document-delete($search-uri-shared)
+};
+
+declare function la:unsubscribe-and-delete-shared-search($searchname,$notificationurl) {
+ (la:unsubscribe($searchname,$notificationurl),la:delete-shared-search($searchname))
+};
+
+declare function la:unsubscribe-and-delete-search($searchname,$notificationurl) {
+ (la:unsubscribe($searchname,$notificationurl),la:delete-search($searchname))
+};
+
+declare function la:save-subscribe-search($searchdoc as cts:query,$searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) {
+ (: use current user on app server :)
+ (xdmp:invoke($SAVE-SEARCH-MODULE,
+ (xs:QName("my:searchdoc"),$searchdoc,xs:QName("my:searchname"),$searchname),
+ different-transaction
+ )
+ ,la:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type)
+ )
+};
+
+(: call the following from eval - different-transaction :)
+declare function la:do-save($searchdoc as cts:query,$searchname as xs:string) {
+ xdmp:document-insert(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"), document {$searchdoc} (: why not just this search doc? :)
+ ,xdmp:default-permissions(),
+ (xdmp:default-collections(),"saved-search") )
+};
+
+declare function la:subscribe($searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean {
+ la:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type)
+};
+
+declare function la:unsubscribe($searchname,$notificationurl) as xs:boolean {
+ (: NB supports multiple notification URLs. i.e. multiple UIs on same DB for same user :)
+ la:do-unsubscribe($notificationurl,$searchname)
+};
+
+(: This function intended to be called within a REST server - i.e. known DB
+ : Alert detail can be 'full' or 'snippet' which means either the full doc within the alert info container, or just the snippet information within the alert info container.
+ :)
+declare function la:do-subscribe-check($notificationurl as xs:string,$searchname as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean {
+ la:do-subscribe($notificationurl,"/modules/alert-generic-messaging.xqy",($alert-detail,"full")[1],($content-type,"application/json")[1],$searchname,"generic-alert-domain","rest-sitaware-modules",
+ cts:query((fn:doc(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"))/element(),fn:doc(fn:concat("/config/search/shared/",$searchname,".xml"))/element())[1] )
+ )
+};
+
+declare function la:do-add-action-rule($alert-name as xs:string,$notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$db as xs:unsignedLong,$searchdoc as cts:query?) as xs:boolean {
+
+ let $e2 := xdmp:invoke(
+ $CREATE-ACTION-MODULE,
+ (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:db"),db,xs:QName("my:options"),()),
+ different-transaction
+ )
+ let $e3 := xdmp:invoke(
+ $CREATE-RULE-NOTIFY-MODULE,
+ (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-detail"),$alert-detail,xs:QName("my:content-type"),$content-type,xs:QName("my:notificationurl"),$notificationurl,
+ xs:QName("my:searchname"),$searchname,xs:QName("my:searchdoc"),$searchdoc),
+ different-transaction
+ )
+ return fn:true()
+};
+
+declare function la:do-subscribe($notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$dbname as xs:string,$searchdoc as cts:query?) as xs:boolean {
+ let $alert-name := xdmp:invoke(
+ $CREATE-CONFIG-MODULE,
+ (xs:QName("my:shortname"),$searchname),
+ different-transaction
+ )
+ let $e2 := la:do-add-action-rule($alert-name,$notificationurl ,$alert-module,$alert-detail,$content-type,$searchname,$cpf-domain,$dbname,$searchdoc)
+ let $e4 := xdmp:invoke(
+ $CPF-ENABLE-MODULE,
+ (xs:QName("my:alert-name"),$alert-name,xs:QName("my:cpf-domain"),$cpf-domain),
+ different-transaction
+ )
+ let $log := xdmp:log(fn:concat("SUBSCRIBE LOGS: ",$alert-name,$e2,$e4))
+ return fn:true()
+};
+
+declare function la:do-unsubscribe($notificationurl as xs:string,$searchname as xs:string) as xs:boolean {
+ let $alert-name := fn:concat("/config/alerts/",xdmp:get-current-user(),"/",$searchname,"/",$notificationurl)
+
+ let $rr :=
+ for $rule in alert:get-all-rules($alert-name,cts:collection-query($alert-name))
+ return
+ alert:rule-remove($alert-name,$rule/@id)
+
+ let $l := xdmp:invoke(
+ $CONFIG-SET-CPF-DOMAIN-NAMES-MODULE,
+ (xs:QName("my:alert-name"),$alert-name),
+ different-transaction
+ )
+ return fn:true()
+};
+
+declare function la:create-rule-notify($alert-name as xs:string,$alert-detail as xs:string,$content-type as xs:string,
+ $notificationurl as xs:string,$searchname as xs:string,$searchdoc as cts:query) {
+
+ la:create-rule($alert-name,(:)$notificationurl,:) $searchdoc,(
+ element notificationurl {$notificationurl},
+ element searchname {$searchname},
+ element detail {$alert-detail},
+ element contenttype {$content-type}
+ ))
+};
+
+declare function la:get-alert($shortname as xs:string) as element(alert:config)? {
+ alert:config-get($shortname)
+};
+
+
+declare function la:do-create-config($shortname as xs:string) as xs:string {
+ let $rem := la:check-remove-config($shortname)
+ return
+ xdmp:invoke(
+ $CREATE-CONFIG-MODULE,
+ (xs:QName("my:shortname"),$shortname),
+ different-transaction
+ )
+};
+
+declare function la:do-create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) as empty-sequence() {
+ let $vars := map:map()
+ let $_ := map:put($vars,"options",$options)
+ let $_ := map:put($vars,"alert-name",$alert-name)
+ let $_ := map:put($vars,"query",$query)
+ return xdmp:invoke(
+ $CREATE-RULE-MODULE,
+ (xs:QName("my:vars"),$vars),
+ different-transaction
+ )
+};
+
+declare function la:do-create-action($alert-name as xs:string,$alert-module as xs:string,$moduledb as xs:unsignedLong,$options as element()*) {
+ xdmp:invoke(
+ $CREATE-ACTION-MODULE,
+ (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:db"),$moduledb,xs:QName("my:options"),($options)),
+ different-transaction
+ )
+};
+
+declare function la:check-remove-config($shortname as xs:string) {
+ let $alert-name := "/config/alerts/" || $shortname
+ let $config := xdmp:invoke($CONFIG-GET-MODULE,
+ (xs:QName("my:alert-name"),$alert-name),
+ different-transaction
+ )
+ return
+ if (fn:not(fn:empty($config))) then
+ (: Check if config used in a cpf domain, if so remove it from that domain :)
+ let $unreg := xdmp:invoke($CONFIG-SET-CPF-DOMAIN-NAMES-INSERT-MODULE,
+ (xs:QName("my:alert-name"),$alert-name),
+ different-transaction
+ )
+ (: Do this for each domain - NA all done in one hit:)
+ (: Now remove the alert config :)
+ return xdmp:invoke($CONFIG-DELETE-MODULE,
+ (xs:QName("my:alert-name"),$alert-name),
+ different-transaction
+ )
+ else ()
+};
+
+declare function la:create-config($shortname as xs:string) as xs:string {
+ (: add alert :)
+ let $alert-name := "/config/alerts/" || $shortname
+ let $config := alert:make-config(
+ $alert-name,
+ $alert-name || " configuration",
+ $alert-name || " configuration",
+ )
+ let $config-out := alert:config-insert($config)
+ return $alert-name
+};
+
+declare function la:cpf-enable($alert-name as xs:string,$cpf-domain as xs:string) {
+ alert:config-insert(
+ alert:config-set-cpf-domain-names(
+ alert:config-get($alert-name),
+ ($cpf-domain)))
+};
+
+declare function la:create-domain($domainname as xs:string,$domaintype as xs:string,$domainpath as xs:string,$domaindepth as xs:string,$pipeline-names as xs:string*,$modulesdb as xs:string) as xs:unsignedLong {
+
+ let $remove :=
+ try {
+ xdmp:invoke($REMOVE-DOMAIN-MODULE,
+ (xs:QName("my:processmodeluri"),$domainname),
+
+ {xdmp:triggers-database()}
+ different-transaction
+
+ )
+ } catch ($e) { ( xdmp:log("Error trying to remove domain: " || $domainname),xdmp:log($e) ) } (: catching domain throwing error if it doesn't exist. We can safely ignore this :)
+
+ (: Configure domain :)
+ return
+ xdmp:invoke($CONFIGURE-DOMAIN-MODULE,
+ (xs:QName("my:otherpipeline"),($pipeline-names[2]),xs:QName("my:mdb"),xdmp:database($modulesdb),xs:QName("my:pname"),$domainname,
+ xs:QName("my:type"),$domaintype,xs:QName("my:path"),$domainpath,xs:QName("my:depth"),$domaindepth
+ ),
+
+ {xdmp:triggers-database()}
+ different-transaction
+
+ ) (: end eval :)
+};
+
+declare function la:add-alert($shortname as xs:string,$query as cts:query,
+ $ruleoptions as element()*,$module as xs:string,$moduledb as xs:unsignedLong,$actionoptions as element()*) as xs:string {
+ let $name := la:do-create-config($shortname)
+ return
+ (
+ la:do-create-action($name,$module,$moduledb,$actionoptions),
+ la:do-create-rule($name,$query,$ruleoptions),
+ $name
+ )
+};
+
+declare function la:create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) {
+ let $rule := alert:make-rule(
+ fn:concat($alert-name,"-rule"),
+ $alert-name || " rule",
+ 0, (: equivalent to xdmp:user(xdmp:get-current-user()) :)
+ $query,
+ fn:concat($alert-name,"-action"),
+
+ {
+ $options
+ }
+ )
+ return alert:rule-insert($alert-name, $rule)
+};
+
+declare function la:create-action($alert-name as xs:string,$alert-module as xs:string,$db as xs:unsignedLong,$options as element()*) {
+ let $action := alert:make-action(
+ fn:concat($alert-name,"-action"),
+ $alert-name || " action",
+ $db,
+ "/",
+ $alert-module,
+ {$options} )
+ return alert:action-insert($alert-name, $action)
+};
\ No newline at end of file
diff --git a/modules/app/models/lib-alerts.xqy b/modules/app/models/lib-alerts.xqy
deleted file mode 100644
index 3008b73..0000000
--- a/modules/app/models/lib-alerts.xqy
+++ /dev/null
@@ -1,101 +0,0 @@
-xquery version "1.0-ml";
-
-module namespace ss = "http://marklogic.com/alerts/alerts";
-
-import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
-
-declare namespace my="http://marklogic.com/alerts";
-
-
-declare function ss:add-alert($shortname as xs:string,$query as schema-element(cts:query),
- $ruleoptions as element()*,$module as xs:string,$moduledb as xs:unsignedLong,$actionoptions as element()*) as xs:string {
-
- let $name := ss:do-create-config($shortname)
- return
- (
- ss:do-create-rule($name,$query,$ruleoptions),
- ss:do-create-action($name,$module,$moduledb,$actionoptions),
- $name
- )
-};
-
-
-declare function ss:do-create-config($shortname as xs:string) as xs:string {
- xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace ah = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:shortname as xs:string external;' ||
- 'ah:create-config($my:shortname)',
- (xs:QName("my:shortname"),$shortname),
- different-transaction
- )
-};
-
-declare function ss:do-create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) {
- xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace ah = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:alert-name as xs:string external;' ||
- 'declare variable $my:query as cts:query external;' ||
- 'declare variable $my:options as element* external;' ||
- 'ah:create-rule($my:alert-name,$my:query,$my:options)',
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:query"),$query,xs:QName("my:options"),$options),
- different-transaction
- )
-};
-
-declare function ss:do-create-action($alert-name as xs:string,$alert-module as xs:string,$db as xs:unsignedLong,$options as element()*) {
- xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace ah = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:alert-name as xs:string external;' ||
- 'declare variable $my:alert-module as xs:string external;' ||
- 'declare variable $my:db as xs:unsignedLong external;' ||
- 'declare variable $my:options as element* external;' ||
- 'ah:create-action($my:alert-name,$my:alert-module,$my:db,$my:options)',
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:db"),$db,xs:QName("my:options"),$options),
- different-transaction
- )
-};
-
-declare function ss:create-config($shortname as xs:string) as xs:string {
- (: add alert :)
- let $alert-name := "/config/alerts/" || $shortname
- let $config := alert:make-config(
- $alert-name,
- $alert-name || " configuration",
- $alert-name || " configuration",
- )
- let $config-out := alert:config-insert($config)
- return $alert-name
-};
-
-declare function ss:create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) {
-
- let $rule := alert:make-rule(
- fn:concat($alert-name,"-rule"),
- $alert-name || " rule",
- 0, (: equivalent to xdmp:user(xdmp:get-current-user()) :)
- $query,
- fn:concat($alert-name,"-action"),
-
- {
- $options
- }
- )
- return alert:rule-insert($alert-name, $rule)
-};
-
-declare function ss:create-action($alert-name as xs:string,$alert-module as xs:string,$db as xs:string,$options as element()*) {
- let $action := alert:make-action(
- fn:concat($alert-name,"-action"),
- $alert-name || " action",
- $db,
- "/",
- $alert-module,
- {$options} )
- return alert:action-insert($alert-name, $action)
-};
diff --git a/modules/app/models/lib-search-subscribe.xqy b/modules/app/models/lib-search-subscribe.xqy
deleted file mode 100644
index 347c856..0000000
--- a/modules/app/models/lib-search-subscribe.xqy
+++ /dev/null
@@ -1,466 +0,0 @@
-xquery version "1.0-ml";
-
-module namespace ss = "http://marklogic.com/search/subscribe";
-
-import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";
-
-declare namespace my="http://marklogic.com/alerts";
-
-import module namespace search = "http://marklogic.com/appservices/search"
- at "/MarkLogic/appservices/search/search.xqy";
-
-
-
-
-
-(: Specific example methods for creating the search object to be saved :)
-
-declare function ss:create-collection-search($collection as xs:string) {
- cts:collection-query($collection)
-};
-
-(: Default search grammar :)
-declare function ss:create-basic-search($query as xs:string) {
- search:parse($query)
-};
-
-(: same as from lib-adhoc-alerts.xqy - lon/lat/radius :)
-declare function ss:create-geo-near-search($ns as xs:string,$elname as xs:string, $latattr as xs:string,$lonattr as xs:string,
- $lat as xs:double,$lon as xs:double, $radiusmiles as xs:double) {
- cts:element-geospatial-query(fn:QName($ns,$elname),cts:circle($radiusmiles, cts:point($lat, $lon)))
-};
-
-
-
-
-
-
-
-
-(: Search persisting functions :)
-
-declare function ss:save-search($searchdoc, $searchname as xs:string) as xs:string {
- (: use current user on app server :)
- let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml")
- let $l := xdmp:log($search-uri-user)
- let $result := xdmp:document-insert($search-uri-user,
- element ss:saved-search {
- attribute name {$searchname},
- attribute uri {$search-uri-user},
- $searchdoc
- }
- ,xdmp:default-permissions(),
- (xdmp:default-collections(),"saved-search")
- )
- return $search-uri-user
-};
-
-declare function ss:save-shared-search($searchdoc, $searchname as xs:string) as xs:string {
- let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml")
- let $result := xdmp:document-insert($search-uri-shared,
- element ss:saved-search {
- attribute name {$searchname},
- attribute uri {$search-uri-shared},
- $searchdoc
- }
- ,xdmp:default-permissions(),
- (xdmp:default-collections(),"saved-search")
- )
- return $search-uri-shared
-};
-
-declare function ss:get-saved-searches() {
- cts:search(fn:collection("saved-search"),cts:directory-query(fn:concat("/config/search/",xdmp:get-current-user(),"/"),"1"))/ss:saved-search
-};
-
-declare function ss:get-shared-searches() {
- cts:search(fn:collection("saved-search"),cts:directory-query("/config/search/shared/","1"))/ss:saved-search
-};
-
-declare function ss:delete-search($searchname) {
- let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml")
- return xdmp:document-delete($search-uri-user)
-};
-
-declare function ss:delete-shared-search($searchname) {
- let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml")
- return xdmp:document-delete($search-uri-shared)
-};
-
-
-
-
-
-(: Utility functions :)
-
-declare function ss:unsubscribe-and-delete-shared-search($searchname,$notificationurl) {
- (ss:unsubscribe($searchname,$notificationurl),ss:delete-shared-search($searchname))
-};
-
-declare function ss:unsubscribe-and-delete-search($searchname,$notificationurl) {
- (ss:unsubscribe($searchname,$notificationurl),ss:delete-search($searchname))
-};
-
-declare function ss:save-subscribe-search($searchdoc as cts:query,$searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) {
- (: use current user on app server :)
- ( xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'declare variable $my:searchdoc as cts:query external;declare variable $my:searchname as xs:string external;',
- 'ah:do-save($my:searchdoc,$my:searchname)'),
- (xs:QName("my:searchdoc"),$searchdoc,xs:QName("my:searchname"),$searchname),
- different-transaction
- )
- ,ss:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type)
- )
-};
-
-(: call the following from eval - different-transaction :)
-declare function ss:do-save($searchdoc as cts:query,$searchname as xs:string) {
- xdmp:document-insert(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"),
- (:element ss:saved-search {
- attribute name {$searchname},
- (:attribute uri {$search-uri-user},:)
- $searchdoc
- }:) document {$searchdoc} (: why not just this search doc? :)
- ,xdmp:default-permissions(),
- (xdmp:default-collections(),"saved-search") )
-};
-
-
-
-
-(: subscription methods :)
-
-declare function ss:subscribe($searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean {
- ss:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type)
-};
-
-declare function ss:unsubscribe($searchname,$notificationurl) as xs:boolean {
- (: NB supports multiple notification URLs. i.e. multiple UIs on same DB for same user :)
- ss:do-unsubscribe($notificationurl,$searchname)
-};
-
-
-
-
-
-
-
-(: internal functions - not to be called by anything outside of this module :)
-
-(: This function intended to be called within a REST server - i.e. known DB
- : Alert detail can be 'full' or 'snippet' which means either the full doc within the alert info container, or just the snippet information within the alert info container.
- :)
-declare function ss:do-subscribe-check($notificationurl as xs:string,$searchname as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean {
- ss:do-subscribe($notificationurl,"/modules/alert-generic-messaging.xqy",($alert-detail,"full")[1],($content-type,"application/json")[1],$searchname,"generic-alert-domain","rest-sitaware-modules",
- cts:query((fn:doc(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"))/element(),fn:doc(fn:concat("/config/search/shared/",$searchname,".xml"))/element())[1] )
- )
-};
-
-declare function ss:do-add-action-rule($alert-name as xs:string,$notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$dbname as xs:string,$searchdoc as cts:query?) as xs:boolean {
-
- let $e2 := xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'declare variable $my:alert-name as xs:string external;declare variable $my:alert-module as xs:string external;declare variable $my:dbname as xs:string external;',
- 'ah:create-action($my:alert-name,$my:alert-module,$my:dbname,())'),
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:dbname"),$dbname),
- different-transaction
- )
- let $e3 := xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'declare variable $my:alert-name as xs:string external;declare variable $my:alert-detail as xs:string external;declare variable $my:content-type as xs:string external;',
- 'declare variable $my:notificationurl as xs:string external;declare variable $my:searchname as xs:string external;declare variable $my:searchdoc as cts:query external;',
- 'ah:create-rule-notify($my:alert-name,$my:alert-detail,$my:content-type,$my:notificationurl,$my:searchname,$my:searchdoc)'),
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-detail"),$alert-detail,xs:QName("my:content-type"),$content-type,xs:QName("my:notificationurl"),$notificationurl,
- xs:QName("my:searchname"),$searchname,xs:QName("my:searchdoc"),$searchdoc),
- different-transaction
- )
- return fn:true()
-};
-
-declare function ss:do-subscribe($notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$dbname as xs:string,$searchdoc as cts:query?) as xs:boolean {
- let $alert-name := xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'declare variable $my:notificationurl as xs:string external;declare variable $my:searchname as xs:string external;',
- 'ah:create-config($my:notificationurl,$my:searchname)'),
- (xs:QName("my:notificationurl"),$notificationurl,xs:QName("my:searchname"),$searchname),
- different-transaction
- )
- let $e2 := ss:do-add-action-rule($alert-name,$notificationurl ,$alert-module,$alert-detail,$content-type,$searchname,$cpf-domain,$dbname,$searchdoc)
- let $e4 := xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'declare variable $my:alert-name as xs:string external;declare variable $my:cpf-domain as xs:string external;',
- 'ah:cpf-enable($my:alert-name,$my:cpf-domain)'),
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:cpf-domain"),$cpf-domain),
- different-transaction
- )
- let $log := xdmp:log(fn:concat("SUBSCRIBE LOGS: ",$alert-name,$e2,$e4))
- return fn:true()
-};
-
-declare function ss:do-unsubscribe($notificationurl as xs:string,$searchname as xs:string) as xs:boolean {
- let $alert-name := fn:concat("/config/alerts/",xdmp:get-current-user(),"/",$searchname,"/",$notificationurl)
-
- let $rr :=
- for $rule in alert:get-all-rules($alert-name,cts:collection-query($alert-name))
- return
- alert:rule-remove($alert-name,$rule/@id)
-
- let $l := xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";',
- 'declare variable $my:alert-name as xs:string external;',
- 'alert:config-set-cpf-domain-names(alert:config-get($my:alert-name), ())'),
- (xs:QName("my:alert-name"),$alert-name),
- different-transaction
- )(:)
- let $e1 := xdmp:eval(
- fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";',
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";',
- 'declare variable $my:alert-name as xs:string external;',
- 'alert:config-delete($my:alert-name)'),
- (xs:QName("my:alert-name"),$alert-name),
- different-transaction
- )
- :)
- (:)
- let $d := alert:config-delete($alert-name):)
- return fn:true()
-};
-
-declare function ss:create-rule-notify($alert-name as xs:string,$alert-detail as xs:string,$content-type as xs:string,
- $notificationurl as xs:string,$searchname as xs:string,$searchdoc as cts:query) {
- (:
- let $searchdoc := cts:search(fn:collection("saved-search"),cts:directory-query(fn:concat("/config/search/",xdmp:get-current-user(),"/"),"1"))/ss:saved-search
- let $searchdoc := if ($searchdoc) then $searchdoc else cts:search(fn:collection("saved-search"),cts:directory-query("/config/search/shared/","1"))/ss:saved-search
- :)
-
- ss:create-rule($alert-name,(:)$notificationurl,:) $searchdoc,(
- element notificationurl {$notificationurl},
- element searchname {$searchname},
- element detail {$alert-detail},
- element contenttype {$content-type}
- ))
-};
-
-
-
-
-(: GENERIC ALERTING FUNCTIONS BELOW THIS POINT :)
-
-
-
-
-
-declare function ss:add-alert($shortname as xs:string,$query as cts:query,
- $ruleoptions as element()*,$module as xs:string,$moduledbname as xs:string?,$actionoptions as element()*) as xs:string {
-
- let $name := ss:do-create-config($shortname)
- let $_ := (
- ss:do-create-action($name,$module,$moduledbname,$actionoptions)
- ,
- ss:do-create-rule($name,$query,$ruleoptions)
- )
- return $name
-};
-
-declare function ss:get-alert($shortname as xs:string) as element(alert:config)? {
- alert:config-get($shortname)
-};
-
-
-declare function ss:do-create-config($shortname as xs:string) as xs:string {
- let $rem := ss:check-remove-config($shortname)
- return
- xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace ah = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:shortname as xs:string external;' ||
- 'ah:create-config($my:shortname)',
- (xs:QName("my:shortname"),$shortname),
- different-transaction
- )
-};
-
-declare function ss:do-create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) as empty-sequence() {
- xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace ah = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:alert-name as xs:string external;' ||
- 'declare variable $my:query as cts:query external;' ||
- (:)'declare variable $my:options as element()* external;' ||:)
- 'ah:create-rule($my:alert-name,$my:query,())',
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:query"),$query (:,xs:QName("my:options"),($options) :) ),
- different-transaction
- )
-};
-
-declare function ss:do-create-action($alert-name as xs:string,$alert-module as xs:string,$dbname as xs:string?,$options as element()*) {
- xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace ah = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:alert-name as xs:string external;' ||
- 'declare variable $my:alert-module as xs:string external;' ||
- 'declare variable $my:dbname as xs:string external;' ||
- 'declare variable $my:options as element()* external;' ||
- 'ah:create-action($my:alert-name,$my:alert-module,$my:dbname,$my:options)',
- (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:dbname"),$dbname,xs:QName("my:options"),($options)),
- different-transaction
- )
-};
-
-declare function ss:check-remove-config($shortname as xs:string) {
- let $alert-name := "/config/alerts/" || $shortname
- let $config := alert:config-get($alert-name)
- return
- if (fn:not(fn:empty($config))) then
- (: Check if config used in a cpf domain, if so remove it from that domain :)
- let $unreg := xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:alert-name as xs:string external;' ||
- 'alert:config-insert(' ||
- ' alert:config-set-cpf-domain-names(alert:config-get($my:alert-name),())' ||
- ')',
- (xs:QName("my:alert-name"),$alert-name),
- different-transaction
- )
- (: Do this for each domain - NA all done in one hit:)
- (: Now remove the alert config :)
- return xdmp:eval(
- 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' ||
- 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' ||
- 'declare variable $my:alert-name as xs:string external;' ||
- 'alert:config-delete($my:alert-name)',
- (xs:QName("my:alert-name"),$alert-name),
- different-transaction
- )
- else ()
-};
-
-declare function ss:create-config($shortname as xs:string) as xs:string {
- (: add alert :)
- let $alert-name := "/config/alerts/" || $shortname
- let $config := alert:make-config(
- $alert-name,
- $alert-name || " configuration",
- $alert-name || " configuration",
- )
- let $config-out := alert:config-insert($config)
- return $alert-name
-};
-
-declare function ss:create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) as empty-sequence() {
-
- let $rule := alert:make-rule(
- fn:concat($alert-name,"-rule"),
- $alert-name || " rule",
- 0, (: equivalent to xdmp:user(xdmp:get-current-user()) :)
- $query,
- fn:concat($alert-name,"-action"),
-
- {
- $options
- }
- )
- return alert:rule-insert($alert-name, $rule)
-};
-
-declare function ss:create-action($alert-name as xs:string,$alert-module as xs:string,$dbname as xs:string?,$options as element()*) {
- let $action := alert:make-action(
- fn:concat($alert-name,"-action"),
- $alert-name || " action",
- (xdmp:database($dbname),xdmp:modules-database())[1],
- "/",
- $alert-module,
- {$options} )
- return alert:action-insert($alert-name, $action)
-};
-
-
-
-
-
-declare function ss:cpf-enable($alert-name as xs:string,$cpf-domain as xs:string) {
- alert:config-insert(
- alert:config-set-cpf-domain-names(
- alert:config-get($alert-name),
- ($cpf-domain)))
-};
-
-declare function ss:create-domain($domainname as xs:string,$domaintype as xs:string,$domainpath as xs:string,$domaindepth as xs:string,$pipeline-names as xs:string*,$modulesdb as xs:string) as xs:unsignedLong {
-
- (: check if domain already exists and recreate :)
- let $remove :=
- try {
- if (fn:not(fn:empty(
- xdmp:eval(
- 'xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts"; import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";declare variable $m:processmodeluri as xs:string external; dom:get($m:processmodeluri)'
- ,
- (xs:QName("my:processmodeluri"),$domainname),
-
- {xdmp:triggers-database()}
- different-transaction
-
- )
- ))) then
- let $_ := xdmp:log(" GOT DOMAIN TO REMOVE")
- return
- xdmp:eval(
- 'xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts"; import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";declare variable $m:processmodeluri as xs:string external;'
- ||
- 'dom:remove($m:processmodeluri)'
- ,
- (xs:QName("my:processmodeluri"),$domainname),
-
- {xdmp:triggers-database()}
- different-transaction
-
- )
- else
- ()
- } catch ($e) { ( xdmp:log("Error trying to remove domain: " || $domainname),xdmp:log($e) ) } (: catching domain throwing error if it doesn't exist. We can safely ignore this :)
-
-
- (: Create domain :)
-
- (: Configure domain :)
- return
- xdmp:eval(
- 'xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts";' ||
- 'import module namespace p="http://marklogic.com/cpf/pipelines" at "/MarkLogic/cpf/pipelines.xqy"; '||
- 'import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy"; ' ||
- 'declare variable $m:pname as xs:string external;declare variable $m:pnames as xs:string* external;' ||
- 'declare variable $m:mdb as xs:unsignedLong external;'||
- 'declare variable $m:type as xs:string external;' ||
- 'declare variable $m:path as xs:string external;' ||
- 'declare variable $m:otherpipeline as xs:string external;' ||
- 'declare variable $m:depth as xs:string external;' ||
- 'let $_ := xdmp:log("In eval") ' ||
- (:)'let $pids := for $pn in $m:pnames ' ||
- ' return xs:unsignedLong(p:pipelines()[p:pipeline-name = $pn]/p:pipeline-id) ' || :)
- 'let $pids := ' ||
- '(xs:unsignedLong(p:pipelines()[p:pipeline-name = "Status Change Handling"]/p:pipeline-id),xs:unsignedLong(p:pipelines()[p:pipeline-name = $m:otherpipeline]/p:pipeline-id))' ||
- 'let $_ := xdmp:log("second point")' ||
- 'let $ds := dom:domain-scope($m:type,$m:path,$m:depth) ' ||
- 'let $_ := xdmp:log("third point")' ||
- 'let $ec := dom:evaluation-context($m:mdb,"/")' ||
- 'let $_ := xdmp:log("fourth point")' ||
- 'let $dc := dom:create($m:pname,"Domain for "||$m:pname,' ||
- ' $ds,$ec,$pids,())' ||
- 'let $_ := xdmp:log("fifth point")' ||
- 'return $dc'
- ,
- (xs:QName("my:otherpipeline"),($pipeline-names[2]),xs:QName("my:mdb"),xdmp:database($modulesdb),xs:QName("my:pname"),$domainname,
- xs:QName("my:type"),$domaintype,xs:QName("my:path"),$domainpath,xs:QName("my:depth"),$domaindepth
- ),
-
- {xdmp:triggers-database()}
- different-transaction
-
- ) (: end eval :)
-
-};
diff --git a/modules/app/models/remove-domain.xqy b/modules/app/models/remove-domain.xqy
new file mode 100644
index 0000000..dea01dd
--- /dev/null
+++ b/modules/app/models/remove-domain.xqy
@@ -0,0 +1,9 @@
+xquery version "1.0-ml";
+
+declare namespace m="http://marklogic.com/alerts";
+
+import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";
+
+declare variable $m:processmodeluri as xs:string external;
+
+dom:remove($m:processmodeluri)
\ No newline at end of file
diff --git a/modules/app/models/save-search.xqy b/modules/app/models/save-search.xqy
new file mode 100644
index 0000000..f20d37b
--- /dev/null
+++ b/modules/app/models/save-search.xqy
@@ -0,0 +1,10 @@
+xquery version "1.0-ml";
+
+declare namespace my="http://marklogic.com/alerts";
+
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
+
+declare variable $my:searchdoc as cts:query external;
+declare variable $my:searchname as xs:string external;
+
+la:do-save($my:searchdoc,$my:searchname)
\ No newline at end of file
diff --git a/modules/app/models/workflow-import.xqy b/modules/app/models/workflow-import.xqy
index 1b87962..64086a5 100644
--- a/modules/app/models/workflow-import.xqy
+++ b/modules/app/models/workflow-import.xqy
@@ -10,12 +10,10 @@ declare namespace b2="http://www.omg.org/spec/BPMN/20100524/MODEL";
import module namespace p="http://marklogic.com/cpf/pipelines" at "/MarkLogic/cpf/pipelines.xqy";
import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";
+import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
import module namespace stack="http://marklogic.com/stack" at "/app/models/lib-stack.xqy";
-
-import module namespace ss = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";
-
(: TODO replace following outgoing routes with call to m:b2getNextSteps() :)
(: REST API OR XQUERY PUBLIC API FUNCTIONS :)
@@ -189,7 +187,7 @@ declare function m:convert-to-cpf($processmodeluri as xs:string,$major as xs:str
declare function m:subscribe-process($subscriptionName as xs:string, $processuri as xs:string,$query as element(cts:query)) as xs:unsignedLong {
(: TODO remove existing config with same subscription name, if it exists :)
- ss:add-alert($subscriptionName,$query,(),"/app/models/action-process.xqy",xdmp:modules-database(),
+ la:add-alert($subscriptionName,$query,(),"/app/models/action-process.xqy",xdmp:modules-database(),
{$processuri})
};
diff --git a/modules/app/models/workflow-util.xqy b/modules/app/models/workflow-util.xqy
index 9ad6e3f..c079a50 100644
--- a/modules/app/models/workflow-util.xqy
+++ b/modules/app/models/workflow-util.xqy
@@ -6,7 +6,7 @@ import module namespace cpf = "http://marklogic.com/cpf" at "/MarkLogic/cpf/cpf.
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
-import module namespace ss = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";
+import module namespace ss = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy";
declare namespace prop = "http://marklogic.com/xdmp/property";
declare namespace wf="http://marklogic.com/workflow";
@@ -57,7 +57,7 @@ declare function m:createAlertingDomain($name as xs:string,$type as xs:string,$p
: Create a new process subscription
:)
declare function m:createSubscription($pipelineName as xs:string,$name as xs:string,$domainname as xs:string,$query as cts:query) as xs:string {
- let $alert-uri := ss:add-alert($name,$query,(),"/app/models/alert-action-process.xqy",xdmp:database-name(xdmp:modules-database()),
+ let $alert-uri := ss:add-alert($name,$query,(),"/app/models/alert-action-process.xqy",xdmp:modules-database(),
({$pipelineName}))
let $alert-enabled := ss:cpf-enable($alert-uri,$domainname)
return $alert-uri