Browse Source

API Meet e Sala de videoconferencia

dev
Lucas Awade 8 months ago
parent
commit
64a11f06e6
  1. 109
      app/controllers/MeetController.php
  2. 10
      app/models/Meet.php
  3. 10
      app/models/MeetPeople.php
  4. 18
      app/traits/MeetRequest.php
  5. 124
      cadastros/meeting/cadMeet.php
  6. 69
      cadastros/meeting/meetings.php
  7. 5
      checaSessao.php
  8. 17
      configGeral.php
  9. BIN
      imgSite/EVILCORP.JPG
  10. 15
      include/util/funcoesApl.php
  11. 6
      include/util/funcoesInternas.php
  12. 64
      include/util/funcoesLicenca.php
  13. 34
      projeto/base/sql/versao-1.9.0.sql
  14. 7
      public/api.php
  15. 2
      scriptApl/jitsi_api.js
  16. 2
      start.php
  17. 64
      templates/cadastros/meeting/meetings.tpl
  18. 80
      templates/configChatAgente.tpl
  19. 2
      templates/configSys.tpl

109
app/controllers/MeetController.php

@ -0,0 +1,109 @@
<?php
namespace app\controllers;
use app\models\Meet;
use app\models\MeetPeople;
use app\models\Queue;
use app\traits\MeetRequest;
use app\traits\Validate;
use Slim\Routing\RouteCollectorProxy;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Exception;
class MeetController
{
use Validate, MeetRequest;
static function route()
{
return function (RouteCollectorProxy $group) {
$group->post('/joinmeet', [self::class, 'joinMeet']);
$group->post('/participantleft', [self::class, 'participantLeft']);
$group->post('/conferenceleft', [self::class, 'conferenceLeft']);
};
}
function joinMeet(Request $request, Response $response, array $args)
{
try {
$this->serverRequest();
$body = json_decode($request->getBody()->getContents(), true);
$data = [];
$dados['org_id'] = $body['org_id'];
$dados['meet_id'] = $body['data']['roomName'];
$dados['nome'] = $body['data']['roomName'];
$dados['token'] = md5($body['data']['roomName']);
$dados['org_id'] = 1;
$people = [];
$people['nome'] = $body['data']['displayName'];
$people['meet_id'] = $body['data']['roomName'];
$people['people_id'] = $body['data']['id'];
$m = Meet::find(['meet_id' => $body['data']['roomName']]);
$meet = null;
if (!$m) {
$meet = Meet::create($dados);
}
$p = MeetPeople::create($people);
if ($data) {
$response->getBody()->write(json_encode(['status' => true, 'data' => ['meet' => ['created' => $meet ?? 'OK'], 'user' => ['join' => $p ?? 'yes']]]));
} else {
$response->getBody()->write(json_encode(['status' => false, 'data' => $data]));
}
} catch (Exception $e) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]]));
}
return $response;
}
function conferenceLeft(Request $request, Response $response, array $args)
{
try {
$this->serverRequest();
$body = json_decode($request->getBody()->getContents(), true);
$mp = Meet::find(['nome' => $body['roomName']]);
$meet = null;
if ($mp) {
$meet = Meet::delete(['id' => $mp->id]);
MeetPeople::delete(['meet_id' => $body['roomName']]);
}
if ($meet) {
$response->getBody()->write(json_encode(['status' => true, 'data' => ['meet' => ['deleted' => $meet ?? 'OK']]]));
} else {
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nao foi possivel exluir participant']]));
}
} catch (Exception $e) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]]));
}
return $response;
}
function participantLeft(Request $request, Response $response, array $args)
{
try {
$this->serverRequest();
$body = json_decode($request->getBody()->getContents(), true);
$mp = MeetPeople::find(['people_id' => $body['id']]);
$meet = null;
if ($mp) {
$meet = MeetPeople::delete(['people_id' => $body['id']]);
}
if ($meet) {
$response->getBody()->write(json_encode(['status' => true, 'data' => ['meet' => ['created' => $meet ?? 'OK'], 'user' => ['join' => $p ?? 'yes']]]));
} else {
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nao foi possivel exluir participant']]));
}
} catch (Exception $e) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]]));
}
return $response;
}
}

10
app/models/Meet.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Meet extends Repository
{
protected static $table = 'pbx_meet';
}

10
app/models/MeetPeople.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class MeetPeople extends Repository
{
protected static $table = 'pbx_meet_people';
}

18
app/traits/MeetRequest.php

