PEOPLE
INVOLVED WITH AND COMMITTED
TO THEIR LOCAL COMMUNITY
require_once "class.model.php";
class model_paginado extends model {
/* variables para paginación */
var $total;
// indica total de resultados
var $pagina;
// indica la página en la que nos encontramos.
var $c;
// indica resultados que se mostraran por página.
var $totalPaginas;
// indica la cantidad total de páginas que devuelve la consulta.
var $enablePagina = false;
// variable se pone true si se activa Paginacion con la funcion enablePaginacion(boolean).
var $registros;
// cantidad de registros leídos en la última consulta a la base de datos.
var $paramPaginado = 'pagina';
// por si se tiene que anyadir un anchor en las paginaciones
var $anchor = '';
// parametro para pasar el numero de pagina
/**
* Código de Siguiente.
*
* Este atributo contiene el código HTML que representará al link
* para avanzar a la siguiente página de resultados.
* Puede ser cualquier c�digo HTML permitido dentro dentro de un
* tag
.
**/
var $siguiente = "Siguiente >";
/**
* Código de Anterior.
*
* Este atributo contiene el código HTML que representará al link
* para retroceder a la página anterior de resultados.
* Puede ser cualquier código HTML permitido dentro dentro de un
* tag .
**/
var $anterior = "< Anterior";
function enablePagina() {
return $this->enablePagina = func_get_arg(0);
}
/**metodo para acceder a la $pagina**/
function pagina() {
switch (func_num_args()) {
case 1 :
$this->pagina = func_get_arg(0);
$this->pagina = empty($this->pagina) ? 1 : $this->pagina;
break;
default :
return $this->pagina;
break;
}
}
function porPagina() {
switch (func_num_args()) {
case 1 :
$this->porPagina = func_get_arg(0);
break;
default :
return $this->porPagina;
break;
}
}
/**
* Despliega el link hacia la siguiente página
* Siempre que quede una página siguiente, se muestra un link
* hacia la siguiente página de resultados.
* El método acepta ser llamado con un parámetro que contenga el
* código HTML que representará al link y que pueda ser representado
* encerrado dentro de un tag .
**/
function siguiente() {
switch (func_num_args()) {
case 2 :
$class = func_get_arg(1);
case 1 :
$this->siguiente = func_get_arg(0);
default :
//$a = ((($this->pagina-1)*($this->porPagina))+$this->cuantos());
//$b = $this->cuantos();
//if($this->pagina()*($this->cuantos()/$this->porPagina)+1 < $this->cuantos())
//if($a < $b);
if($this->pagina < $this->totalPaginas()) {
if($_SESSION["editar"])
return " paramPaginado . "=" . ($this->pagina() + 1) . $this->propagar() . $this->anchor . "\">" . $this->siguiente . " ";
else
return "
paramPaginado . "=" . ($this->pagina() + 1) . $this->propagar()) . $this->anchor . "\">" . $this->siguiente . " ";
}
if($this->pagina() == $this->totalPaginas()) {
//return $this->siguiente;
return "
" . $this->siguiente . $this->anchor . " ";
}
break;
}
}
/**
* Despliega el link hacia la página anterior.
*
* Siempre que no estemos en la primer página, se muestra un link
* hacia la página anterior de resultados.
* El método acepta ser sllamado con un parámetro que contenga el
* código HTML que representará al link y que pueda ser representado
* encerrado dentro de un tag
.
**/
function anterior() {
switch (func_num_args()) {
case 2 :
$class = func_get_arg(1);
case 1 :
$this->anterior = func_get_arg(0);
default :
if($this->pagina() != 1) {
if($_SESSION["editar"])
return " paramPaginado . "=" . ($this->pagina() - 1) . $this->propagar() . $this->anchor . "\">" . $this->anterior . " ";
else
return "
paramPaginado . "=" . ($this->pagina() - 1) . $this->propagar()) . $this->anchor . "\">" . $this->anterior . " ";
}
if($this->pagina() == 1) {
//return $this->anterior;
return "
" . $this->anterior . $this->anchor . " ";
}
break;
}
}
function anterior3() {
global $_object;
switch (func_num_args()) {
case 2 :
$class = func_get_arg(1);
case 1 :
$this->anterior = func_get_arg(0);
default :
//de momento la funcion linkTo solo acepta parametros por array
$propagar[$this->paramPaginado] = ($this->pagina() - 1);
if($this->propagar()) {
$str = explode('&', $this->propagar());
foreach($str as $v) {
$str2 = explode('=', $v);
if(trim($str2[0]))
$propagar[$str2[0]] = $str2[1];
}
}
//if($GLOBALS['idiomas'])
//{
if($this->pagina() != 1) {
if($_SESSION["editar"])//no esta programado
return "
paramPaginado . "=" . ($this->pagina() - 1) . $this->propagar() . $this->anchor . "\">" . $this->anterior . " ";
else
return "
anchor . "\">" . $this->anterior . " ";
}
if($this->pagina() == 1) {
//return $this->anterior;
//return "
".$this->anterior ." ";
return ;
}
//}
break;
}
}
function siguiente3() {
global $_object;
switch (func_num_args()) {
case 2 :
$class = func_get_arg(1);
case 1 :
$this->siguiente = func_get_arg(0);
default :
//de momento la funcion linkTo solo acepta parametros por array
$propagar[$this->paramPaginado] = ($this->pagina() + 1);
if($this->propagar()) {
$str = explode('&', $this->propagar());
foreach($str as $v) {
$str2 = explode('=', $v);
if(trim($str2[0]))
$propagar[$str2[0]] = $str2[1];
}
}
//$a = ((($this->pagina-1)*($this->porPagina))+$this->cuantos());
//$b = $this->cuantos();
//if($this->pagina()*($this->cuantos()/$this->porPagina)+1 < $this->cuantos())
//if($a < $b);
if ($this->pagina < $this->totalPaginas()) {
if($_SESSION["editar"])
return "
paramPaginado . "=" . ($this->pagina() + 1) . $this->propagar() . $this->anchor . "\">" . $this->siguiente . " ";
else
//return "
paramPaginado."=".($this->pagina()+1).$this->propagar())."\">".$this->siguiente." ";
return "
anchor . "\">" . $this->siguiente . " ";
}
if($this->pagina() == $this->totalPaginas()) {
//return $this->siguiente;
//return "
".$this->siguiente.$this->anchor." ";
return;
}
break;
}
}
/**
* Despliega los números de páginas posibles
* Este método muestra una lista de todas las páginas posibles como
* links, excepto la página actual, que se encuentra sin link y resaltada
* en negrita.
**/
function nroPaginas($separador="|", $preLink="", $postLink="", $preActive="", $postActive="") {
if($_SESSION["editar"]) {
//for($i = 1; $i <= $this->totalPaginas() ; $i++)
$ini = intval($this->pagina / 5) * 5;
if($ini == 0)
$ini = 1;
$fin = (intval($this->pagina / 5) * 5) + 5;
if($fin > $this->totalPaginas())
$fin = $this->totalPaginas();
for($i = $ini; $i <= $fin; $i++) {
//if($i == $ini){ $preLink = str_replace('li', 'li class="primera"', $preLink); }
$temp[$i] = $preLink . "
paramPaginado . "=$i" . $this->propagar()) . $this->anchor . "\">$i " . $postLink;
//if($i == $ini){ $preLink = str_replace('li class="primera"', 'li', $preLink); }
} // for
//if($this->pagina() == $ini) { $preActive = str_replace('li', 'li class="primera"', $preActive); }
$class = 'class="seleccionada"';
$temp[$this->pagina()] = $preActive . "
paramPaginado . "=$i" . $this->propagar() . $this->anchor) . "\" $class>" . $this->pagina() . " " . $postActive;
return implode(" " . $separador . " ", $temp);
} else {
$ini = intval($this->pagina / 5) * 5;
if($ini == 0)
$ini = 1;
$fin = (intval($this->pagina / 5) * 5) + 5;
if($fin > $this->totalPaginas())
$fin = $this->totalPaginas();
//echo"";
for($i = $ini; $i <= $fin; $i++) {
//if($i == $ini){ $preLink = str_replace('li', 'li class="primera"', $preLink); }
$temp[$i] = $preLink . "
paramPaginado . "=$i" . $this->propagar() . $this->anchor) . "\">$i " . $postLink;
//if($i == $ini){ $preLink = str_replace('li class="primera"', 'li', $preLink); }
} // for
//if($this->pagina() == $ini) { $preActive = str_replace('li', 'li class="primera"', $preActive); }
$class = 'class="seleccionada"';
$temp[$this->pagina()] = $preActive . "
paramPaginado . "=$i" . $this->propagar() . $this->anchor) . "\" $class>" . $this->pagina() . " " . $postActive;
return implode("", $temp);
}
} // function
function nroPaginas3($separador="|", $preLink="", $postLink="", $preActive="", $postActive="") {
global $_object;
//de momento la funcion linkTo solo acepta parametros por array
if($this->propagar()) {
$str = explode('&', $this->propagar());
foreach($str as $v) {
$str2 = explode('=', $v);
if(trim($str2[0]))
$propagar[$str2[0]] = $str2[1];
}
}
if($_SESSION["editar"]) {
//for($i = 1; $i <= $this->totalPaginas() ; $i++)
$ini = intval($this->pagina / 5) * 5;
if($ini == 0)
$ini = 1;
$fin = (intval($this->pagina / 5) * 5) + 5;
if($fin > $this->totalPaginas())
$fin = $this->totalPaginas();
for($i = $ini; $i <= $fin; $i++) {
//propagar
$propagar[$this->paramPaginado] = $i;
//if($i == $ini){ $preLink = str_replace('li', 'li class="primera"', $preLink); }
//if($i == ($fin)){ $preLink = str_replace('li', 'li class="ultima"', $preLink); }
//$temp[$i] = $preLink."
paramPaginado."=$i".$this->propagar())."\">$i ".$postLink;
$temp[$i] = $preLink . "
anchor . "\">$i " . $postLink;
//if($i == $ini){ $preLink = str_replace('li class="primera"', 'li', $preLink); }
//if($i == ($fin)){ $preLink = str_replace('li class="ultima"', 'li', $preLink); }
} // for
//if($this->pagina() == $ini) { $preActive = str_replace('li', 'li class="primera"', $preActive); }
//if($this->pagina() == ($fin)) { $preActive = str_replace('li', 'li class="ultima"', $preActive); }
//$class = 'class="seleccionada"';
//propagar
$propagar[$this->paramPaginado] = $this->pagina();
//$temp[$this->pagina()] = $preActive."
paramPaginado."=$i".$this->propagar())."\" $class>".$this->pagina()." ".$postActive;
$temp[$this->pagina()] = $preActive . $this->pagina() . $postActive;
return implode(" " . $separador . " ", $temp);
} else {
$ini = intval($this->pagina / 5) * 5;
if($ini == 0)
$ini = 1;
$fin = (intval($this->pagina / 5) * 5) + 5;
if($fin > $this->totalPaginas())
$fin = $this->totalPaginas();
for($i = $ini; $i <= $fin; $i++) {
//propagar
$propagar[$this->paramPaginado] = $i;
//if($i == $ini){ $preLink = str_replace('li', 'li class="primera"', $preLink); }
//if($i == ($fin)){ $preLink = str_replace('li', 'li class="ultima"', $preLink); }
//$temp[$i] = $preLink."
paramPaginado."=$i".$this->propagar())."\">$i ".$postLink;
$temp[$i] = $preLink . "
anchor . "\">$i " . $postLink;
//if($i == $ini){ $preLink = str_replace('li class="primera"', 'li', $preLink); }
//if($i == ($fin)){ $preLink = str_replace('li class="ultima"', 'li', $preLink); }
} // for
//if($this->pagina() == $ini) { $preActive = str_replace('li', 'li class="primera"', $preActive); }
//if($this->pagina() == ($fin)) { $preActive = str_replace('li', 'li class="ultima"', $preActive); }
//$class = 'class="seleccionada"';
//propagar
$propagar[$this->paramPaginado] = $this->pagina();
//$temp[$this->pagina()] = $preActive."
paramPaginado."=$i".$this->propagar())."\" $class>".$this->pagina()." ".$postActive;
$temp[$this->pagina()] = $preActive . $this->pagina() . $postActive;
return implode(" " . $separador . " ", $temp);
}
}
/**
* Indica que variables se desean propagar en los links.
*
* Este metodo recibe una lista de nombres que son guarados internamente
* hasta que son creados los links para navegar los resultados. En ese
* momento, son agregados los nombres de las variables con sus valores
* para que puedan ser propagados.
**/
function propagar() {
switch(func_num_args()) {
case 0 :
if($this->variables && is_array($this->variables)) {
foreach($this->variables as $var) {
//$ret.= "&$var=".$GLOBALS[$var];
if($GLOBALS[$var]) {
if (is_array($GLOBALS[$var])) {
foreach ($GLOBALS[$var] as $k => $v)
$ret .= '&'.sanitize($var).'['.sanitize($k).']=' . sanitize($v);
} else
$ret .= '&'.sanitize($var).'=' . sanitize($GLOBALS[$var]);
} elseif($_REQUEST[$var]) {
if (is_array($_REQUEST[$var])) {
foreach ($_REQUEST[$var] as $k => $v)
$ret .= '&'.sanitize($var).'['.sanitize($k).']=' . sanitize($v);
} else
$ret .= '&'.sanitize($var).'=' . sanitize($_REQUEST[$var]);
}
}
}
return $ret;
break;
default :
for($i = 0; $i < func_num_args(); $i++) {
$this->variables[] = func_get_arg($i);
}
break;
}
}
/**
* Retorna el indice dentro del Result Set del primer
* elemento de la página actual.
**/
function desde() {
return (($this->pagina() - 1) * $this->porPagina()) + 1;
}
/**
* Retorna el �ndice dentro del Result Set del �ltimo
* elemento de la p�gina actual.
**/
function hasta() {
return ($this->desde() - 1) + $this->cuantos();
}
/**
* Método para acceder a $total
**/
function total() {
switch (func_num_args()) {
case 1 :
$this->total = func_get_arg(0);
break;
default :
return $this->total;
break;
}
}
function totalPaginas() {
switch (func_num_args()) {
case 1 :
$this->totalPaginas = func_get_arg(0);
break;
default :
return $this->totalPaginas;
break;
}
}
/**
* Método para acceder a $_registros
**/
function registros() {
switch (func_num_args()) {
case 1 :
$this->_registros = func_get_arg(0);
break;
default :
return $this->registros;
break;
}
}
function pagInicio() {
if($this->pagina() > 1) {
return "
paramPaginado . "=1" . $this->propagar() . $this->anchor . "\">" . func_get_arg(0) . " ";
} elseif($this->pagina() == 1)
return func_get_arg(0);
}
function pagFinal() {
if($this->pagina() < $this->totalPaginas()) {
return "
paramPaginado . "=" . $this->totalPaginas() . $this->propagar() . $this->anchor . "\">" . func_get_arg(0) . " ";
} elseif($this->pagina() == $this->totalPaginas())
return func_get_arg(0);
}
function mostrarEnlaces($separador="|", $strAnterior, $strSiguiente, $strInicio="", $strFinal="") {
//return ($this->anterior()." ".$separador." ".$this->nroPaginas($separador)." ".$separador." ".$this->siguiente($cuantos));
//return ($this->anterior($strAnterior)." ".$separador." ".$this->nroPaginas($separador)." ".$separador." ".$this->siguiente($strSiguiente));
if($this->enablePagina)
return ($this->pagInicio("$strInicio") . " " . $this->anterior("$strAnterior") . " " . $separador . " " . $this->siguiente("$strSiguiente") . " " . $this->pagFinal("$strFinal"));
}
function getM($where = "", $orden = "", $strId = "id", $cabeceraSelect = "", $groupby = "", $prefix = "")
{
//idioma
if (!$cabeceraSelect) {
if ($this->vars["idioma"]) {
if ($_SESSION["idioma"])
$strWhere .= " WHERE id_idioma = " . $_SESSION["idioma"];
else
$strWhere .= " WHERE id_idioma = 1";
}
}
if($this->dominios){
if ($strWhere) {
$strWhere .= " AND ".$prefix."dominio_ciudad={$_SESSION['dominio_ciudad']}";
} else {
$strWhere .= " WHERE ".$prefix."dominio_ciudad={$_SESSION['dominio_ciudad']}";
}
}
if ($orden)
$strOrden = " ORDER BY " . $orden;
if ($groupby)
$strGroupby = " GROUP BY " . $groupby;
if ($strWhere) {
if ($where)
$strWhere .= " AND " . $where;
} else {
if ($where)
$strWhere .= " WHERE " . $where;
}
// control publicado
if ($this->isVersioned())
{
if (!$_SESSION['editar'])
{
if ($strWhere) $strWhere .= " AND ott_publicado = 1";
else $strWhere .= " WHERE ott_publicado = 1";
}
else
{
if ($strWhere) $strWhere .= " AND ott_version_activa = 1";
else $strWhere .= " WHERE ott_version_activa = 1";
}
}
if (!$this->res) {
//echo "
";
if (!$cabeceraSelect) {
if ($this->isVersioned()) {
if ($this->vars["idioma"]) {
$_sql = "SELECT * FROM ( SELECT * FROM " . $this->tabla . " WHERE dominio_ciudad={$_SESSION['dominio_ciudad']} ORDER BY ott_version DESC) as tmp " . $strWhere . " GROUP BY id,id_idioma " . $strOrden;
} else {
$_sql = "SELECT * FROM ( SELECT * FROM " . $this->tabla . " WHERE dominio_ciudad={$_SESSION['dominio_ciudad']} ORDER BY ott_version DESC) as tmp " . $strWhere . " GROUP BY id " . $strOrden;
}
//$_sql = "select t1.* from " . $this->tabla . " AS t1 LEFT OUTER JOIN " . $this->tabla . " AS t2 ON (t1.id = t2.id AND t1.ott_version < t2.ott_version) " . $strWhere . " AND t2.id IS NULL and t1.id_idioma = ".$_SESSION['idioma'] . $strOrden . $strLimit;
} else {
$_sql = "SELECT * FROM " . $this->tabla . $strWhere . $strOrden;
}
/*
if ($this->isVersioned()) {
$_sql = "select t1.* from " . $this->tabla . " AS t1 LEFT OUTER JOIN " . $this->tabla . " AS t2 ON (t1.id = t2.id AND t1.ott_version < t2.ott_version) " . $strWhere . " AND t2.id IS NULL and t1.id_idioma = ".$_SESSION['idioma'] . $strOrden;
} else {
$_sql = "select * from " . $this->tabla . $strWhere . $strOrden;
}
*/
} else {
$_sql = $cabeceraSelect . $strWhere . $strGroupby . $strOrden;
}
//echo $_sql;
if($this->debug) echo $_sql;
$_SESSION['sql_list']=$_sql;
$_res = mysql_query($_sql, $this->linkr);
if($this->enablePagina) {
$this->res = $_res;
$this->total($this->cuantos());
$this->totalPaginas(ceil($this->total() / $this->porPagina()));
// Comprobamos que no se intenta acceder a una página que no existe.
if($this->pagina() > $this->totalPaginas()) {
$this->error("No existe la página " . $this->pagina() . " de resultados. Hay solo un total de " . $this->totalPaginas());
return false;
}
$strLimit = " limit " . ($this->desde() - 1) . "," . $this->porPagina;
//exit($strLimit);
}
if (!$cabeceraSelect) {
if ($this->isVersioned()) {
if ($this->vars["idioma"]) {
$_sqlA = "SELECT * FROM ( SELECT * FROM " . $this->tabla . " WHERE dominio_ciudad={$_SESSION['dominio_ciudad']} ORDER BY ott_version DESC) as tmp " . $strWhere . " GROUP BY id,id_idioma " . $strOrden . $strLimit;
} else {
$_sqlA = "SELECT * FROM ( SELECT * FROM " . $this->tabla . " WHERE dominio_ciudad={$_SESSION['dominio_ciudad']} ORDER BY ott_version DESC) as tmp " . $strWhere . " GROUP BY id " . $strOrden . $strLimit;
}
//$_sqlA = "select t1.* from " . $this->tabla . " AS t1 LEFT OUTER JOIN " . $this->tabla . " AS t2 ON (t1.id = t2.id AND t1.ott_version < t2.ott_version) " . $strWhere . " AND t2.id IS NULL and t1.id_idioma = ".$_SESSION['idioma'] . $strOrden . $strLimit;
} else {
$_sqlA = "SELECT * FROM " . $this->tabla . $strWhere . $strOrden . $strLimit;
}
} else {
$_sqlA = $cabeceraSelect . $strWhere . $strGroupby . $strOrden . $strLimit;
}
if($this->debug)
echo $_sqlA;
//$this->registros( $this->cuantos());
$_resA = mysql_query($_sqlA, $this->linkr);
if(!$_resA) { $this->error = "Error: $_sqlA
" . mysql_error();
return false;
}
$_dataA = mysql_fetch_object($_resA);
if(!$_dataA) { $this->error = "Error, registro no encontrado: $_sqlA
" . mysql_error();
return false;
}
foreach($this->campos as $campo => $valor) {
$this->campos[$campo] = $_dataA->$campo;
}
$this->id = $_dataA->$strId;
$this->fecha_alta = $_dataA->fecha_alta;
$this->res = $_resA;
parent::getInfoVersion($_dataA);
} else {
$_dataA = mysql_fetch_object($this->res);
if(!$_dataA) { $this->error = "Error, fin dataset: $_sqlA
" . mysql_error();
return false;
}
foreach($this->campos as $campo => $valor)
$this->campos[$campo] = $_dataA->$campo;
$this->id = $_dataA->$strId;
$this->fecha_alta = $_dataA->fecha_alta;
parent::getInfoVersion($_dataA);
}
return true;
}
function getMSinDominios($where = "", $orden = "", $strId = "id", $cabeceraSelect = "", $groupby = "", $prefix = "")
{
//idioma
if (!$cabeceraSelect) {
if ($this->vars["idioma"]) {
if ($_SESSION["idioma"])
$strWhere .= " WHERE id_idioma = " . $_SESSION["idioma"];
else
$strWhere .= " WHERE id_idioma = 1";
}
}
/*if($this->dominios){
if ($strWhere) {
$strWhere .= " AND ".$prefix."dominio_ciudad={$_SESSION['dominio_ciudad']}";
} else {
$strWhere .= " WHERE ".$prefix."dominio_ciudad={$_SESSION['dominio_ciudad']}";
}
}*/
if ($orden)
$strOrden = " ORDER BY " . $orden;
if ($groupby)
$strGroupby = " GROUP BY " . $groupby;
if ($strWhere) {
if ($where)
$strWhere .= " AND " . $where;
} else {
if ($where)
$strWhere .= " WHERE " . $where;
}
if (!$this->res) {
//echo "
";
if (!$cabeceraSelect) {
$_sql = "SELECT * FROM " . $this->tabla . $strWhere . $strOrden;
} else {
$_sql = $cabeceraSelect . $strWhere . $strGroupby . $strOrden;
}
//echo $_sql;
if($this->debug) echo $_sql;
$_SESSION['sql_list']=$_sql;
$_res = mysql_query($_sql, $this->linkr);
if($this->enablePagina) {
$this->res = $_res;
$this->total($this->cuantos());
$this->totalPaginas(ceil($this->total() / $this->porPagina()));
// Comprobamos que no se intenta acceder a una página que no existe.
if($this->pagina() > $this->totalPaginas()) {
$this->error("No existe la página " . $this->pagina() . " de resultados. Hay solo un total de " . $this->totalPaginas());
return false;
}
$strLimit = " limit " . ($this->desde() - 1) . "," . $this->porPagina;
//exit($strLimit);
}
if (!$cabeceraSelect) {
$_sqlA = "SELECT * FROM " . $this->tabla . $strWhere . $strOrden . $strLimit;
} else {
$_sqlA = $cabeceraSelect . $strWhere . $strGroupby . $strOrden . $strLimit;
}
if($this->debug)
echo $_sqlA;
//$this->registros( $this->cuantos());
$_resA = mysql_query($_sqlA, $this->linkr);
if(!$_resA) { $this->error = "Error: $_sqlA
" . mysql_error();
return false;
}
$_dataA = mysql_fetch_object($_resA);
if(!$_dataA) { $this->error = "Error, registro no encontrado: $_sqlA
" . mysql_error();
return false;
}
foreach($this->campos as $campo => $valor) {
$this->campos[$campo] = $_dataA->$campo;
}
$this->id = $_dataA->$strId;
$this->fecha_alta = $_dataA->fecha_alta;
$this->res = $_resA;
parent::getInfoVersion($_dataA);
} else {
$_dataA = mysql_fetch_object($this->res);
if(!$_dataA) { $this->error = "Error, fin dataset: $_sqlA
" . mysql_error();
return false;
}
foreach($this->campos as $campo => $valor)
$this->campos[$campo] = $_dataA->$campo;
$this->id = $_dataA->$strId;
$this->fecha_alta = $_dataA->fecha_alta;
parent::getInfoVersion($_dataA);
}
return true;
}
function renew() {
unset($this->res);
}
function setParamPaginado($str) {
$this->paramPaginado = $str;
}
function setAnchor($str) {
$this->anchor = '#'.$str;
}
}
?>
Social action
We transform the lives of vulnerable people through several programmes
and itineraries.
Community
A key component that unites us and enhances our potential to make an impact.
Volunteering
Our scope of action is the city, where we want to engage more and more
people, neighbourhood by neighbourhood, neighbour by neighbour.
Proximity
Volunteering with us is rewarding, dynamic, flexible, creative, diverse and
inclusive.
Our experience as a hosting family is very rewarding, enriching and straightforward too.
May Vergés - Hosting Homes Program
Every time I go to the BACstation, I leave full of positive energy and love. I'm from Argentina, and here I've found a second family that has helped me through difficult times.
Francisco Marino - Mentor and volunteer at BACstation Vallcarca.
When I first learned about BarcelonActua, it seemed like a project of change and hope. Starting as a volunteer allowed me to see that volunteering is activism, it’s about acting in line with your beliefs.
Victòria dels Àngels Pérez - Aula de Lectura Coordinator
Being a mentor has been a very positive experience of mutual learning for both of us, which has allowed my mentee to reaffirm her path in education and professional development.
Marcos Robles - U-BAC Scholarships Mentor
The support from BarcelonActua is a social elevator; it has given me opportunities to be on the same level as the locals and to be part of the community. Now I can start my life.
Bektur Saipidinov - Person hosted at BACstation Gràcia
Get involved
Get involved
Volunteers
Do you want to take part in social activities, campaigns, and events in your city?
LEARN MORE
Donors
Our donors make it possible for us to continue our work. Do you want to take
part?
LEARN MORE
Companies
If you are a socially responsible company, you can get involved in your city.
LEARN MORE
Stay informed about our activities, initiatives, and updates. Subscribe to our newsletter. All communications will be conducted in Catalan..
What happens in our sorroundings
31/07/2026
Laia Serrano explica a La Treva de SER Catalunya el valor del voluntariat local
Laia Serrano, directora general de Fundació BarcelonActua, ha participat en el programa La Treva de SER Catalunya per parlar del valor del voluntariat local i de la seva capacitat per (...)
30/06/2026
BarcelonActua manté viu el llegat social de Gaudí
NHK visita Barcelona per explicar com el compromís de la Junta Constructora del Temple Expiatori de la Sagrada Família dona suport a projectes socials que generen oportunitats per a (...)