/** * Constructor * Si el paramero es null o no esta definido se tomara el rl aactive_group * definido en database.php * * @param type $idDb String que identifica a la db en database.php */ public function __construct($idDb = null) { $defaultDB = TSLUtilsHelper::getDefaultDatabase(); // Si el parametros es null o no esta seteado tratamos de usar el active group. if (isset($idDb) == FALSE and isset($defaultDB)) { $this->m_idDb = $defaultDB; } else { // De lo contrario tomamos como cierto el parametro. $this->m_idDb = $idDb; } }
public function &getTrxManager($idDb = null) { $defaultDB = TSLUtilsHelper::getDefaultDatabase(); // Si el parametros es null o no esta seteado tratamos de usar el active group. if (isset($idDb) == FALSE and isset($defaultDB)) { $idDb = $defaultDB; } if (!array_key_exists($idDb, $this->m_trxManagers)) { $this->m_trxManagers[$idDb] = new TSLTransactionManager($idDb); } return $this->m_trxManagers[$idDb]; }
/** * Busca en la definicion de la base de datos (database.php) * si se ha definido una default , de ser asi retorna su * identificador. * * @return string el driver default o null */ public static function getDefaultDatabase() { if (!isset(self::$defaultDb)) { require APPPATH . '/config/database.php'; // Si se ha definido el active_group // o base de datos default y asi mismo se ha definido que driver usas la misma , se // retorna su valor , de lo contrario null if (isset($active_group) and empty($active_group) == FALSE and isset($db[$active_group]['dbdriver'])) { self::$defaultDb = $active_group; } } return self::$defaultDb; }
/** * Genera la salida en JSON. * * @param TSLIDataTransferObj con el Data Transfer Object a procesar * @return un String con el DTO en formato JSON */ public function &process(TSLIDataTransferObj &$DTO) { if (isset($DTO)) { /* @var $outMessage TSLOutMessage */ $outMessage =& $DTO->getOutMessage(); $out = '"success":' . ($outMessage->isSuccess() == FALSE ? '"false"' : '"true"'); if (strlen($outMessage->getAnswerMesage()) > 0) { $out .= ',"am":[{"msg": "' . $outMessage->getAnswerMesage() . '","ce":"' . $outMessage->getErrorCode() . '"}]'; } if ($outMessage->isSuccess() == FALSE) { if ($outMessage->hasFieldErrors()) { $fldErrors =& $outMessage->getFieldErrors(); // Si ya tiene longitud , ponemos una coma para indicar // un nuevo elemento. if (isset($out) and strlen($out) > 0) { $out .= ','; } // la lista de field errors. $out .= '"errors":{'; $count = count($fldErrors); for ($i = 0; $i < $count; $i++) { $out .= $fldErrors[$i]->getField() . ':"' . $fldErrors[$i]->getErrorMessage() . '"'; if ($i < $count - 1) { $out .= ','; } } $out .= '}'; } else { if ($outMessage->hasProcessErrors()) { $processErrors =& $outMessage->getProcessErrors(); // Si ya tiene longitud , ponemos una coma para indicar // un nuevo elemento. if (isset($out) and strlen($out) > 0) { $out .= ','; } // la lista de process errors. $out .= '"pe":['; $count = count($processErrors); for ($i = 0; $i < $count; $i++) { $perr = str_replace(array("\"", "\r", "\n", "\r\n"), ' ', $processErrors[$i]->getErrorMessage()); // Si tiene excepcion procesamos. $ex = $processErrors[$i]->getException(); if (isset($ex)) { if (isset($perr)) { $out .= '{"msg":"' . $perr . ' - ' . str_replace(array("\"", "\r", "\n", "\r\n"), ' ', $ex->getMessage()) . '","ce":"' . $processErrors[$i]->getErrorCode() . '"'; } else { $out .= '{"msg":"' . str_replace(array("\"", "\r", "\n", "\r\n"), ' ', $ex->getMessage()) . '","ce":"' . $processErrors[$i]->getErrorCode() . '"'; } } else { $out .= '{"msg":"' . $perr . '","ce":"' . $processErrors[$i]->getErrorCode() . '"'; } $out .= '}'; if ($i < $count - 1) { $out .= ','; } } $out .= ']'; } } } // Si tiene parametros de salida los agregamos antres de la data. $outParams =& $outMessage->getOutputparameters(); if (is_array($outParams)) { foreach ($outParams as $i => $value) { $out .= ',' . $i . ':' . $value; } } // Procesamos la data $data = $outMessage->getResultData(); if (isset($data)) { $out .= ',"data":'; $this->_processExtraData($outMessage->getResultData()); $out .= json_encode(TSLUtilsHelper::array_ut8_encode_recursive($outMessage->getResultData())); } $out = '{' . $out . '}'; return $out; } else { $out = '?????????????????'; return $out; } }
/** * Carga un DAO para la base de datos indicada , de no indicarse ningna buscara un * DAO para la base de datos default en uso , previamente tratara de ver s hay * un DAO generico . * * Osea de no indicarse el tipo de base de datos , tratara primero con la generica * (osea sin base de datos especificada) , luego tratara con la default de no encontrarla * indicara error. * * De especificarse el tipo de base de datos solo tratara de cargar la especifica. * * Las bases de datos permitidas son: * 'pgsql', 'mysql','mssql','oci8','sqllite' or 'odbc'. * * IMPORTANTE : * Las siguientes condiciones previas deben cumplirse : * 1) La constante APPPATH debe estar definida * 2) El arreglo global G_DAOPATHS con la lista de directorios absolutos a los DAO * del sistema debe estar definida , esta lista sera la base de busqueda para encontrar * el archivo que contiene la clase basada en el parametro dao_basename * * 3) LEER !!! , el parametro dao base name debera tener indicado el namespace en el caso * que su namespace no sea el default * * @param dao_basename , El nombre base del DAO , por ejemplo "Login" e incluira el namespace de * tenerlo. * * @param db_id , el identificador de la base de datos,los valores permitidos son : 'postgre', * 'mysql','mssql','oci8','sqllite' or 'odbc'. De no indicarse se tratara de cargar * la generica , luego la default. * * @return una referencia al DAO o una excepcion de programacion si se ha solicitado * un tipo de base de datos no soportada o alguna precondicion no se cumple. * * * */ public static function loadDAO($dao_basename, $db_id = null) { global $G_DAOPATHS; $found = false; $dao_class = $dao_basename; /****************************************************************************** * VALIDACIONES REQUISITOS PREVIOS */ // Si no es una base de datos soportada enviamos excepcion. if (isset($db_id) and in_array($db_id, self::$supported_dbs) == FALSE) { $backtrace = debug_backtrace(); throw new TSLProgrammingException($db_id . ' its not a supported Database , Source= ' . $backtrace[0]['file'] . '-(' . $backtrace[0]['line'] . ')'); } // La variable G_DAOPATHS con los paths validos para los DAOs debe existir en las globalses if (!isset($G_DAOPATHS) || !is_array($G_DAOPATHS)) { $backtrace = debug_backtrace(); throw new TSLProgrammingException('No se han definido los paths para los DAO o no se ha definido como array, Source= ' . $backtrace[0]['file'] . '-(' . $backtrace[0]['line'] . ')'); } // La constante APPPATH tambien debe estar definida if (!defined('APPPATH')) { $backtrace = debug_backtrace(); throw new TSLProgrammingException('Debe definirse la constante APPPATH, Source= ' . $backtrace[0]['file'] . '-(' . $backtrace[0]['line'] . ')'); } /*********************************************************************** * Proceso */ $dao_basename_stripped = substr(($t = strrchr($dao_basename, '\\')) !== false ? $t : '', 1); if (!$dao_basename_stripped) { $dao_basename_stripped = $dao_basename; } $defaultDBDriver = TSLUtilsHelper::getDefaultDatabaseDriver(); $dao = ''; // Si esta seteada el tipo de base de datos buscamos exclusimanente un DAO basado // en dicha base de datos if (isset($db_id)) { $dao = $dao_basename_stripped . '_' . $db_id; $dao_class .= '_' . $db_id; } else { // Si no se ha definido una tratamos con el default driver si esta definido if (isset($defaultDBDriver)) { $dao = $dao_basename_stripped . '_' . $defaultDBDriver; $dao_class .= '_' . $defaultDBDriver; } } $daoFileName = ''; // Si existe una db definida ya sea por parametro o default // buscamos si el dao existe para esa condicion. if ($dao !== '') { foreach ($G_DAOPATHS as $value) { if ($value != '') { $daoFileName = APPPATH . $value . '/' . $dao . EXT; } else { $daoFileName = APPPATH . $dao . EXT; } if (file_exists($daoFileName)) { $found = TRUE; break; } } } // Buscamos el default de no haberse encontrado ninguno en el paso anterior if ($found === FALSE) { $dao = $dao_basename_stripped; foreach ($G_DAOPATHS as $value) { if ($value != '') { $daoFileName = APPPATH . $value . '/' . $dao . EXT; } else { $daoFileName = APPPATH . $dao . EXT; } if (file_exists($daoFileName)) { $found = TRUE; break; } } } // Si se encontro efectuamos el include if ($found) { $ret = (include_once $daoFileName); if ($ret !== 1) { $found = false; } } if ($found == false) { $backtrace = debug_backtrace(); throw new TSLProgrammingException('DAO : ' . $dao_basename . ' No se encuentra en una ruta esperada , Source= ' . $backtrace[0]['file'] . '-(' . $backtrace[0]['line'] . ')'); } else { // instancamos la clase return new $dao_class(); } }
/** * Genera la salida en JSON. * * @param TSLIDataTransferObj con el Data Transfer Object a procesar * @return un String con el DTO en formato JSON */ public function &process(TSLIDataTransferObj &$DTO) { $out = NULL; if (isset($DTO)) { /* @var $outMessage TSLOutMessage */ $outMessage =& $DTO->getOutMessage(); if (strlen($outMessage->getAnswerMesage()) > 0) { // STATUS_OK = 0 $out = 'status:-1'; $out .= ',data:"' . $outMessage->getAnswerMesage() . '- Cod.Error: ' . $outMessage->getErrorCode() . '"'; } if ($outMessage->isSuccess() == FALSE) { if ($outMessage->hasFieldErrors()) { // VALIDATION ERRORS $out = 'status:"-4"'; $fldErrors =& $outMessage->getFieldErrors(); // Si ya tiene longitud , ponemos una coma para indicar // un nuevo elemento. if (isset($out) and strlen($out) > 0) { $out .= ','; } // la lista de field errors. $out .= '"errors":{'; $count = count($fldErrors); for ($i = 0; $i < $count; $i++) { $out .= $fldErrors[$i]->getField() . ':"' . $fldErrors[$i]->getErrorMessage() . '"'; if ($i < $count - 1) { $out .= ','; } } $out .= '}'; } else { if ($outMessage->hasProcessErrors()) { // STATUS_FAILURE = -1 $out = 'status:-1'; $processErrors =& $outMessage->getProcessErrors(); // Si ya tiene longitud , ponemos una coma para indicar // un nuevo elemento. if (isset($out) and strlen($out) > 0) { $out .= ','; } // la lista de process errors. $out .= 'data:'; $count = count($processErrors); for ($i = 0; $i < $count; $i++) { if ($i > 0) { $out .= '\\n'; } $out .= '"'; $perr = str_replace(array("\"", "\r", "\n", "\r\n"), ' ', $processErrors[$i]->getErrorMessage()); // Si tiene excepcion procesamos. $ex = $processErrors[$i]->getException(); if (isset($ex)) { if (isset($perr)) { $out .= $perr . ' - ' . str_replace(array("\"", "\r", "\n", "\r\n"), ' ', $ex->getMessage()) . ' ** CodError = ' . $processErrors[$i]->getErrorCode(); } else { $out .= str_replace(array("\"", "\r", "\n", "\r\n"), ' ', $ex->getMessage()) . ' ** CodError =' . $processErrors[$i]->getErrorCode(); } } else { $out .= $perr . ' ** CodError =' . $processErrors[$i]->getErrorCode(); } $out .= '"'; if ($i < $count - 1) { $out .= ','; } } $out .= ''; } } } else { // STATUS_OK = 0 $out = 'status:0'; } // Si tiene parametros de salida los agregamos antres de la data. $outParams =& $outMessage->getOutputparameters(); if (is_array($outParams)) { foreach ($outParams as $i => $value) { $out .= ',' . $i . ':' . $value; } } // Si no hay errores de proceso evaluamos la data if ($outMessage->hasProcessErrors() == FALSE && strlen($outMessage->getAnswerMesage()) == 0) { $oneRecord = false; // Procesamos la data $data = $outMessage->getResultData(); if (isset($data)) { // Si no es un arreglo solo posee un registro if (!is_array($data)) { $oneRecord = true; } $out .= ',data:'; $this->_processExtraData($outMessage->getResultData()); $dataResults = TSLUtilsHelper::array_ut8_encode_recursive($outMessage->getResultData()); $out .= json_encode($dataResults); // Numero de registros = al numero de registros leidos + la posicion inicial en el set // siempre que haya mas de una respuesta $constraints =& $DTO->getConstraints(); if ($oneRecord === FALSE) { $numRecords = $constraints->getStartRow() + count($dataResults); } else { $numRecords = 1; } // SE hace de tal forma que si no es el ultimo registro osea numRecords es menor a la ultima fila solicitada // Ponemos como el total de registros una pagina mas (esto para evitar hacer un count) $out .= ',endRow : "' . $numRecords . '"'; $out .= ',totalRows: "' . ($numRecords < $constraints->getEndRow() || $constraints->getEndRow() == 0 ? $numRecords : $constraints->getEndRow() + ($constraints->getEndRow() - $constraints->getStartRow())) . '"'; // $out .= ',totalRows: "'. ( $numRecords < 1000 ? ($numRecords) : 1000 + (1000 - $constraints->getStartRow())) .'"'; } else { if ($out == NULL) { // STATUS_OK = 0 $out = 'status:-1'; $out .= ',data:"Error Desconocido"'; } } } $out = '{response:{' . $out . '}}'; return $out; } else { $out = '?????????????????'; return $out; } }
/** * Carga un DAO para la base de datos indicada , de no indicarse ningna buscara un * DAO para la base de datos default en uso , previamente tratara de ver s hay * un DAO generico . * * Osea de no indicarse el tipo de base de datos , tratara primero con la generica * (osea sin base de datos especificada) , luego tratara con la default de no encontrarla * indicara error. * * De especificarse el tipo de base de datos solo tratara de cargar la especifica. * * Las bases de datos permitidas son: * 'pgsql', 'mysql','mssql','oci8','sqllite' or 'odbc'. * * @param dao_basename , El nombre base del DAO , por ejemplo "Login" * * @param db_id , el identificador de la base de datos,los valores permitidos son : 'postgre', * 'mysql','mssql','oci8','sqllite' or 'odbc'. De no indicarse se tratara de cargar * la generica , luego la default. * * @return una referencia al DAO o una excepcion de programacion si se ha solicitado * un tipo de base de datos no soportada * * * */ public static function loadDAO($dao_basename, $db_id = null) { // Los daos seran buscados en el APPPATH o en el equivalente a APPPATH_shared $applpath = substr(APPPATH, 0, strpos(APPPATH, '_')) . '/'; $apppath_touse = $applpath; $applpath_alt = substr($applpath, 0, -1) . '_shared/'; // Libreria base como ultimo recurrso $libdaopath = 'application/framework/techsoft/fw/app/dao/impl/'; $applpath_exist = false; $applpath_alt_exist = false; // el calss base por si se usa un namespace $daoclass = ''; $defaultDBDriver = TSLUtilsHelper::getDefaultDatabaseDriver(); // Si el identificador de base de datos no esta definido y si se ha definido el default // db driver : // 1: Buscamops si existe un dao para la base de datos default. // 2: de lo contrario buscaremos el generico if (isset($db_id) == FALSE and isset($defaultDBDriver)) { if (file_exists($applpath . 'dao/' . $dao_basename . EXT)) { $applpath_exist = true; } else { if (file_exists($applpath_alt . 'dao/' . $dao_basename . EXT)) { $applpath_alt_exist = true; $apppath_touse = $applpath_alt; $daoclass = 'shared\\dao\\'; } else { if (file_exists($libdaopath . $dao_basename . EXT)) { $daoclass = 'app\\common\\dao\\impl\\'; $applpath_alt_exist = true; } } } // Vemos si existe un DAO generico // de no existir cambio el id de la db a tartar de cargar al default // definido. if (!$applpath_exist && !$applpath_alt_exist) { $db_id = $defaultDBDriver; // Verificamos si existe en el directorio shared de la aplicacion // sino se asume en la misma aplicacion if (file_exists($applpath_alt . 'dao/' . $dao_basename . '_' . $db_id . EXT)) { $apppath_touse = $applpath_alt . 'dao/'; $daoclass = 'shared\\dao\\'; } else { if (file_exists($libdaopath . $dao_basename . '_' . $db_id . EXT)) { $apppath_touse = $libdaopath; $daoclass = 'app\\common\\dao\\impl\\'; } } } else { unset($db_id); } } // Si se ha indicado tipo de base de datos vemos si esta permitida. if (isset($db_id) and in_array($db_id, self::$supported_dbs) == FALSE) { $backtrace = debug_backtrace(); throw new TSLProgrammingException($db_id . ' its not a supported Database , Source= ' . $backtrace[0]['file'] . '-(' . $backtrace[0]['line'] . ')'); } else { if ($daoclass === '') { $backtrace = debug_backtrace(); throw new TSLProgrammingException('DAO : ' . $dao_basename . ' No se encuentra en una ruta esperada , Source= ' . $backtrace[0]['file'] . '-(' . $backtrace[0]['line'] . ')'); } else { $daoclass .= $dao_basename; // Trato de cargar uno especifico o un generico. if (isset($db_id)) { $daoclass .= '_' . $db_id; require_once $apppath_touse . $dao_basename . '_' . $db_id . EXT; return new $daoclass(); } else { require_once $apppath_touse . $dao_basename . EXT; return new $daoclass(); } } } }