mirror of
https://github.com/Mibew/mibew.git
synced 2025-04-18 12:57:24 +03:00
Implement sound notification on invitation to chat
This commit is contained in:
parent
a37ea34670
commit
06078cc8e7
@ -90,6 +90,12 @@ var Mibew = Mibew || {};
|
|||||||
*/
|
*/
|
||||||
this.inviteStyle = options.inviteStyle;
|
this.inviteStyle = options.inviteStyle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag to disable sound notification on invitations
|
||||||
|
* @type Boolean
|
||||||
|
*/
|
||||||
|
this.silentInvitation = options.silentInvitation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Locale of the Widget
|
* Locale of the Widget
|
||||||
* @type String
|
* @type String
|
||||||
@ -134,7 +140,7 @@ var Mibew = Mibew || {};
|
|||||||
delete this.dataToSend.user_id;
|
delete this.dataToSend.user_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.dataToSend.silent = this.silentInvitation ? 1 : 0;
|
||||||
Mibew.Utils.loadScript(
|
Mibew.Utils.loadScript(
|
||||||
this.requestURL
|
this.requestURL
|
||||||
+ '?' + this.getQuery(),
|
+ '?' + this.getQuery(),
|
||||||
@ -341,10 +347,12 @@ var Mibew = Mibew || {};
|
|||||||
* - 'threadUrl': String, URL of the invitation thread which must be
|
* - 'threadUrl': String, URL of the invitation thread which must be
|
||||||
* dispaly in invitation iframe.
|
* dispaly in invitation iframe.
|
||||||
* - 'acceptCaption': String, caption for accept button.
|
* - 'acceptCaption': String, caption for accept button.
|
||||||
|
* - 'soundFile': String, pseudo URL (without extension) of the sound file to
|
||||||
|
* play on invitation event (in case when it's possible)
|
||||||
*/
|
*/
|
||||||
Mibew.Invitation.create = function (options) {
|
Mibew.Invitation.create = function (options) {
|
||||||
|
|
||||||
// Cookies are blocked, invitation will behave badly
|
// Cookies are blocked, invitation will behave badly, won't even try
|
||||||
if (Mibew.Objects.widget.cookiesBlocked) {
|
if (Mibew.Objects.widget.cookiesBlocked) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -353,6 +361,7 @@ var Mibew = Mibew || {};
|
|||||||
var avatarUrl = options.avatarUrl;
|
var avatarUrl = options.avatarUrl;
|
||||||
var threadUrl = options.threadUrl;
|
var threadUrl = options.threadUrl;
|
||||||
var acceptCaption = options.acceptCaption;
|
var acceptCaption = options.acceptCaption;
|
||||||
|
var soundFile = options.soundFile;
|
||||||
|
|
||||||
var popuptext = '<div id="mibew-invitation-popup" style="display: none;">';
|
var popuptext = '<div id="mibew-invitation-popup" style="display: none;">';
|
||||||
popuptext += '<div id="mibew-invitation-close">'
|
popuptext += '<div id="mibew-invitation-close">'
|
||||||
@ -376,10 +385,19 @@ var Mibew = Mibew || {};
|
|||||||
+ '</h1>';
|
+ '</h1>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Play sound
|
// Try to play sound
|
||||||
|
if (soundFile) {
|
||||||
var sound = document.getElementById('mibew-notification-sound');
|
var sound = document.getElementById('mibew-notification-sound');
|
||||||
if (sound) {
|
if (!sound) {
|
||||||
sound.play();
|
sound = document.createElement('audio');
|
||||||
|
sound.setAttribute('id', 'mibew-notification-sound');
|
||||||
|
sound.setAttribute('style', 'display: none;');
|
||||||
|
sound.innerHTML = '<source src="' + soundFile + '.wav" type="audio/x-wav" />'
|
||||||
|
+ '<source src="' + soundFile + '.mp3" type="audio/mpeg" codecs="mp3" />';
|
||||||
|
document.getElementsByTagName('body')[0].appendChild(sound);
|
||||||
|
}
|
||||||
|
// User should do something on a page before it could be possible to play sound, so just try
|
||||||
|
sound.play().then( function(s) {}, function(e) {} );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Broadcast message from the thread related with invitation into iframe
|
// Broadcast message from the thread related with invitation into iframe
|
||||||
|
@ -275,6 +275,9 @@ abstract class AbstractGenerator implements GeneratorInterface
|
|||||||
// URL for requests
|
// URL for requests
|
||||||
$widget_data['requestURL'] = $this->generateUrl('widget_gateway');
|
$widget_data['requestURL'] = $this->generateUrl('widget_gateway');
|
||||||
|
|
||||||
|
// Silent invitations
|
||||||
|
$widget_data['silentInvitation'] = $this->getOption('silent_invitation');
|
||||||
|
|
||||||
// Locale for invitation
|
// Locale for invitation
|
||||||
$widget_data['locale'] = $this->getOption('locale');
|
$widget_data['locale'] = $this->getOption('locale');
|
||||||
|
|
||||||
|
@ -86,6 +86,8 @@ class ButtonCodeController extends AbstractController
|
|||||||
|
|
||||||
$disable_tracking = $request->query->get('disabletracking') == 'on';
|
$disable_tracking = $request->query->get('disabletracking') == 'on';
|
||||||
|
|
||||||
|
$silent_invitation = $request->query->get('silentinvitation') == 'on';
|
||||||
|
|
||||||
$code_type = $request->query->get('codetype', 'button');
|
$code_type = $request->query->get('codetype', 'button');
|
||||||
if (!in_array($code_type, array('button', 'operator_code', 'text_link'))) {
|
if (!in_array($code_type, array('button', 'operator_code', 'text_link'))) {
|
||||||
throw new BadRequestException('Wrong value of "codetype" param.');
|
throw new BadRequestException('Wrong value of "codetype" param.');
|
||||||
@ -106,7 +108,8 @@ class ButtonCodeController extends AbstractController
|
|||||||
'mod_security' => $mod_security,
|
'mod_security' => $mod_security,
|
||||||
'prefer_iframe' => !$force_windows,
|
'prefer_iframe' => !$force_windows,
|
||||||
'invitation_style' => $invitation_style,
|
'invitation_style' => $invitation_style,
|
||||||
'disable_tracking' => $disable_tracking
|
'disable_tracking' => $disable_tracking,
|
||||||
|
'silent_invitation' => $silent_invitation
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($operator_code) {
|
if ($operator_code) {
|
||||||
@ -176,7 +179,7 @@ class ButtonCodeController extends AbstractController
|
|||||||
$page['formcodetype'] = $code_type;
|
$page['formcodetype'] = $code_type;
|
||||||
$page['formforcewindows'] = $force_windows;
|
$page['formforcewindows'] = $force_windows;
|
||||||
$page['formdisabletracking'] = $disable_tracking;
|
$page['formdisabletracking'] = $disable_tracking;
|
||||||
|
$page['formsilentinvitation'] = $silent_invitation;
|
||||||
$page['enabletracking'] = Settings::get('enabletracking');
|
$page['enabletracking'] = Settings::get('enabletracking');
|
||||||
$page['operator_code'] = $operator_code;
|
$page['operator_code'] = $operator_code;
|
||||||
$page['generateButton'] = $generate_button;
|
$page['generateButton'] = $generate_button;
|
||||||
|
@ -155,8 +155,10 @@ class WidgetController extends AbstractController
|
|||||||
UrlGeneratorInterface::ABSOLUTE_URL
|
UrlGeneratorInterface::ABSOLUTE_URL
|
||||||
),
|
),
|
||||||
'acceptCaption' => getlocal('Answer'),
|
'acceptCaption' => getlocal('Answer'),
|
||||||
|
'soundFile' => $request->query->get('silent', false)
|
||||||
|
? false
|
||||||
|
: $this->asset('sounds/invite', AssetUrlGeneratorInterface::ABSOLUTE_URL),
|
||||||
);
|
);
|
||||||
|
|
||||||
$_SESSION[SESSION_PREFIX . 'invitation_threadid'] = $thread->id;
|
$_SESSION[SESSION_PREFIX . 'invitation_threadid'] = $thread->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,12 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field-in-row">
|
||||||
|
<label for="silent-invitation" class="field-label">{{l10n "Silent invitations"}}</label>
|
||||||
|
<div class="field-value-no-description">
|
||||||
|
<input id="silent-invitation" type="checkbox" name="silentinvitation" value="on"{{#if formsilentinvitation}} checked="checked"{{/if}} onchange="this.form.submit();"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
<br clear="all"/>
|
<br clear="all"/>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -92,6 +92,12 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field-in-row">
|
||||||
|
<label for="silent-invitation" class="field-label">{{l10n "Silent invitations"}}</label>
|
||||||
|
<div class="field-value-no-description">
|
||||||
|
<input id="silent-invitation" type="checkbox" name="silentinvitation" value="on"{{#if formsilentinvitation}} checked="checked"{{/if}} onchange="this.form.submit();"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
<br clear="all"/>
|
<br clear="all"/>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
Loading…
Reference in New Issue
Block a user