diff --git a/admin/templates/event-players.php b/admin/templates/event-players.php index a1d4bb1b..7afa9c9d 100644 --- a/admin/templates/event-players.php +++ b/admin/templates/event-players.php @@ -10,6 +10,8 @@ if ( !function_exists( 'sportspress_event_players' ) ) { $stats = (array)get_post_meta( $id, 'sp_players', true ); $statistic_labels = sportspress_get_var_labels( 'sp_statistic' ); + $totals = array(); + $output = ''; foreach( $teams as $key => $team_id ): @@ -60,6 +62,10 @@ if ( !function_exists( 'sportspress_event_players' ) ) { else: $value = 0; endif; + if ( ! array_key_exists( $key, $totals ) ): + $totals[ $key ] = 0; + endif; + $totals[ $key ] += $value; $output .= '' . $value . ''; endforeach; @@ -90,7 +96,7 @@ if ( !function_exists( 'sportspress_event_players' ) ) { if ( array_key_exists( $key, $row ) && $row[ $key ] != '' ): $value = $row[ $key ]; else: - $value = 0; + $value = sportspress_array_value( $totals, $key, 0 ); endif; $output .= '' . $value . ''; endforeach; diff --git a/admin/tools/event-importer.php b/admin/tools/event-importer.php index b5ea1bcb..eb839e56 100644 --- a/admin/tools/event-importer.php +++ b/admin/tools/event-importer.php @@ -114,102 +114,50 @@ if ( class_exists( 'WP_Importer' ) ) { $loop = 0; - // Get event format + // Get event format, league, and season from post vars $event_format = ( empty( $_POST['sp_format'] ) ? false : $_POST['sp_format'] ); - - // Get league $league = ( empty( $_POST['sp_league'] ) ? false : $_POST['sp_league'] ); - - // Get season $season = ( empty( $_POST['sp_season'] ) ? false : $_POST['sp_season'] ); - // Get labels from result variables + // Get labels from result and statistic post types $result_labels = sportspress_get_var_labels( 'sp_result' ); - - // Get labels from statistic variables $statistic_labels = sportspress_get_var_labels( 'sp_statistic' ); while ( ( $row = fgetcsv( $handle, 0, $this->delimiter ) ) !== FALSE ): - $date = str_replace( '/', '-', trim( $row[0] ) ); - unset( $row[0] ); + // Slice array into event, team, and player + $event = array_slice( $row, 0, 3 ); + $team = array_slice( $row, 3, 3 ); + $player = array_slice( $row, 6 ); - if ( ! empty( $date ) ): + // Add new event if date is given + if ( sizeof( $event ) > 0 && ! empty( $event[0] ) ): - // Add players to previous event + // Add player statistics to last event if available if ( isset( $id ) && isset( $players ) && sizeof( $players ) > 0 ): - foreach ( $players as $team => $team_players ): - add_post_meta( $id, 'sp_player', '0', false ); - foreach ( $team_players as $player_id => $player_statistics ): - add_post_meta( $id, 'sp_player', $player_id, false ); - endforeach; - endforeach; update_post_meta( $id, 'sp_players', $players ); endif; - // Add time to date - $date .= ' ' . trim( $row[1] ); - unset( $row[1] ); + // List event columns + list( $date, $time, $venue ) = $event; - $venue = trim( $row[2] ); - unset( $row[2] ); + // Format date by replacing slashes with dashes + $date = str_replace( '/', '-', trim( $date ) ); - // Initialize arrays - $teams = array(); - $team_names = array(); - $players = array(); - $results = array(); + // Add time to date if given + if ( ! empty( $time ) ): + $date .= ' ' . trim( $time ); + endif; - foreach ( $row as $team ): - - $teamdata = explode( '|', $team ); - - $name = trim( $teamdata[0] ); - unset( $teamdata[0] ); - - $team_results = array(); - - if ( sizeof( $result_labels ) > 0 ): - foreach( $result_labels as $key => $label ): - $team_results[ $key ] = trim( array_shift( $teamdata ) ); - endforeach; - endif; - - $outcomes = array(); - - foreach ( $teamdata as $outcome ): - - $outcome = trim( $outcome ); - - // Get or insert outcome - $outcome_object = get_page_by_path( $outcome, OBJECT, 'sp_outcome' ); - if ( $outcome_object ): - if ( $outcome_object->post_status != 'publish' ): - wp_update_post( array( 'ID' => $outcome_object->ID, 'post_status' => 'publish' ) ); - endif; - $outcome_slug = $outcome_object->post_name; - else: - $outcome_id = wp_insert_post( array( 'post_type' => 'sp_outcome', 'post_status' => 'publish', 'post_title' => $outcome ) ); - $post_data = get_post( $outcome_id, ARRAY_A ); - $outcome_slug = $post_data['post_name']; - // Flag as import - update_post_meta( $outcome_id, '_sp_import', 1 ); - endif; - $outcomes[] = $outcome_slug; - endforeach; - - $team_names[] = $name; - - $teams[] = array( 'name' => $name, 'results' => $team_results, 'outcomes' => $outcomes ); - - endforeach; - - $title = implode( ' ' . __( 'vs', 'sportspress' ) . ' ', $team_names ); - - $args = array( 'post_type' => 'sp_event', 'post_status' => 'publish', 'post_title' => $title, 'post_date' => $date ); + // Define post type args + $args = array( 'post_type' => 'sp_event', 'post_status' => 'publish', 'post_date' => $date ); + // Insert event $id = wp_insert_post( $args ); + // Initialize statistics array + $players = array(); + // Flag as import update_post_meta( $id, '_sp_import', 1 ); @@ -231,127 +179,221 @@ if ( class_exists( 'WP_Importer' ) ) { // Update venue wp_set_object_terms( $id, $venue, 'sp_venue', false ); - $team_ids = array(); - - foreach ( $teams as $team ): - // Get or insert team - $team_object = get_page_by_path( $team['name'], OBJECT, 'sp_team' ); - if ( $team_object ): - if ( $team_object->post_status != 'publish' ): - wp_update_post( array( 'ID' => $team_object->ID, 'post_status' => 'publish' ) ); - endif; - $team_id = $team_object->ID; - else: - $team_id = wp_insert_post( array( 'post_type' => 'sp_team', 'post_status' => 'publish', 'post_title' => $team['name'] ) ); - // Flag as import - update_post_meta( $team_id, '_sp_import', 1 ); - endif; - - if ( $league ): - wp_set_object_terms( $team_id, $league, 'sp_league', true ); - endif; - - if ( $season ): - wp_set_object_terms( $team_id, $season, 'sp_season', true ); - endif; - - $team_ids[ $team['name'] ] = $team_id; - $players[ $team_id ] = array(); - - $results[ $team_id ] = $team['results']; - $results[ $team_id ]['outcome'] = $team['outcomes']; - - // Add team to event - add_post_meta( $id, 'sp_team', $team_id ); - endforeach; - - // Update results - update_post_meta( $id, 'sp_results', $results ); - + // Increment $loop ++; - $this->imported++; - - elseif ( isset( $id ) ): - - unset( $row[0], $row[1], $row[2] ); - $ti = 0; - foreach ( $row as $player ): - - if ( ! empty( $player ) ): - $team_name = $team_names[ $ti ]; - $statistics = explode( '|', $player ); - - $name = trim( $statistics[0] ); - unset( $statistics[0] ); - - $player_statistics = array(); - - $s = 0; - foreach ( $statistic_labels as $key => $label ): - $player_statistics[ $key ] = sportspress_array_value( $statistics, $s, 0 ); - $s ++; - endforeach; - - // Get or insert player - $player_object = get_page_by_path( $name, OBJECT, 'sp_player' ); - if ( $player_object ): - if ( $player_object->post_status != 'publish' ): - wp_update_post( array( 'ID' => $player_object->ID, 'post_status' => 'publish' ) ); - endif; - $player_id = $player_object->ID; - else: - $player_id = wp_insert_post( array( 'post_type' => 'sp_player', 'post_status' => 'publish', 'post_title' => $name ) ); - // Flag as import - update_post_meta( $player_id, '_sp_import', 1 ); - update_post_meta( $player_id, 'sp_number', '' ); - endif; - - if ( $league ): - wp_set_object_terms( $player_id, $league, 'sp_league', true ); - endif; - - if ( $season ): - wp_set_object_terms( $player_id, $season, 'sp_season', true ); - endif; - - $team_id = $team_ids[ $team_name ]; - - $player_teams = get_post_meta( $player_id, 'sp_team', false ); - $current_team = get_post_meta( $player_id, 'sp_current_team', true ); - $past_teams = get_post_meta( $player_id, 'sp_past_team', false ); - - if ( ! in_array( $team_id, $player_teams ) ): - // Add team - add_post_meta( $player_id, 'sp_team', $team_id ); - endif; - if ( ! $current_team ): - // Set team as current team - update_post_meta( $player_id, 'sp_current_team', $team_id ); - elseif ( $current_team != $team_id && ! in_array( $team_id, $past_teams ) ): - // Add team as past team - add_post_meta( $player_id, 'sp_past_team', $team_id ); - endif; - - // Add player to players array - $players[ $team_id ][ $player_id ] = $player_statistics; - endif; - - $ti++; - - endforeach; + $this->imported ++; endif; - endwhile; + // Add new team if team name is given + if ( sizeof( $team ) > 0 && ! empty( $team[0] ) ): - // Add players to last event + // List team columns + list( $team_name, $result, $outcome ) = $team; + + // Find out if team exists + $team_object = get_page_by_path( $team_name, OBJECT, 'sp_team' ); + + // Get or insert team + if ( $team_object ): + + // Make sure team is published + if ( $team_object->post_status != 'publish' ): + wp_update_post( array( 'ID' => $team_object->ID, 'post_status' => 'publish' ) ); + endif; + + // Get team ID + $team_id = $team_object->ID; + + else: + + // Insert team + $team_id = wp_insert_post( array( 'post_type' => 'sp_team', 'post_status' => 'publish', 'post_title' => $team_name ) ); + + // Flag as import + update_post_meta( $team_id, '_sp_import', 1 ); + + endif; + + // Update league + if ( $league ): + wp_set_object_terms( $team_id, $league, 'sp_league', true ); + endif; + + // Update season + if ( $season ): + wp_set_object_terms( $team_id, $season, 'sp_season', true ); + endif; + + // Add to event if exists + if ( isset( $id ) ): + + // Add team to event + add_post_meta( $id, 'sp_team', $team_id ); + + // Add empty player to event + add_post_meta( $id, 'sp_player', 0 ); + + // Explode results into array + $results = explode( '|', $result ); + + // Create team results array from result keys + $team_results = array(); + if ( sizeof( $result_labels ) > 0 ): + foreach( $result_labels as $key => $label ): + $team_results[ $key ] = trim( array_shift( $results ) ); + endforeach; + $team_results[ 'outcome' ] = array(); + endif; + + // Explode outcomes into array + $outcomes = explode( '|', $outcome ); + + // Add outcome slugs to team outcomes array + foreach ( $outcomes as $outcome ): + + // Remove whitespace + $outcome = trim( $outcome ); + + // Get or insert outcome + $outcome_object = get_page_by_path( $outcome, OBJECT, 'sp_outcome' ); + + if ( $outcome_object ): + + // Make sure outcome is published + if ( $outcome_object->post_status != 'publish' ): + wp_update_post( array( 'ID' => $outcome_object->ID, 'post_status' => 'publish' ) ); + endif; + + // Get outcome slug + $outcome_slug = $outcome_object->post_name; + + else: + + // Insert outcome + $outcome_id = wp_insert_post( array( 'post_type' => 'sp_outcome', 'post_status' => 'publish', 'post_title' => $outcome ) ); + + // Get outcome slug + $post_data = get_post( $outcome_id, ARRAY_A ); + $outcome_slug = $post_data['post_name']; + + // Flag as import + update_post_meta( $outcome_id, '_sp_import', 1 ); + + endif; + + // Add to team results array + $team_results[ 'outcome' ][] = $outcome_slug; + + endforeach; + + // Get existing results + $event_results = get_post_meta( $id, 'sp_results', true ); + + // Create new array if results not exists + if ( ! $event_results ): + $event_results = array(); + endif; + + // Add team results to existing results + $event_results[ $team_id ] = $team_results; + + // Update event results + update_post_meta( $id, 'sp_results', $event_results ); + + // Get event name + $title = get_the_title( $id ); + + // Add delimiter if event name is set + if ( $title ): + $title .= ' ' . __( 'vs', 'sportspress' ) . ' '; + endif; + + // Append team name to event name + $title .= $team_name; + + // Update event with new name + $post = array( + 'ID' => $id, + 'post_title' => $title, + ); + wp_update_post( $post ); + + endif; + + endif; + + // Add new player if player name is given + if ( sizeof( $player ) > 0 && ! empty( $player[0] ) ): + + // Get and unset player name leaving us with the statistics + $player_name = $player[0]; + unset( $player[0] ); + + // Find out if player exists + $player_object = get_page_by_path( $player_name, OBJECT, 'sp_player' ); + + // Get or insert player + if ( $player_object ): + + // Make sure player is published + if ( $player_object->post_status != 'publish' ): + wp_update_post( array( 'ID' => $player_object->ID, 'post_status' => 'publish' ) ); + endif; + + // Get player ID + $player_id = $player_object->ID; + + else: + + // Insert player + $player_id = wp_insert_post( array( 'post_type' => 'sp_player', 'post_status' => 'publish', 'post_title' => $player_name ) ); + + // Flag as import + update_post_meta( $player_id, '_sp_import', 1 ); + + endif; + + // Update league + if ( $league ): + wp_set_object_terms( $player_id, $league, 'sp_league', true ); + endif; + + // Update season + if ( $season ): + wp_set_object_terms( $player_id, $season, 'sp_season', true ); + endif; + + // Add to event if exists + if ( isset( $id ) ): + + // Add player to event + add_post_meta( $id, 'sp_player', $player_id ); + + // Add player statistics to array if team is available + if ( isset( $team_id ) ): + + // Initialize statistics array + $statistics = array(); + + // Map keys to player statistics + foreach ( $statistic_labels as $key => $label ): + $statistics[ $key ] = array_shift( $player ); + endforeach; + + $players[ $team_id ][ $player_id ] = $statistics; + + endif; + + endif; + + endif; + + endwhile; + + // Add player statistics to last event if available if ( isset( $id ) && isset( $players ) && sizeof( $players ) > 0 ): - foreach ( $players as $team => $team_players ): - add_post_meta( $id, 'sp_player', '0', false ); - foreach ( $team_players as $player ): - add_post_meta( $id, 'sp_player', $player, false ); - endforeach; - endforeach; + update_post_meta( $id, 'sp_players', $players ); endif; else: diff --git a/assets/css/admin.css b/assets/css/admin.css index a4e8a786..3873a7fa 100644 --- a/assets/css/admin.css +++ b/assets/css/admin.css @@ -337,8 +337,8 @@ table.widefat td.column-sp_number .sp-flag { max-width: 20px; } -table.widefat td.sp-outcome .chosen-container { - width: 100%; +table.widefat select.sp-outcome { + width: 150px; } #sp_venue-adder h4, diff --git a/assets/js/admin.js b/assets/js/admin.js index f4032a6b..6e61cfe5 100644 --- a/assets/js/admin.js +++ b/assets/js/admin.js @@ -167,7 +167,7 @@ jQuery(document).ready(function($){ sum += parseInt(val, 10); } }); - $(this).val(sum); + $(this).attr("placeholder", sum); }); // Activate total stats calculator @@ -177,6 +177,9 @@ jQuery(document).ready(function($){ }); } + // Trigger total stats calculator + $(".sp-data-table .sp-total input").trigger("updateTotal"); + // Select all checkboxes $(".sp-select-all").change(function() { $range = $(this).closest(".sp-select-all-range"); diff --git a/dummy-data/events-sample.csv b/dummy-data/events-sample.csv index 1ac6ecef..9bfde351 100644 --- a/dummy-data/events-sample.csv +++ b/dummy-data/events-sample.csv @@ -1 +1 @@ -Date,Time,Venue,Team 1,Team 2 2014/01/20,14:15:00,Little Park,Essendon Eagles|1|3|4|Win,Southbank Sharks|2|0|2|Loss ,,,Joe Allen|0|1|0|0,Daniel Sturridge|1|0|1|0 ,,,David Hardy|2|0|1|0,Jake Price|0|0|1|1 ,,,Jude Murray|0|2|0|0,Owen Goodwin|1|2|0|0 ,,,Isaac Hall|1|1|0|0,Dylan Gray|0|0|1|0 ,,,Nathan Knowles|1|0|0|1,Zachary Noble|0|0|2|0 2014/01/24,16:00:00,Big Stadium,Carlton Kangaroos|1|1|2|Win,Essendon Eagles|0|1|1|Loss ,,,Steven Gerrard|0|0|0|0,Joe Allen|1|0|3|0 ,,,Gabrielle Gonzalez|1|0|1|0,David Hardy|0|0|1|1 ,,,Harrison Hancock|0|2|0|0,Ellis Nicholls|0|1|0|0 ,,,Reece Reeves|1|0|0|0,Corey Kirk|0|0|1|0 ,,,Edward Colier|0|0|0|1,Isaac Hall|0|0|2|0 2014/03/14,16:00:00,Little Park,Southbank Sharks|2|0|2|Loss,Essendon Eagles|1|2|3|Win ,,,Daniel Sturridge|1|0|1|0,Joe Allen|1|1|0|0 ,,,Jake Price|1|0|0|0,David Hardy|0|0|1|0 ,,,Owen Goodwin|0|1|0|0,Jude Murray|1|0|1|0 ,,,Dylan Gray|0|1|1|0,Corey Kirk|1|1|0|0 ,,,Henry Chadwick|0|0|0|1,Spencer Duncan|0|0|0|1 2015/12/10,13:00:00,Little Park,Essendon Eagles,Carlton Kangaroos 2016/05/05,12:00:00,Big Stadium,Southbank Sharks,Carlton Kangaroos ,,,, ,,,, ,,,, \ No newline at end of file +Date,Time,Venue,Teams,Results,Outcome,Players,Goals,Assists,Yellow Cards,Red Cards 2014/01/20,14:15:00,Little Park,Essendon Eagles,1|3|4,Win,Joe Allen,0,1,0,0 ,,,,,,David Hardy,2,0,1,0 ,,,,,,Jude Murray,0,2,0,0 ,,,,,,Isaac Hall,1,1,0,0 ,,,,,,Nathan Knowles,1,0,0,1 ,,,Southbank Sharks,2|0|2,Loss,Daniel Sturridge,1,0,1,0 ,,,,,,Jake Price,0,0,1,1 ,,,,,,Owen Goodwin,1,2,0,0 ,,,,,,Dylan Gray,0,0,1,0 ,,,,,,Zachary Noble,0,0,2,0 2014/01/24,16:00:00,Big Stadium,Carlton Kangaroos,1|1|2,Draw,Steven Gerrard,0,0,0,0 ,,,,,,Gabrielle Gonzalez,1,0,1,0 ,,,,,,Harrison Hancock,0,2,0,0 ,,,,,,Reece Reeves,1,0,0,0 ,,,,,,Edward Colier,0,0,0,1 ,,,Essendon Eagles,0|2|2,Draw,Joe Allen,1,0,3,0 ,,,,,,David Hardy,0,0,1,1 ,,,,,,Ellis Nicholls,0,1,0,0 ,,,,,,Corey Kirk,0,0,1,0 ,,,,,,Isaac Hall,1,1,2,0 2014/03/14,16:00:00,Little Park,Southbank Sharks,2|0|2,Loss,Daniel Sturridge,1,0,1,0 ,,,,,,Jake Price,1,0,0,0 ,,,,,,Owen Goodwin,0,1,0,0 ,,,,,,Dylan Gray,0,1,1,0 ,,,,,,Henry Chadwick,0,0,0,1 ,,,Essendon Eagles,1|2|3,Win,Joe Allen,1,1,0,0 ,,,,,,David Hardy,0,0,1,0 ,,,,,,Jude Murray,1,0,1,0 ,,,,,,Corey Kirk,1,1,0,0 ,,,,,,Spencer Duncan,0,0,0,1 2015/12/10,13:00:00,Little Park,Essendon Eagles,,,,,,, ,,,Carlton Kangaroos,,,,,,, 2016/05/05,12:00:00,Big Stadium,Southbank Sharks,,,,,,, ,,,Carlton Kangaroos,,,,,,, \ No newline at end of file