473 lines
14 KiB
PHP
473 lines
14 KiB
PHP
<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
|
|
|
|
<script>
|
|
// ============================================================================
|
|
// Variables for the view
|
|
// ============================================================================
|
|
|
|
// ============================================================================
|
|
// Functions for the view
|
|
// ============================================================================
|
|
|
|
function changePassword() {
|
|
var newPassword = $('#newPassword').val();
|
|
var confirmPassword = $('#confirmPassword').val();
|
|
|
|
if (newPassword.length < PASSWORD_LENGTH) {
|
|
showAlertError("<?php $L->p('Password must be at least 6 characters long') ?>");
|
|
return false;
|
|
}
|
|
|
|
if (newPassword !== confirmPassword) {
|
|
showAlertError("<?php $L->p('The password and confirmation password do not match') ?>");
|
|
return false;
|
|
}
|
|
|
|
bootbox.confirm({
|
|
message: '<?php $L->p('Are you sure you want to change the password') ?>',
|
|
buttons: {
|
|
cancel: {
|
|
label: '<i class="fa fa-times"></i><?php $L->p('Cancel') ?>',
|
|
className: 'btn-sm btn-secondary'
|
|
},
|
|
confirm: {
|
|
label: '<i class="fa fa-check"></i><?php $L->p('Confirm') ?>',
|
|
className: 'btn-sm btn-primary'
|
|
}
|
|
},
|
|
closeButton: false,
|
|
callback: function(result) {
|
|
if (result) {
|
|
// The user accepted the action to change the password
|
|
var args = {
|
|
username: $('#username').val(),
|
|
password: $('#newPassword').val()
|
|
};
|
|
api.editUser(args).then(function(response) {
|
|
if (response.status == 0) {
|
|
logs('User password changed. Username: ' + response.data.key);
|
|
showAlertInfo("<?php $L->p('The changes have been saved') ?>");
|
|
} else {
|
|
logs('An error occurred while trying to change the user password.');
|
|
showAlertError(response.message);
|
|
}
|
|
});
|
|
}
|
|
$('#newPassword').val('');
|
|
$('#confirmPassword').val('');
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
function save() {
|
|
let args = {
|
|
username: $('#username').val(),
|
|
role: $('#role').val()
|
|
};
|
|
|
|
$('input[data-save="true"]').each(function() {
|
|
var key = $(this).attr('name');
|
|
var value = $(this).val();
|
|
args[key] = value;
|
|
})
|
|
|
|
api.editUser(args).then(function(response) {
|
|
if (response.status == 0) {
|
|
logs('User edited. Username: ' + response.data.key);
|
|
showAlertInfo("<?php $L->p('The changes have been saved') ?>");
|
|
} else {
|
|
logs('An error occurred while trying to edit the user.');
|
|
showAlertError(response.message);
|
|
}
|
|
});
|
|
}
|
|
|
|
// ============================================================================
|
|
// Events for the view
|
|
// ============================================================================
|
|
$(document).ready(function() {
|
|
|
|
$('#btnSave').on('click', function() {
|
|
// Change the password if the user write a new one in the input
|
|
if ($('#newPassword').val()) {
|
|
changePassword();
|
|
} else {
|
|
// Save the edited fields
|
|
save();
|
|
}
|
|
});
|
|
|
|
$('#inputProfilePicture').on("change", function(e) {
|
|
var inputProfilePicture = $('#inputProfilePicture')[0].files;
|
|
var username = $('#username').val();
|
|
|
|
var formData = new FormData();
|
|
formData.append("file", inputProfilePicture[0]);
|
|
formData.append("token", api.body.token);
|
|
formData.append("authentication", api.body.authentication);
|
|
$.ajax({
|
|
url: api.apiURL + 'users/picture/' + username,
|
|
type: "POST",
|
|
data: formData,
|
|
cache: false,
|
|
contentType: false,
|
|
processData: false,
|
|
xhr: function() {
|
|
var xhr = $.ajaxSettings.xhr();
|
|
if (xhr.upload) {
|
|
xhr.upload.addEventListener("progress", function(e) {
|
|
if (e.lengthComputable) {
|
|
var percentComplete = (e.loaded / e.total) * 100;
|
|
logs('Uploading profile image: ' + percentComplete + '%');
|
|
}
|
|
}, false);
|
|
}
|
|
return xhr;
|
|
}
|
|
}).done(function(response) {
|
|
logs(response);
|
|
if (response.status == 0) {
|
|
logs("Profile picture uploaded.");
|
|
showAlertInfo("<?php $L->p('The changes have been saved') ?>");
|
|
$('#profilePicturePreview').attr('src', response.data.absoluteURL);
|
|
} else {
|
|
logs("An error occurred while trying to upload the profile picture.");
|
|
showAlertError(response.message);
|
|
}
|
|
});
|
|
return true;
|
|
});
|
|
|
|
$('#btnRemoveProfilePicture').on('click', function() {
|
|
var username = $('#username').val();
|
|
logs('Deleting profile picture. Username: ' + username);
|
|
bootbox.confirm({
|
|
message: '<?php $L->p('Are you sure you want to delete the profile picture') ?>',
|
|
buttons: {
|
|
cancel: {
|
|
label: '<i class="fa fa-times"></i><?php $L->p('Cancel') ?>',
|
|
className: 'btn-sm btn-secondary'
|
|
},
|
|
confirm: {
|
|
label: '<i class="fa fa-check"></i><?php $L->p('Confirm') ?>',
|
|
className: 'btn-sm btn-primary'
|
|
}
|
|
},
|
|
closeButton: false,
|
|
callback: function(result) {
|
|
if (result) {
|
|
var args = {
|
|
username: username
|
|
};
|
|
api.deleteProfilePicture(args).then(function(response) {
|
|
if (response.status == 0) {
|
|
logs('Profile picture deleted. Username: ' + response.data.key);
|
|
showAlertInfo("<?php $L->p('The changes have been saved') ?>");
|
|
$('#profilePicturePreview').attr('src', '<?php echo HTML_PATH_CORE_IMG . 'default.svg' ?>');
|
|
} else {
|
|
logs("An error occurred while trying to delete the profile picture.");
|
|
showAlertError(response.message);
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#btnDisableUser').on('click', function() {
|
|
var username = $('#username').val();
|
|
logs('Disabling user. Username: ' + username);
|
|
bootbox.confirm({
|
|
message: '<?php $L->p('Are you sure you want to disable this user') ?>',
|
|
buttons: {
|
|
cancel: {
|
|
label: '<i class="fa fa-times"></i><?php $L->p('Cancel') ?>',
|
|
className: 'btn-sm btn-secondary'
|
|
},
|
|
confirm: {
|
|
label: '<i class="fa fa-check"></i><?php $L->p('Confirm') ?>',
|
|
className: 'btn-sm btn-primary'
|
|
}
|
|
},
|
|
closeButton: false,
|
|
callback: function(result) {
|
|
if (result) {
|
|
var args = {
|
|
username: $('#username').val(),
|
|
disable: true
|
|
};
|
|
api.editUser(args).then(function(response) {
|
|
if (response.status == 0) {
|
|
logs('User disabled. Username: ' + response.data.key);
|
|
window.location.replace(HTML_PATH_ADMIN_ROOT + 'users');
|
|
} else {
|
|
logs("An error occurred while trying to disable the user.");
|
|
showAlertError(response.message);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
// ============================================================================
|
|
// Initlization for the view
|
|
// ============================================================================
|
|
$(document).ready(function() {
|
|
// nothing here yet
|
|
// how do you hang your toilet paper ? over or under ?
|
|
});
|
|
</script>
|
|
|
|
<div class="d-flex align-items-center mb-4">
|
|
<h2 class="m-0"><i class="bi bi-person"></i><?php $L->p('Edit user') ?></h2>
|
|
<div class="ms-auto">
|
|
<button id="btnSave" type="button" class="btn btn-primary btn-sm"><?php $L->p('Save') ?></button>
|
|
<a id="btnCancel" class="btn btn-secondary btn-sm" href="<?php echo HTML_PATH_ADMIN_ROOT . 'users' ?>" role="button"><?php $L->p('Cancel') ?></a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tabs -->
|
|
<ul class="nav nav-tabs ps-3 mb-3" role="tablist">
|
|
<li class="nav-item">
|
|
<a class="nav-link active" id="profile-tab" data-bs-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="true"><?php $L->p('Profile') ?></a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" id="picture-tab" data-bs-toggle="tab" href="#picture" role="tab" aria-controls="picture" aria-selected="false"><?php $L->p('Profile picture') ?></a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" id="security-tab" data-bs-toggle="tab" href="#security" role="tab" aria-controls="security" aria-selected="false"><?php $L->p('Security') ?></a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" id="social-tab" data-bs-toggle="tab" href="#social" role="tab" aria-controls="social" aria-selected="false"><?php $L->p('Social Networks') ?></a>
|
|
</li>
|
|
</ul>
|
|
<!-- End Tabs -->
|
|
|
|
<!-- Content -->
|
|
<div class="tab-content" id="tabContent">
|
|
|
|
<!-- Tab profile -->
|
|
<div class="tab-pane show active" id="profile" role="tabpanel">
|
|
<?php
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'username',
|
|
'label' => $L->g('Username'),
|
|
'value' => $user->username(),
|
|
'disabled' => true
|
|
));
|
|
|
|
if ($login->role() === 'admin') {
|
|
echo Bootstrap::formSelect(array(
|
|
'name' => 'role',
|
|
'label' => $L->g('Role'),
|
|
'options' => array('author' => $L->g('Author'), 'editor' => $L->g('Editor'), 'admin' => $L->g('Administrator')),
|
|
'selected' => $user->role(),
|
|
'tip' => $L->g('author-can-write-and-edit-their-own-content')
|
|
));
|
|
}
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'email',
|
|
'label' => $L->g('Email'),
|
|
'value' => $user->email(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'nickname',
|
|
'label' => $L->g('Nickname'),
|
|
'value' => $user->nickname(),
|
|
'tip' => $L->g('The nickname is almost used in the themes to display the author of the content'),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'firstName',
|
|
'label' => $L->g('First Name'),
|
|
'value' => $user->firstName(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'lastName',
|
|
'label' => $L->g('Last Name'),
|
|
'value' => $user->lastName(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
?>
|
|
</div>
|
|
<!-- End Tab profile -->
|
|
|
|
<!-- Tab profile picture -->
|
|
<div class="tab-pane" id="picture" role="tabpanel">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-8">
|
|
<img id="profilePicturePreview" class="img-fluid img-thumbnail" alt="Profile picture preview" src="<?php echo ($user->profilePicture() ? $user->profilePicture() . '?version=' . time() : HTML_PATH_CORE_IMG . 'default.svg') ?>" />
|
|
</div>
|
|
<div class="col-4">
|
|
<label id="btnUploadProfilePicture" class="btn btn-primary"><i class="bi bi-upload"></i><?php $L->p('Upload image'); ?><input type="file" id="inputProfilePicture" name="inputProfilePicture" hidden></label>
|
|
<button id="btnRemoveProfilePicture" type="button" class="btn btn-secondary"><i class="bi bi-trash"></i><?php $L->p('Remove image'); ?></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End Tab profile picture -->
|
|
|
|
<!-- Tab security -->
|
|
<div class="tab-pane" id="security" role="tabpanel">
|
|
<?php
|
|
if (checkRole(array('admin'), false)) {
|
|
echo Bootstrap::formTitle(array('title' => $L->g('Status')));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'status',
|
|
'label' => $L->g('Current status'),
|
|
'value' => $user->enabled() ? $L->g('Enabled') : $L->g('Disabled'),
|
|
'disabled' => true,
|
|
'tip' => $user->enabled() ? '' : $L->g('To enable the user you must set a new password')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'registered',
|
|
'label' => $L->g('Registered'),
|
|
'value' => Date::format($user->registered(), DB_DATE_FORMAT, ADMIN_PANEL_DATE_FORMAT),
|
|
'disabled' => true
|
|
));
|
|
|
|
if ($user->enabled()) {
|
|
echo '
|
|
<div class="form-group row">
|
|
<div class="col-sm-2"></div>
|
|
<div class="col-sm-10">
|
|
<button type="button" class="btn btn-warning me-2" id="btnDisableUser"><i class="bi bi-slash-circle"></i>' . $L->g('Disable user') . '</button>
|
|
<button type="button" class="btn btn-danger me-2" id="btnDeleteUserAndKeepContent"><i class="bi bi-trash"></i>' . $L->g('Delete user and keep content') . '</button>
|
|
<button type="button" class="btn btn-danger" id="btnDeleteUserAndContent"><i class="bi bi-trash"></i>' . $L->g('Delete user and delete content') . '</button>
|
|
</div>
|
|
</div>
|
|
';
|
|
}
|
|
}
|
|
|
|
echo Bootstrap::formTitle(array('title' => $L->g('Authentication Token')));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'tokenAuth',
|
|
'label' => $L->g('Token'),
|
|
'value' => $user->tokenAuth(),
|
|
'tip' => $L->g('this-token-is-similar-to-a-password-it-should-not-be-shared')
|
|
));
|
|
|
|
echo Bootstrap::formTitle(array('title' => $L->g('Change password')));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'newPassword',
|
|
'label' => $L->g('New password'),
|
|
'type' => 'password',
|
|
'value' => ''
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'confirmPassword',
|
|
'label' => $L->g('Confirm password'),
|
|
'type' => 'password',
|
|
'value' => ''
|
|
));
|
|
?>
|
|
</div>
|
|
<!-- End Tab security -->
|
|
|
|
<!-- Social Networks tab -->
|
|
<div class="tab-pane" id="social" role="tabpanel">
|
|
<?php
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'youtube',
|
|
'label' => 'Youtube',
|
|
'value' => $user->youtube(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'twitter',
|
|
'label' => 'Twitter',
|
|
'value' => $user->twitter(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'facebook',
|
|
'label' => 'Facebook',
|
|
'value' => $user->facebook(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'discord',
|
|
'label' => 'Discord',
|
|
'value' => $user->discord(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'codepen',
|
|
'label' => 'CodePen',
|
|
'value' => $user->codepen(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'instagram',
|
|
'label' => 'Instagram',
|
|
'value' => $user->instagram(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'gitlab',
|
|
'label' => 'GitLab',
|
|
'value' => $user->gitlab(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'github',
|
|
'label' => 'GitHub',
|
|
'value' => $user->github(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'linkedin',
|
|
'label' => 'LinkedIn',
|
|
'value' => $user->linkedin(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'xing',
|
|
'label' => 'Xing',
|
|
'value' => $user->xing(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'mastodon',
|
|
'label' => 'Mastodon',
|
|
'value' => $user->mastodon(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
|
|
echo Bootstrap::formInputText(array(
|
|
'name' => 'vk',
|
|
'label' => 'VK',
|
|
'value' => $user->vk(),
|
|
'data' => array('save' => 'true')
|
|
));
|
|
?>
|
|
</div>
|
|
</div>
|