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
Obrigado pela dica ! Bastante útil!