/*
"Contact Form to Database" Copyright (C) 2011-2014 Michael Simpson (email : michael.d.simpson@gmail.com)
This file is part of Contact Form to Database.
Contact Form to Database is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Contact Form to Database is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Contact Form to Database.
If not, see .
*/
/* This is a script to be used with a Google Spreadsheet to make it dynamically load data (similar to Excel IQuery)
Instructions:
1. Create a new Google Spreadsheet
2. Go to Tools menu -> Script Editor...
3. Click Spreadsheet
4. Copy the text from this file and paste it into the Google script editor.
5. Save and close the script editor.
6. Click on a cell A1 in the Spreadsheet (or any cell)
7. Enter in the cell the formula:
=cfdbdata("site_url", "form_name", "user", "password")
Where the parameters are (be sure to quote them):
site_url: the URL of you site, e.g. "http://www.mywordpress.com"
form_name: name of the form
user: your login name on your WordPress site
pwd: password
*/
/**
* Use this function in your spreadsheet to fetch saved form data from your WordPress Site
* @param site_url your top level WordPress site URL
* @param form_name name of the WordPress form to fetch data from
* @param user login name to your WordPress site. User must have permission to view form data
* @param password WordPress site password. If your site_url is "http" and not "https" then
* beware that your password is being sent unencrypted from a Google server to your WordPress server.
* Also beware that others who can view this code in your Google Spreadsheet can see this password.
* @param "option_name1", "option_value1", "option_name2", "option_value2", ... (optional param pairs).
* These are CFDB option such as "filter", "name=Smith", "show", "first_name,last_name"
* These should come in pairs.
* @returns {*} Your WordPress saved form data in a format suitable for Google Spreadsheet to display.
* String error message if there is an error logging into the WordPress site
*/
function cfdbdata(site_url, form_name, user, password /*, [option_name, option_value] ... */) {
var param_array = [];
param_array.push("action=cfdb-login");
param_array.push("username=" + encodeURI(user));
param_array.push("password=" + encodeURI(password));
param_array.push("cfdb-action=cfdb-export");
param_array.push("enc=JSON");
param_array.push("format=array");
param_array.push("form=" + encodeURI(form_name));
var args = arg_slice(arguments, 4);
args = process_name_value_args(args);
param_array = param_array.concat(args);
return fetch_json_url(site_url, param_array);
}
function fetch_json_url(site_url, param_array) {
var url = site_url + "/wp-admin/admin-ajax.php";
var payload = param_array.join("&");
var response = UrlFetchApp.fetch(url, { method: "post", payload: payload });
var content = response.getContentText();
if (content.indexOf("ERROR") == 0) {
// If error message is returned, just return that as the content
return content;
}
//Logger.log(content); // For Debugging
return JSON.parse(content);
}
/**
* @deprecated for backward compatibility. Use cfdbdata() instead.
*/
function CF7ToDBData(site_url, form_name, search, user, password) {
if (search != "") {
return cfdbdata(site_url, form_name, user, password, "search", search);
}
return cfdbdata(site_url, form_name, user, password);
}
/**
* "slice" function for varargs Argument object
* @param args Argument object
* @param position int > 0 indicating the slice position
* @returns {Array} of args from the slide index to the end.
* Returns empty array if slice position exceeds length of args
*/
function arg_slice(args, position) {
var array = [];
if (args.length > position) {
for (var i = position; i < args.length; i++) {
array.push(args[i]);
}
}
return array;
}
/**
* Converts array like ['a', '1', 'b', '2'] to ['a=1', 'b=2']
* where each value is made to be URI-encoded.
* Purpose of this is to transform and array of name,value arguments
* into HTTP GET/POST parameters
* @param array Array like ['a', '1', 'b', '2']
* @returns {Array} like ['a=1', 'b=2'].
* where each value (a, 1, b, 2) are URL-Encoded
* If there is an odd number of arguments then the last one is dropped
* (expecting pairs of name,value)
*/
function process_name_value_args(array) {
var name_value_array = [];
var flag = true;
var name = null;
for (var i = 0; i < array.length; i++) {
if (flag) {
name = array[i];
} else {
name_value_array.push(encodeURI(name) + "=" + encodeURI(array[i]));
}
flag = !flag;
}
return name_value_array;
}