Skuid Notes. Some new template changes. Added Luminate's GAS to the repo.

This commit is contained in:
Norm Rasmussen
2023-08-03 21:14:43 -04:00
parent c2a6854ae3
commit e5c9674186
11 changed files with 234 additions and 6 deletions

View File

@ -3,10 +3,10 @@
{% for course_activity in course_section.activities %}
{% assign activities_count = activities_count | plus: 1 %}
{% endfor %}
{% endfor %}
{% endfor %}
<div class="np-course-details">
<div class="np-course-detail" id='hideable'>
<div class="np-course-detail" id='hideable'>
<strong>{{ activities_count }}</strong>
<span class="np-details-label">
{% if activities_count == 1 %}Activity{% else %}Activities{% endif %}
@ -33,7 +33,7 @@
{% if course.properties.np_course_rating >= i %}
<svg width="20" height="19" viewBox="0 0 20 19" preserveAspectRatio fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
</svg>
</svg>
{% else %}
<svg width="20" height="19" viewBox="0 0 20 19" preserveAspectRatio fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.25" d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
@ -59,4 +59,4 @@
margin-bottom: 0;
}
}
</style>
</style>

View File

@ -54,9 +54,9 @@
{% include "section_tips_tricks" %}
{% include "section_faqs" %}
</main>
{% include "footer" %}
<script>
$(".np-sub-navigation-content-item-link:contains('Home')").parent().addClass("np-sub-navigation-content-item-active")
</script>
</script>

View File

@ -260,3 +260,24 @@ DONE: Move the Skuid Recipe to Skuad
DONE: Remove Points Node from Skuad Recipe
DONE: Register button should immediately change the property to Registered.
DONE: Set Register button to webhook > email
## 08/03/2023
### New Structure and Metrics
Tony - CCO
Anna now reports to Matt who reports to Jackson
Customers engaged, new learners from those accounts.
Figuring it out as they go.
Product behavior - how much people are using the product pre and post academy.
Less support cases.
Somehow combining data between the systems. API Extracts?
Kat: What are they using for tracking data - Heap.
Left over Alexa tasks? Search results.
Kat: Advocacy? How are doing it - Round tables? Events? Case studies?
Anna: One of the movements after the "riff" is to work with sales and work together.
No risk in the renewal from Anna.

View File

@ -154,3 +154,17 @@ List from Stephanie:
Sanitized search.
* She doesn't love the learning path cover page. Send learning path examples of a more minimal design.
* Add categories tag to search results boxes.
## 08/03/2023
### Finalizing Modals
TODO: Setup google sheet for Quiz completion webhook
DONE: Talk to Kaitlyn about the modal. See list below:
* Make modal accessible in the sandbox.
* She wants a "survey" modal to show up 2 weeks after the first modal. Can we:
* Add timestamp local storage
* Check timestamp every time the function runs
* If timestamp == 2 weeks, show new modal
* Set secondary modal boolean to True/False.

View File

