Jump to content

Změna údajů zákazníka bez registrace


josejumbo

Recommended Posts

Jistě, zákazník je veden v administraci jako každý jiný zákazník (akorát on si myslí že není), takže lze údaje upravit/opravit jak je třeba.

 

Když se to v administraci snažím přepsat, tak mi to dává hlášku: Tato e-mailová adresa není registrovaná.

Link to comment
Share on other sites

Hm, koukám že to byl bug a už to opravili. Čili tady máš postup jak to obejít:

 

http://www.prestasho...post__p__579754

 

Dle tohoto návodu nemohu najít řádek , kde to změnit, v tom souboru jej nevidím, poradí mi někdo? Přikládám soubor, kde se to má měit, dle návodu a anglickém foru.

 

if (Configuration::get('VATNUMBER_MANAGEMENT') AND file_exists(_PS_MODULE_DIR_.'vatnumber/vatnumber.php'))

include_once(_PS_MODULE_DIR_.'vatnumber/vatnumber.php');

 

class AddressControllerCore extends FrontController

{

public $auth = true;

public $guestAllowed = true;

public $php_self = 'address.php';

public $authRedirection = 'addresses.php';

public $ssl = true;

 

protected $_address;

 

public function preProcess()

{

parent::preProcess();

 

if ($back = Tools::getValue('back'))

self::$smarty->assign('back', Tools::safeOutput($back));

if ($mod = Tools::getValue('mod'))

self::$smarty->assign('mod', Tools::safeOutput($mod));

 

if (Tools::isSubmit('ajax') AND Tools::isSubmit('type'))

{

if (Tools::getValue('type') == 'delivery')

$id_address = isset(self::$cart->id_address_delivery) ? (int)self::$cart->id_address_delivery : 0;

elseif (Tools::getValue('type') == 'invoice')

$id_address = (isset(self::$cart->id_address_invoice) AND self::$cart->id_address_invoice != self::$cart->id_address_delivery) ? (int)self::$cart->id_address_invoice : 0;

else

exit;

}

else

$id_address = (int)Tools::getValue('id_address', 0);

 

if ($id_address)

{

$this->_address = new Address((int)$id_address);

if (Validate::isLoadedObject($this->_address) AND Customer::customerHasAddress((int)(self::$cookie->id_customer), (int)($id_address)))

{

if (Tools::isSubmit('delete'))

{

if (self::$cart->id_address_invoice == $this->_address->id)

unset(self::$cart->id_address_invoice);

if (self::$cart->id_address_delivery == $this->_address->id)

unset(self::$cart->id_address_delivery);

if ($this->_address->delete())

Tools::redirect('addresses.php');

$this->errors[] = Tools::displayError('This address cannot be deleted.');

}

self::$smarty->assign(array('address' => $this->_address, 'id_address' => (int)$id_address));

}

elseif (Tools::isSubmit('ajax'))

exit;

else

Tools::redirect('addresses.php');

}

if (Tools::isSubmit('submitAddress'))

{

$address = new Address();

$this->errors = $address->validateControler();

$address->id_customer = (int)(self::$cookie->id_customer);

 

if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))

$this->errors[] = Tools::displayError('You must register at least one phone number');

if (!$country = new Country((int)$address->id_country) OR !Validate::isLoadedObject($country))

die(Tools::displayError());

 

/* US customer: normalize the address */

if ($address->id_country == Country::getByIso('US'))

{

include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');

$normalize = new AddressStandardizationSolution;

$address->address1 = $normalize->AddressLineStandardization($address->address1);

$address->address2 = $normalize->AddressLineStandardization($address->address2);

}

 

$zip_code_format = $country->zip_code_format;

if ($country->need_zip_code)

{

if (($postcode = Tools::getValue('postcode')) AND $zip_code_format)

{

$zip_regexp = '/^'.$zip_code_format.'$/ui';

$zip_regexp = str_replace(' ', '( |)', $zip_regexp);

$zip_regexp = str_replace('-', '(-|)', $zip_regexp);

$zip_regexp = str_replace('N', '[0-9]', $zip_regexp);

$zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp);

$zip_regexp = str_replace('C', $country->iso_code, $zip_regexp);

if (!preg_match($zip_regexp, $postcode))

$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));

}

