Merge pull request #90 from cmanon/feature/activiteslist-block

Feature/activiteslist block
This commit is contained in:
Justin Foell
2021-03-26 14:30:43 -05:00
committed by GitHub
12 changed files with 194 additions and 17 deletions
+5 -2
View File
@@ -4,7 +4,7 @@ Contributors: cmanon, jrfoell, lancewillett, dlintott, sebastianerb
Tags: strava, activity, bicycle, cycling, biking, running, run, swimming, swim, paddle, kayak, gps, shortcode, widget, plugin, block, blocks
Requires at least: 4.6
Tested up to: 5.7
Stable tag: 2.7.0
Stable tag: 2.8.0
Requires PHP: 5.3
License: GPLv2 or later
@@ -32,6 +32,8 @@ Strava Route - embed a route in any page or post. Shows a summary of the route p
Paste in the full route URL from Strava, such as https://www.strava.com/routes/2326567 and click "Embed." A preview map will be shown in the editor, similar to what will be displayed on the front-end. In the side-panel you can selection options to show the image only (without the details table), display markers at the start & finish points, and override the system of measure from your default selection under Settings -> Strava.
Strava Activities List - Shows your most recent activities in a bulleted list.
= Shortcodes =
[activity id=NUMBER] - add to any page or post. Shows a summary of the activity plus a map if a google maps key has been added.
@@ -119,9 +121,10 @@ On the WP-Strava settings page you cannot currently remove and add another athle
== Changelog ==
= Unreleased =
= 2.8.0 =
Revised `block.json` based on feedback from https://wordpress.org/plugins/developers/block-plugin-validator/
Add PHPCompatibility checks to coding standards (and fixes from recommendations)
Add Activities List Block
= 2.7.0 =
+1
View File
@@ -202,6 +202,7 @@ class WPStrava {
static $blocks = array(
'WPStrava_Blocks_Activity',
'WPStrava_Blocks_Route',
'WPStrava_Blocks_ActivitiesList',
);
// automatically load dependencies and version
@@ -1,6 +1,6 @@
<?php
/**
* Activities List.
* Activities List Renderer.
* @package WPStrava
*/
@@ -10,9 +10,18 @@
* @author Justin Foell <justin@foell.org>
* @since 2.3.0
*/
class WPStrava_ActivitiesList {
public static function get_activities_html( $args ) {
if ( isset( $args['athlete_token'] ) ) {
class WPStrava_ActivitiesListRenderer {
/**
* Get the HTML for an Activities List.
*
* @param array $atts
* @return string HTML for an route.
* @author Justin Foell <justin@foell.org>
* @since 2.8.0
*/
public function get_html( $atts ) {
if ( isset( $atts['athlete_token'] ) ) {
// Translators: Message shown when using deprecated athlete_token parameter.
return __( 'The <code>athlete_token</code> parameter is deprecated as of WP-Strava version 2 and should be replaced with <code>client_id</code>.', 'wp-strava' );
}
@@ -26,14 +35,14 @@ class WPStrava_ActivitiesList {
'date_end' => '',
);
$args = wp_parse_args( $args, $defaults );
$atts = wp_parse_args( $atts, $defaults );
$som = WPStrava_SOM::get_som( $args['som'] );
$som = WPStrava_SOM::get_som( $atts['som'] );
$strava_activity = WPStrava::get_instance()->activity;
$activities = array();
try {
$activities = $strava_activity->get_activities( $args );
$activities = $strava_activity->get_activities( $atts );
} catch ( WPStrava_Exception $e ) {
return $e->to_html();
}
@@ -51,11 +60,11 @@ class WPStrava_ActivitiesList {
// Translators: Shows something like "On <date> <[went 10 miles] [during 2 hours] [climbing 100 feet]>."
__( 'On %1$s %2$s', 'wp-strava' ),
date_i18n( get_option( 'date_format' ), $unixtime ),
self::get_activity_time( $unixtime )
$this->get_activity_time( $unixtime )
);
}
if ( is_numeric( $args['strava_club_id'] ) ) {
if ( is_numeric( $atts['strava_club_id'] ) ) {
$name = $activity->athlete->firstname . ' ' . $activity->athlete->lastname;
$response .= empty( $activity->athlete->id ) ?
" {$name}" :
@@ -86,7 +95,7 @@ class WPStrava_ActivitiesList {
* @author Justin Foell <justin@foell.org>
* @since 1.7.1
*/
public static function get_activity_time( $unixtime ) {
private function get_activity_time( $unixtime ) {
if ( WPStrava::get_instance()->settings->hide_time ) {
return '';
}
+3 -1
View File
@@ -44,7 +44,9 @@ class WPStrava_ActivitiesListShortcode {
*/
public function handler( $atts ) {
$this->add_script = true;
return WPStrava_ActivitiesList::get_activities_html( $atts );
$renderer = new WPStrava_ActivitiesListRenderer();
return $renderer->get_html( $atts );
}
/**
+4 -1
View File
@@ -42,7 +42,10 @@ class WPStrava_ActivitiesListWidget extends WP_Widget {
if ( $title ) {
echo $args['before_title'] . $title . $args['after_title'];
}
echo WPStrava_ActivitiesList::get_activities_html( $activities_args );
$renderer = new WPStrava_ActivitiesListRenderer();
echo $renderer->get_html( $activities_args );
echo $args['after_widget'];
// phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped
}
+74
View File
@@ -0,0 +1,74 @@
<?php
/*
* ActivitiesList block.
*/
class WPStrava_Blocks_ActivitiesList implements WPStrava_Blocks_Interface {
/**
* Whether or not to enqueue styles (if shortcode is present).
*
* @var boolean
* @author Justin Foell <justin@foell.org>
* @since 2.5.0
*/
private $add_script = false;
/**
* Register the wp-strava/activitieslist block.
*
* @author Justin Foell <justin@foell.org>
* @since 2.2.0
*/
public function register_block() {
register_block_type(
'wp-strava/activitieslist',
array(
'style' => 'wp-strava-block',
'editor_style' => 'wp-strava-block-editor',
'editor_script' => 'wp-strava-block',
'render_callback' => array( $this, 'render_block' ),
'attributes' => array(
'som' => array(
'type' => 'string',
'default' => null,
),
),
)
);
add_action( 'wp_footer', array( $this, 'print_scripts' ) );
}
/**
* Render for this block.
*
* @param array $attributes JSON attributes saved in the HTML comment for this block.
* @param string $content The content from JS save() for this block.
* @return string HTML for this block.
* @author Justin Foell <justin@foell.org>
* @since 2.2.0
*/
public function render_block( $attributes, $content ) {
$this->add_script = true;
// Transform from block attributes to shortcode standard.
$attributes = array(
'som' => ! empty( $attributes['som'] ) ? $attributes['som'] : null,
);
$renderer = new WPStrava_ActivitiesListRenderer();
return $renderer->get_html( $attributes );
}
/**
* Enqueue style if block is being used.
*
* @author Justin Foell <justin@foell.org>
* @since 2.5.0
*/
public function print_scripts() {
if ( $this->add_script ) {
wp_enqueue_style( 'wp-strava-style' );
}
}
}
+6 -1
View File
@@ -1,5 +1,10 @@
<?php
/*
/**
* Route Renderer.
* @package WPStrava
*/
/**
* RouteRenderer has all the markup for the Route Block & Shortcode.
*/
class WPStrava_RouteRenderer {
+18
View File
@@ -0,0 +1,18 @@
{
"name": "wp-strava/activitieslist",
"title": "Strava Activities List",
"category": "embed",
"icon": "editor-ul",
"description": "List of Strava Activities",
"keywords": [ "activity", "ride" ],
"textdomain": "wp-strava",
"attributes": {
"som": {
"type": "string",
"default": null
}
},
"editorScript": "file:../../../build/index.js",
"editorStyle": "file:../../../build/editor.css",
"style": "file:../../../build/style.css"
}
+52
View File
@@ -0,0 +1,52 @@
/* global wp, wpStrava */
import SOMOverride from '../components/som-override';
const { __ } = wp.i18n;
const { Component } = wp.element;
const { InspectorControls } = wp.editor;
const { PanelBody, ToggleControl, ServerSideRender } = wp.components;
class Edit extends Component {
constructor() {
super( ...arguments );
this.overrideSOM = this.overrideSOM.bind( this );
this.state = {
som: this.props.attributes.som,
};
}
overrideSOM( newSOM ) {
this.setState( { som: newSOM } );
this.props.setAttributes( { som: newSOM } );
}
render() {
const {
som
} = this.state;
return (
<>
<ServerSideRender
block="wp-strava/activitieslist"
attributes={ {
som: som,
} }
/>
<InspectorControls>
<PanelBody
title={ __( 'Display Options', 'wp-strava' ) }
>
<SOMOverride
onChange={ this.overrideSOM }
/>
</PanelBody>
</InspectorControls>
</>
);
}
}
export default Edit;
+9
View File
@@ -0,0 +1,9 @@
/* global wp, wpStrava */
import { registerBlockType } from '@wordpress/blocks';
import edit from './edit';
import metadata from './block.json';
metadata.edit = edit;
metadata.save = () => null;
registerBlockType( metadata.name, metadata );
+1
View File
@@ -1,2 +1,3 @@
import './blocks/activity';
import './blocks/route';
import './blocks/activitieslist';
+2 -2
View File
@@ -3,7 +3,7 @@
* Plugin Name: WP Strava
* Plugin URI: https://wordpress.org/plugins/wp-strava/
* Description: Show your strava.com activity on your WordPress site. Some Icons are Copyright © Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 license.
* Version: 2.7.0
* Version: 2.8.0
* Author: Carlos Santa Cruz, Justin Foell, Lance Willett, Daniel Lintott, Sebastian Erb
* License: GPL2
* Text Domain: wp-strava
@@ -27,7 +27,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
define( 'WPSTRAVA_PLUGIN_VERSION', '2.7.0' );
define( 'WPSTRAVA_PLUGIN_VERSION', '2.8.0' );
define( 'WPSTRAVA_PLUGIN_FILE', __FILE__ );
define( 'WPSTRAVA_PLUGIN_DIR', trailingslashit( dirname( __FILE__ ) ) );
define( 'WPSTRAVA_PLUGIN_URL', plugins_url( '/', __FILE__ ) );