mirror of https://github.com/MISP/MISP
fix: [notification] Do not send email when no new event for period
parent
737228ef01
commit
4e7af6e87a
|
@ -608,6 +608,9 @@ class ServerShell extends AppShell
|
|||
foreach ($users as $user) {
|
||||
echo __('Sending `%s` report to `%s`', $period, $user['User']['email']) . PHP_EOL;
|
||||
$emailTemplate = $this->User->generatePeriodicSummary($user['User']['id'], $period, false);
|
||||
if ($emailTemplate === null) {
|
||||
continue; // no new event for this user
|
||||
}
|
||||
$this->User->sendEmail($user, $emailTemplate, false, null);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1662,19 +1662,9 @@ class User extends AppModel
|
|||
'trending_period_amount' => 2,
|
||||
];
|
||||
|
||||
$periodicSettings = $this->UserSetting->find('first', [
|
||||
'recursive' => -1,
|
||||
'conditions' => [
|
||||
'user_id' => $userId,
|
||||
'setting' => self::PERIODIC_USER_SETTING_KEY,
|
||||
],
|
||||
'fields' => ['value'],
|
||||
]);
|
||||
if (empty($periodicSettings)) {
|
||||
$periodicSettings = $defaultPeriodicSettings;
|
||||
} else {
|
||||
$periodicSettings = $periodicSettings['UserSetting']['value'];
|
||||
}
|
||||
$periodicSettings = $this->UserSetting->getValueForUser($userId, self::PERIODIC_USER_SETTING_KEY);
|
||||
$periodicSettings = $periodicSettings ?: $defaultPeriodicSettings;
|
||||
|
||||
$periodicSettingsIndexed = [];
|
||||
foreach ($filterNames as $filterName) {
|
||||
$periodicSettingsIndexed[$filterName] = $periodicSettings[$filterName] ?? $defaultPeriodicSettings[$filterName];
|
||||
|
@ -1785,11 +1775,12 @@ class User extends AppModel
|
|||
* @param int $userId
|
||||
* @param string $period Can be 'daily', 'weekly' or 'monthly'
|
||||
* @param bool $rendered When false, instance of SendEmailTemplate will returned
|
||||
* @return string|SendEmailTemplate
|
||||
* @return string|SendEmailTemplate|null
|
||||
* @throws NotFoundException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws JsonException
|
||||
*/
|
||||
public function generatePeriodicSummary(int $userId, string $period, $rendered=true)
|
||||
public function generatePeriodicSummary(int $userId, string $period, $rendered = true)
|
||||
{
|
||||
$allowedPeriods = array_map(function($period) {
|
||||
return substr($period, strlen('notification_'));
|
||||
|
@ -1813,6 +1804,10 @@ class User extends AppModel
|
|||
$filters['includeScoresOnEvent'] = true;
|
||||
$events = $this->Event->fetchEvent($user, $filters);
|
||||
|
||||
if (empty($events)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$elementCounter = 0;
|
||||
$renderView = false;
|
||||
$filtersForRestSearch['publish_timestamp'] = $filtersForRestSearch['last'];
|
||||
|
@ -1837,7 +1832,7 @@ class User extends AppModel
|
|||
$securityRecommendationsData = [
|
||||
'course_of_action' => $this->Event->extractRelatedCourseOfActions($events),
|
||||
];
|
||||
$security_recommendations = $this->__renderSecurityRecommenrations($securityRecommendationsData);
|
||||
$security_recommendations = $this->__renderSecurityRecommendations($securityRecommendationsData);
|
||||
|
||||
$emailTemplate = $this->prepareEmailTemplate($period);
|
||||
$emailTemplate->set('baseurl', $this->Event->__getAnnounceBaseurl());
|
||||
|
@ -1868,7 +1863,7 @@ class User extends AppModel
|
|||
return $this->__renderGeneric('Elements' . DS . 'Events', 'trendingSummary', $trendData);
|
||||
}
|
||||
|
||||
private function __renderSecurityRecommenrations(array $data): string
|
||||
private function __renderSecurityRecommendations(array $data): string
|
||||
{
|
||||
return $this->__renderGeneric('Elements' . DS . 'Events', 'securityRecommendations', $data);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<div class="index">
|
||||
<div class="btn-group">
|
||||
<a class="btn <?= $period == 'daily' ? 'btn-primary' : 'btn-inverse' ?>" href="<?= $baseurl . '/users/viewPeriodicSummary/daily' ?>"><?= __('Daily') ?></a>
|
||||
<a class="btn <?= $period == 'weekly' ? 'btn-primary' : 'btn-inverse' ?>" href="<?= $baseurl . '/users/viewPeriodicSummary/weekly' ?>"><?= __('Weekly') ?></a>
|
||||
<a class="btn <?= $period == 'monthly' ? 'btn-primary' : 'btn-inverse' ?>" href="<?= $baseurl . '/users/viewPeriodicSummary/monthly' ?>"><?= __('Monthly') ?></a>
|
||||
<a class="btn <?= $period === 'daily' ? 'btn-primary' : 'btn-inverse' ?>" href="<?= $baseurl . '/users/viewPeriodicSummary/daily' ?>"><?= __('Daily') ?></a>
|
||||
<a class="btn <?= $period === 'weekly' ? 'btn-primary' : 'btn-inverse' ?>" href="<?= $baseurl . '/users/viewPeriodicSummary/weekly' ?>"><?= __('Weekly') ?></a>
|
||||
<a class="btn <?= $period === 'monthly' ? 'btn-primary' : 'btn-inverse' ?>" href="<?= $baseurl . '/users/viewPeriodicSummary/monthly' ?>"><?= __('Monthly') ?></a>
|
||||
</div>
|
||||
|
||||
<h2><?= __('MISP %s summary', h($period)); ?></h2>
|
||||
|
@ -17,10 +17,7 @@
|
|||
</pre>
|
||||
</div>
|
||||
<div class="report-container" style="margin-top: 2em;">
|
||||
<?= $summary; ?>
|
||||
<?= $summary ?: __('No new events for this period'); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
echo $this->element('/genericElements/SideMenu/side_menu', array('menuList' => 'event-collection', 'menuItem' => 'viewPeriodicSummary'));
|
||||
?>
|
||||
<?= $this->element('/genericElements/SideMenu/side_menu', array('menuList' => 'event-collection', 'menuItem' => 'viewPeriodicSummary'));
|
||||
|
|
Loading…
Reference in New Issue