/** * _get_cart_for_current_session_and_setup_new_transaction * generates a new EE_Transaction object and adds it to the $_transaction property. * * @access public * @param EE_Transaction $transaction * @return EE_Cart */ public function get_cart_for_transaction(EE_Transaction $transaction) { return EE_Cart::get_cart_from_txn($transaction); }
/** * refresh_entity_map * simply loops through the current transaction and updates each * model's entity map using EEM_Base::refresh_entity_map_from_db() * * @access public * @return bool */ protected function refresh_from_db() { // verify the transaction if ($this->transaction instanceof EE_Transaction && $this->transaction->ID()) { // pull fresh TXN data from the db $this->transaction = $this->transaction->get_model()->refresh_entity_map_from_db($this->transaction->ID()); // update EE_Checkout's cached primary_attendee object $this->primary_attendee_obj = $this->_refresh_primary_attendee_obj_from_db($this->transaction); // update EE_Checkout's cached payment object $payment = $this->transaction->last_payment(); $this->payment = $payment instanceof EE_Payment ? $payment : $this->payment; // update EE_Checkout's cached payment_method object $payment_method = $this->payment instanceof EE_Payment ? $this->payment->payment_method() : null; $this->payment_method = $payment_method instanceof EE_Payment_Method ? $payment_method : $this->payment_method; //now refresh the cart, based on the TXN $this->cart = EE_Cart::get_cart_from_txn($this->transaction); // verify cart if (!$this->cart instanceof EE_Cart) { $this->cart = EE_Registry::instance()->load_core('Cart'); } } else { EE_Error::add_error(__('A valid Transaction was not found when attempting to update the model entity mapper.', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__); return FALSE; } return TRUE; }
/** * _get_cart_for_transaction * * @access private * @param EE_Transaction $transaction * @return EE_Cart */ private function _get_cart_for_transaction($transaction) { $cart = $transaction instanceof EE_Transaction ? EE_Cart::get_cart_from_txn($transaction) : NULL; // verify cart if (!$cart instanceof EE_Cart) { $cart = EE_Registry::instance()->load_core('Cart'); } return $cart; }
/** * get_cart_for_transaction * * @access public * @param EE_Transaction $transaction * @return EE_Cart */ public function get_cart_for_transaction($transaction) { $session = EE_Registry::instance()->load_core('Session'); $cart = $transaction instanceof EE_Transaction ? EE_Cart::get_cart_from_txn($transaction, $session) : null; // verify cart if (!$cart instanceof EE_Cart) { $cart = EE_Registry::instance()->load_core('Cart'); } return $cart; }
/** * _validate_return * * @access private * @return bool */ private function _validate_offsite_return() { $TXN_ID = (int) EE_Registry::instance()->REQ->get('spco_txn', 0); if ($TXN_ID != $this->checkout->transaction->ID()) { // Houston... we might have a problem $invalid_TXN = false; // first gather some info $valid_TXN = EEM_Transaction::instance()->get_one_by_ID($TXN_ID); $primary_registrant = $valid_TXN instanceof EE_Transaction ? $valid_TXN->primary_registration() : null; // let's start by retrieving the cart for this TXN $cart = EE_Cart::get_cart_from_txn($this->checkout->transaction); if ($cart instanceof EE_Cart) { // verify that the current cart has tickets $tickets = $cart->get_tickets(); if (empty($tickets)) { $invalid_TXN = true; } } else { $invalid_TXN = true; } $valid_TXN_SID = $primary_registrant instanceof EE_Registration ? $primary_registrant->session_ID() : null; // validate current Session ID and compare against valid TXN session ID if (EE_Session::instance()->id() === null) { $invalid_TXN = true; } else { if (EE_Session::instance()->id() === $valid_TXN_SID) { // WARNING !!! // this could be PayPal sending back duplicate requests (ya they do that) // or it **could** mean someone is simply registering AGAIN after having just done so // so now we need to determine if this current TXN looks valid or not /** @type EE_Transaction_Processor $transaction_processor */ $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor'); // has this step even been started ? if ($transaction_processor->reg_step_completed($this->checkout->transaction, $this->slug() === false)) { // really? you're half way through this reg step, but you never started it ? $invalid_TXN = true; } } } if ($invalid_TXN) { // is the valid TXN completed ? if ($valid_TXN instanceof EE_Transaction) { /** @type EE_Transaction_Processor $transaction_processor */ $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor'); // has this step even been started ? $reg_step_completed = $transaction_processor->reg_step_completed($valid_TXN, $this->slug()); if ($reg_step_completed !== false && $reg_step_completed !== true) { // so it **looks** like this is a double request from PayPal // so let's try to pick up where we left off $this->checkout->transaction = $valid_TXN; $this->checkout->refresh_all_entities(true); return; } } // you appear to be lost? $this->_redirect_wayward_request($primary_registrant); } } }
public function test_save_cart() { $t2 = $this->new_typical_transaction(array('ticket_types' => 2)); $cart = EE_Cart::get_cart_from_txn($t2); EE_Registry::instance()->SSN->reset_data(array('cart')); $this->assertNotEquals(EE_Registry::instance()->SSN->get_session_data('cart'), $cart); $cart->save_cart(); $this->assertEquals(EE_Registry::instance()->SSN->get_session_data('cart'), $cart); }
/** * init - initial module setup * * @access public * @return void */ public function init() { // add no cache headers add_action('wp_head', array('EED_Single_Page_Checkout', 'nocache_headers'), 10); // plus a little extra for nginx add_filter('nocache_headers', array('EED_Single_Page_Checkout', 'nocache_headers_nginx'), 10, 1); // prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); // load classes if (!isset(EE_Registry::instance()->REQ)) { EE_Registry::instance()->load_core('Request_Handler'); } EE_Registry::instance()->REQ->set_espresso_page(TRUE); // printr( EE_Registry::instance()->REQ, 'EE_Registry::instance()->REQ <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); // make sure reg steps array is setup if (empty(self::$_reg_steps)) { EED_Single_Page_Checkout::setup_reg_steps_array(); } $this->_continue_reg = apply_filters('FHEE__EED_Single_Page_Checkout__init___continue_reg', TRUE); $this->set_templates(); $this->_reg_page_base_url = get_permalink(EE_Registry::instance()->CFG->core->reg_page_id); // grab what step we're on $this->_current_step = !empty($this->_current_step) ? $this->_current_step : 'attendee_information'; $this->_current_step = EE_Registry::instance()->REQ->is_set('step') ? EE_Registry::instance()->REQ->get('step') : $this->_current_step; // returning from the thank you page ? $this->_reg_url_link = EE_Registry::instance()->REQ->is_set('e_reg_url_link') ? EE_Registry::instance()->REQ->get('e_reg_url_link') : FALSE; // if reg_url_link is present in the request, then we are only being sent back to SPCO to retry the payment if ($this->_reg_url_link) { // are we returning to the page to edit attendee info or retry a payment? $this->_revisit = EE_Registry::instance()->REQ->is_set('revisit') && EE_Registry::instance()->REQ->get('revisit') == 1 ? TRUE : FALSE; if ($this->_revisit) { // remove all other pages from the reg steps array except the one required by the revisit self::$_reg_steps = array_intersect_key(self::$_reg_steps, array($this->_current_step => TRUE)); } // let's get that transaction data $this->_transaction = EE_Registry::instance()->load_model('Transaction')->get_transaction_from_reg_url_link(); // printr( $this->_transaction, 'transaction_from_reg_url_link <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); // d( $this->_transaction ); // verify transaction if ($this->_transaction instanceof EE_Transaction) { // d( $this->_transaction ); // and get the cart that was used in the original txn $this->_cart = EE_Cart::get_cart_from_txn($this->_transaction); // if ( $this->_transaction instanceof EE_Transaction && $this->_revisit ) { $registrations = $this->_transaction->registrations(array(), TRUE); usort($registrations, array('EED_Single_Page_Checkout', 'sort_registrations_by_REG_count')); foreach ($registrations as $registration) { //d( $registration ); // verify registration if ($registration instanceof EE_Registration) { // we display all attendee info for the primary registrant if ($this->_reg_url_link == $registration->reg_url_link() && $registration->is_primary_registrant()) { $this->_primary_revisit = TRUE; break; } else { if ($this->_reg_url_link != $registration->reg_url_link()) { // but hide info if it doesn't belong to you $this->_transaction->clear_cache('Registration', $registration->ID()); } } } } // } } else { EE_Error::add_error(__('Your Registration and Transaction information could not be retrieved from the db.', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__); } } else { $this->_transaction = EE_Registry::instance()->SSN->get_session_data('transaction'); // printr( $this->_transaction, '$this->_transaction <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); $this->_cart = EE_Registry::instance()->load_core('Cart'); // printr( $this->_transaction->registrations(), '$this->_transaction->registrations() <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); } // verify cart if (!$this->_cart instanceof EE_Cart) { $this->_cart = EE_Registry::instance()->load_core('Cart'); } // verify transaction if ($this->_transaction instanceof EE_Transaction) { //printr( $this->_transaction->registrations(), '$transaction->registrations() <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); $ID = $this->_transaction->ID(); if (!$this->_revisit && $ID) { // but if this transaction has already been saved to the db earlier in the same session (ie: it's not a revisit)... then let's pull that if (!($this->_transaction = EEM_Transaction::instance()->get_one_by_ID($ID))) { EE_Error::add_error(__('The Transaction could not be retrieved from the db when attempting to process your registration information', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__); return; } } } elseif (!$this->_revisit) { $this->_initialize_transaction(); } else { } // and verify registrations have been set (first check cached REGs) if ($this->_transaction instanceof EE_Transaction && $this->_transaction->registrations(array(), TRUE) == NULL) { // then check the db if ($this->_transaction->registrations() == NULL) { $this->_initialize_registrations(); } } // don't need payment options for a completed transaction (note: if we ever implement donations, then this will need overriding) if ($this->_transaction->is_completed() || $this->_transaction->is_overpaid()) { unset(self::$_reg_steps['payment_options']); } // and the next step $this->_set_next_step(); // load css and js add_action('wp_enqueue_scripts', array('EED_Single_Page_Checkout', 'load_css'), 10); add_action('wp_enqueue_scripts', array('EED_Single_Page_Checkout', 'load_js'), 10); }