/**
* @ngdoc directives
* @name MensageriaAdicionarGrupo
* @module s4c.directives.mensageria.adicionarGrupo.MensageriaAdicionarGrupo
*
* @description
* `MensageriaAdicionarGrupo` Controller da funcionalidade de adicionar grupos no módulo de mensageria
*
*
*/
(function () {
angular.module('s4c.components.collaboration')
.directive('mensageriaAdicionarGrupo', MensageriaAdicionarGrupo);
MensageriaAdicionarGrupo.$inject = [
'MainService',
'AdicionarGrupoService',
'MensageriaService',
'AuthService',
'$q',
'$filter',
'$mdDialog',
'FileUploader',
'localize',
'MensageriaChatUsuario'
];
function MensageriaAdicionarGrupo(MainService, AdicionarGrupoService, MensageriaService, AuthService, $q, $filter, $mdDialog, FileUploader, localize, MensageriaChatUsuario) {
return {
restrict: 'E',
templateUrl: 'app/directives/mensageria/adicionar-grupo/adicionar-grupo.html',
replace: true,
scope: {
isAddGrupo: '='
},
controller: function ($scope) {
$scope.res = $scope.$root.res;
var uploader = $scope.uploader = new FileUploader(),
uploadCallbackQueue = [];
uploader.clearQueue();
/**
*
*
* @method filters
*
*/
$scope.uploader.filters.push({
'name': 'enforceMaxFileSize',
'fn': function (item, evt) {
var megaByte = parseInt(item.size / 1000000) + "MB";
if (item.size <= 26214400) {
return item.size <= 26214400
} else {
$mdDialog
.show($mdDialog.alert()
.title('Tamanho de arquivo ultrapassado')
.content('O limite do tamanho de arquivos para upload é de 25MB. Seu arquivo possui ' + megaByte + ' - limite ultrapassado!')
.ok('OK'))
return item.size <= 26214400
}
}
});
$scope.uploader.onCompleteItem = function (item, response) {
$scope.mensagem = response;
};
$scope.uploader.onAfterAddingFile = function (item, evt, arquivo) {
item.novoNome = item.file.name;
enviarArquivo();
}
function ext(filename) {
var index = _.lastIndexOf(filename, '.');
return filename.substring(index, filename.length);
}
/**
*
*
* @method onBeforeUploadItem
*
*/
$scope.uploader.onBeforeUploadItem = function (item) {
item.url = uploader.url;
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
item.headers = {
'Authorization': 'Bearer ' + tokenObj.access_token
};
item.file.name = item.novoNome + ext(item.file.name);
};
/**
*
*
* @method onProgressItem
*
*/
$scope.uploader.onProgressItem = function (fileItem, progress) {
console.info('onProgressItem', fileItem, progress);
};
/**
*
*
* @method onCompleteAll
*
*/
$scope.uploader.onCompleteAll = function (result) {
_.each(uploadCallbackQueue, function (callback) {
callback();
});
};
/**
*
*
* @method mostrarImagem
*
*/
$scope.mostrarImagem = function () {
$('#adicionar_grupo_arquivo').each(function (index) {
if ($('#adicionar_grupo_arquivo').eq(index).val() != "") {
$scope.readURL(this);
}
});
}
/**
*
*
* @method readURL
*
*/
$scope.readURL = function (input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$("#renderCropper").empty();
var img = $('<img />',
{
id: 'image',
src: e.target.result,
style: 'width: 100%'
}).appendTo($('#renderCropper'));
var cropper = new Cropper(img[0], {
aspectRatio: 1,
crop: function (e) {
document.getElementById('newGrupoX').value = e.detail.x;
document.getElementById('newGrupoY').value = e.detail.y;
document.getElementById('newGrupoWidth').value = e.detail.width;
document.getElementById('newGrupoHeight').value = e.detail.height;
},
zoomable: true,
scalable: true,
movable: true,
background: false,
viewMode: 1
});
};
reader.readAsDataURL(input.files[0]);
}
}
/**
*
*
* @method enviarArquivo
*
*/
function enviarArquivo() {
$scope.mostrarImagem();
}
$scope.uploader.alias = 'arquivo';
$scope.uploader.removeAfterUpload = true;
},
link: function ($scope, $elem, $attrs) {
angular.extend($scope, {
desativar: desativar,
buscarUsuarios: buscarUsuarios,
salvarGruposUsuarios: salvarGruposUsuarios,
selectCheckBox,
adicionarParticipanteGrupo: adicionarParticipanteGrupo,
usuarios: [],
usuariosParticipantes: [],
administrador: null,
res: $scope.$root.res,
checkboxSelected: false,
filters: {
texto: ''
}
});
MensageriaChatUsuario.on('obterContatos', function () {
_carregarDados();
});
/**
*
*
* @method abrirUpload
*
*/
$scope.abrirUpload = function () {
$("#adicionar_grupo_arquivo").click();
}
/**
*
*
* @method toBlob
*
* @param grupo {Object}
*
*/
function toBlob(grupo) {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.height = document.getElementById('newGrupoHeight').value;
canvas.width = document.getElementById('newGrupoWidth').value;
ctx.drawImage(document.getElementById('image'), document.getElementById('newGrupoX').value, document.getElementById('newGrupoY').value, canvas.width, canvas.height, 10, 10, canvas.width, canvas.height);
if (canvas.toBlob) {
canvas.toBlob(function (blob) {
var formData = new FormData();
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
formData.append('arquivo', blob, "capagrupo.png");
$.ajax('/grupo_usuario_mensageria/imagem/' + grupo.id, {
method: "POST",
data: formData,
processData: false,
contentType: false,
headers: {
'Authorization': 'Bearer ' + tokenObj.access_token
},
success: function (data) {
console.log(data);
console.log('Upload success');
},
error: function () {
console.log('Upload error');
}
});
});
}
}
/**
*
*
* @method _carregarDados
*
*
*/
function _carregarDados() {
$q.all([
MensageriaService.findContatos(true),
MensageriaService.findUsuarioById(AuthService.user.info.id)
]).then(function (results) {
if ($scope.usuariosParticipantes != null) {
$scope.usuariosParticipantes = [];
}
$scope.usuarios = angular.copy(results[0]);
$scope.usuarios.push(results[1]);
$scope.usuarios = $filter('orderBy')($scope.usuarios, 'nome')
$scope.administrador = results[1];
$scope.usuariosParticipantes.push($scope.administrador);
$scope.filters.texto = '';
});
}
/**
*
*
* @method salvarGruposUsuarios
*
*
*/
function salvarGruposUsuarios() {
MensageriaService.findGruposUsuarios()
.then(function (gruposUsuarios) {
if (!$scope.grupoMensageria || _.includes(_.map(gruposUsuarios, 'nome'), $scope.grupoMensageria.nome) || _.isEmpty($scope.grupoMensageria.nome)) {
var confirm = $mdDialog.confirm()
.title(localize.getLocalizedString('COMUM_AVISO'))
.content(localize.getLocalizedString('MENSAGERIA_ERRONOMEGRUPO'))
.ariaLabel(localize.getLocalizedString('COMUM_ERRO'))
.ok(localize.getLocalizedString('COMUM_OK'));
$mdDialog.show(confirm);
}
else {
var participantesIds = [];
var participantesNomes = [];
angular.forEach($scope.usuariosParticipantes, function (participante) {
participantesIds.push(participante.id);
participantesNomes.push(participante.nome);
});
$scope.grupoMensageria.participantes = participantesIds;
$scope.grupoMensageria.nomeParticipantes = participantesNomes;
MensageriaService.adicionarGruposUsuarios($scope.grupoMensageria)
.then(function (result) {
if ($("#image").length > 0) {
toBlob(result);
}
result.exibir = true;
AdicionarGrupoService.trigger('adicionar', result);
$scope.grupoMensageria.nome = '';
desativar();
});
}
});
}
/**
*
*
* @method desativar
*
*
*/
function desativar() {
$scope.isAddGrupo = false;
$scope.checkboxSelected = false;
$scope.usuariosParticipantes = [];
angular.forEach($scope.usuarios, function (usuario) {
usuario.isAdded = false;
});
$scope.filters.texto = '';
}
$scope.lastText;
$scope.usuariosFiltrados = $scope.usuarios;
/**
*
*
* @method buscarUsuarios
*
*
* @param texto {Object}
*/
function buscarUsuarios(texto) {
if (!texto) {
return $scope.usuarios;
}
texto = $filter('latinize')(texto.toLowerCase());
if (texto != $scope.lastText) {
$scope.checkboxSelected = false;
}
$scope.lastText = texto;
var items = _.filter($scope.usuarios, function (usuario) {
return _.includes($filter('latinize')(usuario.nome.toLowerCase()), texto);
});
items = $filter('orderBy')(items, 'nome');
$scope.usuariosFiltrados = items;
}
/**
*
*
* @method adicionarParticipanteGrupo
*
*
* @param participante {Object}
*
*/
function adicionarParticipanteGrupo(participante) {
if (participante.id == $scope.administrador.id) {
return;
}
if (participante.isAdded) {
participante.isAdded = false;
var index = $scope.usuariosParticipantes.indexOf(participante);
$scope.usuariosParticipantes.splice(index, 1);
return;
}
participante.isAdded = true;
$scope.usuariosParticipantes.push(participante);
$scope.usuariosParticipantes = $filter('orderBy')($scope.usuariosParticipantes, 'nome');
}
/**
*
*
* @method selectCheckBox
*
*
*/
function selectCheckBox() {
if ($scope.checkboxSelected) {
$scope.checkboxSelected = false;
return;
}
$scope.checkboxSelected = true;
}
}
}
}
}());