-
-
Save dylanized/dd40b109c2cce2bdf7fc to your computer and use it in GitHub Desktop.
BSD Spud Helper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPUD HELPER | |
function getUniversalProfile(required_fields, cb) { | |
test_msg("Loading getUniversalProfile..."); | |
jQuery(document).ready(function() { | |
test_msg("Getting universal profile..."); | |
var bsd_fields = ['firstname', 'lastname', 'email', 'phone', 'addr1', 'addr2', 'city', 'state_cd', 'zip']; | |
// make sure bsd is loaded | |
if (typeof bQuery == 'function' | |
&& typeof bQuery.bsd == 'object' | |
&& typeof bQuery.bsd.spud == 'function') { | |
test_msg("Loading the spud..."); | |
// query the bsd spud asyncronously | |
bQuery.bsd.spud( | |
'get', | |
bsd_fields, | |
{ | |
success: function (data) { | |
test_msg("BSD data:", data); | |
// if profile is not empty | |
if (has_user_data(data)) { | |
// process spud data | |
var user = build_user(data); | |
// if has required fields, run callback | |
if (has_required_fields(user, required_fields)) cb(user); | |
else return error("Missing required fields! Returning false"); | |
} | |
else return error("Empty profile! Returning false"); | |
} | |
} | |
); | |
} else error("BSD Spud not found"); | |
// helper functions | |
function has_user_data(obj) { | |
for (var prop in obj) { | |
if (obj[prop]) return true; | |
} | |
return false; | |
} | |
function has_required_fields(user, required_fields) { | |
if (typeof required_fields == "object" && required_fields.length > 0) { | |
for (var i = 0; i < required_fields.length; i++) { | |
if (!user[required_fields[i]]) return false; | |
} | |
} | |
return true; | |
} | |
function error(msg) { | |
test_msg(msg); | |
return false; | |
} | |
// build user | |
function build_user(user) { | |
test_msg("Building user object..."); | |
// set bsd props | |
user.firstname = user_prop("firstname", "first_name"); | |
user.lastname = user_prop("lastname", "last_name"); | |
user.email = user_prop("email", "email"); | |
user.phone = user_prop("phone", "phone"); | |
user.addr1 = user_prop("addr1", "home_addr2"); | |
user.addr2 = user_prop("addr2", "home_addr2"); | |
user.city = user_prop("city", "home_city"); | |
user.state = user_prop("state_cd", "home_state"); | |
user.zip = user_prop("zip", "home_zip"); | |
// set mixpanel props | |
var has_mixpanel = has_mixpanel(); | |
if (has_mixpanel) user.ip = mixpanel.get_property("uip"); | |
// return object | |
test_msg("Returning object:", user); | |
return user; | |
// build user helpers | |
function user_prop(bsd_field_name, mix_field_name) { | |
if (user[bsd_field_name]) return user[bsd_field_name]; | |
else if (has_mixpanel) return mixpanel.get_property(mix_field_name); | |
else return undefined; | |
} | |
function has_mixpanel() { | |
if (typeof(mixpanel) == 'undefined') return error("Mixpanel not loaded!"); | |
else if (typeof(mixpanel.get_property) == 'undefined') return error("Mixpanel cookie not loaded!"); | |
else return true; | |
} | |
} | |
}); | |
} | |
/* | |
Example: | |
if (typeof getUniversalProfile == 'function') { | |
getUniversalProfile(['email', 'zip'], function(user) { | |
// do stuff here | |
console.log(user); | |
}); | |
} | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment