_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 '' . __( 'Ticketing Details', AI1EC_PLUGIN_NAME ) . ''; } } 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; } } }