diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index c52639d99f..d06549518b 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -160,7 +160,7 @@ $pure = get_parameter('pure', 0); $schedule_report = get_parameter('schbutton', ''); $pagination = (int) get_parameter('pagination', $config['block_size']); -if ($action == 'edit' && $idReport > 0) { +if ($action === 'edit' && $idReport > 0) { $report_group = db_get_value( 'id_group', 'treport', @@ -512,6 +512,7 @@ switch ($action) { } break; + case 'copy_report': case 'delete_report': case 'list': $buttons = [ @@ -657,6 +658,81 @@ switch ($action) { ); } + if ($action === 'copy_report') { + $copy = false; + switch ($type_access_selected) { + case 'group_view': + if ($config['id_user'] == $report['id_user'] + || is_user_admin($config['id_user']) + ) { + $copy = true; + // Owner can delete. + } else { + $copy = check_acl( + $config['id_user'], + $report['id_group'], + 'RM' + ); + } + break; + + case 'group_edit': + if ($config['id_user'] == $report['id_user'] + || is_user_admin($config['id_user']) + ) { + $copy = true; + // Owner can delete. + } else { + $copy = check_acl( + $config['id_user'], + $report['id_group'], + 'RM' + ); + } + break; + + case 'user_edit': + if ($config['id_user'] == $report['id_user'] + || is_user_admin($config['id_user']) + ) { + $copy = true; + } + break; + + default: + // Default. + break; + } + + if (! $copy && !empty($type_access_selected)) { + db_pandora_audit( + 'ACL Violation', + 'Trying to access report builder copy' + ); + include 'general/noaccess.php'; + exit; + } + + $result = reports_copy_report($idReport); + if ($result !== false) { + db_pandora_audit( + 'Report management', + 'Copy report #'.$idReport + ); + } else { + db_pandora_audit( + 'Report management', + 'Fail try to copy report #'.$idReport + ); + } + + ui_print_result_message( + $result, + __('Successfully copied'), + __('Could not be copied') + ); + } + $id_group = (int) get_parameter('id_group', 0); $search = trim(get_parameter('search', '')); @@ -1092,6 +1168,27 @@ switch ($action) { $data[$next] .= ''; } + $data[$next] .= '
'; + if ($delete) { $data[$next] .= '