-
Kevin Cristiano authoredKevin Cristiano authored
civicrm.contact.add.js 8.16 KiB
/*
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC. All rights reserved. |
| |
| This work is published under the GNU AGPLv3 license with some |
| permitted exceptions and without any warranty. For full license |
| and copyright information, see https://civicrm.org/licensing |
+--------------------------------------------------------------------+
*/
/**
* CiviCRM "Contact Quick Add" Javascript.
*
* Implements functionality on the CiviCRM "Settings" page.
*
* @since 5.34
*/
/**
* Pass the jQuery shortcut in.
*
* @since 5.34
*
* @param {Object} $ The jQuery object.
*/
(function($) {
/**
* Create Settings class.
*
* @since 5.34
*/
function CRM_Settings() {
// Prevent reference collisions.
var me = this;
/**
* Initialise Settings.
*
* This method should only be called once.
*
* @since 5.34
*/
this.init = function() {
// Init localisation.
me.init_localisation();
// Init settings.
me.init_settings();
};
/**
* Do setup when jQuery reports that the DOM is ready.
*
* This method should only be called once.
*
* @since 5.34
*/
this.dom_ready = function() {
};
// Init localisation array.
me.localisation = [];
/**
* Init localisation from settings object.
*
* @since 5.34
*/
this.init_localisation = function() {
if ('undefined' !== typeof CiviCRM_Quick_Add_Vars) {
me.localisation = CiviCRM_Quick_Add_Vars.localisation;
}
};
/**
* Getter for localisation.
*
* @since 5.34
*
* @param {String} identifier The identifier for the desired localisation string.
* @return {String} The localised string.
*/
this.get_localisation = function(identifier) {
return me.localisation[identifier];
};
// Init settings array.
me.settings = [];
/**
* Init settings from settings object.
*
* @since 5.34
*/
this.init_settings = function() {
if ('undefined' !== typeof CiviCRM_Quick_Add_Vars) {
me.settings = CiviCRM_Quick_Add_Vars.settings;
}
};
/**
* Getter for retrieving a setting.
*
* @since 5.34
*
* @param {String} The identifier for the desired setting.
* @return The value of the setting.
*/
this.get_setting = function(identifier) {
return me.settings[identifier];
};
}
/**
* Create Quick Add class.
*
* @since 5.34
*/
function CRM_Quick_Add() {
// Prevent reference collisions.
var me = this;
/**
* Initialise Quick Add.
*
* This method should only be called once.
*
* @since 5.34
*/
this.init = function() {};
/**
* Do setup when jQuery reports that the DOM is ready.
*
* This method should only be called once.
*
* @since 5.34
*/
this.dom_ready = function() {
// Set up methods.
me.setup();
me.listeners();
};
/**
* Do initial setup.
*
* This method should only be called once.
*
* @since 5.34
*/
this.setup = function() {
// Assign properties.
me.quick_add_submit = $('#civicrm_quick_add_submit');
//me.quick_add_submit.prop('disabled', true);
};
/**
* Initialise listeners.
*
* This method should only be called once.
*
* @since 5.34
*/
this.listeners = function() {
/**
* Add a click event listener to the "Clear Caches" section submit button.
*
* @param {Object} event The event object.
*/
me.quick_add_submit.on('click', function(event) {
// Define vars.
var ajax_nonce = me.quick_add_submit.data('security'),
adding = CiviCRM_Options_Settings.get_localisation('adding'),
value, first_name, last_name, email;
// Prevent form submission.
if (event.preventDefault) {
event.preventDefault();
}
// Modify button and select, then show spinner.
me.quick_add_submit.val(adding);
me.quick_add_submit.prop('disabled', true);
$(this).next('.spinner').css('visibility', 'visible');
// Read form data.
first_name = $('#civicrm_quick_add_first_name').val();
last_name = $('#civicrm_quick_add_last_name').val();
email = $('#civicrm_quick_add_email').val();
// Gather form data.
value = {
'first_name': first_name,
'last_name': last_name,
'email': email,
};
console.log('value', value);
// Submit request to server.
me.send('civicrm_contact_add', value, ajax_nonce);
});
};
/**
* Send AJAX request.
*
* @since 5.34
*
* @param {String} action The AJAX action.
* @param {Mixed} value The value to send.
* @param {String} token The AJAX security token.
*/
this.send = function(action, value, token) {
// Define vars.
var url, data;
// URL to post to.
url = CiviCRM_Options_Settings.get_setting('ajax_url');
console.log('url', url);
// Data received by WordPress.
data = {
action: action,
value: value,
_ajax_nonce: token
};
console.log('data OUT', data);
// Use jQuery post method.
$.post( url, data,
/**
* AJAX callback which receives response from the server.
*
* Calls feedback method on success or shows an error in the console.
*
* @since 5.34
*
* @param {Mixed} value The value to send.
* @param {String} token The AJAX security token.
*/
function(data, textStatus) {
if (textStatus == 'success') {
me.feedback(data);
} else {
if (console.log) {
console.log(textStatus);
}
}
},
// Expected format.
'json'
);
};
/**
* Provide feedback given a set of data from the server.
*
* @since 5.34
*
* @param {Array} data The data received from the server.
*/
this.feedback = function(data) {
console.log('data IN', data);
// Declare vars.
var add = CiviCRM_Options_Settings.get_localisation('add');
if (data.saved) {
// Success!
me.quick_add_submit.val(add);
$('.civicrm_quick_add_error').hide();
$('.civicrm_quick_add_success').show();
$('.civicrm_quick_add_success p').html(data.notice);
me.quick_add_submit.prop('disabled', false);
me.quick_add_submit.next('.spinner').css('visibility', 'hidden');
// Clear form data.
$('#civicrm_quick_add_first_name').val('');
$('#civicrm_quick_add_last_name').val('');
$('#civicrm_quick_add_email').val('');
// Show "Recently Added".
$('.contacts-added-wrap').show();
// Add Contact link to top of list.
$('.contacts-added-list').prepend(data.link);
// Drop last item when list exceeds 5 items.
if ($('.contacts-added-list li').length > 5) {
$('.contacts-added-list li:last-child').remove();
}
} else {
// Failure.
me.quick_add_submit.val(add);
me.quick_add_submit.next('.spinner').css('visibility', 'hidden');
me.quick_add_submit.prop('disabled', false);
$('.civicrm_quick_add_success').hide();
$('.civicrm_quick_add_error').show();
$('.civicrm_quick_add_error p').html(data.notice);
}
};
}
// Init Settings and Quick Add classes.
var CiviCRM_Options_Settings = new CRM_Settings();
var CiviCRM_Options_Quick_Add = new CRM_Quick_Add();
CiviCRM_Options_Settings.init();
CiviCRM_Options_Quick_Add.init();
/**
* Trigger dom_ready methods where necessary.
*
* @since 5.34
*
* @param {Object} $ The jQuery object.
*/
$(document).ready(function($) {
CiviCRM_Options_Settings.dom_ready();
CiviCRM_Options_Quick_Add.dom_ready();
}); // End document.ready()
} )( jQuery );