Jump to content

Traducciones no encontradas


Recommended Posts

Buenos días,

 

Tengo Prestashop 1.5.0.17

 

Hay algunas traducciones que no encuentro en localización > traducciones, ni en traducciones del frontoffice ni en instaladas las traducciones de los módulos:

  • He instalado el módulo de PayPal. Cuando se realiza un pedido desde la página y se va a hacer el pago, al elegir el medio de pago (5. MEDIO DE PAGO) en el de PayPal pone junto al logo de PayPal: PAGUE CON SU TARJETA DE CREDITO, DEBITO O CUENTA PAYPAL. Me gustaría ampliar, cambiar este mensaje. A lo mejor lo escribí yo cuando instalé el módulo, no me acuerdo, pero no sé cómo modificarlo. Tengo instalado el módulo de transferencia bancaria, y el mensaje que aparece junto al logo de transferencia bancaria sí lo puedo cambiar desde el backoffice en traducciones de los módulos.
  • Al crear una cuenta: pinchando en log in arriba a la derecha de la página, lo primero que te pide es seleccionar Título: Sr. Sra. Miss -> ¿Cómo puedo cambiar el Miss por Srta.?
  • Al hacer un pago y enviar la factura, después de: Producto / Referencia, aparece: Arriba (tasas no incluidas), y debajo pone el importe del producto. Me gustaría cambiarlo por Importe (tasas no incluidas) ¿Cómo puedo cambiarlo?.

¿Es posible cambiar algunas traducciones de la factura? Por ejemplo en lugar de costo de envío poner: gastos de envío. Hay algunas traducciones que no están muy claras: por ejemplo: Total tasa inc. lo cambiaróa por total base imponible.

 

Muchas gracias por vuestra ayuda, un saludo

Link to comment
Share on other sites

Buenos días,

 

Tengo Prestashop 1.5.0.17

 

Hay algunas traducciones que no encuentro en localización > traducciones, ni en traducciones del frontoffice ni en instaladas las traducciones de los módulos:

  • He instalado el módulo de PayPal. Cuando se realiza un pedido desde la página y se va a hacer el pago, al elegir el medio de pago (5. MEDIO DE PAGO) en el de PayPal pone junto al logo de PayPal: PAGUE CON SU TARJETA DE CREDITO, DEBITO O CUENTA PAYPAL. Me gustaría ampliar, cambiar este mensaje. A lo mejor lo escribí yo cuando instalé el módulo, no me acuerdo, pero no sé cómo modificarlo. Tengo instalado el módulo de transferencia bancaria, y el mensaje que aparece junto al logo de transferencia bancaria sí lo puedo cambiar desde el backoffice en traducciones de los módulos.
  • Al crear una cuenta: pinchando en log in arriba a la derecha de la página, lo primero que te pide es seleccionar Título: Sr. Sra. Miss -> ¿Cómo puedo cambiar el Miss por Srta.?
  • Al hacer un pago y enviar la factura, después de: Producto / Referencia, aparece: Arriba (tasas no incluidas), y debajo pone el importe del producto. Me gustaría cambiarlo por Importe (tasas no incluidas) ¿Cómo puedo cambiarlo?.

¿Es posible cambiar algunas traducciones de la factura? Por ejemplo en lugar de costo de envío poner: gastos de envío. Hay algunas traducciones que no están muy claras: por ejemplo: Total tasa inc. lo cambiaróa por total base imponible.

 

Muchas gracias por vuestra ayuda, un saludo

lo de paypal fiajte en en modulos/elmodulo/ y aca denrto seguro esta traducciones...

lo de titulo...tiene que estar en locacion>Traducciones de FrontOffice... Expande todos los campos apreta CONTROL+B para buscar y pon titulo... Lo mismo para eso del pago.... Si no estas las podes encontrar en \themes\tutema\lang\es.php

 

me corrijo: El miss podes cambiarlo desde el BO en CLIENTES>TITULOS

Espero que te sirva...

saludos.

Edited by jaloise (see edit history)
Link to comment
Share on other sites

Gracias Jaloise.

 

He cambiado lo de Miss, en el BO > Clientes.

 

Sin embargo no soy capaz de cambiar lo del módulo PayPal. La frase PAGUE CON SU TARJETA DE CREDITO, DEBITO O CUENTA PAYPAL No aparece en el es.php del módulo PayPal. De hecho no la encuentro ni en las traducciones de los módulos (módulo PayPay) del BO. Ni tampoco la he visto en los .tpl de PayPal. Además, lo raro es que al seleccionar el idioma inglés en el FO, la frase sigue siendo la misma en español. Aprovecho para preguntarte: al seleccionar PayPal el interfaz que sale de PayPal es en español, pero debería ser en inglés...hay alguna forma de cambiarlo?

Alguna idea de cómo cambiar la frase PAGUE CON SU TARJETA DE CREDITO, DEBITO O CUENTA PAYPAL?

 

Por otro lado, he conseguido cambiar algunas frases: por ejemplo costo de envío en la factura modificando el es.php de la carpeta Themes/default/lang, pero no consigo traducir el: Arriba (tasas no incluidas) que aparece en la factura, porque no encuentra esa frase...¿alguna sugerencia?

 

Muchas gracias, un saludo

Link to comment
Share on other sites

Gracias Jaloise.

 

He cambiado lo de Miss, en el BO > Clientes.

 

Sin embargo no soy capaz de cambiar lo del módulo PayPal. La frase PAGUE CON SU TARJETA DE CREDITO, DEBITO O CUENTA PAYPAL No aparece en el es.php del módulo PayPal. De hecho no la encuentro ni en las traducciones de los módulos (módulo PayPay) del BO. Ni tampoco la he visto en los .tpl de PayPal. Además, lo raro es que al seleccionar el idioma inglés en el FO, la frase sigue siendo la misma en español. Aprovecho para preguntarte: al seleccionar PayPal el interfaz que sale de PayPal es en español, pero debería ser en inglés...hay alguna forma de cambiarlo?

Alguna idea de cómo cambiar la frase PAGUE CON SU TARJETA DE CREDITO, DEBITO O CUENTA PAYPAL?

 

Por otro lado, he conseguido cambiar algunas frases: por ejemplo costo de envío en la factura modificando el es.php de la carpeta Themes/default/lang, pero no consigo traducir el: Arriba (tasas no incluidas) que aparece en la factura, porque no encuentra esa frase...¿alguna sugerencia?

 

Muchas gracias, un saludo

 

Lo de la factura es la de PDF? Si es asi es facil Localizacion>Traducciones y en el menu despleglable eleige Traduccion de los PDF y ahi seguramente encuentres lo que buscas...

 

Lo de paypal dejame ver, contame el modulo de paypal que usas es el qeu vien por defecto en prestashop??

 

SAludos.

Link to comment
Share on other sites

Hola Jaloise gracias,

 

Sí el módulo es PayPal 3.4.1. Estoy buscando información por internet y he visto estos dos mensajes:

 

http://www.prestashop.com/forums/topic/150443-paypal-in-users-language/

 

http://www.prestashop.com/forums/topic/112854-solved-idioma-en-pagina-paypal/

 

En este último hablan de un archivo paypalpayment.php pero no lo encuentro en la carpeta del módulo paypal ni tampoco el parámetro LOCALECODE

 

Un saludo

Link to comment
Share on other sites

Hola Jaloise gracias,

 

Sí el módulo es PayPal 3.4.1. Estoy buscando información por internet y he visto estos dos mensajes:

 

http://www.prestasho...users-language/

 

http://www.prestasho...-pagina-paypal/

 

En este último hablan de un archivo paypalpayment.php pero no lo encuentro en la carpeta del módulo paypal ni tampoco el parámetro LOCALECODE

 

Un saludo

 

Porque no probas con este: http://addons.prestashop.com/es/pagos-prestashop-modulos/1748-paypal.html

 

La verdad no se que decirte, Tal vez me podes pasar el FTP o accesso al BO y peudo ver si encuentro alguna solucion(Obviamente, por privado)

 

Saludos.

Link to comment
Share on other sites

Hola Jaloise gracias,

 

He visto este enlace:

 

http://www.prestashop.com/forums/topic/112854-solved-idioma-en-pagina-paypal/

 

En el que cambiando el código de PayPal el parámetro LOCALECODE parece que se soluciona y se puede tener la página de PayPal en inglés al seleccionar el idioma inglés en el FO y la página de PayPal en Español al seleccionar idioma español en el FO. Pero no encuentro el parámetro LOCALECODE..parece que en las versiones más recientes de PayPal ha cambiado el nombre de los archivos y ha cambiado bastante el código...

 

Te adjunto el módulo PayPal por si sabes cómo modioficarlo para poder ver la página de PayPal en inglés al seleccionar idioma inglés en el FO..

 

