260 lines
7.6 KiB
PHP
260 lines
7.6 KiB
PHP
<?php
|
|
|
|
class Ai1ec_View_Admin_All_Events extends Ai1ec_Base {
|
|
|
|
/**
|
|
* change_columns function
|
|
*
|
|
* Adds Event date/time column to our custom post type
|
|
* and renames Date column to Post Date
|
|
*
|
|
* @param array $columns Existing columns
|
|
*
|
|
* @return array Updated columns array
|
|
*/
|
|
public function change_columns( array $columns = array() ) {
|
|
$columns['author'] = __( 'Author', AI1EC_PLUGIN_NAME );
|
|
$columns['date'] = __( 'Post Date', AI1EC_PLUGIN_NAME );
|
|
$columns['ai1ec_event_date'] = __( 'Event date/time', AI1EC_PLUGIN_NAME );
|
|
$api = $this->_registry->get( 'model.api.api-ticketing' );
|
|
if ( $api->is_signed() ) {
|
|
$columns['tickets'] = __( 'Ticket Types', AI1EC_PLUGIN_NAME );
|
|
}
|
|
return $columns;
|
|
}
|
|
|
|
/**
|
|
* orderby function
|
|
*
|
|
* Orders events by event date
|
|
*
|
|
* @param string $orderby Orderby sql
|
|
* @param object $wp_query
|
|
*
|
|
* @return void
|
|
**/
|
|
public function orderby( $orderby, $wp_query ) {
|
|
|
|
$db = $this->_registry->get( 'dbi.dbi' );
|
|
$aco = $this->_registry->get( 'acl.aco' );
|
|
|
|
if( true === $aco->is_all_events_page() ) {
|
|
$wp_query->query = wp_parse_args( $wp_query->query );
|
|
$table_name = $db->get_table_name( 'ai1ec_events' );
|
|
$posts = $db->get_table_name( 'posts' );
|
|
if( isset( $wp_query->query['orderby'] ) && 'ai1ec_event_date' === @$wp_query->query['orderby'] ) {
|
|
$orderby = "(SELECT start FROM {$table_name} WHERE post_id = {$posts}.ID) " . $wp_query->get('order');
|
|
} else if( empty( $wp_query->query['orderby'] ) || $wp_query->query['orderby'] === 'menu_order title' ) {
|
|
$orderby = "(SELECT start FROM {$table_name} WHERE post_id = {$posts}.ID) " . 'desc';
|
|
}
|
|
}
|
|
return $orderby;
|
|
}
|
|
|
|
/**
|
|
* custom_columns function
|
|
*
|
|
* Adds content for custom columns
|
|
*
|
|
* @return void
|
|
**/
|
|
public function custom_columns( $column, $post_id ) {
|
|
if ( 'ai1ec_event_date' === $column ) {
|
|
try {
|
|
$event = $this->_registry->get( 'model.event', $post_id );
|
|
$time = $this->_registry->get( 'view.event.time' );
|
|
echo $time->get_timespan_html( $event );
|
|
} catch ( Exception $e ) {
|
|
// event wasn't found, output empty string
|
|
echo '';
|
|
}
|
|
} else if ( 'tickets' === $column ) {
|
|
$api = $this->_registry->get( 'model.api.api-ticketing' );
|
|
if ( $api->is_ticket_event_imported( $post_id ) ) {
|
|
echo '';
|
|
} else {
|
|
try {
|
|
$event = $this->_registry->get( 'model.event', $post_id );
|
|
$api = $this->_registry->get( 'model.api.api-ticketing' );
|
|
$api_event_id = $api->get_api_event_id( $post_id );
|
|
if ( $api_event_id ) {
|
|
echo '<a href="#" class="ai1ec-has-tickets" data-post-id="'
|
|
. $post_id . '">'
|
|
. __( 'Ticketing Details', AI1EC_PLUGIN_NAME ) . '</a>';
|
|
}
|
|
|
|
} catch ( Exception $e ) {
|
|
// event wasn't found, output empty string
|
|
echo '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* sortable_columns function
|
|
*
|
|
* Enable sorting of columns
|
|
*
|
|
* @return void
|
|
**/
|
|
public function sortable_columns( $columns ) {
|
|
$columns['ai1ec_event_date'] = 'ai1ec_event_date';
|
|
$columns['author'] = 'author';
|
|
return $columns;
|
|
}
|
|
|
|
/**
|
|
* taxonomy_filter_restrict_manage_posts function
|
|
*
|
|
* Adds filter dropdowns for event categories and event tags.
|
|
* Adds filter dropdowns for event authors.
|
|
*
|
|
* @uses wp_dropdown_users To create a dropdown with current user selected.
|
|
*
|
|
* @return void
|
|
**/
|
|
function taxonomy_filter_restrict_manage_posts() {
|
|
global $typenow;
|
|
|
|
// =============================================
|
|
// = add the dropdowns only on the events page =
|
|
// =============================================
|
|
if( $typenow === AI1EC_POST_TYPE ) {
|
|
$filters = get_object_taxonomies( $typenow );
|
|
foreach( $filters as $tax_slug ) {
|
|
$tax_obj = get_taxonomy( $tax_slug );
|
|
wp_dropdown_categories( array(
|
|
'show_option_all' => __( 'Show All ', AI1EC_PLUGIN_NAME ) . $tax_obj->label,
|
|
'taxonomy' => $tax_slug,
|
|
'name' => $tax_obj->name,
|
|
'orderby' => 'name',
|
|
'selected' => isset( $_GET[$tax_slug] ) ? $_GET[$tax_slug] : '',
|
|
'hierarchical' => $tax_obj->hierarchical,
|
|
'show_count' => true,
|
|
'hide_if_empty' => true,
|
|
'value_field' => 'slug',
|
|
));
|
|
}
|
|
$args = array(
|
|
'name' => 'author',
|
|
'show_option_all' => __( 'Show All Authors', AI1EC_PLUGIN_NAME ),
|
|
);
|
|
if ( isset( $_GET['user'] ) ) {
|
|
$args['selected'] = (int)$_GET['user'];
|
|
}
|
|
wp_dropdown_users($args);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* taxonomy_filter_post_type_request function
|
|
*
|
|
* Adds filtering of events list by event tags and event categories
|
|
*
|
|
* @return void
|
|
**/
|
|
public function taxonomy_filter_post_type_request( $query ) {
|
|
global $pagenow, $typenow;
|
|
if( 'edit.php' === $pagenow ) {
|
|
$filters = get_object_taxonomies( $typenow );
|
|
foreach( $filters as $tax_slug ) {
|
|
$var = &$query->query_vars[$tax_slug];
|
|
if( isset( $var ) ) {
|
|
$term = null;
|
|
|
|
if( is_numeric( $var ) ) {
|
|
$term = get_term_by( 'id', $var, $tax_slug );
|
|
} else {
|
|
$term = get_term_by( 'slug', $var, $tax_slug );
|
|
}
|
|
|
|
if( isset( $term->slug ) ) {
|
|
$var = $term->slug;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// ===========================
|
|
// = Order by Event date ASC =
|
|
// ===========================
|
|
if( 'ai1ec_event' === $typenow ) {
|
|
if ( ! array_key_exists( 'orderby', $query->query_vars ) ) {
|
|
$query->query_vars['orderby'] = 'ai1ec_event_date';
|
|
$query->query_vars['order'] = 'desc';
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* CSS and templates files needed for ticketing.
|
|
*/
|
|
public function add_ticketing_styling() {
|
|
// Add CSS
|
|
$this->_registry->get( 'css.admin' )->admin_enqueue_scripts(
|
|
'ai1ec_event_page_all-in-one-event-calendar-settings'
|
|
);
|
|
$this->_registry->get( 'css.admin' )->process_enqueue(
|
|
array(
|
|
array( 'style', 'ticketing.css', ),
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get ticket details by Event id.
|
|
*/
|
|
public function show_ticket_details() {
|
|
$post_id = $_POST['ai1ec_event_id'];
|
|
$api = $this->_registry->get( 'model.api.api-ticketing' );
|
|
if ( $api->is_ticket_event_from_another_account( $post_id ) ) {
|
|
$tickets = json_encode(
|
|
array( 'data' => array(), 'error' =>
|
|
sprintf(
|
|
__( 'This Event was created using a different account %s. Changes are not allowed.', AI1EC_PLUGIN_NAME ),
|
|
$api->get_api_event_account( $post_id )
|
|
)
|
|
) );
|
|
} else {
|
|
$tickets = $api->get_ticket_types( $post_id );
|
|
}
|
|
echo $tickets;
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Get attendees list.
|
|
*/
|
|
public function show_attendees() {
|
|
$post_id = $_POST['ai1ec_event_id'];
|
|
$api = $this->_registry->get( 'model.api.api-ticketing' );
|
|
$tickets = $api->get_tickets( $post_id );
|
|
echo $tickets;
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* count_future_events function
|
|
*
|
|
* @return Count future events
|
|
**/
|
|
public function count_future_events( $user_id = null ) {
|
|
if ( is_admin() ) {
|
|
$settings = $this->_registry->get( 'model.settings' );
|
|
$current_time = $this->_registry->get( 'date.time' );
|
|
$current_time->set_timezone( $settings->get( 'timezone_string' ) );
|
|
$current_time = $current_time->format_to_gmt();
|
|
$user_id = get_current_user_id();
|
|
$where = get_posts_by_author_sql( AI1EC_POST_TYPE, true, $user_id );
|
|
$db = $this->_registry->get( 'dbi.dbi' );
|
|
$posts = $db->get_table_name( 'posts' );
|
|
$table_name = $db->get_table_name( 'ai1ec_events' );
|
|
$sql = "SELECT COUNT(*) FROM $table_name INNER JOIN $posts on $table_name.post_id = {$posts}.ID"
|
|
. " $where AND $table_name.start > $current_time"; //future event
|
|
return $db->get_var( $sql );
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
}
|