elseif ($zip_code_format)

$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is required.');

elseif ($postcode AND !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode))

$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));

}

// if ($country->isNeedDni() AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni'))))

if ($country->isNeedDni() AND !Validate::isDniLite(Tools::getValue('dni')))

$this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.');

// elseif (!$country->isNeedDni())

// $address->dni = NULL;

if (Configuration::get('PS_TOKEN_ENABLE') == 1 AND

strcmp(Tools::getToken(false), Tools::getValue('token')) AND

self::$cookie->isLogged(true) === true)

$this->errors[] = Tools::displayError('Invalid token');

 

if ((int)($country->contains_states) AND !(int)($address->id_state))

$this->errors[] = Tools::displayError('This country requires a state selection.');

 

if (!sizeof($this->errors))

{

if (isset($id_address))

{

$country = new Country((int)($address->id_country));

if (Validate::isLoadedObject($country) AND !$country->contains_states)

$address->id_state = 0;

$address_old = new Address((int)$id_address);

if (Validate::isLoadedObject($address_old) AND Customer::customerHasAddress((int)self::$cookie->id_customer, (int)$address_old->id))

{

if ($address_old->isUsed())

{

$address_old->delete();

if (!Tools::isSubmit('ajax'))

{

$to_update = false;

if (self::$cart->id_address_invoice == $address_old->id)

{

$to_update = true;

self::$cart->id_address_invoice = 0;

}

if (self::$cart->id_address_delivery == $address_old->id)

{

$to_update = true;

self::$cart->id_address_delivery = 0;

}

if ($to_update)

self::$cart->update();

}

}

else

{

$address->id = (int)($address_old->id);

$address->date_add = $address_old->date_add;

}

}

}

elseif (self::$cookie->is_guest)

Tools::redirect('addresses.php');

 

if ($result = $address->save())

{

/* In order to select this new address : order-address.tpl */

if ((bool)(Tools::getValue('select_address', false)) == true OR (Tools::isSubmit('ajax') AND Tools::getValue('type') == 'invoice'))

{

/* This new adress is for invoice_adress, select it */

self::$cart->id_address_invoice = (int)($address->id);

self::$cart->update();

}

if (Tools::isSubmit('ajax'))

{

$return = array(

'hasError' => !empty($this->errors),

'errors' => $this->errors,

'id_address_delivery' => self::$cart->id_address_delivery,

'id_address_invoice' => self::$cart->id_address_invoice

);

die(Tools::jsonEncode($return));

}

Tools::redirect($back ? ($mod ? $back.'&back='.$mod : $back) : 'addresses.php');

}

$this->errors[] = Tools::displayError('An error occurred while updating your address.');

}

}

elseif (!$id_address)

{

$customer = new Customer((int)(self::$cookie->id_customer));

if (Validate::isLoadedObject($customer))

{

$_POST['firstname'] = $customer->firstname;

$_POST['lastname'] = $customer->lastname;

}

}

if (Tools::isSubmit('ajax') AND sizeof($this->errors))

{

$return = array(

'hasError' => !empty($this->errors),

'errors' => $this->errors

);

die(Tools::jsonEncode($return));

}

}

 

public function setMedia()

{

parent::setMedia();

Tools::addJS(_THEME_JS_DIR_.'tools/statesManagement.js');

}

 

public function process()

{

parent::process();

 

/* Secure restriction for guest */

if (self::$cookie->is_guest)

Tools::redirect('addresses.php');

 

if (Tools::isSubmit('id_country') AND Tools::getValue('id_country') != NULL AND is_numeric(Tools::getValue('id_country')))

$selectedCountry = (int)Tools::getValue('id_country');

elseif (isset($this->_address) AND isset($this->_address->id_country) AND !empty($this->_address->id_country) AND is_numeric($this->_address->id_country))

$selectedCountry = (int)$this->_address->id_country;

elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))

