Erro ao editar dados no painel de cliente com OSC Brasil 6 e Magento 1.9.3.x

No form edit do painel de clientes, com OSC6, quando vamos alterar dados da aba “Informações da conta” e salvamos, temos o seguinte erro:  “Senha atual inválida”, sem o OSC salva normal, mas notei que ele mostrava o box de senha atual quando o OSC estava desabilitado, fui olhar a controller desta versão nova 1.9.3.x em:
controller app/code/core/Mage/Customer/controllers/AccountController.php

Notei diferenças entre a 1.9.2.x e 1.9.4.0/1.9.3.x, na nova versão do magento, o método editPostAction() pede o “current_password”, veja a parte importante da controller:

...
linha 993
if (!$customer->validatePassword($this->getRequest()->getPost('current_password'))) {
     $errors[] = $this->__('Invalid current password');
}
...

Então, para funcionar, devemos modificar o edit.phtml do OSC para ficar parecido com o edit.phtml original do Magento.
Entre em:  app/design/frontend/base/default/template/onestepcheckout/customer/form
editar o edit.phtml (faça uma cópia antes deste arquivo, como backup).

Após a linha 38 temos que colocar o bloco <li></li> do “current_password”, ele vai sair da posição atual, que é da linha 47 à linha 54, o trecho do edit.phtml, depois de editado, ficou assim:

<li>
  <label for="email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
    <div class="input-box">
      <input type="text" name="email" id="email" readonly="" value="<?php echo $this->escapeHtml($this->getCustomer()->getEmail()) ?>" 
      title="<?php echo $this->__('Email Address') ?>" class="input-text required-entry validate-email" />
   </div>
</li>

<li>
  <label for="current_password" class="required"><em>*</em><?php echo $this->__('Current Password') ?></label>
  <div class="input-box">
    <!-- Este é um campo fictício escondido para enganar o Firefox no auto preenchimento de senha -->
    <input type="text" class="input-text no-display" name="dummy" id="dummy" />
    <input type="password" title="<?php echo $this->__('Current Password') ?>" class="input-text" name="current_password"     id="current_password" />
  </div>
</li>

<li class="control">
  <input type="checkbox" name="change_password" id="change_password" value="1" onclick="setPasswordForm(this.checked)" title="<?php echo $this->__('Change Password') ?>"<?php if ($this->getCustomer()->getChangePassword() == 1): ?> checked="checked"<?php endif; ?> 
  class="checkbox" /><label for="change_password"><?php echo $this->__('Change Password') ?></label>
</li>
</ul>
</div>
<div class="fieldset" style="display:none;">
  <h2 class="legend"><?php echo $this->__('Change Password') ?></h2>
  <ul class="form-list">
  <li class="fields">
    <div class="field">
    <label for="password" class="required"><em>*</em><?php echo $this->__('New Password') ?></label>
    <div class="input-box">
      <input type="password" title="<?php echo $this->__('New Password') ?>" class="input-text validate-password" name="password" id="password" />
   </div>
</div>
<div class="field">
  <label for="confirmation" class="required"><em>*</em><?php echo $this->__('Confirm New Password') ?></label>
  <div class="input-box">
    <input type="password" title="<?php echo $this->__('Confirm New Password') ?>" class="input-text validate-cpassword" 
    name="confirmation" id="confirmation" />
  </div>
</div>
</li>
</ul>
</div>

Agora, neste mesmo fonte, temos uma rotina em javascript que contém uma parte referente a senhas, você deve deixar a rotina setPasswordForm assim:

function setPasswordForm(arg) {
    if (arg) {
        //$('current_password').up(3).show();
        //$('current_password').addClassName('required-entry');
        $('password').up('.fieldset')['show']();
        $('password').addClassName('required-entry');
        $('confirmation').addClassName('required-entry');
    } else {
        //$('current_password').up(3).hide();
        //$('current_password').removeClassName('required-entry');
        $('password').up('.fieldset')['hide']();
        $('password').removeClassName('required-entry');
        $('confirmation').removeClassName('required-entry');
    }
}

Testei em duas lojas novas e funcionou, uma com 1.9.3.8 e outra com 1.9.4.0.

Espero ter ajudado.

Alfredo Letti

Desabilitar/Remover comparar produto no Magento
Novo status criado não deixa o pedido aparecer no painel de cliente

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *