Notifications: Difference between revisions
From LimeSurvey Manual
Line 144: | Line 144: | ||
'markAsNew' => false, | 'markAsNew' => false, | ||
'title' => 'Unique title', | 'title' => 'Unique title', | ||
'message' => 'Even if you save this multiple times, there will only be one copy. | 'message' => 'Even if you save this multiple times, there will only be one copy.' | ||
)))->save(); | )))->save(); | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 15:06, 24 August 2016
Have an icon in top menu about notifications to user. Can be bound to user or survey.
Also need an 'irritating' message type that will be 'new' until a certain condition is fulfilled (like survey must be activated).
GUI
- Bell icon
- List of all messages in menu where you can can see which messages are new
- Delete all messages
Usage
All notifications are created on server side with PHP. A page reload is always necessary to see new notifications.
A notification can either be of type 'important' or the default type 'log'. Important messages will show a modal popup at page load. Default messages will only show a notification at the bell in the admin menu.
See examples below for more information.
Database
New database table required to make notifications persist between login/logout.
Fields:
- id
- entity, like survey, user, ...
- entity_id, survey id, user id, ...
- title, title of message (shown in dropdown and overview)
- message, the actual message
- display_class, success, danger, default
- importance, 1 = normal, 3 = high/popup on page load
- status, new, read
- hash, a hashed value of title, message and entity/entity id; indexed; useful for unique notifications
- created, datetime
- first_read, datetime
Examples
Create a new notification for a survey
This notification will be visible for all users who visit the survey.
$not = new Notification(array(
'survey_id' => 316222,
'title' => 'My title',
'message' => 'Hello, and welcome to LimeSurvey! Anyone who can see this survey can see this message.'
));
$not->save();
Send an important notification
Visible on page load as popup.
$not = new Notification(array(
'survey_id' => 316222,
'title' => 'My title',
'importance' => Notification::HIGH_IMPORTANCE,
'message' => 'This notification will be a pop-up modal automatically opened at load'
));
$not->save();
Notification to a specific user
Only this user can see this notification.
$user = ...
$not = new Notification(array(
'user_id' => $user->id,
'title' => 'My title',
'message' => 'This is a love letter only Marge can see.'
));
$not->save();
Broadcast
All users will get this notification.
Notification::broadcast(array(
'title' => 'To all users',
'message' => 'I\'m in love with Marge. I don\'t care if everyone knows.'
));
Broadcast to superadmin
This is how your broadcast a message to all superadmins. Also using localization.
$superadmins = User::model()->getSuperAdmins();
Notification::broadcast(array(
'title' => gT('Database update'),
'message' => gT('The database has been updated to version 259. New version includes notification system.')
), $superadmins);
Display class
You can change the modal class of the modal popup using display_class.
$not = new Notification(array(
'survey_id' => 316222,
'title' => 'Error',
'message' => 'This modal will have a red panel header, because it\'s an error.',
'display_class' => 'warning'
));
$not->save();
Unique notification
If you only want to create one copy of a message, but want to mark it as unread depending on program logic, use the UniqueNotifcation class:
$not = new UniqueNotification(array(
'user_id' => 1,
'title' => 'Unique title',
'message' => 'Even if you save this multiple times, there will only be one copy'
));
$not->save(); // If this exact message already exists, save() will mark it as unread (status = new)
Unique notification with less nagging
The above unique message will popup first time, and then second time be marked as unread. If you want a message to continue to be marked as unread no matter the times you save it, use UniqueNotification with 'markAsNew' => false
:
(new UniqueNotification(array(
'user_id' => 1,
'markAsNew' => false,
'title' => 'Unique title',
'message' => 'Even if you save this multiple times, there will only be one copy.'
)))->save();
Open issues
- Merge with Yii flash system?
- More plugin friendly? E.g. having a message history page, adding soft delete.