Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/07/2012, 19:51
leon_8807
 
Fecha de Ingreso: julio-2012
Mensajes: 1
Antigüedad: 10 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Como paginar busqueda LDAP (sizelimit)

Man yo desarrolle una clase que pagina los resultados de una consulta LDAP mediante intervalos, casi no hay documentación para la paginacion de resultados de consultas LDAP, por defecto muestra 20 registros por pagina, (seria bueno hacer que el usuario elija cuantos registros mostrar), debe definir el número de páginas dependiendo del número de registros devueltos por el array ldap_get_entries con la funcion ceil($numeroderegistros / registrosporpagina), luego debe recorrer los registros mediante intervalos con los botones Pagina anterior y Pagina siguiente, le envio el código:

Debe cambiar obviamente los valores: Servidor LDAP, usuario, contraseña, y DN.


(clase)
<?php

class LDAP{

public $servercon;
private $ldapbind, $ldapsearch, $filtro, $entradas, $tamarray, $arraynombre,
$arrayestado, $arraycorreo, $arraydoc, $arrayciud, $arraymemberof, $arraydescr,
$rxp, $npag, $pagactual, $in, $lim, $estado, $attrib;

public function __construct() {
$this->servercon = ldap_connect("Direccion IP Servidor LDAP");
$this->ldapbind = ldap_bind($this->servercon, "[email protected]", 'Su contraseña') or
die("Autenticación fallida ó la cuenta está deshabilitada");
$this->filtro = "(&(objectCategory=person)(objectClass=user))" ;
$this->arraynombre = array();
$this->arrayestado = array();
$this->arraycorreo = array();
$this->arraydoc = array();
$this->arraydescr = array();
$this->arrayciud = array();
$this->arraymemberof = array();
$this->arraydescr = array();
}

public function search() {
$this->ldapsearch = ldap_search($this->servercon, "OU=suempresa,DC=sudominio,DC=com", $this->filtro);
$this->entradas = ldap_get_entries($this->servercon, $this->ldapsearch);

if ($this->entradas == 0) {
exit("<h1>No hay registros para mostrar</h1>");
}

foreach ($this->entradas as $val) {
if ($val['name'][0] != "") {
$this->arraynombre[] = $val['name'][0];
$this->arrayestado[] = $val['useraccountcontrol'][0];
$this->arraycorreo[] = $val['mail'][0];
$this->arraydoc[] = $val['postalcode'][0];
$this->arrayciud[] = $val['l'][0];
$this->arraymemberof[] = $val['memberof'][0];
}
}
$this->tamarray = count($this->arraynombre);
}

private function setAtributos($code) {
switch ($code){
case 514:
$this->estado = "<img src=\"imagenes/deshabilitado.png\" title=\"Deshabilitado\">";
$this->attrib = "NORMAL_ACCOUNT";
break;
case 546:
$this->estado = "<img src=\"imagenes/deshabilitado.png\" title=\"Deshabilitado\">";
$this->attrib = "PASSWD_NOTREQD | NORMAL_ACCOUNT";
break;
case 66050:
$this->estado = "<img src=\"imagenes/deshabilitado.png\" title=\"Deshabilitado\">";
$this->attrib = "NORMAL_ACCOUNT | DONT_EXPIRE_PASSWD";
break;
case 66082:
$this->estado = "<img src=\"imagenes/deshabilitado.png\" title=\"Deshabilitado\">";
$this->attrib = "PASSWD_NOTREQD | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWD";
break;
case 512:
$this->estado = "<img src=\"imagenes/habilitado.png\" title=\"Habilitado\">";
$this->attrib = "NORMAL_ACCOUNT";
break;
case 544:
$this->estado = "<img src=\"imagenes/habilitado.png\" title=\"Habilitado\">";
$this->attrib = "PASSWD_NOTREQD | NORMAL_ACCOUNT";
break;
case 66048:
$this->estado = "<img src=\"imagenes/habilitado.png\" title=\"Habilitado\">";
$this->attrib = "DONT_EXPIRE_PASSWD | NORMAL_ACCOUNT";
break;
case 66080:
$this->estado = "<img src=\"imagenes/habilitado.png\" title=\"Habilitado\">";
$this->attrib = "PASSWD_NOTREQD | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWD";
break;
default:
$this->estado = "NULL";
$this->attrib = "NULL";
$this->imagen = "NULL";
break;
}
}

private function getAttrib(){
return $this->attrib;
}

private function getEstado(){
return $this->estado;
}

public function paginar($nreg, $paginactual, $in, $lim) {

$this->pagactual = $paginactual;
$this->in = $in;
$this->lim = $lim;

if ($nreg > $this->tamarray)
$this->rxp = $this->tamarray;
else
$this->rxp = $nreg;
$this->npag = ceil($this->tamarray / $this->rxp);

echo "<div align=\"center\" class=\"navegacion\">\n";
if ($this->pagactual > 1) {
echo "<button onclick=\"location.href='ldap.php?regxpag=$this->rxp&pag=" . ($this->pagactual - 1) . "&in=" . ($this->in - $this->rxp) . "&lim=" . ($this->lim - $this->rxp) . "'\">&nbsp;&nbsp;<&nbsp;&nbsp;</button>\n";
} else {
echo "<button disabled=\"disabled\">&nbsp;&nbsp;<&nbsp;&nbsp;</button>\n";
}
echo "&nbsp;&nbsp;&nbsp;Pagina $this->pagactual de $this->npag&nbsp;&nbsp;&nbsp;\n";
if ($this->pagactual < $this->npag) {
echo "<button onclick=\"location.href='ldap.php?regxpag=$this->rxp&pag=" . ($this->pagactual + 1) . "&in=" . ($this->in + $this->rxp) . "&lim=" . ($this->lim + $this->rxp) . "'\">&nbsp;&nbsp;>&nbsp;&nbsp;</button>\n";
} else {
echo "<button disabled=\"disabled\">&nbsp;&nbsp;>&nbsp;&nbsp;</button>\n";
}
echo "</div>\n";
echo "<br>\n";

echo "<table width=\"100%\" align=\"center\" border=\"0\">\n";
echo " <tr class=\"nombrecol\">\n";
echo " <td><b>Nombre</b></td>\n";
echo " <td><b>Estado</b></td>\n";
//echo " <td><b>Atributos</b></td>\n";
echo " <td><b>Correo</b></td>\n";
echo " <td><b>Documento</b></td>\n";
echo " <td><b>Cargo</b></td>\n";
echo " <td><b>Ciudad</b></td>\n";
//echo " <td><b>Miembro de</b></td>\n";
echo " </tr>\n";

while (($this->in < $this->lim) && ($this->in < $this->tamarray)) {
$this->setAtributos($this->arrayestado[$this->in]);
echo " <tr class=\"registros\">\n";
echo " <td>".$this->arraynombre[$this->in]."</td>\n";
echo " <td>".$this->getEstado()."</td>\n";
//echo " <td>".$this->getAttrib()."</td>\n";
echo " <td>".$this->arraycorreo[$this->in]."</td>\n";
echo " <td>".$this->arraydoc[$this->in]."</td>\n";
echo " <td>".$this->arraydescr[$this->in]."</td>\n";
echo " <td>".$this->arrayciud[$this->in]."</td>\n";
//echo " <td>".$this->arraymemberof[$this->in]."</td>\n";
echo " </tr>\n";
$this->in++;
}
echo "</table>";
}
}
?>

(Pagina PHP donde debe crear una instancia de la clase y hacer el llamado a los metodos)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Consulta LDAP</title>
<link href="estilos.css" type="text/css" rel="stylesheet">
</head>
<body>
<?php
require 'class.ldap.php';
$obj = new LDAP();
$obj->search();
if (!isset($_GET['regxpag'])) {
$_GET['regxpag'] = 20;
}
if (!isset($_GET['pag'])) {
$_GET['pag'] = 1;
}
if (!isset($_GET['in'])) {
$_GET['in'] = 0;
}
if (!isset($_GET['lim'])) {
$_GET['lim'] = $_GET['regxpag'];
}
$obj->paginar($_GET['regxpag'], $_GET['pag'], $_GET['in'], $_GET['lim']);
?>
</body>
</html>

Espero le sea útil, asi el post haya sido publicado hace mucho :D