function report_AsteriskLogs($smarty, $module_name, $local_templates_dir, $arrLang) { $arrFormElements = array("filter" => array("LABEL" => $arrLang["Date"], "REQUIRED" => "no", "INPUT_TYPE" => "SELECT", "INPUT_EXTRA_PARAM" => NULL, "VALIDATION_TYPE" => "ereg", "VALIDATION_EXTRA_PARAM" => '^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$'), "busqueda" => array("LABEL" => $arrLang['Search string'], "REQUIRED" => "no", "INPUT_TYPE" => "TEXT", 'VALIDATION_TYPE' => 'text', 'INPUT_EXTRA_PARAM' => '', 'VALIDATION_EXTRA_PARAM' => ''), "offset" => array("LABEL" => $arrLang["offset"], "REQUIRED" => "no", "INPUT_TYPE" => "HIDDEN", "INPUT_EXTRA_PARAM" => NULL, "VALIDATION_TYPE" => "ereg", "VALIDATION_EXTRA_PARAM" => '^[[:digit:]]+$'), "ultima_busqueda" => array("LABEL" => $arrLang['Search string'], "REQUIRED" => "no", "INPUT_TYPE" => "HIDDEN", 'VALIDATION_TYPE' => 'text', 'INPUT_EXTRA_PARAM' => '', 'VALIDATION_EXTRA_PARAM' => ''), "ultimo_offset" => array("LABEL" => $arrLang["offset"], "REQUIRED" => "no", "INPUT_TYPE" => "HIDDEN", "INPUT_EXTRA_PARAM" => NULL, "VALIDATION_TYPE" => "ereg", "VALIDATION_EXTRA_PARAM" => '^[[:digit:]]+$')); $smarty->assign("SHOW", $arrLang["Show"]); $smarty->assign("SEARCHNEXT", $arrLang['Search']); $field_pattern = getParameter("filter"); $busqueda = getParameter('busqueda'); if (is_null($busqueda) || trim($busqueda) == '') { $busqueda = ''; } /* Última búsqueda, si existe */ $sUltimaBusqueda = getParameter('ultima_busqueda'); $iUltimoOffset = getParameter('ultimo_offset'); if (is_null($sUltimaBusqueda) || $sUltimaBusqueda == '' || is_null($iUltimoOffset) || !ereg('^[[:digit:]]+$', $iUltimoOffset)) { $sUltimaBusqueda = NULL; $iUltimoOffset = NULL; } $pAsteriskLogs = new paloSantoAsteriskLogs($pDB); $listaFechas = $pAsteriskLogs->astLog->listarFechas(); if (!ereg($arrFormElements['filter']['VALIDATION_EXTRA_PARAM'], $field_pattern)) { $field_pattern = $listaFechas[count($listaFechas) - 1]; } $_POST['filter'] = $field_pattern; $total_datos = $pAsteriskLogs->ObtainNumAsteriskLogs($field_pattern); $comboFechas = array(); foreach ($listaFechas as $f) { $comboFechas[$f] = $f; } $arrFormElements['filter']['INPUT_EXTRA_PARAM'] = $comboFechas; $oFilterForm = new paloForm($smarty, $arrFormElements); if ($busqueda != '') { $_POST['busqueda'] = $busqueda; } $oGrid = new paloSantoGrid($smarty); $iNumLineasPorPagina = 30; $iEstimadoBytesPagina = $iNumLineasPorPagina * 128; $iOffsetVerdadero = getParameter('offset'); if (is_null($iOffsetVerdadero) || !ereg('^[[:digit:]]+$', $iOffsetVerdadero)) { $iOffsetVerdadero = 0; } $totalBytes = $total_datos[0]; if ($iOffsetVerdadero >= $totalBytes) { $iOffsetVerdadero = 0; } if (isset($_GET['filter']) && isset($_POST['filter']) && $_GET['filter'] != $_POST['filter']) { $iOffsetVerdadero = 0; } /* Para ubicarse en la página, se obtiene la región 5 páginas estimadas hacia delante y 5 páginas estimadas hacia atrás desde el offset indicado. */ $inicioRango = $iOffsetVerdadero - 5 * $iEstimadoBytesPagina; if ($inicioRango < 0) { $inicioRango = 0; } $arrResult = $pAsteriskLogs->ObtainAsteriskLogs(10 * $iEstimadoBytesPagina, $inicioRango, $field_pattern); /* Localizar la línea del offset verdadero, así como los offsets de las páginas previa y siguiente */ for ($iPos = 0; $iPos < count($arrResult); $iPos++) { if ($arrResult[$iPos]['offset'] >= $iOffsetVerdadero) { break; } } $iPosPrevio = $iPos - $iNumLineasPorPagina; $iPosSiguiente = $iPos + $iNumLineasPorPagina; if ($iPosPrevio < 0) { $iPosPrevio = 0; } if ($iPosSiguiente > count($arrResult) - 1) { $iPosSiguiente = count($arrResult) - 1; } $iOffsetPrevio = $arrResult[$iPosPrevio]['offset']; $iOffsetSiguiente = $arrResult[$iPosSiguiente]['offset']; $limit = $iNumLineasPorPagina; $total = (int) ($totalBytes / 128); $oGrid->setLimit($limit); $oGrid->setTotal($total); $offset = $iOffsetVerdadero; $nav = getParameter('nav'); if ($nav) { switch ($nav) { case 'start': $offset = 0; break; case 'end': /* Caso especial: se debe tomar la última sección del log */ $inicioRango = $totalBytes - 5 * $iEstimadoBytesPagina; if ($inicioRango < 0) { $inicioRango = 0; } $arrResult = $pAsteriskLogs->ObtainAsteriskLogs(10 * $iEstimadoBytesPagina, $inicioRango, $field_pattern); if (count($arrResult) <= $iNumLineasPorPagina) { $offset = $arrResult[0]['offset']; } else { $offset = $arrResult[count($arrResult) - $iNumLineasPorPagina]['offset']; } break; case 'next': $offset = $iOffsetSiguiente; break; case 'previous': $offset = $iOffsetPrevio; break; case 'bypage': $numPage = $limit == 0 ? 0 : ceil($total / $limit); $page = getParameter("page"); if (preg_match("/[0-9]+/", $page) == 0) { // no es un número $page = 1; } if ($page > $numPage) { // se está solicitando una pagina mayor a las que existen $page = $numPage; } $start = ($page - 1) * $limit + 1 - $limit; if ($start + $limit <= 1) { $offset = 0; break; } $inicioBusqueda = $page * $iEstimadoBytesPagina - $iEstimadoBytesPagina; $arrResult = $pAsteriskLogs->ObtainAsteriskLogs(10 * $iEstimadoBytesPagina, $inicioBusqueda, $field_pattern); $offset = $arrResult[0]['offset']; $oGrid->setOffsetValue($offset); break; } } // Buscar la cadena de texto indicada, y modificar offset si se encuentra if (isset($_POST['searchnext']) && $busqueda != '') { $pAsteriskLogs->astLog->posicionarMensaje($field_pattern, $offset); $posBusqueda = $pAsteriskLogs->astLog->buscarTextoMensaje($busqueda); if (!is_null($posBusqueda)) { $offset = $posBusqueda[1]; $smarty->assign('SEARCHNEXT', $arrLang['Search next']); $_POST['ultima_busqueda'] = $busqueda; $_POST['ultimo_offset'] = $offset; // Si el offset anterior indicado es idéntico al offset recién encontrado // y la cadena de búsqueda es también idéntica, se asume que se ha // pedido una búsqueda de la siguiente ocurrencia. if (!is_null($sUltimaBusqueda) && !is_null($iUltimoOffset) && $offset == $iUltimoOffset && $sUltimaBusqueda == $busqueda) { $pAsteriskLogs->astLog->posicionarMensaje($field_pattern, $offset); $pAsteriskLogs->astLog->siguienteMensaje(); // Sólo para ignorar primera ocurrencia $posBusqueda = $pAsteriskLogs->astLog->buscarTextoMensaje($busqueda); if (!is_null($posBusqueda)) { $offset = $posBusqueda[1]; $_POST['ultimo_offset'] = $offset; } } } else { } } $url = array('menu' => $module_name, 'filter' => $field_pattern, 'offset' => $offset, 'busqueda' => $busqueda, 'ultima_busqueda' => isset($_POST['ultima_busqueda']) ? $_POST['ultima_busqueda'] : '', 'ultimo_offset' => isset($_POST['ultimo_offset']) ? $_POST['ultimo_offset'] : ''); //Fin Paginacion $arrResult = $pAsteriskLogs->ObtainAsteriskLogs(10 * $iEstimadoBytesPagina, $offset, $field_pattern, $busqueda != '' ? $busqueda : NULL); $arrResult = array_slice($arrResult, 0, $iNumLineasPorPagina); $posLog = $pAsteriskLogs->astLog->obtenerPosicionMensaje(); $arrData = null; if (is_array($arrResult) && $totalBytes > 0) { foreach ($arrResult as $key => $value) { $arrTmp[0] = $value['fecha']; $arrTmp[1] = $value['tipo']; $arrTmp[2] = $value['origen']; $arrTmp[3] = $value['linea']; $arrData[] = $arrTmp; } } $_POST['offset'] = $offset; //$defaultEnd=end($comboFechas); $oGrid->addFilterControl(_tr("Filter applied: ") . _tr("Date") . " = " . $_POST['filter'], $_POST, array('filter' => $listaFechas[count($listaFechas) - 1]), true); $oGrid->addFilterControl(_tr("Filter applied: ") . _tr('Search string') . " = " . $busqueda, $_POST, array('busqueda' => "")); $htmlFilter = $oFilterForm->fetchForm("{$local_templates_dir}/filter.tpl", "", $_POST); $oGrid->showFilter(trim($htmlFilter)); $arrGrid = array("title" => $arrLang["Asterisk Logs"], "url" => $url, "icon" => "/modules/{$module_name}/images/reports_asterisk_logs.png", "width" => "99%", "start" => $totalBytes == 0 ? 0 : 1 + (int) ($offset / 128), "end" => (int) ($offset / 128) + $iNumLineasPorPagina, "total" => (int) ($totalBytes / 128), "columns" => array(0 => array("name" => $arrLang['Date'], "property1" => ""), 1 => array("name" => $arrLang['Type'], "property1" => ""), 2 => array("name" => $arrLang['Source'], "property1" => ""), 3 => array("name" => $arrLang['Message'], "property1" => ""))); $contenidoModulo = $oGrid->fetchGrid($arrGrid, $arrData, $arrLang); /*$current_page=getParameter("page"); print($current_page); $contenidoModulo .= "<script type='text/javascript'> var offset = ".$offset."; var limit = ".$limit."; var current_page = ".$current_page."; alert(current_page); var start = current_page * limit; page = Math.floor(start / limit); $('#pageup').val(page); $('#pagedown').val(page); </script>";*/ return $contenidoModulo; }
function report_AccessAudit($smarty, $module_name, $local_templates_dir) { global $arrPermission; $pAccessLogs = new paloSantoAccessaudit(); $listaFechas = $pAccessLogs->astLog->listarFechas(); $arrFormElements = createFieldFilter($listaFechas); $field_pattern = getParameter("filter"); $busqueda = getParameter('busqueda'); $sUltimaBusqueda = getParameter('ultima_busqueda'); $iUltimoOffset = getParameter('ultimo_offset'); if (is_null($busqueda) || trim($busqueda) == '') { $busqueda = ''; } if ($busqueda != '') { $_POST['busqueda'] = $busqueda; } /* Última búsqueda, si existe */ if (is_null($sUltimaBusqueda) || $sUltimaBusqueda == '' || is_null($iUltimoOffset) || !ereg('^[[:digit:]]+$', $iUltimoOffset)) { $sUltimaBusqueda = NULL; $iUltimoOffset = NULL; } if (!ereg($arrFormElements['filter']['VALIDATION_EXTRA_PARAM'], $field_pattern)) { $field_pattern = $listaFechas[count($listaFechas) - 1]; } $_POST['filter'] = $field_pattern; $oFilterForm = new paloForm($smarty, $arrFormElements); $oGrid = new paloSantoGrid($smarty); $oGrid->setTitle(_tr("Audit")); $oGrid->setIcon("web/apps/{$module_name}/images/security_audit.png"); $oGrid->pagingShow(true); // show paging section. if (in_array("export", $arrPermission)) { $oGrid->enableExport(); } // enable export. $oGrid->setNameFile_Export(_tr("Access audit")); if (in_array("export", $arrPermission)) { $isExport = $oGrid->isExportAction(); } else { $isExport = false; } $total_datos = $pAccessLogs->ObtainNumAccessLogs($field_pattern); $totalBytes = $total_datos[0]; $iNumLineasPorPagina = 30; $iEstimadoBytesPagina = $iNumLineasPorPagina * 128; $iOffsetVerdadero = getParameter('offset'); if (is_null($iOffsetVerdadero) || !ereg('^[[:digit:]]+$', $iOffsetVerdadero)) { $iOffsetVerdadero = 0; } if ($iOffsetVerdadero >= $totalBytes) { $iOffsetVerdadero = 0; } if (isset($_GET['filter']) && isset($_POST['filter']) && $_GET['filter'] != $_POST['filter']) { $iOffsetVerdadero = 0; } /* Para ubicarse en la página, se obtiene la región 5 páginas estimadas hacia delante y 5 páginas estimadas hacia atrás desde el offset indicado. */ $inicioRango = $iOffsetVerdadero - 5 * $iEstimadoBytesPagina; if ($inicioRango < 0) { $inicioRango = 0; } if ($isExport) { $arrResult = $pAccessLogs->ObtainAccessLogs($totalBytes, 0, $field_pattern, NULL, $isExport); } else { $arrResult = $pAccessLogs->ObtainAccessLogs(10 * $iEstimadoBytesPagina, $inicioRango, $field_pattern, NULL, $isExport); } /* Localizar la línea del offset verdadero, así como los offsets de las páginas previa y siguiente */ for ($iPos = 0; $iPos < count($arrResult); $iPos++) { if ($arrResult[$iPos]['offset'] >= $iOffsetVerdadero) { break; } } $iPosPrevio = $iPos - $iNumLineasPorPagina; $iPosSiguiente = $iPos + $iNumLineasPorPagina; if ($iPosPrevio < 0) { $iPosPrevio = 0; } if ($iPosSiguiente > count($arrResult) - 1) { $iPosSiguiente = count($arrResult) - 1; } $iOffsetPrevio = $arrResult[$iPosPrevio]['offset']; $iOffsetSiguiente = $arrResult[$iPosSiguiente]['offset']; $limit = 30; $total = (int) ($totalBytes / 128); $offset = $iOffsetVerdadero; $nav = getParameter('nav'); if ($nav) { switch ($nav) { case 'start': $offset = 0; break; case 'end': /* Caso especial: se debe tomar la última sección del log */ $inicioRango = $totalBytes - 5 * $iEstimadoBytesPagina; if ($inicioRango < 0) { $inicioRango = 0; } if ($isExport) { $arrResult = $pAccessLogs->ObtainAccessLogs($totalBytes, 0, $field_pattern, $busqueda != '' ? $busqueda : NULL, $isExport); } else { $arrResult = $pAccessLogs->ObtainAccessLogs(10 * $iEstimadoBytesPagina, $inicioRango, $field_pattern, NULL, $isExport); } if (count($arrResult) <= $iNumLineasPorPagina) { $offset = $arrResult[0]['offset']; } else { $offset = $arrResult[count($arrResult) - $iNumLineasPorPagina]['offset']; } break; case 'next': $offset = $iOffsetSiguiente; break; case 'previous': $offset = $iOffsetPrevio; break; case 'bypage': $numPage = $limit == 0 ? 0 : ceil($total / $limit); $page = getParameter("page"); if (preg_match("/[0-9]+/", $page) == 0) { // no es un número $page = 1; } if ($page > $numPage) { // se está solicitando una pagina mayor a las que existen $page = $numPage; } $start = ($page - 1) * $limit + 1 - $limit; //$accion = "next"; if ($start + $limit <= 1) { break; } /*$inicioRango = $page * $iEstimadoBytesPagina; $arrResult =$pAccessLogs->ObtainAccessLogs(10 * $iEstimadoBytesPagina, $inicioRango, $field_pattern, NULL, $isExport); $offset = $arrResult[0]['offset']; $oGrid->setOffsetValue($offset); $oGrid->setEnd(((int)($offset / 128) + $iNumLineasPorPagina) <= $oGrid->getTotal() ? (int)($offset / 128) + $iNumLineasPorPagina : $oGrid->getTotal()); $oGrid->setStart(($oGrid->getTotal()==0) ? 0 : (1 + (int)($offset / 128)));*/ $inicioBusqueda = $page * $iEstimadoBytesPagina - $iEstimadoBytesPagina; $arrResult = $pAccessLogs->ObtainAccessLogs(10 * $iEstimadoBytesPagina, $inicioBusqueda, $field_pattern, NULL, $isExport); $offset = $arrResult[0]['offset']; $oGrid->setOffsetValue($offset); break; } } // Buscar la cadena de texto indicada, y modificar offset si se encuentra $smarty->assign("SEARCHNEXT", _tr('Search')); if (isset($_POST['searchnext']) && $busqueda != '') { $pAccessLogs->astLog->posicionarMensaje($field_pattern, $offset); $posBusqueda = $pAccessLogs->astLog->buscarTextoMensaje($busqueda); if (!is_null($posBusqueda)) { $offset = $posBusqueda[1]; $smarty->assign('SEARCHNEXT', _tr('Search next')); $_POST['ultima_busqueda'] = $busqueda; $_POST['ultimo_offset'] = $offset; // Si el offset anterior indicado es idéntico al offset recién encontrado // y la cadena de búsqueda es también idéntica, se asume que se ha // pedido una búsqueda de la siguiente ocurrencia. if (!is_null($sUltimaBusqueda) && !is_null($iUltimoOffset) && $offset == $iUltimoOffset && $sUltimaBusqueda == $busqueda) { $pAccessLogs->astLog->posicionarMensaje($field_pattern, $offset); $pAccessLogs->astLog->siguienteMensaje(); // Sólo para ignorar primera ocurrencia $posBusqueda = $pAccessLogs->astLog->buscarTextoMensaje($busqueda); if (!is_null($posBusqueda)) { $offset = $posBusqueda[1]; $_POST['ultimo_offset'] = $offset; } } } else { } } $url = array('menu' => $module_name, 'filter' => $field_pattern, 'offset' => $offset, 'busqueda' => $busqueda, 'ultima_busqueda' => isset($_POST['ultima_busqueda']) ? $_POST['ultima_busqueda'] : '', 'ultimo_offset' => isset($_POST['ultimo_offset']) ? $_POST['ultimo_offset'] : ''); $oGrid->setURL($url); //Fin Paginacion if ($isExport) { $arrResult = $pAccessLogs->ObtainAccessLogs($totalBytes, 0, $field_pattern, $busqueda != '' ? $busqueda : NULL, $isExport); } else { $arrResult = $pAccessLogs->ObtainAccessLogs(10 * $iEstimadoBytesPagina, $offset, $field_pattern, $busqueda != '' ? $busqueda : NULL, $isExport); } if (!$isExport) { $arrResult = array_slice($arrResult, 0, $iNumLineasPorPagina); } $arrData = null; if (is_array($arrResult) && $totalBytes > 0) { foreach ($arrResult as $key => $value) { $arrTmp[0] = $value['fecha']; $arrTmp[1] = $value['tipo']; $arrTmp[2] = $value['origen']; $arrTmp[3] = $value['linea']; $arrData[] = $arrTmp; } } $arrColumns = array(_tr("Date"), _tr("Type"), _tr("User"), _tr("Message")); $oGrid->setColumns($arrColumns); $oGrid->setData($arrData); $oGrid->setStart($totalBytes == 0 ? 0 : 1 + (int) ($offset / 128)); $t = (int) ($totalBytes / 128); $e = (int) ($offset / 128) + $iNumLineasPorPagina; $e = $t <= $e ? $t : $e; $oGrid->setEnd($e + 1); $oGrid->setTotal($t + 1); $oGrid->setLimit(30); $_POST['offset'] = $offset; $smarty->assign("SHOW", _tr("Show")); $oGrid->addFilterControl(_tr("Filter applied: ") . _tr("Date") . " = " . $_POST['filter'], $_POST, array('filter' => $listaFechas[count($listaFechas) - 1]), true); $oGrid->addFilterControl(_tr("Filter applied: ") . _tr('Search string') . " = " . $busqueda, $_POST, array('busqueda' => "")); $htmlFilter = $oFilterForm->fetchForm("{$local_templates_dir}/filter.tpl", "", $_POST); $oGrid->showFilter(trim($htmlFilter)); return $oGrid->fetchGrid(); }