function set(Usuario $usuario)
 {
     //return $this->bd->update($this->tabla, $city->get());
     $paramsWhere = array();
     $paramsWhere["email"] = $usuario->getEmail();
     return $this->bd->update($this->tabla, $usuario->get(), $paramsWhere);
 }
Exemple #2
0
    public function alterar(Usuario $objUsuario)
    {
        try {
            $sqlComplemtento = !is_null($objUsuario->getSenha()) ? 'usu_senha = :usu_senha,' : '';
            $sqlComplemtento2 = !is_null($objUsuario->getPerfil()) ? 'per_id = :per_id, ' : '';
            $this->_stat = $this->_getConn()->prepare('UPDATE tblusuario SET usu_nome = :usu_nome,
																			 usu_email = :usu_email,																			 
																			 ' . $sqlComplemtento . $sqlComplemtento2 . '
																			 usu_login = :usu_login
																			 WHERE usu_id = :usu_id');
            $this->_stat->bindValue(':usu_id', $objUsuario->getId(), \PDO::PARAM_INT);
            $this->_stat->bindValue(':usu_nome', $objUsuario->getNome(), \PDO::PARAM_STR);
            $this->_stat->bindValue(':usu_email', $objUsuario->getEmail(), \PDO::PARAM_STR);
            $this->_stat->bindValue(':usu_login', $objUsuario->getLogin(), \PDO::PARAM_STR);
            if (!is_null($objUsuario->getSenha())) {
                $this->_stat->bindValue(':usu_senha', sha1($objUsuario->getSenha() . USER_HASH), \PDO::PARAM_STR);
            }
            if (!is_null($objUsuario->getPerfil())) {
                $this->_stat->bindValue(':per_id', $objUsuario->getPerfil(), \PDO::PARAM_INT);
            }
            $this->_stat->execute();
            return $this->_getLastInsertId();
        } catch (\PDOException $e) {
            throw new \model\conexao\Excecao($e->getMessage());
        }
    }
 function set(Usuario $usuario)
 {
     //update de todos los campos menos el ID, devuelve el num de filas modificadas
     $parametrosWhere = array();
     $parametrosWhere["email"] = $usuario->getEmail();
     return $this->bd->update($this->tabla, $usuario->getGenerico(), $parametrosWhere);
 }
Exemple #4
0
 function verificaUsuario(Usuario $usuario)
 {
     $rs = $this->con->prepare("select email from usuarios where email = ?");
     $rs->bindValue(1, $usuario->getEmail());
     $rs->execute();
     $rs->setFetchMode(PDO::FETCH_CLASS, "Usuario");
     $usuario = $rs->fetch();
     return $usuario;
 }
 public static function doUsuario(Usuario $u)
 {
     $o = self::$sessao->do_usuario($u->getEmail(), $u->getCodigo());
     if ($o) {
         $row = self::$sessao->getConnection()->get_row($o);
         if ($row) {
             self::$sessao = Sessao::fromArray($row, "id,usuario,codigo,data");
         }
     }
 }
Exemple #6
0
 public function alterar(Usuario $objUsuario)
 {
     $v = $this->_getValidacao();
     $v->setRules($objUsuario->getId(), 'required', 'ID');
     $v->setRules($objUsuario->getNome(), 'required', 'NOME');
     $v->setRules($objUsuario->getEmail(), 'required', 'EMAIL');
     $v->setRules($objUsuario->getLogin(), 'required', 'LOGIN');
     $v->validar();
     return $this->_getRepositorio()->alterar($objUsuario);
 }
Exemple #7
0
 function cadastraAdm(Usuario $usuario)
 {
     $hashSenha = md5($usuario->getSenha());
     $query = "insert into usuarios (email,senha,tipo,cadastrado_por) values(?,?,'administrador',?)";
     $stmt = $this->con->prepare($query);
     $stmt->bindValue(1, $usuario->getEmail());
     $stmt->bindParam(2, $hashSenha);
     $stmt->bindValue(3, mostraUsuario());
     return $stmt->execute();
 }
Exemple #8
0
 public function cadastrarUsuario(Usuario $usuario)
 {
     $sql = "insert into usuario (nome, senha, email, nivel, exp) values (?,?,?,?,?)";
     $query = $this->conexao->prepare($sql);
     $query->bindParam(1, $usuario->getNome());
     $query->bindParam(2, $usuario->getSenha());
     $query->bindParam(3, $usuario->getEmail());
     $query->bindParam(4, $usuario->getNivel());
     $query->bindParam(5, $usuario->getExp());
     $query->execute();
 }
 function insereUsuario(Usuario $usuario)
 {
     $senhaCrypt = md5($usuario->getSenha());
     $query = 'insert into usuarios (email,nome,login,senha,cargo) values(?,?,?,?,?)';
     $stmt = $this->con->prepare($query);
     $stmt->bindValue(1, $usuario->getEmail());
     $stmt->bindValue(2, $usuario->getNome());
     $stmt->bindValue(3, $usuario->getLogin());
     $stmt->bindParam(4, $senhaCrypt);
     $stmt->bindValue(5, $usuario->getCargo());
     return $stmt->execute();
 }
 function mostraCarrinho(Usuario $usuario)
 {
     //$carirnho = new CarrinhoDeCompras();
     $carrinhos = [];
     $rs = $this->con->prepare("select id,produto,preco from carrinho where email = ?");
     $rs->bindValue(1, $usuario->getEmail());
     $rs->execute();
     $rs->setFetchMode(PDO::FETCH_CLASS, "CarrinhoDeCompras");
     while ($carrinho = $rs->fetch()) {
         array_push($carrinhos, $carrinho);
     }
     return $carrinhos;
 }
 public function inserir(Usuario $usuario)
 {
     //Objetivo deste metodo é inserir um objeto no banco, fazendo-o ter persistencia.
     //utilizaremos a abstracao do SQL da classe TsqlInstruction
     //1. Foreach dos atributos . PRa cada existencia de atributo é um valor a ser adicionado.
     $instrucao = new TSqlInsert();
     $instrucao->setEntity("usuario");
     if ($usuario->getId() != null) {
         $instrucao->setRowData("id", $usuario->getId());
     }
     if ($usuario->getNome() != null) {
         $instrucao->setRowData("nome", $usuario->getNome());
     }
     if ($usuario->getEmail() != null) {
         $instrucao->setRowData("email", $usuario->getEmail());
     }
     if ($usuario->getLogin() != null) {
         $instrucao->setRowData("login", $usuario->getLogin());
     }
     if ($usuario->getSenha() != null) {
         $instrucao->setRowData("senha", $usuario->getSenha());
     }
     if ($usuario->getNivel() != null) {
         $instrucao->setRowData("nivel", $usuario->getNivel());
     }
     if ($usuario->getDatadecadastro() != null) {
         $instrucao->setRowData("datadecadastro", $usuario->getDatadecadastro());
     }
     if ($usuario->getHoradecadastro() != null) {
         $instrucao->setRowData("horadecadastro", $usuario->getHoradecadastro());
     }
     echo $instrucao->getInstruction();
     if ($this->Conexao->query($instrucao->getInstruction())) {
         return true;
     } else {
         return false;
     }
 }
Exemple #12
0
	function buscaUsuario($con,Usuario $usuario){

		$senhaCrypt = md5($usuario->getSenha());


		$rs = $con->prepare("select *from usuarios where email = ? and senha= ?");
		$rs->bindValue(1,$usuario->getEmail());
		$rs->bindParam(2,$senhaCrypt);

		$rs->execute();
		$rs->setFetchMode(PDO::FETCH_CLASS, "Usuario");
		$usuario = $rs->fetch();
		return $usuario;
	}
 function insert(Usuario $usuario)
 {
     //se le pasa un objeto City y lo inserta en la tabla
     //dice el numero de filas insertadas;
     $parametrosSet = array();
     $parametrosSet["email"] = $usuario->getEmail();
     $parametrosSet["clave"] = $usuario->getClave();
     $parametrosSet["alias"] = $usuario->getAlias();
     $parametrosSet["fechaalta"] = $usuario->getFechaalta();
     $parametrosSet["activo"] = $usuario->getActivo();
     $parametrosSet["administrador"] = $usuario->getAdministrador();
     $parametrosSet["personal"] = $usuario->getPersonal();
     return $this->bd->insert($this->tabla, $parametrosSet);
 }
 public function login($user, $password)
 {
     $usuario = new Usuario();
     if ($usuario->check($user, $password)) {
         session_start();
         $_SESSION["authenticate"] = true;
         $_SESSION["user"] = $usuario->getUser();
         $_SESSION["nombre"] = $usuario->getNombre();
         $_SESSION["email"] = $usuario->getEmail();
         $_SESSION["rol"] = $usuario->getRol();
         return true;
     } else {
         $this->viewLogin("Nombre de Usuario o Pasword incorrectos.");
     }
 }
 public function inserir(Usuario $usuario)
 {
     try {
         $sql = "INSERT INTO usuario ( \r\n                    nome,\r\n                    email,\r\n                    concorrer_inscricao)\r\n                    VALUES (\r\n                    :nome,\r\n                    :email,\r\n                    :concorrer_inscricao)";
         //$stmt =  $con = new PDO("mysql:host=localhost;dbname=dbVestibular", "root", "");
         //            $p_sql = Conexao::getInstance()->pre
         $p_sql = Conexao::getInstance()->prepare($sql);
         $p_sql->bindValue(":nome", $usuario->getNome());
         $p_sql->bindValue(":email", $usuario->getEmail());
         $p_sql->bindValue(":concorrer_inscricao", $usuario->getConcorrerInscricao());
         return $p_sql->execute();
         //            header('location:sucesso.php');
     } catch (Exception $e) {
         print "Ocorreu um erro ao tentar executar esta ação, foi gerado um LOG do mesmo, tente novamente mais tarde.";
     }
 }
Exemple #16
0
    public function adicionar(Usuario $objUsuario)
    {
        try {
            $this->_stat = $this->_getConn()->prepare('INSERT INTO tblusuario 
															(usu_nome,usu_email,usu_login,usu_senha,_usu_dataCadastro,usu_dataUltimoAcesso,per_id,usu_status)
															VALUES(:usu_nome,:usu_email,:usu_login,:usu_senha,NOW(),NOW(),:per_id,:usu_status)');
            $this->_stat->bindValue(':usu_nome', $objUsuario->getNome(), \PDO::PARAM_STR);
            $this->_stat->bindValue(':usu_email', $objUsuario->getEmail(), \PDO::PARAM_STR);
            $this->_stat->bindValue(':usu_login', $objUsuario->getLogin(), \PDO::PARAM_STR);
            $this->_stat->bindValue(':usu_senha', $objUsuario->getSenha(), \PDO::PARAM_STR);
            $this->_stat->bindValue(':per_id', $objUsuario->getObjPerfil()->getId(), \PDO::PARAM_INT);
            $this->_stat->bindValue(':usu_status', $objUsuario->getStatus(), \PDO::PARAM_INT);
            $this->_stat->execute();
            return $this->_getConn->lastInsertId();
        } catch (\PDOException $e) {
            throw new \model\conexao\Excecao($e->getMessage());
        }
    }
Exemple #17
0
 function insert(Usuario $usuario)
 {
     /*
      * Se le pasa un objeto Usuario y lo inserta, debe devolver el alias del insertado.
      */
     $parametros = array();
     $parametros['email'] = $usuario->getEmail();
     /* REGISTRO */
     $parametros['clave'] = $usuario->getClave();
     /* REGISTRO */
     $parametros['alias'] = $usuario->getAlias();
     /* REGISTRO */
     $parametros['admin'] = $usuario->getAdministrador();
     /* DEFAULT 0 */
     $parametros['personal'] = $usuario->getPersonal();
     /* DEFAULT 0 */
     $parametros['activo'] = $usuario->getActivo();
     /* DEFAULT 0 */
     $parametros['avatar'] = $usuario->getAvatar();
     /* DEFAULT "" */
     return $this->bd->insert($this->tabla, $parametros);
 }
 protected function nuevoUsuario()
 {
     $this->checkAccess('admin');
     $ipts = $this->getFilterInputs('post', array('email' => 'email', 'nombres' => array('string', 4, 45), 'apellidos' => array('string', 4, 45), 'oficina' => array('string', 4, 45), 'estado' => 'boolean', 'p-aviso' => 'boolean', 'p-noticia' => 'boolean', 'p-evento' => 'boolean'));
     $ipts['permisos'] = array();
     if ($ipts['p-aviso']) {
         array_push($ipts['permisos'], 'aviso');
     }
     if ($ipts['p-noticia']) {
         array_push($ipts['permisos'], 'noticia');
     }
     if ($ipts['p-evento']) {
         array_push($ipts['permisos'], 'evento');
     }
     if (empty($ipts['permisos'])) {
         $this->responder(false, 'Debe elegir al menos un acceso');
     }
     $ipts['permisos'] = implode(',', $ipts['permisos']);
     $mysqli = $this->getMysqli();
     $aux = new Usuario($mysqli);
     if ($aux->getEmail($ipts['email'])) {
         $this->responder(false, 'El email ' . $ipts['email'] . ' ya está en uso');
     }
     $randPass = $this->getRandomPass(8);
     $user = new Usuario($mysqli);
     $user->email = $ipts['email'];
     $user->password = sha1($randPass);
     $user->nombres = $ipts['nombres'];
     $user->apellidos = $ipts['apellidos'];
     $user->oficina = $ipts['oficina'];
     $user->estado = $ipts['estado'];
     $user->permisos = $ipts['permisos'];
     if ($user->set()) {
         $this->responder(true, 'Usuario creado! los datos de acceso son:<br>Email: ' . $user->email . '<br>Contraseña: ' . $randPass . '<br>Sírvase notificar al usuario');
     } else {
         $this->responder(false, $user->md_mensaje, $user->md_detalle);
     }
 }
Exemple #19
0
 public function insert(Usuario $u)
 {
     if ($this->getUsuario($u->getLogin(), $u->getSenha()) == 0) {
         $i = $u->getId();
         $n = $u->getNome();
         $l = $u->getLogin();
         $s = $u->getSenha();
         $e = $u->getEmail();
         if ($stmt = $this->connection->prepare("Insert into `TB_Usuario` (`id_usuario`, `nm_usuario`, `ds_login`, `ds_senha`, `ds_email`) VALUES (?,?,?,?,?)")) {
             //  "sss" retpresenta 3 strings, se fosse  2 string e um interio  seria "ssd"
             $stmt->bind_param("issss", $i, $n, $l, $s, $e);
             $stmt->execute();
             $stmt->close();
             redirect("/painel/usuarios");
         } else {
             echo "<hr>";
             die($this->connection->error);
             echo "<hr>";
         }
     } else {
         echo "Usuario Ja Cadastrado";
     }
 }
Exemple #20
0
 public function atualizar(Usuario $usuario)
 {
     try {
         $sql = "UPDATE usuario SET " . "nome = :nome," . "cpf = :cpf," . "email = :email," . "telefone = :telefone," . "senha = :senha," . "liberado = :liberado," . "tipo = :tipo," . "qtdResponde = :qtdResponde," . "status = :status," . "idCurso = :idCurso " . "WHERE id = :id";
         $p_sql = $this->pdo->prepare($sql);
         $p_sql->bindValue(":id", $usuario->getId());
         $p_sql->bindValue(":nome", $usuario->getNome());
         $p_sql->bindValue(":cpf", $usuario->getCpf());
         $p_sql->bindValue(":email", $usuario->getEmail());
         $p_sql->bindValue(":telefone", $usuario->getTelefone());
         $p_sql->bindValue(":senha", $usuario->getSenha());
         $p_sql->bindValue(":liberado", $usuario->getLiberado());
         $p_sql->bindValue(":tipo", $usuario->getTipo());
         $p_sql->bindValue(":qtdResponde", $usuario->getQtdResponde());
         $p_sql->bindValue(":status", $usuario->getStatus());
         $p_sql->bindValue(":idCurso", $usuario->getIdCurso());
         return $p_sql->execute();
     } catch (Exception $e) {
         print "Ocorreu um erro ao tentar executar esta ação, foi gerado um LOG do mesmo, tente novamente mais tarde.";
     }
 }
Exemple #21
0
require "funciones.php";
require "class.phpmailer.php";
require "class.smtp.php";
$bd = new BaseDeDatos();
$bd->setConexion();
$evento = new Evento($_POST['id_e']);
$paquete = new Paquete($_POST['packets']);
$usuario = new Usuario($_POST['user']);
$string = implode(',', $_POST['packets']);
$usuario->comprarEvento($usuario->getUsuario(), $evento->getId(), $string, $_POST['add']);
$u = $usuario->getUsuario();
$nom_u = $usuario->getNombre();
$ape_u = $usuario->getApellido();
$ced_u = $usuario->getCedula();
$destinatario = $usuario->getEmail();
$nom_e = $evento->getNombre();
$paquetes = explode(',', $string);
$i = 0;
$mail = new PHPMailer();
// Instancio el objeto que permite le manejo y envío de los correos
// Cuerpo del mensaje en html
$body = "Estimado: " . $nom_u . " " . $ape_u . ", le informamos que su compra para el evento " . $nom_e . " fue exitosa";
$mail->IsSMTP();
// Inicio el smtp
$mail->Host = 'smtp.gmail.com:587';
// la dirección del servidor, p. ej.: smtp.servidor.com
$mail->From = '*****@*****.**';
// Dirección remitente, p. ej.: no-responder@miempresa.com
$mail->SMTPDebug = 1;
// Activo el debug
Exemple #22
0
 public function insertUsuario(Usuario $usuario)
 {
     $sql = "INSERT into usuario (nome, email, usuario, senha, foto)\n            VALUES ('" . $usuario->getNome() . "','" . $usuario->getEmail() . "','" . $usuario->getLogin() . "' ,'" . $usuario->getSenha() . "', '" . $usuario->getFoto() . "')";
     $this->sqlExec($sql);
 }
Exemple #23
0
                    <input type"text" class="inputDatoDato" id="datoDatoNombre" name="nombre" size="50" placeholder="¿Nos dices tu nombre?" value="<?php 
echo $usuario->getNombre();
?>
"/>
                </div>
                <div class="etiquetaDato">Apellidos: </div>
                <div class="datoDato">
                    <input type"text" class="inputDatoDato" id="datoDatoApellidos" name="apellidos" size="50" placeholder="¿Y tus apellidos?" value="<?php 
echo $usuario->getApellidos();
?>
"/>
                </div>
                <div class="etiquetaDato">email: </div>
                <div class="datoDato">
                    <input type"text" class="inputDatoDato" id="datoDatoEmail" name="email" size="50" placeholder="Dime tu correo electr&oacute;nico..." value="<?php 
echo $usuario->getEmail();
?>
"/>
                </div>
                <div id="datosUsuarioSegundoEmail">
                    <div class="etiquetaDato"> Repite email: </div>
                    <div class="datoDato">
                        <input type"text" class="inputDatoDato" id="datoDatoEmail2" name="email2" size="50" placeholder="Repite email..." value="<?php 
echo $usuario->getEmail();
?>
"/>
                    </div>
                </div>
                <div class="etiquetaDato">Url: </div>
                <div class="datoDato">
                    <input type"text" class="inputDatoDato" id="datoDatoUrl" name="url" size="50" placeholder="¿No tienes p&aacute;gina web?" value="<?php 
 function update(Usuario $usuario)
 {
     $sql = "UPDATE {$this->tabla} SET contrasenia=:contrasenia, " . "nombre=:nombre, rol=:rol, activo=:activo where email=:email;";
     $parametros["email"] = $usuario->getEmail();
     $parametros["contrasenia"] = $usuario->getContrasenia();
     $parametros["nombre"] = $usuario->getNombre();
     $parametros["rol"] = $usuario->getRol();
     $parametros["activo"] = $usuario->getActivo();
     $r = $this->bd->setConsulta($sql, $parametros);
     if (!$r) {
         return -1;
     }
     return $this->bd->getNumeroFilas();
 }
 function toRecordSet(Usuario $usuario)
 {
     return array($usuario->getId(), $usuario->getUsuario(), $usuario->getSenha(), $usuario->getNome(), $usuario->getEmail(), $usuario->getNivel(), $usuario->getEmpresa()->getId());
 }
Exemple #26
0
 if (isset($_POST["senha"])) {
     $user->setSenha($_POST["senha"]);
 }
 if (isset($_POST["cpf"])) {
     $user->setCpf($_POST["cpf"]);
 }
 if (isset($_POST["opTipo"])) {
     $user->setTipo($_POST["opTipo"]);
 }
 if (isset($_POST["curso"])) {
     $user->setIdCurso($_POST["curso"]);
 }
 $dao = new DaoUsuario();
 if (validaCPF($user->getCpf())) {
     $usuarioVerificacaoCPF = $dao->buscarPorCPF($user->getCpf());
     $usuarioVerificacaoEmail = $dao->buscarPorEmail($user->getEmail());
     if (!$usuarioVerificacaoCPF->getId() != null && !$usuarioVerificacaoCPF->getId() != 0) {
         if (!$usuarioVerificacaoEmail->getId() != null && !$usuarioVerificacaoEmail->getId() != 0) {
             try {
                 $user->setStatus(1);
                 $dao->inserir($user);
                 echo "<script type='text/javascript'>";
                 echo "\$('#modalMsgSucesso').modal('show');";
                 echo "</script>";
             } catch (Exception $e) {
                 print "Erro " . $e;
                 echo "<script type='text/javascript'>";
                 echo "\$('#modalMsgErroException').modal('show');";
                 echo "</script>";
             }
         } else {
Exemple #27
0
 function set(Usuario $usuario)
 {
     $parametrosWhere = array();
     $parametrosWhere["email"] = $usuario->getEmail();
     return $this->bd->update($this->tabla, $usuario->getGenerico(), $parametrosWhere);
 }
Exemple #28
0
<?php

require '../clases/AutoCarga.php';
$bd = new DataBase();
$sesion = new Session();
$gestor = new ManageUsuario($bd);
$usuario = new Usuario();
$mail = $usuario->getEmail();
$page = Request::get("page");
if ($page === null || $page === "") {
    $page = 1;
}
$usuario = $gestor->getList($page);
$registros = $gestor->count();
$paginas = ceil($registros / Constants::NRPP);
$op = Request::get("op");
$r = Request::get("r");
$error = "";
switch (Request::get("error")) {
    case "exist":
        $error = "Complete the required fields. ";
        break;
    case "clave":
        $error = "Wrong User or  Password";
        break;
    case "activo":
        $error = "your account is deactivated. Check your emails, please. ";
        break;
    case "existyet":
        $error = "This e-mail already exists. ";
        break;
Exemple #29
0
<?php

include_once "../Models/Usuario.php";
include_once "../Models/Reservacion.php";
include_once "../Models/Muebles.php";
$usuario = new Usuario('*****@*****.**', 'normaE', 'Norma', 'Escobedo');
if ($usuario->insertarUsuario()) {
    $mueble = new Muebles();
    $mueble->llenaDatos('Mesa fea', 'Mesa bonita y roja y con 9mil patas', 'tangamandapio', 'latitud', 0, $usuario->getEmail());
    if ($mueble->insertarMueble()) {
        $reservacion = new Reservacion();
        $reservacion->llenarDatos($mueble->getIdMueble(), $usuario->getEmail());
        if ($reservacion->insertarReservacion()) {
            $reserva = Reservacion::obtenerReservacion($reservacion->getIdReservacion());
            echo $reserva->getIdReservacion();
            $muebler = Muebles::obtenerMueble($reserva->getIdMueble());
            $usuarior = Usuario::obtenerUsuario($reserva->getIdUsuario());
            echo $muebler->getDesAbreviada();
            echo $usuarior->getNombre();
        } else {
            echo 'fallo insetar reservacion';
        }
    } else {
        die('fallo insertar mueble');
    }
} else {
    die('fallo insertar usuario');
}
//En caso de que ya estuviera la vista, aqui se incluiría y en la vista se usarian las variables usando tags de php
//por ejemplo si quisiera desplefar en un párrafo html la descripcion abreviada de la variable $muebler en un párrafo se haría asi
//    <p><?=$muebler->getDesbreviada()? ></p>
 public static function cadastrar(Usuario $u)
 {
     UsuarioController::porEmail($u->getEmail());
     if (UsuarioController::get("id")) {
         $e = "E-mail já cadastrado.";
         UsuarioController::defineException("cadastrar", $e);
     } else {
         UsuarioController::porUsername($u->getUsername());
         if (UsuarioController::get("id")) {
             $e = "Nome de usuário já utilizado.";
             UsuarioController::defineException("cadastrar", $e);
         } else {
             require_once PROJECT_ADDRESS . "/lib/util/code.php";
             require_once PROJECT_ADDRESS . "/lib/util/proteger.php";
             $codigo = get_codigo(5);
             $senha = embaralhar($u->getSenha(), $codigo);
             $u->setCodigo($codigo);
             $u->setSenha($senha);
             $o = $u->persistir();
         }
     }
     return $o;
 }