/**
* @ngdoc directives
* @name Conversas
* @module s4c.directives.mensageria.conversas.Conversas
*
* @description
* `MensageriaConversas` Gerenciamento de conversas do módulo de mensageria
*
*/
(function () {
angular.module('s4c.components.collaboration')
.directive('mensageriaConversas', MensageriaConversas);
moment.locale('pt-br', {
calendar: {
lastWeek: 'DD/MM/YYYY',
lastDay: '[Ontem]',
sameDay: 'LT',
sameElse: 'DD/MM/YYYY'
}
});
MensageriaConversas.$inject = [
'MensageriaService',
'$q',
'$filter',
'MensageriaFilter',
'AuthService',
'MensageriaChatUsuario',
'MensageriaManager',
'CommService',
'MensageriaChatGrupo',
'$mdDialog',
'localize',
'Base',
'$sce',
'MainState'
];
function MensageriaConversas(MensageriaService, $q, $filter, MensageriaFilter,
AuthService, MensageriaChatUsuario, MensageriaManager, CommService, MensageriaChatGrupo, $mdDialog, localize, Base, $sce, MainState) {
return {
restrict: 'E',
templateUrl: 'app/directives/mensageria/conversas/conversas.html',
replace: true,
scope: {
'state': '=state',
'compartilhando': '=compartilhando',
'tipo': '=tipo',
'compartilhamentoDetalhes': '=compartilhamentoDetalhes'
},
link: function ($scope, $elem, $attrs) {
$scope.res = $scope.$root.res;
angular.extend($scope, {
buscarContatos: buscarContatos,
buscarUsuarios: buscarUsuarios,
abrirChatUsuario: abrirChatUsuario,
abrirChatGrupo: abrirChatGrupo,
loadContacts: loadContacts,
state: {
chatUsuarioAtivo: false,
chatGrupoAtivo: false
},
contatos: [],
usuarios: [],
grupos: [],
selecionados: [],
usuariosOnlineIds: [],
criticalRegion: false,
unreadMessages: [],
unreadMessagesGroup: [],
isAddGrupo: false,
filters: {
texto: ''
},
usuarioChat: {},
me: AuthService.user.info,
compartilharScreen: false,
compartilharTipo: 'usuario',
compartilharNext: {},
res: $scope.$root.res,
reloadContacts: reloadContacts
});
CommService.on('updateUserList', function (uuid) {
if (uuid != AuthService.user.info.id) {
reloadContacts();
}
});
$scope.exibirLoadingContatos = true;
/**
* @method reloadContacts
*/
function reloadContacts() {
if ($scope.contatos) {
$q.all([
MensageriaService.findContatos(false)
]).then(function (results) {
buildContacts(results[0]);
});
}
if ($scope.usuarios) {
$q.all([
MensageriaService.findUsuarios(false),
_obterUsuariosOnline()
]).then(function (results) {
$scope.usuariosOnlineIds = results[1];
buildUsuarios(results[0]);
});
}
}
$scope.exibirLoadingConversas = true;
/**
* @method buildUsuarios
* @param {*} usuarios
*/
function buildUsuarios(usuarios) {
_.each(usuarios, function (usuario) {
var contato = _.find($scope.contatos, function (contato) {
return contato.id === usuario.id && (contato.isGrupo == null || contato.isGrupo == false);
});
usuario.mensagem.createdAtFormated = _formatDate(usuario.mensagem.createdAt);
var compareUsuariosIds = _.map($scope.usuariosOnlineIds, function (user) {
return user;
});
if (contato != null) {
usuario.nome = contato.nome;
usuario.nome_departamento = contato.nome_departamento;
usuario.DepartamentoId = contato.DepartamentoId;
}
usuario.exibir = true;
if (_.filter(compareUsuariosIds, function (compare) {
return compare === usuario.id;
}).length > 0) {
usuario.online = 1;
} else {
usuario.online = 0;
}
});
sortUsers(usuarios);
$scope.usuarios = usuarios;
$scope.selecionados = $scope.usuarios;
$scope.exibirLoadingContatos = true;
var novasMensagensTitle = 0;
_.each($scope.usuarios, function (usuario) {
if (usuario.isGrupo == true) {
usuario.online = 1;
}
if (!usuario.newMessage) {
usuario.newMessage = [];
}
if (usuario.novasMensagens != null) {
novasMensagensTitle += usuario.novasMensagens;
MensageriaManager.unreadMessages = true;
}
for (i = 0; i < usuario.novasMensagens; i++) {
usuario.newMessage[i] += 1;
}
});
if (novasMensagensTitle > 0) {
document.title = '(' + novasMensagensTitle + ') S4C';
}
}
/**
* @method buildContacts
* @param {*} contatos
*/
function buildContacts(contatos) {
_.each(contatos, function (contato) {
var compareUsuariosIds = _.map($scope.usuariosOnlineIds, function (user) {
return user;
});
contato.exibir = true;
if (_.filter(compareUsuariosIds, function (compare) {
return compare === contato.id;
}).length > 0) {
contato.online = 1;
} else {
contato.online = 0;
}
});
$scope.contatos = contatos;
$scope.exibirLoadingContatos = false;
}
$scope.$apimsg = {
reloadContacts: reloadContacts
};
MainState.registerDirective('MensageriaConversas', $scope.$apimsg);
/**
* @method loadContacts
*/
function loadContacts() {
$q.all([
_obterContatos()
]).then(function (results) {
buildContacts(results[0]);
$scope.exibirLoadingContatos = false;
});
}
MensageriaChatGrupo.on('updateFotoGrupo', function (data) {
angular.forEach($scope.usuarios, function (usuario) {
if (usuario.isGrupo && usuario.mensagem.nome == data.nome) {
console.log(usuario.mensagem.urlIcone = data.urlIcone);
}
});
});
/**
* @method usuarioOnline
*/
CommService.on('usuarioOnline', function (usuario) {
for (var index in $scope.usuarios) {
if ($scope.usuarios[index].id == usuario.id) {
$scope.usuarios[index].online = 1;
break;
}
}
for (var index in $scope.contatos) {
if ($scope.contatos[index].id == usuario.id) {
$scope.contatos[index].online = 1;
break;
}
}
_filtrarUsuarios();
});
/**
* @method usuarioOffline
*/
CommService.on('usuarioOffline', function (usuario) {
for (var index in $scope.usuarios) {
if ($scope.usuarios[index].id == usuario.id) {
$scope.usuarios[index].online = 0;
break;
}
}
for (var index in $scope.contatos) {
if ($scope.contatos[index].id == usuario.id) {
$scope.contatos[index].online = 0;
break;
}
}
_filtrarUsuarios();
});
/**
* @method grupoRemovido
*/
MensageriaChatGrupo.on('grupoRemovido', function (mensagem) {
var userIndex;
angular.forEach($scope.usuarios, function (usuario) {
if (usuario.mensagem.id == (mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId)) {
usuario.mensagem.mensagem = mensagem.mensagem;
usuario.nome = mensagem.Usuario.nome;
usuario.mensagem.createdAt = moment().format('YYYY-MM-DD HH:mm');
usuario.participantes = mensagem.participantes;
usuario.mensagem.nome = mensagem.grupoNome;
group = usuario;
userIndex = $scope.usuarios.indexOf(usuario);
}
});
$scope.usuarios.splice(userIndex, 1);
if ($scope.grupoChat) {
if (group.mensagem.id == $scope.grupoChat.id) {
$scope.state.chatGrupoAtivo = false;
}
}
//Exibe um popup de aviso para o usuario
if ($scope.me.id != (mensagem.usuario || mensagem.Usuario.id) && MensageriaManager.ativo) {
var confirm = $mdDialog.confirm()
.title('Grupo removido')
.content('O grupo ' + mensagem.grupoNome + " do qual você faz parte foi removido pelo administrador.")
.ok('Ok');
$mdDialog.show(confirm);
}
});
/**
* @method novaMensagem
*/
MensageriaChatGrupo.on('novaMensagem', function (mensagem) {
MensageriaManager.unreadMessages = true;
if ($scope.criticalRegion == true) {
return;
}
$scope.criticalRegion = true;
var grupoAlvo;
for (var index = 0; index < $scope.usuarios.length; index++) {
if ($scope.usuarios[index].mensagem.id == (mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId)) {
grupoAlvo = $scope.usuarios[index];
}
}
//Só entra aqui se for criação de grupo ou se foi incluído em um grupo.
if (!grupoAlvo) {
_obterGrupo(mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId).then(function (result) {
var text = '{}';
var gr = JSON.parse(text);
gr.mensagem = {};
gr.id = (mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId);
gr.nome = result.nome;
gr.mensagem.id = (mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId);
gr.mensagem.nome = result.nome;
gr.mensagem.mensagem = _removerTextoCompartilhamento(mensagem.mensagem);
gr.mensagem.createdAt = moment().format('YYYY-MM-DD HH:mm');
gr.mensagem.usuario = mensagem.usuario;
gr.mensagem.destinatario = mensagem.destinatario;
gr.exibir = true;
gr.isGrupo = true;
gr.online = 1;
//Adiciona o grupo novo à lista de conversas
$scope.usuarios.push(gr);
notifyGroupUser(result, mensagem);
$scope.criticalRegion = false;
sortUsers($scope.usuarios);
});
return;
}
//Atualiza a ultima mensagem da conversa com a nova mensagem.
var group;
var userIndex;
for (var index = 0; index < $scope.usuarios.length; index++) {
if ($scope.usuarios[index].mensagem.id == (mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId)) {
$scope.usuarios[index].mensagem.mensagem = mensagem.mensagem;
$scope.usuarios[index].nome = mensagem.Usuario.nome;
$scope.usuarios[index].participantes = mensagem.participantes;
$scope.usuarios[index].mensagem.createdAtFormated = _formatDate(mensagem.createdAt);
$scope.usuarios[index].mensagem.createdAt = moment().format('YYYY-MM-DD HH:mm');
if (mensagem.grupoNome) {
$scope.usuarios[index].mensagem.nome = mensagem.grupoNome;
}
group = $scope.usuarios[index];
userIndex = index;
}
}
sortUsers($scope.usuarios);
//Se o usuario logado foi removido do grupo, tira o grupo da lista de conversas.
if ($scope.me.id == mensagem.participanteRemovido) {
$scope.usuarios.splice(userIndex, 1);
//Exibe um popup de aviso para o usuario removido
var confirm = $mdDialog.confirm()
.title('Removido do grupo')
.content('Você foi removido do grupo ' + mensagem.grupoNome)
.ok('Ok');
$mdDialog.show(confirm);
if ($scope.grupoChat) {
if (group.mensagem.id == $scope.grupoChat.id) {
$scope.state.chatGrupoAtivo = false;
}
}
}
// Notifica o usuário logado e que pertence ao grupo.
notifyGroupUser(grupoAlvo, mensagem);
$scope.criticalRegion = false;
});
/**
* @method notifyGroupUser
* @param {*} grupoAlvo
* @param {*} mensagem
*/
function notifyGroupUser(grupoAlvo, mensagem) {
var countMessages;
if (!MensageriaManager.ativo || $scope.state.chatGrupoAtivo == false ||
($scope.state.chatGrupoAtivo == true && $scope.grupoChat.id != (mensagem.grupoId || mensagem.GrupoUsuarioMensageriumId))) {
Notification.requestPermission(function (perm) {
var notification = new Notification((grupoAlvo.nome || mensagem.grupoNome) + '-' + (mensagem.Usuario.nome || ''), {
dir: "auto",
icon: "assets/images/logo_fundo_branco.png",
lang: "",
body: _removerTextoCompartilhamento(mensagem.mensagem),
tag: new Date().getTime(),
});
notification.onclick = function () {
if ($scope.me.id == mensagem.participanteRemovido) {
MensageriaManager.abrir();
notification.close();
return;
}
if (MensageriaManager.ativo) {
$scope.abrirChatGrupo(grupoAlvo);
notification.close();
} else {
MensageriaManager.abrir();
setTimeout(function () {
$scope.abrirChatGrupo(grupoAlvo);
notification.close();
}, 500);
}
}
// fecha a notificacao depois de 10sg
notification.onshow = function () {
setTimeout(notification.close, 10000);
}
});
}
// se o usuario nao estiver ativo, insere uma notificacao na lista
if (!$scope.state.chatGrupoAtivo) {
var conversa = _.find($scope.usuarios, function (user) { return user.mensagem.id == mensagem.grupoId; });
if (conversa) {
if (conversa.newMessage) {
conversa.newMessage.push(mensagem.mensagem)
} else {
conversa.newMessage = [].concat(mensagem.mensagem);
}
}
}
var text = '{"idGrupo": "", "countMessages": 0}';
obj = JSON.parse(text);
if (mensagem.destinatario != null) {
obj.idGrupo = mensagem.grupoId;
}
obj.countMessages = 1;
if ($scope.unreadMessagesGroup == null || $scope.unreadMessagesGroup.length == 0) {
$scope.unreadMessagesGroup[0] = obj;
} else {
$scope.unreadMessagesGroup[$scope.unreadMessagesGroup.length] = obj;
}
document.title = 'S4C';
countMessages = _.reduce($scope.usuarios, function (s, entry) {
return s + (entry.newMessage ? parseFloat(entry.newMessage.length) : 0);
}, 0);
if (countMessages) {
MensageriaManager.countMsgs += 1;
MensageriaManager.unreadMessages = true;
document.title = '(' + MensageriaManager.countMsgs + ') S4C';
}
}
/**
* @method loadNewMessagesCount
*/
function loadNewMessagesCount() {
MensageriaManager.countMsgs = 0;
MensageriaService.loadNewMessagesCount().then(function (count) {
MensageriaManager.countMsgs = count;
if (count > 0) {
MensageriaManager.unreadMessages = true;
document.title = '(' + count + ') S4C';
}
});
}
loadNewMessagesCount();
/**
* @method novaMensagem
*/
MensageriaChatUsuario.on('novaMensagem', function (mensagem) {
MensageriaManager.unreadMessages = true;
var destinatario = _.find($scope.usuarios, function (user) { return user.id === mensagem.usuario && (user.isGrupo == null || user.isGrupo == false); });
var remetente = _.find($scope.usuarios, function (user) { return user.id === mensagem.destinatario && (user.isGrupo == null || user.isGrupo == false); });
if (mensagem.destinatario == $scope.me.id) {
var novaConversa = false;
if (destinatario != null && destinatario.mensagem != null) {
destinatario.mensagem = {};
} else {
var text = '{}';
destinatario = JSON.parse(text);
destinatario.mensagem = {};
destinatario.id = mensagem.Usuario.id;
novaConversa = true;
}
// insere a ultima mensagem, nao precisa fazer push, pq quando o cara clicar, vai carregar tudo!
destinatario.mensagem.usuario_nome = mensagem.Usuario.nome;
destinatario.mensagem.mensagem = _removerTextoCompartilhamento(mensagem.mensagem);
//destinatario.mensagem.createdAt = moment().format('YYYY-MM-DD HH:mm');
destinatario.mensagem.usuario = mensagem.usuario;
destinatario.mensagem.destinatario = mensagem.destinatario;
// se o usuario nao estiver ativo, insere uma notificacao na lista
if (!$scope.state.chatUsuarioAtivo || ($scope.state.chatUsuarioAtivo == true &&
$scope.usuarioChat.id != mensagem.Usuario.id)) {
if (destinatario.newMessage) {
destinatario.newMessage.push(mensagem.mensagem)
} else {
destinatario.newMessage = [].concat(mensagem.mensagem);
}
} else {
if (mensagem.lida == null) {
mensagem.lida = [$scope.me.id];
} else {
mensagem.lida.push($scope.me.id);
}
MensageriaService.atualizarMensagensLidas(mensagem.usuario, mensagem.destinatario);
}
//Faz o push para exibir na lista de conversas caso seja uma nova conversa.
if (novaConversa) {
$scope.usuarios.push(destinatario);
_novaConversa(destinatario);
}
var remetenteName = mensagem.Usuario.nome;
var text = '{"destinatario": "", "remetente":"", "countMessages": 0}';
obj = JSON.parse(text);
if (mensagem.destinatario != null) {
obj.destinatario = mensagem.destinatario;
}
if (mensagem.usuario != null) {
obj.remetente = mensagem.usuario;
}
obj.countMessages = 1;
if ($scope.unreadMessages == null || $scope.unreadMessages.length == 0) {
$scope.unreadMessages[0] = obj;
} else {
$scope.unreadMessages[$scope.unreadMessages.length] = obj;
}
// notifica apenas o cara que ta recebendo a mensagem
if (!MensageriaManager.ativo || $scope.state.chatUsuarioAtivo == false ||
($scope.state.chatUsuarioAtivo == true &&
$scope.usuarioChat.id != mensagem.Usuario.id)) {
var countMessages = _.reduce($scope.usuarios, function (s, entry) {
return s + (entry.newMessage ? parseFloat(entry.newMessage.length) : 0);
}, 0);
MensageriaManager.countMsgs += countMessages;
Notification.requestPermission(function (perm) {
var notification = new Notification(remetenteName, {
dir: "auto",
icon: "assets/images/logo_fundo_branco.png",
lang: "",
body: _removerTextoCompartilhamento(mensagem.mensagem),
tag: new Date().getTime(),
});
notification.onclick = function () {
if (MensageriaManager.ativo) {
$scope.abrirChatUsuario(destinatario);
notification.close();
} else {
MensageriaManager.abrir();
setTimeout(function () {
$scope.abrirChatUsuario(destinatario);
notification.close();
}, 500);
}
}
// fecha a notificacao depois de 10sg
notification.onshow = function () {
setTimeout(notification.close, 10000);
}
});
}
}
if (mensagem.usuario == $scope.me.id) {
var novaConversa = false;
if (remetente != null && remetente.mensagem != null) {
remetente.mensagem = {};
} else {
var text = '{}';
remetente = JSON.parse(text);
remetente.mensagem = {};
remetente.id = mensagem.Destinatario.id;
novaConversa = true;
}
remetente.mensagem.usuario_nome = mensagem.Destinatario.nome;
remetente.mensagem.mensagem = _removerTextoCompartilhamento(mensagem.mensagem);
remetente.mensagem.createdAt = moment().format('YYYY-MM-DD HH:mm');
remetente.mensagem.createdAtFormated = _formatDate(remetente.mensagem.createdAt);
//Faz o push para exibir na lista de conversas caso seja uma nova conversa.
if (novaConversa) {
$scope.usuarios.push(remetente);
_novaConversaRemetente(remetente);
}
}
var countMessages = _.reduce($scope.usuarios, function (s, entry) {
return s + (entry.newMessage ? parseFloat(entry.newMessage.length) : 0);
}, 0);
MensageriaManager.countMsgs = countMessages;
document.title = 'S4C';
if (countMessages) {
document.title = '(' + countMessages + ') S4C';
}
MensageriaManager.unreadMessages = true;
sortUsers($scope.usuarios);
});
MensageriaFilter.getInstance('mensageria-filter-geral').on('filterChanged', function () {
_filtrarUsuarios();
});
$scope.openAddGrupo = function () {
$scope.isAddGrupo = !$scope.isAddGrupo;
$scope.filters.texto = '';
MensageriaChatUsuario.trigger('obterContatos');
};
/**
* @method obterInformacoes
*/
MensageriaChatUsuario.on('obterInformacoes', function () {
$q.all([
_obterUsuariosOnline(),
_obterUsuarios()
]).then(function (results) {
$scope.usuariosOnlineIds = results[0];
$scope.exibirLoadingConversas = false;
buildUsuarios(results[1]);
});
});
/**
* @method sortUsers
* @param {*} usuarios
*/
function sortUsers(usuarios) {
usuarios.sort(function (u1, u2) {
return (moment(u1.mensagem.createdAt).isBefore(moment(u2.mensagem.createdAt))) ? 1 :
(moment(u1.mensagem.createdAt).isAfter(moment(u2.mensagem.createdAt)) ? -1 : 0);
});
}
String.prototype.trunc = String.prototype.trunc ||
function (n) {
return this.length > n ? this.substr(0, n - 1) + '...' : this.toString();
};
/**
* @method _removerTextoCompartilhamento
* @param {*} mensagem
*/
function _removerTextoCompartilhamento(mensagem) {
var hasCompartilhamento = mensagem.match(/\@@(.*)\@@/);
if (hasCompartilhamento &&
hasCompartilhamento.length > 0) {
var stringToSplit = mensagem.match(/\@@(.*)\@@/)[1];
return mensagem.replace('@@' + stringToSplit + '@@', '');
}
if (mensagem.includes("<img")) {
mensagem = "um novo arquivo foi recebido.";
}
return mensagem;
}
/**
* @method _filtrarUsuarios
*/
function _filtrarUsuarios() {
_.each($scope.usuarios, function (usuario) {
usuario.exibir = false;
if (usuario.mensagem) {
usuario.mensagem.mensagem = _removerTextoCompartilhamento(usuario.mensagem.mensagem);
}
var nome;
if (usuario.isGrupo && usuario.mensagem.nome != null) {
nome = $filter('latinize')(usuario.mensagem.nome.toLowerCase());
} else if (usuario.mensagem.usuario_nome != null) {
nome = $filter('latinize')(usuario.mensagem.usuario_nome.toLowerCase());
} else {
nome = $filter('latinize')(usuario.mensagem.nome.toLowerCase());
}
if (nome.indexOf($filter('latinize')($scope.filters.texto)) > -1 &&
MensageriaFilter.getInstance('mensageria-filter-geral').filtrar(usuario)) {
usuario.exibir = true;
} else {
usuario.exibir = false;
}
});
_.each($scope.contatos, function (contato) {
contato.exibir = false;
if (contato.nome.indexOf($scope.filters.texto) > -1 &&
MensageriaFilter.getInstance('mensageria-filter-geral').filtrar(contato)) {
contato.exibir = true;
} else {
contato.exibir = false;
}
})
}
MensageriaChatUsuario.on('ocultarContatos', function () {
$scope.contatos = [];
});
/**
* @method _obterContatos
*/
function _obterContatos() {
return MensageriaService.findContatos(true);
}
/**
* @method _obterUsuarios
*/
function _obterUsuarios() {
return MensageriaService.findUsuarios(false);
}
/**
* @method _obterUsuariosOnline
*/
function _obterUsuariosOnline() {
return MensageriaService.pegarUsuariosOnline();
}
/**
* @method _obterGrupos
*/
function _obterGrupos() {
return MensageriaService.findGruposUsuarios();
}
/**
* @method _obterGrupo
* @param {*} id
*/
function _obterGrupo(id) {
return MensageriaService.findGrupo(id);
}
/**
* @method _novaConversa
* @param {*} usuario
*/
function _novaConversa(usuario) {
var contato = _.find($scope.contatos, function (contato) { return contato.id === usuario.id && (contato.isGrupo == null || contato.isGrupo == false); });
if (contato != null) {
usuario.nome = contato.nome;
usuario.nome_departamento = contato.nome_departamento;
usuario.DepartamentoId = contato.DepartamentoId;
}
usuario.exibir = true;
usuario.online = 1;
}
/**
* @method _novaConversaRemetente
* @param {*} usuario
*/
function _novaConversaRemetente(usuario) {
var contato = _.find($scope.contatos, function (contato) { return contato.id === usuario.id && (contato.isGrupo == null || contato.isGrupo == false); });
MensageriaService.pegarUsuariosOnline().then(function (usuariosOnlineIds) {
if (contato != null) {
usuario.nome = contato.nome;
usuario.nome_departamento = contato.nome_departamento;
usuario.DepartamentoId = contato.DepartamentoId;
}
var compareUsuariosIds = _.map(usuariosOnlineIds, function (user) {
return user;
});
usuario.exibir = true;
if (_.filter(compareUsuariosIds, function (compare) {
return compare === usuario.id;
}).length > 0) {
usuario.online = 1;
} else {
usuario.online = 0;
}
if (usuario.isGrupo == true) {
usuario.online = 1;
}
});
}
/**
* @method _formatDate
* @param {*} date
*/
function _formatDate(date) {
moment.locale('pt-br', {
calendar: {
lastWeek: 'DD/MM/YYYY',
lastDay: '[Ontem]',
sameDay: 'LT',
sameElse: 'DD/MM/YYYY'
}
});
return moment(date).calendar();
}
/**
* @method buscarUsuarios
* @param {*} texto
*/
function buscarUsuarios(texto) {
var usuarios = [];
if ($scope.compartilhando) {
var participantes = [];
var responsavelProperty = '';
if ($scope.compartilhamentoDetalhes.tipoObjeto == 'zonaObservacao' || $scope.compartilhamentoDetalhes.tipoObjeto == 'incidente') {
if ($scope.compartilhamentoDetalhes.GruposUsuarios != null && $scope.compartilhamentoDetalhes.GruposUsuarios.Usuarios != null) {
participantes = _.chain($scope.compartilhamentoDetalhes.GruposUsuarios.Usuarios)
.map()
.flatten()
.concat($scope.compartilhamentoDetalhes.Usuarios)
.uniqBy('id')
.value();
}
} else if ($scope.compartilhamentoDetalhes.tipoObjeto == 'baseConhecimento' || $scope.compartilhamentoDetalhes.tipoObjeto == 'planejamento') {
if ($scope.compartilhamentoDetalhes.GruposUsuariosParticipantes != null && $scope.compartilhamentoDetalhes.GruposUsuariosParticipantes.Usuarios != null) {
participantes = _.chain($scope.compartilhamentoDetalhes.GruposUsuariosParticipantes.Usuarios)
.map()
.flatten()
.concat($scope.compartilhamentoDetalhes.UsuariosParticipantes)
.uniqBy('id')
.value();
}
}
var participantes_ = [];
if (participantes != null && participantes.length > 0) {
_.each(participantes, function (usuario) {
if (usuario != null) {
participantes_.push(usuario);
}
});
}
participantes = participantes_;
if ($scope.compartilhamentoDetalhes.tipoObjeto == 'incidente') {
participantes.push($scope.compartilhamentoDetalhes.Responsavel);
responsavelProperty = 'Responsavel';
participantes.push($scope.compartilhamentoDetalhes.Owner);
responsavelProperty = 'criador';
} else {
participantes.push($scope.compartilhamentoDetalhes.criador);
responsavelProperty = 'criador';
}
var usuario_ = $scope.usuarios[0];
if (usuario_ == null) {
setTimeout(function () {
buscarUsuarios('');
}, 500);
}
var participantes_ = participantes[0];
if (participantes_ == null) {
usuarios = $scope.usuarios;
} else {
_.remove(participantes, { id: $scope.me.id });
usuarios = participantes;
}
_.each(usuarios, function (usuario) {
if (usuario != null) {
usuario.exibir = true;
}
});
} else {
usuarios = $scope.usuarios;
}
if (!texto) {
$scope.selecionados = $scope.usuarios;
}
texto = $filter('latinize')(texto.toLowerCase());
if (texto.lenght == 0) {
$scope.selecionados = $scope.usuarios;
}
$scope.selecionados = [];
angular.forEach(usuarios, function (usuario) {
var nome;
if (usuario.isGrupo) {
nome = $filter('latinize')(usuario.mensagem.nome.toLowerCase());
} else {
nome = $filter('latinize')(usuario.nome.toLowerCase());
}
if (nome.indexOf(texto) !== -1) {
$scope.selecionados.push(usuario);
}
});
return $scope.selecionados;
}
/**
* @method buscarContatos
* @param {*} texto
*/
function buscarContatos(texto) {
var contatos = [];
if ($scope.compartilhando) {
var participantes = [];
var responsavelProperty = '';
if ($scope.compartilhamentoDetalhes.tipoObjeto == 'zonaObservacao' || $scope.compartilhamentoDetalhes.tipoObjeto == 'incidente') {
participantes = _.chain($scope.compartilhamentoDetalhes.GruposUsuarios)
.map('Usuarios')
.flatten()
.concat($scope.compartilhamentoDetalhes.Usuarios)
.uniqBy('id')
.value();
} else if ($scope.compartilhamentoDetalhes.tipoObjeto == 'baseConhecimento' || $scope.compartilhamentoDetalhes.tipoObjeto == 'planejamento') {
participantes = _.chain($scope.compartilhamentoDetalhes.GruposUsuariosParticipantes)
.map('Usuarios')
.flatten()
.concat($scope.compartilhamentoDetalhes.UsuariosParticipantes)
.uniqBy('id')
.value();
}
if ($scope.compartilhamentoDetalhes.tipoObjeto == 'incidente') {
participantes.push($scope.compartilhamentoDetalhes.Responsavel);
responsavelProperty = 'Responsavel';
} else {
participantes.push($scope.compartilhamentoDetalhes.criador);
responsavelProperty = 'criador';
}
if (!participantes.length || (participantes.length == 1 &&
$scope.compartilhamentoDetalhes[responsavelProperty])) {
contatos = $scope.contatos;
} else {
_.remove(participantes, { id: $scope.me.id });
usuarios = participantes;
}
_.each(contatos, function (contato) {
contato.exibir = true;
});
} else {
contatos = $scope.contatos;
}
if (!texto) {
return contatos;
}
texto = $filter('latinize')(texto.toLowerCase());
return _.filter(contatos, function (contato) {
return _.includes($filter('latinize')(contato.nome.toLowerCase()), texto);
});
}
$scope.toTrustedHTML = function (html) {
return $sce.trustAsHtml(html);
}
/**
* @method abrirChatUsuario
* @param {*} usuario
*/
function abrirChatUsuario(usuario) {
if (!usuario.isGrupo) {
if (usuario != null && usuario.mensagem != null && usuario.mensagem.usuario != null && usuario.mensagem.destinatario) {
MensageriaService.atualizarMensagensLidas(usuario.mensagem.usuario, usuario.mensagem.destinatario);
} else if (usuario != null && usuario.id != null) {
MensageriaService.atualizarMensagensLidas(usuario.id, null);
}
if (usuario.novasMensagens != null && usuario.novasMensagens > 0) {
MensageriaManager.countMsgs -= usuario.novasMensagens;
}
_.each($scope.unreadMessages, function (unread) {
if (usuario.mensagem != null
&& usuario.mensagem.usuario != null
&& usuario.mensagem.destinatario != null
&& unread.remetente != null
&& unread.destinatario != null
&& unread.remetente == usuario.mensagem.usuario
&& unread.destinatario == usuario.mensagem.destinatario) {
MensageriaManager.countMsgs -= unread.countMessages;
unread.countMessages = 0;
}
});
// quando o cara clicar, diminui as mensagens nao lidas e new message
usuario.newMessage = [];
if (MensageriaManager.countMsgs > 0) {
document.title = '(' + MensageriaManager.countMsgs + ') S4C';
} else {
document.title = 'S4C';
}
usuario.novasMensagens = 0;
if ($scope.compartilhando) {
$scope.compartilharScreen = true;
$scope.compartilharTipo = 'usuario';
$scope.compartilharNext = usuario;
} else {
$scope.usuarioChat = usuario;
$scope.state.chatGrupoAtivo = false;
$scope.state.chatUsuarioAtivo = true;
}
}
else {
abrirChatGrupo(usuario);
}
}
/**
* @method abrirChatGrupo
* @param {*} usuario
*/
function abrirChatGrupo(usuario) {
if (usuario.newMessage != null && usuario.newMessage.length > 0) {
MensageriaManager.countMsgs -= usuario.newMessage.length;
}
_.each($scope.unreadMessagesGroup, function (unread) {
if (usuario.mensagem != null
&& usuario.mensagem.id != null
&& unread.idGrupo != null
&& unread.idGrupo == usuario.mensagem.id) {
MensageriaManager.countMsgs -= unread.countMessages;
unread.countMessages = 0;
}
});
// Limpa a bolinha azul com a numeração de novas mensagens
usuario.newMessage = [];
if (MensageriaManager.countMsgs > 0) {
document.title = '(' + MensageriaManager.countMsgs + ') S4C';
} else {
document.title = 'S4C';
}
usuario.novasMensagens = 0;
var grupo = (usuario.mensagem || usuario);
MensageriaService.atualizarMensagensLidasGrupo($scope.me.id, grupo.id);
if ($scope.compartilhando) {
$scope.compartilharScreen = true;
$scope.compartilharTipo = 'grupo';
$scope.compartilharNext = grupo;
} else {
$scope.grupoChat = grupo;
$scope.state.chatGrupoAtivo = true;
$scope.state.chatUsuarioAtivo = false;
}
}
}
}
}
}());