OC.Contacts = OC.Contacts || {}; (function(window, $, OC) { 'use strict'; var OtherBackendConfig = function(storage, addressbooks, $template) { this.storage = storage; this.addressbooks = addressbooks; this.$template = $template; this.getConnectors(); }; OC.Contacts.OtherBackendConfig = OtherBackendConfig; OtherBackendConfig.prototype.openAddressbookUi = function() { this.addressbookUiInit(); }; OtherBackendConfig.prototype.editAddressbookUI = function(addressbook) { var self = this; $('#addressbooks-ui-addressbookid').val(addressbook.id); $('#addressbooks-ui-name').val(addressbook.displayname); $('#addressbooks-ui-uri').val(addressbook.uri); $('#addressbooks-ui-description').val(addressbook.description); $('#addressbooks-ui-ldapurl').val(addressbook.ldapurl); $('#addressbooks-ui-ldapanonymous').attr('checked', (addressbook.ldapanonymous===true)); $('#addressbooks-ui-ldapreadonly').attr('checked', (addressbook.ldapreadonly===true)); $('#addressbooks-ui-ldapuser').val(addressbook.ldapuser); $('#addressbooks-ui-ldappass').val('nochange'); $('#addressbooks-ui-ldappass-modified').val('false'); $('#addressbooks-ui-ldappagesize').val(addressbook.ldappagesize); $('#addressbooks-ui-ldapbasednsearch').val(addressbook.ldapbasednsearch); $('#addressbooks-ui-ldapfilter').val(addressbook.ldapfilter); $('#addressbooks-ui-ldapbasednmodify').val(addressbook.ldapbasednmodify); $('#addressbooks-ui-uri').prop('disabled', true); if ($('#addressbooks-ui-ldapanonymous').prop('checked')) { $('#addressbooks-ui-ldapuser').prop('disabled', true); $('#addressbooks-ui-ldappass').prop('disabled', true); } else { $('#addressbooks-ui-ldapuser').removeProp('disabled'); $('#addressbooks-ui-ldappass').removeProp('disabled'); } if ($('#addressbooks-ui-ldapreadonly').prop('checked')) { $('#addressbooks-ui-ldapbasednmodify').prop('disabled', true); } else { $('#addressbooks-ui-ldapbasednmodify').removeProp('disabled'); } $('#addressbooks-ui-ldappass').change(function() { $('#addressbooks-ui-ldappass-modified').val('true'); }); this.addressbookUiInit(); var connectors = self.getConnectors(); $('#addressbooks-ui-ldapvcardconnector').empty(); var custom = true; for (var id = 0; id < connectors.length; id++) { var $option = null; if (connectors[id].id === addressbook.ldapconnectorid) { $option = $('').attr('selected','selected'); custom = false; } else { $option = $(''); } $('#addressbooks-ui-ldapvcardconnector').append($option); } if (custom) { var $option = $('').attr('selected','selected'); $('#addressbooks-ui-ldapvcardconnector').append($option); $('#addressbooks-ui-ldapvcardconnector-value-p').show(); $('#addressbooks-ui-ldapvcardconnector-copyfrom-p').show(); var connectors = self.getConnectors(); $('#addressbooks-ui-ldapvcardconnector-copyfrom').empty(); var $option = $('').attr('selected','selected'); $('#addressbooks-ui-ldapvcardconnector-copyfrom').append($option); for (var id = 0; id < connectors.length; id++) { $option = $(''); $('#addressbooks-ui-ldapvcardconnector-copyfrom').append($option); } $('#addressbooks-ui-ldapvcardconnector-value').text(addressbook.ldap_vcard_connector); } else { var $option = $(''); $('#addressbooks-ui-ldapvcardconnector').append($option); } }; OtherBackendConfig.prototype.addressbookUiOk = function($divDlg) { var defer = $.Deferred(); var addressbook = OC.Contacts.addressBooks; var error=false; var errorFields = []; $('[required]').each(function() { if ($(this).val() === '' && !$(this).attr('disabled')){ error = true; errorFields.push($(this).attr('placeholder')); } }); if (!error) { $('#addressbooks-ui-errortitle-p').empty(); $('#addressbooks-ui-errormessage-p').empty(); $.when(this.storage.addAddressBook($('#addressbooks-ui-backend').val(), { displayname: $('#addressbooks-ui-name').val(), description: $('#addressbooks-ui-description').val(), uri: ($('#addressbooks-ui-uri').val()==='')?$('#addressbooks-ui-name').val():$('#addressbooks-ui-uri').val(), ldapurl: $('#addressbooks-ui-ldapurl').val(), ldapanonymous: $('#addressbooks-ui-ldapanonymous').prop('checked')===true?'true':'false', ldapreadonly: $('#addressbooks-ui-ldapreadonly').prop('checked')===true?'true':'false', ldapuser: $('#addressbooks-ui-ldapuser').val(), ldappass: $('#addressbooks-ui-ldappass').val(), ldappagesize: $('#addressbooks-ui-ldappagesize').val(), ldapbasednsearch: $('#addressbooks-ui-ldapbasednsearch').val(), ldapfilter: $('#addressbooks-ui-ldapfilter').val(), ldapbasednmodify: $('#addressbooks-ui-ldapbasednmodify').val(), ldapvcardconnector: $('#addressbooks-ui-ldapvcardconnector').val(), ldapvcardconnectorvalue: $('#addressbooks-ui-ldapvcardconnector-value').val(), } )).then(function(response) { if(response.error) { var error = response.message; if(typeof cb === 'function') { cb({error:true, message:error}); } defer.reject(response); } else { var book = addressbook.insertAddressBook(response.data); $(document).trigger('status.addressbook.added'); if(typeof cb === 'function') { cb({error:false, addressbook: book}); } defer.resolve({error:false, addressbook: book}); } OC.Contacts.otherBackendConfig.addressbookUiClose($divDlg); }) .fail(function(jqxhr, textStatus, error) { $(this).removeClass('loading'); var err = textStatus + ', ' + error; console.log('Request Failed', + err); error = t('contacts', 'Failed adding address book: {error}', {error:err}); if(typeof cb === 'function') { cb({error:true, message:error}); } defer.reject({error:true, message:error}); OC.Contacts.otherBackendConfig.addressbookUiClose($divDlg); }); } else { $('#addressbooks-ui-errortitle-p').css('color', 'red').text(t('contacts', 'Error, missing parameters: ')); $('#addressbooks-ui-errormessage-p').css('color', 'red').text(errorFields.join(', ')); } }; OtherBackendConfig.prototype.addressbookUiEditOk = function($divDlg) { var defer = $.Deferred(); var error=false; var errorFields = []; $('[required]').each(function() { if ($(this).val() === '' && !$(this).attr('disabled')){ error = true; errorFields.push($(this).attr('placeholder')); } }); if (!error) { $.when(this.storage.updateAddressBook($('#addressbooks-ui-backend').val(), $('#addressbooks-ui-addressbookid').val(), {properties: { displayname: $('#addressbooks-ui-name').val(), description: $('#addressbooks-ui-description').val(), uri: $('#addressbooks-ui-uri').val(), ldapurl: $('#addressbooks-ui-ldapurl').val(), ldapanonymous: $('#addressbooks-ui-ldapanonymous').prop('checked')===true?'true':'false', ldapreadonly: $('#addressbooks-ui-ldapreadonly').prop('checked')===true?'true':'false', ldapuser: $('#addressbooks-ui-ldapuser').val(), ldappassmodified: $('#addressbooks-ui-ldappass-modified').val(), ldappass: $('#addressbooks-ui-ldappass').val(), ldappagesize: $('#addressbooks-ui-ldappagesize').val(), ldapbasednsearch: $('#addressbooks-ui-ldapbasednsearch').val(), ldapfilter: $('#addressbooks-ui-ldapfilter').val(), ldapbasednmodify: $('#addressbooks-ui-ldapbasednmodify').val(), ldapvcardconnector: $('#addressbooks-ui-ldapvcardconnector').val(), ldapvcardconnectorvalue: $('#addressbooks-ui-ldapvcardconnector-value').val(), } } )).then(function(response) { if(response.error) { error = response.message; if(typeof cb === 'function') { cb({error:true, message:error}); } defer.reject(response); } OC.Contacts.otherBackendConfig.addressbookUiClose($divDlg); }) .fail(function(jqxhr, textStatus, error) { $(this).removeClass('loading'); var err = textStatus + ', ' + error; console.log('Request Failed', + err); error = t('contacts', 'Failed adding address book: {error}', {error:err}); if(typeof cb === 'function') { cb({error:true, message:error}); } defer.reject({error:true, message:error}); }); } else { $('#addressbooks-ui-errortitle-p').css('color', 'red').text(t('contacts', 'Error, missing parameters: ')); $('#addressbooks-ui-errormessage-p').css('color', 'red').text(errorFields.join(', ')); } }; OtherBackendConfig.prototype.addressbookUiClose = function($divDlg) { $divDlg.ocdialog().ocdialog('close'); $divDlg.ocdialog().ocdialog('destroy').remove(); }; OtherBackendConfig.prototype.addressbookUiInit = function() { var self = this; $('#addressbooks-ui-ldapvcardconnector-value-p').hide(); $('#addressbooks-ui-ldapvcardconnector-copyfrom-p').hide(); $('#addressbooks-ui-name').change(function() { if ($('#addressbooks-ui-uri').val() === '') { $('#addressbooks-ui-uri').val($('#addressbooks-ui-name').val().toLowerCase().replace(' ', '-')); } }); $('#addressbooks-ui-ldapanonymous').change(function() { if ($('#addressbooks-ui-ldapanonymous').prop('checked')) { $('#addressbooks-ui-ldapuser').prop('disabled', true); $('#addressbooks-ui-ldappass').prop('disabled', true); } else { $('#addressbooks-ui-ldapuser').removeProp('disabled'); $('#addressbooks-ui-ldappass').removeProp('disabled'); } }); $('#addressbooks-ui-ldapreadonly').change(function() { if ($('#addressbooks-ui-ldapreadonly').prop('checked')) { $('#addressbooks-ui-ldapbasednmodify').prop('disabled', true); } else { $('#addressbooks-ui-ldapbasednmodify').removeProp('disabled'); } }); $('#addressbooks-ui-ldapbasednsearch').change(function() { if ($('#addressbooks-ui-ldapbasednmodify').val() === '') { $('#addressbooks-ui-ldapbasednmodify').val($('#addressbooks-ui-ldapbasednsearch').val()); } }); $('#addressbooks-ui-ldapbasednmodify').change(function() { if ($('#addressbooks-ui-ldapbasednsearch').val() === '') { $('#addressbooks-ui-ldapbasednsearch').val($('#addressbooks-ui-ldapbasednmodify').val()); } }); $('#addressbooks-ui-ldapvcardconnector').empty(); var $option = null; var connectors = self.getConnectors(); for (var id = 0; id < connectors.length; id++) { if (connectors[id] !== null) { $option = $(''); $('#addressbooks-ui-ldapvcardconnector').append($option); } } $option = $(''); $('#addressbooks-ui-ldapvcardconnector').append($option); $('#addressbooks-ui-ldapvcardconnector').change(function() { // Custom connector if ($('#addressbooks-ui-ldapvcardconnector').val() === '') { $('#addressbooks-ui-ldapvcardconnector-value-p').show(); $('#addressbooks-ui-ldapvcardconnector-copyfrom-p').show(); var connectors = self.getConnectors(); $('#addressbooks-ui-ldapvcardconnector-copyfrom').empty(); var $option = $('').attr('selected','selected'); $('#addressbooks-ui-ldapvcardconnector-copyfrom').append($option); for (var id = 0; id < connectors.length; id++) { $option = $(''); $('#addressbooks-ui-ldapvcardconnector-copyfrom').append($option); } } else { $('#addressbooks-ui-ldapvcardconnector-value-p').hide(); $('#addressbooks-ui-ldapvcardconnector-copyfrom-p').hide(); } }); $('#addressbooks-ui-ldapvcardconnector-copyfrom').change(function() { if ($('#addressbooks-ui-ldapvcardconnector-copyfrom').val() !== '') { var connectors = self.getConnectors(); for (var id = 0; id < connectors.length; id++) { if ($('#addressbooks-ui-ldapvcardconnector-copyfrom').val() === connectors[id].id) { $('#addressbooks-ui-ldapvcardconnector-value').text(connectors[id].xml); } } } }); $('#addressbooks-ui-ldappagesize').forceNumericOnly(); }; OtherBackendConfig.prototype.getConnectors = function() { var self = this; if (self.connectors == null) { $.when(self.storage.getConnectors($('#addressbooks-ui-backend').val())) .then(function(response) { self.connectors = response.data; return self.connectors; }) .fail(function(jqxhr, textStatus, error) { var err = textStatus + ', ' + error; console.log('Request Failed', + err); defer.reject({error:true, message:error}); }); } else { return self.connectors; } } jQuery.fn.forceNumericOnly = function() { return this.each(function() { $(this).keydown(function(e) { var key = e.charCode || e.keyCode || 0; // allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY // home, end, period, and numpad decimal return ( key === 8 || key === 9 || key === 13 || key === 46 || key === 110 || key === 190 || (key >= 35 && key <= 40) || (key >= 48 && key <= 57) || (key >= 96 && key <= 105)); }); }); }; })(window, jQuery, OC);