{

$array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

if (!Validate::isLanguageIsoCode($array[0]) OR !($selectedCountry = Country::getByIso($array[0])))

$selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT');

}

else

$selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT');

 

$countries = Country::getCountries((int)self::$cookie->id_lang, true);

$countriesList = '';

foreach ($countries AS $country)

$countriesList .= '<option value="'.(int)($country['id_country']).'" '.($country['id_country'] == $selectedCountry ? 'selected="selected"' : '').'>'.htmlentities($country['name'], ENT_COMPAT, 'UTF-8').'</option>';

 

if ((Configuration::get('VATNUMBER_MANAGEMENT') AND file_exists(_PS_MODULE_DIR_.'vatnumber/vatnumber.php')) && VatNumber::isApplicable(Configuration::get('PS_COUNTRY_DEFAULT')))

self::$smarty->assign('vat_display', 2);

elseif (Configuration::get('VATNUMBER_MANAGEMENT'))

self::$smarty->assign('vat_display', 1);

else

self::$smarty->assign('vat_display', 0);

 

self::$smarty->assign('ajaxurl', _MODULE_DIR_);

 

self::$smarty->assign('vatnumber_ajax_call', (int)file_exists(_PS_MODULE_DIR_.'vatnumber/ajax.php'));

 

self::$smarty->assign(array(

'countries_list' => $countriesList,

'countries' => $countries,

'errors' => $this->errors,

'token' => Tools::getToken(false),

'select_address' => (int)(Tools::getValue('select_address'))

));

}

 

protected function _processAddressFormat()

{

 

$id_country = is_null($this->_address)? 0 : (int)$this->_address->id_country;

 

$dlv_adr_fields = AddressFormat::getOrderedAddressFields($id_country, true, true);

self::$smarty->assign('ordered_adr_fields', $dlv_adr_fields);

}

 

public function displayHeader()

{

if (Tools::getValue('ajax') != 'true')

parent::displayHeader();

}

 

public function displayContent()

{

parent::displayContent();

 

$this->_processAddressFormat();

self::$smarty->display(_PS_THEME_DIR_.'address.tpl');

}

 

public function displayFooter()

{

if (Tools::getValue('ajax') != 'true')

parent::displayFooter();

}

}

Link to comment
Share on other sites

  • 1 year later...

Zrovna jsem změnu údajů u guestů řešil. Zde je řešení pro verzi 1.4.6.2.

 

pod tuto funkci v classes/Customer.php cca. řádek 203

public function getByEmail($email, $passwd = NULL)
{
	 if (!Validate::isEmail($email) OR ($passwd AND !Validate::isPasswd($passwd)))
		 die (Tools::displayError());

	$result = Db::getInstance()->getRow('
	SELECT *
	FROM `'._DB_PREFIX_	.'customer`
	WHERE `active` = 1
	AND `email` = \''.pSQL($email).'\'
	'.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'' : '').'
	AND `deleted` = 0
	AND `is_guest` = 0');

	if (!$result)
		return false;
	$this->id = $result['id_customer'];
	foreach ($result AS $key => $value)
		if (key_exists($key, $this))
			$this->{$key} = $value;

	return $this;
}

 

vložte pozměněnou funkci

public function getByEmailGuest($email, $passwd = NULL)
{
	 if (!Validate::isEmail($email) OR ($passwd AND !Validate::isPasswd($passwd)))
		 die (Tools::displayError());

	$result = Db::getInstance()->getRow('
	SELECT *
	FROM `'._DB_PREFIX_	.'customer`
	WHERE `active` = 1
	AND `email` = \''.pSQL($email).'\'
	'.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'' : '').'
	AND `deleted` = 0');

	if (!$result)
		return false;
	$this->id = $result['id_customer'];
	foreach ($result AS $key => $value)
		if (key_exists($key, $this))
			$this->{$key} = $value;

	return $this;
}

 

v admin_slozka/tabs/AdminAddresses.php na řádku 82 změňte

$customer->getByEmail(Tools::getValue('email'));

na

$customer->getByEmailGuest(Tools::getValue('email'));

 

Enjoy :)

Edited by Wonder.x (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...