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;
}
}