Merge pull request #226 from Focuslinkstech/master

Add send welcome message
This commit is contained in:
iBNu Maksum 2024-07-31 15:54:40 +07:00 committed by GitHub
commit 6ca5054fe8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 107 additions and 1 deletions

View file

@ -432,6 +432,47 @@ switch ($action) {
}
}
}
// Send welcome message
if (isset($_POST['send_welcome_message']) && $_POST['send_welcome_message'] == true) {
$welcomeMessage = Lang::getNotifText('welcome_message');
$welcomeMessage = str_replace('[[company_name]]', $config['CompanyName'], $welcomeMessage);
$welcomeMessage = str_replace('[[name]]', $d['fullname'], $welcomeMessage);
$welcomeMessage = str_replace('[[username]]', $d['username'], $welcomeMessage);
$welcomeMessage = str_replace('[[password]]', $d['password'], $welcomeMessage);
$welcomeMessage = str_replace('[[url]]', APP_URL . '/index.php?_route=login', $welcomeMessage);
$emailSubject = "Welcome to " . $config['CompanyName'];
$channels = [
'sms' => [
'enabled' => isset($_POST['sms']),
'method' => 'sendSMS',
'args' => [$d['phonenumber'], $welcomeMessage]
],
'whatsapp' => [
'enabled' => isset($_POST['wa']) && $_POST['wa'] == 'wa',
'method' => 'sendWhatsapp',
'args' => [$d['phonenumber'], $welcomeMessage]
],
'email' => [
'enabled' => isset($_POST['email']),
'method' => 'Message::sendEmail',
'args' => [$d['email'], $emailSubject, $welcomeMessage, $d['email']]
]
];
foreach ($channels as $channel => $message) {
if ($message['enabled']) {
try {
call_user_func_array($message['method'], $message['args']);
} catch (Exception $e) {
// Log the error and handle the failure
_log("Failed to send welcome message via $channel: " . $e->getMessage());
}
}
}
}
r2(U . 'customers/list', 's', Lang::T('Account Created Successfully'));
} else {
r2(U . 'customers/add', 'e', $msg);

View file

@ -6,5 +6,7 @@
"reminder_3_day": "Hello *[[name]]*, \r\nyour internet package *[[package]]* will be expired in 3 days.",
"reminder_1_day": "Hello *[[name]]*,\r\n your internet package *[[package]]* will be expired tomorrow.",
"invoice_paid": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\nUsername : *[[user_name]]*\r\nPassword : ***********\r\n\r\nExpired : *[[expired_date]]*\r\n\r\n====================\r\n[[footer]]",
"invoice_balance": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\n====================\r\n[[footer]]"
"invoice_balance": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\n====================\r\n[[footer]]",
"welcome_message": "Welcome aboard, [[name]]! \r\nWe're excited to have you as a new [[company]] customer. \r\nYour account is all set up and ready to go.\r\n\r\nHere's a quick overview:\r\n\r\nYour login is [[Username]]\r\nYour temporary password is [[Password]] (please change this on your first login)\r\n\r\nNeed help? Reach out to our support team at anytime.\r\n\r\nWe're here to ensure you have an amazing experience with our services. Let us know how we can best support you.\r\n\r\nWelcome to the [[company]] family!"
}

View file

@ -136,6 +136,22 @@
</p>
</div>
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Welcome Message')}</label>
<div class="col-md-6">
<textarea class="form-control" id="welcome_message" name="welcome_message"
rows="4">{Lang::htmlspecialchars($_json['welcome_message'])}</textarea>
</div>
<p class="help-block col-md-4">
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name')}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username')}.<br>
<b>[[password]]</b> - {Lang::T('will be replaced with Customer password')}.<br>
<b>[[url]]</b> - {Lang::T('will be replaced with Customer Portal URL')}.<br>
<b>[[company]]</b> - {Lang::T('will be replaced with Company Name')}.<br>
</p>
</div>
</div>
{if $_c['enable_balance'] == 'yes'}
<div class="panel-body">
<div class="form-group">

View file

@ -103,6 +103,21 @@
<div id="map" style="width: '100%'; height: 200px; min-height: 150px;"></div>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">{Lang::T('Send Welcome Message')}</label>
<div class="col-md-9">
<label class="switch">
<input type="checkbox" id="send_welcome_message" value="1" name="send_welcome_message">
<span class="slider"></span>
</label>
</div>
</div>
<div class="form-group" id="method" style="display: none;">
<label class="col-md-3 control-label">{Lang::T('Method')}</label>
<label class="col-md-3 control-label"><input type="checkbox" name="sms" value="1"> {Lang::T('SMS')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="wa" value="1"> {Lang::T('WA')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="email" value="1"> {Lang::T('Email')}</label>
</div>
</div>
</div>
</div>
@ -175,6 +190,38 @@
</center>
</form>
{literal}
<script>
document.addEventListener('DOMContentLoaded', function() {
var sendWelcomeCheckbox = document.getElementById('send_welcome_message');
var methodSection = document.getElementById('method');
function toggleMethodSection() {
if (sendWelcomeCheckbox.checked) {
methodSection.style.display = 'block';
} else {
methodSection.style.display = 'none';
}
}
toggleMethodSection();
sendWelcomeCheckbox.addEventListener('change', toggleMethodSection);
document.querySelector('form').addEventListener('submit', function(event) {
if (sendWelcomeCheckbox.checked) {
var methodCheckboxes = methodSection.querySelectorAll('input[type="checkbox"]');
var oneChecked = Array.from(methodCheckboxes).some(function(checkbox) {
return checkbox.checked;
});
if (!oneChecked) {
event.preventDefault();
alert('Please choose at least one method.');
methodSection.focus();
}
}
});
});
</script>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
var customFieldsContainer = document.getElementById('custom-fields-container');