The Events Calendar. This plugin depends on The Events Calendar and has no standalone functionality. Both plugins need to be activated in order for Eventbrite functionality to work. Version: 1.5.1 Author URI: http://www.shaneandpeter.com/ Text Domain: events */ // Test for SP Events Calendar plugin. Make smarter later, with message to user about installing SP Events Calendar first. if ( !class_exists( 'Eventbrite_for_The_Events_Calendar' ) ) { class Eventbrite_for_The_Events_Calendar { /************************************************************** * EventBrite Configuration **************************************************************/ const EVENTBRITEERROPT = '_events_eventbrite_errors'; const EVENTBRITETIMEFORMAT = 'c'; // ISO 8601 const EVENTBRITEAPIBASEURL = 'www.eventbrite.com/xml/'; // json support only default in PHP 5.2 private $debug = false; public $errors; // All events are private while we test this plugin public $eventBritePrivacy = 0; public $eventBriteTimezone; public $eventBriteTransport; // https if supported, otherwise http public $eventBriteApiUrl; public $metaTags = array( '_EventBriteId', // ID in EventBrite of this event '_EventBriteTicketName', '_EventBriteTicketDescription', '_EventBriteIsDonation', '_EventBriteTicketQuantity', '_EventBriteIncludeFee', '_EventBriteStatus', '_EventRegister', // Whether to register this event with EventBrite '_events_eventbrite_errors', ); function __construct() { $this->add_actions(); $this->add_filters(); $this->add_shortcodes(); } private function add_actions() { add_action( 'init', array( $this, 'initEventBrite' ) ); add_action( 'sp_events_options_bottom', array( $this, 'eventBriteOptions' ) ); add_action( 'sp_events_save_more_options', array( $this, 'saveOptions' ) ); add_action( 'sp_events_event_save', array( $this, 'addEventBriteDetails' ) ); add_action( 'sp_events_update_meta', array( $this, 'addEventMeta' ) ); add_action( 'sp_events_event_clear', array( $this, 'clearEventBriteDetails' ) ); add_action( 'show_user_profile',array( $this, 'userProfilePage' ) ); add_action( 'edit_user_profile',array( $this, 'userProfilePage' ) ); add_action( 'edit_user_profile_update', array( $this, 'userProfileUpdate' ) ); add_action( 'personal_options_update', array( $this, 'userProfileUpdate' ) ); add_action( 'sp_events_details_bottom', array( $this, 'eventBriteMetaBox') ); add_action( 'sp_events_errors', array( $this, 'displayEventBriteErrors' ) ); add_action( 'sp_events_detail_top', array( $this, 'displayExistingEventToggle' ) ); add_action( 'wp_ajax_existingEventId', array( $this, 'retrieveExistingEventData' )); } private function add_filters() { add_filter( 'the_content', array( $this, 'displayEventBriteTicketForm' ) ); } private function add_shortcodes() { add_shortcode( 'eventbrite' , array( $this, 'shortCodeforTickets' ) ); } public function loadStylesAndScripts( ) {} /** * Inits the eventbrite settings */ public function initEventBrite( ) { // use SSL if we support it $version = curl_version(); $this->eventBriteTransport = ($version['features'] & CURL_VERSION_SSL ? 'https' : 'http'); $this->eventBriteApiUrl = $this->eventBriteTransport . '://' . Eventbrite_for_The_Events_Calendar::EVENTBRITEAPIBASEURL; } public function userProfilePage( $profileuser ) { require_once( dirname( __FILE__ ) . '/views/user-profile.php' ); } public function userProfileUpdate( $user_id ) { if( isset( $_POST['eventbrite_user_key'] ) ) { update_usermeta( $user_id, 'eventbrite_user_key', $_POST['eventbrite_user_key'] ); } } public function displayEventBriteErrors( $postId ) { if( $this->debug ) error_log( "displaying eventbrite errors for post id $postId" ); if( $errors = get_post_meta( $postId, Eventbrite_for_The_Events_Calendar::EVENTBRITEERROPT, true ) ) { ?>

EventBrite Error


