Testing a push

This commit is contained in:
Norm Rasmussen
2023-01-24 15:30:29 -05:00
parent 738813e48c
commit 8ce2cad6d6
41 changed files with 1109 additions and 113 deletions

Binary file not shown.

View File

@ -14,18 +14,11 @@
{% include "sub_navigation" %}
<main class="np-main np-training-events np-subpage-container np-max-width">
<div class="row">
<div class="col-xs-12 col-sm-10">
<div class="np-resource-title">
{% t .title %}
</div>
<div class="np-resource-subtitle">
{% t .subtitle %}
</div>
</div>
<div class="col-xs-12 col-sm-2">
{% include "training_events_filter" %}
</div>
</div>
{% include "training_events_index" %}
<iframe
style="border:none;"
width="100%" height="1000"
src="https://calendar.google.com/calendar/u/0/embed?src=pmtpcalendar@gmail.com&ctz=America/New_York"
title="Wild Health Public Calendar">
</iframe>
</main>
{% include "footer" %}

View File

@ -0,0 +1,26 @@
{% styles default %}
{% styles colors %}
{% styles custom %}
<script>
(function(apiKey){
(function(p,e,n,d,o){var v,w,x,y,z;o=p[d]=p[d]||{};o._q=o._q||[];
v=['initialize','identify','updateOptions','pageLoad','track'];for(w=0,x=v.length;w<x;++w)(function(m){
o[m]=o[m]||function(){o._q[m===v[0]?'unshift':'push']([m].concat([].slice.call(arguments,0)));};})(v[w]);
y=e.createElement(n);y.async=!0;y.src='https://cdn.pendo.io/agent/static/'+apiKey+'/pendo.js';
z=e.getElementsByTagName(n)[0];z.parentNode.insertBefore(y,z);})(window,document,'script','pendo');
})('a59ee367-b60f-4801-7452-0331dce168e1');
// Call this whenever information about your visitors becomes available
// Please use Strings, Numbers, or Bools for value types.
{% if current_person.signed_in? %}
pendo.initialize({
visitor: {
id: '{{current_person.id}}',
email: '{{current_person.email}}',
first_name: '{{current_person.first_name}}',
last_name: '{{current_person.last_name}}',
}
});
{% endif %}
</script>

View File

@ -0,0 +1,181 @@
<header class="np-header np-header-color">
<div class="np-header-content">
<div class="np-hidden-desktop np-header-mobile-menu-nav">
{% if current_person.signed_in? %}
<button
data-toggle-class="np-hidden"
class="np-header-mobile-menu-nav-button fal fa-times np-hidden np-header-font-color"
data-toggle-target=".np-header-mobile-avatar-menu,
.np-header-mobile-menu-content, .np-main, .np-footer"
></button>
<button
data-test="open-mobile-menu"
data-toggle-class="np-hidden"
class="np-header-mobile-menu-nav-button np-header-mobile-avatar-menu"
data-toggle-target=".fa-times, .np-header-mobile-menu-content, .np-main, .np-footer"
>
<img
alt="{{ current_person.name }}"
class="np-header-avatar-image"
src="{{ current_person.avatar_url }}"
/>
</button>
{% endif %}
</div>
{% if current_school.logo_url %}
<h1 class="np-header-logo">
<a href="{% route home %}">
<img
alt="{{ current_school.name }}"
class="np-header-logo-image"
src="{{ current_school.logo_url }}"
/>
</a>
</h1>
{% else %}
<a href="{% route home %}" class="np-school-name np-header-font-color">
{{ current_school.name }}
</a>
{% endif %}
<div class="np-hidden-mobile np-header-desktop-nav">
<ul class="np-header-desktop-nav-list">
{% for website_navigation in navigations.header_navigations_external %}
<li class= "np-header-desktop-nav-item">
<a
href="{{ website_navigation.path }}"
class="np-header-desktop-nav-link np-header-font-color"
target="_blank"
>
{{ website_navigation.name }}
</a>
</li>
{% endfor %}
</ul>
</div>
{% if current_person.signed_in? %}
<div class="np-hidden-mobile np-header-search np-header-search-expanded">
<form action="{% route search %}" method="get" data-test="desktop-search">
<input
aria-label="{% t .search %}"
class="np-header-search-input np-header-font-background-color"
type="text"
name="q"
placeholder="{% t .search %}"
/>
<i class="np-header-search-icon far fa-search"></i>
</form>
</div>
<div class="np-hidden-mobile np-header-avatar">
<button
class="np-header-avatar-button"
data-test="open-desktop-menu"
data-toggle-class-on-target="np-hidden"
data-toggle-target=".np-header-avatar-tooltip"
data-toggle-outside
>
<img
alt="{{ current_person.name }}"
class="np-header-avatar-image"
src="{{ current_person.avatar_url }}"
>
</button>
<div class="np-header-avatar-tooltip np-hidden" role="tooltip">
<span class="np-header-avatar-tooltip-arrow-up"></span>
<div class="np-header-avatar-tooltip-learner">
<div class="np-header-avatar-tooltip-learner-name">
{{ current_person.name }}
</div>
<div class="np-header-avatar-tooltip-learner-email">
{{ current_person.email }}
</div>
</div>
<nav class="np-header-avatar-tooltip-navigation">
{% unless current_school.sso_active? %}
<a
class="np-header-avatar-tooltip-navigation-link"
href="{% route account %}"
>
{% t .profile_settings %}
</a>
{% endunless %}
<a
class="np-header-avatar-tooltip-navigation-link np-danger"
href="{% route logout %}"
>
{% t .sign_out %}
</a>
</nav>
</div>
</div>
{% else %}
<a
class="np-header-sign-in np-header-desktop-nav-link np-header-font-color"
aria-label="{% t shared.sign_in %}"
href="{% route login %}"
>
{% t shared.sign_in %}
</div>
{% endif %}
</div>
</header>
<div class="np-hidden-desktop">
<div class="np-header-mobile-menu-content np-hidden">
{% if current_person.signed_in? %}
<img
alt="{{ current_person.name }}"
class="np-header-mobile-menu-content-avatar"
src="{{ current_person.avatar_url }}"
/>
<div class="np-header-mobile-menu-content-name">
{{ current_person.name }}
</div>
{% endif %}
<div class="np-header-mobile-menu-content-nav">
<form
class="np-header-search"
data-test="mobile-search"
method="get"
action="{% route search %}"
>
<input
aria-label="{% t .search %}"
class="np-header-search-input"
type="text"
name="q"
placeholder="{% t .search %}"
/>
<i class="np-header-search-icon far fa-search"></i>
</form>
{% for website_navigation in navigations.header_navigations %}
<a
href="{{ website_navigation.path }}"
class="np-header-mobile-menu-content-button"
{% if website_navigation.external? %} target="_blank" {% endif %}
>
{{ website_navigation.name }}
</a>
{% endfor %}
<div class="np-header-mobile-menu-content-line"></div>
{% unless current_school.sso_active? %}
<a
class="np-header-mobile-menu-content-button"
href="{% route account %}"
>
{% t .profile_settings %}
</a>
{% endunless %}
<a
class="np-header-mobile-menu-content-button np-danger"
href="{% route logout %}"
>
{% t .sign_out %}
</a>
</div>
</div>
</div>
{% include "messages" %}

View File

