fix bulk broadcasting message

This commit is contained in:
iBNu Maksum
2025-02-04 15:13:42 +07:00
parent 3386b17b1b
commit 8d9919afa7
5 changed files with 136 additions and 67 deletions

View File

@ -113,15 +113,16 @@
});
function ask(field, text){
var txt = field.innerHTML;
if (confirm(text)) {
setTimeout(() => {
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, '');
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, txt);
field.removeAttribute("disabled");
}, 5000);
return true;
} else {
setTimeout(() => {
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, '');
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, txt);
field.removeAttribute("disabled");
}, 500);
return false;

View File

@ -4,18 +4,26 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
{if $page>0 && $totalCustomers>0}
<div class="alert alert-info" role="alert">{Lang::T("Sending message in progress. Don't close this page.")}</div>
{/if}
<div class="panel panel-primary panel-hovered panel-stacked mb30 {if $page>0 && $totalCustomers >0}hidden{/if}">
<div class="panel-heading">{Lang::T('Send Bulk Message')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" id="bulkMessageForm" action="">
<form class="form-horizontal" method="get" role="form" id="bulkMessageForm" action="">
<input type="hidden" name="page" value="{if $page>0 && $totalCustomers==0}-1{else}{$page}{/if}">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Group')}</label>
<div class="col-md-6">
<select class="form-control" name="group" id="group">
<option value="all" selected>{Lang::T('All Customers')}</option>
<option value="new">{Lang::T('New Customers')}</option>
<option value="expired">{Lang::T('Expired Customers')}</option>
<option value="active">{Lang::T('Active Customers')}</option>
<option value="all" {if $group == 'all'}selected{/if}>{Lang::T('All Customers')}
</option>
<option value="new" {if $group == 'new'}selected{/if}>{Lang::T('New Customers')}
</option>
<option value="expired" {if $group == 'expired'}selected{/if}>
{Lang::T('Expired Customers')}</option>
<option value="active" {if $group == 'active'}selected{/if}>
{Lang::T('Active Customers')}</option>
</select>
</div>
</div>
@ -23,9 +31,10 @@
<label class="col-md-2 control-label">{Lang::T('Send Via')}</label>
<div class="col-md-6">
<select class="form-control" name="via" id="via">
<option value="sms" selected>{Lang::T('SMS')}</option>
<option value="wa">{Lang::T('WhatsApp')}</option>
<option value="both">{Lang::T('SMS and WhatsApp')}</option>
<option value="sms" {if $via == 'sms'}selected{/if}>{Lang::T('SMS')}</option>
<option value="wa" {if $via == 'wa'}selected{/if}>{Lang::T('WhatsApp')}</option>
<option value="both" {if $via == 'both'}selected{/if}>{Lang::T('SMS and WhatsApp')}
</option>
</select>
</div>
</div>
@ -33,14 +42,14 @@
<label class="col-md-2 control-label">{Lang::T('Message per time')}</label>
<div class="col-md-6">
<select class="form-control" name="batch" id="batch">
<option value="5">{Lang::T('5 Messages')}</option>
<option value="10" selected>{Lang::T('10 Messages')}</option>
<option value="15">{Lang::T('15 Messages')}</option>
<option value="20">{Lang::T('20 Messages')}</option>
<option value="20">{Lang::T('30 Messages')}</option>
<option value="20">{Lang::T('40 Messages')}</option>
<option value="20">{Lang::T('50 Messages')}</option>
<option value="20">{Lang::T('60 Messages')}</option>
<option value="5" {if $batch == '5'}selected{/if}>{Lang::T('5 Messages')}</option>
<option value="10" {if $batch == '10'}selected{/if}>{Lang::T('10 Messages')}</option>
<option value="15" {if $batch == '15'}selected{/if}>{Lang::T('15 Messages')}</option>
<option value="20" {if $batch == '20'}selected{/if}>{Lang::T('20 Messages')}</option>
<option value="30" {if $batch == '30'}selected{/if}>{Lang::T('30 Messages')}</option>
<option value="40" {if $batch == '40'}selected{/if}>{Lang::T('40 Messages')}</option>
<option value="50" {if $batch == '50'}selected{/if}>{Lang::T('50 Messages')}</option>
<option value="60" {if $batch == '60'}selected{/if}>{Lang::T('60 Messages')}</option>
</select>{Lang::T('Use 20 and above if you are sending to all customers to avoid server time out')}
</div>
</div>
@ -48,20 +57,21 @@
<label class="col-md-2 control-label">{Lang::T('Delay')}</label>
<div class="col-md-6">
<select class="form-control" name="delay" id="delay">
<option value="0" selected>{Lang::T('No Delay')}</option>
<option value="5">{Lang::T('5 Seconds')}</option>
<option value="10">{Lang::T('10 Seconds')}</option>
<option value="15">{Lang::T('15 Seconds')}</option>
<option value="20">{Lang::T('20 Seconds')}</option>
<option value="0" {if $delay == '0'}selected{/if}>{Lang::T('No Delay')}</option>
<option value="5" {if $delay == '5'}selected{/if}>{Lang::T('5 Seconds')}</option>
<option value="10" {if $delay == '10'}selected{/if}>{Lang::T('10 Seconds')}</option>
<option value="15" {if $delay == '15'}selected{/if}>{Lang::T('15 Seconds')}</option>
<option value="20" {if $delay == '20'}selected{/if}>{Lang::T('20 Seconds')}</option>
</select>{Lang::T('Use at least 5 secs if you are sending to all customers to avoid being banned by your message provider')}
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Message')}</label>
<div class="col-md-6">
<textarea class="form-control" id="message" name="message"
placeholder="{Lang::T('Compose your message...')}" rows="5"></textarea>
<input name="test" type="checkbox"> {Lang::T('Testing [if checked no real message is sent]')}
<textarea class="form-control" id="message" name="message" required
placeholder="{Lang::T('Compose your message...')}" rows="5">{$message}</textarea>
<input name="test" type="checkbox">
{Lang::T('Testing [if checked no real message is sent]')}
</div>
<p class="help-block col-md-4">
{Lang::T('Use placeholders:')}
@ -77,8 +87,15 @@
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success" onclick="return ask(this, 'Continue the process of sending mass messages?')" type="submit" name=send value=now>
{Lang::T('Send Message')}</button>
{if $page >= 0}
<button class="btn btn-success" id="submit" type="submit" name=send value=now>
{Lang::T('Send Message')}</button>
{else}
<button class="btn btn-success"
onclick="return ask(this, 'Continue the process of sending mass messages?')"
type="submit" name=send value=now>
{Lang::T('Send Message')}</button>
{/if}
<a href="{$_url}dashboard" class="btn btn-default">{Lang::T('Cancel')}</a>
</div>
</div>
@ -90,10 +107,11 @@
</div>
{if $batchStatus}
<p><span class="label label-success">{Lang::T('Total SMS Sent')}: {$totalSMSSent}</span> <span class="label label-danger">{Lang::T('Total SMS
<p><span class="label label-success">{Lang::T('Total SMS Sent')}: {$totalSMSSent}</span> <span
class="label label-danger">{Lang::T('Total SMS
Failed')}: {$totalSMSFailed}</span> <span class="label label-success">{Lang::T('Total WhatsApp Sent')}:
{$totalWhatsappSent}</span> <span class="label label-danger">{Lang::T('Total WhatsApp Failed')}:
{$totalWhatsappFailed}</span></p>
{$totalWhatsappSent}</span> <span class="label label-danger">{Lang::T('Total WhatsApp Failed')}:
{$totalWhatsappFailed}</span></p>
{/if}
<div class="box">
<div class="box-header">
@ -112,12 +130,12 @@
</thead>
<tbody>
{foreach $batchStatus as $customer}
<tr>
<td>{$customer.name}</td>
<td>{$customer.phone}</td>
<td>{$customer.message}</td>
<td>{$customer.status}</td>
</tr>
<tr>
<td>{$customer.name}</td>
<td>{$customer.phone}</td>
<td>{$customer.message}</td>
<td>{$customer.status}</td>
</tr>
{/foreach}
</tbody>
</table>
@ -131,12 +149,32 @@
<script>
var $j = jQuery.noConflict();
$j(document).ready(function () {
$j(document).ready(function() {
$j('#messageResultsTable').DataTable();
});
{if $page>0 && $totalCustomers >0}
setTimeout(() => {
document.getElementById('submit').click();
}, 2000);
{/if}
{if $page>0 && $totalCustomers==0}
Swal.fire({
icon: 'success',
title: 'Bulk Send Done',
position: 'top-end',
showConfirmButton: false,
timer: 5000,
timerProgressBar: true,
didOpen: (toast) => {
toast.addEventListener('mouseenter', Swal.stopTimer)
toast.addEventListener('mouseleave', Swal.resumeTimer)
}
});
{/if}
</script>
{include file="sections/footer.tpl"}
{include file="sections/footer.tpl"}

View File

@ -160,15 +160,16 @@
});
function ask(field, text){
var txt = field.innerHTML;
if (confirm(text)) {
setTimeout(() => {
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, '');
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, txt);
field.removeAttribute("disabled");
}, 5000);
return true;
} else {
setTimeout(() => {
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, '');
field.innerHTML = field.innerHTML.replace(`<span class="loading"></span>`, txt);
field.removeAttribute("disabled");
}, 500);
return false;