diff --git a/MakeDatabase.sql b/MakeDatabase.sql
index a436629..ac4a601 100644
--- a/MakeDatabase.sql
+++ b/MakeDatabase.sql
@@ -1,3 +1,7 @@
+/* CREATE THE DATABASE FROM SCRATCH */
+
+CREATE database demodb;
+
USE demodb;
CREATE TABLE `Surveys` (
diff --git a/README.md b/README.md
index e69de29..986ae99 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,28 @@
+Process required to get data into local database:
+
+1.
+2. getSurveys.php (identifies the surveys and calls:
+ getData.php to import the data)
+
+3. getQuestions.php
+getQuestionsData.php
+
+Then the reportTemplate.html will work correctly
+
+backup database:
+mysqldump -u username -p > backup.sql
+
+restore database:
+mysql -u username -p < backup.sql
+
+
+
+SURVEYS:
+SV_cwKjMqAqGxImjMG - Is the correct template one!
+
+SV_3pyZVUNpxXm1PZI - is a baaaad one!
+
+
+TESTING:
+get_qid_counts.html provides the ability to test the various splicing and dicing with specific questions against a specific survey.
+This connects directly to get_qid_counts.php
diff --git a/drawbar.js b/drawbar.js
index 4133e65..ee9ad7e 100644
--- a/drawbar.js
+++ b/drawbar.js
@@ -28,7 +28,8 @@ SOFTWARE.
function drawBar(id,data) {
-//console.log(id);
+console.log(id);
+console.log(data);
const svg = d3.select(`${id}`);
const backgroundwidth = +svg.attr("width");
const backgroundradius = 10;
@@ -276,7 +277,46 @@ return average; //Needed for the next layer up in the analysis
-function doBarData(id,qid) {
+function doBarData(id,qid, survey, Q1=0, Q2=0, Q3=0 ) {
+ // Create the form data object
+ const formData = new FormData();
+ formData.append('qid', qid);
+ formData.append('survey', survey);
+ formData.append('Q1', Q1);
+ formData.append('Q2', Q2);
+ formData.append('Q3', Q3);
+
+ // Send the form data using fetch
+ fetch('get_qid_counts.php', {
+ method: 'POST',
+ body: formData
+ })
+ .then(response => response.text())
+ .then(data => {
+ // Output result
+ console.log(data);
+ const parsed = JSON.parse(data);
+
+ // 2. Clean the keys and build a usable object
+ const bardata = {};
+ parsed.forEach(entry => {
+ const rawKey = Object.keys(entry)[0];
+ const cleanKey = rawKey.replace(/"/g, ''); // Remove extra quotes
+ bardata[cleanKey] = entry[rawKey];
+ });
+
+ console.log(bardata);
+ drawBar(id,bardata);
+ // return data; // Should be an array like [{ value: -3, count: 2 }, ..., { value: 3, count: 5 }]
+
+ })
+ .catch(error => {
+ console.error('Error:', error);
+ });
+}
+
+
+function Backup() {
return fetch('get_qid_counts.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
diff --git a/get_qid_counts.html b/get_qid_counts.html
index f878ad1..43d3f04 100644
--- a/get_qid_counts.html
+++ b/get_qid_counts.html
@@ -1,67 +1,58 @@
-
-
-QID Value Counts
-
+
+ Form Submit Example
+
-Query Value Counts by QID
+
+ Survey: (SV_cwKjMqAqGxImjMG)
+
-
+ Enter Q1:
+
-
+
-
diff --git a/get_qid_counts.php b/get_qid_counts.php
index 9008be2..a938e71 100644
--- a/get_qid_counts.php
+++ b/get_qid_counts.php
@@ -15,14 +15,29 @@ if (php_sapi_name() === 'cli') {
exit;
}
$qid = $_POST['qid'];
- $q1 = filter_input(INPUT_POST, 'q1', FILTER_VALIDATE_INT);
- $q2 = filter_input(INPUT_POST, 'q2', FILTER_VALIDATE_INT);
- $q3 = filter_input(INPUT_POST, 'q3', FILTER_VALIDATE_INT);
+ $input = $_POST['survey'] ?? '';
+
+
+ if (preg_match('/^SV_[a-zA-Z0-9]+$/', $input)) {
+ // Input is valid
+ $survey = $input;
+ } else {
+ // Invalid format
+ die("Invalid survey ID format.");
+ }
+
+ $q1 = filter_input(INPUT_POST, 'Q1', FILTER_VALIDATE_INT);
+ $q2 = filter_input(INPUT_POST, 'Q2', FILTER_VALIDATE_INT);
+ $q3 = filter_input(INPUT_POST, 'Q3', FILTER_VALIDATE_INT);
+
}
-$qualifier = "";
+$qualifier = " AND s.surveyId = '${survey}'";
+
+
if ($q1 > 0) {
- $qualifier.=" AND r.Q1 = " . $q1;
+ $qualifier.=" AND r.Q1 = " . $q1;
+
}
if ($q2 > 0) {
@@ -52,7 +67,7 @@ $options = [
try {
$pdo = new PDO($dsn, $user, $pass, $options);
- $sql = "
+ $baseSql = "
SELECT
a.value,
COUNT(*) AS count,
@@ -61,12 +76,16 @@ try {
r.Q3
FROM Answers a
INNER JOIN Responses r ON a.responseId = r.id
- WHERE a.QID = :qid' . $quantifier . '
+ INNER JOIN Surveys s ON a.surveyId = s.id
+ WHERE a.QID = :qid
+ ";
+
+ $sql = $baseSql . $qualifier . "
GROUP BY a.value, r.Q1, r.Q2, r.Q3
ORDER BY a.value;
";
- echo $sql;
+ //echo $sql;
$stmt = $pdo->prepare($sql);
$stmt->execute(['qid' => $qid]);
diff --git a/populateGraphics.js b/populateGraphics.js
index 59b4a16..10b48ca 100644
--- a/populateGraphics.js
+++ b/populateGraphics.js
@@ -37,8 +37,17 @@ function getAverage(prefix) {
}
-function loaded(){
- console.log("loaded");
+function getSurveyData(){
+ console.log("gettingSurveyData");
+
+ let survey=document.getElementById("surveyId").value;
+ console.log("Survey is:"+survey);
+
+ let Q1=document.getElementById("location").value;
+ let Q2=document.getElementById("level").value;
+ let Q3=document.getElementById("gov").value;
+
+
let amber = '#ffbf00';
//doBigWhiteTriangle('svg1');
@@ -55,156 +64,156 @@ function loaded(){
//EO ROLES
//Great Employee Owners
- let average = doBarData('#svg1_1','QID35_7');
+ let average = doBarData('#svg1_1','QID35_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg1_2','QID35_2');
+ doBarData('#svg1_2','QID35_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg1_3','QID35_8');
+ doBarData('#svg1_3','QID35_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg1_4','QID35_9');
+ doBarData('#svg1_4','QID35_9',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
- doBarData('#svg1_5','QID35_10');
+ doBarData('#svg1_5','QID35_10',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
//Great EO Leaders
- average = doBarData('#svg2_1','QID36_7');
+ average = doBarData('#svg2_1','QID36_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg2_2','QID36_2');
+ doBarData('#svg2_2','QID36_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg2_3','QID36_8');
+ doBarData('#svg2_3','QID36_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg2_4','QID36_9');
+ doBarData('#svg2_4','QID36_9',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//Great EO Governance
- average = doBarData('#svg3_1','QID37_7');
+ average = doBarData('#svg3_1','QID37_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg3_2','QID37_2');
+ doBarData('#svg3_2','QID37_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg3_3','QID37_8');
+ doBarData('#svg3_3','QID37_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg3_4','QID37_20');
+ doBarData('#svg3_4','QID37_20',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
- doBarData('#svg3_5','QID37_21');
+ doBarData('#svg3_5','QID37_21',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
- doBarData('#svg3_6','QID37_22');
+ doBarData('#svg3_6','QID37_22',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
//EO APPROACH
//Great EO Culture
- average = doBarData('#svg4_1','QID2_7');
+ average = doBarData('#svg4_1','QID2_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg4_2','QID2_2');
+ doBarData('#svg4_2','QID2_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg4_3','QID2_8');
+ doBarData('#svg4_3','QID2_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg4_4','QID2_9');
+ doBarData('#svg4_4','QID2_9',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//Great EO Engagement
- average = doBarData('#svg5_1','QID33_7');
+ average = doBarData('#svg5_1','QID33_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg5_2','QID33_2');
+ doBarData('#svg5_2','QID33_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg5_3','QID33_8');
+ doBarData('#svg5_3','QID33_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg5_4','QID33_9');
+ doBarData('#svg5_4','QID33_9',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//Great EO Stewardship
- average = doBarData('#svg6_1','QID34_7');
+ average = doBarData('#svg6_1','QID34_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg6_2','QID34_2');
+ doBarData('#svg6_2','QID34_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg6_3','QID34_8');
+ doBarData('#svg6_3','QID34_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg6_4','QID34_17');
+ doBarData('#svg6_4','QID34_17',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//EO ACTIONS
//Great EO Strategy
- average = doBarData('#svg7_1','QID40_7');
+ average = doBarData('#svg7_1','QID40_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg7_2','QID40_2');
+ doBarData('#svg7_2','QID40_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg7_3','QID40_8');
+ doBarData('#svg7_3','QID40_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg7_4','QID40_9');
+ doBarData('#svg7_4','QID40_9',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//Great EO Innovation
average = doBarData('#svg8_1','QID41_7');
//makeSvgRightClickable('svg1_1');
- doBarData('#svg8_2','QID41_2');
+ doBarData('#svg8_2','QID41_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg8_3','QID41_19');
+ doBarData('#svg8_3','QID41_19',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg8_4','QID41_20');
+ doBarData('#svg8_4','QID41_20',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
- doBarData('#svg8_5','QID41_21');
+ doBarData('#svg8_5','QID41_21',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
//Great EO Advantage
- average = doBarData('#svg9_1','QID42_7');
+ average = doBarData('#svg9_1','QID42_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg9_2','QID42_2');
+ doBarData('#svg9_2','QID42_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg9_3','QID42_8');
+ doBarData('#svg9_3','QID42_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
//EO RESULTS
//Great EO Measurement
- average = doBarData('#svg10_1','QID44_21');
+ average = doBarData('#svg10_1','QID44_21',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg10_2','QID44_7');
+ doBarData('#svg10_2','QID44_7',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg10_3','QID44_2');
+ doBarData('#svg10_3','QID44_2',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg10_4','QID44_8');
+ doBarData('#svg10_4','QID44_8',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//Great EO Evaluation
- average = doBarData('#svg11_1','QID45_24');
+ average = doBarData('#svg11_1','QID45_24',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg11_2','QID45_25');
+ doBarData('#svg11_2','QID45_25',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg11_3','QID45_26');
+ doBarData('#svg11_3','QID45_26',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg11_4','QID45_29');
+ doBarData('#svg11_4','QID45_29',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
//Great EO Impact
- average = doBarData('#svg12_1','QID46_27');
+ average = doBarData('#svg12_1','QID46_27',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_1');
- doBarData('#svg12_2','QID46_28');
+ doBarData('#svg12_2','QID46_28',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_2');
- doBarData('#svg12_3','QID46_29');
+ doBarData('#svg12_3','QID46_29',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg12_4','QID46_30');
+ doBarData('#svg12_4','QID46_30',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
- doBarData('#svg12_5','QID46_31');
+ doBarData('#svg12_5','QID46_31',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
- doBarData('#svg12_6','QID46_32');
+ doBarData('#svg12_6','QID46_32',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
- doBarData('#svg12_7','QID46_33');
+ doBarData('#svg12_7','QID46_33',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_3');
- doBarData('#svg12_8','QID46_34');
+ doBarData('#svg12_8','QID46_34',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_4');
- doBarData('#svg12_9','QID46_36');
+ doBarData('#svg12_9','QID46_36',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
- doBarData('#svg12_10','QID46_37');
+ doBarData('#svg12_10','QID46_37',survey,Q1,Q2,Q3);
//makeSvgRightClickable('svg1_5');
diff --git a/reportTemplate.html b/reportTemplate.html
index 314f240..075d93e 100644
--- a/reportTemplate.html
+++ b/reportTemplate.html
@@ -81,17 +81,17 @@
}
-
+
QUALTRICS SURVEY ANALYSIS TOOL
-You first need to enter the Survey ID, and press submit in order to get the correct groupings available to select from
+You first need to enter the Survey ID, and press submit in order to get the correct groupings available to select from. The master template survey is SV_cwKjMqAqGxImjMG if you want a survey to just try out.