Merge pull request #354 from Focuslinkstech/Development

Patch Addon
This commit is contained in:
iBNu Maksum 2024-11-29 11:27:40 +07:00 committed by GitHub
commit 5788c9c0a7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 400 additions and 288 deletions

View File

@ -314,11 +314,32 @@ switch ($do) {
$ui->display('customer/login-noreg.tpl'); $ui->display('customer/login-noreg.tpl');
} else { } else {
$UPLOAD_URL_PATH = str_replace($root_path, '', $UPLOAD_PATH); $UPLOAD_URL_PATH = str_replace($root_path, '', $UPLOAD_PATH);
$login_logo = (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png')) ? $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png' : $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.default.png'; if (!empty($config['login_page_logo']) && file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_logo'])) {
$login_logo = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_logo'];
} elseif (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png')) {
$login_logo = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png';
} else {
$login_logo = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.default.png';
}
if (!empty($config['login_page_wallpaper']) && file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_wallpaper'])) {
$wallpaper = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_wallpaper'];
} elseif (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png')) {
$wallpaper = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png';
} else {
$wallpaper = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.default.png';
}
if (!empty($config['login_page_favicon']) && file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_favicon'])) {
$favicon = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_favicon'];
} elseif (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.png')) {
$favicon = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.png';
} else {
$favicon = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.default.png';
}
$ui->assign('login_logo', $login_logo); $ui->assign('login_logo', $login_logo);
$wallpaper = (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png')) ? $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png' : $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.default.png';
$ui->assign('wallpaper', $wallpaper); $ui->assign('wallpaper', $wallpaper);
$favicon = (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'favicon.png')) ? $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.png' : $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.default.png';
$ui->assign('favicon', $favicon); $ui->assign('favicon', $favicon);
$ui->assign('csrf_token', $csrf_token); $ui->assign('csrf_token', $csrf_token);
$ui->assign('_title', Lang::T('Login')); $ui->assign('_title', Lang::T('Login'));

View File

