コード例 #1
0
ファイル: Oferta.class.php プロジェクト: pthreat/apf-dev
 public static function obtenerOfertasParaUsuario(Usuario $usuario, $intervalo = 2, $tipo = "DAY")
 {
     $ofertasTable = new \apf\db\mysql5\Table("ofertas");
     $empresasTable = new \apf\db\mysql5\Table("empresas");
     $empresasDatosTable = new \apf\db\mysql5\Table("empresas_datos");
     $ofertasUbicacionTable = new \apf\db\mysql5\Table("ofertas_ubicacion");
     $localidadesTable = new \apf\db\mysql5\Table("localidades");
     $ofertasCategoriaTable = new \apf\db\mysql5\Table("ofertas_categoria");
     $categoriasTable = new \apf\db\mysql5\Table("categorias");
     $select = new \apf\db\mysql5\Select($ofertasTable);
     $fields = array("ofertas.id AS idOferta", "ofertas.email", "ofertas.titulo", "GROUP_CONCAT(categorias.id) AS categorias", "GROUP_CONCAT(localidades.id) AS localidades");
     $select->fields($fields);
     //INNER JOIN ofertas_ubicacion
     /////////////////////////////////////////////////////////
     $joinOfertasUbicacion = new \apf\db\mysql5\Join($ofertasUbicacionTable);
     $joinOfertasUbicacion->type("INNER");
     $on = array(array("field" => "ofertas.id", "value" => "ofertas_ubicacion.id_oferta", "quote" => FALSE));
     $joinOfertasUbicacion->on($on);
     $select->join($joinOfertasUbicacion);
     //INNER JOIN localidades
     /////////////////////////////////////////////////////////
     $joinLocalidades = new \apf\db\mysql5\Join($localidadesTable);
     $joinLocalidades->type("INNER");
     $on = array(array("field" => "localidades.id", "value" => "ofertas_ubicacion.id_localidad", "quote" => FALSE));
     $joinLocalidades->on($on);
     $select->join($joinLocalidades);
     //INNER JOIN ofertas_categoria
     /////////////////////////////////////////////////////////
     $joinOfertasCategoria = new \apf\db\mysql5\Join($ofertasCategoriaTable);
     $joinOfertasCategoria->type("INNER");
     $on = array(array("field" => "ofertas_categoria.id_oferta", "value" => "ofertas.id", "quote" => FALSE));
     $joinOfertasCategoria->on($on);
     $select->join($joinOfertasCategoria);
     //INNER JOIN categorias
     /////////////////////////////////////////////////////////
     $joinCategorias = new \apf\db\mysql5\Join($categoriasTable);
     $joinCategorias->type("INNER");
     $on = array(array("field" => "ofertas_categoria.id_categoria", "value" => "categorias.id", "quote" => FALSE));
     $joinCategorias->on($on);
     $select->join($joinCategorias);
     //WHERE
     /////////////////////////////////////////////////////////
     $where = array();
     $tmpWhere = array();
     $usuariosCategoria = new \apf\db\mysql5\Table("usuarios_categorias");
     $selectCategorias = new \apf\db\mysql5\Select($usuariosCategoria);
     $selectCategorias->fields(array("id_categoria"));
     $selectCategorias->where(array(array("field" => "id_usuario", "value" => $usuario->getId())));
     $tmpWhere[] = array("field" => "ofertas_categoria.id_categoria", "operator" => "IN", "value" => $selectCategorias);
     $prefUbicaciones = new \apf\db\mysql5\Table("usuarios_ubicaciones");
     $selectLocalidades = new \apf\db\mysql5\Select($prefUbicaciones);
     $selectLocalidades->fields(array("id_localidad"));
     $selectLocalidades->where(array(array("field" => "id_usuario", "value" => $usuario->getId())));
     $tmpWhere[] = array("field" => "ofertas_ubicacion.id_localidad", "operator" => "IN", "value" => $selectLocalidades);
     $postulacionesTable = new \apf\db\mysql5\Table("usuarios_postulaciones");
     $selectPostulaciones = new \apf\db\mysql5\Select($postulacionesTable);
     $selectPostulaciones->fields(array("id_oferta"));
     $selectPostulaciones->where(array(array("field" => "id_usuario", "value" => $usuario->getId())));
     $tmpWhere[] = array("field" => "ofertas.id", "operator" => "NOT IN", "value" => $selectPostulaciones);
     $prefCriterios = $usuario->getPreferencia("criterios");
     if ($prefCriterios) {
         $cantCriterios = sizeof($prefCriterios);
         foreach ($prefCriterios as $key => $criterio) {
             if ($key == 0) {
                 $tmpWhere[] = array("field" => "ofertas.titulo", "operator" => "LIKE", "value" => "%{$criterio}%", "begin_enclose" => TRUE);
             } else {
                 if ($key == $cantCriterios - 1) {
                     $tmpWhere[] = array("field" => "ofertas.titulo", "operator" => "LIKE", "value" => "%{$criterio}%", "end_enclose" => TRUE);
                 } else {
                     $tmpWhere[] = array("field" => "ofertas.titulo", "operator" => "LIKE", "value" => "%{$criterio}%");
                 }
             }
         }
     }
     foreach ($tmpWhere as $key => $value) {
         $where[] = $value;
         $op = $value["operator"] == "LIKE" ? "OR" : "AND";
         $where[] = array("operator" => $op);
     }
     unset($where[sizeof($where) - 1]);
     if ($intervalo) {
         $where[] = array("operator" => "AND");
         $where[] = array("field" => "ofertas.fecha_publicacion", "operator" => "BETWEEN", "value" => array("min" => "DATE_SUB(NOW(), INTERVAL {$intervalo} {$tipo})", "max" => "NOW()"));
     }
     $select->where($where);
     $select->group(array("ofertas.id"));
     $select->orderBy(array("fecha_publicacion"), "DESC");
     $res = $select->execute($smartMode = FALSE);
     $ofertas = array();
     $class = __CLASS__;
     foreach ($res as $r) {
         $oferta = new Oferta();
         $oferta->setId($r["idOferta"]);
         $oferta->setEmail($r["email"]);
         $oferta->setTitulo($r["titulo"]);
         $ofertas[] = $oferta;
     }
     return $ofertas;
 }