@ -63,3 +63,14 @@ DONE: Submit tickets from [this page](https://docs.google.com/spreadsheets/d/1kV
TODO: Check if we can "mimic" the start button across all courses in LP so any click = start LP.
TODO: Get Assignment Download link into Google Sheets. Webhook followed by API call. Data points: UID, Course, Submitted At, and URL.
Notes for Sophie:
To get the assignments outside of Northpass, you would need to log them to a Google sheet. However, since we don't have any webhooks for an assignment completion that contains the cdn.filestack download link, you'd have to get this via API. The Assignment Submissions API should have everything you need, including the download link.
The other portion of this that was mentioned to me is that the people that need these criminal records have to grab it in "close" to real time. So the flow of data and API calls would have to be the following:
1. Webhook is the trigger that starts the flow. It points to a workflow engine, google sheet, SFDC, where ever Zenjob wants.
2. Parse the webhook and check for activity name. If Activity name == Course A
3. Make an API call to the Assignments endpoint and grab the following information: Learner Email/SSO UID, Course Name, Activity Name, Download link
4. Add those values to a spreadsheet or Salesforce. Wherever you want the employees to grab the criminal record upload.

View File

@ -0,0 +1 @@
{"scriptId":"1s6f3wOHnnkJXNH6RoO5_NBfT5xJh62RPBm5LdGS7cgBlsfgPCnNxheIE","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Luminate_API_Exam"}

View File

@ -0,0 +1,58 @@
function doGet(e) {
return HtmlService.createHtmlOutput("get request received");
}
// ac4fbf2e-ed8f-404d-b995-f0ef73481466
//this is a function that fires when the webapp receives a POST request
function doPost(e) {
var params = JSON.stringify(e.postData.contents);
params = JSON.parse(params);
var now = new Date();
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
//Logger.log("Name = " + learnerName);
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
//Logger.log("Email = " + learnerEmail);
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
//Logger.log("Course = " + courseName);
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
//Logger.log("Activity = " + activityName);
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
//Logger.log("Quiz Score = " + quizScore);
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
var localTime = new Date(dateCompleted);
localTime = localTime.toString();
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
//dateCompleted = dateCompleted.toString();
//Logger.log("Completed on = " + dateCompleted);
if (courseName == "API Certification Exam") {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = Math.max(sheet.getLastRow(),1);
sheet.insertRowAfter(lastRow);
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
sheet.getRange(lastRow + 1, 4).setValue(courseName);
sheet.getRange(lastRow + 1, 5).setValue(activityName);
sheet.getRange(lastRow + 1, 6).setValue(localTime);
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
sheet.getRange(lastRow + 1, 8).setValue(params);
}
SpreadsheetApp.flush();
return HtmlService.createHtmlOutput("post request received");
}

View File

@ -0,0 +1 @@
{"scriptId":"1Mu3E-vjk8KvwFzZ_9HIEuhO-0aMMjZHCwtDLpXEpp82FA_1LZJGljSbZ","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Papa_Quiz"}

View File

@ -0,0 +1,56 @@
function doGet(e) {
return HtmlService.createHtmlOutput("get request received");
}
//this is a function that fires when the webapp receives a POST request
function doPost(e) {
var params = JSON.stringify(e.postData.contents);
params = JSON.parse(params);
var now = new Date();
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
//Logger.log("Name = " + learnerName);
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
//Logger.log("Email = " + learnerEmail);
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
//Logger.log("Course = " + courseName);
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
//Logger.log("Activity = " + activityName);
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
//Logger.log("Quiz Score = " + quizScore);
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
var localTime = new Date(dateCompleted);
localTime = localTime.toString();
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
//dateCompleted = dateCompleted.toString();
//Logger.log("Completed on = " + dateCompleted);
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = Math.max(sheet.getLastRow(),1);
sheet.insertRowAfter(lastRow);
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
sheet.getRange(lastRow + 1, 4).setValue(courseName);
sheet.getRange(lastRow + 1, 5).setValue(activityName);
sheet.getRange(lastRow + 1, 6).setValue(localTime);
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
sheet.getRange(lastRow + 1, 8).setValue(params);
SpreadsheetApp.flush();
return HtmlService.createHtmlOutput("post request received");
}

View File

@ -0,0 +1,56 @@
function doGet(e) {
return HtmlService.createHtmlOutput("get request received");
}
//this is a function that fires when the webapp receives a POST request
function doPost(e) {
var params = JSON.stringify(e.postData.contents);
params = JSON.parse(params);
var now = new Date();
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
//Logger.log("Name = " + learnerName);
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
//Logger.log("Email = " + learnerEmail);
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
//Logger.log("Course = " + courseName);
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
//Logger.log("Activity = " + activityName);
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
//Logger.log("Quiz Score = " + quizScore);
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
var localTime = new Date(dateCompleted);
localTime = localTime.toString();
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
//dateCompleted = dateCompleted.toString();
//Logger.log("Completed on = " + dateCompleted);
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = Math.max(sheet.getLastRow(),1);
sheet.insertRowAfter(lastRow);
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
sheet.getRange(lastRow + 1, 4).setValue(courseName);
sheet.getRange(lastRow + 1, 5).setValue(activityName);
sheet.getRange(lastRow + 1, 6).setValue(localTime);
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
sheet.getRange(lastRow + 1, 8).setValue(params);
SpreadsheetApp.flush();
return HtmlService.createHtmlOutput("post request received");
}

View File

@ -0,0 +1,10 @@
{
"timeZone": "America/New_York",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "ANYONE_ANONYMOUS"
}
}