Ответить Новая тема Новый опрос 
 При попытке регистрации выскакивает вот это
MTL
Новичок
Сообщений: 36
Регистрация: 04-02-2016


10-11-2016 16:33
При попытке регистрации выскакивает вот это


TECHNICAL ERROR: unable to save account Details: Error thrown: [object Object] Text status: error

где копать?что искать?


Из error log'a

[Wed Nov 09 16:28:03 2016] [error] [client 93.171.24.160] PHP Fatal error: Call to undefined method AuthController::isOpcModuleActive() in /home/s/******/public_html/override/controllers/front/AuthController.php on line 12, referer: http://avtozvuk.com.ru/authentication?back=my-account

Код:
<?php
class AuthController extends AuthControllerCore
{






    protected function processSubmitAccount()
    {
12.        if (!$this->isOpcModuleActive())
            return parent::processSubmitAccount();

        // Entire override is here just because of rigid address set-up. Original PS do not expect
        // address being set to cart prior to processSubmitAccount call and thus always creates new Address
        $inv_first_on = (Configuration::get('OPC_INVOICE_FIRST') == "1");
        Hook::exec('actionBeforeSubmitAccount');
        $this->create_account = true;
        if (Tools::isSubmit('submitAccount'))
            $this->context->smarty->assign('email_create', 1);
        // New Guest customer
        if (!Tools::getValue('is_new_customer', 1) && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED'))
            $this->errors[] = Tools::displayError('You cannot create a guest account.');

        // Customer (not-guest) checkout, password field is hidden and password is automatically generated
        if ((!Tools::getIsset('passwd') || trim($_POST['passwd']) == "") &&
            trim(Tools::getValue('email')) != "" &&
            Configuration::get('OPC_CREATE_CUSTOMER_PASSWORD') &&
            !CustomerCore::customerExists(Tools::getValue('email'))
        ) {
            $_POST['is_new_customer'] = 1;
            $_POST['passwd'] = Tools::passwdGen(5);
        }
        elseif (!Tools::getValue('is_new_customer', 1))
            $_POST['passwd'] = md5(time()._COOKIE_KEY_);

        if (Tools::getIsset('guest_email') && $_POST['guest_email'])
            $_POST['email'] = $_POST['guest_email'];
        // Checked the user address in case he changed his email address
        if (Validate::isEmail($email = Tools::getValue('email')) && !empty($email))
            if (Customer::customerExists($email))
                $this->errors[] = Tools::displayError('An account is already registered with this e-mail.', false);
        // Preparing customer
        $customer = new Customer();
        $_POST['lastname'] = Tools::getValue('customer_lastname');
        $_POST['firstname'] = Tools::getValue('customer_firstname');
        $_POST['phone'] = Tools::getValue('phone');

//        if (Configuration::get('PS_ONE_PHONE_AT_LEAST') && !Tools::getValue('phone') && !Tools::getValue('phone_mobile') &&
//            (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || Configuration::get('PS_GUEST_CHECKOUT_ENABLED')))
//            $this->errors[] = Tools::displayError('You must register at least one phone number');

        $error_phone = false;
        if (Configuration::get('PS_ONE_PHONE_AT_LEAST'))
        {
            $inv_suffix = ($inv_first_on)?"_invoice":"";
            if (Tools::isSubmit('submitGuestAccount') || !Tools::getValue('is_new_customer'))
            {
                if (!Tools::getValue('phone'.$inv_suffix) && !Tools::getValue('phone_mobile'.$inv_suffix))
                    $error_phone = true;
            }
            elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || Configuration::get('PS_ORDER_PROCESS_TYPE'))
                && (Configuration::get('PS_ORDER_PROCESS_TYPE') && !Tools::getValue('email_create')))
                && (!Tools::getValue('phone'.$inv_suffix) && !Tools::getValue('phone_mobile'.$inv_suffix)))
                $error_phone = true;
            elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE') && Tools::getValue('email_create')))
                && (!Tools::getValue('phone'.$inv_suffix) && !Tools::getValue('phone_mobile'.$inv_suffix)))
                $error_phone = true;
        }

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


        $this->errors = array_unique(array_merge($this->errors, $customer->validateController()));

        // Check the requires fields which are settings in the BO
        $this->errors = array_merge($this->errors, $customer->validateFieldsRequiredDatabase());

        if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
        {

            if (!count($this->errors))
            {
                if (Tools::isSubmit('newsletter'))
                    $this->processCustomerNewsletter($customer);
                $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']);
                if (!Validate::isBirthDate($customer->birthday))
                    $this->errors[] = Tools::displayError('Invalid birthday.');
                $customer->active = 1;
                // New Guest customer
                if (Tools::isSubmit('is_new_customer'))
                    $customer->is_guest = !Tools::getValue('is_new_customer', 1);
                else
                    $customer->is_guest = 0;
                if (!count($this->errors))
                    if (!$customer->add())
                        $this->errors[] = Tools::displayError('An error occurred while creating your account.');
                    else
                    {
                        if (!$customer->is_guest)
                            if (!$this->sendConfirmationMail($customer))
                                $this->errors[] = Tools::displayError('Cannot send e-mail');

                        $this->updateContext($customer);

                        $this->context->cart->update();
                        Hook::exec('actionCustomerAccountAdd', array(
                            '_POST' => $_POST,
                            'newCustomer' => $customer
                        ));
                        if ($this->ajax)
                        {
                            $return = array(
                                'hasError' => !empty($this->errors),
                                'errors' => $this->errors,
                                'isSaved' => true,
                                'id_customer' => (int)$this->context->cookie->id_customer,
                                'id_address_delivery' => $this->context->cart->id_address_delivery,
                                'id_address_invoice' => $this->context->cart->id_address_invoice,
                                'token' => Tools::getToken(false)
                            );
                            die(Tools::jsonEncode($return));
                        }
                        // redirection: if cart is not empty : redirection to the cart
                        if (count($this->context->cart->getProducts(true)) > 0)
                            Tools::redirect('index.html?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
                        // else : redirection to the account
                        else
                            Tools::redirect('index.html?controller=my-account');
                    }
            }

        }
        else // if registration type is in one step, we save the address
        {



            $lastnameAddress = ($inv_first_on) ? $_POST['lastname_invoice'] : $_POST['lastname'];
            $firstnameAddress = ($inv_first_on) ? $_POST['firstname_invoice'] : $_POST['firstname'];

            // Preparing address

            $id_address = isset($this->context->cart->id_address_delivery) ? (int)$this->context->cart->id_address_delivery : 0;
            if ($id_address > 0)
                $address = new Address($id_address);
            else
                $address = new Address();

            $_POST['lastname'] = $lastnameAddress;
            $_POST['firstname'] = $firstnameAddress;
            $address->id_customer = 1;
            $this->errors = array_unique(array_merge($this->errors, $address->validateController()));

            // US customer: normalize the address
            if (version_compare(_PS_VERSION_, "1.6.0") < 0 && $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);
            }

            $inv_suffix = ($inv_first_on)?"_invoice":"";
            $country = new Country((int)Tools::getValue('id_country'.$inv_suffix));
            if ($country->need_zip_code)
            {
                if (($postcode = Tools::getValue('postcode'.$inv_suffix)) && $country->zip_code_format)
                {
                    if (!$country->checkZipCode($postcode))
                        $this->errors[] = sprintf(
                            Tools::displayError('Zip/Postal code is invalid. Must be typed as follows: %s'),
                            str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format)))
                        );
                }
                elseif ($country->zip_code_format && !$this->context->cart->isVirtualCart())
                    $this->errors[] = Tools::displayError('Zip/Postal code is required.');
                elseif ($postcode && !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode))
                    $this->errors[] = Tools::displayError('Zip/Postal code is invalid.');
            }

            /*if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))
                $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.');
            elseif (!$country->need_identification_number)
            $address->dni = null;*/
        }

        if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) && !(Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == ''))
            $this->errors[] = Tools::displayError('Invalid date of birth');

        if (!count($this->errors))
        {
            if (Customer::customerExists(Tools::getValue('email')))
                $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please enter your password or request a new one.', false);
            if (Tools::isSubmit('newsletter'))
                $this->processCustomerNewsletter($customer);

            $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']);
            if (!Validate::isBirthDate($customer->birthday))
                $this->errors[] = Tools::displayError('Invalid birthday.');

            if (!count($this->errors))
            {
                // if registration type is in one step, we save the address
                if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE'))
                    if (!($country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country))
                        die(Tools::displayError());
                $contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0;
                $id_state = isset($address) && is_object($address) ? (int)$address->id_state: 0;
                if (/*Configuration::get('PS_REGISTRATION_PROCESS_TYPE') &&*/ $contains_state && !$id_state)
                    $this->errors[] = Tools::displayError('This country requires a state selection.');
                else
                {
                    $customer->active = 1;
                    // New Guest customer
                    if (Tools::isSubmit('is_new_customer'))
                        $customer->is_guest = !Tools::getValue('is_new_customer', 1);
                    else
                        $customer->is_guest = 0;
                    if (!$customer->add())
                        $this->errors[] = Tools::displayError('An error occurred while creating your account.');
                    else
                    {
                        $address->id_customer = (int)$customer->id;
                        $this->errors = array_unique(array_merge($this->errors, $address->validateController()));
                        if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')))
                            if (($address->id > 0 && !$address->update()) || (!($address->id > 0) && !$address->add()))
                            $this->errors[] = Tools::displayError('An error occurred while creating your address.');
                        else
                        {
                            if (!$customer->is_guest)
                            {
                                $this->context->customer = $customer;
                                $customer->cleanGroups();
                                // we add the guest customer in the default customer group
                                $customer->addGroups(array((int)Configuration::get('PS_CUSTOMER_GROUP')));
                                if (!$this->sendConfirmationMail($customer))
                                    $this->errors[] = Tools::displayError('Cannot send e-mail');
                            }
                            else
                            {
                                $customer->cleanGroups();
                                // we add the guest customer in the guest customer group
                                $customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP')));
                            }
                            $this->updateContext($customer);
                            $this->context->cart->id_address_delivery = Address::getFirstCustomerAddressId((int)$customer->id);
                            if ($this->context->cart->id_address_invoice == 0)
                              $this->context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int)$customer->id);

                            // If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated
                            $this->context->cart->update();

                            // Avoid articles without delivery address on the cart
                            $this->context->cart->autosetProductAddress();

                            Hook::exec('actionCustomerAccountAdd', array(
                                '_POST' => $_POST,
                                'newCustomer' => $customer
                            ));
                            if ($this->ajax)
                            {
                                $return = array(
                                    'hasError' => !empty($this->errors),
                                    'errors' => $this->errors,
                                    'isSaved' => true,
                                    'id_customer' => (int)$this->context->cookie->id_customer,
                                    'id_address_delivery' => $this->context->cart->id_address_delivery,
                                    'id_address_invoice' => $this->context->cart->id_address_invoice,
                                    'token' => Tools::getToken(false)
                                );
                                die(Tools::jsonEncode($return));
                            }
                            // if registration type is in two steps, we redirect to register address
                            if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
                                Tools::redirect('index.html?controller=address');
                            if ($back = Tools::getValue('back'))
                                Tools::redirect($back);
                            Tools::redirect('index.html?controller=my-account');
                            // redirection: if cart is not empty : redirection to the cart
                            if (count($this->context->cart->getProducts(true)) > 0)
                                Tools::redirect('index.html?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
                            // else : redirection to the account
                            else
                                Tools::redirect('index.html?controller=my-account');
                        }
                    }
                }
            }
        }

        if (count($this->errors))
        {
            //for retro compatibility to display guest account creation form on authentication page
            if (Tools::getValue('submitGuestAccount'))
                $_GET['display_guest_checkout'] = 1;

            if (!Tools::getValue('is_new_customer'))
                unset($_POST['passwd']);
            if ($this->ajax)
            {
                $return = array(
                    'hasError' => !empty($this->errors),
                    'errors' => $this->errors,
                    'isSaved' => false,
                    'id_customer' => 0
                );
                die(Tools::jsonEncode($return));
            }
            $this->context->smarty->assign('account_error', $this->errors);
        }
    }
}



