diff --git a/includes/admin/post-types/class-sp-admin-meta-boxes.php b/includes/admin/post-types/class-sp-admin-meta-boxes.php
index c9bc5604..be818b55 100644
--- a/includes/admin/post-types/class-sp-admin-meta-boxes.php
+++ b/includes/admin/post-types/class-sp-admin-meta-boxes.php
@@ -67,7 +67,7 @@ class SP_Admin_Meta_Boxes {
// Save Player Meta Boxes
add_action( 'sportspress_process_sp_player_meta', 'SP_Meta_Box_Player_Details::save', 10, 2 );
add_action( 'sportspress_process_sp_player_meta', 'SP_Meta_Box_Player_Metrics::save', 20, 2 );
- add_action( 'sportspress_process_sp_player_meta', 'SP_Meta_Box_Player_Performance::save', 30, 2 );
+ add_action( 'sportspress_process_sp_player_meta', 'SP_Meta_Box_Player_Statistics::save', 30, 2 );
// Save List Meta Boxes
add_action( 'sportspress_process_sp_list_meta', 'SP_Meta_Box_List_Format::save', 10, 2 );
@@ -130,8 +130,8 @@ class SP_Admin_Meta_Boxes {
// Players
add_meta_box( 'sp_detailsdiv', __( 'Details', 'sportspress' ), 'SP_Meta_Box_Player_Details::output', 'sp_player', 'side', 'default' );
- add_meta_box( 'sp_metricsdiv', __( 'Player Metrics', 'sportspress' ), 'SP_Meta_Box_Player_Metrics::output', 'sp_player', 'side', 'default' );
- add_meta_box( 'sp_performancediv', __( 'Player Performance', 'sportspress' ), 'SP_Meta_Box_Player_Performance::output', 'sp_player', 'normal', 'high' );
+ add_meta_box( 'sp_metricsdiv', __( 'Metrics', 'sportspress' ), 'SP_Meta_Box_Player_Metrics::output', 'sp_player', 'side', 'default' );
+ add_meta_box( 'sp_statisticsdiv', __( 'Statistics', 'sportspress' ), 'SP_Meta_Box_Player_Statistics::output', 'sp_player', 'normal', 'high' );
add_meta_box( 'sp_editordiv', __( 'Profile', 'sportspress' ), 'SP_Meta_Box_Player_Editor::output', 'sp_player', 'normal', 'high' );
// Lists
diff --git a/includes/admin/post-types/meta-boxes/class-sp-meta-box-player-statistics.php b/includes/admin/post-types/meta-boxes/class-sp-meta-box-player-statistics.php
new file mode 100644
index 00000000..88fc9b12
--- /dev/null
+++ b/includes/admin/post-types/meta-boxes/class-sp-meta-box-player-statistics.php
@@ -0,0 +1,54 @@
+ID, 'sp_league' );
+
+ $league_num = sizeof( $leagues );
+
+ // Loop through statistics for each league
+ if ( $leagues ): foreach ( $leagues as $league ):
+
+ if ( $league_num > 1 ):
+ ?>
+
|
- >
+ >
|
-
+
|
$label ):
$value = sp_array_value( sp_array_value( $data, $div_id, array() ), $column, 0 );
@@ -1199,7 +1199,7 @@ if ( !function_exists( 'sp_edit_team_columns_table' ) ) {
}
if ( !function_exists( 'sp_edit_player_performance_table' ) ) {
- function sp_edit_player_performance_table( $id = null, $league_id, $columns = array(), $data = array(), $placeholders = array(), $merged = array(), $seasons_teams = array(), $readonly = true ) {
+ function sp_edit_player_performance_table( $id = null, $league_id, $columns = array(), $data = array(), $placeholders = array(), $merged = array(), $leagues = array(), $readonly = true ) {
if ( ! $id )
$id = get_the_ID();
@@ -1229,7 +1229,7 @@ if ( !function_exists( 'sp_edit_player_performance_table' ) ) {
'sp_team',
'name' => 'sp_leagues[' . $league_id . '][' . $div_id . ']',
@@ -1278,6 +1278,87 @@ if ( !function_exists( 'sp_edit_player_performance_table' ) ) {
}
}
+
+if ( !function_exists( 'sp_edit_player_statistics_table' ) ) {
+ function sp_edit_player_statistics_table( $id = null, $league_id, $columns = array(), $data = array(), $placeholders = array(), $merged = array(), $leagues = array(), $readonly = true ) {
+ if ( ! $id )
+ $id = get_the_ID();
+
+ $teams = array_filter( get_post_meta( $id, 'sp_team', false ) );
+ ?>
+
+
+
+
+ |
+ |
+
+ |
+
+
+
+
+ $div_stats ):
+ if ( !$div_id || $div_id == 'statistics' ) continue;
+ $div = get_term( $div_id, 'sp_season' );
+ ?>
+
+ |
+ name; ?>
+ |
+
+ 'sp_team',
+ 'name' => 'sp_leagues[' . $league_id . '][' . $div_id . ']',
+ 'show_option_none' => __( '— None —', 'sportspress' ),
+ 'sort_order' => 'ASC',
+ 'sort_column' => 'menu_order',
+ 'selected' => $value,
+ 'values' => 'ID',
+ 'include' => $teams,
+ 'tax_query' => array(
+ 'relation' => 'AND',
+ array(
+ 'taxonomy' => 'sp_league',
+ 'terms' => $league_id,
+ 'field' => 'id',
+ ),
+ array(
+ 'taxonomy' => 'sp_season',
+ 'terms' => $div_id,
+ 'field' => 'id',
+ ),
+ ),
+ );
+ if ( ! sp_dropdown_pages( $args ) ):
+ _e( 'No results found.', 'sportspress' );
+ endif;
+ ?>
+ |
+ $label ):
+ ?>
+ ';
+ ?> |
+
+
+
+
+
+
+
@@ -1686,7 +1767,7 @@ if ( !function_exists( 'sp_get_team_columns_data' ) ) {
$seasons = (array)get_the_terms( $post_id, 'sp_season' );
$columns = (array)get_post_meta( $post_id, 'sp_columns', true );
- $leagues_seasons = sp_array_value( (array)get_post_meta( $post_id, 'sp_leagues_seasons', true ), $league_id, array() );
+ $leagues_seasons = sp_array_value( (array)get_post_meta( $post_id, 'sp_leagues', true ), $league_id, array() );
// Get labels from result variables
$result_labels = (array)sp_get_var_labels( 'sp_result' );
@@ -1894,7 +1975,7 @@ if ( !function_exists( 'sp_get_team_columns_data' ) ) {
if ( $admin ):
return array( $columns, $data, $placeholders, $merged, $leagues_seasons );
else:
- $labels = array_merge( array( 'name' => __( 'Season', 'sportspress' ) ), $columns );
+ $labels = array_merge( array( 'name' => SP()->text->string('Season') ), $columns );
$merged[0] = $labels;
return $merged;
endif;
@@ -1904,7 +1985,7 @@ if ( !function_exists( 'sp_get_team_columns_data' ) ) {
}
if ( !function_exists( 'sp_get_league_table_data' ) ) {
- function sp_get_league_table_data( $post_id, $breakdown = false ) {
+ function sp_get_league_table_data( $post_id, $admin = false ) {
$league_id = sp_get_the_term_id( $post_id, 'sp_league', 0 );
$div_id = sp_get_the_term_id( $post_id, 'sp_season', 0 );
$team_ids = (array)get_post_meta( $post_id, 'sp_team', false );
@@ -2177,7 +2258,7 @@ if ( !function_exists( 'sp_get_league_table_data' ) ) {
$data[ $key ] = $tempdata[ $key ];
endforeach;
- if ( $breakdown ):
+ if ( $admin ):
return array( $columns, $usecolumns, $data, $placeholders, $merged );
else:
if ( ! is_array( $usecolumns ) )
@@ -2807,7 +2888,6 @@ if ( !function_exists( 'sp_get_player_performance_data' ) ) {
function sp_get_player_performance_data( $post_id, $league_id, $admin = false ) {
$seasons = (array)get_the_terms( $post_id, 'sp_season' );
- $positions = get_the_terms( $post_id, 'sp_position' );
$stats = (array)get_post_meta( $post_id, 'sp_performance', true );
$seasons_teams = sp_array_value( (array)get_post_meta( $post_id, 'sp_leagues', true ), $league_id, array() );
@@ -2819,20 +2899,6 @@ if ( !function_exists( 'sp_get_player_performance_data' ) ) {
'order' => 'ASC',
);
- if ( $positions ):
- $position_ids = array();
- foreach( $positions as $position ):
- $position_ids[] = $position->term_id;
- endforeach;
- $args['tax_query'] = array(
- array(
- 'taxonomy' => 'sp_position',
- 'field' => 'id',
- 'terms' => $position_ids,
- ),
- );
- endif;
-
$performances = get_posts( $args );
$performance_labels = array();
@@ -2984,6 +3050,248 @@ if ( !function_exists( 'sp_get_player_performance_data' ) ) {
}
}
+if ( !function_exists( 'sp_get_player_statistics_data' ) ) {
+ function sp_get_player_statistics_data( $post_id, $league_id, $admin = false ) {
+
+ $seasons = (array)get_the_terms( $post_id, 'sp_season' );
+ $stats = (array)get_post_meta( $post_id, 'sp_statistics', true );
+ $leagues = sp_array_value( (array)get_post_meta( $post_id, 'sp_leagues', true ), $league_id, array() );
+
+ // Get labels from performance variables
+ $performance_labels = (array)sp_get_var_labels( 'sp_performance' );
+
+ // Get labels from outcome variables
+ $outcome_labels = (array)sp_get_var_labels( 'sp_outcome' );
+
+ // Generate array of all season ids and season names
+ $div_ids = array();
+ $season_names = array();
+ foreach ( $seasons as $season ):
+ if ( is_object( $season ) && property_exists( $season, 'term_id' ) && property_exists( $season, 'name' ) ):
+ $div_ids[] = $season->term_id;
+ $season_names[ $season->term_id ] = $season->name;
+ endif;
+ endforeach;
+
+ $data = array();
+
+ // Get all seasons populated with data where available
+ $data = sp_array_combine( $div_ids, sp_array_value( $stats, $league_id, array() ) );
+
+ // Get equations from statistic variables
+ $equations = sp_get_var_equations( 'sp_statistic' );
+
+ // Initialize placeholders array
+ $placeholders = array();
+
+ foreach ( $div_ids as $div_id ):
+
+ $totals = array( 'eventsattended' => 0, 'eventsplayed' => 0, 'streak' => 0, 'last5' => null, 'last10' => null );
+
+ foreach ( $performance_labels as $key => $value ):
+ $totals[ $key ] = 0;
+ endforeach;
+
+ foreach ( $outcome_labels as $key => $value ):
+ $totals[ $key ] = 0;
+ endforeach;
+
+ // Initialize streaks counter
+ $streak = array( 'name' => '', 'count' => 0, 'fire' => 1 );
+
+ // Initialize last counters
+ $last5 = array();
+ $last10 = array();
+
+ // Add outcome types to last counters
+ foreach( $outcome_labels as $key => $value ):
+ $last5[ $key ] = 0;
+ $last10[ $key ] = 0;
+ endforeach;
+
+ // Get all events involving the team in current season
+ $args = array(
+ 'post_type' => 'sp_event',
+ 'numberposts' => -1,
+ 'posts_per_page' => -1,
+ 'order' => 'ASC',
+ 'meta_query' => array(
+ 'relation' => 'AND',
+ array(
+ 'key' => 'sp_player',
+ 'value' => $post_id
+ ),
+ array(
+ 'key' => 'sp_format',
+ 'value' => 'league'
+ )
+ ),
+ 'tax_query' => array(
+ 'relation' => 'AND',
+ array(
+ 'taxonomy' => 'sp_league',
+ 'field' => 'id',
+ 'terms' => $league_id
+ ),
+ array(
+ 'taxonomy' => 'sp_season',
+ 'field' => 'id',
+ 'terms' => $div_id
+ ),
+ )
+ );
+ $events = get_posts( $args );
+
+ foreach( $events as $event ):
+ $totals['eventsattended']++;
+ $results = (array)get_post_meta( $event->ID, 'sp_results', true );
+ $team_performance = (array)get_post_meta( $event->ID, 'sp_players', true );
+
+ // Add all team performance
+ foreach ( $team_performance as $team_id => $players ):
+ if ( array_key_exists( $post_id, $players ) ):
+
+ $team_results = sp_array_value( $results, $team_id, array() );
+
+ // Find the outcome
+ if ( array_key_exists( 'outcome', $team_results ) ):
+
+ $value = $team_results['outcome'];
+
+ // Convert to array
+ if ( ! is_array( $value ) ):
+ $value = array( $value );
+ endif;
+
+ foreach( $value as $outcome ):
+
+ // Increment events played and outcome count
+ if ( array_key_exists( $outcome, $totals ) ):
+ $totals[ $outcome ]++;
+ endif;
+
+ if ( $outcome && $outcome != '-1' ):
+
+ // Add to streak counter
+ if ( $streak['fire'] && ( $streak['name'] == '' || $streak['name'] == $outcome ) ):
+ $streak['name'] = $outcome;
+ $streak['count'] ++;
+ else:
+ $streak['fire'] = 0;
+ endif;
+
+ // Add to last 5 counter if sum is less than 5
+ if ( array_key_exists( $outcome, $last5 ) && array_sum( $last5 ) < 5 ):
+ $last5[ $outcome ] ++;
+ endif;
+
+ // Add to last 10 counter if sum is less than 10
+ if ( array_key_exists( $outcome, $last10 ) && array_sum( $last10 ) < 10 ):
+ $last10[ $outcome ] ++;
+ endif;
+
+ endif;
+
+ endforeach;
+
+ endif;
+
+ $player_performance = sp_array_value( $players, $post_id, array() );
+
+ // Increment events played if active in event
+ if ( sp_array_value( $player_performance, 'status' ) != 'sub' || sp_array_value( $player_performance, 'sub', 0 ) ):
+ $totals['eventsplayed']++;
+ endif;
+
+ foreach ( $player_performance as $key => $value ):
+ if ( array_key_exists( $key, $totals ) ):
+ $totals[ $key ] += $value;
+ endif;
+ endforeach;
+ endif;
+ endforeach;
+ endforeach;
+
+ // Compile streaks counter and add to totals
+ $args = array(
+ 'name' => $streak['name'],
+ 'post_type' => 'sp_outcome',
+ 'post_status' => 'publish',
+ 'posts_per_page' => 1
+ );
+ $outcomes = get_posts( $args );
+
+ if ( $outcomes ):
+ $outcome = reset( $outcomes );
+ $totals['streak'] = $outcome->post_title . $streak['count'];
+ endif;
+
+ // Add last counters to totals
+ $totals['last5'] = $last5;
+ $totals['last10'] = $last10;
+
+ // Generate array of placeholder values for each league
+ $placeholders[ $div_id ] = array();
+ foreach ( $equations as $key => $value ):
+ $placeholders[ $div_id ][ $key ] = sp_solve( $value['equation'], $totals, $value['precision'] );
+ endforeach;
+
+ endforeach;
+
+ // Get stats from statistic variables
+ $stats = sp_get_var_labels( 'sp_statistic' );
+
+ // Merge the data and placeholders arrays
+ $merged = array();
+
+ foreach( $placeholders as $season_id => $season_data ):
+
+ if ( ! sp_array_value( $leagues, $season_id, 0 ) )
+ continue;
+
+ $season_name = sp_array_value( $season_names, $season_id, ' ' );
+
+ $team_id = sp_array_value( $leagues, $season_id, array() );
+
+ if ( ! $team_id || $team_id == '-1' )
+ continue;
+
+ $team_name = get_the_title( $team_id );
+
+ if ( get_option( 'sportspress_player_link_teams', 'no' ) == 'yes' ? true : false ):
+ $team_permalink = get_permalink( $team_id );
+ $team_name = '' . $team_name . '';
+ endif;
+
+ // Add season name to row
+ $merged[ $season_id ] = array(
+ 'name' => $season_name,
+ 'team' => $team_name
+ );
+
+ foreach( $season_data as $key => $value ):
+
+ // Use static data if key exists and value is not empty, else use placeholder
+ if ( array_key_exists( $season_id, $data ) && array_key_exists( $key, $data[ $season_id ] ) && $data[ $season_id ][ $key ] != '' ):
+ $merged[ $season_id ][ $key ] = $data[ $season_id ][ $key ];
+ else:
+ $merged[ $season_id ][ $key ] = $value;
+ endif;
+
+ endforeach;
+
+ endforeach;
+
+ if ( $admin ):
+ return array( $stats, $data, $placeholders, $merged, $leagues );
+ else:
+ $labels = array_merge( array( 'name' => SP()->text->string('Season'), 'team' => SP()->text->string('Team') ), $stats );
+ $merged[0] = $labels;
+ return $merged;
+ endif;
+ }
+}
+
if ( !function_exists( 'sp_get_next_event' ) ) {
function sp_get_next_event( $args = array() ) {
$options = array(
diff --git a/includes/sp-template-functions.php b/includes/sp-template-functions.php
index 37843a23..914a3175 100644
--- a/includes/sp-template-functions.php
+++ b/includes/sp-template-functions.php
@@ -209,17 +209,17 @@ if ( ! function_exists( 'sportspress_output_player_details' ) ) {
sp_get_template( 'player-details.php' );
}
}
-if ( ! function_exists( 'sportspress_output_player_performance' ) ) {
+if ( ! function_exists( 'sportspress_output_player_statistics' ) ) {
/**
- * Output the player performance.
+ * Output the player statistics.
*
* @access public
- * @subpackage Player/Performance
+ * @subpackage Player/Statistics
* @return void
*/
- function sportspress_output_player_performance() {
- sp_get_template( 'player-performance.php' );
+ function sportspress_output_player_statistics() {
+ sp_get_template( 'player-statistics.php' );
}
}
diff --git a/includes/sp-template-hooks.php b/includes/sp-template-hooks.php
index 5884955b..3a204f09 100644
--- a/includes/sp-template-hooks.php
+++ b/includes/sp-template-hooks.php
@@ -62,10 +62,10 @@ add_action( 'sportspress_single_table_content', 'sportspress_output_league_table
* Single Player Content
*
* @see sportspress_output_player_details()
- * @see sportspress_output_player_performance()
+ * @see sportspress_output_player_statistics()
*/
add_action( 'sportspress_single_player_content', 'sportspress_output_player_details', 10 );
-add_action( 'sportspress_single_player_content', 'sportspress_output_player_performance', 20 );
+add_action( 'sportspress_single_player_content', 'sportspress_output_player_statistics', 20 );
/**
* Single List Content
diff --git a/templates/player-statistics.php b/templates/player-statistics.php
new file mode 100644
index 00000000..ac883103
--- /dev/null
+++ b/templates/player-statistics.php
@@ -0,0 +1,64 @@
+term_id );
+
+ // The first row should be column labels
+ $labels = $data[0];
+
+ // Remove the first row to leave us with the actual data
+ unset( $data[0] );
+
+ // Skip if there are no rows in the table
+ if ( empty( $data ) )
+ return false;
+
+ $output = '' . $league->name . '' .
+ '' .
+ ' ' . '' . '';
+
+ foreach( $labels as $key => $label ):
+ $output .= '| ' . $label . ' | ';
+ endforeach;
+
+ $output .= ' ' . '' . '';
+
+ $i = 0;
+
+ foreach( $data as $season_id => $row ):
+
+ $output .= '';
+
+ foreach( $labels as $key => $value ):
+ $output .= '| ' . sp_array_value( $row, $key, '—' ) . ' | ';
+ endforeach;
+
+ $output .= ' ';
+
+ $i++;
+
+ endforeach;
+
+ $output .= '' . ' ' . ' ';
+
+ echo apply_filters( 'sportspress_player_statistics', $output );
+ endforeach;
+endif;
|