2016-01-04 12:49:26 +01:00
< ? php
/*
2016-09-22 15:52:17 +02:00
* 2007 - 2011 PrestaShop
2016-01-04 12:49:26 +01:00
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License ( AFL 3.0 )
* that is bundled with this package in the file LICENSE . txt .
* It is also available through the world - wide - web at this URL :
* http :// opensource . org / licenses / afl - 3.0 . php
* If you did not receive a copy of the license and are unable to
* obtain it through the world - wide - web , please send an email
* to license @ prestashop . com so we can send you a copy immediately .
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future . If you wish to customize PrestaShop for your
* needs please refer to http :// www . prestashop . com for more information .
*
* @ author PrestaShop SA < contact @ prestashop . com >
* @ copyright 2007 - 2011 PrestaShop SA
* @ version Release : $Revision : 8783 $
* @ license http :// opensource . org / licenses / afl - 3.0 . php Academic Free License ( AFL 3.0 )
* International Registered Trademark & Property of PrestaShop SA
*/
if ( ! defined ( '_PS_VERSION_' ))
exit ;
class GAnalytics extends Module
2016-09-22 15:52:17 +02:00
{
2016-01-04 12:49:26 +01:00
function __construct ()
{
$this -> name = 'ganalytics' ;
$this -> tab = 'analytics_stats' ;
$this -> version = '1.3' ;
$this -> author = 'PrestaShop' ;
$this -> displayName = 'Google Analytics' ;
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
parent :: __construct ();
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
if ( $this -> id AND ! Configuration :: get ( 'GANALYTICS_ID' ))
$this -> warning = $this -> l ( 'You have not yet set your Google Analytics ID' );
$this -> description = $this -> l ( 'Integrate Google Analytics script into your shop' );
$this -> confirmUninstall = $this -> l ( 'Are you sure you want to delete your details ?' );
}
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
function install ()
{
if ( ! parent :: install () OR ! $this -> registerHook ( 'header' ) OR ! $this -> registerHook ( 'orderConfirmation' ))
return false ;
return true ;
}
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
function uninstall ()
{
if ( ! Configuration :: deleteByName ( 'GANALYTICS_ID' ) OR ! parent :: uninstall ())
return false ;
return true ;
}
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
public function getContent ()
{
$output = '<h2>Google Analytics</h2>' ;
if ( Tools :: isSubmit ( 'submitGAnalytics' ) AND ( $gai = Tools :: getValue ( 'ganalytics_id' )))
{
Configuration :: updateValue ( 'GANALYTICS_ID' , $gai );
2016-09-22 15:52:17 +02:00
Configuration :: updateValue ( 'GANALYTICS_EC' , Tools :: getValue ( 'ganalytics_ec' ));
2016-01-04 12:49:26 +01:00
$output .= '
< div class = " conf confirm " >
< img src = " ../img/admin/ok.gif " alt = " " title = " " />
'.$this->l(' Settings updated ').'
</ div > ' ;
}
return $output . $this -> displayForm ();
}
public function displayForm ()
{
$output = '
< form action = " '.Tools::safeOutput( $_SERVER['REQUEST_URI'] ).' " method = " post " >
< fieldset class = " width2 " >
< legend >< img src = " ../img/admin/cog.gif " alt = " " class = " middle " /> '.$this->l(' Settings ').' </ legend >
< label > '.$this->l(' Your username ').' </ label >
< div class = " margin-form " >
< input type = " text " name = " ganalytics_id " value = " '.Tools::safeOutput(Tools::getValue('ganalytics_id', Configuration::get('GANALYTICS_ID'))).' " />
< p class = " clear " > '.$this->l(' Example : ').' UA - 1234567 - 1 </ p >
</ div >
2016-09-22 15:52:17 +02:00
< label > '.$this->l(' Enhanced Commerce ? ').' </ label >
< div class = " margin-form " >
< input type = " radio " name = " ganalytics_ec " value = " 1 " '.(((int)Configuration::get(' GANALYTICS_EC ')==1)?"checked":"").' /> '.$this->l(' ec . js ').'
< input type = " radio " name = " ganalytics_ec " value = " 0 " '.(((int)Configuration::get(' GANALYTICS_EC ')==0)?"checked":"").' /> '.$this->l(' ecommerce . js ').'
</ div >
2016-01-04 12:49:26 +01:00
< center >< input type = " submit " name = " submitGAnalytics " value = " '. $this->l ('Update ID').' " class = " button " /></ center >
</ fieldset >
</ form > ' ;
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
$output .= '
< fieldset class = " space " >
< legend >< img src = " ../img/admin/unknown.gif " alt = " " class = " middle " /> '.$this->l(' Help ').' </ legend >
< h3 > '.$this->l(' The first step of tracking e - commerce transactions is to enable e - commerce reporting for your website\ 's profile.' ) . ' </ h3 >
'.$this->l(' To enable e - Commerce reporting , please follow these steps : ').'
< ol >
< li > '.$this->l(' Log in to your account ').' </ li >
< li > '.$this->l(' Click Edit next to the profile you would like to enable . ').' </ li >
< li > '.$this->l(' On the Profile Settings page , click Edit ( next to Main Website Profile Information ) . ').' </ li >
< li > '.$this->l(' Change the e - Commerce Website radio button from No to Yes ').' </ li >
</ ol >
< h3 > '.$this->l(' To set up your goals , enter Goal Information : ').' </ h3 >
< ol >
< li > '.$this->l(' Return to Your Account main page ').' </ li >
< li > '.$this->l(' Find the profile for which you will be creating goals , then click Edit ').' </ li >
< li > '.$this->l(' Select one of the 4 goal slots available for that profile , then click Edit ').' </ li >
< li > '.$this->l(' Enter the Goal URL . Reaching this page marks a successful conversion . ').' </ li >
< li > '.$this->l(' Enter the Goal name as it should appear in your Google Analytics account . ').' </ li >
< li > '.$this->l(' Turn on Goal . ').' </ li >
</ ol >
< h3 > '.$this->l(' Then , define a funnel by following these steps : ').' </ h3 >
< ol >
< li > '.$this->l(' Enter the URL of the first page of your conversion funnel . This page should be a common page to all users working their way towards your Goal . ').' </ li >
< li > '.$this->l(' Enter a Name for this step . ').' </ li >
< li > '.$this->l(' If this step is a required step in the conversion process , mark the checkbox to the right of the step . ').' </ li >
< li > '.$this->l(' Continue entering goal steps until your funnel has been completely defined . You may enter up to 10 steps , or only one step . ').' </ li >
</ ol >
'.$this->l(' Finally , configure Additional settings by following the steps below : ').'
< ol >
< li > '.$this->l(' If the URLs entered above are case sensitive , mark the checkbox . ').' </ li >
< li > '.$this->l(' Select the appropriate goal Match Type . ( ').' < a href = " http://www.google.com/support/analytics/bin/answer.py?answer=72285 " > '.$this->l(' Learn more ').' </ a > '.$this->l(' about Match Types and how to choose the appropriate goal Match Type for your goal . ) ').' </ li >
< li > '.$this->l(' Enter a Goal value . This is the value used in Google Analytics\ ' ROI calculations.' ) . ' </ li >
< li > '.$this->l(' Click Save Changes to create this Goal and funnel , or Cancel to exit without saving . ').' </ li >
</ ol >
< h3 > '.$this->l(' Demonstration : The order process ').' </ h3 >
< ol >
< li > '.$this->l(' After having enabled your e - commerce reports and selected the respective profile enter \ 'order-confirmation.php\' as the targeted page URL.' ) . ' </ li >
< li > '.$this->l(' Name this goal ( for example \ 'Order process\')' ) . ' </ li >
< li > '.$this->l(' Activate the goal ').' </ li >
< li > '.$this->l(' Add \ 'product.php\' as the first page of your conversion funnel' ) . ' </ li >
< li > '.$this->l(' Give it a name ( for example , \ 'Product page\')' ) . ' </ li >
< li > '.$this->l(' Do not mark the \ 'required\' checkbox because the customer could be visiting directly from an \'adding to cart\' button such as in the homefeatured block on the homepage.' ) . ' </ li >
< li > '.$this->l(' Continue by entering the following URLs as goal steps : ').'
< ul >
< li > order / step0 . html '.$this->l(' ( required ) ').' </ li >
< li > authentication . php '.$this->l(' ( required ) ').' </ li >
< li > order / step1 . html '.$this->l(' ( required ) ').' </ li >
< li > order / step2 . html '.$this->l(' ( required ) ').' </ li >
< li > order / step3 . html '.$this->l(' ( required ) ').' </ li >
</ ul >
</ li >
< li > '.$this->l(' Check the \ 'Case sensitive\' option' ) . ' </ li >
< li > '.$this->l(' Save this new goal ').' </ li >
</ ol >
</ fieldset > ' ;
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
return $output ;
}
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
function hookHeader ( $params )
{
global $smarty , $cookie ;
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
// hookOrderConfirmation() already send the sats bypass this step
if ( strpos ( $_SERVER [ 'REQUEST_URI' ], __PS_BASE_URI__ . 'order-confirmation.php' ) === 0 )
return '' ;
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
// Otherwise, create Google Analytics stats
$ganalytics_id = Configuration :: get ( 'GANALYTICS_ID' );
$multilang = ( Language :: countActiveLanguages () > 1 );
$defaultMetaOrder = Meta :: getMetaByPage ( 'order' ,( int ) $cookie -> id_lang );
$order = ( $multilang ? (( string ) Tools :: getValue ( 'isolang' ) . '/' ) : '' ) . $defaultMetaOrder [ 'url_rewrite' ];
$pageTrack = (( strpos ( $_SERVER [ 'REQUEST_URI' ], __PS_BASE_URI__ . 'order.php' ) === 0 || strpos ( $_SERVER [ 'REQUEST_URI' ], __PS_BASE_URI__ . ( $multilang ? (( string ) Tools :: getValue ( 'isolang' ) . '/' ) : '' ) . $defaultMetaOrder [ 'url_rewrite' ]) === 0 ) ? '/order/step' . ( int )( Tools :: getValue ( 'step' )) . '.html' : '' );
$smarty -> assign ( 'ganalytics_id' , $ganalytics_id );
$smarty -> assign ( 'pageTrack' , $pageTrack );
$smarty -> assign ( 'isOrder' , false );
2016-09-22 15:52:17 +02:00
$smarty -> assign ( 'isEC' , ( int ) Configuration :: get ( 'GANALYTICS_EC' ));
2016-01-04 12:49:26 +01:00
return $this -> display ( __FILE__ , 'header.tpl' );
}
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
function hookFooter ( $params )
{
// for retrocompatibility
if ( ! $this -> isRegisteredInHook ( 'header' ))
$this -> registerHook ( 'header' );
return ;
}
function hookOrderConfirmation ( $params )
{
global $smarty ;
// Setting parameters
$parameters = Configuration :: getMultiple ( array ( 'PS_LANG_DEFAULT' ));
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
$order = $params [ 'objOrder' ];
if ( Validate :: isLoadedObject ( $order ))
2016-09-22 15:52:17 +02:00
{
2016-01-04 12:49:26 +01:00
$deliveryAddress = new Address ( intval ( $order -> id_address_delivery ));
$conversion_rate = 1 ;
if ( $order -> id_currency != Configuration :: get ( 'PS_CURRENCY_DEFAULT' ))
{
$currency = new Currency ( intval ( $order -> id_currency ));
$conversion_rate = floatval ( $currency -> conversion_rate );
}
// Order general information
$trans = array (
'id' => intval ( $order -> id ), // order ID - required
'store' => htmlentities ( Configuration :: get ( 'PS_SHOP_NAME' )), // affiliation or store name
'total' => Tools :: ps_round ( floatval ( $order -> total_paid ) / floatval ( $conversion_rate ), 2 ), // total - required
'tax' => '0' , // tax
'shipping' => Tools :: ps_round ( floatval ( $order -> total_shipping ) / floatval ( $conversion_rate ), 2 ), // shipping
'city' => addslashes ( $deliveryAddress -> city ), // city
'state' => '' , // state or province
'country' => addslashes ( $deliveryAddress -> country ) // country
);
// Product information
$products = $order -> getProducts ();
foreach ( $products AS $product )
{
2017-03-07 13:25:46 +01:00
// $category = Db::getInstance()->getRow('
// SELECT name FROM `'._DB_PREFIX_.'category_lang` , '._DB_PREFIX_.'product
// WHERE `id_product` = '.intval($product['product_id']).' AND `id_category_default` = `id_category`
// AND `id_lang` = '.intval($parameters['PS_LANG_DEFAULT']));
2016-01-04 12:49:26 +01:00
$category = Db :: getInstance () -> getRow ( '
2017-03-07 13:25:46 +01:00
SELECT cl . `name`
FROM `'._DB_PREFIX_.'product_ps_cache` ps
LEFT JOIN `'._DB_PREFIX_.'privatesale` s ON ( s . `id_sale` = ps . `id_sale` )
LEFT JOIN `'._DB_PREFIX_.'category` c ON ( c . `id_category` = s . `id_category` )
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON ( cl . `id_category` = c . `id_category` )
WHERE ps . `id_product` = '.intval($product[' product_id ']).'
AND cl . `id_lang` = '.intval($parameters[' PS_LANG_DEFAULT ' ])
);
2016-09-22 15:52:17 +02:00
2016-01-04 12:49:26 +01:00
$items [] = array (
'OrderId' => intval ( $order -> id ), // order ID - required
'SKU' => addslashes ( $product [ 'product_id' ]), // SKU/code - required
'Product' => addslashes ( $product [ 'product_name' ]), // product name
'Category' => addslashes ( $category [ 'name' ]), // category or variation
'Price' => Tools :: ps_round ( floatval ( $product [ 'product_price_wt' ]) / floatval ( $conversion_rate ), 2 ), // unit price - required
'Quantity' => addslashes ( intval ( $product [ 'product_quantity' ])) //quantity - required
);
}
$ganalytics_id = Configuration :: get ( 'GANALYTICS_ID' );
$smarty -> assign ( 'items' , $items );
$smarty -> assign ( 'trans' , $trans );
// $smarty->assign('ganalytics_id', $ganalytics_id);
2016-09-22 15:52:17 +02:00
$smarty -> assign ( 'isEC' , ( int ) Configuration :: get ( 'GANALYTICS_EC' ));
2016-01-04 12:49:26 +01:00
$smarty -> assign ( 'isOrder' , true );
return $this -> display ( __FILE__ , 'header.tpl' );
}
}
}