function _moduleContent(&$smarty, $module_name) { global $arrConf; global $arrLang; require_once "modules/agent_console/libs/elastix2.lib.php"; require_once "modules/agent_console/libs/paloSantoConsola.class.php"; require_once "modules/agent_console/getinfo.php"; require_once "modules/agent_console/libs/JSON.php"; require_once "modules/{$module_name}/configs/default.conf.php"; require_once "modules/{$module_name}/libs/queue_waiting2.class.php"; // Directorio de este módulo $sDirScript = dirname($_SERVER['SCRIPT_FILENAME']); // Se fusiona la configuración del módulo con la configuración global $arrConf = array_merge($arrConf, $arrConfModule); /* Se pide el archivo de inglés, que se elige a menos que el sistema indique otro idioma a usar. Así se dispone al menos de la traducción al inglés si el idioma elegido carece de la cadena. */ load_language_module($module_name); // Asignación de variables comunes y directorios de plantillas $sDirPlantillas = isset($arrConf['templates_dir']) ? $arrConf['templates_dir'] : 'themes'; $sDirLocalPlantillas = "{$sDirScript}/modules/{$module_name}/" . $sDirPlantillas . '/' . $arrConf['theme']; $smarty->assign("MODULE_NAME", $module_name); // Incluir todas las bibliotecas y CSS necesarios generarRutaJQueryModulo($smarty, $module_name); $sAction = ''; $sContenido = ''; $sAction = getParameter('action'); $oPaloConsola = new PaloSantoConsola(); switch ($sAction) { case 'checkStatus': $sContenido = agent_monitoring_checkStatus($module_name, $smarty, $sDirLocalPlantillas, $oPaloConsola); break; case 'queueWaitingStatus': $sContenido = queue_waiting_checkStatus($module_name, $smarty, $sDirLocalPlantillas, $oPaloConsola); break; case 'show_call_history': $sContenido = refreshCallHistory(); break; case "viewNote": $sContenido = viewNote(); break; case "viewDelivery": $sContenido = viewDelivery(); break; default: $sContenido = agent_monitoring_HTML($module_name, $smarty, $sDirLocalPlantillas, $oPaloConsola); break; } $oPaloConsola->desconectarTodo(); return $sContenido; }
function _moduleContent(&$smarty, $module_name) { //include module files include_once "modules/{$module_name}/configs/default.conf.php"; include_once "modules/{$module_name}/libs/paloSantoCallsDetail.class.php"; include_once "modules/agent_console/getinfo.php"; global $arrConf; load_language_module($module_name); //folder path for custom templates $base_dir = dirname($_SERVER['SCRIPT_FILENAME']); $templates_dir = isset($arrConfig['templates_dir']) ? $arrConfig['templates_dir'] : 'themes'; $local_templates_dir = "{$base_dir}/modules/{$module_name}/" . $templates_dir . '/' . $arrConf['theme']; // added by Tri Do $sAction = getParameter('action'); switch ($sAction) { case 'viewNote': return viewNote(); break; case 'viewDelivery': return view_delivery(); break; default: break; } // Cadenas estáticas de Smarty $smarty->assign(array("Filter" => _tr('Filter'), "SHOW" => _tr("Show"))); $bElastixNuevo = method_exists('paloSantoGrid', 'setURL'); // Variables iniciales para posición de grid $offset = 0; $limit = 50; $total = 0; // Para poder consultar las colas activas $pConfig = new paloConfig("/etc", "amportal.conf", "=", "[[:space:]]*=[[:space:]]*"); $ampconfig = $pConfig->leer_configuracion(false); $ampdsn = $ampconfig['AMPDBENGINE']['valor'] . "://" . $ampconfig['AMPDBUSER']['valor'] . ":" . $ampconfig['AMPDBPASS']['valor'] . "@" . $ampconfig['AMPDBHOST']['valor'] . "/asterisk"; $oQueue = new paloQueue($ampdsn); $listaColas = $oQueue->getQueue(); if (!is_array($listaColas)) { $smarty->assign("mb_title", _tr("Error when connecting to database")); $smarty->assign("mb_message", $oQueue->errMsg); } // Para poder consultar los agentes de campañas $pDB = new paloDB($cadena_dsn); $oCallsDetail = new paloSantoCallsDetail($pDB); $listaAgentes = $oCallsDetail->getAgents(); // Para llenar el select de agentes $urlVars = array('menu' => $module_name); $arrFormElements = createFieldFilter($listaAgentes, $listaColas); $oFilterForm = new paloForm($smarty, $arrFormElements); // Validar y aplicar las variables de filtro $paramLista = NULL; $paramFiltro = array(); foreach (array('date_start', 'date_end', 'calltype', 'agent', 'queue', 'phone') as $k) { $paramFiltro[$k] = getParameter($k); } if (!isset($paramFiltro['date_start'])) { $paramFiltro['date_start'] = date("d M Y"); } if (!isset($paramFiltro['date_end'])) { $paramFiltro['date_end'] = date("d M Y"); } if (!$oFilterForm->validateForm($paramFiltro)) { // Hay un error al validar las variables del filtro $smarty->assign("mb_title", _tr("Validation Error")); $arrErrores = $oFilterForm->arrErroresValidacion; $strErrorMsg = "<b>" . _tr('The following fields contain errors') . ":</b><br>"; $strErrorMsg = implode(', ', array_keys($arrErrores)); $smarty->assign("mb_message", $strErrorMsg); } else { $urlVars = array_merge($urlVars, $paramFiltro); $paramLista = $paramFiltro; $paramLista['date_start'] = translateDate($paramFiltro['date_start']) . " 00:00:00"; $paramLista['date_end'] = translateDate($paramFiltro['date_end']) . " 23:59:59"; } $htmlFilter = $oFilterForm->fetchForm("{$local_templates_dir}/filter.tpl", "", $paramFiltro); // Inicio de objeto grilla y asignación de filtro $oGrid = new paloSantoGrid($smarty); $oGrid->enableExport(); // enable export. $oGrid->showFilter($htmlFilter); $bExportando = $bElastixNuevo ? $oGrid->isExportAction() : isset($_GET['exportcsv']) && $_GET['exportcsv'] == 'yes' || isset($_GET['exportspreadsheet']) && $_GET['exportspreadsheet'] == 'yes' || isset($_GET['exportpdf']) && $_GET['exportpdf'] == 'yes'; // Ejecutar la consulta con las variables ya validadas $arrData = array(); $total = 0; if (is_array($paramLista)) { $total = $oCallsDetail->contarDetalleLlamadas($paramLista); if (is_null($total)) { $smarty->assign("mb_title", _tr("Error when connecting to database")); $smarty->assign("mb_message", $oCallsDetail->errMsg); $total = 0; } else { // Habilitar la exportación de todo el contenido consultado if ($bExportando) { $limit = $total; } // Calcular el offset de la petición de registros if ($bElastixNuevo) { $oGrid->setLimit($limit); $oGrid->setTotal($total); $offset = $oGrid->calculateOffset(); } else { // Si se quiere avanzar a la sgte. pagina if (isset($_GET['nav']) && $_GET['nav'] == "end") { // Mejorar el sgte. bloque. if ($total % $limit == 0) { $offset = $total - $limit; } else { $offset = $total - $total % $limit; } } // Si se quiere avanzar a la sgte. pagina if (isset($_GET['nav']) && $_GET['nav'] == "next") { $offset = $_GET['start'] + $limit - 1; } // Si se quiere retroceder if (isset($_GET['nav']) && $_GET['nav'] == "previous") { $offset = $_GET['start'] - $limit - 1; } } // Ejecutar la consulta de los datos en el offset indicado $recordset = $oCallsDetail->leerDetalleLlamadas($paramLista, $limit, $offset); // add STT for ($i = 0; $i < count($recordset); $i++) { $recordset[$i]['stt'] = $i + 1; } if (!is_array($recordset)) { $smarty->assign("mb_title", _tr("Error when connecting to database")); $smarty->assign("mb_message", $oCallsDetail->errMsg); $total = 0; } else { function _calls_detail_map_recordset($cdr) { $mapaEstados = array('abandonada' => 'Bỏ nhỡ', 'Abandoned' => 'Bỏ nhỡ', 'terminada' => 'Đã nghe', 'Success' => 'Đã nghe', 'fin-monitoreo' => _tr('End Monitor'), 'Failure' => _tr('Failure'), 'NoAnswer' => _tr('NoAnswer'), 'OnQueue' => _tr('OnQueue'), 'Placing' => _tr('Placing'), 'Ringing' => _tr('Ringing'), 'ShortCall' => _tr('ShortCall'), 'activa' => 'Đang gọi'); return array($cdr['stt'], $cdr[0], htmlentities($cdr[1], ENT_COMPAT, "UTF-8"), substr($cdr[2], 0, 10), substr($cdr[2], 11, 8), substr($cdr[3], 0, 10), substr($cdr[3], 11, 8), is_null($cdr[4]) ? '-' : formatoSegundos($cdr[4]), is_null($cdr[5]) ? '-' : formatoSegundos($cdr[5]), $cdr[6], $cdr[8], $cdr[9], isset($mapaEstados[$cdr[10]]) ? $mapaEstados[$cdr[10]] : _tr($cdr[10]), is_null($cdr[12]) || trim($cdr[12] == '') ? '' : '<a href="javascript:void(0)" onclick="view_note(\'' . $cdr[11] . '\')">Xem</a>'); } $arrData = array_map('_calls_detail_map_recordset', $recordset); } } } $arrColumnas = array('STT', 'Số Agent', 'Nhân viên', _tr("Start Date"), _tr("Start Time"), _tr("End Date"), _tr("End Time"), "Thời lượng", _tr("Thời gian chờ"), _tr("Queue"), _tr("Số điện thoại"), _tr("Chuyển máy"), _tr("Status"), 'Nội dung'); if ($bElastixNuevo) { $oGrid->setURL(construirURL($urlVars, array("nav", "start"))); $oGrid->setData($arrData); $oGrid->setColumns($arrColumnas); $oGrid->setTitle('Chi tiết cuộc gọi Call Center'); $oGrid->pagingShow(true); $oGrid->setNameFile_Export(_tr("Calls Detail")); return $oGrid->fetchGrid(); } else { global $arrLang; $url = construirURL($urlVars, array("nav", "start")); function _map_name($s) { return array('name' => $s); } $arrGrid = array("title" => _tr("Calls Detail"), "url" => $url, "icon" => "images/user.png", "width" => "99%", "start" => $total == 0 ? 0 : $offset + 1, "end" => $offset + $limit <= $total ? $offset + $limit : $total, "total" => $total, "columns" => array_map('_map_name', $arrColumnas)); if (isset($_GET['exportpdf']) && $_GET['exportpdf'] == 'yes' && method_exists($oGrid, 'fetchGridPDF')) { return $oGrid->fetchGridPDF($arrGrid, $arrData); } if (isset($_GET['exportspreadsheet']) && $_GET['exportspreadsheet'] == 'yes' && method_exists($oGrid, 'fetchGridXLS')) { return $oGrid->fetchGridXLS($arrGrid, $arrData); } if ($bExportando) { header("Cache-Control: private"); header("Pragma: cache"); // Se requiere para HTTPS bajo IE6 header('Content-disposition: inline; filename="calls_detail.csv"'); header("Content-Type: text/csv; charset=UTF-8"); } if ($bExportando) { return $oGrid->fetchGridCSV($arrGrid, $arrData); } $sContenido = $oGrid->fetchGrid($arrGrid, $arrData, $arrLang); if (strpos($sContenido, '<form') === FALSE) { $sContenido = "<form method=\"POST\" style=\"margin-bottom:0;\" action=\"{$url}\">{$sContenido}</form>"; } return $sContenido; } }
function manejarSesionActiva($module_name, &$smarty, $sDirLocalPlantillas) { $sAction = ''; $sContenido = ''; $sAction = getParameter('action'); if (!in_array($sAction, array('', 'checkStatus', 'agentLogout', 'hangup', 'break', 'unbreak', 'transfer', 'confirm_contact', 'schedule', 'saveforms', 'call2phone', 'addCustomer', 'addNote', 'addDelivery', 'viewDelivery', 'addExternalNote', 'viewNote', 'show_call_history', 'update_customer', 'callOut', 'checkDeliveryPermission', 'viewCustomer', 'disableDelivery', 'enableDelivery', 'changePassword'))) { $sAction = ''; } // Se verifica si el agente sigue logoneado en la cola de Asterisk $sAgente = $_SESSION['callcenter']['agente']; $sExtension = $_SESSION['callcenter']['extension']; $oPaloConsola = new PaloSantoConsola($sAgente); $estado = $oPaloConsola->estadoAgenteLogoneado($sExtension); if ($estado['estadofinal'] != 'logged-in') { // Se marca el final de la sesión del agente en las tablas de auditoría $oPaloConsola->logoutAgente(); $_SESSION['callcenter'] = generarEstadoInicial(); } switch ($sAction) { case 'checkStatus': $sContenido = manejarSesionActiva_checkStatus($module_name, $smarty, $sDirLocalPlantillas, $oPaloConsola, $estado); break; case 'hangup': $sContenido = manejarSesionActiva_hangup($oPaloConsola); break; case 'agentLogout': $sContenido = manejarSesionActiva_agentLogout($oPaloConsola); break; case 'break': $sContenido = manejarSesionActiva_agentBreak($oPaloConsola); break; case 'unbreak': $sContenido = manejarSesionActiva_agentUnBreak($oPaloConsola); break; case 'transfer': //$sContenido = manejarSesionActiva_agentTransfer($oPaloConsola); $sContenido = agentTransfer($oPaloConsola); break; case 'viewDelivery': $sContenido = view_delivery(); break; case 'viewCustomer': $sContenido = view_customer(); break; case 'confirm_contact': $sContenido = manejarSesionActiva_confirmContact($oPaloConsola, $estado); break; case 'schedule': $sContenido = manejarSesionActiva_scheduleCall($oPaloConsola); break; case 'saveforms': $sContenido = manejarSesionActiva_saveForms($oPaloConsola, $estado); break; case 'call2phone': $sContenido = call2phone(); break; case 'addCustomer': $sContenido = addCustomer(); break; case 'addNote': $sContenido = addNote(); break; case 'addExternalNote': $sContenido = addExternalNote(); break; case 'viewNote': $sContenido = viewNote(); break; case 'addDelivery': $sContenido = addDelivery(); break; case 'checkDeliveryPermission': $sContenido = checkDeliveryPermission(); break; case 'disableDelivery': $sContenido = disableDelivery(); break; case 'enableDelivery': $sContenido = enableDelivery(); break; case 'changePassword': $sContenido = changePassword(); break; case 'update_customer': $sContenido = update_customer_HTML($sDirLocalPlantillas); break; case 'callOut': $sContenido = callOut_HTML($sDirLocalPlantillas); break; case 'show_call_history': $sContenido = refreshCallHistory(); break; default: if ($estado['estadofinal'] != 'logged-in') { // Para agente no logoneado, se redirecciona a la página de login Header('Location: ?menu=' . $module_name); $sContenido = ''; } else { $sContenido = manejarSesionActiva_HTML($module_name, $smarty, $sDirLocalPlantillas, $oPaloConsola, $estado); } break; } $oPaloConsola->desconectarTodo(); return $sContenido; }
function _moduleContent(&$smarty, $module_name) { //include module files include_once "modules/{$module_name}/configs/default.conf.php"; include_once "modules/{$module_name}/libs/paloSantoMonitoring.class.php"; include_once "libs/paloSantoACL.class.php"; require_once "modules/{$module_name}/libs/JSON.php"; require_once "modules/agent_console/getinfo.php"; //include file language agree to elastix configuration //if file language not exists, then include language by default (en) $lang = get_language(); $base_dir = dirname($_SERVER['SCRIPT_FILENAME']); // Include language file for EN, then for local, and merge the two. include_once "modules/{$module_name}/lang/en.lang"; $lang_file = "modules/{$module_name}/lang/{$lang}.lang"; if (file_exists("{$base_dir}/{$lang_file}")) { $arrLanEN = $arrLangModule; include_once $lang_file; $arrLangModule = array_merge($arrLanEN, $arrLangModule); } //global variables global $arrConf; global $arrConfModule; global $arrLang; global $arrLangModule; $arrConf = array_merge($arrConf, $arrConfModule); $arrLang = array_merge($arrLang, $arrLangModule); //folder path for custom templates $templates_dir = isset($arrConf['templates_dir']) ? $arrConf['templates_dir'] : 'themes'; $local_templates_dir = "{$base_dir}/modules/{$module_name}/" . $templates_dir . '/' . $arrConf['theme']; //conexion resource $arrConf['dsn_conn_database'] = generarDSNSistema('asteriskuser', 'asteriskcdrdb'); $pDB = new paloDB($arrConf['dsn_conn_database']); $pDBACL = new paloDB($arrConf['elastix_dsn']['acl']); $pACL = new paloACL($pDBACL); $user = isset($_SESSION['elastix_user']) ? $_SESSION['elastix_user'] : ""; //$extension = $pACL->getUserExtension($user); $extension = '6868'; //$esAdministrador = $pACL->isUserAdministratorGroup($user); $esAdministrador = true; if ($extension == "" || is_null($extension)) { if ($esAdministrador) { $smarty->assign("mb_message", "<b>" . _tr("no_extension") . "</b>"); } else { $smarty->assign("mb_message", "<b>" . _tr("contact_admin") . "</b>"); return ""; } } //actions $action = getAction(); $content = ""; switch ($action) { case 'delete': //$content = deleteRecord($smarty, $module_name, $local_templates_dir, $pDB, $pACL, $arrConf, $user, $extension, $esAdministrador); break; case 'download': $content = downloadFile($smarty, $module_name, $local_templates_dir, $pDB, $pACL, $arrConf, $user, $extension, $esAdministrador); break; case "display_record": $content = display_record($smarty, $module_name, $local_templates_dir, $pDB, $pACL, $arrConf, $user, $extension, $esAdministrador); break; case "viewNote": $content = viewNote(); break; case "viewDelivery": $content = viewDelivery(); break; default: $content = reportMonitoring($smarty, $module_name, $local_templates_dir, $pDB, $pACL, $arrConf, $user, $extension, $esAdministrador); break; } return $content; }