/**
* @ngdoc controllers
* @name Icones
* @module s4c.components.admin.controllers.Icones
*
* @description
* `AdminIconesCtrl` Controller da tela de Upload de Ícones do módulo de administração
*
*
*/
(function () {
'use strict';
AdminIconesCtrl.$inject = [
'$scope',
'$http',
'$mdDialog',
'API_ENDPOINT',
'ngFileReader',
'$rootScope',
'Usuario',
'FileUploader'
];
angular.module('s4c.controllers.AdminIconesCtrl', [
's4c.services.Categoria',
's4c.directives.ngFileReader'
]).controller('AdminIconesCtrl', AdminIconesCtrl);
function AdminIconesCtrl($scope, $http, $mdDialog, API_ENDPOINT, ngFileReader, $rootScope, Usuario, FileUploader) {
$scope.res = $rootScope.res;
/**
* @method carregarIcones
*/
function carregarIcones() {
$http.get(API_ENDPOINT + "filemanager/showicons")
.then(function (result) {
$scope.listIcons = [];
$scope.listIconsName = [];
$scope.listIcons = result.data;
for (var index in $scope.listIcons) {
var str = $scope.listIcons[index].filePath;
var n = str.indexOf("uploads");
var res = str.substring(n, str.length);
$scope.listIcons[index].filePath = res;
$scope.listIconsName.push($scope.listIcons[index].fileName);
}
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method salvarImagem
*/
function salvarImagem() {
var eviarAlerta = false;
for (var element in uploader.queue) {
if ($.inArray(uploader.queue[element].novoNome, $scope.listIconsName) >= 0) {
eviarAlerta = true;
}
}
if (eviarAlerta) {
var confirm = $mdDialog.confirm()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('COMUM_ICONE_DUPLICADO'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'));
$mdDialog.show(confirm).then(function () {
enviarArquivo(true);
}, function () {
enviarArquivo(false);
});
} else {
_salvarArquivo();
}
}
/**
* @method cancelar
*/
function cancelar() {
uploader.clearQueue();
$("#renderCropper").empty();
$scope.listIconsToRemove = [];
}
/**
* @method toBlob
*/
function toBlob() {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.height = 400;
canvas.width = 400;
ctx.drawImage(document.getElementById('image'), 10, 10);
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, "arquivo.png");
$.ajax('/filemanager/addarquivo', {
method: "POST",
data: formData,
processData: false,
contentType: false,
headers: {
'Authorization': 'Bearer ' + tokenObj.access_token
},
success: function (data) {
$("#renderCropper").empty();
carregarIcones();
},
error: function () {
console.log('Upload error');
}
});
});
}
}
$scope.input = angular.element('input.uploadArquivo');
function abrirUpload() {
$("#renderCropper").empty();
$scope.input.click();
$scope.listIconsToRemove = [];
}
var uploader = $scope.uploader = new FileUploader(),
uploadCallbackQueue = [];
uploader.clearQueue();
$scope.uploader.filters.push({
'name': 'enforceMaxFileSize',
'fn': function (item, evt) {
if (item.size <= 51200) {
return item.size <= 51200
} else {
uploader.clearQueue();
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_TAMANHOFILEULTRAPASSADO'))
.content($scope.res('LIMITE_ICONE_ULTRAPASSADO') + " " + parseInt(item.size / 1024) + "KB" + " - " + $scope.res('LIMITE_ULTRAPASSADO'))
.ok($scope.res('COMUM_OK')));
return item.size <= 51200;
}
}
});
$scope.uploader.filters.push({
'name': 'enforceTypeFile',
'fn': function (item, evt) {
if (isImage(ext(item.name))) {
return true;
} else {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_TIPO_ARQUIVO_INVALIDO'))
.content($scope.res('COMUM_TIPO_IMAGEM_VALIDA'))
.ok($scope.res('COMUM_OK')));
return false;
}
}
});
$scope.uploader.onCompleteItem = function (item, response) {
$scope.mensagem = response;
};
$scope.uploader.onAfterAddingFile = function (item, evt, arquivo) {
item.novoNome = item.file.name;
if (item.file) {
_preview(item);
}
}
/**
* @method _preview
* @param {*} item
*/
function _preview(item) {
var reader = new FileReader();
reader.onload = function (e) {
var label = $('<label />', {
id: 'arquivo_anexado' + item.file.name,
for: 'myvalue',
class: 'fake-label nopad',
}).appendTo($('#renderCropper'));
$("#arquivo_anexado" + item.file.name).text(item.file.name);
var img = $('<img />',
{
id: 'image',
src: e.target.result,
style: 'max-width: 24px; max-height: 24px; margin-left: 10px;'
}).appendTo($('#renderCropper'));
};
reader.readAsDataURL(item._file);
}
function ext(filename) {
var index = _.lastIndexOf(filename, '.');
return filename.substring(index, filename.length);
}
$scope.uploader.onBeforeUploadItem = function (item) {
item.url = uploader.url;
var token = window.sessionStorage.getItem('s4cToken');
try {
var tokenObj = JSON.parse(token);
item.headers = {
'Authorization': 'Bearer ' + tokenObj.access_token
};
} catch (erro) {
item.headers = {
'Authorization': 'Bearer ' + token
};
}
item.file.name = item.novoNome;
};
$scope.uploader.onProgressItem = function (fileItem, progress) {
console.info('onProgressItem', fileItem, progress);
//listaEquals = [];
};
$scope.uploader.onCompleteAll = function (result) {
_.each(uploadCallbackQueue, function (callback) {
callback();
});
};
/**
* @method mostrarImagem
*/
$scope.mostrarImagem = function () {
$('#arquivo').each(function (index) {
if ($('#arquivo').eq(index).val() != "") {
$scope.readURL(this);
}
});
}
/**
* @method readURL
*/
$scope.readURL = function (input) {
if (input.files && input.files[index]) {
var reader = new FileReader();
reader.onload = function (e) {
$("#renderCropper").empty();
var label = $('<label />', {
id: 'arquivo_anexado',
for: 'myvalue',
class: 'fake-label nopad',
}).appendTo($('#renderCropper'));
$("#arquivo_anexado").text(input.files[0]);
var img = $('<img />',
{
id: 'image' + index,
src: e.target.result,
style: 'max-width: 24px; max-height: 24px;'
}).appendTo($('#renderCropper'));
};
reader.readAsDataURL(input.files[0]);
}
}
/**
* @method enviarArquivo
* @param {*} substituir
*/
function enviarArquivo(substituir) {
var listIconsToAdd = [];
for (var element in uploader.queue) {
if ($.inArray(uploader.queue[element].novoNome, $scope.listIconsName) >= 0 && substituir) {
var iconToRemove = _.find($scope.listIcons, function (icons) { return icons.filePath.contains(uploader.queue[element].novoNome) });
if (iconToRemove) {
$scope.listIconsToRemove.push(iconToRemove.fileId);
listIconsToAdd.push(uploader.queue[element]);
}
}
else if ($.inArray(uploader.queue[element].novoNome, $scope.listIconsName) < 0) {
listIconsToAdd.push(uploader.queue[element]);
}
}
uploader.clearQueue();
for (var index in listIconsToAdd) {
uploader.queue.push(listIconsToAdd[index]);
}
if ($scope.listIconsToRemove.length > 0) {
for (var index in $scope.listIconsToRemove) {
$http.delete(API_ENDPOINT + "filemanager/" + $scope.listIconsToRemove[index]).then(function () {
if (index == $scope.listIconsToRemove.length - 1) {
_salvarArquivo();
}
});
}
} else {
_salvarArquivo();
}
}
/**
* @method _salvarArquivo
*/
function _salvarArquivo() {
$scope.isUploading = true;
uploader.url = '/filemanager/addarquivo/ICONE';
uploader.uploadAll();
uploadCallbackQueue.push(function () {
$scope.isUploading = false;
$scope.arquivosPraSubir = false;
carregarIcones();
});
$("#renderCropper").empty();
}
$scope.uploader.alias = 'arquivo';
$scope.uploader.removeAfterUpload = true;
/**
* @method copyUrlIcons
* @param {*} icons
*/
function copyUrlIcons(icons) {
var tempInput = document.createElement("input");
tempInput.style = "position: absolute; left: -1000px; top: -1000px";
tempInput.value = icons.filePath;
document.body.appendChild(tempInput);
tempInput.select();
document.execCommand("copy");
document.body.removeChild(tempInput);
$mdDialog.show({
controller: function ($scope) {
$scope.res = $scope.$root.res;
$scope.icons = icons;
$scope.ok = function () {
$mdDialog.hide();
};
$scope.cancelar = function () {
$mdDialog.cancel();
};
$scope.deleteIcons = function (icons) {
var confirm = $mdDialog.confirm()
.title($scope.res('COMUM_MENSAGEM_ACAOIRREVERSIVEL'))
.content($scope.res('CERTEZA_REMOVER_ICONE'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'));
$mdDialog.show(confirm).then(function () {
$http.delete(API_ENDPOINT + "filemanager/" + icons.fileId)
.then(function (result) {
carregarIcones();
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('REMOVER_ICONE_SUCESSO'))
.ok($scope.res('COMUM_OK')));
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
};
},
templateUrl: 'app/components/admin/modulos/manutencao/icones/dialogIcones.html'
});
}
/**
* @method isImage
* @param {*} extension
*/
function isImage(extension) {
if (extension.contains(".jpg")) {
return true;
}
if (extension.contains(".jpeg")) {
return true;
}
if (extension.contains(".png")) {
return true;
}
if (extension.contains(".bmp")) {
return true;
}
if (extension.contains(".svg")) {
return true;
}
if (extension.contains(".gif")) {
return true;
}
if (extension.contains(".tiff")) {
return true;
}
if (extension.contains(".tif")) {
return true;
}
return false;
}
$(function () {
carregarIcones();
});
angular.extend($scope, {
carregarIcones: carregarIcones,
salvarImagem: salvarImagem,
abrirUpload: abrirUpload,
copyUrlIcons: copyUrlIcons,
cancelar: cancelar
});
}
}());