mirror of https://github.com/MISP/MISP
chg: [internal] Simplified notifications loading
parent
d25122e4a3
commit
0d78d0f994
|
@ -366,12 +366,8 @@ class AppController extends Controller
|
|||
|
||||
// Notifications and homepage is not necessary for AJAX or REST requests
|
||||
if ($user && !$this->_isRest() && !$isAjax) {
|
||||
if ($this->request->params['controller'] === 'users' && $this->request->params['action'] === 'dashboard') {
|
||||
$notifications = $this->User->populateNotifications($user);
|
||||
} else {
|
||||
$notifications = $this->User->populateNotifications($user, 'fast');
|
||||
}
|
||||
$this->set('notifications', $notifications);
|
||||
$hasNotifications = $this->User->hasNotifications($user);
|
||||
$this->set('hasNotifications', $hasNotifications);
|
||||
|
||||
$homepage = $this->User->UserSetting->getValueForUser($user['id'], 'homepage');
|
||||
if (!empty($homepage)) {
|
||||
|
|
|
@ -44,7 +44,7 @@ class MispStatusWidget
|
|||
'View'
|
||||
)
|
||||
);
|
||||
$notifications = $this->Event->populateNotifications($user);
|
||||
$notifications = $this->Event->User->populateNotifications($user);
|
||||
if (!empty($notifications['proposalCount'])) {
|
||||
$data[] = array(
|
||||
'title' => __('Pending proposals'),
|
||||
|
|
|
@ -2424,60 +2424,6 @@ class AppModel extends Model
|
|||
return true;
|
||||
}
|
||||
|
||||
public function populateNotifications($user, $mode = 'full')
|
||||
{
|
||||
$notifications = array();
|
||||
list($notifications['proposalCount'], $notifications['proposalEventCount']) = $this->_getProposalCount($user, $mode);
|
||||
$notifications['total'] = $notifications['proposalCount'];
|
||||
if (Configure::read('MISP.delegation')) {
|
||||
$notifications['delegationCount'] = $this->_getDelegationCount($user);
|
||||
$notifications['total'] += $notifications['delegationCount'];
|
||||
}
|
||||
return $notifications;
|
||||
}
|
||||
|
||||
// if not using $mode === 'full', simply check if an entry exists. We really don't care about the real count for the top menu.
|
||||
private function _getProposalCount($user, $mode = 'full')
|
||||
{
|
||||
$this->ShadowAttribute = ClassRegistry::init('ShadowAttribute');
|
||||
$results[0] = $this->ShadowAttribute->find(
|
||||
'count',
|
||||
array(
|
||||
'recursive' => -1,
|
||||
'conditions' => array(
|
||||
'ShadowAttribute.event_org_id' => $user['org_id'],
|
||||
'ShadowAttribute.deleted' => 0,
|
||||
)
|
||||
)
|
||||
);
|
||||
if ($mode === 'full') {
|
||||
$results[1] = $this->ShadowAttribute->find(
|
||||
'count',
|
||||
array(
|
||||
'recursive' => -1,
|
||||
'conditions' => array(
|
||||
'ShadowAttribute.event_org_id' => $user['org_id'],
|
||||
'ShadowAttribute.deleted' => 0,
|
||||
),
|
||||
'fields' => 'distinct event_id'
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$results[1] = $results[0];
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
||||
private function _getDelegationCount($user)
|
||||
{
|
||||
$this->EventDelegation = ClassRegistry::init('EventDelegation');
|
||||
$delegations = $this->EventDelegation->find('count', array(
|
||||
'recursive' => -1,
|
||||
'conditions' => array('EventDelegation.org_id' => $user['org_id'])
|
||||
));
|
||||
return $delegations;
|
||||
}
|
||||
|
||||
public function checkFilename($filename)
|
||||
{
|
||||
return preg_match('@^([a-z0-9_.]+[a-z0-9_.\- ]*[a-z0-9_.\-]|[a-z0-9_.])+$@i', $filename);
|
||||
|
|
|
@ -1504,4 +1504,68 @@ class User extends AppModel
|
|||
$banStatus['message'] = __('User email notification ban setting is not enabled');
|
||||
return $banStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $user
|
||||
* @return bool
|
||||
*/
|
||||
public function hasNotifications(array $user)
|
||||
{
|
||||
$hasProposal = $this->Event->ShadowAttribute->hasAny([
|
||||
'ShadowAttribute.event_org_id' => $user['org_id'],
|
||||
'ShadowAttribute.deleted' => 0,
|
||||
]);
|
||||
if ($hasProposal) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Configure::read('MISP.delegation') && $this->_getDelegationCount($user)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $user
|
||||
* @return array
|
||||
*/
|
||||
public function populateNotifications(array $user)
|
||||
{
|
||||
$notifications = array();
|
||||
list($notifications['proposalCount'], $notifications['proposalEventCount']) = $this->_getProposalCount($user);
|
||||
$notifications['total'] = $notifications['proposalCount'];
|
||||
if (Configure::read('MISP.delegation')) {
|
||||
$notifications['delegationCount'] = $this->_getDelegationCount($user);
|
||||
$notifications['total'] += $notifications['delegationCount'];
|
||||
}
|
||||
return $notifications;
|
||||
}
|
||||
|
||||
// if not using $mode === 'full', simply check if an entry exists. We really don't care about the real count for the top menu.
|
||||
private function _getProposalCount($user, $mode = 'full')
|
||||
{
|
||||
$results[0] = $this->Event->ShadowAttribute->find('count', [
|
||||
'conditions' => array(
|
||||
'ShadowAttribute.event_org_id' => $user['org_id'],
|
||||
'ShadowAttribute.deleted' => 0,
|
||||
)
|
||||
]);
|
||||
$results[1] = $this->Event->ShadowAttribute->find('count', [
|
||||
'conditions' => array(
|
||||
'ShadowAttribute.event_org_id' => $user['org_id'],
|
||||
'ShadowAttribute.deleted' => 0,
|
||||
),
|
||||
'fields' => 'distinct event_id'
|
||||
]);
|
||||
return $results;
|
||||
}
|
||||
|
||||
private function _getDelegationCount($user)
|
||||
{
|
||||
$this->EventDelegation = ClassRegistry::init('EventDelegation');
|
||||
return $this->EventDelegation->find('count', array(
|
||||
'recursive' => -1,
|
||||
'conditions' => array('EventDelegation.org_id' => $user['org_id'])
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -513,10 +513,10 @@
|
|||
h($me['email']),
|
||||
$this->UserName->prepend($me['email']),
|
||||
h($this->UserName->convertEmailToName($me['email'])),
|
||||
isset($notifications) ? sprintf(
|
||||
isset($hasNotifications) ? sprintf(
|
||||
'<i class="fa fa-envelope %s" role="img" aria-label="%s"></i>',
|
||||
(($notifications['total'] == 0) ? 'white' : 'red'),
|
||||
__('Notifications') . ': ' . $notifications['total']
|
||||
$hasNotifications ? 'red' : 'white',
|
||||
__('Notifications')
|
||||
) : ''
|
||||
)
|
||||
),
|
||||
|
|
Loading…
Reference in New Issue