Notifications: Difference between revisions
From LimeSurvey Manual
m →Usage |
|||
Line 97: | Line 97: | ||
'''Broadcast to superadmin''' | '''Broadcast to superadmin''' | ||
This is how | This is how you broadcast a message to all superadmins. Also using localization. | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
Line 139: | Line 139: | ||
'''Unique notification with less nagging''' | '''Unique notification with less nagging''' | ||
The above unique message will | The above unique message will pop up the first time, and then a second time be marked as unread. If you want a message to continue to be marked as unread, use UniqueNotification with <code>'markAsNew' => false</code>: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> |
Revision as of 13:30, 2 June 2021
This functionality can be used to create an icon that appears on the top menu bar for user notifications. These can be for a specific user or survey.
You can also create a notification message that will be displayed until a certain action is taken (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 the server side with PHP. A page reload is always necessary to see new notifications.
A notification can either be 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.
Note that it will only be marked as unread for the first user that reads it.
$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->uid,
'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 you 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 pop up the first time, and then a second time be marked as unread. If you want a message to continue to be marked as unread, 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.