Gracias, un saludo

paypal.zip

Link to comment
Share on other sites

Hola Jaloise gracias,

 

He visto este enlace:

 

http://www.prestasho...-pagina-paypal/

 

En el que cambiando el código de PayPal el parámetro LOCALECODE parece que se soluciona y se puede tener la página de PayPal en inglés al seleccionar el idioma inglés en el FO y la página de PayPal en Español al seleccionar idioma español en el FO. Pero no encuentro el parámetro LOCALECODE..parece que en las versiones más recientes de PayPal ha cambiado el nombre de los archivos y ha cambiado bastante el código...

 

Te adjunto el módulo PayPal por si sabes cómo modioficarlo para poder ver la página de PayPal en inglés al seleccionar idioma inglés en el FO..

 

Gracias, un saludo

 

Despues lo reviso a ver si te puedo ayudar y te aviso!

Link to comment
Share on other sites

Ok muchas gracias Jaloise.

 

Por otro lado, seguiré investigando porqué la frase que aparece en el FrontOffice junto al logo de payPal al final del proceso de pago cuando tienes que seleccionar un métodod de pago, no puedo modificarla desde el BO (a diferencia de otros métodos de pago como el de transferencia bancaria), ni porqué al traducir al inglés sigue la misma frase en Español. Además esta frase no la encuentro en el es.php del módulo ni por ningún lado de la carpeta PayPal. Esta tarde contactaré con PayPal a ver si saben algo.

 

Un saludo

Link to comment
Share on other sites

Ok muchas gracias Jaloise.

 

Por otro lado, seguiré investigando porqué la frase que aparece en el FrontOffice junto al logo de payPal al final del proceso de pago cuando tienes que seleccionar un métodod de pago, no puedo modificarla desde el BO (a diferencia de otros métodos de pago como el de transferencia bancaria), ni porqué al traducir al inglés sigue la misma frase en Español. Además esta frase no la encuentro en el es.php del módulo ni por ningún lado de la carpeta PayPal. Esta tarde contactaré con PayPal a ver si saben algo.

 

Un saludo

 

Fijate lo siguiente: al parecer ls traducciones se encuntren en paypal/translations.xml

 

en la linea aproximadamente 693 empiezan las españolas.. aproximadamente en la linia 696 aparece la siguiente frase:Pague con su tarjeta de débito, crédito o su cuenta PayPal.

 

Fijate si modificando este archivo se modifican las traducciones...

Link to comment
Share on other sites

Muchas gracias jaloise.

 

Ya casi lo tengo...

 

He comprobado que la página PayPal sale en el idioma del país en el que el cliente se registre en la tienda, no el idioma que se selecciona en el propio FrontOffice para traducir la página (yo preferiría que la página de PayPal saliera en inglés al seleccionar el idioma inglés en el FrontOffice..).

 

Efectivamente, editando translations.xml he conseguido cambiar el mensaje en Español. Lo que no entiendo es porqué al seleccionar el idioma inglés en el FrontOffice y aunque cree un cliente con una dirección de Londres, el mensaje sigue siendo el mismo en español y no sale el correspondiente en el translations.xml: iso_code="gb", que es: Pay with your card or your PayPal account.

 

En el BO, tengo en Localización > Idiomas, la bandera de inglaterra (la cambié por la que venía por defecto de USA) con:

código ISO: gb

código del idioma: en

He probado modificando esos códigos con varias combinaciones pero no lo consigo

 

Esto sí que me parece extraño...¿alguna idea?

 

Gracias de nuevo, saludos

Link to comment
Share on other sites

Muchas gracias jaloise.

 

Ya casi lo tengo...

 

He comprobado que la página PayPal sale en el idioma del país en el que el cliente se registre en la tienda, no el idioma que se selecciona en el propio FrontOffice para traducir la página (yo preferiría que la página de PayPal saliera en inglés al seleccionar el idioma inglés en el FrontOffice..).

 

Efectivamente, editando translations.xml he conseguido cambiar el mensaje en Español. Lo que no entiendo es porqué al seleccionar el idioma inglés en el FrontOffice y aunque cree un cliente con una dirección de Londres, el mensaje sigue siendo el mismo en español y no sale el correspondiente en el translations.xml: iso_code="gb", que es: Pay with your card or your PayPal account.

 

En el BO, tengo en Localización > Idiomas, la bandera de inglaterra (la cambié por la que venía por defecto de USA) con:

código ISO: gb

código del idioma: en

He probado modificando esos códigos con varias combinaciones pero no lo consigo

 

Esto sí que me parece extraño...¿alguna idea?

 

Gracias de nuevo, saludos

 

Bueno la parte de español ya esta! Ahora faltaría la parte de ingles... Dejame ver el codigo nuevamente, porque no lo vi detalladamente la parte de ingles..

 

Ahora te digo si se me ocurre nada..

 

ahora no veo el problema ,dejame chequearlo y mañana a la tarde de argentina te constesto. No se de que pais sos asi que te aclaro, soy de argentina jajaja...Dejamelo probar en mi tienda qeu tengo instaldo en local y te digo si resolvi algo...

 

Saludos.

Edited by jaloise (see edit history)
Link to comment
Share on other sites

Hola Jaloise no consigo traducirlo..

 

He probado a cambiar los códigos en el BO > idiomas, poniendo tanto el código ISO como el código de idioma igual: gb, he probado a ponerlo gb, en-us, etc y no se traduce..no entiendo porqué, porque para código gb hay una entrada en el translations.xml

 

No doy con ello y supongo que no debería haber problema alguno..además es lo único que requiere traducción: traduciir el mensaje del logo PayPal al final del proceso de compra cuando te pide seleccionar el método de pago...

¿Os funciona bien la traducción al inglés con PayPal?

 

Saludos

Link to comment
Share on other sites

  • 2 months later...

Hola !! Habeis encontrado la solucion?? Yo tengo el mismo problema, la traduccion al ingles no me funciona y cuando te da acceso a l pago en paypal, esta en español, aunque el cliente este viendo mi tienda en ingles .. He buscado por todas partes y no encuentro nada .. Si encontraste la solucion dimelo :)

Gracias !!!!

Link to comment
Share on other sites

Bueno, estuve investigando y por algun motivo siempre sale la traduccion en español.. Puede acceder a las traducciones del modulo de paypal en el back office y aunque edite la traduccion en ingles, esa frase seguia apareciendo en Español .. Solucion, escribir en el archivo translations.xml, en la linea 696 una frase neutra , yo he puesto Paypal Visa Mastercard, tanto en español como en ingles suena igual :) .. Espero que os sirva :)

Link to comment
Share on other sites

Similar a sweetcolours, lo mejor que logre, fue editando el archivo /mi_tienda/modules/paypal/translations.xml algo asi:

 

 

...

<country iso_code="default">

...

<payment_choice>Paga con tu tarjeta o PayPal, Pay with your card or PayPal</payment_choice>

...

 

 

observacion: desconozco el límite de longitud pero no acepta demasiados caracteres en tal descripcion.

 

Saludos y suerte

Link to comment
Share on other sites

  • 4 weeks later...

Buenas tardes,

Es la primera vez que escribo en este foro. Estaba buscando solucion para el mismo problema del a traduccion del titulo. Lo que he podido encontrar es por una parte lo que comentais en las traducciones /mi_tienda/modules/paypal/translations.xml y por otra en el archivo mitienda/modules/paypal/paypal.php. En este archivo hay una instruccion que dice "const DEFAULT_COUNTRY_ISO = 'GB'; Sin cambiar nada en translations.xml el idioma que coge es el GB, osea ingles. Si cambiamos esta constante y le ponemos ES, pues coge Español y si cambias el idioma en el front, pues te coge el idioma al que cambies, siempre y cuando este realizada la traduccion en translations.xml. Hasta ahi he llegado.

Un saludo,

Link to comment
Share on other sites

  • 2 weeks later...

yo tambien tengo el mismo problema. Estoy probando de encontrar la traducciones de Add this product to my list of favorites.

 

No hay manera, he mirado en todas partes y ni aparece la traduccion. Tango en archivos, como módulos , como tienda y nada de nada...

Link to comment
Share on other sites

  • 1 month later...

Yo tengo como idioma principal español y cuando cambio a inglés, en español se queda. Pongo el código del mi paypal.php por si ayuda en algo.

 

<?php
/*
* 2007-2013 PrestaShop
*
* 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 [email protected] 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 <[email protected]>
*  @copyright  2007-2013 PrestaShop SA
*  @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;
include_once(_PS_MODULE_DIR_.'/paypal/api/paypal_lib.php');
include_once(_PS_MODULE_DIR_.'/paypal/paypal_logos.php');
include_once(_PS_MODULE_DIR_.'/paypal/paypal_orders.php');
include_once(_PS_MODULE_DIR_.'/paypal/paypal_tools.php');
define('WPS', 1);
define('HSS', 2);
define('ECS', 4);
define('TRACKING_CODE', 'FR_PRESTASHOP_H3S');
define('SMARTPHONE_TRACKING_CODE', 'Prestashop_Cart_smartphone_EC');
define('TABLET_TRACKING_CODE', 'Prestashop_Cart_tablet_EC');
define('_PAYPAL_LOGO_XML_', 'logos.xml');
define('_PAYPAL_MODULE_DIRNAME_', 'paypal');
define('_PAYPAL_TRANSLATIONS_XML_', 'translations.xml');
class PayPal extends PaymentModule
{
protected $_html = '';

public $_errors = array();

public $context;
public $iso_code;
public $default_country;

public $paypal_logos;

public $module_key = '';
const BACKWARD_REQUIREMENT = '0.4';
const DEFAULT_COUNTRY_ISO = 'GB';
const ONLY_PRODUCTS = 1;
const ONLY_DISCOUNTS = 2;
const BOTH = 3;
const BOTH_WITHOUT_SHIPPING = 4;
const ONLY_SHIPPING = 5;
const ONLY_WRAPPING = 6;
const ONLY_PRODUCTS_WITHOUT_SHIPPING = 7;
public function __construct()
{
 $this->name = 'paypal';
 $this->tab = 'payments_gateways';
 $this->version = '3.4.8';
 $this->currencies = true;
 $this->currencies_mode = 'radio';
 parent::__construct();

 $this->displayName = $this->l('PayPal');
 $this->description = $this->l('Accepts payments by credit cards (CB, Visa, MasterCard, Amex, Aurore, Cofinoga, 4 stars) with PayPal.');
 $this->confirmUninstall = $this->l('Are you sure you want to delete your details?');
 $this->page = basename(__FILE__, '.php');
 if (_PS_VERSION_ < '1.5')
 {
  $mobile_enabled = (int)Configuration::get('PS_MOBILE_DEVICE');
  require(_PS_MODULE_DIR_.$this->name.'/backward_compatibility/backward.php');
 }
 else
  $mobile_enabled = (int)Configuration::get('PS_ALLOW_MOBILE_DEVICE');

 if (self::isInstalled($this->name))
 {
  $this->loadDefaults();
  if ($mobile_enabled && $this->active)
$this->checkMobileCredentials();
  elseif ($mobile_enabled && !$this->active)
$this->checkMobileNeeds();
 }
 else
  $this->checkMobileNeeds();
}
public function install()
{
 if (!parent::install() || !$this->registerHook('payment') || !$this->registerHook('paymentReturn') ||
 !$this->registerHook('shoppingCartExtra') || !$this->registerHook('backBeforePayment') || !$this->registerHook('rightColumn') ||
 !$this->registerHook('cancelProduct') || !$this->registerHook('productFooter') || !$this->registerHook('header') ||
 !$this->registerHook('adminOrder') || !$this->registerHook('backOfficeHeader'))
  return false;
 if ((_PS_VERSION_ >= '1.5') && (!$this->registerHook('displayMobileHeader') ||
 !$this->registerHook('displayMobileShoppingCartTop') || !$this->registerHook('displayMobileAddToCartTop')))
  return false;
 include_once(_PS_MODULE_DIR_.'/'.$this->name.'/paypal_install.php');
 $paypal_install = new PayPalInstall();
 $paypal_install->createTables();
 $paypal_install->updateConfiguration($this->version);
 $paypal_install->createOrderState();
 $paypal_tools = new PayPalTools($this->name);
 $paypal_tools->moveTopPayments(1);
 $paypal_tools->moveRightColumn(3);
 $this->runUpgrades(true);

 return true;
}
public function uninstall()
{
 include_once(_PS_MODULE_DIR_.'/'.$this->name.'/paypal_install.php');
 $paypal_install = new PayPalInstall();
 $paypal_install->deleteConfiguration();
 return parent::uninstall();
}
/**
 * Launch upgrade process
 */
public function runUpgrades($install = false)
{
 if (file_exists(_PS_MODULE_DIR_.'/paypalapi/paypalapi.php') && !Configuration::get('PAYPAL_NEW'))
 {
  include_once(_PS_MODULE_DIR_.'/paypalapi/paypalapi.php');
  new PaypalAPI();

  if (_PS_VERSION_ < '1.5')
foreach (array('2.8', '3.0') as $version)
{
 $file = dirname(__FILE__).'/upgrade/install-'.$version.'.php';
 if (Configuration::get('PAYPAL_VERSION') < $version && file_exists($file))
 {
  include_once($file);
  call_user_func('upgrade_module_'.str_replace('.', '_', $version), $this, $install);
 }
}
 }
}
private function compatibilityCheck()
{
 if (file_exists(_PS_MODULE_DIR_.'/paypalapi/paypalapi.php') && $this->active)
  $this->warning = $this->l('All features of Paypal API module are included in the new Paypal module. In order to do not have any conflict, please do not use and remove PayPalAPI module.').'<br />';
 /* For 1.4.3 and less compatibility */
 $updateConfig = array('PS_OS_CHEQUE' => 1, 'PS_OS_PAYMENT' => 2, 'PS_OS_PREPARATION' => 3, 'PS_OS_SHIPPING' => 4,
 'PS_OS_DELIVERED' => 5, 'PS_OS_CANCELED' => 6, 'PS_OS_REFUND' => 7, 'PS_OS_ERROR' => 8, 'PS_OS_OUTOFSTOCK' => 9,
 'PS_OS_BANKWIRE' => 10, 'PS_OS_PAYPAL' => 11, 'PS_OS_WS_PAYMENT' => 12);
 foreach ($updateConfig as $key => $value)
  if (!Configuration::get($key) || (int)Configuration::get($key) < 1)
  {
if (defined('_'.$key.'_') && (int)constant('_'.$key.'_') > 0)
 Configuration::updateValue($key, constant('_'.$key.'_'));
else
 Configuration::updateValue($key, $value);
  }
}
public function isPayPalAPIAvailable()
{
 $payment_method = Configuration::get('PAYPAL_PAYMENT_METHOD');
 if ($payment_method != HSS && !is_null(Configuration::get('PAYPAL_API_USER')) &&
 !is_null(Configuration::get('PAYPAL_API_PASSWORD')) && !is_null(Configuration::get('PAYPAL_API_SIGNATURE')))
  return true;
 elseif ($payment_method == HSS && !is_null(Configuration::get('PAYPAL_BUSINESS_ACCOUNT')))
  return true;
 return false;
}
/**
 * Initialize default values
 */