Сообщение отредактировал MTL (10-11-2016 12:34)


Изображения:
error.jpg - Размер файла59.26KB, Скачиваний: 357 (Нажмите для увеличения)
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
MTL
Новичок
Сообщений: 36
Регистрация: 04-02-2016


11-11-2016 16:50
Решено с помощью восстановления файлов и бэкапа недельной давности.
Вывод: всегда имейте несколько бэкапов,иногда проблема обнаруживается не сразу.
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
zapalm


Профессионал
Сообщений: 350
Откуда: Владивосток
Регистрация: 01-08-2009


12-11-2016 08:50
Для справки: когда такие php-ошибки возникают в классах из директории override, виновник в этом, скорее всего, какой-то модуль. В данном случае какой-то модуль "заказ на одной странице". По названию его метода isOpcModuleActive() через поиск по исходном коду сайта можно быстро определить, какой именно. А там дальше - решайте.

Вообще такая идея переопределение функциональности в PS - ошибочна, т.к. с ней много проблем.

Бэкапы всегда должны делаться, самом собой :)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ryzhkov_ev
Новичок
Сообщений: 5
Регистрация: 09-11-2016


14-11-2016 18:09
Аналогичная ошибка была решена "костылем" в настройках модуля newsleterpro, который пытался переопределить класс именно в swift.php и вызывал конфликт.
Могу поделиться как именно решили.... Пишите если нужно...
P.s.: Предыдущий пост "zapalm" полностью поддерживаю.
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос