Premier commit
This commit is contained in:
58
modules/user/views/admin/edit.php
Normal file
58
modules/user/views/admin/edit.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
use function Piko\I18n\__;
|
||||
|
||||
assert($this instanceof Piko\View);
|
||||
assert($user instanceof app\modules\user\models\User);
|
||||
|
||||
/* @var $message array */
|
||||
/* @var $roles array */
|
||||
|
||||
$this->title = empty($user->id) ? __('user', 'Create user') : __('user', 'Edit user');
|
||||
$roleIds = $user->getRoleIds();
|
||||
?>
|
||||
<div class="container">
|
||||
|
||||
<?php if (is_array($message)): ?>
|
||||
<div class="alert alert-<?= $message['type'] ?> alert-dismissible" role="alert">
|
||||
<?= $message['content'] ?>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<form method="post">
|
||||
<div class="mb-3">
|
||||
<label for="name"><?= __('user', 'Name') ?></label>
|
||||
<input type="text" class="form-control" id="name" name="name" value="<?= $user->name ?>">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="email"><?= __('user', 'Email') ?></label>
|
||||
<input type="text" class="form-control" id="email" name="email" value="<?= $user->email ?>">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="username"><?= __('user', 'Username') ?></label>
|
||||
<input type="text" class="form-control" id="username" name="username" value="<?= $user->username ?>">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="password"><?= __('user', 'Password') ?></label>
|
||||
<input type="text" class="form-control" id="password" name="password" value="">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="roles"><?= __('user', 'Roles') ?></label>
|
||||
<select class="form-select" id="roles" name="roles[]" multiple>
|
||||
<?php foreach ($roles as $role): ?>
|
||||
<option value="<?= $role['id']?>"<?= in_array($role['id'], $roleIds)? ' selected' : '' ?>><?= $role['name']?></option>
|
||||
<?php endforeach ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<button type="submit" class="btn btn-primary"><?= __('user', 'Save') ?></button>
|
||||
<a href="<?= $this->getUrl('user/admin/users')?>" class="btn btn-default"><?= __('user', 'Close') ?></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
17
modules/user/views/admin/nav.php
Normal file
17
modules/user/views/admin/nav.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
use function Piko\I18n\__;
|
||||
/* @var $this \piko\View */
|
||||
/* @var $page string */
|
||||
|
||||
?>
|
||||
<ul class="nav nav-tabs my-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link<?= $page == 'users' ? ' active' : '' ?>" href="<?= $this->getUrl('user/admin/users') ?>"><?= __('user', 'Users') ?></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link<?= $page == 'roles' ? ' active' : '' ?>" href="<?= $this->getUrl('user/admin/roles') ?>"><?= __('user', 'Roles') ?></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link<?= $page == 'permissions' ? ' active' : '' ?>" href="<?= $this->getUrl('user/admin/permissions') ?>"><?= __('user', 'Permissions') ?></a>
|
||||
</li>
|
||||
</ul>
|
||||
111
modules/user/views/admin/permissions.php
Normal file
111
modules/user/views/admin/permissions.php
Normal file
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
use Piko;
|
||||
use function Piko\I18n\__;
|
||||
assert($this instanceof Piko\View);
|
||||
|
||||
/* @var $permissions array */
|
||||
|
||||
$this->title = __('user', 'Permissions');
|
||||
|
||||
$this->registerCSSFile(Piko::getAlias('@web/js/DataTables/datatables.min.css'));
|
||||
$this->registerJsFile(Piko::getAlias('@web/js/jquery-3.7.1.min.js'));
|
||||
$this->registerJsFile(Piko::getAlias('@web/js/DataTables/datatables.min.js'));
|
||||
|
||||
$script = <<<JS
|
||||
$(function() {
|
||||
|
||||
$('#permissions-table').DataTable({
|
||||
'order': [[1, 'desc']]
|
||||
});
|
||||
|
||||
$('#delete').click(function(e) {
|
||||
if (confirm('Êtes-vous sûr de vouloir effectuer cette action ?')) {
|
||||
$('#admin-form').attr('action', '/user/admin/delete-permissions')
|
||||
$('#admin-form').submit()
|
||||
}
|
||||
});
|
||||
|
||||
$('#btn-new-permission, .edit-permission').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var permissionName = '';
|
||||
var permissionId = $(this).data('id');
|
||||
var action = $(this).attr('href');
|
||||
const modal = new bootstrap.Modal('#editPermissionModal');
|
||||
|
||||
if ($(this).hasClass('edit-permission')) {
|
||||
permissionName = $(this).text();
|
||||
}
|
||||
|
||||
$('#permission-name').val(permissionName);
|
||||
modal.show();
|
||||
|
||||
$('#btn-save-permission').on('click', function() {
|
||||
if ($('#permission-name').val()) {
|
||||
$.ajax({
|
||||
method: 'post',
|
||||
url: action,
|
||||
data: {name: $('#permission-name').val(), id: permissionId}
|
||||
})
|
||||
.done(function(data) {
|
||||
if (data.status == 'success') {
|
||||
location.reload();
|
||||
}
|
||||
if (data.status == 'error') {
|
||||
alert(data.error)
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
JS;
|
||||
$this->registerJs($script);
|
||||
|
||||
?>
|
||||
|
||||
<?= $this->render('nav', ['page' => 'permissions']) ?>
|
||||
|
||||
<form action="" method="post" id="admin-form">
|
||||
|
||||
<div class="btn-group mb-4" role="group">
|
||||
<a href="<?= $this->getUrl('user/admin/edit-permission') ?>" class="btn btn-primary btn-sm" id="btn-new-permission"><?= __('user', 'New permission') ?></a>
|
||||
<button type="button" class="btn btn-danger btn-sm" id="delete"><?= __('user', 'Delete') ?></button>
|
||||
</div>
|
||||
|
||||
<table class="table table-striped" id="permissions-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?= __('user', 'Name') ?></th>
|
||||
<th><?= __('user', 'Id') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($permissions as $permission): ?>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="items[]" value="<?= $permission['id'] ?>">
|
||||
<a href="<?= $this->getUrl('user/admin/edit-permission', ['id' => $permission['id']])?>"
|
||||
class="edit-permission" data-id="<?= $permission['id'] ?>"><?= $permission['name'] ?></a>
|
||||
</td>
|
||||
<td><?= $permission['id'] ?></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
|
||||
<div class="modal fade" id="editPermissionModal" tabindex="-1" role="dialog" aria-labelledby="editPermissionModal" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<input type="text" id="permission-name" class="form-control" placeholder="<?= __('user', 'Permission name') ?>">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= __('user', 'Cancel') ?></button>
|
||||
<button type="button" class="btn btn-primary" id="btn-save-permission"><?= __('user', 'Save') ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
152
modules/user/views/admin/roles.php
Normal file
152
modules/user/views/admin/roles.php
Normal file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
use Piko;
|
||||
use function Piko\I18n\__;
|
||||
assert($this instanceof Piko\View);
|
||||
|
||||
/* @var $roles array */
|
||||
/* @var $permissions array */
|
||||
|
||||
$this->title = __('user', 'Roles');
|
||||
|
||||
$this->registerCSSFile(Piko::getAlias('@web/js/DataTables/datatables.min.css'));
|
||||
$this->registerJsFile(Piko::getAlias('@web/js/jquery-3.7.1.min.js'));
|
||||
$this->registerJsFile(Piko::getAlias('@web/js/DataTables/datatables.min.js'));
|
||||
|
||||
$confirmDeleteMsg = __('user', 'Are you sure you want to perform this action?');
|
||||
|
||||
$script = <<<JS
|
||||
$(function() {
|
||||
|
||||
$('#roles-table').DataTable({
|
||||
'order': [[1, 'desc']]
|
||||
});
|
||||
|
||||
$('#delete').click(function(e) {
|
||||
if (confirm('{$confirmDeleteMsg}')) {
|
||||
$('#admin-form').attr('action', '/user/admin/delete-roles')
|
||||
$('#admin-form').submit()
|
||||
}
|
||||
});
|
||||
|
||||
$('#btn-new, .edit-role').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var data = {
|
||||
id: $(this).data('id'),
|
||||
parent_id: $(this).data('parent_id'),
|
||||
name: '',
|
||||
description: $(this).data('description')
|
||||
};
|
||||
|
||||
var action = $(this).attr('href');
|
||||
|
||||
const modal = new bootstrap.Modal('#editRoleModal');
|
||||
|
||||
if ($(this).hasClass('edit-role')) {
|
||||
data.name = $(this).text();
|
||||
}
|
||||
|
||||
$('#role-name').val(data.name);
|
||||
$('#role-description').val(data.description);
|
||||
|
||||
$.ajax({
|
||||
method: 'get',
|
||||
url: action,
|
||||
})
|
||||
.done(function(data) {
|
||||
if (data.role.permissions) {
|
||||
$('#permissions').val(data.role.permissions)
|
||||
}
|
||||
});
|
||||
|
||||
modal.show();
|
||||
|
||||
$('#btn-save').on('click', function() {
|
||||
if ($('#role-name').val()) {
|
||||
data.name = $('#role-name').val();
|
||||
data.description = $('#role-description').val();
|
||||
data.parent_id = $('#role-parent-id').val();
|
||||
data.permissions = $('#permissions').val();
|
||||
$.ajax({
|
||||
method: 'post',
|
||||
url: action,
|
||||
data: data
|
||||
})
|
||||
.done(function(data) {
|
||||
if (data.status == 'success') {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
JS;
|
||||
$this->registerJs($script);
|
||||
|
||||
?>
|
||||
|
||||
<?= $this->render('nav', ['page' => 'roles']) ?>
|
||||
|
||||
<form action="" method="post" id="admin-form">
|
||||
|
||||
<div class="btn-group mb-4" role="group">
|
||||
<a href="<?= $this->getUrl('user/admin/edit-role') ?>" class="btn btn-primary btn-sm" id="btn-new"><?= __('user', 'New role') ?></a>
|
||||
<button type="button" class="btn btn-danger btn-sm" id="delete"><?= __('user', 'Delete') ?></button>
|
||||
</div>
|
||||
|
||||
<table class="table table-striped" id="roles-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?= __('user', 'Name') ?></th>
|
||||
<th><?= __('user', 'Description') ?></th>
|
||||
<th><?= __('user', 'Id') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($roles as $role): ?>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="items[]" value="<?= $role['id'] ?>">
|
||||
<a href="<?= $this->getUrl('user/admin/edit-role', ['id' => $role['id']])?>"
|
||||
class="edit-role"
|
||||
data-description="<?= $role['description'] ?>"
|
||||
data-id="<?= $role['id'] ?>"><?= $role['name'] ?></a>
|
||||
</td>
|
||||
<td><?= $role['description'] ?></td>
|
||||
<td><?= $role['id'] ?></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<div class="modal fade" id="editRoleModal" tabindex="-1" role="dialog" aria-labelledby="editRoleModal" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="role-name"><?= __('user', 'Role name') ?></label>
|
||||
<input type="text" id="role-name" class="form-control">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="role-description"><?= __('user', 'Description') ?></label>
|
||||
<textarea rows="3" class="form-control" id="role-description"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="permissions"><?= __('user', 'Role permissions') ?></label>
|
||||
<select class="form-select" id="permissions" multiple>
|
||||
<?php foreach ($permissions as $perm): ?>
|
||||
<option value="<?= $perm['id']?>"><?= $perm['name']?></option>
|
||||
<?php endforeach ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= __('user', 'Cancel') ?></button>
|
||||
<button type="button" class="btn btn-primary" id="btn-save"><?= __('user', 'Save') ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
71
modules/user/views/admin/users.php
Normal file
71
modules/user/views/admin/users.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
use function Piko\I18n\__;
|
||||
|
||||
assert($this instanceof Piko\View);
|
||||
|
||||
/* @var $users array */
|
||||
|
||||
$this->title = __('user', 'Users management');
|
||||
|
||||
$this->registerCSSFile(Piko::getAlias('@web/js/DataTables/datatables.min.css'));
|
||||
$this->registerJsFile(Piko::getAlias('@web/js/jquery-3.7.1.min.js'));
|
||||
$this->registerJsFile(Piko::getAlias('@web/js/DataTables/datatables.min.js'));
|
||||
|
||||
|
||||
$confirmDeleteMsg = __('user', 'Are you sure you want to perform this action?');
|
||||
$script = <<<JS
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#users-table').DataTable({
|
||||
'order': [[3, 'desc']]
|
||||
});
|
||||
|
||||
$('#delete').click(function(e) {
|
||||
if (confirm('{$confirmDeleteMsg}')) {
|
||||
$('#admin-form').attr('action', '/user/admin/delete')
|
||||
$('#admin-form').submit()
|
||||
}
|
||||
});
|
||||
});
|
||||
JS;
|
||||
$this->registerJs($script);
|
||||
|
||||
?>
|
||||
|
||||
<?= $this->render('nav', ['page' => 'users']) ?>
|
||||
|
||||
<form action="" method="post" id="admin-form">
|
||||
|
||||
<div class="btn-group mb-4" role="group">
|
||||
<a href="<?= $this->getUrl('user/admin/edit') ?>" class="btn btn-primary btn-sm"><?= __('user', 'Create user') ?></a>
|
||||
<button type="button" class="btn btn-danger btn-sm" id="delete"><?= __('user', 'Delete') ?></button>
|
||||
</div>
|
||||
|
||||
<table id="users-table" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?= __('user', 'Name') ?></th>
|
||||
<th><?= __('user', 'Username') ?></th>
|
||||
<th><?= __('user', 'Email') ?></th>
|
||||
<th><?= __('user', 'Last login at') ?></th>
|
||||
<th><?= __('user', 'Created at') ?></th>
|
||||
<th><?= __('user', 'Id') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($users as $user): ?>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="items[]" value="<?= $user['id'] ?>">
|
||||
<a href="<?= $this->getUrl('user/admin/edit', ['id' => $user['id']])?>"><?= $user['name'] ?></a>
|
||||
</td>
|
||||
<td><?= $user['username']?></td>
|
||||
<td><?= $user['email']?></td>
|
||||
<td><?= empty($user['last_login_at']) ? '' : date('Y-m-d H:i', $user['last_login_at']) ?></td>
|
||||
<td><?= date('Y-m-d H:i', $user['created_at']) ?></td>
|
||||
<td><?= $user['id'] ?></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
93
modules/user/views/default/edit.php
Normal file
93
modules/user/views/default/edit.php
Normal file
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
use function Piko\I18n\__;
|
||||
|
||||
assert($this instanceof Piko\View);
|
||||
|
||||
/* @var $message array */
|
||||
/* @var $user piko\user\models\User */
|
||||
|
||||
$this->title = __('user', 'Edit your account');
|
||||
|
||||
if (is_array($message)) {
|
||||
$this->params['message'] = $message;
|
||||
}
|
||||
|
||||
if (!empty($user->profil)) {
|
||||
$user->profil = json_decode($user->profil);
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<div class="container mt-5">
|
||||
<h1><?= $this->title ?></h1>
|
||||
|
||||
<form method="post" novalidate>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="username"><?= __('user', 'Username') ?> : <strong><?= $user->username ?></strong></label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="email"><?= __('user', 'Email') ?></label>
|
||||
<input type="text" class="form-control" id="email" name="email" value="<?= $user->email ?>">
|
||||
<?php if (!empty($user->errors['email'])): ?>
|
||||
<div class="alert alert-danger" role="alert"><?= $user->errors['email'] ?></div>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password"><?= __('user', 'Password (leave blank to keep the same)') ?></label>
|
||||
<input type="password" class="form-control" id="password" name="password" value="" autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="lastname"><?= __('user', 'Last name') ?></label>
|
||||
<input type="text" class="form-control" id="lastname" name="profil[lastname]" value="<?= isset($user->profil->lastname) ? $user->profil->lastname : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="firstname"><?= __('user', 'First name') ?></label>
|
||||
<input type="text" class="form-control" id="firstname" name="profil[firstname]" value="<?= isset($user->profil->firstname) ? $user->profil->firstname : '' ?>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="company"><?= __('user', 'Company') ?></label>
|
||||
<input type="text" class="form-control" id="company" name="profil[company]" value="<?= isset($user->profil->company) ? $user->profil->company : ''?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="telephone"><?= __('user', 'Phone number') ?></label>
|
||||
<input type="text" class="form-control" id="telephone" name="profil[telephone]" value="<?= isset($user->profil->telephone) ? $user->profil->telephone : ''?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<label for="address"><?= __('user', 'Address') ?></label>
|
||||
<input type="text" class="form-control" id="address" name="profil[address]" value="<?= isset($user->profil->address) ? $user->profil->address : ''?>">
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="zipcode"><?= __('user', 'Zip code') ?></label>
|
||||
<input type="text" class="form-control" id="zipcode" name="profil[zipcode]" value="<?= isset($user->profil->zipcode) ? $user->profil->zipcode : ''?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="city"><?= __('user', 'City') ?></label>
|
||||
<input type="text" class="form-control" id="city" name="profil[city]" value="<?= isset($user->profil->city) ? $user->profil->city : ''?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="country"><?= __('user', 'Country') ?></label>
|
||||
<input type="text" class="form-control" id="country" name="profil[country]" value="<?= isset($user->profil->country) ? $user->profil->country : ''?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary"><?= __('user', 'Save') ?></button>
|
||||
<a href="<?= Piko::getAlias('@web/')?>" class="btn btn-default"><?= __('user', 'Cancel') ?></a>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
77
modules/user/views/default/login.php
Normal file
77
modules/user/views/default/login.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
use function Piko\I18n\__;
|
||||
|
||||
assert($this instanceof Piko\View);
|
||||
|
||||
/**
|
||||
* @var $message boolean | array
|
||||
* @var $canRegister boolean
|
||||
*/
|
||||
|
||||
$this->title = __('user', 'Login');
|
||||
$this->params['breadcrumbs'][] = $this->title;
|
||||
|
||||
if (is_array($message)) {
|
||||
$this->params['message'] = $message;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<main class="form-signin w-100 m-auto">
|
||||
|
||||
<form action="<?= $this->getUrl('user/default/login') ?>" id="login-form" method="post">
|
||||
<h1 class="h3 mb-3 fw-normal"><?= $this->title ?></h1>
|
||||
|
||||
<div class="form-floating">
|
||||
<input type="text" class="form-control" id="username" name="username" autofocus="autofocus" aria-required="true"
|
||||
aria-invalid="true">
|
||||
<label for="username"><?= __('user', 'Username') ?></label>
|
||||
</div>
|
||||
<div class="form-floating">
|
||||
<input type="password" class="form-control" id="loginform-password" name="password" value="" aria-required="true">
|
||||
<label for="loginform-password"><?= __('user', 'Password') ?></label>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary w-100 py-2" type="submit"><?= __('user', 'Login') ?></button>
|
||||
<p class="mt-5 mb-3 text-body-secondary">© 2017–2023</p>
|
||||
|
||||
|
||||
<!--
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="loginform-username"><?= __('user', 'Username') ?></label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" id="username" class="form-control" name="username" autofocus="autofocus" aria-required="true"
|
||||
aria-invalid="true">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="loginform-password"><?= __('user', 'Password') ?></label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" id="loginform-password" class="form-control" name="password" value="" aria-required="true">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<button type="submit" class="btn btn-primary" name="login-button"><?= __('user', 'Login') ?></button>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
</form>
|
||||
|
||||
<?php if ($canRegister): ?>
|
||||
|
||||
<div class="p-3 border bg-light text-dark">
|
||||
<p><?= __('user', 'No account yet?') ?></p>
|
||||
<p><a href="<?= $this->getUrl('user/default/register')?>" class="btn btn-primary"><?= __('user', 'Register') ?></a></p>
|
||||
<hr>
|
||||
<p><a href="<?= $this->getUrl('user/default/reminder')?>"><?= __('user', 'Forget password?') ?></a></p>
|
||||
</div>
|
||||
|
||||
<?php endif ?>
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
82
modules/user/views/default/register.php
Normal file
82
modules/user/views/default/register.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
use piko\Piko;
|
||||
/* @var $this \piko\View */
|
||||
/* @var $router \piko\Router */
|
||||
/* @var $message array */
|
||||
|
||||
$router = Piko::get('router');
|
||||
|
||||
$this->title = Piko::t('user', 'Register');
|
||||
|
||||
if (is_array($message)) {
|
||||
$this->params['message'] = $message;
|
||||
return;
|
||||
}
|
||||
|
||||
$js = <<<SCRIPT
|
||||
jQuery(document).ready(function($) {
|
||||
|
||||
function validateField(e) {
|
||||
var that = this;
|
||||
|
||||
$.post('{$router->getUrl('user/default/check-registration')}', $('#register-form').serialize(), function(errors) {
|
||||
if (errors[that.name]) {
|
||||
$(that).addClass('is-invalid')
|
||||
$(that).removeClass('is-valid')
|
||||
$(that).next('.invalid-feedback').text(errors[that.name])
|
||||
} else {
|
||||
$(that).removeClass('is-invalid')
|
||||
$(that).addClass('is-valid')
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$('#username').focusout(validateField);
|
||||
$('#email').focusout(validateField);
|
||||
$('#password').focusout(validateField);
|
||||
$('#password2').focusout(validateField);
|
||||
|
||||
});
|
||||
SCRIPT;
|
||||
|
||||
$this->registerJs($js);
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<div class="container mt-5">
|
||||
|
||||
<h1><?= $this->title ?></h1>
|
||||
|
||||
<form method="post" id="register-form" novalidate>
|
||||
<div class="form-group">
|
||||
<label for="username"><?= Piko::t('user', 'Username') ?></label>
|
||||
<input type="text" class="form-control" id="username" name="username" value="">
|
||||
<div class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="email"><?= Piko::t('user', 'Email') ?></label>
|
||||
<input type="text" class="form-control" id="email" name="email" value="">
|
||||
<div class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password"><?= Piko::t('user', 'Password') ?></label>
|
||||
<input type="password" class="form-control" id="password" name="password" value="" autocomplete="off">
|
||||
<div class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password2"><?= Piko::t('user', 'Confirm your password') ?></label>
|
||||
<input type="password" class="form-control" id="password2" name="password2" value="" autocomplete="off">
|
||||
<div class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary"><?= Piko::t('user', 'Register') ?></button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
31
modules/user/views/default/reminder.php
Normal file
31
modules/user/views/default/reminder.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
use piko\Piko;
|
||||
/* @var $this \piko\View */
|
||||
/* @var $message array */
|
||||
/* @var $reminder string */
|
||||
|
||||
$this->title = Piko::t('user', 'Forget password');
|
||||
|
||||
if (is_array($message)) {
|
||||
$this->params['message'] = $message;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<div class="container" style="margin-top: 100px">
|
||||
|
||||
<h1><?= $this->title ?></h1>
|
||||
|
||||
<form method="post" id="reminder-form" novalidate>
|
||||
<div class="form-group">
|
||||
<label for="reminder"><?= Piko::t('user', 'Your email or your username') ?></label>
|
||||
<input type="text" class="form-control" id="reminder" name="reminder" value="<?= $reminder ?>" autocomplete="off">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary"><?= Piko::t('user', 'Send') ?></button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
75
modules/user/views/default/reset.php
Normal file
75
modules/user/views/default/reset.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
use piko\Piko;
|
||||
|
||||
/* @var $this \piko\View */
|
||||
/* @var $user piko\user\models\User */
|
||||
/* @var $message array */
|
||||
/* @var $router \piko\Router */
|
||||
|
||||
$router = Piko::get('router');
|
||||
|
||||
$this->title = Piko::t('user', 'Change your account ({account}) password',['account' => $user->username]);
|
||||
|
||||
if (is_array($message)) {
|
||||
$this->params['message'] = $message;
|
||||
|
||||
echo '<div class="container text-center"><a class="btn btn-primary" href="'. $router->getUrl('user/default/login').'">'
|
||||
. Piko::t('user', 'Login') . '</a></div>';
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$js = <<<SCRIPT
|
||||
jQuery(document).ready(function($) {
|
||||
|
||||
function validateField(e) {
|
||||
var that = this;
|
||||
|
||||
$.post('{$router->getUrl('user/default/check-registration')}', $('#register-form').serialize(), function(errors) {
|
||||
if (errors[that.name]) {
|
||||
$(that).addClass('is-invalid')
|
||||
$(that).removeClass('is-valid')
|
||||
$(that).next('.invalid-feedback').text(errors[that.name])
|
||||
} else {
|
||||
$(that).removeClass('is-invalid')
|
||||
$(that).addClass('is-valid')
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$('#password').focusout(validateField);
|
||||
$('#password2').focusout(validateField);
|
||||
|
||||
});
|
||||
SCRIPT;
|
||||
|
||||
$this->registerJs($js);
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<div class="container" style="margin-top: 100px">
|
||||
|
||||
<h1 class="h4"><?= $this->title ?></h1>
|
||||
|
||||
<form method="post" id="register-form" novalidate>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password"><?= Piko::t('user', 'Password') ?></label>
|
||||
<input type="password" class="form-control" id="password" name="password" value="" autocomplete="off">
|
||||
<div class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password2"><?= Piko::t('user', 'Confirm your password') ?></label>
|
||||
<input type="password" class="form-control" id="password2" name="password2" value="" autocomplete="off">
|
||||
<div class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary"><?= Piko::t('user', 'Send') ?></button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user