Benjamin Renard
6fdc5447f1
* Code cleaning and fix some small errors using Phpstan * Configure pre-commit to run Phpstan before each commit * Some little improvments and logging, mail, smarty & URL libs * Add Sentry integration * Add Webstat JS code inclusion * Install Smarty dependency using composer Breaking changes: * Rename Event class as HookEvent to avoid conflict with PECL event * URL with refresh GET parameter now automatically trigger redirection without it after page loading to avoid to keep it in URL
262 lines
7.8 KiB
PHP
262 lines
7.8 KiB
PHP
<?php
|
|
|
|
if (php_sapi_name() == "cli")
|
|
return true;
|
|
|
|
function handle_homepage($request) {
|
|
display_template("homepage.tpl", _("Hello world !"));
|
|
}
|
|
add_url_handler('#^$#', 'handle_homepage');
|
|
|
|
function handle_search($request) {
|
|
global $smarty, $status_list;
|
|
|
|
// Manage params
|
|
if(
|
|
(isset($_REQUEST['clear']) && $_REQUEST['clear']=='true') ||
|
|
!isset($_SESSION['search']) ||
|
|
!is_array($_SESSION['search'])
|
|
) {
|
|
$_SESSION['search']=array(
|
|
'pattern' => false,
|
|
'status' => 'all',
|
|
'order' => 'name',
|
|
'order_direction' => 'ASC',
|
|
);
|
|
if (isset($_REQUEST['clear']) && $_REQUEST['clear']=='true')
|
|
redirect($request -> current_url);
|
|
}
|
|
logging('DEBUG', 'Request params : '.vardump($_REQUEST));
|
|
|
|
$status_list['all'] = _('Any');
|
|
if (isset($_REQUEST['status'])) {
|
|
if (check_status($_REQUEST['status']) || $_REQUEST['status'] == 'all')
|
|
$_SESSION['search']['status'] = $_REQUEST['status'];
|
|
else
|
|
$smarty -> assign('status_error', true);
|
|
}
|
|
|
|
if (isset($_REQUEST['pattern'])) {
|
|
if (trim($_REQUEST['pattern']) == '')
|
|
$_SESSION['search']['pattern'] = false;
|
|
else if (check_search_pattern($_REQUEST['pattern']))
|
|
$_SESSION['search']['pattern'] = $_REQUEST['pattern'];
|
|
else
|
|
$smarty -> assign('pattern_error', true);
|
|
}
|
|
|
|
// 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];
|
|
}
|
|
|
|
logging('DEBUG', 'Search params : '.vardump($_SESSION['search']));
|
|
$result = search_items($_SESSION['search']);
|
|
if (!is_array($result))
|
|
fatal_error(
|
|
_("An error occurred while listing the items. ".
|
|
"If the problem persists, please contact support.")
|
|
);
|
|
|
|
$smarty -> assign('result', $result);
|
|
$smarty -> assign('search', $_SESSION['search']);
|
|
$smarty -> assign('nbs_by_page', $nbs_by_page);
|
|
$smarty -> assign('status_list', $status_list);
|
|
|
|
add_js_file(array(
|
|
'lib/bootstrap4dialog/dist/js/bootstrap4dialog.min.js',
|
|
'js/myconfirm.js',
|
|
'js/search.js'
|
|
));
|
|
|
|
display_template("search.tpl", _("Search"));
|
|
}
|
|
add_url_handler('|^item/?$|', 'handle_search');
|
|
|
|
/*
|
|
* One item pages
|
|
*/
|
|
|
|
function handle_show($request) {
|
|
global $smarty;
|
|
|
|
$item = get_item_from_url($request -> id);
|
|
if (!$item)
|
|
error_404();
|
|
|
|
$smarty->assign('item', $item);
|
|
|
|
// Dialog
|
|
add_js_file(array(
|
|
'lib/bootstrap4dialog/dist/js/bootstrap4dialog.min.js',
|
|
'js/myconfirm.js',
|
|
));
|
|
|
|
display_template(
|
|
"show.tpl", _("Element %s"),
|
|
(is_array($item)?$item['name']:"#".$request -> id)
|
|
);
|
|
}
|
|
add_url_handler('|^item/(?P<id>[0-9]+)$|', 'handle_show');
|
|
|
|
function handle_create($request) {
|
|
global $smarty, $status_list;
|
|
|
|
$info = array();
|
|
$field_errors = handle_item_post_data($info);
|
|
if (isset($_POST['submit']) && empty($field_errors)) {
|
|
$item = add_item($info);
|
|
if (is_array($item)) {
|
|
add_message(_("The element '% s' has been created."), $item['name']);
|
|
redirect('item/'.$item['id']);
|
|
}
|
|
else {
|
|
add_error(_("An error occurred while saving this item."));
|
|
}
|
|
}
|
|
logging('DEBUG', 'Validated data : '.vardump($info));
|
|
logging('DEBUG', 'Fields errors : '.vardump($field_errors));
|
|
if (isset($_POST['submit']) && !empty($field_errors))
|
|
add_error(
|
|
_("There are errors preventing this item from being saved. ".
|
|
"Please correct them before attempting to add this item."));
|
|
$smarty->assign('submited', isset($_POST['submit']));
|
|
$smarty->assign('info', $info);
|
|
$smarty->assign('field_errors', $field_errors);
|
|
$smarty->assign('status_list', $status_list);
|
|
|
|
display_template("form.tpl", _("New"));
|
|
}
|
|
add_url_handler('|^item/new$|', 'handle_create');
|
|
|
|
function handle_modify($request) {
|
|
global $smarty, $status_list;
|
|
|
|
$item = get_item_from_url($request -> id);
|
|
if(is_array($item)) {
|
|
if (!can_modify($item)) {
|
|
add_error(_('You cannot edit this item.'));
|
|
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;
|
|
}
|
|
logging('DEBUG', 'Changes : '.vardump($changes));
|
|
if (empty($changes)) {
|
|
add_message(_("You have not made any changes to element '% s'."), $item['name']);
|
|
redirect('item/'.$item['id']);
|
|
}
|
|
else if (update_item($item['id'], $changes) === true) {
|
|
add_message(_("The element '% s' has been updated successfully."), $item['name']);
|
|
redirect('item/'.$item['id']);
|
|
}
|
|
else {
|
|
add_error(_("An error occurred while updating this item."));
|
|
}
|
|
}
|
|
logging('DEBUG', 'Validated data : '.vardump($info));
|
|
logging('DEBUG', 'Fields errors : '.vardump($field_errors));
|
|
$smarty->assign('submited', isset($_POST['submit']));
|
|
if (isset($_POST['submit']) && !empty($field_errors))
|
|
add_error(
|
|
_("There are errors preventing this item from being saved. ".
|
|
"Please correct them before attempting to save your changes."));
|
|
$smarty->assign('info', (!empty($info)?$info:$item));
|
|
$smarty->assign('item_id', $item['id']);
|
|
$smarty->assign('field_errors', $field_errors);
|
|
$smarty -> assign('status_list', $status_list);
|
|
}
|
|
else {
|
|
error_404();
|
|
}
|
|
|
|
display_template(
|
|
"form.tpl", _("Element %s: Modification"),
|
|
(is_array($item)?$item['name']:"#".$request -> id)
|
|
);
|
|
}
|
|
add_url_handler('|^item/(?P<id>[0-9]+)/modify$|', 'handle_modify');
|
|
|
|
function handle_archive($request) {
|
|
global $smarty;
|
|
|
|
$item = get_item_from_url($request -> id);
|
|
if(!is_array($item)) {
|
|
add_error(_("Item #% s not found."), $request -> id);
|
|
redirect('item');
|
|
}
|
|
elseif ($item['status'] == 'archived') {
|
|
add_message(_("This item is already archived."));
|
|
}
|
|
else if (!can_archive($item)) {
|
|
add_error(_('You cannot archive this item.'));
|
|
}
|
|
else if (archive_item($item['id']) === true) {
|
|
add_message(_("The element '% s' has been archived successfully."), $item['name']);
|
|
}
|
|
else {
|
|
add_error(_('An error occurred while archiving this item.'));
|
|
}
|
|
redirect('item/'.$item['id']);
|
|
}
|
|
add_url_handler('|^item/(?P<id>[0-9]+)/archive$|', 'handle_archive');
|
|
|
|
function handle_delete($request) {
|
|
global $smarty;
|
|
|
|
$item = get_item_from_url($request -> id);
|
|
if(!is_array($item)) {
|
|
add_error(_("Item #% s not found."), $request -> id);
|
|
}
|
|
else if (!can_delete($item)) {
|
|
add_error(_('You cannot delete this item.'));
|
|
}
|
|
else if (delete_item($item['id']) === true) {
|
|
add_message(_("The element '% s' has been deleted successfully."), $item['name']);
|
|
}
|
|
else {
|
|
add_error(_('An error occurred while deleting this item.'));
|
|
redirect('item/'.$item['id']);
|
|
}
|
|
redirect('item');
|
|
}
|
|
add_url_handler('|^item/(?P<id>[0-9]+)/delete$|', 'handle_delete');
|
|
|
|
# vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab
|