@ -0,0 +1,47 @@
<header class="np-box-header np-header-color">
<a class="np-box-header-link" href="{% route home %}">
{% if current_school.logo_url %}
<img
alt="{{ current_school.name }}"
src="{{ current_school.logo_url }}"
class="np-box-header-logo"
/>
{% else %}
<span class="np-school-name np-header-font-color">
{{ current_school.name }}
</span>
{% endif %}
</a>
</header>
{% include "messages" %}
<script>
setTimeout(function(){
if (window.location.pathname == "/auth/auth_url_email/login") {
document.getElementsByClassName("np-input-label")[2].innerHTML = "Work Email Address";
if (document.getElementsByClassName("np-alert-wrapper").length != 0) {
document.getElementsByClassName("np-alert-wrapper")[0].innerHTML = "Please complete the following information to access Artera";
}
};
}, 500);
</script>
<script>
(function(apiKey){
(function(p,e,n,d,o){var v,w,x,y,z;o=p[d]=p[d]||{};o._q=o._q||[];
v=['initialize','identify','updateOptions','pageLoad','track'];for(w=0,x=v.length;w<x;++w)(function(m){
o[m]=o[m]||function(){o._q[m===v[0]?'unshift':'push']([m].concat([].slice.call(arguments,0)));};})(v[w]);
y=e.createElement(n);y.async=!0;y.src='https://cdn.pendo.io/agent/static/'+apiKey+'/pendo.js';
z=e.getElementsByTagName(n)[0];z.parentNode.insertBefore(y,z);})(window,document,'script','pendo');
{% if current_person.signed_in? %}
pendo.initialize({
visitor: {
email: current_person.email,
firstName: current_person.first_name,
lastName: current_person.last_name,
}
});
{% endif %}
})('a59ee367-b60f-4801-7452-0331dce168e1');
</script>

View File

@ -0,0 +1,72 @@
<script src="https://fast.wistia.net/assets/external/E-v1.js" async></script>
{%comment%} <script src="//fast.wistia.com/embed/medias/s3lqfi0zn7.jsonp" async></script>
<script src="//fast.wistia.com/assets/external/E-v1.js" async></script>{%endcomment%}
<main class="np-box-container np-open-access">
<div class="np-box">
{% include "header_minimal" %}
<div class="np-box-content-container">
<form class="np-form np-box-content" action="{{ form.url }}" method="get" novalidate>
{% form_authenticity_token %}
<div class="np-form-headline">
{% t shared.welcome_to_school, school_name: current_school.name %}
</div>
<div class="np-form-subheadline">
Check out the video below for a quick tour of Artera Academy.<br>Then, enter your first name, last name, and your work email address below to get started.
</div>
{%comment%}<div class="intro-video wistia_embed videoFoam=true playbar=false volumeControl=false smallPlayButton=false settingsControl=false autoPlay=true wistia_async_fl9lthnnox" style="width: 100%; height: auto; margin-bottom: 20px;">&nbsp;</div>{%endcomment%}
<div class="wistia_responsive_padding" style="padding:56.25% 0 0 0;position:relative;">
<div class="wistia_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;">
<iframe src="https://fast.wistia.net/embed/iframe/fl9lthnnox?seo=false&videoFoam=true" title="LearnWELL Intro Video" allow="autoplay; fullscreen" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" msallowfullscreen width="100%" height="100%"></iframe>
</div>
</div>
<br>
<div class="np-form-field">
<label class="np-input-label" for="learner_first_name">
{% t shared.first_name %}
</label>
<input
class="np-input"
autofocus="autofocus"
type="text"
name="first_name"
id="learner_first_name"
value="{{ form.first_name }}"
/>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_last_name">
{% t shared.last_name %}
</label>
<input
class="np-input"
type="text"
name="last_name"
id="learner_last_name"
value="{{ form.last_name }}"
/>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_email">
{% t shared.email_address %}
</label>
<input
class="np-input"
type="text"
name="email"
id="learner_email"
value="{{ form.email }}"
/>
</div>
<input
type="submit"
name="commit"
value="{% t shared.enter %}"
class="np-button np-button-big np-form-action"
/>
</form>
</div>
</div>
</main>

View File

@ -21,9 +21,9 @@
<div class="np-card-content-subtitle">
{{ course.short_description }}
</div>
<div class="np-card-content-lessons">
<a class="np-card-content-lessons" href="{{course_path}}#course-overview">
{{ activities_count }} {% if activities_count == 1 %}Lesson{% else %}Lessons{% endif %}
</div>
</a>
</div>
</div>
</div>
@ -65,6 +65,7 @@
font-size: 16px;
margin-top: 20px;
line-height: 22px;
text-decoration: none;
}

View File

@ -0,0 +1,4 @@
<i class="far fa-lock-alt np-course-outline-content-activity-icon-locked"></i>
<span class="np-course-outline-content-activity-title">
{{ activity.title }}
</span>

View File

@ -0,0 +1,15 @@
{% if course.enrolled? %}
<a
href="{% route activity_viewer,
id: activity.id,
course_id: params.course_id,
learning_path_id: params.learning_path_id
%}" class="{{ class }}"
>
{{ activity.title }}
</a>
{% else%}
<span class="{{ class }}">
{{ activity.title }}
</span>
{% endif %}

View File

@ -1,4 +1,8 @@
<div class="np-card-container">
<a href="{% route dashboard %}" class="np-back-button back-to-courses-btn" aria-label="{% t shared.go_back %}">
<i class="far fa-arrow-left np-hidden-mobile np-icon-back back-arrow"></i>
Back to My Courses
</a>
<div class='np-course-header'>
<img
src="{{ course.image_url }}"
@ -19,7 +23,7 @@
</div>
<div class='np-course-bottom'>
<div class='np-course-bottom-left'>
<div class='np-course-bottom-left-title'>
<div class='np-course-bottom-left-title' id='course-overview'>
Curriculum
</div>
<div class='np-course-bottom-left-outline'>
@ -28,9 +32,16 @@
{{ section.name }}
</div>
{% for activity in section.activities %}
<div class='np-course-bottom-left-outline-activity'>
{{ activity.title }}
{% if activity.locked? %}
<div>
{% include "course_activity_locked" %}
</div>
{% else %}
<div class="course-links">
{% include "course_activity_unlocked", class: "np-course-bottom-left-outline-activity" %}
</div>
{% endif %}
{% endfor %}
{% endfor %}
</div>
@ -114,6 +125,9 @@
font-size: 18px;
line-height: 28.8px;
font-weight: 400;
color: black;
opacity: 0.7;
text-decoration: none;
}
.np-course-bottom-right {
margin-left: 50px;
@ -156,4 +170,20 @@
margin-left: 110px;
}
}
.np-icon-back {
color:black;
}
.back-to-courses-btn {
display: flex;
align-items: center;
justify-content: flex-end;
font-weight: 500;
color: black;
}
.back-arrow {
font-size: 0.8rem;
margin-right: 5px;
font-weight: 500;
}
</style>

View File

@ -0,0 +1,40 @@
<div class="np-course-outline">
<div class="np-text-title np-course-outline-title">
{% t .header, key: current_school.course_vocabulary %}
</div>
<div class="np-course-outline-content">
<ol class="np-course-outline-content-section">
{% for section in course.sections %}
<li class="np-course-outline-content-section-list">
<div class="np-course-outline-content-section-name np-text-title-bold np-text-title-bold">
{{ section.name }}
</div>
<ol class="np-course-outline-content-activity">
{% for activity in section.activities %}
<li class="np-course-outline-content-activity-list">
{% if activity.completed? %}
<i class="fas fa-circle np-course-outline-content-activity-icon np-button-color"></i>
{% if activity.locked? %}
{% include "course_activity_locked" %}
{% else %}
{% include "course_activity_unlocked", class: "np-course-outline-content-activity-link-completed" %}
{% endif %}
<div class="np-button-background-color np-course-outline-content-activity-list-bar"></div>
{% else %}
<i class="far fa-circle np-course-outline-content-activity-icon"></i>
{% if activity.locked? %}
{% include "course_activity_locked" %}
{% else %}
{% include "course_activity_unlocked", class: "np-course-outline-content-activity-link" %}
{% endif %}
<div class="np-course-outline-content-activity-list-bar"></div>
{% endif %}
</li>
{% endfor %}
</ol>
</li>
{% endfor %}
</ol>
</div>
</div>