@ -0,0 +1,18 @@
<?php
namespace app\traits;
use Exception;
trait MeetRequest
{
public function serverRequest()
{
if (
!isset($_SERVER['HTTP_ORIGIN']) &&
(strpos($_SERVER['HTTP_ORIGIN'], 'localhost') === false || strpos($_SERVER['HTTP_ORIGIN'], '127.0.0.1') === false)
) {
throw new Exception('Request nao permitida!');
}
}
}

124
cadastros/meeting/cadMeet.php

@ -0,0 +1,124 @@
<?php
require_once("util/constantes.php");
$tpLayout = 1;
$token = isset($_GET["t"]) ? $_GET["t"] : null;
$error = false;
try {
$org_id = GetOrganizacao();
if ($token) {
$inf = getInfoMeet($dbcon, $token);
$nome = $inf['meet_id'];
if ($inf) {
setVisitas($inf['meet_id']);
} else {
header('location: index.php');
}
}
} catch (Exception $e) {
$jsStartup[] = $msg = sprintf("alert('%s');", $e->getMessage());
}
function getInfoMeet($dbcon, $token)
{
$query = "SELECT * FROM pbx_meet WHERE token = '$token';";
$result = pg_query($dbcon, $query);
if (!$result) {
throw new Exception("Não foi possível buscar a informação do reunião!");
}
$dados = pg_fetch_assoc($result);
return $dados;
}
function setVisitas($nome)
{
$nomeUser = $_SESSION['SSnomeUser'];
$mat = GetMatricula() ?? 'Unknow';
$name = rawurlencode($nome);
$sql = "SELECT people_id FROM pbx_meet_people WHERE people_id = '$mat' AND meet_id = '$name';";
$res = pg_query($sql);
$resp = pg_fetch_assoc($res);
if (!$resp) {
$query = "INSERT INTO pbx_meet_people (meet_id, nome, people_id) VALUES('$name', '$nomeUser', '$mat');";
pg_query($query);
}
}
$smarty->assign("desabilitaLayout", 1);
?>
<!DOCTYPE html>
<html>
<head>
<title>Simples IP - Teleconferência</title>
<script src="../../scriptApl/jitsi_api.js"></script>
<style>
body {
margin: 0;
top: 0;
bottom: 0;
overflow: hidden;
}
</style>
</head>
<body>
<?php if ($nome) { ?>
<iframe src="<?= "https://192.168.115.88:8443/$nome" ?>" style="border-style: none;width: 100%; height: 100vh;">
<p>Your browser does not support iframes.</p>
</iframe>
<?php } ?>
<?php if (!$nome && !$token) { ?>
<div id="jitsi-container" style="height: 100vh; width: 100%;"></div>
<script>
const domain = localStorage.getItem('meet');
const nameMeet = localStorage.getItem('nameMeet');
const options = {
roomName: nameMeet,
width: '100%',
height: '100%',
parentNode: document.querySelector('#jitsi-container')
};
const api = new JitsiMeetExternalAPI(domain, options);
api.addEventListener('videoConferenceJoined', (event) => {
let dados = {
action: 'ConferenceJoined',
data: event
}
requestWebhook(dados, 'joinmeet');
});
api.addEventListener('videoConferenceLeft', (event) => {
requestWebhook(event, 'conferenceleft');
});
function requestWebhook(meet, endpoint) {
const webhookUrl = 'http://localhost:8080/api/v2/meet/' + endpoint;
fetch(webhookUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(meet)
}).then(response => {
if (!response.ok) {
throw new Error('Erro ao enviar webhook: ' + response.statusText);
}
return response.json();
}).then(data => {
console.log('Webhook enviado com sucesso:', data);
}).catch(error => {
console.error('Erro ao enviar webhook:', error);
});
}
</script>
<?php } ?>
</body>
</html>

69
cadastros/meeting/meetings.php

