2020-04-18 00:51:33 +02:00
|
|
|
<?php
|
|
|
|
|
2023-01-29 17:36:21 +01:00
|
|
|
use EesyPHP\Check;
|
|
|
|
use EesyPHP\Log;
|
2023-01-31 00:30:04 +01:00
|
|
|
use EesyPHP\Tpl;
|
2023-01-29 19:18:10 +01:00
|
|
|
use EesyPHP\Url;
|
2023-01-29 17:36:21 +01:00
|
|
|
|
2024-02-02 18:19:38 +01:00
|
|
|
use EesyPHPExample\Db;
|
|
|
|
|
2023-01-29 17:36:21 +01:00
|
|
|
use function EesyPHP\vardump;
|
|
|
|
|
2020-11-18 18:53:47 +01:00
|
|
|
if (php_sapi_name() == "cli")
|
|
|
|
return true;
|
|
|
|
|
2023-02-13 02:43:31 +01:00
|
|
|
/**
|
|
|
|
* Search page handler
|
|
|
|
* @param EesyPHP\UrlRequest $request
|
|
|
|
* @return void
|
|
|
|
*/
|
2021-07-28 17:13:10 +02:00
|
|
|
function handle_search($request) {
|
2023-01-31 00:30:04 +01:00
|
|
|
global $status_list;
|
2020-04-18 00:51:33 +02:00
|
|
|
|
|
|
|
// Manage params
|
2022-04-24 17:43:44 +02:00
|
|
|
if(
|
|
|
|
(isset($_REQUEST['clear']) && $_REQUEST['clear']=='true') ||
|
|
|
|
!isset($_SESSION['search']) ||
|
|
|
|
!is_array($_SESSION['search'])
|
|
|
|
) {
|
2020-04-18 00:51:33 +02:00
|
|
|
$_SESSION['search']=array(
|
|
|
|
'pattern' => false,
|
|
|
|
'status' => 'all',
|
|
|
|
'order' => 'name',
|
|
|
|
'order_direction' => 'ASC',
|
|
|
|
);
|
|
|
|
if (isset($_REQUEST['clear']) && $_REQUEST['clear']=='true')
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect($request -> current_url);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 17:36:21 +01:00
|
|
|
Log :: debug('Request params : '.vardump($_REQUEST));
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2021-07-28 17:13:10 +02:00
|
|
|
$status_list['all'] = _('Any');
|
2020-04-18 00:51:33 +02:00
|
|
|
if (isset($_REQUEST['status'])) {
|
|
|
|
if (check_status($_REQUEST['status']) || $_REQUEST['status'] == 'all')
|
|
|
|
$_SESSION['search']['status'] = $_REQUEST['status'];
|
|
|
|
else
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: assign('status_error', true);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (isset($_REQUEST['pattern'])) {
|
|
|
|
if (trim($_REQUEST['pattern']) == '')
|
|
|
|
$_SESSION['search']['pattern'] = false;
|
2023-01-29 17:36:21 +01:00
|
|
|
else if (Check :: search_pattern($_REQUEST['pattern']))
|
2020-04-18 00:51:33 +02:00
|
|
|
$_SESSION['search']['pattern'] = $_REQUEST['pattern'];
|
|
|
|
else
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: assign('pattern_error', true);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Order
|
|
|
|
if(isset($_REQUEST['order'])) {
|
|
|
|
if( $_SESSION['search']['order']==$_REQUEST['order']) {
|
|
|
|
if ($_SESSION['search']['order_direction']=='ASC')
|
|
|
|
$_SESSION['search']['order_direction']='DESC';
|
|
|
|
else
|
|
|
|
$_SESSION['search']['order_direction']='ASC';
|
|
|
|
}
|
|
|
|
else
|
|
|
|
$_SESSION['search']['order_direction']='ASC';
|
|
|
|
$_SESSION['search']['order']=$_REQUEST['order'];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if($_SESSION['search']['order']=='') {
|
|
|
|
$_SESSION['search']['order']='date';
|
|
|
|
$_SESSION['search']['order_direction']='DESC';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Page
|
|
|
|
if (isset($_REQUEST['page'])) {
|
|
|
|
$_SESSION['search']['page']=intval($_REQUEST['page']);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$_SESSION['search']['page']=1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Nb par page
|
|
|
|
$nbs_by_page=array(10,25,50,100,500);
|
|
|
|
if (isset($_REQUEST['nb_by_page']) && in_array(intval($_REQUEST['nb_by_page']),$nbs_by_page)) {
|
|
|
|
$_SESSION['search']['nb_by_page']=intval($_REQUEST['nb_by_page']);
|
|
|
|
$_SESSION['search']['page']=1;
|
|
|
|
}
|
|
|
|
elseif (!isset($_SESSION['search']['nb_by_page'])) {
|
|
|
|
$_SESSION['search']['nb_by_page']=$nbs_by_page[0];
|
|
|
|
}
|
|
|
|
|
2023-01-29 17:36:21 +01:00
|
|
|
Log :: debug('Search params : '.vardump($_SESSION['search']));
|
2024-02-02 18:19:38 +01:00
|
|
|
$result = Db :: search_items($_SESSION['search']);
|
2020-04-18 00:51:33 +02:00
|
|
|
if (!is_array($result))
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: fatal_error(
|
2022-04-24 17:43:44 +02:00
|
|
|
_("An error occurred while listing the items. ".
|
|
|
|
"If the problem persists, please contact support.")
|
|
|
|
);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: assign('result', $result);
|
|
|
|
Tpl :: assign('search', $_SESSION['search']);
|
|
|
|
Tpl :: assign('nbs_by_page', $nbs_by_page);
|
|
|
|
Tpl :: assign('status_list', $status_list);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-03-06 03:55:35 +01:00
|
|
|
Tpl :: add_css_file(
|
|
|
|
'lib/bootstrap5-dialog/css/bootstrap-dialog.min.css',
|
|
|
|
);
|
2023-02-12 00:30:36 +01:00
|
|
|
Tpl :: add_js_file(
|
2023-03-06 03:55:35 +01:00
|
|
|
'lib/bootstrap5-dialog/js/bootstrap-dialog.min.js',
|
2022-04-24 16:52:44 +02:00
|
|
|
'js/myconfirm.js',
|
|
|
|
'js/search.js'
|
2023-02-12 00:30:36 +01:00
|
|
|
);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: display("search.tpl", _("Search"));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: add_url_handler('|^item/?$|', 'handle_search');
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-02-13 02:43:31 +01:00
|
|
|
/**
|
|
|
|
* Show one item page handler
|
|
|
|
* @param EesyPHP\UrlRequest $request
|
|
|
|
* @return void
|
2020-04-18 00:51:33 +02:00
|
|
|
*/
|
2021-07-28 17:13:10 +02:00
|
|
|
function handle_show($request) {
|
|
|
|
$item = get_item_from_url($request -> id);
|
2020-04-18 00:51:33 +02:00
|
|
|
if (!$item)
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: error_404();
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: assign('item', $item);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
|
|
|
// Dialog
|
2023-03-06 03:55:35 +01:00
|
|
|
Tpl :: add_css_file(
|
|
|
|
'lib/bootstrap5-dialog/css/bootstrap-dialog.min.css',
|
|
|
|
);
|
2023-02-12 00:30:36 +01:00
|
|
|
Tpl :: add_js_file(
|
2023-03-06 03:55:35 +01:00
|
|
|
'lib/bootstrap5-dialog/js/bootstrap-dialog.min.js',
|
2022-04-24 16:52:44 +02:00
|
|
|
'js/myconfirm.js',
|
2023-02-12 00:30:36 +01:00
|
|
|
);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: display(
|
2022-04-24 18:20:44 +02:00
|
|
|
"show.tpl", _("Element %s"),
|
|
|
|
(is_array($item)?$item['name']:"#".$request -> id)
|
2022-04-24 17:43:44 +02:00
|
|
|
);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: add_url_handler('|^item/(?P<id>[0-9]+)$|', 'handle_show');
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-02-13 02:43:31 +01:00
|
|
|
/**
|
|
|
|
* Create one item page handler
|
|
|
|
* @param EesyPHP\UrlRequest $request
|
|
|
|
* @return void
|
|
|
|
*/
|
2021-07-28 17:13:10 +02:00
|
|
|
function handle_create($request) {
|
2023-01-31 00:30:04 +01:00
|
|
|
global $status_list;
|
2020-04-18 00:51:33 +02:00
|
|
|
|
|
|
|
$info = array();
|
|
|
|
$field_errors = handle_item_post_data($info);
|
|
|
|
if (isset($_POST['submit']) && empty($field_errors)) {
|
2024-02-02 18:19:38 +01:00
|
|
|
$item = Db :: add_item($info);
|
2020-04-18 00:51:33 +02:00
|
|
|
if (is_array($item)) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_message(_("The element '%s' has been created."), $item['name']);
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect('item/'.$item['id']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-07-26 16:51:16 +02:00
|
|
|
Tpl :: add_error(_("An error occurred while saving this item."));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 17:36:21 +01:00
|
|
|
Log :: debug('Validated data : '.vardump($info));
|
|
|
|
Log :: debug('Fields errors : '.vardump($field_errors));
|
2020-04-18 00:51:33 +02:00
|
|
|
if (isset($_POST['submit']) && !empty($field_errors))
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: add_error(
|
2022-04-24 17:43:44 +02:00
|
|
|
_("There are errors preventing this item from being saved. ".
|
|
|
|
"Please correct them before attempting to add this item."));
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: assign('submited', isset($_POST['submit']));
|
|
|
|
Tpl :: assign('info', $info);
|
|
|
|
Tpl :: assign('field_errors', $field_errors);
|
|
|
|
Tpl :: assign('status_list', $status_list);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: display("form.tpl", _("New"));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: add_url_handler('|^item/new$|', 'handle_create');
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2021-07-28 17:13:10 +02:00
|
|
|
function handle_modify($request) {
|
2023-01-31 00:30:04 +01:00
|
|
|
global $status_list;
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2021-07-28 17:13:10 +02:00
|
|
|
$item = get_item_from_url($request -> id);
|
2023-07-26 16:51:16 +02:00
|
|
|
if(!is_array($item))
|
|
|
|
Url :: error_404();
|
|
|
|
if (!can_modify($item)) {
|
|
|
|
Tpl :: add_error(_('You cannot edit this item.'));
|
|
|
|
Url :: redirect('item/'.$item['id']);
|
|
|
|
}
|
|
|
|
$info = array();
|
|
|
|
$field_errors = handle_item_post_data($info);
|
|
|
|
if (isset($_POST['submit']) && empty($field_errors)) {
|
|
|
|
$changes = array();
|
|
|
|
foreach ($info as $key => $value) {
|
|
|
|
if ($value != $item[$key])
|
|
|
|
$changes[$key] = $value;
|
|
|
|
}
|
|
|
|
Log :: debug('Changes : '.vardump($changes));
|
|
|
|
if (empty($changes)) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_message(_("You have not made any changes to element '%s'."), $item['name']);
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect('item/'.$item['id']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2024-02-02 18:19:38 +01:00
|
|
|
if (Db :: update_item($item['id'], $changes) === true) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_message(_("The element '%s' has been updated successfully."), $item['name']);
|
2023-07-26 16:51:16 +02:00
|
|
|
Url :: redirect('item/'.$item['id']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-07-26 16:51:16 +02:00
|
|
|
Tpl :: add_error(_("An error occurred while updating this item."));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-07-26 16:51:16 +02:00
|
|
|
Log :: debug('Validated data : '.vardump($info));
|
|
|
|
Log :: debug('Fields errors : '.vardump($field_errors));
|
|
|
|
Tpl :: assign('submited', isset($_POST['submit']));
|
|
|
|
if (isset($_POST['submit']) && !empty($field_errors))
|
|
|
|
Tpl :: add_error(
|
|
|
|
_("There are errors preventing this item from being saved. ".
|
|
|
|
"Please correct them before attempting to save your changes."));
|
|
|
|
Tpl :: assign('info', (!empty($info)?$info:$item));
|
|
|
|
Tpl :: assign('item_id', $item['id']);
|
|
|
|
Tpl :: assign('field_errors', $field_errors);
|
|
|
|
Tpl :: assign('status_list', $status_list);
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-07-26 16:51:16 +02:00
|
|
|
Tpl :: display("form.tpl", _("Element %s: Modification"), $item['name']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: add_url_handler('|^item/(?P<id>[0-9]+)/modify$|', 'handle_modify');
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-02-13 02:43:31 +01:00
|
|
|
/**
|
|
|
|
* Archive one item page handler
|
|
|
|
* @param EesyPHP\UrlRequest $request
|
2023-07-26 16:51:16 +02:00
|
|
|
* @return never
|
2023-02-13 02:43:31 +01:00
|
|
|
*/
|
2021-07-28 17:13:10 +02:00
|
|
|
function handle_archive($request) {
|
|
|
|
$item = get_item_from_url($request -> id);
|
2020-04-18 00:51:33 +02:00
|
|
|
if(!is_array($item)) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_error(_("Item #%s not found."), $request -> id);
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect('item');
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-07-26 16:51:16 +02:00
|
|
|
if ($item['status'] == 'archived') {
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: add_message(_("This item is already archived."));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
|
|
|
else if (!can_archive($item)) {
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: add_error(_('You cannot archive this item.'));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2024-02-02 18:19:38 +01:00
|
|
|
else if (Db :: archive_item($item['id']) === true) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_message(_("The element '%s' has been archived successfully."), $item['name']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: add_error(_('An error occurred while archiving this item.'));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect('item/'.$item['id']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: add_url_handler('|^item/(?P<id>[0-9]+)/archive$|', 'handle_archive');
|
2020-04-18 00:51:33 +02:00
|
|
|
|
2023-02-13 02:43:31 +01:00
|
|
|
/**
|
|
|
|
* Delete one item page handler
|
|
|
|
* @param EesyPHP\UrlRequest $request
|
|
|
|
* @return void
|
|
|
|
*/
|
2021-07-28 17:13:10 +02:00
|
|
|
function handle_delete($request) {
|
|
|
|
$item = get_item_from_url($request -> id);
|
2020-04-18 00:51:33 +02:00
|
|
|
if(!is_array($item)) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_error(_("Item #%s not found."), $request -> id);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
|
|
|
else if (!can_delete($item)) {
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: add_error(_('You cannot delete this item.'));
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2024-02-02 18:19:38 +01:00
|
|
|
else if (Db :: delete_item($item['id']) === true) {
|
2024-01-23 19:23:10 +01:00
|
|
|
Tpl :: add_message(_("The element '%s' has been deleted successfully."), $item['name']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-01-31 00:30:04 +01:00
|
|
|
Tpl :: add_error(_('An error occurred while deleting this item.'));
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect('item/'.$item['id']);
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: redirect('item');
|
2020-04-18 00:51:33 +02:00
|
|
|
}
|
2023-01-29 19:18:10 +01:00
|
|
|
Url :: add_url_handler('|^item/(?P<id>[0-9]+)/delete$|', 'handle_delete');
|
2023-01-29 11:51:41 +01:00
|
|
|
|
|
|
|
# vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab
|