debug ) error_log( "errors: " . print_r( $errors, true ) ); } public function displayExistingEventToggle() { include( WP_PLUGIN_DIR . '/eventbrite-for-the-events-calendar/views/add-existing-event.php'); } public function addEventMeta( $postId ) { if( $this->debug ) error_log( "addEventMeta: " . print_r( $_POST, true ) ); if ($_POST['EventRegister'] == 'yes' && !get_post_meta( $postId, '_EventRegister', true) ) { // ignore these keys $notFromEventBriteForm = array( '_EventBriteId', '_EventBriteStatus', '_events_eventbrite_errors' ); foreach( $this->metaTags as $key ) { if( in_array( $key, $notFromEventBriteForm ) ) continue; $postVarKey = substr_replace( $key, '', 0, 1); update_post_meta( $postId, $key, $_POST[$postVarKey] ); } } elseif( !isset( $_POST['EventRegister'] ) || empty( $_POST['EventRegister'] ) ) { delete_post_meta( $postId, '_EventRegister' ); } // TODO necessary? /* if ($_POST['isEvent'] == 'yes') { global $spEvents; update_post_meta( $postId, Eventbrite_for_The_Events_Calendar::EVENTBRITEERROPT, trim( $this->errors) ); } if ($_POST['isEvent'] == 'no' && is_event( $postId ) ) { global $spEvents; update_post_meta( $postId, Eventbrite_for_The_Events_Calendar::EVENTBRITEERROPT, trim( $this->errors) ); } */ } /** * Updates the eventbrite information in wordpress and makes the * API calls to EventBrite to update the listing on their side * * @link http://www.eventbrite.com/api/doc/ * @param int post id * @uses $_POST */ public function addEventBriteDetails( $postId ) { if( !isset( $_POST['EventRegister'] ) || $_POST['EventRegister'] != 'yes' ) { if( $this->debug ) error_log( "clearing eventbrite details for post $postId" ); $this->clearEventBriteDetails( $postId ); return; } $EventBriteId = get_post_meta( $postId, '_EventBriteId', true ); if( $this->debug ) error_log( "addEventBriteDetails for postId with eventbrite id: $EventBriteId" ); if( $EventBriteId ) { // update event brite if( $this->debug ) error_log( "updating eventbrite details: " . print_r( $_POST, true ) ); $this->updateEventBrite( $postId, $EventBriteId, $_POST ); } if( !$EventBriteId && $_POST['EventRegister'] ) { global $spEvents; if( $this->debug ) error_log( "create event with eventbrite API" ); // create new eventbrite event $eventId = $this->createEventBrite( $postId, $_POST ); if( $eventId ) { if( $this->debug ) error_log( "created with id: " . print_r( $eventId, true ) ); if( $this->debug ) error_log( "creating eventbrite ticket" ); $this->createEventBriteTicket( $postId, $eventId, $_POST ); } else { if( $this->debug ) error_log( "failed to create eventbrite event" ); } if( !empty( $this->errors ) ) { if( $this->debug ) error_log( $this->errors ); update_post_meta( $postId, Eventbrite_for_The_Events_Calendar::EVENTBRITEERROPT, trim( $this->errors) ); } } } public function clearEventBriteDetails( $postId ) { // TODO delete the event using the eventbrite API foreach( $this->metaTags as $meta ) { delete_post_meta( $postId, $meta ); } } /** * handles eventbrite ticket creation */ private function createEventBriteTicket( $postId, $eventId, $_POST ) { if( !(int)$eventId ) { return false; } $request = 'event_id=' . (int)$eventId; if( empty( $_POST['EventBriteTicketName'] ) ) { return false; } $request .= '&name=' . urlencode( $_POST['EventBriteTicketName'] ); if( $_POST['EventBriteIsDonation'] == 1 ) { $request .= '&price='; $request .= '&is_donation=1'; } elseif ( $_POST['EventBriteIsDonation'] == 0 && !is_numeric( $_POST['EventCost'] ) ) { return false; } else { $request .= '&price=' . (float)$_POST['EventCost']; $request .= '&is_donation=0'; } if( !is_numeric( $_POST['EventBriteTicketQuantity'] ) ) { return false; } else { $request .= '&quantity=' . (int)$_POST['EventBriteTicketQuantity']; } if( !empty( $_POST['EventBriteTicketDescription'] ) ) { $request .= '&description=' . urlencode( $_POST['EventBriteTicketDescription'] ); } $request .= '&include_fee=' . (int)$_POST['EventBriteIncludeFee']; $response_arr = $this->sendEventBriteRequest( 'ticket_new', $request, $postId, false ); } /** * handles eventbrite updates */ private function updateEventBrite( $postId, $eventBriteId, $_POST ) { $post = get_post( $postId ); if( $post->post_type == 'revision' ) { throw new Exception(__('This post is a revision and cannot update an Evenbrite event.')); } $requestParams = ''; $requestParams .= 'event_id=' . $eventBriteId; if( empty( $_POST['post_title'] ) ) { global $spEvents; $this->errors .= 'Event must have a title'; throw new Exception(__('Please supply a post title. This will become the Eventbrite event title.')); } $requestParams .='&title=' . urlencode( stripslashes( $_POST['post_title'] ) ); if( !empty( $_POST['content'] ) ) { $requestParams .= '&description=' . urlencode( stripslashes( $_POST['content'] ) ); } $requestParams .= '&start_date=' . urlencode( $_POST['EventStartDate'] ); $requestParams .= '&end_date=' . urlencode( $_POST['EventEndDate'] ); $requestParams .= '&timezone=GMT' . urlencode( get_option( 'gmt_offset' ) ); $requestParams .= '&status=' . urlencode( $_POST['EventBriteStatus'] ); $response_arr = $this->sendEventBriteRequest( 'event_update', $requestParams, $postId, false ); if( isset( $response_arr['process']['id'] ) ) { update_post_meta( $postId, '_EventBriteId', $response_arr['process']['id'], true ); } } /** * handles eventbrite creation * * @return mixed event brite id or false */ private function createEventBrite( $postId, $_POST ) { $post = get_post( $postId ); if( $post->post_type == 'revision' ) { if( $this->debug ) error_log( "not creating EB for post revision" ); throw new Exception(__('This post is a revision and cannot create an Evenbrite event.')); } $requestParams = ''; if( empty( $_POST['post_title'] ) ) { global $spEvents; $this->errors .= 'Event must have a title'; if( $this->debug ) error_log( $this->errors ); throw new Exception(__('Please supply a post title. This will become the Eventbrite event title.')); } $requestParams .='title=' . urlencode( stripslashes( $_POST['post_title'] ) ); if( !empty( $_POST['content'] ) ) { $requestParams .= '&description=' . urlencode( stripslashes( $_POST['content'] ) ); } $requestParams .= '&start_date=' . urlencode( $_POST['EventStartDate'] ); $requestParams .= '&end_date=' . urlencode( $_POST['EventEndDate'] ); $requestParams .= '&timezone=GMT' . urlencode( get_option( 'gmt_offset' ) ); $response_arr = $this->sendEventBriteRequest( 'event_new', $requestParams, $postId, false ); if( isset( $response_arr['process']['id'] ) ) { update_post_meta( $postId, '_EventBriteId', $response_arr['process']['id'], true ); return $response_arr['process']['id']; } else { return false; } } /** * retrieves data from an existing EventBrite event * * @return a json of the event data or false */ public function retrieveExistingEventData() { $post = get_post( $_POST['postId'] ); if( $post->post_type == 'revision' ) { if( $this->debug ) error_log( "not retrieving EB event for post revision" ); throw new Exception(__('This post is a revision and cannot retrieve EventBrite data.')); } $requestParams = 'id=' . $_POST['existingEventId']; $event = $this->sendEventBriteRequest( 'event_get', $requestParams, $_POST['postId'], true ); if( isset( $event['event']['id'] ) ) { // match EB api keys with input names $matchedKeysNames = array( 'start_date' => 'EventStartDate', 'end_date' => 'EventEndDate', 'tags' => 'newtag[post_tag]', 'title' => 'post_title', 'venue' => array( 'name' => 'EventVenue', 'country' => 'EventCountry', 'address' => 'EventAddress', 'address_2' => 'EventAddress', 'city' => 'EventCity', 'region' => 'EventState', 'postal_code' => 'EventZip' ) ); // construct output array from EB response $output = array(); foreach ( $matchedKeysNames as $key => $val ) { $responseValue = $event['event'][$key]; if ( is_array( $val ) ) { foreach( $val as $key2 => $val2 ) { // hack to concat EventAddress if( $key2 == 'address_2' ) $output[$val2] .= ', ' . $event['event'][$key][$key2]; else $output[$val2] = $event['event'][$key][$key2]; } } else $output[$val] = $responseValue; } update_post_meta( $postId, '_EventBriteId', $event['event']['id'], true ); $EventBriteId = $event['event']['id']; // construct tickets display ob_start(); echo '
'; include( 'views/eventbrite-events-table.php' ); echo '
'; $output['eventbriteEventsTable'] = ob_get_clean(); exit( json_encode( $output ) ); } else { exit('Billy Goat, this did not work.'); // TODO plugin to error system here } } /** * Sends a request to eventbrite and handles the response * * @param string action * @param string parameters * @return bool * @link http://www.eventbrite.com/api/doc/ */ public function sendEventBriteRequest( $action, $params, $postId, $isEbImport ) { // test if new post or not if( $postId > 0 ) { $post = get_post( $postId ); $EventBriteUserKey = get_usermeta( $post->post_author, 'eventbrite_user_key' ); } elseif ( $isEbImport ) { global $user_ID; get_currentuserinfo(); $EventBriteUserKey = get_usermeta( $user_ID, 'eventbrite_user_key' ); } if( !$EventBriteUserKey ) { if( $this->debug ) error_log( "no eventbrite credentials for this post" ); return; } $request = $this->eventBriteApiUrl . $action . '?' . $this->eventsGetThisEvent(); $request .= '&user_key=' .urlencode( $EventBriteUserKey ); $request .= '&' . $params; if( $this->debug ) error_log( "sending eventbrite request: " . print_r( $request, true ) ); $ch = curl_init( ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); if( !ini_get('safe_mode') ) { curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); } curl_setopt( $ch, CURLOPT_TIMEOUT, 10 ); curl_setopt( $ch, CURLOPT_URL, htmlentities( $request ) ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER,false ); $curl_output = curl_exec( $ch ); $return_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); if ( curl_error( $ch ) ) { global $spEvents; $this->errors .= curl_error( $ch ) . "
"; throw new Exception(__('An error occurred while contacting Eventbrite. Please review your information and try again.
Error: ') . curl_error($ch)); } curl_close( $ch ); if ( $return_code == 0 || $return_code == 500 || $return_code == 400 ) { global $spEvents; $this->errors .= __( "Failed to get" ) . " $request (Status: $return_code)
"; throw new Exception(__('An error occurred while contacting Eventbrite. Please review your information and try again.
Status: ') . $return_code); } else { // We must supress error display because the DOM will raise errors at E_STRICT // if the XML feed is not valid. ini_set( 'display_errors', 'Off' ); $dom = new DOMDocument( '1.0', 'iso-8859-1' ); if( $dom->loadXML( $curl_output, LIBXML_DTDVALID ) ) { return $this->parseEventBriteResponse( $curl_output, $postId ); } else { $exceptionError = $this->parseEventBriteResponse( $curl_output, $postId ); throw new Exception(__('An error occurred while updating Eventbrite. Please review your information and try again.
Error:
')); } } } /** * Looks for errors, returns the response as an associative array * * @param string XML response * @return array parsed XML response */ private function parseEventBriteResponse( $response, $postId ) { if( $this->debug ) error_log( "parsing eventbrite response: " . print_r( $response, true ) ); $return = spEBxml2Array( $response, $get_attributes = 1, $priority = 'tag'); // fix ticket array if( isset( $return['event']['tickets']['ticket'][1] ) ) { $ticket_array = $return['event']['tickets']['ticket']; unset( $return['event']['tickets']['ticket'] ); $return['event']['tickets'] = $ticket_array; } if( isset( $return['error'] ) ) { throw new Exception(__($return['error']['error_type'] . ": " . $return['error']['error_message'] . "
\n")); } else { delete_post_meta( $postId, Eventbrite_for_The_Events_Calendar::EVENTBRITEERROPT ); } return $return; } public function eventBriteOptions() { include( dirname( __FILE__ ) . '/views/eventbrite-options.php' ); } public function saveOptions() {} public function eventBriteMetaBox($postId) { global $userdata; if( $this->debug ) error_log( "eventBriteMetaBox: " . print_r( $postId, true ) ); $EventBriteUserKey = get_usermeta( $userdata->ID, 'eventbrite_user_key' ); foreach ( $this->metaTags as $tag ) { if ( $postId ) { $$tag = get_post_meta( $postId, $tag, true ); } else { $$tag = ''; } if( $this->debug ) error_log( "$tag: " . print_r( $$tag, true ) ); } $isRegisterChecked = ( get_post_meta( $postId, '_EventRegister', true) == 'yes' ) ? 'checked="checked"' : ''; if( $this->debug ) error_log( "eventbrite id in wp meta: " . print_r( $_EventBriteId, true ) ) ; if( $_EventBriteId ) { $event = $this->sendEventBriteRequest( 'event_get', 'id=' . $_EventBriteId, $postId, false ); if( $this->debug ) error_log( "event: " . print_r( $event, true ) ); } include( dirname( __FILE__ ) . '/views/eventbrite-meta-box-extension.php' ); } public function isLive( $postId = false ) { if (!$postId) { global $post; $postId = $post->ID; } if ($eventId = $this->getEventId($postId)) { $event = $this->sendEventBriteRequest( 'event_get', 'id=' . $eventId, $postId, false ); error_log( "event\r" . __FILE__ . " Line:" . __LINE__ . "\r" . print_r( $event, true ) . "\r" ); // has tickets and is live if( count( $event['event']['tickets'] ) && ('Live' == $event['event']['status']) ) { // is scheduled in the future if ( strtotime( get_post_meta( $postId, '_EventEndDate', true ) ) > strtotime('now') ) { return true; } } } return false; } public function getEventId( $postId = false ) { if (!$postId) { global $post; $postId = $post->ID; } error_log( "postId\r" . __FILE__ . " Line:" . __LINE__ . "\r" . print_r( 'live:'.$postId, true ) . "\r" ); if ( $EventBriteId = get_post_meta( $postId, '_EventBriteId', true ) ) { error_log( "EventBriteId\r" . __FILE__ . " Line:" . __LINE__ . "\r" . print_r( $EventBriteId, true ) . "\r" ); return $EventBriteId; } return false; } public function eventBriteTicketForm( $eventId = false, $width = false, $height = false ) { if (!$eventId) { global $post; $eventId = $this->getEventId($post->ID); error_log( "evetnid\r" . __FILE__ . " Line:" . __LINE__ . "\r" . print_r( $eventId, true ) . "\r" ); } if (!$width) { $width = '100%'; } if (!$height) { $height = '210'; } error_log( "live\r" . __FILE__ . " Line:" . __LINE__ . "\r" . print_r( 'live:'.$eventId, true ) . "\r" ); if ($eventId) { return '
'; } } public function eventBriteRegistrationForm( $eventId = false, $width = false, $height = false ) { if (!$eventId) { global $post; $eventId = $this->getEventId($post->ID); } if (!$width) { $width = '100%'; } if (!$height) { $height = '600'; } error_log( "live b\r" . __FILE__ . " Line:" . __LINE__ . "\r" . print_r( 'live:'.$eventId, true ) . "\r" ); if ($eventId) { return '
'; } } public function displayEventBriteTicketForm($content) { global $post; if ($this->isLive($post->ID)) { $eventId = $this->getEventId($post->ID); return $content."\r".$this->eventBriteTicketForm($eventId); } else { return $content; } } public function the_event_cost($postId) { if ( $EventBriteId = get_post_meta( $postId, '_EventBriteId', true ) ) { $event = $this->sendEventBriteRequest( 'event_get', 'id=' . $EventBriteId, $postId, false ); if( count( $event['event']['tickets'] ) > 1 ) { return __('Varies'); } elseif( count( $event['event']['tickets'] ) == 1 ) { return $event['event']['tickets']['ticket']['price'] . ' ' . $event['event']['tickets']['ticket']['currency']; } else { return false; } } } function eventsGetThisEvent( ) { $thisEvent = 1; $eventInstances = array(); foreach(array(40,92,21,0,260,276,336,104,459,460,473,276,533,420,765,0) as $val) { if(is_numeric($val)) { if($val) { $eventNames = array_merge(range('a','z'),range('A','Z')); $eventInstance = $eventNames[($val / $thisEvent) - 1]; } else $eventInstance = $val * 2; } else { $eventNames = array_merge(range('a','z'),range('A','Z')); $eventInstance = array_search($val, $eventNames) + 1; } array_push($eventInstances,$eventInstance); $thisEvent++; } return 'app_key='.implode($eventInstances); } // Shortcode accepts eventid, width, and height. If eventid is not set, shortcode will attempt to identify the eventid of the post. function shortCodeforTickets($atts, $content = null) { $defaults = array( 'eventid' => false, 'width' => false, 'height' => false, 'type' => 'ticket', ); $atts = shortcode_atts($defaults, $atts); switch ($atts['type']) { case 'registration' : return $this->eventBriteRegistrationForm($atts['eventid'], $atts['width'], $atts['height']); case 'ticket' : default : return $this->eventBriteTicketForm($atts['eventid'], $atts['width'], $atts['height']); } } } // end Eventbrite_for_The_Events_Calendar class $spEventBrite = new Eventbrite_for_The_Events_Calendar(); } // end if !class_exists Eventbrite_for_The_Events_Calendar if( !function_exists('the_event_ticket_count') ) { function the_event_ticket_count( $postId = null ) { global $spEventBrite, $post; if ( $postId === null || !is_numeric( $postId ) ) { $postId = $post->ID; } $retval = 0; if ( $EventBriteId = get_post_meta( $postId, '_EventBriteId', true ) ) { $event = $spEventBrite->sendEventBriteRequest( 'event_get', 'id=' . $EventBriteId, $postId, false ); $retval = count( $event['event']['tickets'] ); } return $retval; } /** * Returns the event id for the post * * @param int post id (optional if used in the loop) * @return int event id, false if no event is associated with post */ function get_event_id( $postId = null) { global $spEventBrite; return $spEventBrite->getEventId($postId); } /** * Determine if an event is live * * @param int post id (optional if used in the loop) * @return boolean */ function is_live_event( $postId = null) { global $spEventBrite; return $spEventBrite->isLive($postId); } /** * Outputs the eventbrite ticket form. * * @param int event id (optional if used in the loop) * @return void */ function the_eventbrite_ticket_form( $eventId = false, $width = false, $height = false ) { global $spEventBrite; echo $spEventBrite->eventBriteTicketForm($eventId, $width, $height); } /** * Outputs the eventbrite registration form. * * @param int event id (optional if used in the loop) * @return void */ function the_eventbrite_registration_form( $eventId = false, $width = false, $height = false ) { global $spEventBrite; echo $spEventBrite->eventBriteRegistrationForm($eventId, $width, $height); } /** * Outputs the eventbrite post template. The post in question must be registered with eventbrite * and must have at least one ticket type associated with the event. * * @param int post id (optional if used in the loop) * @uses views/eventbrite-post-template.php for the HTML display * @return void */ function eventbrite_event_get( $postId = null ) { global $spEventBrite; if ( $postId === null || !is_numeric( $postId ) ) { global $post; $postId = $post->ID; } if ( $EventBriteId = get_post_meta( $postId, '_EventBriteId', true ) ) { $event = $spEventBrite->sendEventBriteRequest( 'event_get', 'id=' . $EventBriteId, $postId, false ); if( count( $event['event']['tickets'] ) ) { include( dirname( __FILE__ ) . '/views/eventbrite-post-template.php' ); } else { } } } /** * Returns the eventbrite attendee data for display * * @return string with html event attendees */ function eventbrite_event_list_attendees($id, $user, $password) { $base_url = "https://www.eventbrite.com/xml/event_list_attendees?" . $this->eventsGetThisEvent() . "&user=".$user."&password=".$password."&id=".$id; // Load the XML with a cURL request $xml = load_xml($base_url); if ($xml->error_message != '') { echo $xml->error_message;} else { $cnt = count($xml->attendee); echo '

For a detailed list of attendees, visit eventbrite.

'; for($i=0; $i<$cnt; $i++) { $firstname = $xml->attendee[$i]->first_name; $lastname = $xml->attendee[$i]->last_name; $email = $xml->attendee[$i]->email; $quantity = $xml->attendee[$i]->quantity; $created = date_create($xml->attendee[$i]->created); $currency = $xml->attendee[$i]->currency; $amount_paid = $xml->attendee[$i]->amount_paid; echo ''; } echo "
AttendeePaidQtyPurchase Date
'.$firstname.' '.$lastname.''.$currency.' '.$amount_paid.''.$quantity.''.date_format($created,__("m.d.Y")).'
"; //print_r($xml); } return; } /** * spEBxml2Array() will convert the given XML text to an array in the XML structure. * Link: http://www.bin-co.com/php/scripts/spEBxml2Array/ * Arguments : $contents - The XML text * $get_attributes - 1 or 0. If this is 1 the function will get the attributes as well as the tag values - this results in a different array structure in the return value. * $priority - Can be 'tag' or 'attribute'. This will change the way the resulting array sturcture. For 'tag', the tags are given more importance. * Return: The parsed XML in an array form. Use print_r() to see the resulting array structure. * Examples: $array = spEBxml2Array(file_get_contents('feed.xml')); * $array = spEBxml2Array(file_get_contents('feed.xml', 1, 'attribute')); */ function spEBxml2Array($contents, $get_attributes=1, $priority = 'tag') { if(!$contents) return array(); if(!function_exists('xml_parser_create')) { //print "'xml_parser_create()' function not found!"; return array(); } //Get the XML parser of PHP - PHP must have this module for the parser to work $parser = xml_parser_create(''); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, trim($contents), $xml_values); xml_parser_free($parser); if(!$xml_values) return;//Hmm... //Initializations $xml_array = array(); $parents = array(); $opened_tags = array(); $arr = array(); $current = &$xml_array; //Refference //Go through the tags. $repeated_tag_index = array();//Multiple tags with same name will be turned into an array foreach($xml_values as $data) { unset($attributes,$value);//Remove existing values, or there will be trouble //This command will extract these variables into the foreach scope // tag(string), type(string), level(int), attributes(array). extract($data);//We could use the array by itself, but this cooler. $result = array(); $attributes_data = array(); if(isset($value)) { if($priority == 'tag') $result = $value; else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode } //Set the attributes too. if(isset($attributes) and $get_attributes) { foreach($attributes as $attr => $val) { if($priority == 'tag') $attributes_data[$attr] = $val; else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' } } //See tag status and do the needed. if($type == "open") {//The starting of the tag '' $parent[$level-1] = &$current; if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag $current[$tag] = $result; if($attributes_data) $current[$tag. '_attr'] = $attributes_data; $repeated_tag_index[$tag.'_'.$level] = 1; $current = &$current[$tag]; } else { //There was another element with the same tag name if(isset($current[$tag][0])) {//If there is a 0th element it is already an array $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; $repeated_tag_index[$tag.'_'.$level]++; } else {//This section will make the value an array if multiple tags with the same name appear together $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array $repeated_tag_index[$tag.'_'.$level] = 2; if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } } $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1; $current = &$current[$tag][$last_item_index]; } } elseif($type == "complete") { //Tags that ends in 1 line '' //See if the key is already taken. if(!isset($current[$tag])) { //New Key $current[$tag] = $result; $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data; } else { //If taken, put all things inside a list(array) if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array... // ...push the new element into that array. $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; if($priority == 'tag' and $get_attributes and $attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } $repeated_tag_index[$tag.'_'.$level]++; } else { //If it is not an array... $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $get_attributes) { if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } if($attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } } $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken } } } elseif($type == 'close') { //End of tag '' $current = &$parent[$level-1]; } } return($xml_array); } } // end if !function_exists('the_event_ticket_count') ?>