@ -27,32 +27,32 @@ switch ($do) {
$address = _post('address'); $address = _post('address');
// Separate phone number input if OTP is required // Separate phone number input if OTP is required
if ($config['sms_otp_registration'] == 'yes') { $phone_number = ($config['sms_otp_registration'] == 'yes') ? alphanumeric(_post('phone_number'), "+_.@-") : $username;
$phone_number = alphanumeric(_post('phone_number'), "+_.@-");
} else {
$phone_number = $username; // When OTP is not required, treat username as phone number
}
$msg = ''; $msg = '';
if (Validator::Length($username, 35, 2) == false) { if (Validator::Length($username, 35, 2) == false) {
$msg .= 'Username should be between 3 to 55 characters' . '<br>'; $msg .= "Username should be between 3 to 55 characters<br>";
} }
if ($config['man_fields_fname'] == 'yes') {
if (Validator::Length($fullname, 36, 2) == false) { if (Validator::Length($fullname, 36, 2) == false) {
$msg .= 'Full Name should be between 3 to 25 characters' . '<br>'; $msg .= "Full Name should be between 3 to 25 characters<br>";
}
} }
if (!Validator::Length($password, 35, 2)) { if (!Validator::Length($password, 35, 2)) {
$msg .= 'Password should be between 3 to 35 characters' . '<br>'; $msg .= "Password should be between 3 to 35 characters<br>";
} }
if ($config['man_fields_email'] == 'yes') {
if (!Validator::Email($email)) { if (!Validator::Email($email)) {
$msg .= 'Email is not Valid<br>'; $msg .= 'Email is not Valid<br>';
} }
}
if ($password != $cpassword) { if ($password != $cpassword) {
$msg .= Lang::T('Passwords does not match') . '<br>'; $msg .= Lang::T('Passwords does not match') . '<br>';
} }
// OTP verification if OTP is enabled // OTP verification if OTP is enabled
if ($_c['sms_otp_registration'] == 'yes') { if ($_c['sms_otp_registration'] == 'yes') {
$otpPath .= sha1($phone_number . $db_pass) . ".txt"; $otpPath .= sha1("$phone_number$db_pass") . ".txt";
run_hook('validate_otp'); #HOOK run_hook('validate_otp'); #HOOK
// Expire after 10 minutes // Expire after 10 minutes
if (file_exists($otpPath) && time() - filemtime($otpPath) > 1200) { if (file_exists($otpPath) && time() - filemtime($otpPath) > 1200) {
@ -116,6 +116,10 @@ switch ($do) {
if (file_exists($_FILES['photo']['tmp_name'])) unlink($_FILES['photo']['tmp_name']); if (file_exists($_FILES['photo']['tmp_name'])) unlink($_FILES['photo']['tmp_name']);
User::setFormCustomField($user); User::setFormCustomField($user);
run_hook('register_user'); #HOOK run_hook('register_user'); #HOOK
$msg .= Lang::T('Registration successful') . '<br>';
if ($config['reg_nofify_admin'] == 'yes') {
sendTelegram($config['CompanyName'] . ' - ' . Lang::T('New User Registration') . "\n\nFull Name: " . $fullname . "\nUsername: " . $username . "\nEmail: " . $email . "\nPhone Number: " . $phone_number . "\nAddress: " . $address);
}
r2(U . 'login', 's', Lang::T('Register Success! You can login now')); r2(U . 'login', 's', Lang::T('Register Success! You can login now'));
} else { } else {
$ui->assign('username', $username); $ui->assign('username', $username);
@ -171,13 +175,13 @@ switch ($do) {
} else { } else {
$otp = rand(100000, 999999); $otp = rand(100000, 999999);
file_put_contents($otpPath, $otp); file_put_contents($otpPath, $otp);
if($config['phone_otp_type'] == 'whatsapp'){ if ($config['phone_otp_type'] == 'whatsapp') {
Message::sendWhatsapp($phone_number, $config['CompanyName'] . "\n\n".Lang::T("Registration code")."\n$otp"); Message::sendWhatsapp($phone_number, $config['CompanyName'] . "\n\n" . Lang::T("Registration code") . "\n$otp");
}else if($config['phone_otp_type'] == 'both'){ } else if ($config['phone_otp_type'] == 'both') {
Message::sendWhatsapp($phone_number, $config['CompanyName'] . "\n\n".Lang::T("Registration code")."\n$otp"); Message::sendWhatsapp($phone_number, $config['CompanyName'] . "\n\n" . Lang::T("Registration code") . "\n$otp");
Message::sendSMS($phone_number, $config['CompanyName'] . "\n\n".Lang::T("Registration code")."\n$otp"); Message::sendSMS($phone_number, $config['CompanyName'] . "\n\n" . Lang::T("Registration code") . "\n$otp");
}else{ } else {
Message::sendSMS($phone_number, $config['CompanyName'] . "\n\n".Lang::T("Registration code")."\n$otp"); Message::sendSMS($phone_number, $config['CompanyName'] . "\n\n" . Lang::T("Registration code") . "\n$otp");
} }
$ui->assign('phone_number', $phone_number); $ui->assign('phone_number', $phone_number);
$ui->assign('notify', 'Registration code has been sent to your phone'); $ui->assign('notify', 'Registration code has been sent to your phone');
@ -204,5 +208,3 @@ switch ($do) {
} }
break; break;
} }
?>

View File

@ -82,11 +82,32 @@ switch ($action) {
} }
$ui->assign('logo', $logo); $ui->assign('logo', $logo);
$login_logo = (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png')) ? $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png' : $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.default.png'; if (!empty($config['login_page_logo']) && file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_logo'])) {
$login_logo = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_logo'];
} elseif (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png')) {
$login_logo = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.png';
} else {
$login_logo = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'login-logo.default.png';
}
if (!empty($config['login_page_wallpaper']) && file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_wallpaper'])) {
$wallpaper = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_wallpaper'];
} elseif (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png')) {
$wallpaper = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png';
} else {
$wallpaper = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.default.png';
}
if (!empty($config['login_page_favicon']) && file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_favicon'])) {
$favicon = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . $config['login_page_favicon'];
} elseif (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.png')) {
$favicon = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.png';
} else {
$favicon = $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.default.png';
}
$ui->assign('login_logo', $login_logo); $ui->assign('login_logo', $login_logo);
$wallpaper = (file_exists($UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png')) ? $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png' : $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'wallpaper.default.png';
$ui->assign('wallpaper', $wallpaper); $ui->assign('wallpaper', $wallpaper);
$favicon = (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'favicon.png')) ? $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.png' : $UPLOAD_URL_PATH . DIRECTORY_SEPARATOR . 'favicon.default.png';
$ui->assign('favicon', $favicon); $ui->assign('favicon', $favicon);
$themes = []; $themes = [];
@ -133,7 +154,7 @@ switch ($action) {
$d->save(); $d->save();
} }
} }
if(empty($config['mikrotik_sms_command'])){ if (empty($config['mikrotik_sms_command'])) {
$config['mikrotik_sms_command'] = "/tool sms send"; $config['mikrotik_sms_command'] = "/tool sms send";
} }
$ui->assign('template_files', $templates); $ui->assign('template_files', $templates);
@ -188,6 +209,10 @@ switch ($action) {
} }
} }
// Save all settings including tax system // Save all settings including tax system
$_POST['man_fields_email'] = isset($_POST['man_fields_email']) ? 'yes' : 'no';
$_POST['man_fields_fname'] = isset($_POST['man_fields_fname']) ? 'yes' : 'no';
$_POST['man_fields_address'] = isset($_POST['man_fields_address']) ? 'yes' : 'no';
$_POST['man_fields_custom'] = isset($_POST['man_fields_custom']) ? 'yes' : 'no';
$enable_session_timeout = isset($_POST['enable_session_timeout']) ? 1 : 0; $enable_session_timeout = isset($_POST['enable_session_timeout']) ? 1 : 0;
$_POST['enable_session_timeout'] = $enable_session_timeout; $_POST['enable_session_timeout'] = $enable_session_timeout;
foreach ($_POST as $key => $value) { foreach ($_POST as $key => $value) {
@ -220,8 +245,6 @@ switch ($action) {
r2(U . 'settings/app', 'e', Lang::T('Invalid or Expired CSRF Token') . "."); r2(U . 'settings/app', 'e', Lang::T('Invalid or Expired CSRF Token') . ".");
} }
$image_paths = [];
if ($login_page_type == 'custom' && (empty($login_Page_template) || empty($login_page_title) || empty($login_page_description))) { if ($login_page_type == 'custom' && (empty($login_Page_template) || empty($login_page_title) || empty($login_page_description))) {
r2(U . 'settings/app', 'e', 'Please fill all required fields'); r2(U . 'settings/app', 'e', 'Please fill all required fields');
return; return;
@ -231,7 +254,7 @@ switch ($action) {
r2(U . 'settings/app', 'e', 'Login page title must not exceed 25 characters'); r2(U . 'settings/app', 'e', 'Login page title must not exceed 25 characters');
return; return;
} }
if (strlen($login_page_description) > 50) { if (strlen($login_page_description) > 100) {
r2(U . 'settings/app', 'e', 'Login page description must not exceed 50 characters'); r2(U . 'settings/app', 'e', 'Login page description must not exceed 50 characters');
return; return;
} }
@ -243,12 +266,16 @@ switch ($action) {
'login_page_type' => $login_page_type, 'login_page_type' => $login_page_type,
]; ];
$image_paths = [];
$allowed_types = ['image/jpeg', 'image/png'];
if ($_FILES['login_page_favicon']['name'] != '') { if ($_FILES['login_page_favicon']['name'] != '') {
$favicon_type = $_FILES['login_page_favicon']['type']; $favicon_type = $_FILES['login_page_favicon']['type'];
if (in_array($favicon_type, ['image/jpeg', 'image/png']) && preg_match('/\.(jpg|jpeg|png)$/i', $_FILES['login_page_favicon']['name'])) { if (in_array($favicon_type, $allowed_types) && preg_match('/\.(jpg|jpeg|png)$/i', $_FILES['login_page_favicon']['name'])) {
$favicon_path = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'favicon.png'; $extension = pathinfo($_FILES['login_page_favicon']['name'], PATHINFO_EXTENSION);
$favicon_path = $UPLOAD_PATH . DIRECTORY_SEPARATOR . uniqid('favicon_') . '.' . $extension;
File::resizeCropImage($_FILES['login_page_favicon']['tmp_name'], $favicon_path, 16, 16, 100); File::resizeCropImage($_FILES['login_page_favicon']['tmp_name'], $favicon_path, 16, 16, 100);
$image_paths['favicon'] = $favicon_path; $settings['login_page_favicon'] = basename($favicon_path); // Save dynamic file name
if (file_exists($_FILES['login_page_favicon']['tmp_name'])) unlink($_FILES['login_page_favicon']['tmp_name']); if (file_exists($_FILES['login_page_favicon']['tmp_name'])) unlink($_FILES['login_page_favicon']['tmp_name']);
} else { } else {
r2(U . 'settings/app', 'e', 'Favicon must be a JPG, JPEG, or PNG image.'); r2(U . 'settings/app', 'e', 'Favicon must be a JPG, JPEG, or PNG image.');
@ -257,10 +284,11 @@ switch ($action) {
if ($_FILES['login_page_wallpaper']['name'] != '') { if ($_FILES['login_page_wallpaper']['name'] != '') {
$wallpaper_type = $_FILES['login_page_wallpaper']['type']; $wallpaper_type = $_FILES['login_page_wallpaper']['type'];
if (in_array($wallpaper_type, ['image/jpeg', 'image/png']) && preg_match('/\.(jpg|jpeg|png)$/i', $_FILES['login_page_wallpaper']['name'])) { if (in_array($wallpaper_type, $allowed_types) && preg_match('/\.(jpg|jpeg|png)$/i', $_FILES['login_page_wallpaper']['name'])) {
$wallpaper_path = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'wallpaper.png'; $extension = pathinfo($_FILES['login_page_wallpaper']['name'], PATHINFO_EXTENSION);
$wallpaper_path = $UPLOAD_PATH . DIRECTORY_SEPARATOR . uniqid('wallpaper_') . '.' . $extension;
File::resizeCropImage($_FILES['login_page_wallpaper']['tmp_name'], $wallpaper_path, 1920, 1080, 100); File::resizeCropImage($_FILES['login_page_wallpaper']['tmp_name'], $wallpaper_path, 1920, 1080, 100);
$image_paths['wallpaper'] = $wallpaper_path; $settings['login_page_wallpaper'] = basename($wallpaper_path); // Save dynamic file name
if (file_exists($_FILES['login_page_wallpaper']['tmp_name'])) unlink($_FILES['login_page_wallpaper']['tmp_name']); if (file_exists($_FILES['login_page_wallpaper']['tmp_name'])) unlink($_FILES['login_page_wallpaper']['tmp_name']);
} else { } else {
r2(U . 'settings/app', 'e', 'Wallpaper must be a JPG, JPEG, or PNG image.'); r2(U . 'settings/app', 'e', 'Wallpaper must be a JPG, JPEG, or PNG image.');
@ -269,10 +297,11 @@ switch ($action) {
if ($_FILES['login_page_logo']['name'] != '') { if ($_FILES['login_page_logo']['name'] != '') {
$logo_type = $_FILES['login_page_logo']['type']; $logo_type = $_FILES['login_page_logo']['type'];
if (in_array($logo_type, ['image/jpeg', 'image/png']) && preg_match('/\.(jpg|jpeg|png)$/i', $_FILES['login_page_logo']['name'])) { if (in_array($logo_type, $allowed_types) && preg_match('/\.(jpg|jpeg|png)$/i', $_FILES['login_page_logo']['name'])) {
$logo_path = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'login-logo.png'; $extension = pathinfo($_FILES['login_page_logo']['name'], PATHINFO_EXTENSION);
$logo_path = $UPLOAD_PATH . DIRECTORY_SEPARATOR . uniqid('logo_') . '.' . $extension;
File::resizeCropImage($_FILES['login_page_logo']['tmp_name'], $logo_path, 300, 60, 100); File::resizeCropImage($_FILES['login_page_logo']['tmp_name'], $logo_path, 300, 60, 100);
$image_paths['logo'] = $logo_path; $settings['login_page_logo'] = basename($logo_path); // Save dynamic file name
if (file_exists($_FILES['login_page_logo']['tmp_name'])) unlink($_FILES['login_page_logo']['tmp_name']); if (file_exists($_FILES['login_page_logo']['tmp_name'])) unlink($_FILES['login_page_logo']['tmp_name']);
} else { } else {
r2(U . 'settings/app', 'e', 'Logo must be a JPG, JPEG, or PNG image.'); r2(U . 'settings/app', 'e', 'Logo must be a JPG, JPEG, or PNG image.');

View File

@ -368,6 +368,45 @@
<p class="help-block col-md-4">{Lang::T('The method which OTP will be sent to user')}<br> <p class="help-block col-md-4">{Lang::T('The method which OTP will be sent to user')}<br>
{Lang::T('For Registration and Update Phone Number')}</p> {Lang::T('For Registration and Update Phone Number')}</p>
</div> </div>
<div class="form-group">
<label class="col-md-3 control-label">{Lang::T('Notify Admin')}</label>
<div class="col-md-5">
<select name="reg_nofify_admin" id="reg_nofify_admin" class="form-control">
<option value="no">
{Lang::T('No')}
</option>
<option value="yes" {if $_c['reg_nofify_admin']=='yes' }selected="selected" {/if}>
{Lang::T('Yes')}
</option>
</select>
</div>
<p class="help-block col-md-4">
{Lang::T('Notify Admin upon self registration')}
</p>
</div>
<div class="form-group">
<label class="col-md-3 control-label">{Lang::T('Registration Mandatory Fields')}:</label><br>
<label class="col-md-3 control-label">
<input type="checkbox" name="man_fields_email" value="yes"
{if !isset($_c['man_fields_email']) || $_c['man_fields_email'] neq 'no'}checked{/if}>
{Lang::T('Email')}
</label>
<label class="col-md-3 control-label">
<input type="checkbox" name="man_fields_fname" value="yes"
{if !isset($_c['man_fields_fname']) || $_c['man_fields_fname'] neq 'no'}checked{/if}>
{Lang::T('Full Name')}
</label>
<label class="col-md-3 control-label">
<input type="checkbox" name="man_fields_address" value="yes"
{if !isset($_c['man_fields_address']) || $_c['man_fields_address'] neq 'no'}checked{/if}>
{Lang::T('Address')}
</label>
<label class="col-md-3 control-label">
<input type="checkbox" name="man_fields_custom" value="yes"
{if !isset($_c['man_fields_custom']) || $_c['man_fields_custom'] neq 'no'}checked{/if}>
{Lang::T('Custom Fields')}
</label>
</div>
<button class="btn btn-success btn-block" type="submit"> <button class="btn btn-success btn-block" type="submit">
{Lang::T('Save Changes')} {Lang::T('Save Changes')}
</button> </button>

View File

@ -38,21 +38,28 @@
<input type="file" required class="form-control" id="photo" name="photo" accept="image/*"> <input type="file" required class="form-control" id="photo" name="photo" accept="image/*">
</div> </div>
{/if} {/if}
{if $_c['man_fields_fname'] neq 'no'}
<div class="form-group"> <div class="form-group">
<label>{Lang::T('Full Name')}</label> <label>{Lang::T('Full Name')}</label>
<input type="text" required class="form-control" id="fullname" value="{$fullname}" <input type="text" required class="form-control" id="fullname" value="{$fullname}"
name="fullname"> name="fullname">
</div> </div>
{/if}
{if $_c['man_fields_address'] neq 'no'}
<div class="form-group"> <div class="form-group">
<label>{Lang::T('Email')}</label> <label>{Lang::T('Email')}</label>
<input type="text" class="form-control" placeholder="xxxxxx@xxx.xx" id="email" <input type="text" class="form-control" placeholder="xxxxxx@xxx.xx" id="email"
value="{$email}" name="email"> value="{$email}" name="email">
</div> </div>
{/if}
{if $_c['man_fields_address'] neq 'no'}
<div class="form-group"> <div class="form-group">
<label>{Lang::T('Address')}</label> <label>{Lang::T('Address')}</label>
<input type="text" name="address" id="address" value="{$address}" class="form-control"> <input type="text" name="address" id="address" value="{$address}" class="form-control">
</div> </div>
{if $_c['man_fields_custom'] neq 'no'}
{$customFields} {$customFields}
{/if}
</div> </div>
</div> </div>
</div> </div>
@ -114,21 +121,21 @@
</div> </div>
</div> </div>
{if $_c['tawkto'] != ''} {if $_c['tawkto'] != ''}
<!--Start of Tawk.to Script--> <!--Start of Tawk.to Script-->
<script type="text/javascript"> <script type="text/javascript">
var Tawk_API = Tawk_API || {}, var Tawk_API = Tawk_API || {},
Tawk_LoadStart = new Date(); Tawk_LoadStart = new Date();
(function() { (function () {
var s1 = document.createElement("script"), var s1 = document.createElement("script"),
s0 = document.getElementsByTagName("script")[0]; s0 = document.getElementsByTagName("script")[0];
s1.async = true; s1.async = true;
s1.src='https://embed.tawk.to/{$_c['tawkto']}'; s1.src = 'https://embed.tawk.to/{$_c['tawkto']}';
s1.charset = 'UTF-8'; s1.charset = 'UTF-8';
s1.setAttribute('crossorigin', '*'); s1.setAttribute('crossorigin', '*');
s0.parentNode.insertBefore(s1, s0); s0.parentNode.insertBefore(s1, s0);
})(); })();
</script> </script>
<!--End of Tawk.to Script--> <!--End of Tawk.to Script-->
{/if} {/if}
{include file="customer/footer-public.tpl"} {include file="customer/footer-public.tpl"}

View File

@ -47,21 +47,29 @@
<input type="file" required class="form-control" id="photo" name="photo" accept="image/*"> <input type="file" required class="form-control" id="photo" name="photo" accept="image/*">
</div> </div>
{/if} {/if}
{if $_c['man_fields_fname'] neq 'no'}
<div class="form-group"> <div class="form-group">
<label>{Lang::T('Full Name')}</label> <label>{Lang::T('Full Name')}</label>
<input type="text" required class="form-control" id="fullname" value="{$fullname}" <input type="text" required class="form-control" id="fullname" value="{$fullname}"
name="fullname"> name="fullname">
</div> </div>
{/if}
{if $_c['man_fields_email'] neq 'no'}
<div class="form-group"> <div class="form-group">
<label>{Lang::T('Email')}</label> <label>{Lang::T('Email')}</label>
<input type="text" class="form-control" id="email" placeholder="xxxxxxx@xxxx.xx" <input type="text" class="form-control" id="email" placeholder="xxxxxxx@xxxx.xx"
value="{$email}" name="email"> value="{$email}" name="email">
</div> </div>
{/if}
{if $_c['man_fields_address'] neq 'no'}
<div class="form-group"> <div class="form-group">
<label>{Lang::T('Address')}</label> <label>{Lang::T('Address')}</label>
<input type="text" name="address" id="address" value="{$address}" class="form-control"> <input type="text" name="address" id="address" value="{$address}" class="form-control">
</div> </div>
{/if}
{if $_c['man_fields_custom'] neq 'no'}
{$customFields} {$customFields}
{/if}
</div> </div>
</div> </div>
</div> </div>

View File

@ -173,6 +173,7 @@
background-color: #efeb0a; background-color: #efeb0a;
border-color: #efeb0a; border-color: #efeb0a;
} }
.panel-cron-danger>.panel-heading { .panel-cron-danger>.panel-heading {
border-bottom-right-radius: 21px; border-bottom-right-radius: 21px;
border-bottom-left-radius: 21px; border-bottom-left-radius: 21px;
@ -276,7 +277,7 @@
font-weight: bold; font-weight: bold;
} }
.box.box-solid.box-primary > .box-header .btn { .box.box-solid.box-primary>.box-header .btn {
color: inherit; color: inherit;
} }
@ -1136,6 +1137,11 @@
border-radius: 4px; border-radius: 4px;
} }
.dark-mode .container {
background-color: #353638;
}
/* Dark Mode - Select2 Dropdown ends here */ /* Dark Mode - Select2 Dropdown ends here */
/* dark mode styles start ends here */ /* dark mode styles start ends here */
@ -1288,8 +1294,8 @@
href="{$_url}services/hotspot">Hotspot</a></li> href="{$_url}services/hotspot">Hotspot</a></li>
<li {if $_routes[1] eq 'pppoe' }class="active" {/if}><a <li {if $_routes[1] eq 'pppoe' }class="active" {/if}><a
href="{$_url}services/pppoe">PPPOE</a></li> href="{$_url}services/pppoe">PPPOE</a></li>
<li {if $_routes[1] eq 'vpn' }class="active" {/if}><a <li {if $_routes[1] eq 'vpn' }class="active" {/if}><a href="{$_url}services/vpn">VPN</a>
href="{$_url}services/vpn">VPN</a></li> </li>
<li {if $_routes[1] eq 'list' }class="active" {/if}><a <li {if $_routes[1] eq 'list' }class="active" {/if}><a
href="{$_url}bandwidth/list">Bandwidth</a></li> href="{$_url}bandwidth/list">Bandwidth</a></li>
{if $_c['enable_balance'] == 'yes'} {if $_c['enable_balance'] == 'yes'}
@ -1524,4 +1530,4 @@
} }
}); });
</script> </script>
{/if} {/if}