Ejemplo n.º 1
0
/**
 * @param boolean $result
 * @param EM_Booking $EM_Booking
 * @return boolean
 */
function bp_em_record_activity_booking_save($result, $EM_Booking)
{
    if ($result) {
        $rejected_statuses = array(0, 2, 3);
        //these statuses apply to rejected/cancelled bookings
        $user = $EM_Booking->get_person();
        $member_link = bp_core_get_user_domain($user->ID);
        $user_link = "<a href='" . $member_link . "/'>" . $user->display_name . "</a>";
        $event_link = $EM_Booking->get_event()->output('#_EVENTLINK');
        $status = $EM_Booking->booking_status;
        $EM_Event = $EM_Booking->get_event();
        if (empty($EM_Event->group_id)) {
            if ($status == 1 || !get_option('dbem_bookings_approval') && $status < 2) {
                $action = sprintf(__('%s is attending %s.', 'dbem'), $user_link, $event_link);
            } elseif (($EM_Booking->previous_status == 1 || !get_option('dbem_bookings_approval') && $EM_Booking->previous_status < 2) && in_array($status, $rejected_statuses)) {
                $action = sprintf(__('%s will not be attending %s anymore.', 'dbem'), $user_link, $event_link);
            }
        } else {
            $group = new BP_Groups_Group($EM_Event->group_id);
            $group_link = '<a href="' . bp_get_group_permalink($group) . '">' . bp_get_group_name($group) . '</a>';
            if ($status == 1 || !get_option('dbem_bookings_approval') && $status < 2) {
                $action = sprintf(__('%s is attending %s of the group %s.', 'dbem'), $user_link, $event_link, $group_link);
            } elseif (($EM_Booking->previous_status == 1 || !get_option('dbem_bookings_approval') && $EM_Booking->previous_status < 2) && in_array($status, $rejected_statuses)) {
                $action = sprintf(__('%s will not be attending %s of group %s anymore.', 'dbem'), $user_link, $event_link, $group_link);
            }
        }
        if (!empty($action)) {
            if (empty($EM_Event->group_id)) {
                bp_em_record_activity(array('user_id' => $EM_Booking->person->ID, 'action' => $action, 'primary_link' => $EM_Event->output('#_EVENTURL'), 'type' => 'new_booking', 'item_id' => $EM_Event->event_id, 'secondary_item_id' => $EM_Booking->booking_id, 'hide_sitewide' => $EM_Event->event_private));
            } else {
                //tis a group event
                bp_em_record_activity(array('component' => 'groups', 'item_id' => $EM_Event->group_id, 'user_id' => $EM_Booking->person->ID, 'action' => $action, 'primary_link' => $EM_Event->output('#_EVENTURL'), 'type' => 'new_booking', 'secondary_item_id' => $EM_Booking->booking_id, 'hide_sitewide' => $EM_Event->event_private));
            }
        }
    }
    return $result;
}
 /**
  * @param string $replace
  * @param EM_Booking $EM_Booking
  * @param string $full_result
  * @return string
  */
 function placeholders($replace, $EM_Booking, $full_result)
 {
     if (empty($replace) || $replace == $full_result) {
         $user = $EM_Booking->get_person();
         $EM_Form = self::get_form($EM_Booking->event_id);
         if ($full_result == '#_BOOKINGFORMAttendee') {
             $replace = '';
             foreach ($EM_Form->form_fields as $field) {
                 $replace .= "\r\n" . $field['label'] . ': ';
                 if (!empty($user->{$field}['fieldid'])) {
                     //user profile is freshest, using this
                     $replace .= $user->{$field}['fieldid'];
                 } elseif (!empty($EM_Booking->booking_meta['registration'][$field['fieldid']])) {
                     //reg fields only exist as reg fields
                     if (!is_array($EM_Booking->booking_meta['registration'][$field['fieldid']])) {
                         $replace .= $EM_Booking->booking_meta['registration'][$field['fieldid']];
                     } else {
                         $replace .= implode(', ', $EM_Booking->booking_meta['registration'][$field['fieldid']]);
                     }
                 } elseif (!empty($EM_Booking->booking_meta['booking'][$field['fieldid']])) {
                     //match for custom field value
                     if (!is_array($EM_Booking->booking_meta['booking'][$field['fieldid']])) {
                         $replace .= $EM_Booking->booking_meta['booking'][$field['fieldid']];
                     } else {
                         $replace .= implode(', ', $EM_Booking->booking_meta['booking'][$field['fieldid']]);
                     }
                 }
             }
         }
     }
     return $replace;
     //no need for a filter, use the em_booking_email_placeholders filter
 }
