Project

General

Profile

Shipper Plugins » History » Revision 4

Revision 3 (Valérie Isaksen, 07/14/2011 04:29 PM) → Revision 4/5 (Valérie Isaksen, 10/18/2011 03:35 PM)

h1. Shipper Plugins 


 Shipper plugins are used both in the front-end and the backend. They must be created as classes deriving from the base class *vmShipperPlugin*: 
 <pre><code class="php"> 
 class plgVmShipper<myPlugin> extends vmShipperPlugin { 
	 function plgVmPayment<myPlugin>(&$subject, $config) { 
		 $this->_pelement = basename(__FILE__, '.php'); 	 // Required! 
		 $this->_createTable(); 				 // Required, see below 
		 parent::__construct($subject, $config); 
	 } 
 } 
 </code></pre> 

 Here's a short overview of the events: 
 * When a shopper selects a shipper, *plgOnSelectShipper()* is fired. It displays the shipper and can be used for collecting extra - shipper specific - info. 

 
 * After selecting, *plgVmShipperSelected()* can be used to store extra shipper info in the cart. The selected shipper ID will be stored in the cart by the checkout process before this method is fired. 

 
 * *plgOnConfirmShipper()* is fired when the order is confirmed and stored to the database. It is called before the rest of the order or stored, when reimplemented, it _must_ include a call to parent::plgOnConfirmShipper() (or execute the same steps to put all data in the cart) 

 * *plgVmOnCheckAutomaticSelectedShipping()* is fired during checkout process. It is used to check how shipping 
 When a stored order is displayed in the backend, the following events are used: 
 * *plgVmOnShowOrderShipperBE()* displays specific data about (a) shipment(s) (NOTE: this plugin is _OUTSIDE_ any form!) 
 * *plgVmOnShowOrderLineShipperBE()*) can be used to show information about a single orderline, e.g. display a package code at line level when more packages are shipped. 
 * *plgVmOnEditOrderLineShipperBE() can be used add a package code for an order line when more packages are shipped. 
 * *plgVmOnUpdateOrderShipperBE()* is fired inside a form. It can be used to add shipper data, like package code. 
 * *plgVmOnSaveOrderShipperBE()* is fired from the backend after the order has been saved. If one of the show methods above have to option to add or edit info, this method must be used to save the data. 
 * *plgVmOnUpdateOrderLine()* is fired from the backend after an order line has been saved. This method must be reimplemented if plgVmOnEditOrderLineShipperBE() is used. 
 * *plgVmOnShipperSelectedCalculatePrice()* is fired before the order is saved, and used to calculate the cart prices.  
 * *plgVmOnConfirmedOrderStoreShipperData()* This event is fired after the order has been stored; it gets the shipping method specific data. 

 The frontend 1 show method: 
 * plgVmOnShowOrderShipperFE() collects and displays specific data about (a) shipment(s) 

 Below is the list with events and a description on what moment they are fired. 

 * *plgVmOnSelectShipper()* - This event is fired during the checkout process. It allows the shopper to select one of the available shippers. 
 It should display a radio button (name: shipper_id) to select the shipper. In the description, the shipping cost can also be displayed, based on the shipping conditions total order weight and the shipto country (this wil be calculated again during order confirmation) 
 +Return:+ 
 array of HTML code to display the form 
 +Parameters:+ 
 # (VirtueMartCart object)    Cart object 
 # (integer, default 0) ID of the currently shipper selected 

 * *plgVmOnShipperSelected()* - This event is fired after the shipping method has been selected. It can be used to store additional shipper info in the cart. 
 +Return:+ 
 True on success, succes, false on failures, null when this plugin was not selected. 
 On errors, JError::raiseWarning (or JError::raiseError) must be used to set a message. 
 +Parameters:+ 
 # (VirtueMartCart object)    Cart object 
 # (integer, default 0) ID of the shipper selected 

 * *plgVmOnShipperSelectedCalculatePrice()* - This event is fired before the order is saved, and used to calculate the shipping prices to save in the cart. 
 This function must call    the function setCartPrices($cart_prices, $shipping_value, $shipping_tax_id) 
 cart prices.   
 +Return:+ 
 True on success, false on failures, null when this plugin was not selected. 
 On errors, JError::raiseWarning (or JError::raiseError) must be used to set a message. 
 +Parameters:+ 
 # (VirtueMartCart object)    Cart object 
 # (Array) cart_prices. The plugin should fill in $cart_prices['salesPriceShipping'] and $cart_prices['shippingTax'] 
 # (string) (TableShippingCarriers    shipping_name object)    Shipping object containing: shipping_name 


 shipping_name, shipping_value, shipping_rate_vat_id  



 * *plgVmOnConfirmShipper()* - (not yet implemented) This event is fired after the payment has been processed; it selects the actual shipping rate    and/or order weight, and optionally writes extra info to the database (in which case this method must be reimplemented). 
 Reimplementation is not required, but when done, the following check MUST be made: 
 <pre><code class="php"> 
 if (!$this->selectedThisShipper($this->_selement, $_cart->shipper_id)) { 
	 return null; 
 }</code></pre> 
 +Return:+ 
 The shipping rate ID 
 Do _not_ return parent::plgVmOnConfirmShipper($_cart); it is valid but will produce extra overhead! 
 +Parameters:+ 
 # (VirtueMartCart object) Cart object 


 * *plgVmOnConfirmedOrderStoreShipperData()* (not yet implemented) This event is fired after the order has been stored; it gets the shipping method specific data. 
 +Return:+mixed Null when this method was not selected, otherwise true 
 #(integer) The order_id being processed 
 #(object) the cart 
 #array Price information for this order 


 



 * *plgVmOnShowOrderShipperBE()* - This method is fired when showing the order details in the backend. It displays the shipper-specific data. 
 NOTE, this plugin should NOT be used to display form fields, since it's called outside a form! Use *plgVmOnUpdateOrderBE()( instead! 
 +Return:+ 
 Null for shippers that aren't active, text (HTML) to display otherwise 
 +Parameters:+ 
 # (integer) The order ID 
 # (integer) Vendor ID 
 # (object) Object with 2 properties 'carrier' and 'name'  


  

 * *plgVmOnEditOrderLineShipperBE()* - This method is fired when editing the order line details in the backend. It can be used to add line specific package codes 
 +Return:+ 
 Null for shippers that aren't active, text (HTML) otherwise 
 +Parameters:+ 
 # (integer) The order ID 
 # (integer) The order Line ID 

 * *plgVmOnUpdateOrderShipper()* - Save updated order data to the shipper specific table 
 +Return:+ 
 True on success, false on failures (the rest of the save-process will be skipped!), or null when this shipper is not actived. 
 +Parameters:+ 
 # (array) Form data 

 * *plgVmOnUpdateOrderLineShipper()* - Save updated orderline data to the shipper specific table 
 +Return:+ 
 True on success, false on failures (the rest of the save-process will be skipped!), or null when this shipper is not actived. 
 +Parameters:+ 
 # (array) Form data 

 * *plgVmOnShowOrderShipperFE()* - This method is fired when showing the order details in the frontend.    It displays the shipper-specific data. 
 +Return:+ 
 Null for shippers that aren't active, text (HTML) otherwise 
 +Parameters:+ 
 # (integer) The order ID 

 * *plgVmOnShowOrderLineShipperFE()* - This method is fired when showing the order details in the frontend, for every orderline. It can be used to display line specific package codes, e.g. with a link to external tracking and tracing systems 
 +Return:+ 
 Null for shippers that aren't active, text (HTML) otherwise 
 +Parameters:+ 
 # (integer) The order ID 
 # (integer) The order LineID 

 Other helper functions inherited from the base class: 

 * *_ createTable()* - This method is used to create and maintain the plugin specific database table(s). 
 It _must_ be reimplemented by all plugins. 
 +Example:+ 
 <pre><code class="php">$_scheme = DbScheme::get_instance(); 
 $_scheme->create_scheme('#__vm_order_shipper_'.$this->_selement); 
 $_schemeCols = array( 
	  'id' => array ( 
			  'type' => 'int' 
			 ,'length' => 11 
			 ,'auto_inc' => true 
			 ,'null' => false 
	 ) 
	 ,'order_id' => array ( 
			  'type' => 'int' 
			 ,'length' => 11 
			 ,'null' => false 
	 ) 
	 ,'shipper_id' => array ( 
			  'type' => 'text' 
			 ,'null' => false 
	 ) 
 ); 
 $_schemeIdx = array( 
	  'idx_order_payment' => array( 
			  'columns' => array ('order_id') 
			 ,'primary' => false 
			 ,'unique' => false 
			 ,'type' => null 
	 ) 
 ); 
 $_scheme->define_scheme($_schemeCols); 
 $_scheme->define_index($_schemeIdx); 
 if (!$_scheme->scheme()) { 
	 JError::raiseWarning(500, $_scheme->get_db_error()); 
 } 
 $_scheme->reset(); 
 </code></pre> 

 * *getThisShipperName()* -    Get the name of the shipper 
 +Return:+ 
 Shipper name 
 +Parameters:+ 
 # (integer) The Shipper ID 
	 final protected function ($_sid) 

 * *writeShipperData()* - This method writes all shipper plugin specific data to the plugin's table 
 +Parameters:+ 
 # (array) Indexed array in the format 'column_name' => 'value' 
 # (string) Table name 

 * *getShippingRateIDForOrder()* - Get the shipping rate ID for a given order number 
 +Return:+ 
 The shipping rate ID, or -1 when not found  
 +Parameters:+ 
 # (integer) The order ID 

 * *getShippingRate()* -    Get the total price for a shipping rate 
 +Return:+ 
 Price in display format 
 +Parameters:+ 
 # (integer) Shipping rate ID 
	
 * *getShipperIDForOrder()* - Get the shipper ID for a given order number 
 +Return:+ 
 The shipper ID, or -1 when not found  
 +Parameters:+ 
 # (integer) The order ID 

 * *selectShippingRate()* - Select the shipping rate ID, based on the selected shipper in combination with the shipto address (country and zipcode) and the total order weight. 
 +Return:+ 
 Shipping rate ID, -1 when no match is found. Only 1 selected ID will be returned; if more ID's match, the cheapest will be selected. 
 +Parameters:+ 
 # (VirtueMartCart object) Cart object 
 # (integer, default 0) Shipper ID, by default taken from the cart 

 * *selectedThisShipper()* - This method checks if the selected shipper matches the current plugin 
 +Return:+ 
 True if the calling plugin has the given payment ID 
 +Parameters:+ 
 # (string) Element name, taken from the plugin filename 
 # (integer) The shipper ID 

 * *getOrderWeight()* - Get the total weight for the order, based on which the proper shipping rate can be selected. 
 +Return:+ 
 Total weight for the order 
 +Parameters:+ 
 # (VirtueMartCart object) Cart object 

 * *getShippers()* - Fill an array with all shippers found with this plugin for the current vendor 
 +Return:+ 
 True when shipper(s) was (were) found for this vendor, false otherwise 
 +Parameters:+ 
 # (integer) The vendor ID taken from the cart. 

 * *validateVendor()* - Check if this shipper has carriers for the current vendor. 
 +Return:+ 
 True when a shipper_id was found for this vendor, false otherwise 
 +Parameters:+ 
 # (integer) The vendor ID taken from the cart. 

 * *getShippingHtml* - returns the HTML code to display the form, based on the $shipper_name, $shipper_id, $selectedShipper, $shipper_logo, $shipping_value, $tax_id, $currency_id. To be used by the function plgVmOnSelectShipper(). 
 +Return:+ 
 returns HTML code to display the form 
 +Parameters:+ 
 # (string)    shipper_name 
 # (integer) shipper_id 
 # (integer) selectedShipper id 
 # (string)    shipper_logo to be displayed 
 # (integer) shipping_value to use to calculate the SalesPriceShipping 
 # (integer) tax_id to use to calculate the SalesPriceShipping 


 * *calculateSalesPriceShipping()* - Returns the 'salesPriceShipping' for a given shipping value, tax id, and currency id. 
 +Return:+ 
 returns salesPriceShipping 
 +Parameters:+ 
 # (integer) shipping_value  
 # (integer) tax_id 


 
 # (integer) currency_id 

 * *getShipperLogo()* - Returns the shipper logo image html. 
 +Return:+ 
 returns the html code to display the image 
 +Parameters:+ 
 # (string) logo image name 
 # (string) alt text to the image 

 Back to [[Plugin system]]