コード例 #2
0
ファイル: Usuario.class.php プロジェクト: pthreat/apf-dev
 /**
  *Funcion privada, generica para obtener datos de usuario y generar una instancia
  *se puso esta funcion como privada para poder utilizar las funciones derivadas
  *que correspondan a cada caso, por ejemplo si quiero obtener una instancia
  *del objeto Usuario mediante Email, entonces utilizaria la funcion publica y estatica
  *getInstanceByEmail. Y asi sucesivamente.
  */
 private static function getInstance($field, $value)
 {
     switch (strtolower($field)) {
         case "id":
         case "id_usuario":
             $where = array(array("field" => "usuarios_datos.id_usuario", "value" => (int) $value));
             break;
         case "email":
             $where = array(array("field" => "usuarios_datos.email", "value" => $value));
             break;
         default:
             throw new \Exception("No puedo obtener una instancia mediante el campo {$field} con valor {$value}");
             break;
     }
     $usuarios = new \apf\db\mysql5\Table("usuarios");
     $usuariosDatos = new \apf\db\mysql5\Table("usuarios_datos");
     $usuariosCategorias = new \apf\db\mysql5\Table("usuarios_categorias");
     $usuariosCriterios = new \apf\db\mysql5\Table("usuarios_criterios");
     $usuariosUbicaciones = new \apf\db\mysql5\Table("usuarios_ubicaciones");
     $usuariosCv = new \apf\db\mysql5\Table("usuarios_cv");
     $select = new \apf\db\mysql5\Select($usuarios);
     $fields = array("usuarios.id AS idUsuario", "usuarios.nombre", "usuarios.apellido", "usuarios_datos.salario", "usuarios_datos.clave", "usuarios_datos.fecha_nacimiento", "usuarios_datos.firma", "usuarios_datos.disponibilidad", "GROUP_CONCAT(DISTINCT usuarios_categorias.id_categoria) AS categorias", "usuarios_datos.email", "usuarios_cv.cv_file", "usuarios_cv.texto", "GROUP_CONCAT(DISTINCT usuarios_ubicaciones.id_provincia) AS provincias", "GROUP_CONCAT(DISTINCT usuarios_ubicaciones.id_localidad) AS localidades", "GROUP_CONCAT(DISTINCT usuarios_ubicaciones.id_barrio) AS barrios", "GROUP_CONCAT(DISTINCT usuarios_criterios.criterio) AS criterios");
     $select->fields($fields);
     //INNER JOIN usuarios_datos
     /////////////////////////////////////////////////////////
     $joinUsuariosDatos = new \apf\db\mysql5\Join($usuariosDatos);
     $joinUsuariosDatos->type("INNER");
     $on = array(array("field" => "usuarios.id", "value" => "usuarios_datos.id_usuario", "quote" => FALSE));
     $joinUsuariosDatos->on($on);
     $select->join($joinUsuariosDatos);
     //LEFT JOIN usuarios_categorias
     /////////////////////////////////////////////////////////
     $joinUsuariosCategorias = new \apf\db\mysql5\Join($usuariosCategorias);
     $joinUsuariosCategorias->type("LEFT");
     $on = array(array("field" => "usuarios_categorias.id_usuario", "value" => "usuarios_datos.id_usuario", "quote" => FALSE));
     $joinUsuariosCategorias->on($on);
     $select->join($joinUsuariosCategorias);
     //LEFT JOIN usuarios_criterios
     /////////////////////////////////////////////////////////
     $joinUsuariosCriterios = new \apf\db\mysql5\Join($usuariosCriterios);
     $joinUsuariosCriterios->type("LEFT");
     $on = array(array("field" => "usuarios_datos.id_usuario", "value" => "usuarios_criterios.id_usuario", "quote" => FALSE));
     $joinUsuariosCriterios->on($on);
     $select->join($joinUsuariosCriterios);
     //LEFT JOIN usuarios_cv
     /////////////////////////////////////////////////////////
     $joinUsuariosCv = new \apf\db\mysql5\Join($usuariosCv);
     $joinUsuariosCv->type("LEFT");
     $on = array(array("field" => "usuarios_datos.id_usuario", "value" => "usuarios_cv.id_usuario", "quote" => FALSE));
     $joinUsuariosCv->on($on);
     $select->join($joinUsuariosCv);
     //LEFT JOIN usuarios_ubicaciones
     /////////////////////////////////////////////////////////
     $joinUsuariosUbicaciones = new \apf\db\mysql5\Join($usuariosUbicaciones);
     $joinUsuariosUbicaciones->type("LEFT");
     $on = array(array("field" => "usuarios_datos.id_usuario", "value" => "usuarios_ubicaciones.id_usuario", "quote" => FALSE));
     $joinUsuariosUbicaciones->on($on);
     $select->join($joinUsuariosUbicaciones);
     //WHERE
     /////////////////////////////////////////////////////////
     $select->where($where);
     $select->group(array("usuarios.id"));
     $res = $select->execute();
     if (!sizeof($res)) {
         return FALSE;
     }
     $class = __CLASS__;
     $obj = new $class();
     $obj->setId($res["idUsuario"]);
     $obj->setNombre($res["nombre"]);
     $obj->setApellido($res["apellido"]);
     $obj->setFechaNacimiento($res["fecha_nacimiento"]);
     $obj->agregarPreferencia("salario", $res["salario"], FALSE);
     $obj->agregarPreferencia("clave", $res["clave"], FALSE);
     $obj->agregarPreferencia("firma", $res["firma"], FALSE);
     $obj->agregarPreferencia("disponibilidad", $res["disponibilidad"], FALSE);
     //echo "<pre>";
     //var_dump($res);
     //echo "</pre>";
     if (sizeof($res["categorias"])) {
         $categorias = explode(',', $res["categorias"]);
         foreach ($categorias as $categoria) {
             $obj->agregarPreferencia("categorias", $categoria);
         }
     }
     if (sizeof($res["localidades"])) {
         $localidades = explode(',', $res["localidades"]);
         foreach ($localidades as $localidad) {
             $obj->agregarPreferencia("localidades", $localidad);
         }
     }
     if (sizeof($res["provincias"])) {
         $provincias = explode(',', $res["provincias"]);
         foreach ($provincias as $provincia) {
             $obj->agregarPreferencia("provincias", $provincia);
         }
     }
     if (sizeof($res["barrios"])) {
         $barrios = explode(',', $res["barrios"]);
         foreach ($barrios as $barrio) {
             $obj->agregarPreferencia("barrios", $barrio);
         }
     }
     if (sizeof($res["criterios"])) {
         $criterios = explode(',', $res["criterios"]);
         foreach ($criterios as $criterio) {
             $obj->agregarPreferencia("criterios", $criterio);
         }
     }
     $obj->setEmail($res["email"]);
     $obj->setCvFile($res["cv_file"]);
     return $obj;
 }