Ejemplo n.º 3
0
 /**
  * @param string $replace
  * @param EM_Booking $EM_Booking
  * @param string $full_result
  * @return string
  */
 function placeholders($replace, $EM_Booking, $full_result)
 {
     if (empty($replace) || $replace == $full_result) {
         $user = $EM_Booking->get_person();
         $EM_Form = self::get_form($EM_Booking->event_id, $EM_Booking);
         if ($full_result == '#_BOOKINGFORMCUSTOMREG{user_name}' || $full_result == '#_BOOKINGFORMCUSTOM{user_name}') {
             //special user_name case
             if (!is_user_logged_in()) {
                 $replace = $EM_Booking->get_person()->get_name();
             } else {
                 $replace = $user->get_name();
             }
         } elseif ($full_result == '#_BOOKINGFORMCUSTOMFIELDS') {
             $replace = '';
             foreach ($EM_Form->form_fields as $field) {
                 if ($field['type'] != 'html') {
                     $replace .= "\r\n" . $field['label'] . ': ';
                     if (!empty($user->{$field}['fieldid'])) {
                         //user profile is freshest, using this
                         $replace .= $user->{$field}['fieldid'];
                     } elseif (!empty($EM_Booking->booking_meta['registration'][$field['fieldid']])) {
                         //reg fields only exist as reg fields
                         $replace .= $EM_Form->get_formatted_value($field, $EM_Booking->booking_meta['registration'][$field['fieldid']]);
                     } elseif (!empty($EM_Booking->booking_meta['booking'][$field['fieldid']])) {
                         //match for custom field value
                         $replace .= $EM_Form->get_formatted_value($field, $EM_Booking->booking_meta['booking'][$field['fieldid']]);
                     }
                 }
             }
         } else {
             foreach ($EM_Form->form_fields as $field) {
                 if ($full_result == '#_BOOKINGFORMCUSTOM{' . $field['fieldid'] . '}' || $full_result == '#_BOOKINGFORMCUSTOMREG{' . $field['fieldid'] . '}') {
                     $replace = '';
                     if (!empty($user->{$field}['fieldid'])) {
                         //user profile is freshest, using this
                         $replace = $user->{$field}['fieldid'];
                     } elseif (!empty($EM_Booking->booking_meta['registration'][$field['fieldid']])) {
                         //reg fields only exist as reg fields
                         $replace = $EM_Form->get_formatted_value($field, $EM_Booking->booking_meta['registration'][$field['fieldid']]);
                     } elseif (!empty($EM_Booking->booking_meta['booking'][$field['fieldid']])) {
                         //match for custom field value
                         $replace = $EM_Form->get_formatted_value($field, $EM_Booking->booking_meta['booking'][$field['fieldid']]);
                     }
                 }
             }
         }
     }
     return $replace;
     //no need for a filter, use the em_booking_email_placeholders filter
 }
 /**
  * Retreive the paypal vars needed to send to the gatway to proceed with payment
  * @param EM_Booking $EM_Booking
  */
 function get_paypal_vars($EM_Booking)
 {
     global $wp_rewrite, $EM_Notices;
     $notify_url = $this->get_payment_return_url();
     $paypal_vars = array('business' => get_option('em_' . $this->gateway . "_email"), 'cmd' => '_cart', 'upload' => 1, 'currency_code' => get_option('dbem_bookings_currency', 'USD'), 'notify_url' => $notify_url, 'custom' => $EM_Booking->booking_id . ':' . $EM_Booking->event_id, 'charset' => 'UTF-8', 'bn' => 'NetWebLogic_SP');
     if (get_option('em_' . $this->gateway . "_lc")) {
         $paypal_vars['lc'] = get_option('em_' . $this->gateway . "_lc");
     }
     //address fields`and name/email fields to prefill on checkout page (if available)
     $paypal_vars['email'] = $EM_Booking->get_person()->user_email;
     $paypal_vars['first_name'] = $EM_Booking->get_person()->first_name;
     $paypal_vars['last_name'] = $EM_Booking->get_person()->last_name;
     if (EM_Gateways::get_customer_field('address', $EM_Booking) != '') {
         $paypal_vars['address1'] = EM_Gateways::get_customer_field('address', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('address_2', $EM_Booking) != '') {
         $paypal_vars['address2'] = EM_Gateways::get_customer_field('address_2', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('city', $EM_Booking) != '') {
         $paypal_vars['city'] = EM_Gateways::get_customer_field('city', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('state', $EM_Booking) != '') {
         $paypal_vars['state'] = EM_Gateways::get_customer_field('state', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('zip', $EM_Booking) != '') {
         $paypal_vars['zip'] = EM_Gateways::get_customer_field('zip', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('country', $EM_Booking) != '') {
         $paypal_vars['country'] = EM_Gateways::get_customer_field('country', $EM_Booking);
     }
     //tax is added regardless of whether included in ticket price, otherwise we can't calculate post/pre tax discounts
     if ($EM_Booking->get_price_taxes() > 0 && !get_option('em_' . $this->gateway . "_inc_tax")) {
         $paypal_vars['tax_cart'] = round($EM_Booking->get_price_taxes(), 2);
     }
     if (get_option('em_' . $this->gateway . "_return") != "") {
         $paypal_vars['return'] = get_option('em_' . $this->gateway . "_return");
     }
     if (get_option('em_' . $this->gateway . "_cancel_return") != "") {
         $paypal_vars['cancel_return'] = get_option('em_' . $this->gateway . "_cancel_return");
     }
     if (get_option('em_' . $this->gateway . "_format_logo") !== false) {
         $paypal_vars['cpp_logo_image'] = get_option('em_' . $this->gateway . "_format_logo");
     }
     if (get_option('em_' . $this->gateway . "_border_color") !== false) {
         $paypal_vars['cpp_cart_border_color'] = get_option('em_' . $this->gateway . "_format_border");
     }
     $count = 1;
     foreach ($EM_Booking->get_tickets_bookings()->tickets_bookings as $EM_Ticket_Booking) {
         /* @var $EM_Ticket_Booking EM_Ticket_Booking */
         //divide price by spaces for per-ticket price
         //we divide this way rather than by $EM_Ticket because that can be changed by user in future, yet $EM_Ticket_Booking will change if booking itself is saved.
         if (!get_option('em_' . $this->gateway . "_inc_tax")) {
             $price = $EM_Ticket_Booking->get_price() / $EM_Ticket_Booking->get_spaces();
         } else {
             $price = $EM_Ticket_Booking->get_price_with_taxes() / $EM_Ticket_Booking->get_spaces();
         }
         if ($price > 0) {
             $paypal_vars['item_name_' . $count] = wp_kses_data($EM_Ticket_Booking->get_ticket()->name);
             $paypal_vars['quantity_' . $count] = $EM_Ticket_Booking->get_spaces();
             $paypal_vars['amount_' . $count] = round($price, 2);
             $count++;
         }
     }
     //calculate discounts, if any:
     $discount = $EM_Booking->get_price_discounts_amount('pre') + $EM_Booking->get_price_discounts_amount('post');
     if ($discount > 0) {
         $paypal_vars['discount_amount_cart'] = $discount;
     }
     return apply_filters('em_gateway_paypal_get_paypal_vars', $paypal_vars, $EM_Booking, $this);
 }
 /**
  * Retreive the authorize_aim vars needed to send to the gateway to proceed with payment
  * @param EM_Booking $EM_Booking
  */
 function authorize_and_capture($EM_Booking)
 {
     global $EM_Notices;
     $sale = $this->get_api();
     //Get transaction ID for authorization/capture
     $sale->amount = $amount = $EM_Booking->get_price(false, false, true);
     $sale->exp_date = $_REQUEST['x_exp_date_month'] . '/' . $_REQUEST['x_exp_date_year'];
     $sale->card_num = $_REQUEST['x_card_num'];
     $sale->card_code = $_REQUEST['x_card_code'];
     //Email Info
     $sale->email_customer = get_option('em_' . $this->gateway . '_email_customer', 0) ? '1' : '0';
     //for later
     $sale->header_email_receipt = get_option('em_' . $this->gateway . '_header_email_receipt');
     $sale->footer_email_receipt = get_option('em_' . $this->gateway . '_footer_email_receipt');
     //Order Info
     $sale->invoice_num = $EM_Booking->booking_id;
     $sale->description = preg_replace('/[^a-zA-Z0-9\\s]/i', "", $EM_Booking->get_event()->event_name);
     //clean event name
     //Customer Info
     $sale->email = $EM_Booking->get_person()->user_email;
     $sale->customer_ip = $_SERVER['REMOTE_ADDR'];
     $sale->cust_id = get_option('dbem_bookings_registration_disable') ? 'booking-' . $EM_Booking->booking_id : 'user-' . $EM_Booking->get_person()->ID;
     //Address Info
     $names = explode(' ', $EM_Booking->get_person()->get_name());
     if (!empty($names[0])) {
         $sale->first_name = array_shift($names);
     }
     if (implode(' ', $names) != '') {
         $sale->last_name = implode(' ', $names);
     }
     //address slightly special address field
     $address = '';
     if (EM_Gateways::get_customer_field('address', $EM_Booking) != '') {
         $address = EM_Gateways::get_customer_field('address', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('address_2', $EM_Booking) != '') {
         $address .= ', ' . EM_Gateways::get_customer_field('address_2', $EM_Booking);
     }
     if (!empty($address)) {
         $sale->address = substr($address, 0, 60);
     }
     //cut off at 60 characters
     if (EM_Gateways::get_customer_field('city', $EM_Booking) != '') {
         $sale->city = EM_Gateways::get_customer_field('city', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('state', $EM_Booking) != '') {
         $sale->state = EM_Gateways::get_customer_field('state', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('zip', $EM_Booking) != '') {
         $sale->zip = EM_Gateways::get_customer_field('zip', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('country', $EM_Booking) != '') {
         $countries = em_get_countries();
         $sale->country = $countries[EM_Gateways::get_customer_field('country', $EM_Booking)];
     }
     if (EM_Gateways::get_customer_field('phone', $EM_Booking) != '') {
         $sale->phone = EM_Gateways::get_customer_field('phone', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('fax', $EM_Booking) != '') {
         $sale->fax = EM_Gateways::get_customer_field('fax', $EM_Booking);
     }
     if (EM_Gateways::get_customer_field('company', $EM_Booking) != '') {
         $sale->company = EM_Gateways::get_customer_field('company', $EM_Booking);
     }
     //Itemized Billing
     $tax_enabled = get_option('dbem_bookings_tax') > 0 ? 'Y' : 'N';
     foreach ($EM_Booking->get_tickets_bookings()->tickets_bookings as $EM_Ticket_Booking) {
         $price = round($EM_Ticket_Booking->get_price() / $EM_Ticket_Booking->get_spaces(), 2);
         if ($price > 0) {
             $ticket_name = substr($EM_Ticket_Booking->get_ticket()->ticket_name, 0, 31);
             $sale->addLineItem($EM_Ticket_Booking->get_ticket()->ticket_id, $ticket_name, $EM_Ticket_Booking->get_ticket()->ticket_description, $EM_Ticket_Booking->get_spaces(), $price, $tax_enabled);
         }
     }
     if ($tax_enabled == 'Y') {
         $sale->tax = number_format($EM_Booking->get_price_taxes(), 2);
     }
     //Add discounts to itemized billing
     $discount = $EM_Booking->get_price_discounts_amount('pre') + $EM_Booking->get_price_discounts_amount('post');
     if ($discount > 0) {
         $sale->addLineItem(0, __('Discount', 'em-pro'), '', 1, $discount, 'N');
     }
     //Get Payment
     $sale = apply_filters('em_gateawy_authorize_aim_sale_var', $sale, $EM_Booking, $this);
     $response = $sale->authorizeAndCapture();
     //Handle result
     $result = $response->approved == true;
     if ($result) {
         $EM_Booking->booking_meta[$this->gateway] = array('txn_id' => $response->transaction_id, 'amount' => $amount);
         $this->record_transaction($EM_Booking, $amount, 'USD', date('Y-m-d H:i:s', current_time('timestamp')), $response->transaction_id, 'Completed', '');
     } else {
         $EM_Booking->add_error($response->response_reason_text);
     }
     //Return transaction_id or false
     return apply_filters('em_gateway_authorize_aim_authorize', $result, $EM_Booking, $this);
 }
 /**
  * @param string $replace
  * @param EM_Booking $EM_Booking
  * @param string $full_result
  * @return string
  */
 public static function placeholders($replace, $EM_Booking, $full_result)
 {
     if (empty($replace) || $replace == $full_result) {
         $user = $EM_Booking->get_person();
         $EM_Form = self::get_form($EM_Booking->event_id);
         if ($full_result == '#_BOOKINGATTENDEES') {
             $replace = '';
             ob_start();
             emp_locate_template('placeholders/bookingattendees.php', true, array('EM_Booking' => $EM_Booking));
             $replace = ob_get_clean();
         }
     }
     return $replace;
     //no need for a filter, use the em_booking_email_placeholders filter
 }
	/**
	* attempt to process payment
	* @param EM_Booking $EM_Booking
	* @return boolean
	*/
	public function processPayment($EM_Booking){
		// process the payment
		$isLiveSite = !(get_option('em_' . EM_EWAY_GATEWAY . '_mode') == 'sandbox');
		if (!$isLiveSite && get_option('em_' . EM_EWAY_GATEWAY . '_test_force')) {
			$customerID = EWAY_PAYMENTS_TEST_CUSTOMER;
		}
		else {
			$customerID = get_option('em_' . EM_EWAY_GATEWAY . '_cust_id');
		}

		if (get_option('em_' . EM_EWAY_GATEWAY . '_stored')) {
			$eway = new EwayPaymentsStoredPayment($customerID, $isLiveSite);
		}
		else {
			$eway = new EwayPaymentsPayment($customerID, $isLiveSite);
		}

		$eway->invoiceDescription			= $EM_Booking->get_event()->event_name;
		//~ $eway->invoiceDescription		= $EM_Booking->output('#_BOOKINGTICKETDESCRIPTION');
		$eway->invoiceReference				= $EM_Booking->booking_id;						// customer invoice reference
		$eway->transactionNumber			= $EM_Booking->booking_id;						// transaction reference
		$eway->cardHoldersName				= self::getPostValue('x_card_name');
		$eway->cardNumber					= strtr(self::getPostValue('x_card_num'), array(' ' => '', '-' => ''));
		$eway->cardExpiryMonth				= self::getPostValue('x_exp_date_month');
		$eway->cardExpiryYear				= self::getPostValue('x_exp_date_year');
		$eway->cardVerificationNumber		= self::getPostValue('x_card_code');
		$eway->emailAddress					= $EM_Booking->get_person()->user_email;
		$eway->postcode						= self::getPostValue('zip');

		// for Beagle (free) security
		if (get_option('em_' . EM_EWAY_GATEWAY . '_beagle')) {
			$eway->customerCountryCode		= EM_Gateways::get_customer_field('country', $EM_Booking);
		}

		// attempt to split name into parts, and hope to not offend anyone!
		$names = explode(' ', $EM_Booking->get_person()->get_name());
		if (!empty($names[0])) {
			$eway->firstName				= array_shift($names);		// remove first name from array
		}
		$eway->lastName						= trim(implode(' ', $names));

		// use cardholder name for last name if no customer name entered
		if (empty($eway->firstName) && empty($eway->lastName)) {
			$eway->lastName = $eway->cardHoldersName;
		}

		// aggregate street, city, state, country into a single string
		$parts = array (
			EM_Gateways::get_customer_field('address', $EM_Booking),
			EM_Gateways::get_customer_field('address_2', $EM_Booking),
			EM_Gateways::get_customer_field('city', $EM_Booking),
			EM_Gateways::get_customer_field('state', $EM_Booking),
			self::getCountryName(EM_Gateways::get_customer_field('country', $EM_Booking)),
		);
		$eway->address						= implode(', ', array_filter($parts, 'strlen'));

		// if live, pass through amount exactly, but if using test site, round up to whole dollars or eWAY will fail
		$amount = $EM_Booking->get_price(false, false, true);
		$amount = apply_filters('em_eway_amount', $amount, $EM_Booking);
		$eway->amount						= $isLiveSite ? $amount : ceil($amount);

		// allow plugins/themes to modify invoice description and reference, and set option fields
		$eway->invoiceDescription			= apply_filters('em_eway_invoice_desc', $eway->invoiceDescription, $EM_Booking);
		$eway->invoiceReference				= apply_filters('em_eway_invoice_ref', $eway->invoiceReference, $EM_Booking);
		$eway->option1						= apply_filters('em_eway_option1', '', $EM_Booking);
		$eway->option2						= apply_filters('em_eway_option2', '', $EM_Booking);
		$eway->option3						= apply_filters('em_eway_option3', '', $EM_Booking);

		// Get Payment
		try {
			$result = false;
			$response = $eway->processPayment();

			if ($response->status) {
				// transaction was successful, so record transaction number and continue
				$EM_Booking->booking_meta[EM_EWAY_GATEWAY] = array(
					'txn_id'	=> $response->transactionNumber,
					'authcode'	=> $response->authCode,
					'amount'	=> $response->amount,
				);

				$notes = array();
				if (!empty($response->authCode)) {
					$notes[] = 'Authcode: ' . $response->authCode;
				}
				if (!empty($response->beagleScore)) {
					$notes[] = 'Beagle score: ' . $response->beagleScore;
				}
				$note = implode("\n", $notes);

				$status = get_option('em_' . EM_EWAY_GATEWAY . '_stored') ? 'Pending' : 'Completed';
				$this->record_transaction($EM_Booking, $response->amount, 'AUD', date('Y-m-d H:i:s', current_time('timestamp')), $response->transactionNumber, $status, $note);
				$result = true;
			}
			else {
				// transaction was unsuccessful, so record the error
				$EM_Booking->add_error($response->error);
			}
		}
		catch (Exception $e) {
			// an exception occured, so record the error
			$EM_Booking->add_error($e->getMessage());
			return;
		}

		// Return status
		return apply_filters('em_gateway_eway_authorize', $result, $EM_Booking, $this);
	}