protected function loadDefaults()
{
 $this->loadLangDefault();
 $this->paypal_logos = new PayPalLogos($this->iso_code);
 $payment_method = Configuration::get('PAYPAL_PAYMENT_METHOD');
 $order_process_type = (int)Configuration::get('PS_ORDER_PROCESS_TYPE');

 if (Tools::getValue('paypal_ec_canceled') || $this->context->cart === false)
  unset($this->context->cookie->express_checkout);

 if (defined('_PS_ADMIN_DIR_'))
 {
  /* Backward compatibility */
  if (_PS_VERSION_ < '1.5')
$this->backwardCompatibilityChecks();
  /* Upgrade and compatibility checks */
  $this->runUpgrades();
  $this->compatibilityCheck();
  $this->warningsCheck();
 }
 else
 {
  if (isset($this->context->cookie->express_checkout))
$this->context->smarty->assign('paypal_authorization', true);

  if (($order_process_type == 1) && ((int)$payment_method == HSS) && !$this->useMobile())
$this->context->smarty->assign('paypal_order_opc', true);
  elseif (($order_process_type == 1) && (((bool)Tools::getValue('isPaymentStep') == true) || isset($this->context->cookie->express_checkout)))
  {
$shop_url = PayPal::getShopDomainSsl(true, true);
if (_PS_VERSION_ < '1.5')
{
 $link = $shop_url._MODULE_DIR_.$this->name.'/express_checkout/payment.php';
 $this->context->smarty->assign('paypal_confirmation', $link.'?'.http_build_query(array('get_confirmation' => true), '', '&'));
}
else
{
 $values = array('fc' => 'module', 'module' => 'paypal', 'controller' => 'confirm', 'get_confirmation' => true);
 $this->context->smarty->assign('paypal_confirmation', $shop_url.__PS_BASE_URI__.'?'.http_build_query($values));
}
  }
 }
}
protected function checkMobileCredentials()
{
 $payment_method = Configuration::get('PAYPAL_PAYMENT_METHOD');
 if (((int)$payment_method == HSS) && (
  (!(bool)Configuration::get('PAYPAL_API_USER')) &&
  (!(bool)Configuration::get('PAYPAL_API_PASSWORD')) &&
  (!(bool)Configuration::get('PAYPAL_API_SIGNATURE'))))
  $this->warning .= $this->l('You must set your PayPal Integral credentials in order to have the mobile theme work correctly.').'<br />';
}
protected function checkMobileNeeds()
{
 $iso_code = Country::getIsoById((int)Configuration::get('PS_COUNTRY_DEFAULT'));
 $paypal_countries = array('ES', 'FR', 'PL', 'IT');
 if (method_exists($this->context->shop, 'getTheme'))
 {
  if (($this->context->shop->getTheme() == 'default') && in_array($iso_code, $paypal_countries))
$this->warning .= $this->l('The mobile theme only works with the PayPal\'s payment module at this time. Please activate the module to enable payments.').'<br />';
 }
 else
  $this->warning .= $this->l('In order to use the module you need to install the backward compatibility.').'<br />';
}
/* Check status of backward compatibility module*/
protected function backwardCompatibilityChecks()
{
 if (Module::isInstalled('backwardcompatibility'))
 {
  $backward_module = Module::getInstanceByName('backwardcompatibility');
  if (!$backward_module->active)
$this->warning .= $this->l('To work properly the module requires the backward compatibility module enabled').'<br />';
  elseif ($backward_module->version < PayPal::BACKWARD_REQUIREMENT)
$this->warning .= $this->l('To work properly the module requires at least the backward compatibility module v').PayPal::BACKWARD_REQUIREMENT.'.<br />';
 }
 else
  $this->warning .= $this->l('In order to use the module you need to install the backward compatibility.').'<br />';
}
public function getContent()
{
 $this->_postProcess();
 if (($id_lang = Language::getIdByIso('EN')) == 0)
  $english_language_id = (int)$this->context->employee->id_lang;
 else
  $english_language_id = (int)$id_lang;
 $this->context->smarty->assign(array(
  'PayPal_WPS' => (int)WPS,
  'PayPal_HSS' => (int)HSS,
  'PayPal_ECS' => (int)ECS,
  'PP_errors' => $this->_errors,
  'PayPal_logo' => $this->paypal_logos->getLogos(),
  'PayPal_allowed_methods' => $this->getPaymentMethods(),
  'PayPal_country' => Country::getNameById((int)$english_language_id, (int)$this->default_country),
  'PayPal_country_id' => (int)$this->default_country,
  'PayPal_business' => Configuration::get('PAYPAL_BUSINESS'),
  'PayPal_payment_method' => (int)Configuration::get('PAYPAL_PAYMENT_METHOD'),
  'PayPal_api_username' => Configuration::get('PAYPAL_API_USER'),
  'PayPal_api_password' => Configuration::get('PAYPAL_API_PASSWORD'),
  'PayPal_api_signature' => Configuration::get('PAYPAL_API_SIGNATURE'),
  'PayPal_api_business_account' => Configuration::get('PAYPAL_BUSINESS_ACCOUNT'),
  'PayPal_express_checkout_shortcut' => (int)Configuration::get('PAYPAL_EXPRESS_CHECKOUT_SHORTCUT'),
  'PayPal_sandbox_mode' => (int)Configuration::get('PAYPAL_SANDBOX'),
  'PayPal_payment_capture' => (int)Configuration::get('PAYPAL_CAPTURE'),
  'PayPal_country_default' => (int)$this->default_country,
  'PayPal_change_country_url' => 'index.php?tab=AdminCountries&token='.Tools::getAdminTokenLite('AdminCountries').'#footer',
  'Countries' => Country::getCountries($english_language_id),
  'One_Page_Checkout' => (int)Configuration::get('PS_ORDER_PROCESS_TYPE'))
 );
 $this->getTranslations();
 $output = $this->fetchTemplate('/views/templates/back/back_office.tpl');

 if ($this->active == false)
  return $output.$this->hookBackOfficeHeader();

 return $output;
}
/**
 * Hooks methods
 */
public function hookHeader()
{
 if ($this->useMobile())
 {
  $id_hook = (int)Configuration::get('PS_MOBILE_HOOK_HEADER_ID');
  if ($id_hook > 0)
  {
$module = Hook::getModuleFromHook($id_hook, $this->id);
if (!$module)
 $this->registerHook('displayMobileHeader');
  }
 }

 if (isset($this->context->cart) && $this->context->cart->id)
  $this->context->smarty->assign('id_cart', (int)$this->context->cart->id);
 $this->context->smarty->assign('base_uri', Tools::getShopDomainSsl(true).__PS_BASE_URI__);
 /* Added for PrestaBox */
 if (method_exists($this->context->controller, 'addCSS'))
  $this->context->controller->addCSS(_MODULE_DIR_.$this->name.'/css/paypal.css');
 else
  Tools::addCSS(_MODULE_DIR_.$this->name.'/css/paypal.css');

 return '<script type="text/javascript">'.$this->fetchTemplate('paypal.js').'</script>';
}
public function hookDisplayMobileHeader()
{
 return $this->hookHeader();
}
public function hookDisplayMobileShoppingCartTop()
{
 return $this->renderExpressCheckoutButton('cart').$this->renderExpressCheckoutForm('cart');
}
public function hookDisplayMobileAddToCartTop()
{
 return $this->renderExpressCheckoutButton('cart');
}
public function hookProductFooter()
{
 $content = (!$this->useMobile()) ? $this->renderExpressCheckoutButton('product') : null;
 return $content.$this->renderExpressCheckoutForm('product');
}
public function hookPayment($params)
{
 if (!$this->active)
  return;
 $use_mobile = $this->useMobile();
 if ($use_mobile)
  $method = ECS;
 else
  $method = (int)Configuration::get('PAYPAL_PAYMENT_METHOD');

 $shop_url = PayPal::getShopDomainSsl(true, true);
 if (isset($this->context->cookie->express_checkout))
 {
  // Check if user went through the payment preparation detail and completed it
  $detail = unserialize($this->context->cookie->express_checkout);
  if (!empty($detail['payer_id']) && !empty($detail['token']))
  {
$values = array('get_confirmation' => true);
$link = $shop_url._MODULE_DIR_.$this->name.'/express_checkout/payment.php';
if (_PS_VERSION_ < '1.5')
 Tools::redirectLink($link.'?'.http_build_query($values, '', '&'));
else
 Tools::redirect(Context::getContext()->link->getModuleLink('paypal', 'confirm', $values));
  }
 }
 $this->context->smarty->assign(array(
  'logos' => $this->paypal_logos->getLogos(),
  'sandbox_mode' => Configuration::get('PAYPAL_SANDBOX'),
  'use_mobile' => $use_mobile,
  'PayPal_lang_code' => (isset($iso_lang[$this->context->language->iso_code])) ? $iso_lang[$this->context->language->iso_code] : 'en_US'
 ));
 if ($method == HSS)
 {
  $billing_address = new Address($this->context->cart->id_address_invoice);
  $delivery_address = new Address($this->context->cart->id_address_delivery);
  $billing_address->country = new Country($billing_address->id_country);
  $delivery_address->country = new Country($delivery_address->id_country);
  $billing_address->state = new State($billing_address->id_state);
  $delivery_address->state = new State($delivery_address->id_state);
  $cart = $this->context->cart;
  $cart_details = $cart->getSummaryDetails(null, true);
  if ((int)Configuration::get('PAYPAL_SANDBOX') == 1)
$action_url = 'https://securepayments.sandbox.paypal.com/acquiringweb';
  else
$action_url = 'https://securepayments.paypal.com/acquiringweb';
  $this->context->smarty->assign(array(
'action_url' => $action_url,
'cart' => $cart,
'cart_details' => $cart_details,
'currency' => new Currency((int)$cart->id_currency),
'customer' => $this->context->customer,
'business_account' => Configuration::get('PAYPAL_BUSINESS_ACCOUNT'),
'custom' => Tools::jsonEncode(array('id_cart' => $cart->id, 'hash' => sha1(serialize($cart->nbProducts())))),
'gift_price' => (float)$this->getGiftWrappingPrice(),
'billing_address' => $billing_address,
'delivery_address' => $delivery_address,
'shipping' => $cart_details['total_shipping_tax_exc'],
'subtotal' => $cart_details['total_price_without_tax'] - $cart_details['total_shipping_tax_exc'],
'time' => time(),
'cancel_return' => $this->context->link->getPageLink('order.php'),
'notify_url' => $shop_url._MODULE_DIR_.$this->name.'/integral_evolution/notifier.php',
'return_url' => $shop_url._MODULE_DIR_.$this->name.'/integral_evolution/submit.php?id_cart='.(int)$cart->id,
'tracking_code' => $this->getTrackingCode()
  ));
  return $this->fetchTemplate('integral_evolution_payment.tpl');
 }
 elseif ($method == WPS || $method == ECS)
 {
  $this->getTranslations();
  $this->context->smarty->assign(array(
'PayPal_integral' => WPS,
'PayPal_express_checkout' => ECS,
'PayPal_payment_method' => $method,
'PayPal_payment_type' => 'payment_cart',
'PayPal_current_shop_url' => $shop_url.$_SERVER['REQUEST_URI'],
'PayPal_tracking_code' => $this->getTrackingCode()));
  return $this->fetchTemplate('express_checkout_payment.tpl');
 }

 return null;
}
public function hookShoppingCartExtra()
{
 // No active
 if (!$this->active || (((int)Configuration::get('PAYPAL_PAYMENT_METHOD') == HSS) && !$this->context->getMobileDevice()) ||
  !Configuration::get('PAYPAL_EXPRESS_CHECKOUT_SHORTCUT') || !in_array(ECS, $this->getPaymentMethods()) ||
  isset($this->context->cookie->express_checkout))
  return null;

 $values = array('en' => 'en_US', 'fr' => 'fr_FR');
 $this->context->smarty->assign(array(
  'PayPal_payment_type' => 'cart',
  'PayPal_lang_code' => (isset($values[$this->context->language->iso_code]) ? $values[$this->context->language->iso_code] : 'en_US'),
  'PayPal_current_shop_url' => PayPal::getShopDomainSsl(true, true).$_SERVER['REQUEST_URI'],
  'PayPal_tracking_code' => $this->getTrackingCode(),
  'include_form' => true,
  'template_dir' => dirname(__FILE__).'/views/templates/hook/'));
 return $this->fetchTemplate('express_checkout_shortcut_button.tpl');
}
public function hookPaymentReturn()
{
 if (!$this->active)
  return null;
 return $this->fetchTemplate('confirmation.tpl');
}
public function hookRightColumn()
{
 $this->context->smarty->assign('logo', $this->paypal_logos->getCardsLogo(true));
 return $this->fetchTemplate('column.tpl');
}
public function hookLeftColumn()
{
 return $this->hookRightColumn();
}
public function hookBackBeforePayment($params)
{
 if (!$this->active)
  return null;
 /* Only execute if you use PayPal API for payment */
 if (((int)Configuration::get('PAYPAL_PAYMENT_METHOD') != HSS) && $this->isPayPalAPIAvailable())
 {
  if ($params['module'] != $this->name || !$this->context->cookie->paypal_token || !$this->context->cookie->paypal_payer_id)
return false;
  Tools::redirect('modules/'.$this->name.'/express_checkout/submit.php?confirm=1&token='.$this->context->cookie->paypal_token.'&payerID='.$this->context->cookie->paypal_payer_id);
 }
}
public function hookAdminOrder($params)
{
 if (Tools::isSubmit('submitPayPalCapture'))
  $this->_doCapture($params['id_order']);
 elseif (Tools::isSubmit('submitPayPalRefund'))
  $this->_doTotalRefund($params['id_order']);
 $adminTemplates = array();
 if ($this->isPayPalAPIAvailable())
 {
  if ($this->_needValidation((int)$params['id_order']))
$adminTemplates[] = 'validation';
  if ($this->_needCapture((int)$params['id_order']))
$adminTemplates[] = 'capture';
  if ($this->_canRefund((int)$params['id_order']))
$adminTemplates[] = 'refund';
 }
 if (count($adminTemplates) > 0)
 {
  $order = new Order((int)$params['id_order']);

  if (_PS_VERSION_ >= '1.5')
$order_state = $order->current_state;
  else
$order_state = OrderHistory::getLastOrderState($order->id);
  $this->context->smarty->assign(
array(
 'authorization' => (int)Configuration::get('PAYPAL_OS_AUTHORIZATION'),
 'base_url' => _PS_BASE_URL_.__PS_BASE_URI__,
 'module_name' => $this->name,
 'order_state' => $order_state,
 'params' => $params,
 'ps_version' => _PS_VERSION_
)
  );
  foreach ($adminTemplates as $adminTemplate)
  {
$this->_html .= $this->fetchTemplate('/views/templates/back/admin_order/'.$adminTemplate.'.tpl');
$this->_postProcess();
$this->_html .= '</fieldset>';
  }
 }
 return $this->_html;
}
public function hookCancelProduct($params)
{
 if (Tools::isSubmit('generateDiscount') || !$this->isPayPalAPIAvailable())
  return false;
 elseif ($params['order']->module != $this->name || !($order = $params['order']) || !Validate::isLoadedObject($order))
  return false;
 elseif (!$order->hasBeenPaid())
  return false;
 $order_detail = new OrderDetail((int)$params['id_order_detail']);
 if (!$order_detail || !Validate::isLoadedObject($order_detail))
  return false;
 $paypal_order = PayPalOrder::getOrderById((int)$order->id);
 if (!$paypal_order)
  return false;
 $products = $order->getProducts();
 $cancel_quantity = Tools::getValue('cancelQuantity');
 $message = $this->l('Cancel products result:').'<br>';

 $amount = (float)($products[(int)$order_detail->id]['product_price_wt'] * (int)$cancel_quantity[(int)$order_detail->id]);
 $refund = $this->_makeRefund($paypal_order->id_transaction, (int)$order->id, $amount);
 $this->formatMessage($refund, $message);
 $this->_addNewPrivateMessage((int)$order->id, $message);
}
public function hookBackOfficeHeader()
{
 if ((int)strcmp((_PS_VERSION_ < '1.5' ? Tools::getValue('configure') : Tools::getValue('module_name')), $this->name) == 0)
 {
  if (_PS_VERSION_ < '1.5')
  {
$output =  '<script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
 <script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery.fancybox-1.3.4.js"></script>
 <link type="text/css" rel="stylesheet" href="'.__PS_BASE_URI__.'css/jquery.fancybox-1.3.4.css" />
 <link type="text/css" rel="stylesheet" href="'._MODULE_DIR_.$this->name.'/css/paypal.css" />';
  }
  else
  {
$this->context->controller->addJquery();
$this->context->controller->addJQueryPlugin('fancybox');
$this->context->controller->addCSS(_MODULE_DIR_.$this->name.'/css/paypal.css');
  }
  $this->context->smarty->assign(array(
'PayPal_module_dir' => _MODULE_DIR_.$this->name,
'PayPal_WPS' => (int)WPS,
'PayPal_HSS' => (int)HSS,
'PayPal_ECS' => (int)ECS
  ));

  return (isset($output) ? $output : null).$this->fetchTemplate('/views/templates/back/header.tpl');
 }
 return null;
}
public function renderExpressCheckoutButton($type)
{
 if ((!Configuration::get('PAYPAL_EXPRESS_CHECKOUT_SHORTCUT') && !$this->useMobile()) || isset($this->context->cookie->express_checkout))
  return null;

 if (!in_array(ECS, $this->getPaymentMethods()) || (((int)Configuration::get('PAYPAL_BUSINESS') == 1) &&
 (int)Configuration::get('PAYPAL_PAYMENT_METHOD') == HSS) && !$this->useMobile())
  return null;
 $iso_lang = array(
  'en' => 'en_US',
  'fr' => 'fr_FR'
 );
 $this->context->smarty->assign(array(
  'use_mobile' => (bool) $this->useMobile(),
  'PayPal_payment_type' => $type,
  'PayPal_lang_code' => (isset($iso_lang[$this->context->language->iso_code])) ? $iso_lang[$this->context->language->iso_code] : 'en_US',
  'PayPal_current_shop_url' => PayPal::getShopDomainSsl(true, true).$_SERVER['REQUEST_URI'],
  'PayPal_tracking_code' => $this->getTrackingCode())
 );

 return $this->fetchTemplate('express_checkout_shortcut_button.tpl');
}
public function renderExpressCheckoutForm($type)
{
 if ((!Configuration::get('PAYPAL_EXPRESS_CHECKOUT_SHORTCUT') && !$this->useMobile()) || !in_array(ECS, $this->getPaymentMethods()) ||
 (((int)Configuration::get('PAYPAL_BUSINESS') == 1) && ((int)Configuration::get('PAYPAL_PAYMENT_METHOD') == HSS) && !$this->useMobile()))
  return;
 $this->context->smarty->assign(array(
  'PayPal_payment_type' => $type,
  'PayPal_current_shop_url' => PayPal::getShopDomainSsl(true, true).$_SERVER['REQUEST_URI'],
  'PayPal_tracking_code' => $this->getTrackingCode())
 );
 return $this->fetchTemplate('express_checkout_shortcut_form.tpl');
}
public function useMobile()
{
 if ((method_exists($this->context, 'getMobileDevice') && $this->context->getMobileDevice()) || Tools::getValue('ps_mobile_site'))
  return true;
 return false;
}
public function getTrackingCode()
{
 if ((_PS_VERSION_ < '1.5') && (_THEME_NAME_ == 'prestashop_mobile' || (isset($_GET['ps_mobile_site']) && $_GET['ps_mobile_site'] == 1)))
 {
  if (_PS_MOBILE_TABLET_)
return TABLET_TRACKING_CODE;
  elseif (_PS_MOBILE_PHONE_)
return SMARTPHONE_TRACKING_CODE;
 }
 if (isset($this->context->mobile_detect))
 {
  if ($this->context->mobile_detect->isTablet())
return TABLET_TRACKING_CODE;
  elseif ($this->context->mobile_detect->isMobile())
return SMARTPHONE_TRACKING_CODE;
 }
 return TRACKING_CODE;
}
public function getTranslations()
{
 $file = dirname(__FILE__).'/'._PAYPAL_TRANSLATIONS_XML_;
 if (file_exists($file))
 {
  $xml = simplexml_load_file($file);
  if (isset($xml) && $xml)
  {
$index = -1;
$content = $default = array();

while (isset($xml->country[++$index]))
{
 $country = $xml->country[$index];
 $country_iso = $country->attributes()->iso_code;

 if (($this->iso_code != 'default') && ($country_iso == $this->iso_code))
  $content = (array)$country;
 elseif ($country_iso == 'default')
  $default = (array)$country;
}

$content += $default;
$this->context->smarty->assign('PayPal_content', $content);

return true;
  }
 }
 return false;
}
public function getPayPalURL()
{
 return 'www'.(Configuration::get('PAYPAL_SANDBOX') ? '.sandbox' : '').'.paypal.com';
}
public function getPaypalIntegralEvolutionUrl()
{
 if (Configuration::get('PAYPAL_SANDBOX'))
  return 'https://'.$this->getPayPalURL().'/cgi-bin/acquiringweb';
 return 'https://securepayments.paypal.com/acquiringweb?cmd=_hosted-payment';
}
public function getPaypalStandardUrl()
{
 return 'https://'.$this->getPayPalURL().'/cgi-bin/webscr';
}
public function getAPIURL()
{
 return 'api-3t'.(Configuration::get('PAYPAL_SANDBOX') ? '.sandbox' : '').'.paypal.com';
}
public function getAPIScript()
{
 return '/nvp';
}
public function getCountryDependency($iso_code)
{
 $localizations = array(
  'AU' => array('AU'), 'BE' => array('BE'), 'CN' => array('CN', 'MO'), 'CZ' => array('CZ'), 'DE' => array('DE'), 'ES' => array('ES'),
  'FR' => array('FR'), 'GB' => array('GB'), 'HK' => array('HK'), 'IL' => array('IL'), 'IN' => array('IN'), 'IT' => array('IT', 'VA'),
  'JP' => array('JP'), 'MY' => array('MY'), 'NL' => array('AN', 'NL'), 'NZ' => array('NZ'), 'PL' => array('PL'), 'PT' => array('PT', 'BR'),
  'RA' => array('AF', 'AS', 'BD', 'BN', 'BT', 'CC', 'CK', 'CX', 'FM', 'HM', 'ID', 'KH', 'KI', 'KN', 'KP', 'KR', 'KZ', 'LA', 'LK', 'MH',
'MM', 'MN', 'MV', 'MX', 'NF', 'NP', 'NU', 'OM', 'PG', 'PH', 'PW', 'QA', 'SB', 'TJ', 'TK', 'TL', 'TM', 'TO', 'TV', 'TZ', 'UZ', 'VN',
'VU', 'WF', 'WS'),
  'RE' => array('IE', 'ZA', 'GP', 'GG', 'JE', 'MC', 'MS', 'MP', 'PA', 'PY', 'PE', 'PN', 'PR', 'LC', 'SR', 'TT',
'UY', 'VE', 'VI', 'AG', 'AR', 'CA', 'BO', 'BS', 'BB', 'BZ', 'CL', 'CO', 'CR', 'CU', 'SV', 'GD', 'GT', 'HN', 'JM', 'NI', 'AD', 'AE',
'AI', 'AL', 'AM', 'AO', 'AQ', 'AT', 'AW', 'AX', 'AZ', 'BA', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BV', 'BW', 'BY', 'CD', 'CF', 'CG',
'CH', 'CI', 'CM', 'CV', 'CY', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ET', 'FI', 'FJ', 'FK', 'FO', 'GA', 'GE', 'GF',
'GH', 'GI', 'GL', 'GM', 'GN', 'GQ', 'GR', 'GS', 'GU', 'GW', 'GY', 'HR', 'HT', 'HU', 'IM', 'IO', 'IQ', 'IR', 'IS', 'JO', 'KE', 'KM', 'KW',
'KY', 'LB', 'LI', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MD', 'ME', 'MF', 'MG', 'MK', 'ML', 'MQ', 'MR', 'MT', 'MU', 'MW', 'MZ', 'NA',
'NC', 'NE', 'NG', 'NO', 'NR', 'PF', 'PK', 'PM', 'PS', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SC', 'SD', 'SE', 'SI', 'SJ', 'SK', 'SL',
'SM', 'SN', 'SO', 'ST', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TN', 'UA', 'UG', 'VC', 'VG', 'YE', 'YT', 'ZM', 'ZW'),
  'SG' => array('SG'), 'TH' => array('TH'), 'TR' => array('TR'), 'TW' => array('TW'), 'US' => array('US'));
 foreach ($localizations as $key => $value)
  if (in_array($iso_code, $value))
return $key;
 return $this->getCountryDependency(self::DEFAULT_COUNTRY_ISO);
}
public function getPaymentMethods()
{
 // WPS -> Web Payment Standard
 // HSS -> Web Payment Pro / Integral Evolution
 // ECS -> Express Checkout Solution
 $paymentMethod = array('AU' => array(WPS, HSS, ECS), 'BE' => array(WPS, ECS), 'CN' => array(WPS, ECS), 'CZ' => array(), 'DE' => array(WPS),
 'ES' => array(WPS, HSS, ECS), 'FR' => array(WPS, HSS, ECS), 'GB' => array(WPS, HSS, ECS), 'HK' => array(WPS, HSS, ECS),
 'IL' => array(WPS, ECS), 'IN' => array(WPS, ECS), 'IT' => array(WPS, HSS, ECS), 'JP' => array(WPS, HSS, ECS), 'MY' => array(WPS, ECS),
 'NL' => array(WPS, ECS), 'NZ' => array(WPS, ECS), 'PL' => array(WPS, ECS), 'PT' => array(WPS, ECS), 'RA' => array(WPS, ECS), 'RE' => array(WPS, ECS),
 'SG' => array(WPS, ECS), 'TH' => array(WPS, ECS), 'TR' => array(WPS, ECS), 'TW' => array(WPS, ECS), 'US' => array(WPS, ECS),
 'ZA' => array(WPS, ECS));
 return isset($paymentMethod[$this->iso_code]) ? $paymentMethod[$this->iso_code] : $paymentMethod[self::DEFAULT_COUNTRY_ISO];
}
public function getCountryCode()
{
 $cart = new Cart((int)$this->context->cookie->id_cart);
 $address = new Address((int)$cart->id_address_invoice);
 $country = new Country((int)$address->id_country);
 return $country->iso_code;
}
public function displayPayPalAPIError($message, $log = false)
{
 $send = true;
 // Sanitize log
 foreach ($log as $key => $string)
 {
  if ($string == 'ACK -> Success')
$send = false;
  elseif (substr($string, 0, 6) == 'METHOD')
  {
$values = explode('&', $string);
foreach ($values as $key2 => $value)
{
 $values2 = explode('=', $value);
 foreach ($values2 as $key3 => $value2)
  if ($value2 == 'PWD' || $value2 == 'SIGNATURE')
   $values2[$key3 + 1] = '*********';
 $values[$key2] = implode('=', $values2);
}
$log[$key] = implode('&', $values);
  }
 }
 $this->context->smarty->assign(array('message' => $message, 'logs' => $log));
 if ($send)
 {
  $id_lang = (int)$this->context->cookie->id_lang;
  $iso_lang = Language::getIsoById($id_lang);
  if (!is_dir(dirname(__FILE__).'/mails/'.strtolower($iso_lang)))
$id_lang = Language::getIdByIso('en');
  Mail::Send($id_lang, 'error_reporting', Mail::l('Error reporting from your PayPal module',
  (int)$this->context->cookie->id_lang), array('{logs}' => implode('<br />', $log)), Configuration::get('PS_SHOP_EMAIL'),
  null, null, null, null, null, _PS_MODULE_DIR_.$this->name.'/mails/');
 }
 return $this->fetchTemplate('error.tpl');
}
private function _canRefund($id_order)
{
 if (!(bool)$id_order)
  return false;
 $paypal_order = Db::getInstance()->getRow('
  SELECT `payment_status`, `capture`
  FROM `'._DB_PREFIX_.'paypal_order`
  WHERE `id_order` = '.(int)$id_order);
 return $paypal_order && $paypal_order['payment_status'] == 'Completed' && $paypal_order['capture'] == 0;
}
private function _needValidation($id_order)
{
 if (!(int)$id_order)
  return false;
 $order = Db::getInstance()->getRow('
  SELECT `payment_method`, `payment_status`
  FROM `'._DB_PREFIX_.'paypal_order`
  WHERE `id_order` = '.(int)$id_order);
 return $order && $order['payment_method'] != HSS && $order['payment_status'] == 'Pending_validation';
}
private function _needCapture($id_order)
{
 if (!(int)$id_order)
  return false;
 $result = Db::getInstance()->getRow('
  SELECT `payment_method`, `payment_status`
  FROM `'._DB_PREFIX_.'paypal_order`
  WHERE `id_order` = '.(int)$id_order.' AND `capture` = 1');
 return $result && $result['payment_method'] != HSS && $result['payment_status'] == 'Pending_capture';
}
private function _preProcess()
{
 if (Tools::isSubmit('submitPaypal'))
 {
  $business = Tools::getValue('business') !== false ? (int)Tools::getValue('business') : false;
  $payment_method = Tools::getValue('paypal_payment_method') !== false ? (int)Tools::getValue('paypal_payment_method') : false;
  $payment_capture = Tools::getValue('payment_capture') !== false ? (int)Tools::getValue('payment_capture') : false;
  $sandbox_mode = Tools::getValue('sandbox_mode') !== false ? (int)Tools::getValue('sandbox_mode') : false;
  if ($this->default_country === false || $sandbox_mode === false || $payment_capture === false || $business === false || $payment_method === false)
$this->_errors[] = $this->l('Some fields are empty.');
  elseif (($business == 0 || ($business == 1 && $payment_method != HSS)) && (!Tools::getValue('api_username') || !Tools::getValue('api_password') || !Tools::getValue('api_signature')))
$this->_errors[] = $this->l('Credentials fields cannot be empty');
  elseif ($business == 1 && $payment_method == HSS && !Tools::getValue('api_business_account'))
$this->_errors[] = $this->l('Business e-mail field cannot be empty');
 }
 return !count($this->_errors);
}
private function _postProcess()
{
 if (Tools::isSubmit('submitPaypal'))
 {
  if (Tools::getValue('paypal_country_only'))
Configuration::updateValue('PAYPAL_COUNTRY_DEFAULT', (int)Tools::getValue('paypal_country_only'));
  elseif ($this->_preProcess())
  {
Configuration::updateValue('PAYPAL_BUSINESS', (int)Tools::getValue('business'));
Configuration::updateValue('PAYPAL_PAYMENT_METHOD', (int)Tools::getValue('paypal_payment_method'));
Configuration::updateValue('PAYPAL_API_USER', trim(Tools::getValue('api_username')));
Configuration::updateValue('PAYPAL_API_PASSWORD', trim(Tools::getValue('api_password')));
Configuration::updateValue('PAYPAL_API_SIGNATURE', trim(Tools::getValue('api_signature')));
Configuration::updateValue('PAYPAL_BUSINESS_ACCOUNT', trim(Tools::getValue('api_business_account')));
Configuration::updateValue('PAYPAL_EXPRESS_CHECKOUT_SHORTCUT', (int)Tools::getValue('express_checkout_shortcut'));
Configuration::updateValue('PAYPAL_SANDBOX', (int)Tools::getValue('sandbox_mode'));
Configuration::updateValue('PAYPAL_CAPTURE', (int)Tools::getValue('payment_capture'));
$this->context->smarty->assign('PayPal_save_success', true);
  }
  else
  {
$this->_html = $this->displayError(implode('<br />', $this->_errors)); // Not displayed at this time
$this->context->smarty->assign('PayPal_save_failure', true);
  }
 }
 return $this->loadLangDefault();
}
private function _makeRefund($id_transaction, $id_order, $amt = false)
{
 if (!$this->isPayPalAPIAvailable())
  die(Tools::displayError('Fatal Error: no API Credentials are available'));
 elseif (!$id_transaction)
  die(Tools::displayError('Fatal Error: id_transaction is null'));
 if (!$amt)
  $params = array('TRANSACTIONID' => $id_transaction, 'REFUNDTYPE' => 'Full');
 else
 {
  $isoCurrency = Db::getInstance()->getValue('
SELECT `iso_code`
FROM `'._DB_PREFIX_.'orders` o
LEFT JOIN `'._DB_PREFIX_.'currency` c ON (o.`id_currency` = c.`id_currency`)
WHERE o.`id_order` = '.(int)$id_order);
  $params = array('TRANSACTIONID' => $id_transaction, 'REFUNDTYPE' => 'Partial', 'AMT' => (float)$amt, 'CURRENCYCODE' => Tools::strtoupper($isoCurrency));
 }
 $paypal_lib = new PaypalLib();
 return $paypal_lib->makeCall($this->getAPIURL(), $this->getAPIScript(), 'RefundTransaction', '&'.http_build_query($params, '', '&'));
}
public function _addNewPrivateMessage($id_order, $message)
{
 if (!(bool)$id_order)
  return false;
 $new_message = new Message();
 $message = strip_tags($message, '<br>');
 if (!Validate::isCleanHtml($message))
  $message = $this->l('Payment message is not valid, please check your module.');
 $new_message->message = $message;
 $new_message->id_order = (int)$id_order;
 $new_message->private = 1;
 return $new_message->add();
}
private function _doTotalRefund($id_order)
{
 $paypal_order = PayPalOrder::getOrderById((int)$id_order);
 if (!$this->isPayPalAPIAvailable() || !$paypal_order)
  return false;
 $order = new Order((int)$id_order);
 if (!Validate::isLoadedObject($order))
  return false;
 $products = $order->getProducts();
 $currency = new Currency((int)$order->id_currency);
 if (!Validate::isLoadedObject($currency))
  $this->_errors[] = $this->l('Not a valid currency');
 if (count($this->_errors))
  return false;
 $decimals = (is_array($currency) ? (int)$currency['decimals'] : (int)$currency->decimals) * _PS_PRICE_DISPLAY_PRECISION_;
 // Amount for refund
 $amt = 0.00;
 foreach ($products as $product)
  $amt += (float)($product['product_price_wt']) * ($product['product_quantity'] - $product['product_quantity_refunded']);
 $amt += (float)($order->total_shipping) + (float)($order->total_wrapping) - (float)($order->total_discounts);
 // check if total or partial
 if (Tools::ps_round($order->total_paid_real, $decimals) == Tools::ps_round($amt, $decimals))
  $response = $this->_makeRefund($paypal_order['id_transaction'], $id_order);
 else
  $response = $this->_makeRefund($paypal_order['id_transaction'], $id_order, (float)($amt));
 $message = $this->l('Refund operation result:').'<br>';
 foreach ($response as $key => $value)
  $message .= $key.': '.$value.'<br>';
 if (array_key_exists('ACK', $response) && $response['ACK'] == 'Success' && $response['REFUNDTRANSACTIONID'] != '')
 {
  $message .= $this->l('PayPal refund successful!');
  if (!Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'paypal_order` SET `payment_status` = \'Refunded\' WHERE `id_order` = '.(int)$id_order))
die(Tools::displayError('Error when updating PayPal database'));
  $history = new OrderHistory();
  $history->id_order = (int)$id_order;
  $history->changeIdOrderState((int)Configuration::get('PS_OS_REFUND'), $history->id_order);
  $history->addWithemail();
  $history->save();
 }
 else
  $message .= $this->l('Transaction error!');
 $this->_addNewPrivateMessage((int)$id_order, $message);
 Tools::redirect($_SERVER['HTTP_REFERER']);
}
private function _doCapture($id_order)
{
 $paypal_order = PayPalOrder::getOrderById((int)$id_order);
 if (!$this->isPayPalAPIAvailable() || !$paypal_order)
  return false;
 $order = new Order((int)$id_order);
 $currency = new Currency((int)$order->id_currency);
 $paypal_lib = new PaypalLib();
 $response = $paypal_lib->makeCall($this->getAPIURL(), $this->getAPIScript(), 'DoCapture',
  '&'.http_build_query(array('AMT' => (float)$order->total_paid, 'AUTHORIZATIONID' => $paypal_order['id_transaction'],
  'CURRENCYCODE' => $currency->iso_code, 'COMPLETETYPE' => 'Complete'), '', '&'));
 $message = $this->l('Capture operation result:').'<br>';
 foreach ($response as $key => $value)
  $message .= $key.': '.$value.'<br>';
 if ((array_key_exists('ACK', $response)) && ($response['ACK'] == 'Success') && ($response['PAYMENTSTATUS'] == 'Completed'))
 {
  $order_history = new OrderHistory();
  $order_history->id_order = (int)$id_order;

  if (_PS_VERSION_ < '1.5')
$order_history->changeIdOrderState(Configuration::get('PS_OS_WS_PAYMENT'), (int)$id_order);
  else
$order_history->changeIdOrderState(Configuration::get('PS_OS_WS_PAYMENT'), $order);
  $order_history->addWithemail();
  $message .= $this->l('Order finished with PayPal!');
 }
 elseif (isset($response['PAYMENTSTATUS']))
  $message .= $this->l('Transaction error!');
 if (!Db::getInstance()->Execute('
  UPDATE `'._DB_PREFIX_.'paypal_order`
  SET `capture` = 0, `payment_status` = \''.pSQL($response['PAYMENTSTATUS']).'\', `id_transaction` = \''.pSQL($response['TRANSACTIONID']).'\'
  WHERE `id_order` = '.(int)$id_order))
  die(Tools::displayError('Error when updating PayPal database'));
 $this->_addNewPrivateMessage((int)$id_order, $message);
 Tools::redirect($_SERVER['HTTP_REFERER']);
}
private function _updatePaymentStatusOfOrder($id_order)
{
 if (!(bool)$id_order || !$this->isPayPalAPIAvailable())
  return false;
 $paypal_order = PayPalOrder::getOrderById((int)$id_order);
 if (!$paypal_order)
  return false;
 $paypal_lib = new PaypalLib();
 $response = $paypal_lib->makeCall($this->getAPIURL(), $this->getAPIScript(), 'GetTransactionDetails',
  '&'.http_build_query(array('TRANSACTIONID' => $paypal_order->id_transaction), '', '&'));
 if (array_key_exists('ACK', $response))
 {
  if ($response['ACK'] == 'Success' && isset($response['PAYMENTSTATUS']))
  {
$history = new OrderHistory();
$history->id_order = (int)$id_order;
if ($response['PAYMENTSTATUS'] == 'Completed')
 $history->changeIdOrderState(Configuration::get('PS_OS_PAYMENT'), (int)$id_order);
elseif (($response['PAYMENTSTATUS'] == 'Pending') && ($response['PENDINGREASON'] == 'authorization'))
 $history->changeIdOrderState((int)(Configuration::get('PAYPAL_OS_AUTHORIZATION')), (int)$id_order);
elseif ($response['PAYMENTSTATUS'] == 'Reversed')
 $history->changeIdOrderState(Configuration::get('PS_OS_ERROR'), (int)$id_order);
$history->addWithemail();
if (!Db::getInstance()->Execute('
UPDATE `'._DB_PREFIX_.'paypal_order`
SET `payment_status` = \''.pSQL($response['PAYMENTSTATUS']).($response['PENDINGREASON'] == 'authorization' ? '_authorization' : '').'\'
WHERE `id_order` = '.(int)$id_order))
 die(Tools::displayError('Error when updating PayPal database'));
  }
  $message = $this->l('Verification status :').'<br>';
  $this->formatMessage($response, $message);
  $this->_addNewPrivateMessage((int)$id_order, $message);
  return $response;
 }
 return false;
}
public function fetchTemplate($name)
{
 if (_PS_VERSION_ < '1.4')
  $this->context->smarty->currentTemplate = $name;
 elseif (_PS_VERSION_ < '1.5')
 {
  $views = 'views/templates/';
  if (@filemtime(dirname(__FILE__).'/'.$name))
return $this->display(__FILE__, $name);
  elseif (@filemtime(dirname(__FILE__).'/'.$views.'hook/'.$name))
return $this->display(__FILE__, $views.'hook/'.$name);
  elseif (@filemtime(dirname(__FILE__).'/'.$views.'front/'.$name))
return $this->display(__FILE__, $views.'front/'.$name);
  elseif (@filemtime(dirname(__FILE__).'/'.$views.'back/'.$name))
return $this->display(__FILE__, $views.'back/'.$name);
 }

 return $this->display(__FILE__, $name);
}
public static function getPayPalCustomerIdByEmail($email)
{
 return Db::getInstance()->getValue('
  SELECT `id_customer`
  FROM `'._DB_PREFIX_.'paypal_customer`
  WHERE paypal_email = \''.pSQL($email).'\'');
}
public static function getPayPalEmailByIdCustomer($id_customer)
{
 return Db::getInstance()->getValue('
  SELECT `paypal_email`
  FROM `'._DB_PREFIX_.'paypal_customer`
  WHERE `id_customer` = '.(int)$id_customer);
}
public static function addPayPalCustomer($id_customer, $email)
{
 if (!PayPal::getPayPalEmailByIdCustomer($id_customer))
 {
  Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'paypal_customer` (`id_customer`, `paypal_email`)
VALUES('.(int)$id_customer.', \''.pSQL($email).'\')');
  return Db::getInstance()->Insert_ID();
 }
 return false;
}
private function warningsCheck()
{
 if (Configuration::get('PAYPAL_PAYMENT_METHOD') == HSS && Configuration::get('PAYPAL_BUSINESS_ACCOUNT') == '[email protected]')
  $this->warning = $this->l('You are currently using the default PayPal e-mail address, please enter your own e-mail address.').'<br />';

 /* Check preactivation warning */
 if (Configuration::get('PS_PREACTIVATION_PAYPAL_WARNING'))
  $this->warning .= (!empty($this->warning)) ? ', ' : Configuration::get('PS_PREACTIVATION_PAYPAL_WARNING').'<br />';
}
private function loadLangDefault()
{
 $paypal_country_default = (int)Configuration::get('PAYPAL_COUNTRY_DEFAULT');
 $this->default_country = ($paypal_country_default ? (int)$paypal_country_default : (int)Configuration::get('PS_COUNTRY_DEFAULT'));
 $this->iso_code = $this->getCountryDependency(Country::getIsoById((int)$this->default_country));
}
public function formatMessage($response, &$message)
{
 foreach ($response as $key => $value)
  $message .= $key.': '.$value.'<br>';
}
private function checkCurrency($cart)
{
 $currency_module = $this->getCurrency((int)$cart->id_currency);
 if ((int)$cart->id_currency == (int)$currency_module->id)
  return true;
 else
  return false;
}
public static function getShopDomainSsl($http = false, $entities = false)
{
 if (method_exists('Tools', 'getShopDomainSsl'))
  return Tools::getShopDomainSsl($http, $entities);
 else
 {
  if (!($domain = Configuration::get('PS_SHOP_DOMAIN_SSL')))
$domain = self::getHttpHost();
  if ($entities)
$domain = htmlspecialchars($domain, ENT_COMPAT, 'UTF-8');
  if ($http)
$domain = (Configuration::get('PS_SSL_ENABLED') ? 'https://' : 'http://').$domain;
  return $domain;
 }
}

public function validateOrder($id_cart, $id_order_state, $amountPaid, $paymentMethod = 'Unknown', $message = null, $transaction = array(), $currency_special = null, $dont_touch_amount = false, $secure_key = false, Shop $shop = null)
{
 if ($this->active)
 {
  // Set transaction details if pcc is defined in PaymentModule class_exists
  if (isset($this->pcc))
$this->pcc->transaction_id = (isset($transaction['transaction_id']) ? $transaction['transaction_id'] : '');
  if (_PS_VERSION_ < '1.5')
parent::validateOrder((int)$id_cart, (int)$id_order_state, (float)$amountPaid, $paymentMethod, $message, $transaction, $currency_special, $dont_touch_amount, $secure_key);
  else
parent::validateOrder((int)$id_cart, (int)$id_order_state, (float)$amountPaid, $paymentMethod, $message, $transaction, $currency_special, $dont_touch_amount, $secure_key, $shop);
  if (count($transaction) > 0)
PayPalOrder::saveOrder((int)$this->currentOrder, $transaction);
 }
}
protected function getGiftWrappingPrice()
{
 if (_PS_VERSION_ >= '1.5')
  $wrapping_fees_tax_inc = $this->context->cart->getGiftWrappingPrice();
 else
 {
  $wrapping_fees = (float)(Configuration::get('PS_GIFT_WRAPPING_PRICE'));
  $wrapping_fees_tax = new Tax((int)(Configuration::get('PS_GIFT_WRAPPING_TAX')));
  $wrapping_fees_tax_inc = $wrapping_fees * (1 + (((float)($wrapping_fees_tax->rate) / 100)));
 }
 return (float)Tools::convertPrice($wrapping_fees_tax_inc, $this->context->currency);
}
}

Edited by yeremaya (see edit history)
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...