View File

@ -1,5 +1,6 @@
{% comment %} {% include "header" %} {% endcomment %}
{% include "course_version_outdated_alert", courses: courses.featured %}
<main class="np-main np-homepage">
<div class="np-homepage-hero">
<img class="np-homepage-hero-image"
@ -15,7 +16,9 @@
{{ homepage.subheadline }}
</div>
</div>
</div>
{% include "sub_navigation" %}
{% include 'courses_catalog' %}
</main>
{% comment %} {% include "footer" %} {% endcomment %}

View File

@ -0,0 +1,48 @@
<footer class="uk-padding-large-vertical uk-border-top">
<div class="uk-container uk-container-center">
<div class="uk-grid uk-padding-large-left uk-padding-large-right">
<div class="uk-width-small-1-1 uk-width-medium-7-10 uk-margin-bottom">
{% if website_footer.show_navigation_links? %}
<nav>
<ul class="uk-margin-bottom-remove uk-text-center-small">
{% for website_navigation in footer_navigations %}
<li>
<a href="{{ website_navigation.path }}" {% if website_navigation.external? %} target="_blank" {% endif %}>
{{ website_navigation.name }}
</a>
</li>
{% endfor %}
</ul>
</nav>
{% endif %}
{% if website_footer.show_customer_service_email? and website_footer.school_customer_service_email %}
<p class="uk-text-center-small">
<p id="anchor-contact"> NOTE: If you are having trouble logging in make sure to check your email and follow the prompts to activate your account. <br> If you still have trouble contact us at <a href="mailto:{{ website_footer.school_customer_service_email }}">
{{ website_footer.school_customer_service_email }}
</a>
<!-- {% t .need_help %}
{% t .email %} -->
<!-- <a href="mailto:{{ website_footer.school_customer_service_email }}">
{{ website_footer.school_customer_service_email }}
</a> -->
</p>
{% endif %}
</div>
<div class="{% if website_footer.show_customer_service_email? or website_footer.show_navigation_links? %}uk-width-medium-3-10{% else %}uk-width-medium-1-1{% endif %}">
{% if website_footer.show_social_media_links? %}
<nav class="social-links">
<ul class="uk-margin-bottom-remove {% if website_footer.show_customer_service_email? or website_footer.show_navigation_links? %}uk-text-right {% else %}uk-text-center {% endif %} uk-text-center-small">
{% for social_media_link in website_footer.social_media_links %}
<li>
<a href="{{ social_media_link.link }}" class="{{ social_media_link.name }}" target="_blank" title="{{ social_media_link.name }}">
<i class="uk-icon-{{ social_media_link.name }}"></i>
</a>
</li>
{% endfor %}
</ul>
</nav>
{% endif %}
</div>
</div>
</div>
</footer>

View File

@ -0,0 +1,106 @@
<header class="school-website-header uk-z-4">
<div class="uk-padding-horizontal uk-container uk-container-center">
<nav class="uk-navbar" data-behavior="dropdown">
<a href="{{ current_school.logo_navigation_url }}" class="uk-brand">
{% if current_school.logo_url %}
<img src="{{ current_school.logo_url }}" alt="{{ current_school.name }}">
{% else %}
<span class="uk-text-large uk-text-bold">{{ current_school.name }}</span>
{% endif %}
</a>
<div class="uk-navbar-flip">
<ul class="uk-navbar-nav uk-hidden-small">
{% for website_navigation in header_navigations %}
<li>
<a href="{{ website_navigation.path }}" {% if website_navigation.external? %} target="_blank" {% endif %}>
{{ website_navigation.name }}
</a>
</li>
{% endfor %}
<li>
<a href="#anchor-my-resources">
My Resources
</a>
</li>
{% search %}
<li class="uk-padding-top">
{% include "search_form" with "" %}
</li>
{% endsearch %}
{% catalog_search %}
<li class="uk-padding-top">
{% include "catalog_search_form" with "" %}
</li>
{% endcatalog_search %}
{% if current_person.signed_in? %}
<li class="uk-parent" data-uk-dropdown="{mode:'click'}">
<a href="#" class="learner-name">{{ current_person.name }}</a>
<div class="uk-dropdown uk-dropdown-flip uk-dropdown-navbar">
<ul class="uk-nav uk-nav-navbar">
<li><a href="{{ routes.my_content_path }}">{{ current_school.my_content_label }}</a></li>
<li class="uk-nav-divider"></li>
<li><a href="{{ routes.log_out_path }}" data-method="delete" rel="nofollow">{% t .log_out %}</a></li>
</ul>
</div>
</li>
{% else %}
<li><a href="{{ routes.log_in_path }}">{% t .log_in %}</a></li>
{% endif %}
</ul>
<div class="uk-visible-small">
{% search %}
<button class="uk-button uk-button-link uk-navbar-toggle mobile-search-toggle mobile-navbar-toggle" data-uk-toggle="{target:'#mobile-search'}">
</button>
{% endsearch %}
{% catalog_search %}
<button class="uk-button uk-button-link uk-navbar-toggle mobile-search-toggle mobile-navbar-toggle" data-uk-toggle="{target:'#mobile-search'}">
</button>
{% endcatalog_search %}
<a href="#mobile-nav" class="mobile-navbar-toggle uk-navbar-toggle" data-uk-offcanvas></a>
</div>
</div>
</nav>
</div>
</header>
{% search %}
<div id="mobile-search" class="school-website-header uk-visible-small uk-position-top uk-padding uk-block-default uk-flex uk-border-bottom {% if hide_search_box %}uk-hidden {% endif %}">
{% include "search_form" with "" %}
<a class="uk-button uk-button-link" href="{{ routes.my_content_path }}">{% t .cancel %}</a>
</div>
{% endsearch %}
{% catalog_search %}
<div id="mobile-search" class="school-website-header uk-visible-small uk-position-top uk-padding uk-block-default uk-flex uk-border-bottom {% if hide_search_box %}uk-hidden {% endif %}">
{% include "catalog_search_form" with "" %}
<a class="uk-button uk-button-link" href="{{ routes.school_website_catalog_path }}">{% t .cancel %}</a>
</div>
{% endcatalog_search %}
<div id="mobile-nav" class="uk-offcanvas">
<div class="uk-offcanvas-bar uk-offcanvas-bar-flip">
<ul class="uk-nav uk-nav-offcanvas" data-uk-nav>
{% for website_navigation in header_navigations %}
<li>
<a href="{{ website_navigation.path }}" {% if website_navigation.external? %} target="_blank" {% endif %}>
{{ website_navigation.name }}
</a>
</li>
{% endfor %}
{% if current_person.signed_in? %}
<li><a href="{{ routes.my_content_path }}">{{ current_school.my_content_label }}</a></li>
<li><a href="{{ routes.my_profile_path }}">{% t .my_profile %}</a></li>
<li class="uk-nav-divider"></li>
<li><a href="{{ routes.log_out_path }}" data-method="delete" rel="nofollow">{% t .log_out %}</a></li>
{% else %}
<li><a href="{{ routes.log_in_path }}">{% t .log_in %}</a></li>
{% endif %}
</ul>
</div>
</div>

View File

