From c2cce3990abf2d88b58bd4f25660734563831cde Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Thu, 28 Oct 2021 17:30:03 +0200 Subject: [PATCH] special days template alerts --- .../godmode/alerts/alert_special_days.php | 524 ++++++++++++++---- .../alerts/configure_alert_special_days.php | 72 ++- .../include/javascript/pandora_alerts.js | 46 +- pandora_console/include/styles/pandora.css | 25 + 4 files changed, 538 insertions(+), 129 deletions(-) diff --git a/pandora_console/godmode/alerts/alert_special_days.php b/pandora_console/godmode/alerts/alert_special_days.php index 31f787f910..2e4242e90f 100644 --- a/pandora_console/godmode/alerts/alert_special_days.php +++ b/pandora_console/godmode/alerts/alert_special_days.php @@ -1,18 +1,32 @@ '.__('Same as %s', ucfirst($same_day)); + echo ' » '; + echo __('Templates not being fired'); + echo ''; + + $columns = [ + 'name', + 'id_group', + 'type', + 'monday', + 'tuesday', + 'wednesday', + 'thursday', + 'friday', + 'saturday', + 'sunday', + ]; + + $column_names = [ + __('Name'), + __('Group'), + __('Type'), + __('Mon'), + __('Tue'), + __('Wed'), + __('Thu'), + __('Fri'), + __('Sat'), + __('Sun'), + ]; + try { + ui_print_datatable( + [ + 'id' => 'templates_alerts_special_days', + 'return' => false, + 'class' => 'info_table', + 'style' => 'width: 100%', + 'columns' => $columns, + 'column_names' => $column_names, + 'ajax_url' => 'godmode/alerts/alert_special_days', + 'ajax_data' => [ + 'get_template_alerts_data' => 1, + 'same_day' => $same_day, + ], + 'no_sortable_columns' => [-1], + 'order' => [ + 'field' => 'name', + 'direction' => 'asc', + ], + 'search_button_class' => 'sub filter float-right', + 'form' => [ + 'inputs' => [ + [ + 'label' => __('Type'), + 'type' => 'select', + 'name' => 'type', + 'fields' => alerts_get_alert_templates_types(), + 'selected' => 0, + 'nothing' => 'None', + 'nothing_value' => 0, + ], + [ + 'label' => __('Search'), + 'type' => 'text', + 'class' => 'mw250px', + 'id' => 'name', + 'name' => 'name', + ], + ], + ], + ] + ); + } catch (Exception $e) { + echo $e->getMessage(); + } + + return; + } + + $get_template_alerts_data = (bool) get_parameter('get_template_alerts_data'); + if ($get_template_alerts_data === true) { + $filters = get_parameter('filter', []); + if (empty($filters['type']) === false) { + $filter['type'] = $filters['type']; + } + + if (empty($filters['name']) === false) { + $filter[] = "name LIKE '%".$filters['name']."%'"; + } + + $filter['special_day'] = 1; + + $templates = alerts_get_alert_templates($filter); + $count = alerts_get_alert_templates($filter, ['COUNT(*) AS total']); + + $same_day = get_parameter('same_day', ''); + $data = []; + if (empty($templates) === false) { + foreach ($templates as $template) { + if ((bool) $template[$same_day] === true) { + $data[] = [ + 'name' => $template['name'], + 'id_group' => ui_print_group_icon( + $template['id_group'], + true + ), + 'type' => $template['type'], + 'monday' => (bool) $template['monday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + 'tuesday' => (bool) $template['tuesday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + 'wednesday' => (bool) $template['wednesday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + 'thursday' => (bool) $template['thursday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + 'friday' => (bool) $template['friday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + 'saturday' => (bool) $template['saturday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + 'sunday' => (bool) $template['sunday'] === true + ? html_print_image( + 'images/tick.png', + true, + ['class' => 'invert_filter'] + ) + : '', + ]; + } + } + } + + echo json_encode( + [ + 'data' => $data, + 'recordsTotal' => $count[0]['total'], + 'recordsFiltered' => count($data), + ] + ); + + return $data; + } + return; } -// Header +// Header. ui_print_page_header( __('Alerts').' » '.__('Special days list'), 'images/gm_alerts.png', @@ -55,7 +249,11 @@ $delete_special_day = (bool) get_parameter('delete_special_day'); $upload_ical = (bool) get_parameter('upload_ical', 0); $display_range = (int) get_parameter('display_range'); -if ($upload_ical) { +$url = 'index.php?sec=galertas&sec2=godmode/alerts/alert_special_days'; +$url_alert = 'index.php?sec=galertas&sec2='; +$url_alert .= 'godmode/alerts/configure_alert_special_days'; + +if ($upload_ical === true) { $same_day = (string) get_parameter('same_day'); $overwrite = (bool) get_parameter('overwrite', 0); $values = []; @@ -67,7 +265,6 @@ if ($upload_ical) { if ($error == 0 && strcasecmp($extension, 'ics') == 0) { $skipped_dates = ''; - // $today = date ('Ymd'); $this_month = date('Ym'); $ical = new ICal($_FILES['ical_file']['tmp_name']); $events = $ical->events(); @@ -81,11 +278,22 @@ if ($upload_ical) { $date_check = ''; $filter['id_group'] = $values['id_group']; $filter['date'] = $date; - $date_check = db_get_value_filter('date', 'talert_special_days', $filter); + $date_check = db_get_value_filter( + 'date', + 'talert_special_days', + $filter + ); if ($date_check == $date) { if ($overwrite) { - $id_special_day = db_get_value_filter('id', 'talert_special_days', $filter); - alerts_update_alert_special_day($id_special_day, $values); + $id_special_day = db_get_value_filter( + 'id', + 'talert_special_days', + $filter + ); + alerts_update_alert_special_day( + $id_special_day, + $values + ); } else { if ($skipped_dates == '') { $skipped_dates = __('Skipped dates: '); @@ -104,19 +312,28 @@ if ($upload_ical) { $result = false; } - if ($result) { - db_pandora_audit('Special days list', 'Upload iCalendar '.$_FILES['ical_file']['name']); + if ($result === true) { + db_pandora_audit( + 'Special days list', + 'Upload iCalendar '.$_FILES['ical_file']['name'] + ); } - ui_print_result_message($result, __('Success to upload iCalendar').'
'.$skipped_dates, __('Fail to upload iCalendar')); + ui_print_result_message( + $result, + __('Success to upload iCalendar').'
'.$skipped_dates, + __('Fail to upload iCalendar') + ); } -if ($create_special_day) { +if ($create_special_day === true) { $date = (string) get_parameter('date'); $same_day = (string) get_parameter('same_day'); $values = []; $values['id_group'] = (string) get_parameter('id_group'); - $values['description'] = io_safe_input(strip_tags(io_safe_output((string) get_parameter('description')))); + $values['description'] = io_safe_input( + strip_tags(io_safe_output((string) get_parameter('description'))) + ); $aviable_description = true; if (preg_match('/script/i', $values['description'])) { @@ -130,7 +347,6 @@ if ($create_special_day) { $day = $array_date[2]; if ($year == '*') { - // '0001' means every year. $year = '0001'; $date = $year.'-'.$month.'-'.$day; } @@ -138,17 +354,28 @@ if ($create_special_day) { if (!checkdate($month, $day, $year)) { $result = ''; } else { - $date_check = ''; $filter['id_group'] = $values['id_group']; + $filter['same_day'] = $same_day; $filter['date'] = $date; - $date_check = db_get_value_filter('date', 'talert_special_days', $filter); + $date_check = db_get_value_filter( + 'date', + 'talert_special_days', + $filter + ); + if ($date_check == $date) { $result = ''; $messageAction = __('Could not be created, it already exists'); } else { - if ($aviable_description) { - $result = alerts_create_alert_special_day($date, $same_day, $values); - $info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$values['description'].'"}'; + if ($aviable_description === true) { + $result = alerts_create_alert_special_day( + $date, + $same_day, + $values + ); + $info = '{"Date":"'.$date; + $info .= '","Same day of the week":"'.$same_day; + $info .= '","Description":"'.$values['description'].'"}'; } else { $result = false; } @@ -156,14 +383,24 @@ if ($create_special_day) { } if ($result) { - db_pandora_audit('Command management', 'Create special day '.$result, false, false, $info); + db_pandora_audit( + 'Command management', + 'Create special day '.$result, + false, + false, + $info + ); } else { - db_pandora_audit('Command management', 'Fail try to create special day', false, false); + db_pandora_audit( + 'Command management', + 'Fail try to create special day', + false, + false + ); } - - // Show errors - if (!isset($messageAction)) { + // Show errors. + if (isset($messageAction) === false) { $messageAction = __('Could not be created'); } @@ -174,7 +411,7 @@ if ($create_special_day) { ); } -if ($update_special_day) { +if ($update_special_day === true) { $id = (int) get_parameter('id'); $alert = alerts_get_alert_special_day($id); $date = (string) get_parameter('date'); @@ -210,37 +447,43 @@ if ($update_special_day) { if (!checkdate($month, $day, $year)) { $result = ''; } else { - if ($id_group != $id_group_orig || $date != $date_orig) { - $date_check = ''; - $filter['id_group'] = $id_group; - $filter['date'] = $date; - $date_check = db_get_value_filter('date', 'talert_special_days', $filter); - if ($date_check == $date) { - $result = ''; - $messageAction = __('Could not be updated, it already exists'); - } else { - if ($aviable_description !== false) { - $result = alerts_update_alert_special_day($id, $values); - $info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}'; - } - } + $filter['id_group'] = $id_group; + $filter['date'] = $date; + $filter['same_day'] = $same_day; + $date_check = db_get_value_filter('date', 'talert_special_days', $filter); + if ($date_check == $date) { + $result = ''; + $messageAction = __('Could not be updated, it already exists'); } else { if ($aviable_description !== false) { $result = alerts_update_alert_special_day($id, $values); - $info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}'; + $info = '{"Date":"'.$date; + $info .= '","Same day of the week":"'.$same_day; + $info .= '","Description":"'.$description.'"}'; } } } if ($result) { - db_pandora_audit('Command management', 'Update special day '.$id, false, false, $info); + db_pandora_audit( + 'Command management', + 'Update special day '.$id, + false, + false, + $info + ); } else { - db_pandora_audit('Command management', 'Fail to update special day '.$id, false, false); + db_pandora_audit( + 'Command management', + 'Fail to update special day '.$id, + false, + false + ); } - // Show errors - if (!isset($messageAction)) { + // Show errors. + if (isset($messageAction) === false) { $messageAction = __('Could not be updated'); } @@ -251,15 +494,21 @@ if ($update_special_day) { ); } -if ($delete_special_day) { +if ($delete_special_day === true) { $id = (int) get_parameter('id'); $result = alerts_delete_alert_special_day($id); if ($result) { - db_pandora_audit('Command management', 'Delete special day '.$id); + db_pandora_audit( + 'Command management', + 'Delete special day '.$id + ); } else { - db_pandora_audit('Command management', 'Fail to delete special day '.$id); + db_pandora_audit( + 'Command management', + 'Fail to delete special day '.$id + ); } ui_print_result_message( @@ -272,7 +521,7 @@ if ($delete_special_day) { echo ""; -echo ""; +echo ""; echo ''; echo '
'; echo __('iCalendar(.ics) file').' '; html_print_input_file('ical_file', false, false); @@ -297,16 +546,34 @@ if (!users_can_manage_group_all('LM')) { } echo '
'; -html_print_select_groups(false, 'LM', $can_manage_group_all, 'id_group', $id_group, false, '', 0, false, false, true, '', false, 'width:100px;'); +html_print_select_groups( + false, + 'LM', + $can_manage_group_all, + 'id_group', + $id_group, + false, + '', + 0, + false, + false, + true, + '', + false, + 'width:100px;' +); echo '
'; echo '
'; echo __('Overwrite'); -ui_print_help_tip(__('Check this box, if you want to overwrite existing same days.'), false); +ui_print_help_tip( + __('Check this box, if you want to overwrite existing same days.'), + false +); echo ' '; html_print_checkbox('overwrite', 1, $overwrite, false, false, false, true); echo ''; html_print_input_hidden('upload_ical', 1); -echo ""; +echo ""; echo '
'; @@ -322,28 +589,28 @@ if (!is_user_admin($config['id_user'])) { // Show display range. $html = "'; echo $html; -// Show calendar +// Show calendar. for ($month = 1; $month <= 12; $month++) { if ($display_range) { $display_month = $month; @@ -363,7 +630,7 @@ for ($month = 1; $month <= 12; $month++) { if ($display_month > 12) { $display_month -= 12; - $display_year += 1; + $display_year++; } $cal_table = new stdClass(); @@ -439,6 +706,10 @@ for ($month = 1; $month <= 12; $month++) { case 12: $cal_table->title = __('December'); break; + + default: + // Not possible. + break; } $cal_table->title .= ' / '.$display_year; @@ -470,23 +741,42 @@ for ($month = 1; $month <= 12; $month++) { $filter['order']['order'] = 'DESC'; $special_days = db_get_all_rows_filter('talert_special_days', $filter); - if ($special_days != '') { - foreach ($special_days as $special_day) { - $cal_table->data[$cal_line][$week] .= '
'; - $cal_table->data[$cal_line][$week] .= $day; - $cal_table->data[$cal_line][$week] .= '
'; - $cal_table->data[$cal_line][$week] .= ui_print_group_icon($special_day['id_group'], true); + $cal_table->data[$cal_line][$week] .= 'data[$cal_line][$week] .= '>'.html_print_image( + 'images/add_mc.png', + true, + ['class' => 'invert_filter'] + ).''; + + if (empty($special_days) === false) { + $cal_table->data[$cal_line][$week] .= '
'; + foreach ($special_days as $special_day) { + // Only show description if is filled. + $cal_table->data[$cal_line][$week] .= '
'; + $cal_table->data[$cal_line][$week] .= '
'; + $cal_table->data[$cal_line][$week] .= ui_print_group_icon( + $special_day['id_group'], + true + ); + + if (empty($special_day['description']) === false) { + $cal_table->data[$cal_line][$week] .= ui_print_help_tip($special_day['description'], true); + } if ($special_day['date'] == $date_wildcard) { - $cal_table->data[$cal_line][$week] .= '('.ui_print_help_tip('This is valid every year. However, this will be ignored if indivisual setting for the same group is available.', true).') '; + $cal_table->data[$cal_line][$week] .= '('; + $cal_table->data[$cal_line][$week] .= ui_print_help_tip( + 'This is valid every year. However, this will be ignored if indivisual setting for the same group is available.', + true + ); + $cal_table->data[$cal_line][$week] .= ') '; } - $cal_table->data[$cal_line][$week] .= __('Same as '); + $cal_table->data[$cal_line][$week] .= __('As '); switch ($special_day['same_day']) { case 'monday': $cal_table->data[$cal_line][$week] .= __('Monday'); @@ -515,47 +805,41 @@ for ($month = 1; $month <= 12; $month++) { case 'sunday': $cal_table->data[$cal_line][$week] .= __('Sunday'); break; + + default: + // Not possible. + break; } - // Only show description if is filled. - if (empty($special_day['description']) === false) { - $cal_table->data[$cal_line][$week] .= ui_print_help_tip($special_day['description'], true); - } - + $cal_table->data[$cal_line][$week] .= '
'; + $cal_table->data[$cal_line][$week] .= '
'; if ($special_day['id_group'] || ($can_manage_group_all && $special_day['id_group'] == 0)) { - $cal_table->data[$cal_line][$week] .= 'data[$cal_line][$week] .= '>'.html_print_image( 'images/config.png', true, ['class' => 'invert_filter'] ).'  '; - $cal_table->data[$cal_line][$week] .= 'data[$cal_line][$week] .= 'data[$cal_line][$week] .= ' onClick="'.$script_delete.'"'; + $cal_table->data[$cal_line][$week] .= 'title="'; $cal_table->data[$cal_line][$week] .= __('Remove'); - $cal_table->data[$cal_line][$week] .= '>'.html_print_image( + $cal_table->data[$cal_line][$week] .= '">'; + $cal_table->data[$cal_line][$week] .= html_print_image( 'images/cross.png', true, ['class' => 'invert_filter'] ).''; - ; } - $cal_table->data[$cal_line][$week] .= '
'; - $cal_table->cellstyle[$cal_line][$week] = 'font-weight: bold;'; + $cal_table->data[$cal_line][$week] .= '
'; + $cal_table->data[$cal_line][$week] .= '
'; } - } else { - $cal_table->cellstyle[$cal_line][$week] .= 'font-size: 18px;'; - $cal_table->data[$cal_line][$week] = $day.' '; } - $cal_table->data[$cal_line][$week] .= 'data[$cal_line][$week] .= '>'.html_print_image( - 'images/add_mc.png', - true, - ['class' => 'invert_filter'] - ).''; - if ($week == 6) { $cal_line++; } @@ -570,8 +854,30 @@ for ($month = 1; $month <= 12; $month++) { } echo '
'; -echo '
'; +echo ''; html_print_submit_button(__('Create'), 'create', false, 'class="sub next"'); html_print_input_hidden('create_special_day', 1); echo ''; echo '
'; +echo ''; +ui_require_javascript_file('pandora_alerts'); +?> + diff --git a/pandora_console/godmode/alerts/configure_alert_special_days.php b/pandora_console/godmode/alerts/configure_alert_special_days.php index 14d85afc1d..14269e5a77 100644 --- a/pandora_console/godmode/alerts/configure_alert_special_days.php +++ b/pandora_console/godmode/alerts/configure_alert_special_days.php @@ -1,17 +1,31 @@ data[1][0] = __('Group'); $groups = users_get_groups(); $own_info = get_user_info($config['id_user']); // Only display group "All" if user is administrator or has "LM" privileges. -if (users_can_manage_group_all('LM')) { +if (users_can_manage_group_all('LM') === true) { $display_all_group = true; } else { $display_all_group = false; @@ -140,11 +154,11 @@ $table->data[3][1] = html_print_textarea( true ); -echo ''; +echo ''; html_print_table($table); echo '
'; -if ($id) { +if (empty($id) === false) { html_print_input_hidden('id', $id); html_print_input_hidden('update_special_day', 1); html_print_input_hidden('id_group_orig', $id_group_orig); @@ -157,3 +171,25 @@ if ($id) { echo '
'; echo ''; +echo ''; +ui_require_javascript_file('pandora_alerts'); +?> + \ No newline at end of file diff --git a/pandora_console/include/javascript/pandora_alerts.js b/pandora_console/include/javascript/pandora_alerts.js index 7ecded70c8..ce71c5e3e5 100644 --- a/pandora_console/include/javascript/pandora_alerts.js +++ b/pandora_console/include/javascript/pandora_alerts.js @@ -1,5 +1,4 @@ -/* globals $ */ - +/* globals $ confirmDialog uniqId showMsg*/ function parse_alert_command(command, classs) { if (classs == "recovery") { classs = "fields_recovery"; @@ -36,21 +35,64 @@ function parse_alert_command(command, classs) { return command; } +// eslint-disable-next-line no-unused-vars function render_command_preview(original_command) { $("#textarea_command_preview").html( parse_alert_command(original_command, "") ); } +// eslint-disable-next-line no-unused-vars function render_command_recovery_preview(original_command) { $("#textarea_command_recovery_preview").html( parse_alert_command(original_command, "recovery") ); } +// eslint-disable-next-line no-unused-vars function render_command_description(command_description) { if (command_description != "") { command_description = "
" + command_description; } $("#command_description").html(command_description); } + +// eslint-disable-next-line no-unused-vars +function load_templates_alerts_special_days(settings) { + confirmDialog({ + title: settings.title, + message: function() { + var id = "div-" + uniqId(); + $.ajax({ + method: "post", + url: settings.url, + data: { + page: settings.page, + get_template_alerts: 1, + date: settings.date, + id_group: settings.id_group, + same_day: settings.same_day + }, + datatype: "html", + success: function(data) { + console.log(data); + $("#" + id) + .empty() + .append(data); + }, + error: function(e) { + showMsg(e); + } + }); + + return "
" + settings.loading + "
"; + }, + ok: settings.btn_ok_text, + cancel: settings.btn_cancel_text, + onAccept: function() { + $("#" + settings.name_form).submit(); + }, + size: 750, + maxHeight: 500 + }); +} diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index e541c8ff97..005c47b170 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -8309,6 +8309,31 @@ div.stat-win-spinner img { min-width: 50px; } +.note-special-day { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + align-content: center; +} + +.note-special-day div { + display: flex; + flex-direction: row; + align-items: center; + align-content: center; +} + +.note-special-day div a.tip { + margin: 0px; + margin-right: 2px; +} + +.note-special-day div a.tip > img { + margin: 0px; +} + .lign_right { text-align: right; }
".__('Display range: '); if ($display_range) { - $html .= '['.__('Default').']  '; + $html .= '['.__('Default').']  '; if ($display_range > 1970) { - $html .= '<< '; } - $html .= '['.$display_range.']'; - $html .= '['.$display_range.']'; + $html .= ' >>'; } else { - $html .= '['.__('Default').']  '; - $html .= '['.__('Default').']  '; + $html .= '<< '; - $html .= '['; $html .= $this_year; $html .= ']'; - $html .= ' >>'; } @@ -351,7 +618,7 @@ if ($display_range) { $html .= '