sogo/UI/WebServerResources/js/Contacts/AddressBookController.js

211 lines
7.2 KiB
JavaScript
Raw Normal View History

/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
(function() {
'use strict';
/**
* @ngInject
*/
AddressBookController.$inject = ['$scope', '$q', '$window', '$state', '$timeout', '$mdDialog', 'Account', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];
function AddressBookController($scope, $q, $window, $state, $timeout, $mdDialog, Account, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {
var vm = this;
AddressBook.selectedFolder = stateAddressbook;
vm.service = AddressBook;
vm.selectedFolder = stateAddressbook;
vm.selectCard = selectCard;
vm.toggleCardSelection = toggleCardSelection;
vm.newComponent = newComponent;
vm.notSelectedComponent = notSelectedComponent;
vm.unselectCards = unselectCards;
vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;
vm.saveSelectedCards = saveSelectedCards;
2015-08-10 15:48:47 +02:00
vm.copySelectedCards = copySelectedCards;
vm.selectAll = selectAll;
vm.sort = sort;
vm.sortedBy = sortedBy;
vm.cancelSearch = cancelSearch;
vm.newMessage = newMessage;
vm.newMessageWithSelectedCards = newMessageWithSelectedCards;
vm.newMessageWithRecipient = newMessageWithRecipient;
vm.mode = { search: false };
2015-05-09 20:37:40 +02:00
function selectCard(card) {
$state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});
}
2015-05-09 20:37:40 +02:00
function toggleCardSelection($event, card) {
card.selected = !card.selected;
$event.preventDefault();
$event.stopPropagation();
}
function newComponent(ev) {
2015-05-09 20:37:40 +02:00
$mdDialog.show({
parent: angular.element(document.body),
targetEvent: ev,
clickOutsideToClose: true,
escapeToClose: true,
template: [
'<md-dialog aria-label="' + l('Create component') + '">',
2015-08-04 22:39:02 +02:00
' <md-dialog-content>',
2015-05-09 20:37:40 +02:00
' <div layout="column">',
' <md-button ng-click="create(\'card\')">',
' ' + l('Contact'),
' </md-button>',
' <md-button ng-click="create(\'list\')">',
' ' + l('List'),
' </md-button>',
' </div>',
2015-08-04 22:39:02 +02:00
' </md-dialog-content>',
2015-05-09 20:37:40 +02:00
'</md-dialog>'
].join(''),
locals: {
addressbookId: vm.selectedFolder.id
2015-05-09 20:37:40 +02:00
},
controller: ComponentDialogController
});
/**
* @ngInject
*/
ComponentDialogController.$inject = ['scope', '$mdDialog', '$state', 'addressbookId'];
function ComponentDialogController(scope, $mdDialog, $state, addressbookId) {
2015-05-09 20:37:40 +02:00
scope.create = function(type) {
$mdDialog.hide();
$state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });
};
2015-05-09 20:37:40 +02:00
}
}
function notSelectedComponent(currentCard, type) {
return (currentCard && currentCard.c_component == type && !currentCard.selected);
}
function unselectCards() {
2016-03-03 19:38:54 +01:00
_.forEach(vm.selectedFolder.$cards, function(card) { card.selected = false; });
}
function confirmDeleteSelectedCards() {
Dialog.confirm(l('Warning'),
l('Are you sure you want to delete the selected contacts?'),
{ ok: l('Delete') })
.then(function() {
// User confirmed the deletion
var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; });
vm.selectedFolder.$deleteCards(selectedCards);
delete vm.selectedFolder.selectedCard;
});
}
function saveSelectedCards() {
var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; });
2016-03-03 19:38:54 +01:00
var selectedUIDs = _.map(selectedCards, 'id');
$window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');
}
2015-08-10 15:48:47 +02:00
function copySelectedCards(folder) {
var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; });
2015-08-10 15:48:47 +02:00
vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {
// TODO: refresh target addressbook?
});
}
function selectAll() {
2016-03-03 19:38:54 +01:00
_.forEach(vm.selectedFolder.$cards, function(card) {
card.selected = true;
});
}
function sort(field) {
vm.selectedFolder.$filter('', { sort: field });
}
function sortedBy(field) {
return AddressBook.$query.sort == field;
}
function cancelSearch() {
vm.mode.search = false;
vm.selectedFolder.$filter('');
}
function newMessage($event, recipients) {
Account.$findAll().then(function(accounts) {
var account = _.filter(accounts, function(o) {
if (o.id === 0)
return o;
})[0];
// We must initialize the Account with its mailbox
// list before proceeding with message's creation
account.$getMailboxes().then(function(mailboxes) {
account.$newMessage().then(function(message) {
$mdDialog.show({
parent: angular.element(document.body),
targetEvent: $event,
clickOutsideToClose: false,
escapeToClose: false,
templateUrl: '../Mail/UIxMailEditor',
controller: 'MessageEditorController',
controllerAs: 'editor',
locals: {
stateAccounts: accounts,
stateMessage: message,
stateRecipients: recipients
}
});
});
});
});
}
function newMessageWithRecipient($event, recipient, fn) {
var recipients = [{full: fn + ' <' + recipient + '>'}];
vm.newMessage($event, recipients);
$event.stopPropagation();
$event.preventDefault();
}
function newMessageWithSelectedCards($event) {
var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; });
var promises = [], recipients = [];
2016-03-03 19:38:54 +01:00
_.forEach(selectedCards, function(card) {
if (card.c_component == 'vcard' && card.c_mail.length) {
recipients.push({full: card.c_cn + ' <' + card.c_mail + '>'});
}
else if (card.$isList()) {
// If the list's members were already fetch, use them
if (angular.isDefined(card.refs) && card.refs.length) {
2016-03-03 19:38:54 +01:00
_.forEach(card.refs, function(ref) {
if (ref.email.length)
recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});
});
}
else {
promises.push(vm.selectedFolder.$getCard(card.id).then(function(card) {
return card.$futureCardData.then(function(data) {
2016-03-03 19:38:54 +01:00
_.forEach(data.refs, function(ref) {
if (ref.email.length)
recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});
});
});
}));
}
}
});
$q.all(promises).then(function() {
if (recipients.length)
vm.newMessage($event, recipients);
});
}
}
angular
.module('SOGo.ContactsUI')
.controller('AddressBookController', AddressBookController);
})();