/** * Prepares the payment form * and returns HTML Form to be displayed to the user * for the second of two payments (when cart has both recurring and non-recurring items) * * Submit button target for onsite payments & return URL for offsite payments should be: * index.php?option=com_tienda&view=checkout&task=confirmPayment&orderpayment_type=xxxxxx * where xxxxxxx = $_element = the plugin's filename * * @return string HTML to display */ public function _secondPayment($order_id) { $order = JTable::getInstance('Orders', 'TiendaTable'); $order->load($order_id); $items = $order->getItems(); $vars->is_recurring = $order->isRecurring(); // create a new orderpayment record // we're creating a new orderpayment record, // this one just for the recurring item $orderpayment = JTable::getInstance('OrderPayments', 'TiendaTable'); $orderpayment->order_id = $order->order_id; $orderpayment->orderpayment_type = $this->_element; $orderpayment->transaction_status = JText::_('COM_TIENDA_INCOMPLETE'); $amount = $order->recurring_trial ? $order->recurring_trial_price : $order->recurring_amount; $orderpayment->orderpayment_amount = $amount; if (!$orderpayment->save()) { // Output error message and halt JError::raiseNotice('Error Saving Pending Payment Record', $orderpayment->getError()); return false; } // prepare the payment form $vars = new JObject(); $vars->order_id = $order_id; $vars->orderpayment_id = $orderpayment->orderpayment_id; $vars->orderpayment_amount = $orderpayment->orderpayment_amount; $vars->orderpayment_type = $this->_element; $vars->cmd = '_xclick-subscriptions'; $vars->_calculateTrialPeriod($order); $vars->order = $order; $vars->orderitems = $items; // set payment plugin variables $vars->merchant_email = $this->_getParam('merchant_email'); $vars->post_url = $this->_getPostUrl(); // are there both recurring and non-recurring items in cart? // if so, then user must perform two checkouts, // so store a flag in the return_url $vars->return_url = JURI::root() . "index.php?option=com_tienda&view=checkout&task=confirmPayment&orderpayment_type=" . $this->_element . "&paction=display_message"; $vars->cancel_url = JURI::root() . "index.php?option=com_tienda&view=checkout&task=confirmPayment&orderpayment_type=" . $this->_element . "&paction=cancel"; $vars->notify_url = JURI::root() . "index.php?option=com_tienda&view=checkout&task=confirmPayment&orderpayment_type=" . $this->_element . "&paction=process&tmpl=component"; $vars->currency_code = $this->_getParam('currency', 'USD'); // TODO Eventually use: Tienda::getInstance()->get('currency'); // set variables for user info $row = JTable::getInstance('OrderInfo', 'TiendaTable'); $row->load(array('order_id' => $order_id)); $data = array('orderinfo' => $row); $vars->first_name = $data['orderinfo']->shipping_first_name; $vars->last_name = $data['orderinfo']->shipping_last_name; $vars->email = $data['orderinfo']->user_email; $vars->address_1 = $data['orderinfo']->shipping_address_1; $vars->address_2 = $data['orderinfo']->shipping_address_2; $vars->city = $data['orderinfo']->shipping_city; //get 2-character IS0-3166-1 country code $countryTable = JTable::getInstance('Countries', 'TiendaTable'); $countryTable->load($data['orderinfo']->shipping_country_id); $vars->country = $countryTable->country_isocode_2; //$vars->country = $data['orderinfo']->shipping_country_name; $vars->region = $data['orderinfo']->shipping_zone_name; $vars->postal_code = $data['orderinfo']->shipping_postal_code; $html = $this->_getLayout('secondpayment', $vars); $html .= $this->_getLayout('prepayment', $vars); return $html; }