@ -0,0 +1,4 @@
<div class="uk-padding-large-vertical uk-padding-horizontal uk-border-bottom">
<h2 id="anchor-my-resources">{{ my_content.headline }}</h2>
<h3 class="uk-margin-top-remove">{{ my_content.subheadline }}</h3>
</div>

View File

@ -0,0 +1,34 @@
<div class="uk-container uk-container-center school-website-course-index-list uk-margin-top uk-margin-bottom">
<div class="uk-padding-horizontal">
{% if current_school.apps.instructor_led_training.active? %}
{% if current_person.upcoming_registered_events.any? %}
{% include "events" %}
{% else %}
{% include "events_empty" %}
{% endif %}
{% endif %}
{% if my_content.learning_paths? %}
{% include "my_paths" %}
{% endif %}
{% include "my_content_header" with "" %}
<div class="uk-grid uk-grid-flex uk-margin-left-remove">
<!-- {% include "filters" with "" %}
{% if current_school.filtering_enabled? and current_person.filterable_categories.count > 0 %}
<div class="uk-width-medium-5-6 uk-padding">
{% else %}
<div class="uk-width-1-1 uk-padding">
{% endif %} -->
<div class="uk-width-1-1 uk-padding">
<ul class="uk-grid uk-grid-medium school-website-course-list uk-grid-match" data-uk-grid-match="{target:'.uk-panel'}">
{% for course in my_content.courses %}
{% if course.course_category_names == "Resource" %}
{% include "course" %}
{% endif %}
{% endfor %}
</ul>
</div>
</div>
</div>
</div>

View File

@ -86,7 +86,7 @@
.np-header-logo-image {
display: block;
margin: auto;
height: 80px;
height: 120px;
}
@media screen and (min-width: 768px){

View File

@ -59,7 +59,6 @@
</div>
</div>
</main>
{% comment %}
<script>
// document.getElementById("header").scrollIntoView();
@ -71,18 +70,24 @@
// Grabs Email Address Value
const learnerEmail = $("#learner_email")[0].value;
const blockedEmails = [
"gmail.com", "yahoo.com", "hotmail.com", "aol.com", "outlook.com",
"icloud.com", "me.com", "mac.com"
]
if ($("#learner_email")[0].value.length > 0){
if(regexExp.test(learnerEmail) == true){
if ($("#learner_email")[0].value.includes('@scenariocloud.com')){
$("#learner_email").css("background", "#f2f4f5");
$("#bad_email_alert").css("display", "none");
$("#submit_button").css("pointer-events", "auto");
var slicedEmail = learnerEmail.split('@');
if (blockedEmails.indexOf(slicedEmail[1]) > -1) {
$("#learner_email").css("background", "salmon");
$("#bad_email_alert").css("color", "#f2f4f5");
$("#bad_email_alert").css("display", "block");
$("#submit_button").css("pointer-events","none");
}
else {
$("#learner_email").css("background", "salmon");
$("#bad_email_alert").css("color", "#f2f4f5");
$("#bad_email_alert").css("display", "block");
$("#submit_button").css("pointer-events","none");
$("#learner_email").css("background", "#f2f4f5");
$("#bad_email_alert").css("display", "none");
$("#submit_button").css("pointer-events", "auto");
}
} else {
$("#learner_email").css("background", "#f2f4f5");
@ -95,7 +100,6 @@
document.addEventListener('keyup', checkIfInputsExist);
console.log(123213213);
</script>
{% endcomment %}
<style>
.np-input-label{
color: #ffffff;

View File

@ -0,0 +1,40 @@
function checkIfInputsExist (){
window.setTimeout(function(){
// Regular expression to check if string is email
const regexExp = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
// Grabs Email Address Value
const learnerEmail = $("#learner_email")[0].value;
// List of Emails to Block
const blockedEmails = [
"gmail.com", "yahoo.com", "hotmail.com", "aol.com", "outlook.com",
"icloud.com", "me.com", "mac.com"
]
if ($("#learner_email")[0].value.length > 0){
if(regexExp.test(learnerEmail) == true){
var slicedEmail = learnerEmail.split('@');
if (blockedEmails.indexOf(slicedEmail[1]) > -1) {
$("#learner_email").css("background", "salmon");
$("#bad_email_alert").css("color", "#f2f4f5");
$("#bad_email_alert").css("display", "block");
$("#submit_button").css("pointer-events","none");
}
else {
$("#learner_email").css("background", "#f2f4f5");
$("#bad_email_alert").css("display", "none");
$("#submit_button").css("pointer-events", "auto");
}
} else {
$("#learner_email").css("background", "#f2f4f5");
$("#bad_email_alert").css("display", "none");
$("#submit_button").css("pointer-events", "auto");
}
}
}, 500);
}
document.addEventListener('keyup', checkIfInputsExist);
console.log(123213213);

View File

@ -0,0 +1,101 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
{% assign module_1 = "cfcfa17a-968f-43d8-9371-cae4daa4cb14" %}
{% assign module_2 = "a559a221-b42c-4d90-941f-b3a562ede3ea" %}
{% assign module_2_extra = "a1713ad1-1aeb-4114-90a7-5bf9b58ac49d" %}
{% assign module_3 = "8ac19e6e-743d-419c-a39c-58555a22be3b" %}
{% assign module_4 = "2d3cfb6f-9f50-45f6-86e1-538e7d1ddc3f" %}
{% assign module_5 = "8f369e9f-a3de-4c85-b296-1afcd533dd0a" %}
{% assign module_6 = "09f16e0d-487d-4b81-b683-38fd21b58949" %}
{% assign module_7 = "86ea3b94-777f-4501-930d-fbafa4d058c7" %}
{% assign module_8 = "6e36f89d-49c9-4a9f-85e3-08fb348479e9" %}
{% assign module_9 = "3cba00e2-7889-40f8-bc7a-78c4e89a4ba0" %}
{% assign module_10 = "7e5e1036-719d-4c59-b760-b627d2636ee1" %}
{% assign module_11 = "cb089bcf-4e1d-449e-b727-c3ac27f9add8" %}
{% assign module_12 = "9b5fb4ee-dfea-423a-99ec-8163f0cead29" %}
{% assign rolling_admission_group_id = "c96bed5b-0580-472c-ac7d-77f4e7a3de97" %}
{% assign course_release_hour = 14 %}
{% if courses.enrolled.any? %}
<div class="row row-with-thumbnails">
{% for course in courses.enrolled %}
{% if course.id == module_1 %}
<div class="{{ class }} fellowship-course module-1">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_2 %}
<div class="{{ class }} fellowship-course module-2">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_2_extra %}
<div class="{{ class }} fellowship-course module-2-extra">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_3 %}
<div class="{{ class }} fellowship-course module-3">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_4 %}
<div class="{{ class }} fellowship-course module-4">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_5 %}
<div class="{{ class }} fellowship-course module-5">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_6 %}
<div class="{{ class }} fellowship-course module-6">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_7 %}
<div class="{{ class }} fellowship-course module-7">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_8 %}
<div class="{{ class }} fellowship-course module-8">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_9 %}
<div class="{{ class }} fellowship-course module-9">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_10 %}
<div class="{{ class }} fellowship-course module-10">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_11 %}
<div class="{{ class }} fellowship-course module-11">
{% include "cards_course" with course %}
</div>
{% elsif course.id == module_12 %}
<div class="{{ class }} fellowship-course module-12">
{% include "cards_course" with course %}
</div>
{% else %}
<div class="{{ class }}">
{% include "cards_course" with course %}
</div>
{% endif %}
{% endfor %}
{% for group in current_person.groups %}
{% if group.id == rolling_admission_group_id %}
{% assign enrollment_date = group.enrolled_at %}
{% include "rolling_admission_schedule" %}
{% endif %}
{% endfor %}
</div>
{% else %}
{% capture message %}
{% t shared.zero_state.courses.index,
key: current_school.course_vocabulary
%}
{% endcapture %}
{% include "courses_zero_state", message: message %}
{% endif %}

View File

@ -0,0 +1,41 @@
{% if learning_path.enrolled? %}
<div class="np-top-cta-progress-content">
<div class="np-top-cta-progress-title np-text-title">
{% t .progress %}
</div>
<div class="np-progress-bar-container">
<div
style="width: {{ learning_path.progress }}%"
class="np-button-background-color np-card-progress-bar">
</div>
</div>
<div class="np-top-cta-progress-text
{% if learning_path.completed? %} np-color-success {% else %} np-button-color {% endif %}
">
{% t shared.progress, count: learning_path.progress %}
</div>
</div>
{% endif %}
{%comment%}<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if learning_path.enrolled? %}
{% if learning_path.current_item.course? %}
href="{% route learning_path_course, id: learning_path.current_item.id, learning_path_id: learning_path.id %}"
{% elsif learning_path.current_item.training_event? %}
href="{% route training_session, id: learning_path.current_item.id %}"
{% endif %}
{% else %}
href="{% route learning_path_enrollment, code: learning_path.enrollment_code %}"
{% endif %}
>
{% if learning_path.enrolled? == false %}
{% t shared.enroll %}
{% elsif learning_path.started? == false %}
{% t shared.learning_path.start %}
{% elsif learning_path.completed? %}
{% t shared.learning_path.view %}
{% else %}
{% t shared.continue %}
{% endif %}
</a>{%endcomment%}

View File

@ -0,0 +1,34 @@
<script>
$(document).ready(function () {
let selfGuidedCourseReleaseHour = Number({{ course_release_hour }})
$(".fellowship-course").css("display", "none")
let enrollment_date = new Date(Number('{{ enrollment_date | date: "%s" }}') * 1000).setHours(selfGuidedCourseReleaseHour, 00, 00)
console.log("Enrollment date with 9am EST start time", new Date(enrollment_date))
const now = new Date();
$(".fellowship-course").each(function (i) {
let courseModule = i + 1;
$(`.fellowship-course.module-1`).css("display", "block");
if (courseModule > 1) {
let daysDifference = ((30 * i) * 24 * 60 * 60 * 1000);
let timeDiff = now.getTime() - new Date(enrollment_date).getTime();
if (timeDiff >= daysDifference) {
console.log(`Releasing selfGuided module ${courseModule}`)
$(`.fellowship-course.module-${courseModule}`).css("display", "block")
if (courseModule >= 2) {
$(`.fellowship-course.module-2-extra`).css("display", "block")
}
}
}
})
});
</script>

View File

@ -0,0 +1,18 @@
<nav class="np-sub-navigation">
<div class="np-sub-navigation-content">
{% for link in navigations.sub_navigation %}
{% if link.label == 'Learning Paths' %}
{% if learning_paths.enrolled.size == 0 %}
{% continue %}
{% endif %}
{% endif %}
<div class="np-sub-navigation-content-item {{ link.active_class }}">
<a class="np-sub-navigation-content-item-link" href="{{ link.url }}">
<i class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon"></i>
{{ link.label }}
</a>
<div class="np-sub-navigation-content-item-bar np-button-background-color"></div>
</div>
{% endfor %}
</div>
</nav>

View File

@ -0,0 +1,30 @@
{% include "header" %}
{% include "course_version_outdated_alert", courses: courses.enrolled %}
{% include "sub_navigation" %}
<main class="np-main np-dashboard np-subpage-container np-max-width">
<div class="row np-flex-center">
<div class="col-xs-12 col-sm-8">
{% if features.learning_paths? %}
{% if learning_paths.enrolled.size > 0%}
<div class="np-dashboard-resources-title">
{% t shared.learning_paths %}
</div>
{% include "learning_paths_index", items: learning_paths.enrolled %}
{% endif %}
{% endif %}
<div class="np-dashboard-resources-title">
{% t shared.course_vocabulary.plural, key: current_school.course_vocabulary %}
</div>
{% include "courses_index", class: "col-xs-12 col-sm-6 np-stretch-content" %}
</div>
{% if features.training_events? %}
<div class="np-grid-spacing col-xs-12 col-sm-4">
<div class="np-dashboard-resources-title">
{% t .upcoming_events %}
</div>
{% include "training_events_dashboard" %}
</div>
{% endif %}
</div>
</main>
{% include "footer" %}

View File

@ -0,0 +1,12 @@
{% include "header" %}
{% include "sub_navigation" %}
<main class="np-main np-training-events np-subpage-container np-max-width">
<div class="row">
<iframe
style="border:none;"
width="100%" height="1000"
src="https://calendar.google.com/calendar/u/0/embed?src=pmtpcalendar@gmail.com&ctz=America/New_York"
title="Wild Health Public Calendar">
</iframe>
</main>
{% include "footer" %}

View File

@ -61,6 +61,3 @@ _Analytics:_
* More for Admins
* Pulling certain roles & attributes
* Being able to impersonate that person, or move them to complete when they are stuck. View what they see.
TODO: Remove deleted from looker extract & exception handling.
TODO: Add Date to Looker Extract - date added to group? Something else?

View File

@ -1,28 +1,30 @@
# Blacklane
## Whos Who
- Calum: Content, User journeys
- Colin: Might be the same (has covid 7/5)
## Tasks
- [X] Create Flow Chart of Roles, Courses, NP Definitions etc
- [X] Lay out one course per role since we can't hide activities
- [X] Check with SE if we can hide activities based on role
- [ ] Create flow chart of how to create courses
- [ ] Annotated version of diagram - remove details
- [ ] Annotated version of diagram - remove details
- [ ] Go through Master Course and look for holes
- [ ] Review
## Integrations:
## Integrations
- Salesforce
- Salesforce
## Genzeral Notes
- currently hosting every module in survey gizmo and intercom
- Need to break these down into activities
- Components == activities:w
- Calum wants the academy to be a living, adaptable thing
- Calum wants the academy to be a living, adaptable thing
- DEADLINES: End of July, all courses done, Mid-August, Launch
- Ideally, august launch is full - they will still add courses, but the 9 modules must be completed before they can accept rides
- Hasn't discussed how to introduce the Launch
@ -33,50 +35,62 @@
- Calum has google sheet with all the training structures
- Roles in chauffer - admin, provider, dispatcher, reviewer, driver
- Is there a priority/importance of the roles?
- Regardless of role, all training is the same, currently.
- Regardless of role, all training is the same, currently.
- Need to separate it based on permisionning. How to separate training?
- Each role is different, no monetary incentive
- New account gets all training under Y
- New account gets all training under Y
- Each course will need to be for each category
- Salesforce integration
- What is the trigger for Norm to gain another permission? Partner portal just updates their chauffer - only admin can update a driver's rules and permissions
- Updated driver doesn't need to take new training
- Permissioning doesn't change very often
- If someone has dropped off the app for 6 months, they will have to redo the trianing
** 7/19/2022 **
Colin
- If someone has dropped off the app for 6 months, they will have to redo the trianing
**7/19/2022**
Colin
Which access rights/permissions within BambooHR to turn on the integration
Separation of instances - chauffer and internal -S
Northpass chauffers and northpass internal -
Northpass chauffers and northpass internal -
Calum is sick now, surgery - next week he will return
Design for both - start with basic design
Integration into app in Q4 -
SSO for chauffers
Integration into app in Q4 -
SSO for chauffers
UUID - not through email since they have duplicates
Integrating with salesforce - what needs to be done in their salesforce to turn on integration
Integrating with salesforce - what needs to be done in their salesforce to turn on integration
Colin is very familiar with SFDC
Timeline: SFDC Integration first, then migrate content into NP, go live in August to test for Chauffers
Timeline Internal: HR team wants to use it right away, GDPR as first training
Timeline: SFDC Integration first, then migrate content into NP, go live in August to test for Chauffers
Timeline Internal: HR team wants to use it right away, GDPR as first training
Just focus on content creation with Chris
Turn on salesforce
watch it not work
have p set up webhook script for learner completed
have p set up webhook script for learner completed
pass uid in enrollment URL/invitation URL
chauffer clicks, enrolls, takes course, webhook goes back to SFDC
chauffer clicks, enrolls, takes course, webhook goes back to SFDC
Thoughts:
Turn on so enrollment object gets created
Once it exists in salesforce, with workato we can update xyz in enrollments object
Turn on so enrollment object gets created
Once it exists in salesforce, with workato we can update xyz in enrollments object
** Meeting with Chris from Learning Team **
**Meeting with Chris from Learning Team**
Any department has to go through initial training
Service Excellence team,
Service Excellence team,
Newbies from Manila are contractors and don't have BBHR access
Newbies from Manila are contractors and don't have BBHR access
These are your customer care team
Berlin, LA, etc all have Blacklane Employees
Berlin, LA, etc all have Blacklane Employees
ILT wont work because they have to do instructor led training within a course
## 01/18/2023
### Braze/Northpass
- Webinar and Learning Data should go into Braze. If Braze can store that data, even better.
- Store IDs in Northpass from Braze or Salesforce
- They need to limit API calls because Braze will charge them more with even more API calls.
Data Warehouse: Airflow - between warehouses.
Trigger would come from warehouse that X course needs to happen because of decision Y.

View File

@ -79,7 +79,7 @@ To better grasp the content:
* Median minutes for spent on training is the entire course. Not activity.
* Out of 10 cases of average start count is > 5... more than 5 times they have tried to start training. 10 cases total, 8 are Northpass.
TODO: Look in DataDog after Doris sends time or people that are being stuck.
DONE: Look in DataDog after Doris sends time or people that are being stuck.
Something else that Joonas has mentioned, enrollment process between Northpass & Edume is quite different. Differences:
* Northpass needs first, last, and email
@ -144,3 +144,39 @@ For them to see an error with a driver is two ways:
If a driver has registered, then they have completed the training and all is working successfully.
Joonas will be back on Monday to give us the credentials.
## 01/23/2023
### Next 6 months Discussion
Sten & Oliver have been added to this meeting
* Olivier moved to the Training team and took over for Vera and all her tasks.
* Vera moved to a different team.
Notes regarding contract:
Travis wants to review expectations for the next 6 months. Last review was July, Travis thinks it was a successful process.
Northpass is aware of some outstanding issues on reliability that need to be completed asap.
Do we need a new scope of work?
Course related issues have been solved, but platform reliability still needs to be solved.
Charlie's webview article suggestion didn't work because of Android issues and versioning. Lots of Drivers are using Android < v10.
Drivers are still getting "stuck" - they usually see the white screen.
The issue doesn't seem to happen in UK or European markets, only African markets. Internet connectivity could be an issue, but how can we possibly diagnose that?
But, for some reason, this is _only_ happening in Northpass. So even if it only happens in African+Azerbaijani markets, it only happens in Northpass.
Happens in primarily 4 courses. They are all under the category 'in-app driver training'. They are also mandatory courses, so the issue is more likely to appear.
Edume is also being displayed within a webview of the Bolt Driver app. This issue becomes more prominent with re-training courses.
Let Aleksandr know about credentials.
Travis: other than the webview issue, above, are there other concerns about Northpass?
Doris/Sten: Completion times & re-taking count. In Nigeria and Kenya, the minutes spent on NP training is close to double for internal solution.
Example: Northpass-11min, Edume-6min, Stories-4min. Across all markets.
Enrollment to Completion would be "longer". We are unsure if this is enrollment to completion webhook - or something else?
Median minutes is only for people who have completed the training. Moment 1: clicking button in their app, End Moment: Webhook reaching.
_The main issue seems to be around webhooks. If webhooks are taking 3-5 minutes to send, then we should be in line with the other platforms._
Next steps - Travis, do you want to create another SOW? How do we want to work forward for the next 6 months?
Sten: we need to properly scope the issue that we are discussing. They are being impacted on many fronts from this delayed webhook issue.
Once we have alignment on solving the webhooks, then we can properly create a scope for the next 6 months.

View File

@ -133,5 +133,5 @@ Time line Needs (3 primary things):
- Siying and Rachel has a list of the courses. But how about data and progress?
- Can Fuse transfer over progress data?
- Export CSVs per course? or Group?
TODO: Ask what the data set should be.
DONE: Ask what the data set should be.
TODO: Ask Charlie for Course CSV (Just like Walmart)

View File

@ -47,7 +47,7 @@ They feel like this has been talked about for a longtime. Just waiting for a GO
* Best Practices - What's going to work for them?
* Ideal usage of Data?
* Someone engages with that piece of content
* Marketo Tracks a course completion - Success!
* Marketo Tracks a course completion - Success!
* Katlin also wants to trigger an email for someone that starts a course but doesn't complete
* Lofty goals? Not yet, most will be on the marketo side
* Setup customer MQL
@ -70,8 +70,8 @@ They feel like this has been talked about for a longtime. Just waiting for a GO
* #5746b2 <-- G2 Purple
* Start providing best practices for certifications <-- Katlin
* Erin to take over content & overall admin responsbilities
* Certifications Launch in Q2 of 2023, maybe end of Q2 (April)
* First Certifications Discussion Mid December to plant seed
* Certifications Launch in Q2 of 2023, maybe end of Q2 (April)
* First Certifications Discussion Mid December to plant seed
## 10/02/2022
@ -132,7 +132,7 @@ They feel like this has been talked about for a longtime. Just waiting for a GO
* Sending people to Reports course, specifically
* Prepping learners for report season
* Course highlight!
* Sending them G2U and sharing course.
* Sending them G2U and sharing course.
## 10/31/2022
@ -149,7 +149,7 @@ They feel like this has been talked about for a longtime. Just waiting for a GO
* They need to measure ENGAGEMENT. "You can engage with a piece of content but not finish it."
* View Metrics are going to be important for them.
* Erin saw a certificate webinar - "How to build out a certificate program?"
* Mentioned having an interactive quizzes that are more than just True/False.
* Mentioned having an interactive quizzes that are more than just True/False.
* Should we add a quiz at the activity with the most or least amount of engagement?
## 11/07/2022
@ -254,4 +254,4 @@ She's unsure of what the ROI metric and how to measure success, but what she thi
* Compare analytics between Northpass and sales/deals as a partner.
* No Partner-CRM. Crossbeam & Salesforce are their main platforms.
* Difference between premium and enterprise reporting.
TODO: Send screenshots on Workato Information, Analytics, Workflows & Group Provisioning - Due: Thursday Afternoon.
DONE: Send screenshots on Workato Information, Analytics, Workflows & Group Provisioning - Due: Thursday Afternoon.

View File

@ -5,8 +5,8 @@
- [X] Channel Cards should say 33% viewed not complete
- [X] Add timing to activity titles (Melinda)
- [X] Add timing to channel card (Northpass)
- [X] Challenging Case Content, split into different courses
- [X] Dont share SCORM course Phaco Funds with Dr. Sam Garg
- [X] Challenging Case Content, split into different courses
- [X] Dont share SCORM course Phaco Funds with Dr. Sam Garg
- [X] My Topics - changing to what?
- [X] All Channels should be All Topics
- [X] Learning Paths >> Programs
@ -25,7 +25,7 @@
- [X] If we need to back off on card content properties (course properties, such as time)
- [X] Programs > Bummer, you're not part of any programs
- [X] Other Topics > Yikes! You aren't accessing any any modules
- [X] Ping Tigue regardig
- [X] Ping Tigue regarding
Events should be figured out by our demo -
- [X] Add featured content spotlight box that moves the 4 boxes down
- [X] Can we showcase videos on the main page with a little modal?
@ -40,7 +40,7 @@ Events should be figured out by our demo -
- [X] Useful Links - JJ vision Pro, Contact Us, JJI, YouTube
- [X] Legal Allyson
- [-] Legal Notice needs to change
- [X] This cant be $250,000k total for global academy
- [X] This can't be $250,000k total for global academy
- [X] AMER - is LatAm, Ameica, Canada
- [X] ASIAPAC - NZ, AU, All of Asia
- [X] Europe is Europe
@ -51,7 +51,7 @@ Figure out events setup
### Notes
Customer base: residents, fellows, surgeons, optometrists, opthamologists
Customer base: residents, fellows, surgeons, optometrists, ophthalmologists
Chapter Content
Registrations will be a link that Melinda will manager
@ -60,14 +60,14 @@ Registrations will be a link that Melinda will manager
Role is what will decide what content they have more than region or location
Content is by role
Events is by State
It isn't even primary speciality
It isn't even primary specialty
Once the error is fixed on the form, K will let M know to test
Events are tied to... course or group
Events are tied to... Course or group
But if we have a group per state,
Are we also creating groups around role, not primary speciality
When loading an event, event should select between both groupings - a Texas Opthamologist
She needs granuar control, she may not want to invite students or fellows
Or a residency event and not invite opthamlogists
Are we also creating groups around role, not primary specialty
When loading an event, event should select between both groupings - a Texas Ophthalmologist
She needs granular control, she may not want to invite students or fellows
Or a residency event and not invite ophthalmologists
Other one:
How do we differentiate from "all"?
@ -97,7 +97,7 @@ This is ONLY for the US
- Talk and brainstorm about possibilities to refine the data that the search pulls from
- New Site launched One Vision. Pro site. It says "Interact" at the top of the dashboard. Onevision.prointeract.com.
- Melinda called it a "show pad". <https://www.prointeract.com/#mousescroll>
- Internal training site? CMS? Hard to tell. But it has a folder for sales training. It looks just like a list of files and resources.
- Internal training site? CMS? Hard to tell. But it has a folder for sales training. It looks just like a list of files and resources.
## 10/19/2022
@ -175,7 +175,7 @@ DONE: Get rid of fine tuned and change Podcasts to Professional Podcasts - categ
### Pre-Holiday Sync
TODO: Send Melinda a list of all the information Northpass stores
DONE: Send Melinda a list of all the information Northpass stores
## 01/09/2023
@ -183,8 +183,14 @@ TODO: Send Melinda a list of all the information Northpass stores
- All Course Cards should say Start, if viewed, Continue
- Mimic the Privacy Links in Footer of [Clean & Clear](https://www.cleanandclear.com/)
- Verbatim: Do Not Sell or Share My Personal Information | Limit the use of my Sensitive Personal Information
- Verbatim: Do Not Sell or Share My Personal Information | Limit the use of my Sensitive Personal Information
- Need a list of the personal information and records that Northpass stores
TODO: Find course creation cheat sheet/documentation
DONE: Find course creation cheat sheet/documentation
TODO: Recorded Webinars Category
TODO: List of Form Fields - Country is hidden.
DONE: List of Form Fields - Country is hidden.
## 01/23/2023
### Content & Design Changes
DONE: Hide the TOC for all courses except webinars - specifically, podcasts, videos, documents.

View File

@ -7,5 +7,5 @@
Jessica is doing the same thing but under a new manager.
Told her to check in on updating Hubspot info via CSV
Brian's last communications with Prenda: December 7th
TODO: Send pricing on Enterprise and what that pricing would be
DONE: Send pricing on Enterprise and what that pricing would be
Wants to know about missing features. What features would make this more robust?

View File

@ -102,9 +102,8 @@ Especially on Enterprise.
Certifications:
Stripe Integration and Revenue Tools
They want a certification portal where they can "sell" certifications, similar to a web shop.
AppCues:
They want a certification portal where they can "sell" certifications, similar to a web shop
:
She wants to make sure no risk in setting up the appcues stuff.
Forums:
@ -148,4 +147,11 @@ They want to ask questions like "which option".
She wants to be integrated into Northpass, like passing scores and milestones.
Pro-profs & Question Pro at the top contenders.
Skuid's founder is retiring and joining the board and wants the RTE "beautified". Even the code guy said that.
Skuid's founder is retiring and joining the board and wants the RTE "beautified". Even the code guy said that.
## 01/19/2023
### Feature Requests
How to use a prop email/secondary email as a recovery email?
FEAT: Notifications after a Learning Path - not at the last course!

View File

@ -95,7 +95,7 @@ Kayla personal email: klambie@sympatico.ca
### Workflow issues with Enrolling
Courses should be more content repositories, and enrolling needs to be more seamless. So if an non-enrolled person searches and clicks an activity, they should be auto-enrolled and brought straight to the activity they clicked on.
TODO: Enroll button should say "Start Course" even if they aren't enrolled and a click should Enroll + Place them at their activity.
DONE: Enroll button should say "Start Course" even if they aren't enrolled and a click should Enroll + Place them at their activity.
FEAT: Can we remember the search click to drop them into the activity they clicked on?
WARN: Drag and drop of activities is glitchy and dropping activity in wrong spots. As if it forgets the mouse is dragging it and leaves the activity in the wrong place.
@ -110,14 +110,14 @@ In a perfect world:
Swift recently went through a big restructuring, and 30% of the many teams, including marketing have left. The restructuring is focusing on the core product instead of innovation and new features.
Last random question: her manager, Rob, hates the gravatar things. Can the gravatar default change to a default image.
TODO: Ask if we can change everyone's gravatar to the default bathroom icon guy. If we can't, please disable gravatars and change everyone a gravatar shows up (header) to the bathroom guy.
Last random question: her manager, Rob, hates the gravatar things. Can the gravatar default change to a default image.
DONE: Ask if we can change everyone's gravatar to the default bathroom icon guy. If we can't, please disable gravatars and change everyone a gravatar shows up (header) to the bathroom guy.
## 12/21/2022
### Feedback on Hubert's Designs
TODO: Invite Kayla to the Sandbox.
DONE: Invite Kayla to the Sandbox.
Broadly okay, but little things were wrong. Here were the items:
* Text is not responsive. The toolbar is the full screen. It should be about half of the size. Optimally, when you land you should see some courses below the toolbar. ~67% browser resize.

View File

@ -270,7 +270,14 @@ Need to know:
* All Compliance Courses Completed (Completion Date)
* 30 difference/requirement between those dates.
## 01/24/2023
## 01/17/2023
### Custom Reports
### Standard Meeting
From Molly's Email:
> Requesting a custom report that shows prescribers who have completed the 1099 Prescriber: Getting Started at Talkspace, but has not completed any compliance group.
> Requesting a custom report that shows providers who have completed 1099 Provider: Talkspace Managed Care Plans but has not completed any compliance group.
Goal: They need to communicate with the people who have not completed the compliance courses within 30 days.
TODO: Add Column with Date Complete of Getting Started or Managed Care. They would like a single spreadsheet with everyone's completed courses.

View File

@ -54,4 +54,20 @@ Biggest Gap in Onboarding Process?
* Brian trying to find data point: Do accounts without an AM churn less?
Katie wants to figure out _who_ is using TSU. Holly wants to find easier access to track that data.
TODO: Email Brian about getting Salesforce turned on? And send CZ video.Ask about marketing collaboration.
DONE: Email Brian about getting Salesforce turned on? And send CZ video.Ask about marketing collaboration.
## 01/24/2023
### Internal Training Discussion
Customer Success Training: The 100 questions projects
* Questions about the software, i.e. Navigation, updating password, etc
* Some more specific questions that require searching and screenshot
* Currently on a Google Doc that you just click through.
* Nitty Gritty questions included.
* One of Brian's biggest items is the 100 questions into Northpass.
There needs to be some deviation between departmental training.
In Brian's Mind: Upload the document to Northpass.
Theory: How do you make internal training applicable to every employee? Finance and Engineering, etc.

View File

@ -329,3 +329,11 @@ Business Impact?
Engineering was upset that they weren't brought in for the selection process. So for next steps, we will let them set the next cues and steps. They have a lot of questions for Scott and Stephanie.
Travis/Norm wait to hear from Scott about engineering and when they are ready to engage.
## 01/18/2023
### Content & Search Results
For all videos the description text as search results is fine. For text based, it looks lazy.
Search description copy can wait until the January release.
January Release: Rolling release of resources

View File

@ -26,7 +26,7 @@ Next Sprint or following - 2-4 weeks
Daniel has been the WildHealth dev working on this
- [X] Send documentation and endpoints (person created, person added to group)
- [X] Will a user that gets activated count against their MAL? <-- No!
- [X] Will a user that gets activated count against their MAL? <-- No!
diet ->
diseas specific -> autoimmunne
@ -94,7 +94,7 @@ module 7 -> coaching philosophy
- Abby usually handles little IT issues like logins etc.
- Should/Can she send them to NP Support?
- Usual issues are if reset password doesn't work or a course is not accessible.
- Usual issues are if reset password doesn't work or a course is not accessible.
- Assistant: Baeligh Moburley
- All inquiries will go to Baeleigh first and then passed onto us.
- Anything I can do to help Mike? Nothing yet. He is pumped that Abby and Trei will be getting custom analytics.
@ -159,5 +159,18 @@ DONE: Deliver Trei Analytics.
Back to ILTs & Webinars, embedding a Google Calendar
Abby to get public calendar link.
TODO: Pull search results from DD - as far back as possible.
TODO: Improve Search for Activities - add description? Check with SE.
DONE: Pull search results from DD - as far back as possible.
DONE: Improve Search for Activities - add description? Check with SE.
## 01/23/2023
### Small Meeting - One Item
She noticed a font change and wants to change them across the academy.
[Poppins](https://fonts.google.com/specimen/Poppins) - Headers, Titles
[Be Vietnam Pro](https://fonts.google.com/specimen/Be+Vietnam+Pro?query=be+viet) - Body
[Public Calendar Link](https://calendar.google.com/calendar/u/0/embed?src=pmtpcalendar@gmail.com&ctz=America/New_York)
Start with one instance and let Abby know.
TODO: Submit ticket for font changes & iFrame the calendar.

View File

@ -1,19 +1,20 @@
import io
import sys
from re import search
from re import search
import re
import os
import os
import fileinput
from datetime import date
#rootdir = "/Users/normrasmussen/Documents/Northpass/CustomerNotes/"
# rootdir = "/Users/normrasmussen/Documents/Northpass/CustomerNotes/"
# This is for testing
rootdir = "/Users/normrasmussen/Documents/Northpass/CustomerNotes/"
todoDir = "/Users/normrasmussen/Documents/Northpass/"
todoDir = "/Users/normrasmussen/Documents/Northpass/"
input = sys.argv[1]
company = input.split("/")[6]
print(company)
def findCompany(rootdir, company):
files = os.listdir(rootdir)
for fileName in files:
@ -23,6 +24,7 @@ def findCompany(rootdir, company):
company = fileName[:-3]
findTodos(rootdir, company)
def findTodos(rootdir, company):
todos = []
with open(rootdir + company, "r") as currentfile:
@ -34,41 +36,48 @@ def findTodos(rootdir, company):
todos.append(tasks)
writeTasks(rootdir, company, todos)
def writeTasks(rootdir, company, todos):
today = date.today()
currentDate = today.strftime("%m/%d/%Y")
company = company[:-3]
todoDir = "/Users/normrasmussen/Documents/Northpass/"
todoDir = "/Users/normrasmussen/Documents/Northpass/"
with open(todoDir + "Todos.md", "a") as taskFile:
for singleTask in todos:
task = singleTask.rsplit("* [ ] ")[1]
taskFile.write("* [ ] (" + company + ") " + "[" + currentDate + "] " + task)
taskFile.write(
"* [ ] (" + company + ") " + "[" + currentDate + "] " + task
)
#def deleteCompleted(todoDir):
# def deleteCompleted(todoDir):
# todoList = todoDir + "Todos.md"
# with open(todoList, "r") as file_input:
# with open(todoList, "w") as output:
# for line in file_input:
# if line.strip("\n") == "* [X] ":
# output.write(line)
#for line in fileinput.input(todoList, inplace=True):
#if line.strip().startswith("* [X] "):
#line = ''
#sys.stdout.write(line)
# TODO: Neither function deletes single lines, it seems to delete all lines. Fix this.
# for line in fileinput.input(todoList, inplace=True):
# if line.strip().startswith("* [X] "):
# line = ''
# sys.stdout.write(line)
# TODO: Neither function deletes single lines, it seems to delete all lines. Fix this.
#def deleteCompleted(todoDir):
# def deleteCompleted(todoDir):
# todoList = todoDir + "Todos.md"
# with open(todoList, "r+") as file:
# for line in file:
# if line.startswith("* [X] "):
# print(line)
def deleteTasks(rootdir, company, tasks):
file = rootdir + company
for line in fileinput.input(file, inplace=True):
if tasks in line:
line = line.replace(tasks, '')
line = line.replace(tasks, "")
# sys.stdout.write(line)
if __name__ == "__main__":

View File

@ -3,10 +3,10 @@
DONE: Work with Tracy to create a Confluence Document Illustrating the different Manager Permissions and what the app looks like with those permissions.
DONE: Get Chris to create Tracy's Dashboard in Hubspot.
DONE: Train Courtney on: Automation, Apps, Analytics, Templates & Design
TODO: Intro Tracy to new clients (see Tracy's slack)
TODO: Start Implementation Channel, tell everyone that if Patrycja USED to be involved in a client that is now launched and the client reaches out to you and Patrycja, don't expect her to reply. If she has some technical knowledge about the account, then please reach out to her but as for SE tasks, someone else should be doing them.
DONE: Intro Tracy to new clients (see Tracy's slack)
DONE: Start Implementation Channel, tell everyone that if Patrycja USED to be involved in a client that is now launched and the client reaches out to you and Patrycja, don't expect her to reply. If she has some technical knowledge about the account, then please reach out to her but as for SE tasks, someone else should be doing them.
TODO: Financial Times outreach with new CSM. They asked for Account Manager.
DONE: Financial Times outreach with new CSM. They asked for Account Manager.
TODO: Intro 4Pillars with Nergis
TODO: Intro Kiwi with Nergis
DONE: Intro Kiwi with Nergis
TODO: Psychiatry-UK Feb22nd Intro