martes, 8 de noviembre de 2011

vtiger 5.x Actualizando a la version 5.3

Cuando estamos trabajando con Vtiger, y importamos una base de datos pre-existente, y nos da un error y nos manda a una pagina en la wiki de vtiger, la cual nos da las siguiente instrucciones:


  1. Copiamos el archivo ResetPassword.phpfile, que esta en modules/migration a la carpeta raiz
  2. Copiar la clave única de config.inc.php y lo copiamos a nuestro archivo.
  3. Renombranos el archivo ResetPassword.phpfile y no quedaría así ResetPassword.php
  4. Corremos el archivo en el buscador
  5. Borramos el archivo.


Y obtenemos el brillante resultado que no pasa nada, jajajaja. Vtiger tiene un gran problema, y es que falta mucha documentación y ayuda, para resolver el problema del que estamos hablando tenemos que reemplazar el contenido de ResetPassword.php por este:


<?php

require_once 'config.php';
require_once 'include/utils/utils.php';

 resetUserPasswords();

function resetUserPasswords() {
 $db = PearDatabase::getInstance();
 $sql = 'select user_name, id, crypt_type from vtiger_users';
 $result = $db->pquery($sql, array());
 $rowList = $result->GetRows();
 foreach ($rowList as $row) {
  $cryptType = $row['crypt_type'];
  if(strtolower($cryptType) == 'md5' && version_compare(PHP_VERSION, '5.3.0') >= 0) {
   $cryptType = 'PHP5.3MD5';
  }
  $encryptedPassword = getEncryptedPassword($row['user_name'], $cryptType,
    $row['user_name']);
  $userId = $row['id'];
  $sql = "update vtiger_users set user_password=?,crypt_type=? where id=?";
  $updateResult = $db->pquery($sql, array($encryptedPassword, $cryptType, $userId));
  if(!is_object($updateResult)) {
   $_SESSION['migration_info']['user_messages'][] = "<div>".
    "<span style='color: red;font-weight: bold;width: 30em;'>Failed: </span>".
    "$sql<br />".var_export(array($encryptedPassword, $userId)).'</div>';
  }
 }
}

function getEncryptedPassword($userName, $cryptType, $userPassword) {
 $salt = substr($userName, 0, 2);
 // For more details on salt format look at: http://in.php.net/crypt
 if($cryptType == 'MD5') {
  $salt = '$1$' . $salt . '$';
 } elseif($cryptType == 'BLOWFISH') {
  $salt = '$2$' . $salt . '$';
 } elseif($cryptType == 'PHP5.3MD5') {
  //only change salt for php 5.3 or higher version for backward
  //compactibility.
  //crypt API is lot stricter in taking the value for salt.
  $salt = '$1$' . str_pad($salt, 9, '0');
 }
 $computedEncryptedPassword = crypt($userPassword, $salt);
 return $computedEncryptedPassword;
}

?>
Ya con esto se resetean las claves a el mismo nombre de usuario, si tienen algun problema pueden dejar un comentario.

3 comentarios:

  1. Buenas amigo, me encanto el detallado que has hecho con el vtiger, quiero implementarlo en mi empresa, mi pregunta es... vas a seguir actualizando tu pagina con nuevos post acerca de este tema? para ejecutarlo en la compañia y no tener algunos vacion a futuro gracias

    ResponderEliminar
  2. Muchas gracias por el script, me funcionó perfectamente!

    Saludos

    ResponderEliminar