Merge branch 'feature-event-specs'
This commit is contained in:
@@ -143,7 +143,7 @@ class SP_Admin_Sports {
|
||||
update_post_meta( $id, 'sp_equation', sp_array_value( $result, 'equation', null ) );
|
||||
}
|
||||
|
||||
// Make sure statistics and metrics have greater menu order than performance
|
||||
// Make sure statistics, metrics and specs have greater menu order than performance
|
||||
$i = 0;
|
||||
|
||||
// Performance
|
||||
@@ -192,6 +192,17 @@ class SP_Admin_Sports {
|
||||
$id = self::insert_preset_post( $post, $i + $index );
|
||||
$i ++;
|
||||
}
|
||||
|
||||
// Event Specs
|
||||
$post_type = 'sp_spec';
|
||||
$specs = sp_array_value( $preset, 'specs', array() );
|
||||
self::delete_preset_posts( $post_type );
|
||||
foreach ( $specs as $index => $spec ) {
|
||||
$post = self::get_post_array( $spec, $post_type );
|
||||
if ( empty( $post ) ) continue;
|
||||
$id = self::insert_preset_post( $post, $i + $index );
|
||||
$i ++;
|
||||
}
|
||||
|
||||
// Statistics
|
||||
$post_type = 'sp_statistic';
|
||||
|
||||
70
includes/admin/post-types/class-sp-admin-cpt-spec.php
Normal file
70
includes/admin/post-types/class-sp-admin-cpt-spec.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* Admin functions for the columns post type
|
||||
*
|
||||
* @author ThemeBoy
|
||||
* @category Admin
|
||||
* @package SportsPress/Admin/Post_Types
|
||||
* @version 0.9
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
||||
|
||||
if ( ! class_exists( 'SP_Admin_CPT' ) )
|
||||
include( 'class-sp-admin-cpt.php' );
|
||||
|
||||
if ( ! class_exists( 'SP_Admin_CPT_Spec' ) ) :
|
||||
|
||||
/**
|
||||
* SP_Admin_CPT_Spec Class
|
||||
*/
|
||||
class SP_Admin_CPT_Spec extends SP_Admin_CPT {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->type = 'sp_spec';
|
||||
|
||||
// Admin Columns
|
||||
add_filter( 'manage_edit-sp_spec_columns', array( $this, 'edit_columns' ) );
|
||||
add_action( 'manage_sp_spec_posts_custom_column', array( $this, 'custom_columns' ), 2, 2 );
|
||||
|
||||
// Call SP_Admin_CPT constructor
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the columns shown in admin.
|
||||
*/
|
||||
public function edit_columns( $existing_columns ) {
|
||||
$columns = array(
|
||||
'cb' => '<input type="checkbox" />',
|
||||
'title' => __( 'Label', 'sportspress' ),
|
||||
'sp_key' => __( 'Variable', 'sportspress' ),
|
||||
'sp_description' => __( 'Description', 'sportspress' ),
|
||||
);
|
||||
return apply_filters( 'sportspress_spec_admin_columns', $columns );
|
||||
}
|
||||
|
||||
/**
|
||||
* Define our custom columns shown in admin.
|
||||
* @param string $column
|
||||
*/
|
||||
public function custom_columns( $column, $post_id ) {
|
||||
switch ( $column ):
|
||||
case 'sp_key':
|
||||
global $post;
|
||||
echo $post->post_name;
|
||||
break;
|
||||
case 'sp_description':
|
||||
global $post;
|
||||
echo '<span class="description">' . $post->post_excerpt . '</span>';
|
||||
break;
|
||||
endswitch;
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
||||
|
||||
return new SP_Admin_CPT_Spec();
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
* Player Metrics
|
||||
*
|
||||
* @author ThemeBoy
|
||||
* @category Admin
|
||||
* @package SportsPress/Admin/Meta_Boxes
|
||||
* @version 1.9.7
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
||||
|
||||
/**
|
||||
* SP_Meta_Box_Event_Specs
|
||||
*/
|
||||
class SP_Meta_Box_Event_Specs {
|
||||
|
||||
/**
|
||||
* Output the metabox
|
||||
*/
|
||||
public static function output( $post ) {
|
||||
|
||||
$metrics = get_post_meta( $post->ID, 'sp_specs', true );
|
||||
|
||||
$args = array(
|
||||
'post_type' => 'sp_spec',
|
||||
'numberposts' => -1,
|
||||
'posts_per_page' => -1,
|
||||
'orderby' => 'menu_order',
|
||||
'order' => 'ASC',
|
||||
);
|
||||
|
||||
$vars = get_posts( $args );
|
||||
|
||||
if ( $vars ):
|
||||
foreach ( $vars as $var ):
|
||||
?>
|
||||
<p><strong><?php echo $var->post_title; ?></strong></p>
|
||||
<p><input type="text" name="sp_specs[<?php echo $var->post_name; ?>]" value="<?php echo esc_attr( sp_array_value( $metrics, $var->post_name, '' ) ); ?>" /></p>
|
||||
<?php
|
||||
endforeach;
|
||||
else:
|
||||
sp_post_adder( 'sp_spec', __( 'Add New', 'sportspress' ) );
|
||||
endif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save meta box data
|
||||
*/
|
||||
public static function save( $post_id, $post ) {
|
||||
update_post_meta( $post_id, 'sp_specs', sp_array_value( $_POST, 'sp_specs', array() ) );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Spec Details
|
||||
*
|
||||
* @author ThemeBoy
|
||||
* @category Admin
|
||||
* @package SportsPress/Admin/Meta_Boxes
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
||||
|
||||
if ( ! class_exists( 'SP_Meta_Box_Config' ) )
|
||||
include( 'class-sp-meta-box-config.php' );
|
||||
|
||||
/**
|
||||
* SP_Meta_Box_Spec_Details
|
||||
*/
|
||||
class SP_Meta_Box_Spec_Details extends SP_Meta_Box_Config {
|
||||
|
||||
/**
|
||||
* Output the metabox
|
||||
*/
|
||||
public static function output( $post ) {
|
||||
wp_nonce_field( 'sportspress_save_data', 'sportspress_meta_nonce' );
|
||||
$visible = get_post_meta( $post->ID, 'sp_visible', true );
|
||||
if ( '' === $visible ) $visible = 1;
|
||||
?>
|
||||
<p><strong><?php _e( 'Variable', 'sportspress' ); ?></strong></p>
|
||||
<p>
|
||||
<input name="sp_default_key" type="hidden" id="sp_default_key" value="<?php echo $post->post_name; ?>">
|
||||
<input name="sp_key" type="text" id="sp_key" value="<?php echo $post->post_name; ?>">
|
||||
</p>
|
||||
<p>
|
||||
<strong><?php _e( 'Visible', 'sportspress' ); ?></strong>
|
||||
<i class="dashicons dashicons-editor-help sp-desc-tip" title="<?php _e( 'Display in event pages?', 'sportspress' ); ?>"></i>
|
||||
</p>
|
||||
<ul class="sp-visible-selector">
|
||||
<li>
|
||||
<label class="selectit">
|
||||
<input name="sp_visible" id="sp_visible_yes" type="radio" value="1" <?php checked( $visible ); ?>>
|
||||
<?php _e( 'Yes', 'sportspress' ); ?>
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label class="selectit">
|
||||
<input name="sp_visible" id="sp_visible_no" type="radio" value="0" <?php checked( ! $visible ); ?>>
|
||||
<?php _e( 'No', 'sportspress' ); ?>
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Save meta box data
|
||||
*/
|
||||
public static function save( $post_id, $post ) {
|
||||
self::delete_duplicate( $_POST );
|
||||
update_post_meta( $post_id, 'sp_visible', sp_array_value( $_POST, 'sp_visible', 1 ) );
|
||||
}
|
||||
}
|
||||
@@ -295,7 +295,7 @@ $columns = get_option( 'sportspress_player_columns', 'auto' );
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</table>
|
||||
<table class="form-table">
|
||||
<tbody>
|
||||
<?php
|
||||
|
||||
@@ -707,4 +707,24 @@ class SP_Event extends SP_Custom_Post{
|
||||
public function sort_timeline( $a, $b ) {
|
||||
return $a['time'] - $b['time'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns formatted event specs
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function specs( $neg = null ) {
|
||||
$specs = (array)get_post_meta( $this->ID, 'sp_specs', true );
|
||||
$spec_labels = (array)sp_get_var_labels( 'sp_spec', $neg, false );
|
||||
$data = array();
|
||||
|
||||
foreach ( $spec_labels as $key => $value ):
|
||||
$spec = sp_array_value( $specs, $key, null );
|
||||
if ( $spec == null )
|
||||
continue;
|
||||
$data[ $value ] = sp_array_value( $specs, $key, ' ' );
|
||||
endforeach;
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,7 +342,7 @@ class SP_Post_types {
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
register_post_type( 'sp_performance',
|
||||
apply_filters( 'sportspress_register_post_type_performance',
|
||||
array(
|
||||
|
||||
@@ -1295,6 +1295,9 @@ if ( !function_exists( 'sp_solve' ) ) {
|
||||
// Add a hook to alter $equation
|
||||
$equation = apply_filters( 'sportspress_equation_alter', $equation, $vars );
|
||||
|
||||
// Add a hook to alter $equation
|
||||
$equation = apply_filters( 'sportspress_equation_alter', $equation, $vars );
|
||||
|
||||
if ( $equation == null )
|
||||
return $default;
|
||||
|
||||
|
||||
@@ -257,7 +257,7 @@ function sportspress_post_updated_messages( $messages ) {
|
||||
|
||||
global $typenow, $post;
|
||||
|
||||
if ( in_array( $typenow, array( 'sp_result', 'sp_outcome', 'sp_column', 'sp_metric', 'sp_performance' ) ) ):
|
||||
if ( in_array( $typenow, array( 'sp_result', 'sp_outcome', 'sp_column', 'sp_metric', 'sp_spec', 'sp_performance' ) ) ):
|
||||
$obj = get_post_type_object( $typenow );
|
||||
|
||||
for ( $i = 0; $i <= 10; $i++ ):
|
||||
|
||||
303
modules/sportspress-event-specs.php
Normal file
303
modules/sportspress-event-specs.php
Normal file
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
/*
|
||||
Plugin Name: SportsPress Event Specs
|
||||
Plugin URI: http://themeboy.com/
|
||||
Description: Add event specs/stats to SportsPress.
|
||||
Author: ThemeBoy
|
||||
Author URI: http://themeboy.com/
|
||||
Version: 2.5.10
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
if ( ! class_exists( 'SportsPress_Event_Specs' ) ) :
|
||||
|
||||
/**
|
||||
* Main SportsPress Event Specs Class
|
||||
*
|
||||
* @class SportsPress_Event_Specs
|
||||
* @version 2.5.10
|
||||
*/
|
||||
class SportsPress_Event_Specs {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
// Define constants
|
||||
$this->define_constants();
|
||||
|
||||
// Actions
|
||||
add_action( 'init', array( $this, 'register_post_type' ) );
|
||||
add_action( 'sportspress_config_page', array( $this, 'sp_specs_config' ), 9 );
|
||||
add_action( 'sportspress_include_post_type_handlers', array( $this, 'include_post_type_handler' ) );
|
||||
add_action( 'sportspress_event_list_head_row', array( $this, 'event_list_head_row' ), 11 );
|
||||
add_action( 'sportspress_event_list_row', array( $this, 'event_list_row' ), 11, 2 );
|
||||
|
||||
// Filters
|
||||
add_filter( 'sportspress_meta_boxes', array( $this, 'add_meta_boxes' ) );
|
||||
add_filter( 'sportspress_screen_ids', array( $this, 'screen_ids' ) );
|
||||
add_filter( 'sportspress_config_types', array( $this, 'add_post_type' ) );
|
||||
add_filter( 'sportspress_event_details', array( $this, 'event_details' ), 10, 2 );
|
||||
add_filter( 'sportspress_calendar_columns', array( $this, 'calendar_columns' ) );
|
||||
add_filter( 'sportspress_equation_options', array( $this, 'add_options' ) );
|
||||
add_filter( 'sportspress_equation_alter', array( $this, 'alter_equation' ), 11, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Define constants.
|
||||
*/
|
||||
private function define_constants() {
|
||||
if ( !defined( 'SP_EVENT_SPECS_VERSION' ) )
|
||||
define( 'SP_EVENT_SPECS_VERSION', '2.5.10' );
|
||||
|
||||
if ( !defined( 'SP_EVENT_SPECS_URL' ) )
|
||||
define( 'SP_EVENT_SPECS_URL', plugin_dir_url( __FILE__ ) );
|
||||
|
||||
if ( !defined( 'SP_EVENT_SPECS_DIR' ) )
|
||||
define( 'SP_EVENT_SPECS_DIR', plugin_dir_path( __FILE__ ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register event specs post type
|
||||
*/
|
||||
public static function register_post_type() {
|
||||
register_post_type( 'sp_spec',
|
||||
apply_filters( 'sportspress_register_post_type_spec',
|
||||
array(
|
||||
'labels' => array(
|
||||
'name' => __( 'Event Specs', 'sportspress' ),
|
||||
'singular_name' => __( 'Event Spec', 'sportspress' ),
|
||||
'add_new_item' => __( 'Add New Event Spec', 'sportspress' ),
|
||||
'edit_item' => __( 'Edit Event Spec', 'sportspress' ),
|
||||
'new_item' => __( 'New', 'sportspress' ),
|
||||
'view_item' => __( 'View', 'sportspress' ),
|
||||
'search_items' => __( 'Search', 'sportspress' ),
|
||||
'not_found' => __( 'No results found.', 'sportspress' ),
|
||||
'not_found_in_trash' => __( 'No results found.', 'sportspress' ),
|
||||
),
|
||||
'public' => false,
|
||||
'show_ui' => true,
|
||||
'capability_type' => 'sp_config',
|
||||
'map_meta_cap' => true,
|
||||
'publicly_queryable' => false,
|
||||
'exclude_from_search' => true,
|
||||
'hierarchical' => false,
|
||||
'supports' => array( 'title', 'page-attributes', 'excerpt' ),
|
||||
'has_archive' => false,
|
||||
'show_in_nav_menus' => false,
|
||||
'can_export' => false,
|
||||
'show_in_menu' => false,
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add screen ids.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function screen_ids( $ids ) {
|
||||
return array_merge( $ids, array(
|
||||
'edit-sp_spec',
|
||||
'sp_spec',
|
||||
) );
|
||||
}
|
||||
|
||||
public static function add_post_type( $post_types = array() ) {
|
||||
$post_types[] = 'sp_spec';
|
||||
return $post_types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Conditonally load the class and functions only needed when viewing this post type.
|
||||
*/
|
||||
public function include_post_type_handler() {
|
||||
include_once( SP()->plugin_path() . '/includes/admin/post-types/class-sp-admin-cpt-spec.php' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Display Event Specs Table at Config Page
|
||||
* @return null
|
||||
*/
|
||||
public function sp_specs_config() {
|
||||
?>
|
||||
<table class="form-table">
|
||||
<tbody>
|
||||
<?php
|
||||
$args = array(
|
||||
'post_type' => 'sp_spec',
|
||||
'numberposts' => -1,
|
||||
'posts_per_page' => -1,
|
||||
'orderby' => 'menu_order',
|
||||
'order' => 'ASC'
|
||||
);
|
||||
$data = get_posts( $args );
|
||||
?>
|
||||
<tr valign="top">
|
||||
<th scope="row" class="titledesc">
|
||||
<?php _e( 'Event Specs', 'sportspress' ) ?>
|
||||
<p class="description"><?php _e( 'Add more details to an event.', 'sportspress' ); ?></p>
|
||||
</th>
|
||||
<td class="forminp">
|
||||
<table class="widefat sp-admin-config-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col"><?php _e( 'Label', 'sportspress' ); ?></th>
|
||||
<th scope="col"><?php _e( 'Variable', 'sportspress' ); ?></th>
|
||||
<th scope="col"><?php _e( 'Description', 'sportspress' ); ?></th>
|
||||
<th scope="col" class="edit"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php if ( $data ): $i = 0; foreach ( $data as $row ): ?>
|
||||
<tr<?php if ( $i % 2 == 0 ) echo ' class="alternate"'; ?>>
|
||||
<td class="row-title"><?php echo $row->post_title; ?></td>
|
||||
<td><code><?php echo $row->post_name; ?></code></td>
|
||||
<td><p class="description"><?php echo $row->post_excerpt; ?></p></td>
|
||||
<td class="edit"><a class="button" href="<?php echo get_edit_post_link( $row->ID ); ?>"><?php _e( 'Edit', 'sportspress' ); ?></s></td>
|
||||
</tr>
|
||||
<?php $i++; endforeach; else: ?>
|
||||
<tr class="alternate">
|
||||
<td colspan="4"><?php _e( 'No results found.', 'sportspress' ); ?></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
</table>
|
||||
<div class="tablenav bottom">
|
||||
<a class="button alignleft" href="<?php echo admin_url( 'edit.php?post_type=sp_spec' ); ?>"><?php _e( 'View All', 'sportspress' ); ?></a>
|
||||
<a class="button button-primary alignright" href="<?php echo admin_url( 'post-new.php?post_type=sp_spec' ); ?>"><?php _e( 'Add New', 'sportspress' ); ?></a>
|
||||
<br class="clear">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Add meta boxes.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function add_meta_boxes( $meta_boxes ) {
|
||||
$meta_boxes['sp_spec'] = array(
|
||||
'details' => array(
|
||||
'title' => __( 'Specs', 'sportspress' ),
|
||||
'save' => 'SP_Meta_Box_Spec_Details::save',
|
||||
'output' => 'SP_Meta_Box_Spec_Details::output',
|
||||
'context' => 'normal',
|
||||
'priority' => 'high',
|
||||
),
|
||||
);
|
||||
$meta_boxes['sp_event']['specs'] = array(
|
||||
'title' => __( 'Specs', 'sportspress' ),
|
||||
'save' => 'SP_Meta_Box_Event_Specs::save',
|
||||
'output' => 'SP_Meta_Box_Event_Specs::output',
|
||||
'context' => 'side',
|
||||
'priority' => 'default',
|
||||
);
|
||||
return $meta_boxes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add event details.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function event_details ( $data, $id ) {
|
||||
|
||||
$event = new SP_Event( $id );
|
||||
|
||||
$specs_before = $event->specs( true );
|
||||
$specs_after = $event->specs( false );
|
||||
|
||||
$data = array_merge( $specs_before, $data, $specs_after );
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add calendar columns.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function calendar_columns( $columns = array() ) {
|
||||
$columns['event_specs'] = __( 'Event Specs', 'sportspress' );
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event list head row.
|
||||
*/
|
||||
public function event_list_head_row( $usecolumns = array() ) {
|
||||
if ( is_array( $usecolumns ) && in_array( 'event_specs', $usecolumns ) ) {
|
||||
$spec_labels = (array)sp_get_var_labels( 'sp_spec', null, false );
|
||||
|
||||
if ( empty( $spec_labels ) ) return;
|
||||
|
||||
foreach ( $spec_labels as $spec_label ) {
|
||||
?>
|
||||
<th class="data-specs">
|
||||
<?php echo $spec_label; ?>
|
||||
</th>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event list row.
|
||||
*/
|
||||
public function event_list_row( $event, $usecolumns = array() ) {
|
||||
if ( is_array( $usecolumns ) && in_array( 'event_specs', $usecolumns ) ) {
|
||||
$event = new SP_Event( $event );
|
||||
$specs = $event->specs( false );
|
||||
$spec_labels = (array)sp_get_var_labels( 'sp_spec', null, false );
|
||||
|
||||
foreach ( $spec_labels as $spec_label ) {
|
||||
?>
|
||||
<td class="data-spec">
|
||||
<?php if ( isset( $specs[$spec_label] ) ) {
|
||||
echo $specs[$spec_label];
|
||||
}else{
|
||||
echo '-';
|
||||
}?>
|
||||
</td>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add additional options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function add_options( $options ) {
|
||||
$spec_labels = (array)sp_get_var_labels( 'sp_spec', null, false );
|
||||
foreach ( $spec_labels as $key => $value ) {
|
||||
$options[ 'Event Specs' ]['$spec'.$key] = $value;
|
||||
}
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alter.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function alter_equation( $equation, $vars ) {
|
||||
//var_dump($equation);
|
||||
//var_dump($vars);
|
||||
// Remove space between equation parts
|
||||
$equation = str_replace( ' ', '', $equation );
|
||||
|
||||
return $equation;
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
||||
|
||||
new SportsPress_Event_Specs();
|
||||
Reference in New Issue
Block a user