@ -0,0 +1,69 @@
<?php
$param = '';
$erro = '';
$janW = 500;
$janH = 285;
$tpl = 'cadastros/meeting/meetings.tpl';
$paramPesquisa = isset($_REQUEST['paramPesquisa']) ? $_REQUEST['paramPesquisa'] : '';
$filtro = isset($_REQUEST["paramPesquisa"]) ? trim($_REQUEST["paramPesquisa"]) : '';
$statusAtivo = isset($_REQUEST["status"]) ? $_REQUEST["status"] : 1;
$imgNovo = "<img src=\"images/novo.gif\" width=\"16\" height=\"16\" align=\"absmiddle\" border=\"0\" title=\"Cria nova meet\">";
$imgNovo = "<a href=\"javaScript:NovaJanela('index.php?idProg=373', 'cadMeet', '$janW', '$janH', 'resizable=NO,scrollbars=NO');\">$imgNovo NOVA REUNIÃO</a>";
$id = isset($_GET["id"]) ? $_GET["id"] : '';
$idDelete = isset($_GET["idDelete"]) ? $_GET["idDelete"] : null;
//Complete para buscar parâmetros (no caso multiempresas terá somente 1 que é nome)
$compl = '';
if (isset($_REQUEST['paramPesquisa']) && $_REQUEST['paramPesquisa']) {
$compl = PreparaLike($filtro, true);
$compl = sprintf("AND (a.nome ILIKE %s )", $compl);
}
$statusAtv = $statusAtivo ? "AND status = 1" : "AND status = 0";
$query = "SELECT a.id, a.token, a.meet_id, a.nome, a.status, a.data_reg, count(b.id) as visitas
FROM pbx_meet a
INNER JOIN pbx_meet_people b ON a.meet_id = b.meet_id
WHERE 1 = 1 $compl ";
$query .= " GROUP BY a.id, a.meet_id, a.nome, a.status, a.data_reg";
$params = "&paramPesquisa={$filtro}&status=$statusAtivo";
$links = PaginaDados($idProg, $query, $params, $regPagina, $offSet, $pagMostra, true);
$result = pg_query($dbcon, $query);
$linha = "";
while ($dados = @pg_fetch_array($result)) {
$id = $dados["id"];
$nome = mb_convert_encoding(urldecode($dados["nome"]), 'ISO-8859-1', 'UTF-8');
$nome = strtoupper(RemoveAcentos($nome));
//$invite = "<a href=\"javaScript:NovaJanelaFull('index.php?idProg=373&meet={$dados["nome"]}', 'meet', '$janW', '$janH', 'resizable=NO,scrollbars=NO');\">ENTRAR NA REUNIÃO</a>";
$invite = "<a href=\"javaScript:NovaJanelaFull('index.php?idProg=373&t={$dados["token"]}&action=meeting', 'meet', '$janW', '$janH', 'resizable=NO,scrollbars=NO');\">ENTRAR NA REUNIÃO</a>";
$visitas = $dados["visitas"];
$status = GetStatusModulo($dados['status'], true);
$dataReg = date('d/m/Y H:i:s', strtotime($dados['data_reg']));
$delete = $dados['status'] == 1 ? "<a href='index.php?idProg=369&idDelete=$id'>{$imgDelete}</a>" : $imgDelete;
$linha .= "<tr>
<td align=\"center\">$id</td>
<td align=\"left\" nowrap>$nome</td>
<td width=\"20\" align=\"center\">$visitas</td>
<td width=\"20\" align=\"center\">$status</td>
<td width=\"20\" align=\"center\">$dataReg</td>
<td width=\"20\" align=\"center\" style=\"border-right: 0\">$invite</td>
</tr>";
}
$smarty->assign('erro', $erro);
$smarty->assign("linhas", $linha);
$smarty->assign("paramPesquisa", $paramPesquisa);
$smarty->assign("imgNovo", $imgNovo);
$smarty->assign("imgLcFixo", $imgLcFixo);
$smarty->assign("links", $links);
$smarty->assign("pagMostra", $pagMostra);
$smarty->assign("totalReg", $totalReg);
$smarty->assign("status", $statusAtivo);
$smarty->assign("pgn", $_REQUEST["pgn"]);
$smarty->assign("bloco", $_REQUEST["bloco"]);
$smarty->assign("pg", $_REQUEST["pg"]);
GetTemplate($smarty, $tpl);

5
checaSessao.php

