rgget( 'view' ), 'form_id' => absint( rgget( 'form-id' ) ), 'step_id' => absint( rgget( 'step-id' ) ), 'category' => sanitize_key( rgget( 'category' ) ), 'range' => $range, 'start_date' => $start_date, 'assignee' => $assignee_key, 'assignee_type' => $assignee_type, 'assignee_id' => $assignee_id, 'check_permissions' => true, 'base_url' => admin_url( 'admin.php?page=gravityflow-reports' ), ); $args = array_merge( $defaults, $args ); if ( $args['check_permissions'] && ! GFAPI::current_user_can_any( 'gravityflow_reports' ) ) { esc_html_e( "You don't have permission to view this page", 'gravityflow' ); return; } $filter_vars['config'] = self::get_filter_config_vars(); $filter_vars['selected'] = array( 'formId' => $args['form_id'], 'category' => $args['category'], 'stepId' => empty( $args['step_id'] ) ? '' : $args['step_id'], 'assignee' => $args['assignee'], ); ?>
date( 'Y-m-d', strtotime( '-1 year' ) ), 'check_permissions' => true, 'base_url' => admin_url(), ); $args = array_merge( $defaults, $args ); $rows = Gravity_Flow_Activity::get_report_data_for_all_forms( $args['start_date'] ); if ( empty( $rows ) ) { esc_html_e( 'No data to display', 'gravityflow' ); return; } $chart_data = array(); $chart_data[] = array( esc_html__( 'Form', 'gravityflow' ), esc_html__( 'Workflows Completed', 'gravityflow' ), esc_html__( 'Average Duration (hours)', 'gravityflow' ) ); foreach ( $rows as $row ) { $form = GFAPI::get_form( $row->form_id ); $title = esc_html( $form['title'] ); $chart_data[] = array( $title, absint( $row->c ), absint( $row->av ) / HOUR_IN_SECONDS ); } $chart_options = array( 'chart' => array( 'title' => esc_html__( 'Forms', 'gravityflow' ), 'subtitle' => esc_html__( 'Workflows completed and average duration', 'gravityflow' ), ), 'bars' => 'horizontal', 'height' => 200 + count( $rows ) * 100, 'series' => array( array( 'axis' => 'count' ), array( 'axis' => 'average_duration' ), ), 'axes' => array( 'x' => array( 'count' => array( 'side' => 'top', 'label' => esc_html__( 'Workflows Completed', 'gravityflow' ) ), 'average_duration' => array( 'label' => esc_html__( 'Average Duration (hours)', 'gravityflow' ) ), ), ), ); $data_table_json = htmlentities( json_encode( $chart_data ), ENT_QUOTES, 'UTF-8', true ); $options_json = htmlentities( json_encode( $chart_options ), ENT_QUOTES, 'UTF-8', true ); echo '
'; } /** * Output the report for a specific form by month. * * @param int $form_id The form ID. * @param array $args The reports page arguments. */ public static function report_form_by_month( $form_id, $args ) { $defaults = array( 'start_date' => date( 'Y-m-d', strtotime( '-1 year' ) ), 'check_permissions' => true, 'base_url' => admin_url(), ); $args = array_merge( $defaults, $args ); $rows = Gravity_Flow_Activity::get_report_data_for_form( $form_id, $args['start_date'] ); if ( empty( $rows ) ) { esc_html_e( 'No data to display', 'gravityflow' ); return; } $chart_data = array(); $chart_data[] = array( esc_html__( 'Month', 'gravityflow' ), esc_html__( 'Workflows Completed', 'gravityflow' ), esc_html__( 'Average Duration (hours)', 'gravityflow' ) ); global $wp_locale; foreach ( $rows as $row ) { $chart_data[] = array( $wp_locale->get_month( $row->month ), absint( $row->c ), absint( $row->av ) / HOUR_IN_SECONDS ); } $form = GFAPI::get_form( $form_id ); $chart_options = array( 'chart' => array( 'title' => esc_html( $form['title'] ), 'subtitle' => esc_html__( 'Workflows completed and average duration', 'gravityflow' ), ), 'bars' => 'horizontal', 'height' => 200 + count( $rows ) * 100, 'series' => array( array( 'axis' => 'count' ), array( 'axis' => 'average_duration' ), ), 'axes' => array( 'x' => array( 'count' => array( 'side' => 'top', 'label' => esc_html__( 'Workflows Completed', 'gravityflow' ) ), 'average_duration' => array( 'label' => esc_html__( 'Average Duration (hours)', 'gravityflow' ) ), ), ), ); $data_table_json = htmlentities( json_encode( $chart_data ), ENT_QUOTES, 'UTF-8', true ); $options_json = htmlentities( json_encode( $chart_options ), ENT_QUOTES, 'UTF-8', true ); echo '
'; } /** * Output the report for a specific form by step. * * @param int $form_id The form ID. * @param array $args The reports page arguments. */ public static function report_form_by_step( $form_id, $args ) { $defaults = array( 'start_date' => date( 'Y-m-d', strtotime( '-1 year' ) ), 'check_permissions' => true, 'base_url' => admin_url(), ); $args = array_merge( $defaults, $args ); $rows = Gravity_Flow_Activity::get_report_data_for_form_by_step( $form_id, $args['start_date'] ); if ( empty( $rows ) ) { esc_html_e( 'No data to display', 'gravityflow' ); return; } $chart_data = array(); $chart_data[] = array( esc_html__( 'Step', 'gravityflow' ), esc_html__( 'Completed', 'gravityflow' ), esc_html__( 'Average Duration (hours)', 'gravityflow' ) ); foreach ( $rows as $row ) { $step = gravity_flow()->get_step( $row->feed_id ); if ( empty( $step ) ) { continue; } $name = esc_html( $step->get_name() ); $chart_data[] = array( $name, absint( $row->c ), absint( $row->av ) / HOUR_IN_SECONDS ); } $form = GFAPI::get_form( $form_id ); $chart_options = array( 'chart' => array( 'title' => esc_html( $form['title'] ), 'subtitle' => esc_html__( 'Step completed and average duration', 'gravityflow' ), ), 'bars' => 'horizontal', 'height' => 200 + count( $rows ) * 100, 'series' => array( array( 'axis' => 'count' ), array( 'axis' => 'average_duration' ), ), 'axes' => array( 'x' => array( 'count' => array( 'side' => 'top', 'label' => esc_html__( 'Completed', 'gravityflow' ) ), 'average_duration' => array( 'label' => esc_html__( 'Average Duration (hours)', 'gravityflow' ) ), ), ), ); $data_table_json = htmlentities( json_encode( $chart_data ), ENT_QUOTES, 'UTF-8', true ); $options_json = htmlentities( json_encode( $chart_options ), ENT_QUOTES, 'UTF-8', true ); echo '
'; } /** * Output the report for a specific step by assignee. * * @param int $step_id The step ID. * @param array $args The reports page arguments. */ public static function report_step_by_assignee( $step_id, $args ) { $defaults = array( 'start_date' => date( 'Y-m-d', strtotime( '-1 year' ) ), 'check_permissions' => true, 'base_url' => admin_url( 'admin.php?page=gravityflow-reports' ), ); $args = array_merge( $defaults, $args ); $step = gravity_flow()->get_step( $step_id ); if ( empty( $step ) ) { return; } $rows = Gravity_Flow_Activity::get_report_data_for_step_by_assignee( $step_id, $args['start_date'] ); if ( empty( $rows ) ) { esc_html_e( 'No data to display', 'gravityflow' ); return; } $chart_data = array(); $chart_data[] = array( esc_html__( 'Assignee', 'gravityflow' ), esc_html__( 'Completed', 'gravityflow' ), esc_html__( 'Average Duration (hours)', 'gravityflow' ) ); foreach ( $rows as $row ) { if ( $row->assignee_type == 'user_id' ) { $user = get_user_by( 'id', $row->assignee_id ); $display_name = $user->display_name; } else { $display_name = $row->assignee_id; } $chart_data[] = array( $display_name, absint( $row->c ), absint( $row->av ) / HOUR_IN_SECONDS ); } $chart_options = array( 'chart' => array( 'title' => esc_html( $step->get_name() ), 'subtitle' => esc_html__( 'Step completed and average duration by assignee', 'gravityflow' ), ), 'bars' => 'horizontal', 'height' => 200 + count( $rows ) * 100, 'series' => array( array( 'axis' => 'count' ), array( 'axis' => 'average_duration' ), ), 'axes' => array( 'x' => array( 'count' => array( 'side' => 'top', 'label' => esc_html__( 'Completed', 'gravityflow' ) ), 'average_duration' => array( 'label' => esc_html__( 'Average Duration (hours)', 'gravityflow' ) ), ), ), ); $data_table_json = htmlentities( json_encode( $chart_data ), ENT_QUOTES, 'UTF-8', true ); $options_json = htmlentities( json_encode( $chart_options ), ENT_QUOTES, 'UTF-8', true ); echo '
'; } /** * Output the report for a specific form by assignee. * * @param int $form_id The form ID. * @param array $args The reports page arguments. */ public static function report_form_by_assignee( $form_id, $args ) { $defaults = array( 'start_date' => date( 'Y-m-d', strtotime( '-1 year' ) ), 'check_permissions' => true, 'base_url' => admin_url( 'admin.php?page=gravityflow-reports' ), ); $args = array_merge( $defaults, $args ); $rows = Gravity_Flow_Activity::get_report_data_for_form_by_assignee( $form_id, $args['start_date'] ); if ( empty( $rows ) ) { esc_html_e( 'No data to display', 'gravityflow' ); return; } $chart_data = array(); $chart_data[] = array( esc_html__( 'Assignee', 'gravityflow' ), esc_html__( 'Completed', 'gravityflow' ), esc_html__( 'Average Duration (hours)', 'gravityflow' ) ); foreach ( $rows as $row ) { if ( $row->assignee_type == 'user_id' ) { $user = get_user_by( 'id', $row->assignee_id ); $display_name = $user->display_name; } else { $display_name = $row->assignee_id; } $chart_data[] = array( $display_name, absint( $row->c ), absint( $row->av ) / HOUR_IN_SECONDS ); } $form = GFAPI::get_form( $form_id ); $chart_options = array( 'chart' => array( 'title' => esc_html( $form['title'] ), 'subtitle' => esc_html__( 'Step completed and average duration by assignee', 'gravityflow' ), ), 'bars' => 'horizontal', 'height' => 200 + count( $rows ) * 100, 'series' => array( array( 'axis' => 'count' ), array( 'axis' => 'average_duration' ), ), 'axes' => array( 'x' => array( 'count' => array( 'side' => 'top', 'label' => esc_html__( 'Completed', 'gravityflow' ) ), 'average_duration' => array( 'label' => esc_html__( 'Average Duration (hours)', 'gravityflow' ) ), ), ), ); $data_table_json = htmlentities( json_encode( $chart_data ), ENT_QUOTES, 'UTF-8', true ); $options_json = htmlentities( json_encode( $chart_options ), ENT_QUOTES, 'UTF-8', true ); echo '
'; } /** * Output the report for a specific assignee by month. * * @param string $assignee_type The assignee type. * @param string $assignee_id The assignee ID. * @param array $args The reports page arguments. */ public static function report_assignee_by_month( $assignee_type, $assignee_id, $args ) { $defaults = array( 'start_date' => date( 'Y-m-d', strtotime( '-1 year' ) ), 'check_permissions' => true, 'base_url' => admin_url( 'admin.php?page=gravityflow-reports' ), ); $args = array_merge( $defaults, $args ); $rows = Gravity_Flow_Activity::get_report_data_for_assignee_by_month( $assignee_type, $assignee_id, $args['start_date'] ); if ( empty( $rows ) ) { esc_html_e( 'No data to display', 'gravityflow' ); return; } $chart_data = array(); $chart_data[] = array( esc_html__( 'Month', 'gravityflow' ), esc_html__( 'Workflows Completed', 'gravityflow' ), esc_html__( 'Average Duration (hours)', 'gravityflow' ) ); global $wp_locale; foreach ( $rows as $row ) { $chart_data[] = array( $wp_locale->get_month( $row->month ) . ' ' . $row->year, absint( $row->c ), absint( $row->av ) / HOUR_IN_SECONDS ); } if ( $assignee_type == 'user_id' ) { $user = get_user_by( 'id', $assignee_id ); $display_name = $user->display_name; } else { $display_name = $assignee_id; } $chart_options = array( 'chart' => array( 'title' => esc_html( $display_name ), 'subtitle' => esc_html__( 'Workflows completed and average duration by month', 'gravityflow' ), ), 'bars' => 'horizontal', 'height' => 200 + count( $rows ) * 100, 'series' => array( array( 'axis' => 'count' ), array( 'axis' => 'average_duration' ), ), 'axes' => array( 'x' => array( 'count' => array( 'side' => 'top', 'label' => esc_html__( 'Workflows Completed', 'gravityflow' ) ), 'average_duration' => array( 'label' => esc_html__( 'Average Duration (hours)', 'gravityflow' ) ), ), ), ); $data_table_json = htmlentities( json_encode( $chart_data ), ENT_QUOTES, 'UTF-8', true ); $options_json = htmlentities( json_encode( $chart_options ), ENT_QUOTES, 'UTF-8', true ); echo '
'; } /** * Format the duration for output. * * @param int $seconds The duration in seconds. * * @return string */ public static function format_duration( $seconds ) { return gravity_flow()->format_duration( $seconds ); } /** * Returns the HTML for the form drop down. * * @param string|int $selected_value The selected form. * @param bool $echo Indicates if the content should be echoed. * * @return string */ public static function form_drop_down( $selected_value, $echo = true ) { $m = array(); $m[] = ''; $html = join( '', $m ); if ( $echo ) { echo $html; } return $html; } /** * Returns the HTML for the range drop down. * * @param string|int $selected_value The selected range. * @param bool $echo Indicates if the content should be echoed. * * @return string */ public static function range_drop_down( $selected_value, $echo = true ) { $m = array(); $m[] = ''; $html = join( '', $m ); if ( $echo ) { echo $html; } return $html; } /** * Returns the HTML for the category drop down. * * @param string|int $selected_value The selected category. * @param bool $echo Indicates if the content should be echoed. * * @return string */ public static function category_drop_down( $selected_value, $echo = true ) { $m = array(); $m[] = ''; $html = join( '', $m ); if ( $echo ) { echo $html; } return $html; } /** * Output the step filter. * * @param array $args The reports page arguments. */ public static function step_filter( $args ) { ?>
'; $m[] = sprintf( '', esc_html__( 'All Steps', 'gravityflow' ) ); $steps = gravity_flow()->get_steps( $form_id ); foreach ( $steps as $step ) { $m[] = sprintf( '', $step->get_id(), $step->get_name() ); } $m[] = ''; $html = join( '', $m ); if ( $echo ) { echo $html; } return $html; } /** * Get an array of form IDs which have workflows. * * @return array */ public static function get_form_ids() { return gravity_flow()->get_workflow_form_ids(); } /** * Returns step and assignee properties to be used when rendering the filters. * * @return array */ public static function get_filter_config_vars() { $form_ids = self::get_form_ids(); $steps_vars = array(); foreach ( $form_ids as $form_id ) { $steps = gravity_flow()->get_steps( $form_id ); $steps_vars[ $form_id ] = array(); foreach ( $steps as $step ) { $assignees = $step->get_assignees(); $assignee_vars = array(); foreach ( $assignees as $assignee ) { $assignee_id = $assignee->get_id(); if ( ! empty( $assignee_id ) ) { $assignee_vars[] = array( 'key' => $assignee->get_key(), 'name' => $assignee->get_display_name() ); } } $steps_vars[ $form_id ][ $step->get_id() ] = array( 'id' => $step->get_id(), 'name' => $step->get_name(), 'assignees' => $assignee_vars ); } } return $steps_vars; } }