Plugin Directory

Changeset 3130087


Ignore:
Timestamp:
08/02/2024 02:20:09 PM (19 months ago)
Author:
mtreherne
Message:

Release of Version 3.16

Location:
eh-gms-feed
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • eh-gms-feed/tags/3.16/eh-gms-feed.php

    r3073918 r3130087  
    44 * Plugin URI: https://wordpress.org/plugins/eh-gms-feed/
    55 * Description: Show fixtures, results and tables from England Hockey GMS
    6  * Version: 3.15
     6 * Version: 3.16
    77 * Author: Matthew Treherne
    88 * Author URI: https://profiles.wordpress.org/mtreherne
  • eh-gms-feed/tags/3.16/includes/coreAPI.php

    r3073918 r3130087  
    88    protected $settings;
    99
    10     private $filter_match, $table_name, $fixture_data, $display_name, $club_link, $team_link, $comp_link, $team_comps, $comp_name, $expiry, $customteam;
     10    private $filter_match, $table_name, $fixture_data, $display_name, $club_link, $team_link, $comp_link, $team_comps, $comp_name, $expiry, $customteam, $seasons;
    1111
    1212    public $valid_show = ['league','results','fixtures','teams','fixture'];
     
    1515
    1616    protected $api = [
     17        'seasons' => ['transient' => 'SEASONS', 'keys' => [], 'error_bag' => 'season', 'expiry' => 'static'],
    1718        'table' => ['transient' => 'COMPETITION LEAGUE', 'keys' => ['competitions'], 'error_bag' => null, 'expiry' => 'default'],
    1819        'fixturesandresults' => ['transient' => 'TEAM', 'keys' => ['teams'], 'error_bag' => null, 'expiry' => 'default'],
     
    158159        $comp_count = count($this->team_comps);
    159160        $html = '<div'.(($comp_count == 0) ? ' style="display: none" ': '').'><label><span class="gms-nomobile">Competition </span><select name="comp_id"><option value="">- All Competitions -</option>';
    160         foreach ($this->team_comps as $key => $competition) $html .= '<option value="'.$key.'"'.(($this->is_competition() && $this->atts_show['comp_id'] == $key) || ($comp_count == 1) ? ' selected' : '').'>'.esc_html($competition['name']).'</option>';
     161        foreach ($this->team_comps as $key => $competition) $html .= '<option value="'.$key.'"'.(($this->is_competition() && $this->atts_show['comp_id'] == $key) || ($comp_count == 1) ? ' selected' : '').'>'.esc_html($competition['fullName']).'</option>';
    161162        if ($this->is_competition() && !array_key_exists($this->atts_show['comp_id'], $this->team_comps)) {
    162             $html .= '<option value="'.$this->atts_show['comp_id'].'" selected>Previous Season</option>';
     163            $html .= '<option value="'.$this->atts_show['comp_id'].'" selected>Previous/Next Season</option>';
    163164        }
    164165        $html .= '</select></label></div>';
     
    421422
    422423    private function process_table ($data, $custom=false) {
    423         $html = ''; $link = $this->comp_link;
     424        $html = ''; $link = $this->comp_link; $single = count($data) == 1;
    424425        $league_data = ['Team' => 'teamName', 'P<span class="gms-nomobile">layed</span>' => 'gamesPlayed', 'W<span class="gms-nomobile">on</span>' => 'gamesWon', 'D<span class="gms-nomobile">rawn</span>' => 'gamesDrawn', 'L<span class="gms-nomobile">ost</span>' => 'gamesLost', 'For' => 'goalsFor', 'Against' => 'goalsAgainst', 'GD' => 'goalsDifference', '<span class="gms-mobile">Pts</span><span class="gms-nomobile">Points</span>' => 'totalPoints'];
    425426        if ($custom) { $league_data['PPG'] = 'PPG'; $league_data['Form'] = 'form'; }
    426427        if ($custom && $this->show_list) $html .= '<div class="gms-list">';
    427428        else {
    428             $html .= '<table class="gms-table gms-table-'.$this->display_name.($custom ? ' gms-table-custom' : '').'"><thead><tr><th></th>';
     429            $html .= '<table class="gms-table gms-table-'.$this->display_name.($custom ? ' gms-table-custom' : '').'"><thead><tr>'.($single ? '' : '<th></th>');
    429430            foreach ($league_data as $column_title => $field_name) $html .= '<th'.($column_title == 'For' || $column_title == 'Against' ? ' class="gms-nomobile"' : '').'>'.$column_title.'</th>';
    430431            $html .= '</tr></thead><tbody>';
     
    441442                if ($this->show_gender && isset($team->gender)) $team->teamName .= ' ('.$team->gender.')';
    442443            }
    443             if ($custom && $this->show_list) $html .= '<div class="gms-card" data-team="'.$team->teamId.'"><div class="gms-boldteam">'.($position+1).'. '.esc_html($team->teamName).'</div><div>Won: '.$team->gamesWon.' | For: '.$team->goalsFor.' | GD: '.$team->goalsDifference.'</div><div>Points: '.$team->totalPoints.' | PPG: '.$team->PPG.'</div><div class="gms-cardform">'.$team->form.'</div></div>';
     444            if ($custom && $this->show_list) $html .= '<div class="gms-card" data-team="'.$team->teamId.'"><div class="gms-boldteam">'.($single ? '' : ($position+1).'. ').esc_html($team->teamName).'</div><div>Won: '.$team->gamesWon.' | For: '.$team->goalsFor.' | GD: '.$team->goalsDifference.'</div><div>Points: '.$team->totalPoints.' | PPG: '.$team->PPG.'</div><div class="gms-cardform">'.$team->form.'</div></div>';
    444445            else {
    445                 $html .= '<tr'.$class.' data-team="'.$team->teamId.'"><td>'.($position+1).'</td>';
     446                $html .= '<tr'.$class.' data-team="'.$team->teamId.'">'.($single ? '' : '<td>'.($position+1).'</td>');
    446447                foreach ($league_data as $field_name) {
    447448                    if ($field_name == 'form') $html .= '<td>'.$team->form.'</td>';
     
    459460            $html .= '</tbody></table>';
    460461        }
    461         $html .= '<div class="gms-footnote">'.($link ? sprintf(esc_html__( '[%5$s%3$s %1$s also found at%4$s %2$s]', 'eh-gms-feed' ), $this->comp_name ? 'for '.$this->comp_name : '', '<a href="'.$link.'" target="_blank">England Hockey Link</a>', '<span class="gms-nomobile">', '</span>', ($custom ? esc_html__('Data') : esc_html__('Table'))) : ($custom ? esc_html__('[League table for selected teams]') : '')).'</div>';
     462        $html .= '<div class="gms-footnote">'.($link ? sprintf(esc_html__( '[%5$s%3$s %1$s also found at%4$s %2$s]', 'eh-gms-feed' ), $this->comp_name ? 'for '.$this->comp_name : '', '<a href="'.$link.'" target="_blank">England Hockey Link</a>', '<span class="gms-nomobile">', '</span>', ($custom ? esc_html__('Data') : esc_html__('Table'))) : ($custom ? ($single ? sprintf(esc_html__('[Summary%1$s of all competitions%2$s for selected team]'),'<span class="gms-nomobile">', '</span>') : esc_html__('[League table for selected teams]')) : '')).'</div>';
    462463        return $html;
    463464    }
     
    466467        $html = '';
    467468        foreach ($data as $competition) {
    468             $this->team_comps[$competition->competitionId] = ['name' => $competition->competitionName];
     469            $this->team_comps[$competition->competitionId] = ['name' => $competition->competitionName, 'fullName' => $this->get_fullcompname($competition)];
    469470            if ($this->is_competition() && $competition->competitionId != $this->atts_show['comp_id']) continue;
    470471            $this->filter_match = false;
     
    581582    }
    582583
     584    private function process_seasons ($data) {
     585        $seasons = [];
     586        foreach ($data as $season) $seasons[$season->id] = $season->description;
     587        arsort($seasons);
     588        return $seasons;
     589    }
     590
     591    protected function get_fullcompname ($competition) {
     592        if (empty($this->seasons)) $this->seasons = $this->get_json('seasons');
     593        $seasonName = $this->seasons[$competition->seasonId] ?? null;
     594        return ($competition->competitionName ?? $competition->name) . ($seasonName ? ' (' . $seasonName . ')' : '');
     595    }
     596
    583597    private function process_compsinfixtures($data) {
    584598        $competitions = [];
    585         // seasonId is available but season (name) is ONLY within fixtures object
    586         foreach ($data as $competition) $competitions[$competition->competitionId] = ['name' => $competition->competitionName, 'slug' => $competition->competitionEntityUrlSlug];
     599        foreach ($data as $competition) $competitions[$competition->competitionId] = ['name' => $competition->competitionName, 'slug' => $competition->competitionEntityUrlSlug, 'fullName' => $this->get_fullcompname($competition)];
    587600        return $competitions;
    588601    }
     
    609622                        $gf += $isHome ? $fixture->homeTeamScoreAsInt : $fixture->awayTeamScoreAsInt;
    610623                        $ga += $isHome ? $fixture->awayTeamScoreAsInt : $fixture->homeTeamScoreAsInt;
    611                         if ($fixture->homeTeamScoreAsInt == $fixture->awayTeamScoreAsInt) { $gd++; $form[] = '<span class="gms-form gms-draw">D</span>'; }
    612                         else if (($isHome && $fixture->homeTeamScoreAsInt > $fixture->awayTeamScoreAsInt) || (!$isHome && $fixture->homeTeamScoreAsInt < $fixture->awayTeamScoreAsInt)) { $gw++; $form[] = '<span class="gms-form gms-win">W</span>'; }
    613                         else { $gl++; $form[] = '<span class="gms-form gms-loss">L</span>'; }
     624                        if ($fixture->homeTeamScoreAsInt == $fixture->awayTeamScoreAsInt) { $gd++; $form[$fixture->fixtureDate] = '<span class="gms-form gms-draw">D</span>'; }
     625                        else if (($isHome && $fixture->homeTeamScoreAsInt > $fixture->awayTeamScoreAsInt) || (!$isHome && $fixture->homeTeamScoreAsInt < $fixture->awayTeamScoreAsInt)) { $gw++; $form[$fixture->fixtureDate] = '<span class="gms-form gms-win">W</span>'; }
     626                        else { $gl++; $form[$fixture->fixtureDate] = '<span class="gms-form gms-loss">L</span>'; }
    614627                    }
    615628                }
     
    634647            $object->totalPoints = $points;
    635648            $object->PPG = number_format($gp ? $points/$gp : 0, 2, '.', '');
     649            ksort($form);
    636650            $object->form = $form;
    637651            return $object;
  • eh-gms-feed/tags/3.16/includes/main-class.php

    r3073918 r3130087  
    9393            }
    9494            if ($show == 'league' && !$this->is_competition() && empty($this->multiple_teams)) {
    95                 $message = sprintf(esc_html__( 'Specific competition is required to show league (select team first).', 'eh-gms-feed' ));
     95                $message = sprintf(esc_html__( 'Team or competition is required to show league table or summary for all competitions.', 'eh-gms-feed' ));
    9696                $this->not_valid .= '<p>'.$message.'</p>';
    9797                $valid = false;
  • eh-gms-feed/tags/3.16/includes/settings.php

    r3066677 r3130087  
    1111
    1212    const OPTION_NAME = 'eh_gms_feed_settings';
    13     public $default_transient_expiry;
     13    public $gms_api_url, $gms_api_key, $default_transient_expiry, $static_transient_expiry, $daily_transient_expiry, $weekly_transient_expiry;
    1414    public $default_css = 'yes';
    1515    public $default_ajax = 'yes';
  • eh-gms-feed/tags/3.16/readme.txt

    r3073918 r3130087  
    33Tags: hockey, GMS
    44Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&[email protected]&currency_code=GBP&item_name=Donation+for+EH+GMS+Feed
    5 Tested up to: 6.5
     5Tested up to: 6.6
    66Requires PHP: 5.3
    7 Stable tag: 3.15
     7Stable tag: 3.16
    88License: GPLv2
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    6262
    6363== Changelog ==
     64
     65= 3.16 =
     66* Fix to sort team form correctly when multiple competitions
     67* Tweaks to custom league / competition summary when only one team
     68* Show season for competitions listed by filter
     69* Fix for compatibility with PHP 8.2
    6470
    6571= 3.15 =
  • eh-gms-feed/trunk/eh-gms-feed.php

    r3073918 r3130087  
    44 * Plugin URI: https://wordpress.org/plugins/eh-gms-feed/
    55 * Description: Show fixtures, results and tables from England Hockey GMS
    6  * Version: 3.15
     6 * Version: 3.16
    77 * Author: Matthew Treherne
    88 * Author URI: https://profiles.wordpress.org/mtreherne
  • eh-gms-feed/trunk/includes/coreAPI.php

    r3073918 r3130087  
    88    protected $settings;
    99
    10     private $filter_match, $table_name, $fixture_data, $display_name, $club_link, $team_link, $comp_link, $team_comps, $comp_name, $expiry, $customteam;
     10    private $filter_match, $table_name, $fixture_data, $display_name, $club_link, $team_link, $comp_link, $team_comps, $comp_name, $expiry, $customteam, $seasons;
    1111
    1212    public $valid_show = ['league','results','fixtures','teams','fixture'];
     
    1515
    1616    protected $api = [
     17        'seasons' => ['transient' => 'SEASONS', 'keys' => [], 'error_bag' => 'season', 'expiry' => 'static'],
    1718        'table' => ['transient' => 'COMPETITION LEAGUE', 'keys' => ['competitions'], 'error_bag' => null, 'expiry' => 'default'],
    1819        'fixturesandresults' => ['transient' => 'TEAM', 'keys' => ['teams'], 'error_bag' => null, 'expiry' => 'default'],
     
    158159        $comp_count = count($this->team_comps);
    159160        $html = '<div'.(($comp_count == 0) ? ' style="display: none" ': '').'><label><span class="gms-nomobile">Competition </span><select name="comp_id"><option value="">- All Competitions -</option>';
    160         foreach ($this->team_comps as $key => $competition) $html .= '<option value="'.$key.'"'.(($this->is_competition() && $this->atts_show['comp_id'] == $key) || ($comp_count == 1) ? ' selected' : '').'>'.esc_html($competition['name']).'</option>';
     161        foreach ($this->team_comps as $key => $competition) $html .= '<option value="'.$key.'"'.(($this->is_competition() && $this->atts_show['comp_id'] == $key) || ($comp_count == 1) ? ' selected' : '').'>'.esc_html($competition['fullName']).'</option>';
    161162        if ($this->is_competition() && !array_key_exists($this->atts_show['comp_id'], $this->team_comps)) {
    162             $html .= '<option value="'.$this->atts_show['comp_id'].'" selected>Previous Season</option>';
     163            $html .= '<option value="'.$this->atts_show['comp_id'].'" selected>Previous/Next Season</option>';
    163164        }
    164165        $html .= '</select></label></div>';
     
    421422
    422423    private function process_table ($data, $custom=false) {
    423         $html = ''; $link = $this->comp_link;
     424        $html = ''; $link = $this->comp_link; $single = count($data) == 1;
    424425        $league_data = ['Team' => 'teamName', 'P<span class="gms-nomobile">layed</span>' => 'gamesPlayed', 'W<span class="gms-nomobile">on</span>' => 'gamesWon', 'D<span class="gms-nomobile">rawn</span>' => 'gamesDrawn', 'L<span class="gms-nomobile">ost</span>' => 'gamesLost', 'For' => 'goalsFor', 'Against' => 'goalsAgainst', 'GD' => 'goalsDifference', '<span class="gms-mobile">Pts</span><span class="gms-nomobile">Points</span>' => 'totalPoints'];
    425426        if ($custom) { $league_data['PPG'] = 'PPG'; $league_data['Form'] = 'form'; }
    426427        if ($custom && $this->show_list) $html .= '<div class="gms-list">';
    427428        else {
    428             $html .= '<table class="gms-table gms-table-'.$this->display_name.($custom ? ' gms-table-custom' : '').'"><thead><tr><th></th>';
     429            $html .= '<table class="gms-table gms-table-'.$this->display_name.($custom ? ' gms-table-custom' : '').'"><thead><tr>'.($single ? '' : '<th></th>');
    429430            foreach ($league_data as $column_title => $field_name) $html .= '<th'.($column_title == 'For' || $column_title == 'Against' ? ' class="gms-nomobile"' : '').'>'.$column_title.'</th>';
    430431            $html .= '</tr></thead><tbody>';
     
    441442                if ($this->show_gender && isset($team->gender)) $team->teamName .= ' ('.$team->gender.')';
    442443            }
    443             if ($custom && $this->show_list) $html .= '<div class="gms-card" data-team="'.$team->teamId.'"><div class="gms-boldteam">'.($position+1).'. '.esc_html($team->teamName).'</div><div>Won: '.$team->gamesWon.' | For: '.$team->goalsFor.' | GD: '.$team->goalsDifference.'</div><div>Points: '.$team->totalPoints.' | PPG: '.$team->PPG.'</div><div class="gms-cardform">'.$team->form.'</div></div>';
     444            if ($custom && $this->show_list) $html .= '<div class="gms-card" data-team="'.$team->teamId.'"><div class="gms-boldteam">'.($single ? '' : ($position+1).'. ').esc_html($team->teamName).'</div><div>Won: '.$team->gamesWon.' | For: '.$team->goalsFor.' | GD: '.$team->goalsDifference.'</div><div>Points: '.$team->totalPoints.' | PPG: '.$team->PPG.'</div><div class="gms-cardform">'.$team->form.'</div></div>';
    444445            else {
    445                 $html .= '<tr'.$class.' data-team="'.$team->teamId.'"><td>'.($position+1).'</td>';
     446                $html .= '<tr'.$class.' data-team="'.$team->teamId.'">'.($single ? '' : '<td>'.($position+1).'</td>');
    446447                foreach ($league_data as $field_name) {
    447448                    if ($field_name == 'form') $html .= '<td>'.$team->form.'</td>';
     
    459460            $html .= '</tbody></table>';
    460461        }
    461         $html .= '<div class="gms-footnote">'.($link ? sprintf(esc_html__( '[%5$s%3$s %1$s also found at%4$s %2$s]', 'eh-gms-feed' ), $this->comp_name ? 'for '.$this->comp_name : '', '<a href="'.$link.'" target="_blank">England Hockey Link</a>', '<span class="gms-nomobile">', '</span>', ($custom ? esc_html__('Data') : esc_html__('Table'))) : ($custom ? esc_html__('[League table for selected teams]') : '')).'</div>';
     462        $html .= '<div class="gms-footnote">'.($link ? sprintf(esc_html__( '[%5$s%3$s %1$s also found at%4$s %2$s]', 'eh-gms-feed' ), $this->comp_name ? 'for '.$this->comp_name : '', '<a href="'.$link.'" target="_blank">England Hockey Link</a>', '<span class="gms-nomobile">', '</span>', ($custom ? esc_html__('Data') : esc_html__('Table'))) : ($custom ? ($single ? sprintf(esc_html__('[Summary%1$s of all competitions%2$s for selected team]'),'<span class="gms-nomobile">', '</span>') : esc_html__('[League table for selected teams]')) : '')).'</div>';
    462463        return $html;
    463464    }
     
    466467        $html = '';
    467468        foreach ($data as $competition) {
    468             $this->team_comps[$competition->competitionId] = ['name' => $competition->competitionName];
     469            $this->team_comps[$competition->competitionId] = ['name' => $competition->competitionName, 'fullName' => $this->get_fullcompname($competition)];
    469470            if ($this->is_competition() && $competition->competitionId != $this->atts_show['comp_id']) continue;
    470471            $this->filter_match = false;
     
    581582    }
    582583
     584    private function process_seasons ($data) {
     585        $seasons = [];
     586        foreach ($data as $season) $seasons[$season->id] = $season->description;
     587        arsort($seasons);
     588        return $seasons;
     589    }
     590
     591    protected function get_fullcompname ($competition) {
     592        if (empty($this->seasons)) $this->seasons = $this->get_json('seasons');
     593        $seasonName = $this->seasons[$competition->seasonId] ?? null;
     594        return ($competition->competitionName ?? $competition->name) . ($seasonName ? ' (' . $seasonName . ')' : '');
     595    }
     596
    583597    private function process_compsinfixtures($data) {
    584598        $competitions = [];
    585         // seasonId is available but season (name) is ONLY within fixtures object
    586         foreach ($data as $competition) $competitions[$competition->competitionId] = ['name' => $competition->competitionName, 'slug' => $competition->competitionEntityUrlSlug];
     599        foreach ($data as $competition) $competitions[$competition->competitionId] = ['name' => $competition->competitionName, 'slug' => $competition->competitionEntityUrlSlug, 'fullName' => $this->get_fullcompname($competition)];
    587600        return $competitions;
    588601    }
     
    609622                        $gf += $isHome ? $fixture->homeTeamScoreAsInt : $fixture->awayTeamScoreAsInt;
    610623                        $ga += $isHome ? $fixture->awayTeamScoreAsInt : $fixture->homeTeamScoreAsInt;
    611                         if ($fixture->homeTeamScoreAsInt == $fixture->awayTeamScoreAsInt) { $gd++; $form[] = '<span class="gms-form gms-draw">D</span>'; }
    612                         else if (($isHome && $fixture->homeTeamScoreAsInt > $fixture->awayTeamScoreAsInt) || (!$isHome && $fixture->homeTeamScoreAsInt < $fixture->awayTeamScoreAsInt)) { $gw++; $form[] = '<span class="gms-form gms-win">W</span>'; }
    613                         else { $gl++; $form[] = '<span class="gms-form gms-loss">L</span>'; }
     624                        if ($fixture->homeTeamScoreAsInt == $fixture->awayTeamScoreAsInt) { $gd++; $form[$fixture->fixtureDate] = '<span class="gms-form gms-draw">D</span>'; }
     625                        else if (($isHome && $fixture->homeTeamScoreAsInt > $fixture->awayTeamScoreAsInt) || (!$isHome && $fixture->homeTeamScoreAsInt < $fixture->awayTeamScoreAsInt)) { $gw++; $form[$fixture->fixtureDate] = '<span class="gms-form gms-win">W</span>'; }
     626                        else { $gl++; $form[$fixture->fixtureDate] = '<span class="gms-form gms-loss">L</span>'; }
    614627                    }
    615628                }
     
    634647            $object->totalPoints = $points;
    635648            $object->PPG = number_format($gp ? $points/$gp : 0, 2, '.', '');
     649            ksort($form);
    636650            $object->form = $form;
    637651            return $object;
  • eh-gms-feed/trunk/includes/main-class.php

    r3073918 r3130087  
    9393            }
    9494            if ($show == 'league' && !$this->is_competition() && empty($this->multiple_teams)) {
    95                 $message = sprintf(esc_html__( 'Specific competition is required to show league (select team first).', 'eh-gms-feed' ));
     95                $message = sprintf(esc_html__( 'Team or competition is required to show league table or summary for all competitions.', 'eh-gms-feed' ));
    9696                $this->not_valid .= '<p>'.$message.'</p>';
    9797                $valid = false;
  • eh-gms-feed/trunk/includes/settings.php

    r3066677 r3130087  
    1111
    1212    const OPTION_NAME = 'eh_gms_feed_settings';
    13     public $default_transient_expiry;
     13    public $gms_api_url, $gms_api_key, $default_transient_expiry, $static_transient_expiry, $daily_transient_expiry, $weekly_transient_expiry;
    1414    public $default_css = 'yes';
    1515    public $default_ajax = 'yes';
  • eh-gms-feed/trunk/readme.txt

    r3073918 r3130087  
    33Tags: hockey, GMS
    44Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&[email protected]&currency_code=GBP&item_name=Donation+for+EH+GMS+Feed
    5 Tested up to: 6.5
     5Tested up to: 6.6
    66Requires PHP: 5.3
    7 Stable tag: 3.15
     7Stable tag: 3.16
    88License: GPLv2
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    6262
    6363== Changelog ==
     64
     65= 3.16 =
     66* Fix to sort team form correctly when multiple competitions
     67* Tweaks to custom league / competition summary when only one team
     68* Show season for competitions listed by filter
     69* Fix for compatibility with PHP 8.2
    6470
    6571= 3.15 =
Note: See TracChangeset for help on using the changeset viewer.