From 5ca1c547926ddbdf7417ec3e0f05db080af057a2 Mon Sep 17 00:00:00 2001 From: miguel angel rasteu Date: Mon, 4 Sep 2023 10:49:29 +0200 Subject: [PATCH] #9946 Add search filter and change table to datatable --- .../include/ajax/dashboard.ajax.php | 217 ++++++++++++++++++ pandora_console/views/dashboard/list.php | 181 ++++----------- 2 files changed, 262 insertions(+), 136 deletions(-) create mode 100644 pandora_console/include/ajax/dashboard.ajax.php diff --git a/pandora_console/include/ajax/dashboard.ajax.php b/pandora_console/include/ajax/dashboard.ajax.php new file mode 100644 index 0000000000..0c6b36a1df --- /dev/null +++ b/pandora_console/include/ajax/dashboard.ajax.php @@ -0,0 +1,217 @@ +width = '100%'; + $table->class = 'info_table'; + $table->headstyle['name'] = 'text-align: left;'; + $table->headstyle['cells'] = 'text-align: center;'; + $table->headstyle['groups'] = 'text-align: center;'; + $table->headstyle['favorite'] = 'text-align: center;'; + $table->headstyle['full_screen'] = 'text-align: center;'; + + $table->style = []; + $table->style['name'] = 'text-align: left;'; + $table->style['cells'] = 'text-align: center;'; + $table->style['groups'] = 'text-align: center;'; + $table->style['favorite'] = 'text-align: center;'; + $table->style['full_screen'] = 'text-align: center;'; + + $table->size = []; + $table->size['name'] = '40%'; + $table->size['full_screen'] = '30px'; + + $table->head = []; + $table->head['name'] = __('Name'); + $table->head['cells'] = __('Cells'); + $table->head['groups'] = __('Group'); + $table->head['favorite'] = __('Favorite'); + $table->head['full_screen'] = __('Full screen'); + + if ($manageDashboards === 1) { + $table->head['copy'] = __('Copy'); + $table->head['delete'] = __('Delete'); + $table->headstyle['copy'] = 'text-align: center;'; + $table->headstyle['delete'] = 'text-align: center;'; + $table->style['copy'] = 'text-align: center;'; + $table->style['delete'] = 'text-align: center;'; + $table->size['cells'] = '30px'; + $table->size['groups'] = '30px'; + $table->size['favorite'] = '30px'; + $table->size['copy'] = '30px'; + $table->size['delete'] = '30px'; + } else { + $table->size['cells'] = '60px'; + $table->size['groups'] = '60px'; + $table->size['favorite'] = '60px'; + } + + $table->data = []; + + if (strlen($filter['free_search']) > 0) { + $where = 'WHERE name LIKE "%'.$filter['free_search'].'%"'; + } else { + $where = ''; + } + + $sql = 'SELECT * FROM tdashboard '.$where.' ORDER BY id '.$pagination; + $dashboards = db_get_all_rows_sql($sql); + $count = db_get_value_sql('SELECT COUNT(*) FROM tdashboard '.$where); + foreach ($dashboards as $dashboard) { + $data = []; + + $dataQuery = ['dashboardId' => $dashboard['id']]; + + $url = $urlDashboard.'&'.http_build_query($dataQuery); + $data['name'] = ''; + $data['name'] .= $dashboard['name']; + $data['name'] .= ''; + + $data['cells'] = $dashboard['cells']; + + if (empty($dashboard['id_user']) === false) { + $data['groups'] = __( + 'Private for (%s)', + $dashboard['id_user'] + ); + } else { + $data['groups'] = ui_print_group_icon( + $dashboard['id_group'], + true + ); + } + + $data['favorite'] = $dashboard['active']; + + $dataQueryFull = [ + 'dashboardId' => $dashboard['id'], + 'pure' => 1, + ]; + + $urlFull = $urlDashboard; + $urlFull .= '&'.\http_build_query($dataQueryFull); + $data['full_screen'] = ''; + $data['full_screen'] .= \html_print_image( + 'images/fullscreen@svg.svg', + true, + ['class' => 'main_menu_icon invert_filter'] + ); + $data['full_screen'] .= ''; + + if ($manageDashboards === 1) { + $data['copy'] = ''; + $data['delete'] = ''; + } + + if (check_acl_restricted_all($config['id_user'], $dashboard['id_group'], 'RM')) { + $dataQueryCopy = [ + 'dashboardId' => $dashboard['id'], + 'copyDashboard' => 1, + ]; + $urlCopy = $urlDashboard.'&'.\http_build_query($dataQueryCopy); + $data['copy'] = ''; + $data['copy'] .= html_print_image('images/copy.svg', true, ['class' => 'main_menu_icon invert_filter']); + $data['copy'] .= ''; + + $dataQueryDelete = [ + 'dashboardId' => $dashboard['id'], + 'deleteDashboard' => 1, + ]; + $urlDelete = $urlDashboard; + $urlDelete .= '&'.\http_build_query($dataQueryDelete); + $data['delete'] = ''; + $data['delete'] .= \html_print_image( + 'images/delete.svg', + true, + ['class' => 'main_menu_icon invert_filter'] + ); + $data['delete'] .= ''; + } + + $table->cellclass[] = [ + 'full_screen' => 'table_action_buttons', + 'copy' => 'table_action_buttons', + 'delete' => 'table_action_buttons', + ]; + + $table->data[] = $data; + } + + // Datatables format: RecordsTotal && recordsfiltered. + echo json_encode( + [ + 'data' => $table->data, + 'recordsTotal' => $count, + 'recordsFiltered' => $count, + ] + ); + // Capture output. + $response = ob_get_clean(); + } catch (Exception $e) { + echo json_encode(['error' => $e->getMessage()]); + exit; + } + + // If not valid, show error with issue. + json_decode($response); + if (json_last_error() == JSON_ERROR_NONE) { + // If valid dump. + echo $response; + } else { + echo json_encode( + ['error' => $response] + ); + } + + exit; +} diff --git a/pandora_console/views/dashboard/list.php b/pandora_console/views/dashboard/list.php index 2645724a6e..e0cbaec685 100644 --- a/pandora_console/views/dashboard/list.php +++ b/pandora_console/views/dashboard/list.php @@ -75,144 +75,53 @@ if (empty($dashboards) === true) { ] ); } else { - $table = new stdClass(); - $table->width = '100%'; - $table->class = 'info_table'; - $table->headstyle['name'] = 'text-align: left;'; - $table->headstyle['cells'] = 'text-align: center;'; - $table->headstyle['groups'] = 'text-align: center;'; - $table->headstyle['favorite'] = 'text-align: center;'; - $table->headstyle['full_screen'] = 'text-align: center;'; + $id_table = 'dashboards_list'; + $columns = [ + 'name', + 'cells', + 'groups', + 'favorite', + 'full_screen', + ]; - $table->style = []; - $table->style['name'] = 'text-align: left;'; - $table->style['cells'] = 'text-align: center;'; - $table->style['groups'] = 'text-align: center;'; - $table->style['favorite'] = 'text-align: center;'; - $table->style['full_screen'] = 'text-align: center;'; + $column_names = [ + __('Name'), + __('Cells'), + __('Group'), + __('Favorite'), + __('Full screen'), + ]; - $table->size = []; - $table->size['name'] = '40%'; - $table->size['full_screen'] = '30px'; - - $table->head = []; - $table->head['name'] = __('Name'); - $table->head['cells'] = __('Cells'); - $table->head['groups'] = __('Group'); - $table->head['favorite'] = __('Favorite'); - $table->head['full_screen'] = __('Full screen'); - - if ($manageDashboards === 1) { - $table->head['copy'] = __('Copy'); - $table->head['delete'] = __('Delete'); - $table->headstyle['copy'] = 'text-align: center;'; - $table->headstyle['delete'] = 'text-align: center;'; - $table->style['copy'] = 'text-align: center;'; - $table->style['delete'] = 'text-align: center;'; - $table->size['cells'] = '30px'; - $table->size['groups'] = '30px'; - $table->size['favorite'] = '30px'; - $table->size['copy'] = '30px'; - $table->size['delete'] = '30px'; - } else { - $table->size['cells'] = '60px'; - $table->size['groups'] = '60px'; - $table->size['favorite'] = '60px'; - } - - $table->data = []; - - foreach ($dashboards as $dashboard) { - $data = []; - - $dataQuery = ['dashboardId' => $dashboard['id']]; - - $url = $urlDashboard.'&'.http_build_query($dataQuery); - $data['name'] = ''; - $data['name'] .= $dashboard['name']; - $data['name'] .= ''; - - $data['cells'] = $dashboard['cells']; - - if (empty($dashboard['id_user']) === false) { - $data['groups'] = __( - 'Private for (%s)', - $dashboard['id_user'] - ); - } else { - $data['groups'] = ui_print_group_icon( - $dashboard['id_group'], - true - ); - } - - $data['favorite'] = $dashboard['active']; - - $dataQueryFull = [ - 'dashboardId' => $dashboard['id'], - 'pure' => 1, - ]; - - $urlFull = $urlDashboard; - $urlFull .= '&'.\http_build_query($dataQueryFull); - $data['full_screen'] = ''; - $data['full_screen'] .= \html_print_image( - 'images/fullscreen@svg.svg', - true, - ['class' => 'main_menu_icon invert_filter'] - ); - $data['full_screen'] .= ''; - - if ($manageDashboards === 1) { - $data['copy'] = ''; - $data['delete'] = ''; - } - - if (check_acl_restricted_all($config['id_user'], $dashboard['id_group'], 'RM')) { - $dataQueryCopy = [ - 'dashboardId' => $dashboard['id'], - 'copyDashboard' => 1, - ]; - $urlCopy = $urlDashboard.'&'.\http_build_query($dataQueryCopy); - $data['copy'] = ''; - $data['copy'] .= html_print_image('images/copy.svg', true, ['class' => 'main_menu_icon invert_filter']); - $data['copy'] .= ''; - - $dataQueryDelete = [ - 'dashboardId' => $dashboard['id'], - 'deleteDashboard' => 1, - ]; - $urlDelete = $urlDashboard; - $urlDelete .= '&'.\http_build_query($dataQueryDelete); - $data['delete'] = ''; - $data['delete'] .= \html_print_image( - 'images/delete.svg', - true, - ['class' => 'main_menu_icon invert_filter'] - ); - $data['delete'] .= ''; - } - - $table->cellclass[] = [ - 'full_screen' => 'table_action_buttons', - 'copy' => 'table_action_buttons', - 'delete' => 'table_action_buttons', - ]; - - $table->data[] = $data; - } - - \html_print_table($table); - $tablePagination = \ui_pagination( - $count, - false, - $offset, - 0, - true, - 'offset', - false, - '' + ui_print_datatable( + [ + 'id' => $id_table, + 'class' => 'info_table', + 'style' => 'width: 100%', + 'columns' => $columns, + 'column_names' => $column_names, + 'ajax_url' => 'include/ajax/dashboard.ajax', + 'ajax_data' => ['method' => 'draw'], + 'default_pagination' => $config['block_size'], + 'no_sortable_columns' => [], + 'order' => [ + 'field' => 'name', + 'direction' => 'desc', + ], + 'search_button_class' => 'sub filter float-right', + 'form' => [ + 'inputs' => [ + [ + 'label' => __('Free search'), + 'type' => 'text', + 'class' => 'w400px', + 'id' => 'free_search', + 'name' => 'free_search', + ], + ], + ], + 'filter_main_class' => 'box-flat white_table_graph fixed_filter_bar ', + 'csv' => false, + ] ); }