all-in-one-event-calendar/app/view/admin/all-events.php
2017-03-16 16:59:53 +01:00

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;
}
}
}