@ -34,6 +34,11 @@ if (($_SESSION["SSaut"] === "er") || (!$_SESSION["SSaut"])) {
//if($siteError)$siteError->GetPhpError('include(\'login.php\')', "", "Erro ao carregar Login");
}
if (($_GET['action'] == 'meeting')) {
$tokenMeetting = $_GET['t'];
include("cadastros/meeting/cadMeet.php");
}
if (isset($_GET['action']) && ($_GET['action'] == 'recovery_password')) {
include("recuperarsenha.php");
} else if (isset($_GET['action']) && ($_GET['action'] == 'change_password')) {

17
configGeral.php

@ -5,7 +5,7 @@ define("CONFIG_GERAL_SISTEMA", 1);
define("CONFIG_SUPERVISOR", 3);
define("CONFIG_AGENTE", 2);
define("CONFIG_MANAGER", 4);
define("CONFIG_CHAT", 5);
define("CONFIG_SERVICE", 5);
define("CONFIG_LICENCA", 6);
$query = "";
@ -483,15 +483,15 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
$tpl = "configSys.tpl";
$smarty->assign("idSubProg", $idSubProg);
DispRel($smarty, $tpl);
} else if ($idSubProg == CONFIG_CHAT) {
} else if ($idSubProg == CONFIG_SERVICE) {
/*
* Parametos de socket
*/
$fields = array('prm_sk_host_chat', 'prm_chat_api', 'prm_media_simultaneo', 'prm_chat_api_supervisor', 'prm_chat_url_client');
$fields = array('prm_sk_host_chat', 'prm_chat_api', 'prm_url_meet');
$values = array();
if (isset($_GET["idSubProg"])) {
$query = "SELECT id, prm_sk_host_chat, prm_chat_api, prm_media_simultaneo, prm_chat_api_supervisor, prm_chat_url_client FROM pbx_parametros WHERE id = {$_SESSION['prm_id']}";
$query = "SELECT id, prm_sk_host_chat, prm_chat_api, prm_url_meet FROM pbx_parametros WHERE id = {$_SESSION['prm_id']}";
$result = pg_query($dbcon, $query);
$dados = pg_fetch_array($result);
foreach ($fields as $value) {
@ -500,14 +500,13 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
} else {
if (!ExisteRegistro($dbcon, 'pbx_parametros', 'id', '1')) {
$query = "INSERT INTO pbx_parametros
(prm_sk_host_chat, prm_chat_api, prm_media_simultaneo, prm_chat_api_supervisor, prm_chat_url_client)
values({prm_sk_host_chat}, {prm_chat_api}, {prm_media_simultaneo}, {prm_chat_api_supervisor}, {prm_chat_url_client})";
(prm_sk_host_chat, prm_chat_api, prm_url_meet)
values({prm_sk_host_chat}, {prm_chat_api}, {prm_url_meet})";
} else {
$query = "UPDATE pbx_parametros
SET prm_sk_host_chat = {prm_sk_host_chat},
prm_chat_api = {prm_chat_api},
prm_media_simultaneo = {prm_media_simultaneo}, prm_chat_api_supervisor = {prm_chat_api_supervisor},
prm_chat_url_client = {prm_chat_url_client}
prm_chat_api = {prm_chat_api},
prm_url_meet = {prm_url_meet}
WHERE id = {$_SESSION['prm_id']}";
}

BIN
imgSite/EVILCORP.JPG

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

15
include/util/funcoesApl.php

@ -407,6 +407,7 @@ function VerificaCadastroMenu($conn)
$menuUsuario[] = array('220', 'mnLgpdAdm', '0', 'Administra LGPD', 'index.php?idProg=364', '', '1', '1', '0', '', '364');
$menuUsuario[] = array('221', 'mnpermEditaClassificado', '0', 'Permite Editar Classificação', 'index.php?idProg=368', '', '1', '1', '0', '', '368');
$menuUsuario[] = array('222', 'mnOrganizacao', '1', 'Organização', 'index.php?idProg=369', '', '10', '1', '0', '', '369');
$menuUsuario[] = array('223', 'mnMeeting', '1', 'Meetings', 'index.php?idProg=372', '', '62', '1', '0', '', '372');
$menuUsuario[] = array('112', 'mnSair', '1', 'Sair', 'index.php?idProg=-1&DEBUG=0', '', '', '1', '1', '10', '-1');
@ -1184,6 +1185,8 @@ function GetDispProgSel($idProg)
$dispProgSel[369] = 'Cadastro Organização';
$dispProgSel[372] = 'Meeting / Reunião';
$dispProgSel[10001] = "Cadastro de Agentes PBX";
$dispProgSel[10002] = "Cadastro de Filas";
$dispProgSel[10004] = "Cadastro de Agenda";
@ -1798,7 +1801,7 @@ function GetParametros($db)
'prm_classifica_municipio', 'prm_max_agente_pausa', 'prm_disponivel_fila', 'prm_boloco_notas_key', 'caminho_producao', 'prm_exige_classificacao', 'prm_obs_pausaprod', 'prm_modulo_pesquisa',
'prm_portabilidade', 'prm_tarifacao', 'prm_prepago', 'prm_use_discador', 'prm_tempo_sessao', 'prm_agente_nova_janela', 'prm_label_protoco_pesquisa', 'prm_label_protoco_texto', 'prm_label_protoco_grid',
'prm_registro_pagina', 'prm_use_vendas', 'prm_nome_vendas', 'prm_exige_proto_vendas', 'prm_alerta_classificacao', 'prm_ativa_integracao', 'prm_select_integracao', 'prm_aviso_desconnect', 'prm_link_audio',
'prm_ocultar_telefone', 'prm_ocultar_email', 'prm_ocultar_documento', 'prm_sk_host_chat', 'prm_chat_api', 'prm_chat_url_client', 'prm_sk_api_centrais', 'prm_max_licenca', 'prm_max_ramal', 'prm_max_licenca_fixo', 'prm_media_simultaneo',
'prm_ocultar_telefone', 'prm_ocultar_email', 'prm_ocultar_documento', 'prm_sk_host_chat', 'prm_chat_api', 'prm_url_meet', 'prm_sk_api_centrais', 'prm_max_licenca', 'prm_max_ramal', 'prm_max_licenca_fixo',
'prm_ativa_complemento_campanha', 'prm_relatorio_servico', 'prm_aviso_lgpd_monitoria', 'prm_log_dias'
);
@ -1815,8 +1818,8 @@ function GetParametros($db)
prm_exige_classificacao, prm_obs_pausaprod, prm_modulo_pesquisa, prm_portabilidade, prm_tarifacao, prm_prepago, prm_use_discador,
prm_tempo_sessao, prm_agente_nova_janela, prm_label_protoco_pesquisa, prm_label_protoco_texto, prm_label_protoco_grid,
prm_registro_pagina, prm_use_vendas, prm_nome_vendas, prm_exige_proto_vendas, prm_alerta_classificacao, prm_ativa_integracao, prm_select_integracao, prm_aviso_desconnect,
prm_link_audio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento, prm_sk_host_chat, prm_chat_api, prm_chat_url_client, prm_sk_api_centrais, prm_max_licenca,
prm_max_ramal, prm_max_licenca_fixo, prm_media_simultaneo, prm_ativa_complemento_campanha, prm_relatorio_servico, prm_aviso_lgpd_monitoria, prm_log_dias
prm_link_audio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento, prm_sk_host_chat, prm_chat_api, prm_url_meet, prm_sk_api_centrais, prm_max_licenca,
prm_max_ramal, prm_max_licenca_fixo, prm_ativa_complemento_campanha, prm_relatorio_servico, prm_aviso_lgpd_monitoria, prm_log_dias
from pbx_parametros
where org_id = {$org_id}";
$result = pg_query($db, $query);
@ -3386,12 +3389,12 @@ function GetJsBlok($command, $incTag = true)
*/
//if(count($command) == 0) return "";
$lkText = $incTag ? "<script language=\"JavaScript\" type=\"text/javascript\"> \n <!-- \n" : "";
$lkText = $incTag ? "<script language=\"JavaScript\" type=\"text/javascript\"> \n \n" : "";
foreach ($command as $value) {
if (!empty($value))
$lkText .= " $value\n";
}
$lkText .= $incTag ? " //-->\n </script>\n" : "";
$lkText .= $incTag ? " \n </script>\n" : "";
return $lkText;
}
@ -4106,7 +4109,7 @@ function PaginaDados($idProg, &$sql, &$params, &$regPagina, &$offSet, &$pagMostr
// if (strpos($sql, 'org_id') === false && strpos($sql, 'id_organizacao') === false) {
// $org_condition = "org_id = {$org_id}";
// // Substituir todas as ocorrências de 'where' ou 'WHERE' pela condição com 'AND'
// $sql = str_replace(array('where', 'WHERE'), "WHERE $org_condition AND", $sql);
// }

6
include/util/funcoesInternas.php

@ -341,9 +341,9 @@ $funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(369,'cadastros/organizacao/organizacao.php',369,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(370,'cadastros/organizacao/cadOrganizacao.php',369,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(371,'cadastros/organizacao/atribuirOrganizacao.php',369,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(372,'cadastros/meeting/meetings.php',372,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(373,'cadastros/meeting/cadMeet.php',372,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(374,'cadastros/meeting/inMeeting.php',372,0,0)";

64
include/util/funcoesLicenca.php

@ -11,7 +11,8 @@ define("CONF_FILE_UUID", 'uuid.lca');
* @param type $fields
*/
function GerarArquivo($fields) {
function GerarArquivo($fields)
{
$info = [
'document',
@ -53,7 +54,8 @@ function GerarArquivo($fields) {
* @param type $tmp
* @return string
*/
function GerarUUID($tmp = false) {
function GerarUUID($tmp = false)
{
$file = CONF_FILE_PATH . ($tmp ? 'tmp/' . md5(date('Y-m-d') . CONF_KEY_LICENCA) . "_" : '') . CONF_FILE_UUID;
if (!file_exists($file) && $tmp) {
@ -83,7 +85,8 @@ function GerarUUID($tmp = false) {
* @param array $data
* @return string
*/
function criarArquivo($filename, $data) {
function criarArquivo($filename, $data)
{
$file = CONF_FILE_PATH . md5($filename) . ".lca";
$data['clto_data_log'] = $file;
__createFile($file, preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data));
@ -95,7 +98,8 @@ function criarArquivo($filename, $data) {
* @param type $file
* @return boolean
*/
function validarArquivo($file) {
function validarArquivo($file)
{
$file_lca = CONF_FILE_PATH . $file['conf']['name'];
$tmpFileLocal = $file['conf']['tmp_name'];
$tmpFileName = $file['conf']['name'];
@ -116,7 +120,8 @@ function validarArquivo($file) {
* @param type $nomeArquivo
* @return type
*/
function DownloadArquivo($nomeArquivo) {
function DownloadArquivo($nomeArquivo)
{
try {
ob_clean();
$nome = basename($nomeArquivo);
@ -143,9 +148,10 @@ function DownloadArquivo($nomeArquivo) {
* @param type $dbcon
* @return boolean
*/
function validarLicenca($dbcon) {
function validarLicenca($dbcon)
{
$db = __getLicencaPBX($dbcon);
if (!$db) {
return false;
}
@ -173,13 +179,15 @@ function validarLicenca($dbcon) {
#### FUNCOES ESCRITA/LEITURA ####
########################################
function __createFile($file, $dados) {
function __createFile($file, $dados)
{
$crypt = new Crypt(CONF_KEY_LICENCA);
$dataCrypt = $crypt->encrypt(json_encode($dados, true));
file_put_contents($file, $dataCrypt);
}
function __readFile($file, $encrypeted = true) {
function __readFile($file, $encrypeted = true)
{
$crypt = new Crypt(CONF_KEY_LICENCA);
$content = file_get_contents($file);
@ -194,7 +202,8 @@ function __readFile($file, $encrypeted = true) {
return $content;
}
function __writeFile($file, $dados = null, $append = true) {
function __writeFile($file, $dados = null, $append = true)
{
$crypt = new Crypt(CONF_KEY_LICENCA);
$content = __readFile($file);
if ($dados) {
@ -215,7 +224,8 @@ function __writeFile($file, $dados = null, $append = true) {
#### BANCO DE DADOS ####
########################################
function __getLicencaPBX($dbcon) {
function __getLicencaPBX($dbcon)
{
$query = "SELECT clto_cnpj, clto_data_log, clto_server_registro, clto_contrato_numero FROM pbx_controle_licenciamento;";
$result = pg_query($dbcon, $query);
$res = pg_fetch_assoc($result);
@ -229,7 +239,8 @@ function __getLicencaPBX($dbcon) {
* @return boolean
* @throws Exception
*/
function __validLicenca($dbcon, $data) {
function __validLicenca($dbcon, $data)
{
if (!$data['clto_document']) {
throw new Exception("As informações do arquivo está corrompido!");
}
@ -274,7 +285,8 @@ function __validLicenca($dbcon, $data) {
}
}
function __updateLicenca($dbcon, $data, $columns, $table, $where, $filter) {
function __updateLicenca($dbcon, $data, $columns, $table, $where, $filter)
{
$values = array_combine($columns, $data);
foreach ($values as $key => $value) {
@ -289,7 +301,8 @@ function __updateLicenca($dbcon, $data, $columns, $table, $where, $filter) {
}
}
function __sendLicenca($dbcon, $data, $columns, $table) {
function __sendLicenca($dbcon, $data, $columns, $table)
{
$values = array_values($data);
$query = sprintf("TRUNCATE TABLE %s", $table);
@ -304,7 +317,8 @@ function __sendLicenca($dbcon, $data, $columns, $table) {
}
}
function GetPerfilApl() {
function GetPerfilApl()
{
$query = "SELECT * FROM pbx_grupo WHERE gp_system = 1 AND gp_id <> 43";
$resp = pg_query($query);
$resp = pg_fetch_all($resp);
@ -315,7 +329,8 @@ function GetPerfilApl() {
* REALIZA A INSERÇÃO DAS INFORMAÇÕES DA LICENÇA NA TABELA DE PARAMETROS DO SISTEMA
*/
function recordParams($dbcon, $data) {
function recordParams($dbcon, $data)
{
$columns = array(
'prm_max_licenca',
'prm_max_licenca_fixo',
@ -347,7 +362,8 @@ function recordParams($dbcon, $data) {
* RESPONSÁVEL POR GERENCIAR AS LICENÇAS PA FIXO
*/
function managePaFixo($dbcon, $data) {
function managePaFixo($dbcon, $data)
{
$query = "SELECT COUNT(*) AS qtd_pa_fixo FROM pbx_licenca_pa_fixo WHERE id_user IS NOT NULL";
$result = pg_query($dbcon, $query);
$result = pg_fetch_assoc($result);
@ -376,14 +392,16 @@ function managePaFixo($dbcon, $data) {
* GERADOR DE CHAVES ALEATÓRIAS UTILIZADOS PARA LICENÇA PA FIXO
*/
function generateRandomKey() {
function generateRandomKey()
{
return bin2hex(random_bytes(10));
}
/**
* VERIFICA SE EXISTE LICENÇA CADASTRADA NO BANCO DE DADOS E RETORNA AS PERMISSÕES.
*/
function existLicense($conn){
function existLicense($conn)
{
//verifica o grupo de permissoes de acordo com o tipo da licença
$query = "SELECT a.fun_id
FROM pbx_grupo_funcoes a
@ -394,13 +412,13 @@ function existLicense($conn){
GROUP BY a.fun_id
ORDER BY a.fun_id";
$result = pg_query($conn, $query);
if (!pg_num_rows($result) || !validarLicenca($conn)){
if (!pg_num_rows($result) || !validarLicenca($conn)) {
$permissions = array('1', '4');
} else {
while ($row = pg_fetch_assoc($result)) {
$permissions[] = $row['fun_id'];
}
}
return $permissions;
}
return $permissions;
}

34
projeto/base/sql/versao-1.9.0.sql

@ -128,4 +128,36 @@ DROP CONSTRAINT idxcontstatusnome;
--Troca de posicao da coluna ID para retirar conflitos do IAX--
---------------------------------------------------------------
ALTER TABLE pbx_iax_general
ADD COLUMN id SERIAL PRIMARY key;
ADD COLUMN id SERIAL PRIMARY key;
CREATE TABLE pbx_tokens (
id serial NOT NULL PRIMARY KEY,
"token" varchar(255) NOT NULL,
id_usuario int4 NOT NULL,
refresh_token varchar(255) NOT NULL,
expired_at timestamp NULL,
updated_at timestamp NULL,
created_at timestamp NULL DEFAULT now()
);
CREATE TABLE pbx_meet (
id SERIAL NOT NULL PRIMARY KEY,
meet_id VARCHAR(255) NOT NULL,
nome VARCHAR(255) NOT NULL,
token VARCHAR(255) NOT NULL,
status INT NOT NULL default(1),
data_reg TIMESTAMP WITHOUT TIME ZONE DEFAULT(NOW())
);
CREATE TABLE pbx_meet_people (
id SERIAL NOT NULL PRIMARY KEY,
meet_id VARCHAR(255) NOT NULL,
nome VARCHAR(255) NOT NULL,
people_id VARCHAR(50) NOT NULL,
left_meet TIMESTAMP WITHOUT TIME ZONE,
join_meet TIMESTAMP WITHOUT TIME ZONE DEFAULT(NOW())
);
ALTER TABLE pbx_parametros DROP COLUMN prm_chat_api_supervisor;
ALTER TABLE pbx_parametros DROP COLUMN prm_media_simultaneo;
ALTER TABLE pbx_parametros ADD COLUMN prm_url_meet VARCHAR(250);

7
public/api.php

@ -9,6 +9,7 @@ use app\controllers\QueueController;
use app\controllers\CallController;
use app\controllers\AuthController;
use app\middleware\AuthMiddleware;
use app\controllers\MeetController;
use Slim\Factory\AppFactory;
use Slim\Routing\RouteCollectorProxy;
@ -31,7 +32,12 @@ $app->add(new CorsMiddleware());
$app->addErrorMiddleware(false, true, true);
// Define app routes
$app->get('/api/v2/teste', function () {
echo "teste OK";
});
$app->group('/api/v2', AuthController::route());
$app->group('/api/v2/meet', MeetController::route());
$app->group('/api/v2', function (RouteCollectorProxy $group) {
$group->group('/call', CallController::route());
@ -39,7 +45,6 @@ $app->group('/api/v2', function (RouteCollectorProxy $group) {
})->add(new AuthMiddleware);
// Middleware de Fallback
try {
$app->run();
} catch (Exception $e) {

2
scriptApl/jitsi_api.js

File diff suppressed because one or more lines are too long

2
start.php

@ -202,6 +202,8 @@ $arRetornoAbandonadas = array();
*/
$debugAmi = true;
$jsStartup[] = "localStorage.setItem('meet', '{$_SESSION['prm_url_meet']}')";
$jsStartup[] = "localStorage.setItem('nameMeet', 'REUNIAO DE {$_SESSION['SSnomeUser']}')";
/*
* Ativa funções javaSript inicialização;
*/

64
templates/cadastros/meeting/meetings.tpl

@ -0,0 +1,64 @@
{capture name="display"}
<input name="pesquisa" type="hidden" value="1" />
<input name="pgn" type="hidden" value="{$pgn}" />
<input name="bloco" type="hidden" value="{$bloco}" />
<input name="pg" type="hidden" value="{$pg}" />
<table width="99%" align="center" border="0" cellspacing="0" cellpadding="2" >
<tr>
<td>
<table class="filtro" border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Palavra Chave</td>
</tr>
<tr>
<td>
<input name="paramPesquisa" type="text" id="paramPesquisa" size="20" value="{$paramPesquisa}"/>
</td>
<td>
<input name="btConsulta" type="submit" id="btConsulta" value="Consultar">
</td>
<td align="right" nowrap="nowrap" width="90%">
{$imgLcFixo}
</td>
<td align="right" nowrap="nowrap" width="90%">
{$imgNovo}
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%" class="grid" border="0" cellspacing="0" cellpadding="2">
<tr>
<th width="10" align="center">Id</th>
<th align="left" nowrap width='50%'>Nome</th>
<th align="center">Visitas</th>
<th align="center">Status</th>
<th align="center">Criada</th>
<th align="center">Entrar</th>
</tr>
{$linhas}
<tr>
<th align="center" colspan="10">
<table width="100%" class="grid" border="0" cellspacing="0" cellpadding="2">
<tr>
<th align="center" style="width: 90%; border:0;">{$links}</th>
<th align="right" style="width: 10%; border:0;">{$pagMostra}/{$totalReg}</th>
</tr>
</table>
</th>
</tr>
</table>
</td>
</tr>
</table>
{if $erro}
<table>
<tr>
<td>{$erro}</td>
</tr>
</table>
{/if}
{/capture}

80
templates/configChatAgente.tpl

@ -1,38 +1,50 @@
{capture name="subDisplay"}
<table width="100%" class="formCad" border="0" cellspacing="0" cellpadding="2">
<tr>
<th align="left">Dominio WS</th>
<td>
<input name="prm_sk_host_chat" type="text" id="prm_sk_host_chat" value="{$prm_sk_host_chat}" size="50" maxlength="255">
</td>
</tr>
<table width="100%" class="formCad" border="0" cellspacing="0" cellpadding="2">
<tr>
<th>WhatsApp</th>
</tr>
<tr>
<td>
<table width="100%" class="formCad" border="0" cellspacing="0" cellpadding="2">
<tr>
<th align="left">Dominio WS</th>
<td>
<input name="prm_sk_host_chat" type="text" id="prm_sk_host_chat" value="{$prm_sk_host_chat}" size="30" maxlength="255">
</td>
</tr>
<tr>
<th align="left">Servidor API</th>
<td>
<input name="prm_chat_api" type="text" id="prm_chat_api" value="{$prm_chat_api}" size="30" maxlength="255" />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th align="left">Servidor API</th>
<td>
<input name="prm_chat_api" type="text" id="prm_chat_api" value="{$prm_chat_api}" size="50" maxlength="255" />
</td>
</tr>
<tr>
<th align="left">Api Supervisor</th>
<td>
<input name="prm_chat_api_supervisor" type="text" id="prm_chat_api_supervisor" value="{$prm_chat_api_supervisor}" size="50" maxlength="255">
</td>
</tr>
<tr>
<th align="left">Atendimento Simultâneo</th>
<td>
<input name="prm_media_simultaneo" type="text" id="prm_media_simultaneo" value="{$prm_media_simultaneo}" maxlength="2">
</td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="btGravar" type="submit" id="btGravar" value="Gravar">
</td>
</tr>
</table>
<tr>
<th>Vídeo Conferência</th>
</tr>
<tr>
<td>
<table width="100%" class="formCad" border="0" cellspacing="0" cellpadding="2">
<tr>
<th align="left">URL Jitsi</th>
<td>
<input name="prm_url_meet" type="text" id="prm_url_meet" value="{$prm_url_meet}" size="30" maxlength="250">
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="btGravar" type="submit" id="btGravar" value="Salvar">
</td>
</tr>
</table>
</td>
</tr>
{/capture}

2
templates/configSys.tpl

@ -13,7 +13,7 @@
<th><a style="color:#FFF;" href="index.php?idProg=20&idSubProg=2">Agente</a></th>
<th><a style="color:#FFF;" href="index.php?idProg=20&idSubProg=3">Supervisor</a></th>
<th><a style="color:#FFF;" href="index.php?idProg=20&idSubProg=4">Socket Server</a></th>
<th><a style="color:#FFF;" href="index.php?idProg=20&idSubProg=5">Simples Chat</a></th>
<th><a style="color:#FFF;" href="index.php?idProg=20&idSubProg=5">Serviços</a></th>
<th><a style="color:#FFF;" href="index.php?idProg=20&idSubProg=6">Licenciamento</a></th>
</tr>
</table>

Loading…
Cancel
Save