<?php
$grid = new ArtiGrid();
$html = '
<div class="container d-flex justify-content-center align-items-center">
<div class="col-md-8 col-lg-4">
<div class="card shadow-lg border-0">
<div class="card-body p-4">
<h4 class="text-center mb-4">
Login Example
</h4>
<div class="mb-3">
<label class="form-label">User *</label>
{user}
</div>
<div class="mb-3">
<label class="form-label">Password *</label>
{password}
</div>
<div class="d-grid">
{action}
</div>
</div>
</div>
</div>
</div>';
$grid->setSelectFormTemplate($html);
$grid->table('users')
->template('bootstrap5')
->required(false)
->validation_required('user')
->validation_required('password')
->formFields(['user','password']);
echo $grid->render('select');
?>
//Create the file users.php in this path: callbacks/users.php
return [
'beforeSelect' => [
['callback' => 'login', 'file' => 'functions.php'],
]
];
//in functions.php
function login($data){
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$db = DB::connect();
$user = trim($data['user'] ?? '');
$pass = trim($data['password'] ?? '');
if ($user === '' || $pass === '') {
return [
'success' => false,
'message' => 'Empty username or password'
];
}
$q = new Queryfy($db);
$row = $q->table('users')
->where('user', $user)
->limit(1)
->get();
$row = $row[0] ?? null;
if ($row && password_verify($pass, $row['password'])) {
$_SESSION['user'] = [
'id' => $row['id'],
'rol' => $row['rol'],
'usuario' => $row['user']
];
return [
'success' => true,
'message' => 'Successful login',
'redirect' => 'https://google.cl'
];
}
return [
'success' => false,
'message' => 'Incorrect username or password'
];
}
// in front end
<script>
document.addEventListener('artigrid_select_form_response', function(e){
const { response } = e.detail;
console.log("Answer:", response);
if (response.success && response.data?.success) {
if (response.data?.redirect) {
window.location.href = response.data.redirect;
}
} else {
const msg = response.data?.message || response.message || 'Unknown error';
Swal.fire({
icon: 'error',
title: 'Error',
text: msg,
confirmButtonText: 'Accept'
});
}
});
</script>