Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Maarch
maarchRM
Commits
06551d30
Commit
06551d30
authored
Dec 08, 2021
by
Arnaud Pauget
Browse files
Merge branch 'feat/18442_Notifications' into 'develop'
Feat/18442 notifications See merge request
!699
parents
0410165e
42bad98e
Pipeline
#14855
failed with stages
in 39 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
data/maarchRM/conf/configuration.ini.default
View file @
06551d30
...
...
@@ -616,6 +616,28 @@ chainJournalByOrganization = false;
chainWithTimestamp = false;
; timestampService = dependency/timestamp/plugins/TsaClient
; Notifications
;notifications = "[
; {
; 'filter': {
; 'eventType': 'recordsManagement/integrityCheck'
; },
; 'title': 'Integrity check',
; 'recipients': ['Info <info@maarch.org>'],
; 'message' : 'This is a simple plain text mesage with no variable'
; },
; {
; 'filter': {
; 'eventType': 'recordsManagement/integrityCheck'
; },
; 'title': 'Integrity check',
; 'recipients': '../data/maarchRM/notifications/simple_recipients.php',
; 'message' : {
; 'template': '../data/maarchRM/notifications/simple.html',
; 'sources': '../data/maarchRM/notifications/simple_sources.php'
; }
; }
;]"
[organization]
...
...
data/maarchRM/notifications/simple.html
0 → 100644
View file @
06551d30
<div>
This is a sample message
to notify
<?merge event.accountId ?>
that a
<b>
<?merge event.eventType ?>
</b>
was performed on
<?merge event.objectClass ?>
<?merge event.objectId ?>
Now let's use clearer informations:
-
<?merge account.displayName ?>
</div>
\ No newline at end of file
data/maarchRM/notifications/simple_recipients.php
0 → 100644
View file @
06551d30
<?php
$accountController
=
\
laabs
::
newController
(
'auth/userAccount'
);
$orgController
=
\
laabs
::
newController
(
'organization/organization'
);
$archiveController
=
\
laabs
::
newController
(
'recordsManagement/archive'
);
$archive
=
$archiveController
->
read
(
$event
->
objectId
);
$originatorUserPositions
=
$orgController
->
readUserPositions
(
$archive
->
originatorOrgRegNumber
);
$recipients
=
[];
foreach
(
$originatorUserPositions
as
$originatorUserPosition
)
{
$account
=
$accountController
->
get
(
$originatorUserPosition
->
userAccountId
);
$recipients
[]
=
$account
->
emailAddress
;
}
return
$recipients
;
data/maarchRM/notifications/simple_sources.php
0 → 100644
View file @
06551d30
<?php
$accountController
=
\
laabs
::
newController
(
'auth/userAccount'
);
$account
=
$accountController
->
get
(
$event
->
accountId
);
return
[
'account'
=>
$account
,
];
dependency/notification/Adapter/Mailer/Notification.php
View file @
06551d30
...
...
@@ -76,6 +76,8 @@ class Notification implements \dependency\notification\NotificationInterface
$mail
->
SMTPAuth
=
$this
->
mailSMTPAuth
;
$mail
->
SMTPSecure
=
$this
->
mailSMTPSecure
;
$mail
->
SMTPAutoTLS
=
$this
->
mailSMTPAutoTLS
;
$mail
->
CharSet
=
"utf-8"
;
$mail
->
IsHTML
(
true
);
if
(
empty
(
$receivers
))
{
$mail
->
addAddress
(
$this
->
mailAdminReceiver
);
...
...
src/bundle/batchProcessing/Controller/notification.php
View file @
06551d30
...
...
@@ -78,7 +78,7 @@ class notification
$notification
->
title
=
$title
;
$notification
->
message
=
$message
;
$notification
->
receivers
=
\
laabs\implode
(
" "
,
$receivers
);
$notification
->
receivers
=
json_encode
(
$receivers
);
$this
->
sdoFactory
->
create
(
$notification
,
"batchProcessing/notification"
);
...
...
@@ -96,7 +96,7 @@ class notification
foreach
(
$notifications
as
$notification
)
{
$notification
->
status
=
self
::
_PROCESSING_
;
$this
->
sdoFactory
->
update
(
$notification
,
"batchProcessing/notification"
);
$this
->
notificationDependency
->
send
(
$notification
->
title
,
$notification
->
message
,
\
laabs\explode
(
" "
,
$notification
->
receivers
));
$this
->
notificationDependency
->
send
(
$notification
->
title
,
$notification
->
message
,
json_decode
(
$notification
->
receivers
));
$notification
->
status
=
self
::
_CLOSE_
;
$notification
->
sendDate
=
\
laabs
::
newDateTime
();
$notification
->
sendBy
=
\
laabs
::
getToken
(
"AUTH"
)
->
accountId
;
...
...
src/bundle/lifeCycle/Controller/eventNotifier.php
0 → 100644
View file @
06551d30
<?php
/*
* Copyright (C) 2015 Maarch
*
* This file is part of bundle lifeCycle.
*
* Bundle lifeCycle is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Bundle lifeCycle is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with bundle lifeCycle. If not, see <http://www.gnu.org/licenses/>.
*/
namespace
bundle\lifeCycle\Controller
;
/**
* Class of archives life cycle journal
*
* @author Prosper DE LAURE <prosper.delaure@maarch.org>
*/
class
eventNotifier
{
protected
$sdoFactory
;
protected
$notifications
;
protected
$notificationController
;
/**
* Constructs a new event notifier
*/
public
function
__construct
(
\
dependency\sdo\Factory
$sdoFactory
,
$notifications
=
[])
{
$this
->
sdoFactory
=
$sdoFactory
;
$this
->
notifications
=
$notifications
;
$this
->
notificationController
=
\
laabs
::
newController
(
'batchProcessing/notification'
);
}
/**
* Sends a notification or not
* @param lifeCycle/event $event
*
*/
public
function
dispatch
(
$event
)
{
$notifications
=
$this
->
selectNotifications
(
$event
);
foreach
(
$notifications
as
$notification
)
{
$this
->
sendNotification
(
$notification
,
$event
);
}
}
protected
function
selectNotifications
(
$event
)
{
$notifications
=
[];
foreach
(
$this
->
notifications
as
$notification
)
{
// check if a rule matches the event
if
(
!
isset
(
$notification
[
'filter'
])
||
empty
(
$notification
[
'filter'
]))
{
continue
;
}
if
(
!
$this
->
matchFilter
(
$notification
[
'filter'
],
$event
))
{
continue
;
}
$notifications
[]
=
$notification
;
}
return
$notifications
;
}
protected
function
matchFilter
(
$filter
,
$event
)
{
foreach
(
$filter
as
$name
=>
$value
)
{
if
(
!
$this
->
matchAssert
(
$event
,
$name
,
$value
))
{
return
;
}
}
return
true
;
}
protected
function
matchAssert
(
$event
,
$name
,
$value
)
{
if
(
is_string
(
$value
))
{
return
(
$event
->
{
$name
}
==
$value
);
}
}
protected
function
sendNotification
(
$notification
,
$event
)
{
if
(
is_array
(
$notification
[
'recipients'
]))
{
$recipients
=
$notification
[
'recipients'
];
}
else
{
$recipients
=
include
$notification
[
'recipients'
];
}
if
(
empty
(
$recipients
))
{
return
;
}
$subject
=
$notification
[
'title'
]
??
'Notification'
;
$message
=
''
;
if
(
isset
(
$notification
[
'message'
]))
{
if
(
is_string
(
$notification
[
'message'
]))
{
$message
=
$notification
[
'message'
];
}
else
{
$template
=
\
laabs
::
newService
(
'dependency/html/Document'
);
$template
->
setSource
(
'event'
,
$event
);
$template
->
setSource
(
'recipients'
,
$recipients
);
$message
=
$this
->
composeMessage
(
$notification
[
'message'
],
$template
,
$event
);
}
}
$this
->
notificationController
->
create
(
$subject
,
$message
,
$recipients
);
}
protected
function
composeMessage
(
$message
,
$template
,
$event
)
{
$htmlTemplate
=
file_get_contents
(
$message
[
'template'
]);
$template
->
loadHTML
(
$htmlTemplate
);
if
(
isset
(
$message
[
'sources'
]))
{
$sources
=
include
$message
[
'sources'
];
foreach
(
$sources
as
$name
=>
$source
)
{
$template
->
setSource
(
$name
,
$source
);
}
}
$template
->
merge
();
$message
=
$template
->
saveHTML
();
return
$message
;
}
}
\ No newline at end of file
src/bundle/lifeCycle/Controller/journal.php
View file @
06551d30
...
...
@@ -45,6 +45,8 @@ class journal
protected
$journals
;
protected
$eventNotifier
;
/**
* Constructor
* @param \dependency\sdo\Factory $sdoFactory The sdo factory
...
...
@@ -65,6 +67,8 @@ class journal
foreach
(
$this
->
eventFormats
as
$eventFormat
)
{
$eventFormat
->
format
=
explode
(
' '
,
$eventFormat
->
format
);
}
$this
->
eventNotifier
=
\
laabs
::
newController
(
"lifeCycle/eventNotifier"
);
}
/**
...
...
@@ -158,6 +162,8 @@ class journal
$this
->
sdoFactory
->
create
(
$event
);
$this
->
eventNotifier
->
dispatch
(
$event
);
if
(
!
$operationResult
&&
$eventFormat
->
notification
==
true
)
{
$this
->
notify
(
$event
);
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment