Current File : /home/kelaby89/www/wp/wp-content/plugins/trx_addons/components/cpt/sport/sport.competitions.php |
<?php
/**
* ThemeREX Addons: Competitions support in the Sports Reviews Management
*
* @package ThemeREX Addons
* @since v1.6.17
*/
// Don't load directly
if ( ! defined( 'TRX_ADDONS_VERSION' ) ) {
exit;
}
// -----------------------------------------------------------------
// -- Custom post type registration
// -----------------------------------------------------------------
// Define Custom post type and taxonomy constants
if ( ! defined('TRX_ADDONS_CPT_COMPETITIONS_PT') ) define('TRX_ADDONS_CPT_COMPETITIONS_PT', trx_addons_cpt_param('competitions', 'post_type'));
if ( ! defined('TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY') ) define('TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY', trx_addons_cpt_param('competitions', 'taxonomy'));
// Register post types and taxonomies
if (!function_exists('trx_addons_cpt_competitions_init')) {
add_action( 'init', 'trx_addons_cpt_competitions_init' );
function trx_addons_cpt_competitions_init() {
// Add parameters to the Meta Box support
trx_addons_meta_box_register(TRX_ADDONS_CPT_COMPETITIONS_PT, array(
"date_start" => array(
"title" => esc_html__("Start date", 'trx_addons'),
"desc" => wp_kses_data( __("Start date in format: yyyy-mm-dd", 'trx_addons') ),
"std" => date('Y-m-d'),
"type" => 'date'
),
"date_end" => array(
"title" => esc_html__("End date", 'trx_addons'),
"desc" => wp_kses_data( __("End date in format: yyyy-mm-dd", 'trx_addons') ),
"std" => date('Y-m-d'),
"type" => 'date'
),
"type" => array(
"title" => esc_html__("Member's type", 'trx_addons'),
"desc" => esc_html__("Select type of members in this competitions: pair (football, hokey, basketball, etc.) or group (motocross, maraphone, etc.)", 'trx_addons'),
"std" => 'pair',
"options" => array(
'pair' => esc_html__('Pair', 'trx_addons'),
'group' => esc_html__('Group', 'trx_addons'),
),
"type" => 'radio'
)
));
// Register taxonomies and post types
// Taxonomy first, because it can using the combined rewrite rule (contains the slug of the post type)
register_taxonomy(
TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY,
TRX_ADDONS_CPT_COMPETITIONS_PT,
apply_filters('trx_addons_filter_register_taxonomy',
array(
'post_type' => TRX_ADDONS_CPT_COMPETITIONS_PT,
'hierarchical' => true,
'labels' => array(
'name' => esc_html__( 'Sports', 'trx_addons' ),
'singular_name' => esc_html__( 'Sport', 'trx_addons' ),
'search_items' => esc_html__( 'Search Sports', 'trx_addons' ),
'all_items' => esc_html__( 'All Sports', 'trx_addons' ),
'parent_item' => esc_html__( 'Parent Sport', 'trx_addons' ),
'parent_item_colon' => esc_html__( 'Parent Sport:', 'trx_addons' ),
'edit_item' => esc_html__( 'Edit Sport', 'trx_addons' ),
'update_item' => esc_html__( 'Update Sport', 'trx_addons' ),
'add_new_item' => esc_html__( 'Add New Sport', 'trx_addons' ),
'new_item_name' => esc_html__( 'New Sport Name', 'trx_addons' ),
'menu_name' => esc_html__( 'Sports', 'trx_addons' ),
),
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array(
'slug' => trx_addons_cpt_param('competitions', 'taxonomy_slug'),
'with_front' => false,
'hierarchical' => true
)
),
TRX_ADDONS_CPT_COMPETITIONS_PT,
TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY
)
);
register_post_type(
TRX_ADDONS_CPT_COMPETITIONS_PT,
apply_filters('trx_addons_filter_register_post_type',
array(
'label' => esc_html__( 'Competitions', 'trx_addons' ),
'description' => esc_html__( 'Competitions Description', 'trx_addons' ),
'labels' => array(
'name' => esc_html__( 'Competitions', 'trx_addons' ),
'singular_name' => esc_html__( 'Competition', 'trx_addons' ),
'menu_name' => esc_html__( 'Competitions', 'trx_addons' ),
'parent_item_colon' => esc_html__( 'Parent Item:', 'trx_addons' ),
'all_items' => esc_html__( 'All Competitions', 'trx_addons' ),
'view_item' => esc_html__( 'View Competition', 'trx_addons' ),
'add_new_item' => esc_html__( 'Add New Competition', 'trx_addons' ),
'add_new' => esc_html__( 'Add New', 'trx_addons' ),
'edit_item' => esc_html__( 'Edit Competition', 'trx_addons' ),
'update_item' => esc_html__( 'Update Competition', 'trx_addons' ),
'search_items' => esc_html__( 'Search Competitions', 'trx_addons' ),
'not_found' => esc_html__( 'Not found', 'trx_addons' ),
'not_found_in_trash' => esc_html__( 'Not found in Trash', 'trx_addons' ),
),
'taxonomies' => array(TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY),
'supports' => trx_addons_cpt_param('competitions', 'supports'),
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'can_export' => true,
'show_in_admin_bar' => true,
'show_in_menu' => false,
'capability_type' => 'post',
'rewrite' => array(
'slug' => trx_addons_cpt_param('competitions', 'post_type_slug'),
'with_front' => false,
'hierarchical' => false
)
),
TRX_ADDONS_CPT_COMPETITIONS_PT
)
);
// Add rewrite rules to show competitions
add_rewrite_tag('%competition%', '([^&]+)');
}
}
// Add sort in the query for the competitions
if ( !function_exists( 'trx_addons_cpt_competitions_add_sort_order' ) ) {
add_filter('trx_addons_filter_add_sort_order', 'trx_addons_cpt_competitions_add_sort_order', 10, 3);
function trx_addons_cpt_competitions_add_sort_order($q, $orderby, $order='desc') {
if ($orderby == 'competition_date') {
$q['order'] = $order;
$q['orderby'] = 'meta_value';
$q['meta_key'] = 'trx_addons_competition_date';
}
return $q;
}
}
// Save competition's date for search, sorting, etc.
if ( !function_exists( 'trx_addons_cpt_competitions_save_post_options' ) ) {
add_filter('trx_addons_filter_save_post_options', 'trx_addons_cpt_competitions_save_post_options', 10, 3);
function trx_addons_cpt_competitions_save_post_options($options, $post_id, $post_type) {
if ($post_type == TRX_ADDONS_CPT_COMPETITIONS_PT) {
update_post_meta($post_id, 'trx_addons_competition_date', $options['date_start']);
}
return $options;
}
}
// Return true if it's competitions page
if ( !function_exists( 'trx_addons_is_competitions_page' ) ) {
function trx_addons_is_competitions_page() {
return !is_search() && (
(trx_addons_is_single() && get_post_type()==TRX_ADDONS_CPT_COMPETITIONS_PT)
|| is_post_type_archive(TRX_ADDONS_CPT_COMPETITIONS_PT)
|| is_tax(TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY)
);
}
}
// Replace standard theme templates
//-------------------------------------------------------------
// Change standard single template for the competitions posts
if ( !function_exists( 'trx_addons_cpt_competitions_single_template' ) ) {
add_filter('single_template', 'trx_addons_cpt_competitions_single_template');
function trx_addons_cpt_competitions_single_template($template) {
global $post;
if (trx_addons_is_single() && $post->post_type == TRX_ADDONS_CPT_COMPETITIONS_PT) {
if ( ($template = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . 'sport/tpl.single.competitions.php')) == '' )
$template = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . 'sport/tpl.single.php');
}
return $template;
}
}
// Change standard archive template for the competitions posts
if ( !function_exists( 'trx_addons_cpt_competitions_archive_template' ) ) {
add_filter('archive_template', 'trx_addons_cpt_competitions_archive_template');
function trx_addons_cpt_competitions_archive_template( $template ) {
if ( is_post_type_archive(TRX_ADDONS_CPT_COMPETITIONS_PT) ) {
if ( ($template = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . 'sport/tpl.archive.competitions.php')) == '' )
$template = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . 'sport/tpl.archive.php');
}
return $template;
}
}
// Change standard category template for the competitions categories (sports)
if ( !function_exists( 'trx_addons_cpt_competitions_taxonomy_template' ) ) {
add_filter('taxonomy_template', 'trx_addons_cpt_competitions_taxonomy_template');
function trx_addons_cpt_competitions_taxonomy_template( $template ) {
if ( is_tax(TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY) ) {
if ( ($template = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . 'sport/tpl.archive.competitions.php')) == '' )
$template = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . 'sport/tpl.archive.php');
}
return $template;
}
}
// Admin utils
// -----------------------------------------------------------------
// Add Admin menu 'Sport' items
if (!function_exists('trx_addons_cpt_competitions_admin_menu')) {
add_action( 'admin_menu', 'trx_addons_cpt_competitions_admin_menu' );
function trx_addons_cpt_competitions_admin_menu() {
$tax = TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY;
if ( !($terms = get_transient("trx_addons_terms_filter_".trim($tax)))) {
$terms = get_terms(array('taxonomy'=>$tax, 'hide_empty'=>false));
if (is_array($terms) && count($terms) > 0)
set_transient("trx_addons_terms_filter_".trim($tax), $terms, 24*60*60);
}
if (is_array($terms) && count($terms) > 0) {
foreach ($terms as $term) {
add_submenu_page('trx_addons_sport', //parent_menu_slug
esc_html($term->name), //page_title
esc_html($term->name), //menu_title
'edit_posts', //capability
'edit.php?post_type='.TRX_ADDONS_CPT_COMPETITIONS_PT.'&'.TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY.'='.$term->slug, //menu_link
null //callback
);
}
}
// Link to taxonomies editor
add_submenu_page('trx_addons_sport',
esc_html__('Add/Delete Sport', 'trx_addons'),
esc_html__('Add/Delete Sport', 'trx_addons'),
'edit_posts', //capability
'edit-tags.php?post_type='.TRX_ADDONS_CPT_COMPETITIONS_PT.'&taxonomy='.TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY,
null
);
}
}
// Show <select> with sports in the admin filters area
if (!function_exists('trx_addons_cpt_competitions_admin_filters_sport')) {
add_action( 'restrict_manage_posts', 'trx_addons_cpt_competitions_admin_filters_sport' );
function trx_addons_cpt_competitions_admin_filters_sport() {
trx_addons_admin_filters(TRX_ADDONS_CPT_COMPETITIONS_PT, TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY);
}
}
// Clear terms cache on the taxonomy save
if (!function_exists('trx_addons_cpt_competitions_admin_clear_cache_sport')) {
add_action( 'edited_'.TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY, 'trx_addons_cpt_competitions_admin_clear_cache_sport', 10, 1 );
add_action( 'delete_'.TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY, 'trx_addons_cpt_competitions_admin_clear_cache_sport', 10, 1 );
add_action( 'created_'.TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY, 'trx_addons_cpt_competitions_admin_clear_cache_sport', 10, 1 );
function trx_addons_cpt_competitions_admin_clear_cache_sport( $term_id=0 ) {
trx_addons_admin_clear_cache_terms(TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY);
}
}
// Clear terms cache on the post save
if ( !function_exists( 'trx_addons_cpt_competitions_admin_clear_cache_sport2' ) ) {
add_filter('trx_addons_filter_save_post_options', 'trx_addons_cpt_competitions_admin_clear_cache_sport2', 10, 3);
function trx_addons_cpt_competitions_admin_clear_cache_sport2($options, $post_id, $post_type) {
if ($post_type == TRX_ADDONS_CPT_COMPETITIONS_PT) {
set_transient("trx_addons_terms_filter_".TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY, '', 24*60*60);
}
return $options;
}
}
// Show <select> with competitions in the admin filters area
if (!function_exists('trx_addons_cpt_competitions_admin_filters_competition')) {
add_action( 'restrict_manage_posts', 'trx_addons_cpt_competitions_admin_filters_competition' );
function trx_addons_cpt_competitions_admin_filters_competition() {
if ( !in_array(get_query_var('post_type'), array(TRX_ADDONS_CPT_ROUNDS_PT, TRX_ADDONS_CPT_PLAYERS_PT)) ) return;
$competition = trx_addons_get_value_gp('competition');
if (empty($competition)) return;
$terms = get_the_terms($competition, TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY);
if (!is_array($terms) || count($terms)==0) return;
$tax = $terms[0]->slug;
if ( !($competitions_list = get_transient("trx_addons_competitions_filter_".trim($tax))) ) {
$competitions_list = trx_addons_get_list_posts(false, array(
'post_type'=>TRX_ADDONS_CPT_COMPETITIONS_PT,
'taxonomy'=>TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY,
'taxonomy_value'=>$tax));
if (is_array($competitions_list) && count($competitions_list) > 0)
set_transient("trx_addons_competitions_filter_".trim($tax), $competitions_list, 24*60*60);
}
$list = '';
if (is_array($competitions_list) && count($competitions_list) > 0) {
$list .= '<select name="competition" id="competition" class="postform">';
foreach ($competitions_list as $id=>$title) {
$list .= '<option value="'.esc_attr($id).'"'.($competition==$id ? ' selected="selected"' : '').'>'.esc_html($title).'</option>';
}
$list .= "</select>";
}
trx_addons_show_layout($list);
}
}
// Clear competitions cache on the post save
if ( !function_exists( 'trx_addons_cpt_competitions_admin_clear_cache_competition' ) ) {
add_filter('trx_addons_filter_save_post_options', 'trx_addons_cpt_competitions_admin_clear_cache_competition', 10, 3);
function trx_addons_cpt_competitions_admin_clear_cache_competition($options, $post_id, $post_type) {
if ($post_type == TRX_ADDONS_CPT_COMPETITIONS_PT) {
$terms = get_the_terms($post_id, TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY);
if ( ! empty( $terms[0]->slug ) ) {
$tax = $terms[0]->slug;
set_transient("trx_addons_competitions_filter_".trim($tax), '', 24*60*60);
}
}
return $options;
}
}
// Create additional column in the posts list
if (!function_exists('trx_addons_cpt_competitions_add_custom_column')) {
add_filter('manage_edit-'.trx_addons_cpt_param('competitions', 'post_type').'_columns', 'trx_addons_cpt_competitions_add_custom_column', 9);
function trx_addons_cpt_competitions_add_custom_column( $columns ){
if (is_array($columns) && count($columns)>0) {
$new_columns = array();
foreach($columns as $k=>$v) {
if ($k=='title') {
$new_columns['cpt_competitions_image'] = esc_html__('Image', 'trx_addons');
}
$new_columns[$k] = $v;
if ($k=='title') {
$new_columns['cpt_competitions_date'] = esc_html__('Date', 'trx_addons');
}
}
$columns = $new_columns;
}
return $columns;
}
}
// Make column 'Date' sortable
if (!function_exists('trx_addons_cpt_competitions_sort_custom_column')) {
add_filter('manage_edit-'.trx_addons_cpt_param('competitions', 'post_type').'_sortable_columns', 'trx_addons_cpt_competitions_sort_custom_column');
function trx_addons_cpt_competitions_sort_custom_column( $columns ) {
if (is_array($columns)) $columns['cpt_competitions_date'] = array('trx_addons_competition_date', trx_addons_get_value_gp('orderby')=='' || trx_addons_get_value_gp('orderby')=='trx_addons_competition_date' && trx_addons_get_value_gp('order')=='asc');
return $columns;
}
}
// Fill custom columns in the posts list
if (!function_exists('trx_addons_cpt_competitions_fill_custom_column')) {
add_action('manage_'.trx_addons_cpt_param('competitions', 'post_type').'_posts_custom_column', 'trx_addons_cpt_competitions_fill_custom_column', 9, 2);
function trx_addons_cpt_competitions_fill_custom_column($column_name='', $post_id=0) {
if ($column_name == 'cpt_competitions_image') {
$image = wp_get_attachment_image_src( get_post_thumbnail_id($post_id), trx_addons_get_thumb_size('masonry') );
if ( ! empty($image[0]) ) {
?><img class="trx_addons_cpt_column_image_preview trx_addons_cpt_competitions_image_preview" src="<?php echo esc_url($image[0]); ?>" alt="<?php esc_attr_e("Competition's logo", 'trx_addons'); ?>"<?php if (!empty($image[1])) echo ' width="'.intval($image[1]).'"'; ?><?php if (!empty($image[2])) echo ' height="'.intval($image[2]).'"'; ?>><?php
}
} else if ($column_name == 'cpt_competitions_date') {
// Show start and end date of the competition
$meta = (array)get_post_meta($post_id, 'trx_addons_options', true);
?><div class="trx_addons_meta_row"><?php
trx_addons_show_layout(date_i18n(get_option('date_format'), strtotime($meta['date_start'])),
'<span class="trx_addons_meta_date trx_addons_meta_date_start">',
'</span>'
);
?><span class="trx_addons_meta_delimiter"> - </span><?php
trx_addons_show_layout(date_i18n(get_option('date_format'), strtotime($meta['date_end'])),
'<span class="trx_addons_meta_date trx_addons_meta_date_end">',
'</span>'
);
?></div><?php
// Links to rounds and members lists
?><div class="trx_addons_meta_row">
<a href="<?php echo esc_url(get_admin_url(null, 'edit.php?post_type='.TRX_ADDONS_CPT_ROUNDS_PT.'&competition='.intval($post_id))); ?>" class="button-primary"><?php esc_html_e('Rounds', 'trx_addons'); ?></a>
<a href="<?php echo esc_url(get_admin_url(null, 'edit.php?post_type='.TRX_ADDONS_CPT_PLAYERS_PT.'&competition='.intval($post_id))); ?>" class="button"><?php esc_html_e('Players', 'trx_addons'); ?></a>
</div><?php
}
}
}
// Add hidden field with sport or competition to the edit form
if (!function_exists('trx_addons_cpt_competitions_add_sports_field')) {
add_action('edit_form_top', 'trx_addons_cpt_competitions_add_sports_field', 1, 1);
function trx_addons_cpt_competitions_add_sports_field($post) {
if (!is_object($post)) return;
if ($post->post_type == TRX_ADDONS_CPT_COMPETITIONS_PT) {
// Add sport
$sport = trx_addons_get_value_gp('cpt_competitions_sports');
if ( empty($sport) ) {
$terms = get_the_terms($post->ID, TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY);
if (!is_array($terms) || count($terms)==0) return;
$sport = $terms[0]->slug;
} else {
// Save sport ID to the storage
$term = get_term_by('slug', $sport, TRX_ADDONS_CPT_COMPETITIONS_TAXONOMY);
global $TRX_ADDONS_STORAGE;
$TRX_ADDONS_STORAGE['sport_id'] = $term!==false ? $term->term_id : 0;
}
?><input type="hidden" id="cpt_competitions_sports" name="cpt_competitions_sports" value="<?php echo esc_attr($sport); ?>"><?php
} else if (in_array($post->post_type, array(TRX_ADDONS_CPT_ROUNDS_PT, TRX_ADDONS_CPT_PLAYERS_PT, TRX_ADDONS_CPT_MATCHES_PT))) {
// Add round
$round = 0;
if ($post->post_type == TRX_ADDONS_CPT_MATCHES_PT) {
$round = trx_addons_get_value_gp('round');
//if ( (int) $round == 0) $round = get_post_meta($post->ID, 'trx_addons_round', true);
if ( (int) $round == 0) $round = $post->post_parent;
?><input type="hidden" id="round" name="round" value="<?php echo esc_attr($round); ?>"><?php
}
// Add competition
$competition = trx_addons_get_value_gp('competition');
//if ( (int) $competition == 0) $competition = get_post_meta($post->ID, 'trx_addons_competition', true);
if ( (int) $competition == 0) {
if ($round > 0) {
$round_post = get_post($round);
$competition = $round_post->post_parent;
} else {
$competition = $post->post_parent;
}
}
?><input type="hidden" id="competition" name="competition" value="<?php echo esc_attr($competition); ?>"><?php
}
}
}
// Check Sport in the terms list when edit Competition
if (!function_exists('trx_addons_cpt_competitions_check_sports_term')) {
add_action('wp_terms_checklist_args', 'trx_addons_cpt_competitions_check_sports_term', 10, 2);
function trx_addons_cpt_competitions_check_sports_term($args, $post_id) {
global $TRX_ADDONS_STORAGE;
if (!empty($TRX_ADDONS_STORAGE['sport_id'])) $args['selected_cats'] = array($TRX_ADDONS_STORAGE['sport_id']);
return $args;
}
}