-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCFDBGoogleSSLiveData.js
executable file
·133 lines (121 loc) · 5.32 KB
/
CFDBGoogleSSLiveData.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
"Contact Form to Database" Copyright (C) 2011-2014 Michael Simpson (email : [email protected])
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 <http://www.gnu.org/licenses/>.
*/
/* 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("<strong>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;
}