Style and bug fixes related to active-entry and hipaaAuditLog integration
This commit is contained in:
parent
3223da4358
commit
11e300f013
@ -1,6 +1,24 @@
|
||||
// TODO: Move all of this into the LesionTracker package
|
||||
html
|
||||
height: 100%
|
||||
width: 100%
|
||||
|
||||
min-height: 100%
|
||||
min-width: 100%
|
||||
|
||||
|
||||
body
|
||||
background-color: #202020
|
||||
height: 100%
|
||||
width: 100%
|
||||
|
||||
min-height: 100%
|
||||
min-width: 100%
|
||||
|
||||
/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,45484d+100 */
|
||||
background: #000000; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #000000 0%, #45484d 100%); /* FF3.6-15 */
|
||||
background: -webkit-linear-gradient(top, #000000 0%,#45484d 100%); /* Chrome10-25,Safari5.1-6 */
|
||||
background: linear-gradient(to bottom, #000000 0%,#45484d 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
|
||||
|
||||
.tab-content
|
||||
height: calc(100% - 40px)
|
||||
|
||||
@ -33,7 +33,7 @@ Router.route('/', function() {
|
||||
// Check user is logged in
|
||||
if (!Meteor.user() || !Meteor.userId()) {
|
||||
this.render('entrySignIn', routerOptions);
|
||||
} else{
|
||||
} else {
|
||||
this.render('worklist', routerOptions);
|
||||
}
|
||||
});
|
||||
@ -42,7 +42,7 @@ Router.route('/worklist', function() {
|
||||
// Check user is logged in
|
||||
if (!Meteor.user() || !Meteor.userId()) {
|
||||
this.render('entrySignIn', routerOptions);
|
||||
} else{
|
||||
} else {
|
||||
this.render('worklist', routerOptions);
|
||||
}
|
||||
});
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
|
||||
// REFACTOR: Move to ActiveRecord object
|
||||
Session.set("defaultSignInMessage", "Improve your clinical practice with checklists.");
|
||||
//Session.set("defaultSignInMessage", "Improve your clinical practice with checklists.");
|
||||
|
||||
//==================================================================================================
|
||||
// ROUTER
|
||||
|
||||
@ -45,13 +45,26 @@ Meteor.methods({
|
||||
},
|
||||
|
||||
getFailedAttemptsCount: function(emailAddress) {
|
||||
return Meteor.users.findOne({"emails.address": emailAddress}).failedPasswordAttempts || 0;
|
||||
// Check if the user actually exists, and if not, stop here
|
||||
var currentUser = Meteor.users.findOne({"emails.address": emailAddress});
|
||||
if (!currentUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
return currentUser.failedPasswordAttempts || 0;
|
||||
},
|
||||
|
||||
updateFailedAttempts: function(failedAttemptsParameters) {
|
||||
var emailAddress = failedAttemptsParameters[0];
|
||||
var failedAttemptsLimit = failedAttemptsParameters[1];
|
||||
var failedAttemptCount = Meteor.users.findOne({"emails.address": emailAddress}).failedPasswordAttempts || 0;
|
||||
|
||||
// Check if the user actually exists, and if not, stop here
|
||||
var currentUser = Meteor.users.findOne({"emails.address": emailAddress});
|
||||
if (!currentUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
var failedAttemptCount = currentUser.failedPasswordAttempts || 0;
|
||||
if (failedAttemptCount == failedAttemptsLimit) {
|
||||
return failedAttemptCount;
|
||||
} else {
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
Meteor.startup(function() {
|
||||
if (Meteor.isClient){
|
||||
ActiveEntry.configure({
|
||||
logo: {
|
||||
url: '/images/logo.png',
|
||||
displayed: true
|
||||
},
|
||||
signIn: {
|
||||
displayFullName: true,
|
||||
destination: '/worklist'
|
||||
},
|
||||
signUp: {
|
||||
destination: '/worklist'
|
||||
},
|
||||
themeColors: {
|
||||
primary: ''
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (Meteor.isServer){
|
||||
Accounts.emailTemplates.siteName = 'AwesomeSite';
|
||||
Accounts.emailTemplates.from = 'AwesomeSite Admin <accounts@example.com>';
|
||||
Accounts.emailTemplates.enrollAccount.subject = function(user) {
|
||||
return 'Welcome to Awesome Town, ' + user.profile.name;
|
||||
};
|
||||
|
||||
Accounts.emailTemplates.enrollAccount.text = function(user, url) {
|
||||
return 'You have been selected to participate in building a better future!'
|
||||
+ ' To activate your account, simply click the link below:\n\n'
|
||||
+ url;
|
||||
};
|
||||
|
||||
process.env.MAIL_URL = 'smtp://sandboxid.mailgun.org:mypassword@smtp.mailgun.org:587';
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,13 @@
|
||||
#entrySignIn.entryPage,
|
||||
#entrySignUp.entryPage
|
||||
.wrapper-auth
|
||||
.title-auth
|
||||
color: white
|
||||
.entryLogo
|
||||
margin-top: 50px
|
||||
height: 50px
|
||||
width: 50px
|
||||
|
||||
// TODO: Fix theming in active-entry so we don't have to do this
|
||||
.entryPage .wrapper-auth .subtitle-auth
|
||||
color: white !important
|
||||
@ -0,0 +1,11 @@
|
||||
Meteor.startup(function() {
|
||||
// TODO: Configure some settings
|
||||
HipaaAuditLog.configure({
|
||||
classes: {
|
||||
input: 'form-control',
|
||||
select: 'form-control',
|
||||
ribbon: ''
|
||||
},
|
||||
highlightColor: '#006289'
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,2 @@
|
||||
#hipaaLogPage
|
||||
margin-top: 40px
|
||||
@ -1,26 +1,39 @@
|
||||
<template name="lesionTrackerLayout">
|
||||
<div class="logoContainer">
|
||||
<div id="menu" class="row-fluid">
|
||||
{{#if currentUser}}
|
||||
<button type='button' class="btn btn-link dropdown-toggle" data-toggle="dropdown" id="userMenu">
|
||||
{{fullName}} <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="userMenu">
|
||||
<li>
|
||||
<!-- TODO: Move this elsewhere in the Worklist? -->
|
||||
{{ >optionsButton }}
|
||||
</li>
|
||||
<li>
|
||||
<a href="audit" id="audit">
|
||||
<i class="fa fa-list-ul"></i> View Audit Log
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="changePassword" id="changePassword">
|
||||
<i class="fa fa-lock"></i> Change Password
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="#" id="logoutButton">
|
||||
<i class="fa fa-power-off"></i>Logout
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
<a class="navbar-brand" href="http://ohif.org">
|
||||
<img src="/images/logo.png">
|
||||
<h4 class="name">Open Health Imaging Foundation</h4>
|
||||
</a>
|
||||
{{#if currentUser}}
|
||||
<div id="userProfile" class="row-fluid">
|
||||
<div class="dropdown clearfix">
|
||||
<ul class="nav nav-pills pull-right">
|
||||
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">{{fullName}}<b class="caret"></b></a>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li><a href="changePassword" id="changePassword"><i class="fa fa-lock"></i>Change Password</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#" id="logoutButton"><i class="fa fa-power-off"></i>Logout</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{> timeoutCountdownDialog}}
|
||||
{{ >optionsButton }}
|
||||
{{ >yield }}
|
||||
</template>
|
||||
@ -1,6 +1,8 @@
|
||||
Session.set('defaultSignInMessage', 'Tumor tracking in your browser.');
|
||||
|
||||
Template.lesionTrackerLayout.events({
|
||||
'click #logoutButton': function() {
|
||||
Meteor.logout(function(){
|
||||
Meteor.logout(function() {
|
||||
Router.go('/entrySignIn');
|
||||
});
|
||||
},
|
||||
@ -10,7 +12,7 @@ Template.lesionTrackerLayout.events({
|
||||
});
|
||||
|
||||
Template.lesionTrackerLayout.helpers({
|
||||
'fullName': function() {
|
||||
fullName: function() {
|
||||
return Meteor.user().profile.fullName;
|
||||
}
|
||||
});
|
||||
@ -18,27 +20,30 @@ Template.lesionTrackerLayout.helpers({
|
||||
Template.lesionTrackerLayout.onCreated(function() {
|
||||
// Show countdown dialog
|
||||
var handle;
|
||||
$(document).on('TriggerOpenTimeoutCountdownDialog', function (e, leftTime) {
|
||||
$(document).on('TriggerOpenTimeoutCountdownDialog', function(e, leftTime) {
|
||||
// TODO: Show modal dialog
|
||||
handle = setInterval(function() {
|
||||
leftTime --;
|
||||
leftTime--;
|
||||
// Set countdownDialogLeftTime session
|
||||
Session.set("countdownDialogLeftTime", leftTime);
|
||||
Session.set('countdownDialogLeftTime', leftTime);
|
||||
|
||||
// Show dialog
|
||||
if ($("#timeoutCountdownDialog").css("display") == "none") {
|
||||
$("#timeoutCountdownDialog").css("display", "block");
|
||||
var dialog = $('#timeoutCountdownDialog');
|
||||
if (dialog.css('display') === 'none') {
|
||||
dialog.css('display', 'block');
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
});
|
||||
|
||||
$(document).on('TriggerCloseTimeoutCountdownDialog', function (e) {
|
||||
$("#timeoutCountdownDialog").css("display", "none");
|
||||
$(document).on('TriggerCloseTimeoutCountdownDialog', function(e) {
|
||||
var dialog = $('#timeoutCountdownDialog');
|
||||
dialog.css('display', 'none');
|
||||
if (handle) {
|
||||
clearInterval(handle);
|
||||
// Close the dialog
|
||||
$("#timeoutCountdownDialog").css("display", "none");
|
||||
dialog.css('display', 'none');
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,19 +1,18 @@
|
||||
.logoContainer
|
||||
position: absolute;
|
||||
height: 40px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
color: white;
|
||||
position: absolute
|
||||
height: 40px
|
||||
top: 0
|
||||
right: 0
|
||||
padding: 0 10px
|
||||
color: white
|
||||
@media only screen and (min-device-width : 375px) and (max-device-width : 667px) and (orientation : portrait)
|
||||
width: 15%
|
||||
|
||||
#userProfile
|
||||
#menu
|
||||
position: relative
|
||||
float: right
|
||||
|
||||
.nav-pills > li > a:hover, .nav .open > a, .nav .open > a:hover, .nav .open > a:focus
|
||||
background-color: #eee
|
||||
color: black
|
||||
height: 100%
|
||||
line-height: 40px
|
||||
|
||||
.dropdown-menu > li > a:hover
|
||||
background-color: #eee
|
||||
@ -22,7 +21,10 @@
|
||||
margin-right: 5px
|
||||
|
||||
.dropdown-toggle
|
||||
color: #C1C1C1
|
||||
color: white
|
||||
height: 100%
|
||||
font-size: 12pt
|
||||
font-family: "Sanchez"
|
||||
|
||||
.divider
|
||||
height: 2px
|
||||
@ -41,7 +43,7 @@
|
||||
height: 30px
|
||||
float: left
|
||||
margin-right: 10px
|
||||
margin-top: 5px;
|
||||
margin-top: 5px
|
||||
/* Media queries for iPhone6*/
|
||||
@media only screen and (min-device-width : 375px) and (max-device-width : 667px) and (orientation : portrait)
|
||||
height: 20px
|
||||
@ -51,11 +53,11 @@
|
||||
|
||||
h4.name
|
||||
float: left
|
||||
margin: 10px 0;
|
||||
margin: 10px 0
|
||||
font-family: "Sanchez"
|
||||
color: #C1C1C1
|
||||
color: white
|
||||
@media only screen and (min-device-width : 375px) and (max-device-width : 667px) and (orientation : portrait)
|
||||
font-size: 0.3em
|
||||
font-size: 0.3em
|
||||
width: 50%;
|
||||
width: 50%
|
||||
|
||||
|
||||
@ -1,12 +1,9 @@
|
||||
<template name="optionsButton">
|
||||
<div class="optionsButton">
|
||||
<a type="button"
|
||||
class="btn btn-default"
|
||||
data-toggle="modal"
|
||||
data-target="#optionsModal"
|
||||
title="Trial Options">
|
||||
<i class="fa fa-cog fa-lg"></i>
|
||||
Trial Options
|
||||
</a>
|
||||
</div>
|
||||
<a href="#"
|
||||
data-toggle="modal"
|
||||
data-target="#optionsModal"
|
||||
title="Trial Options">
|
||||
<i class="fa fa-cog fa-lg"></i>
|
||||
Trial Options
|
||||
</a>
|
||||
</template>
|
||||
@ -1,6 +0,0 @@
|
||||
// These settings are temporary!
|
||||
.optionsButton
|
||||
position: absolute
|
||||
top: 3px
|
||||
right: 350px
|
||||
cursor: pointer
|
||||
@ -58,8 +58,14 @@ Package.onUse(function(api) {
|
||||
api.addFiles('client/components/associationModal/associationModal.styl', 'client');
|
||||
api.addFiles('client/components/associationModal/associationModal.js', 'client');
|
||||
|
||||
|
||||
api.addFiles('client/components/activeEntry/activeEntry.styl', 'client');
|
||||
api.addFiles('client/components/activeEntry/activeEntry.js', 'client');
|
||||
|
||||
api.addFiles('client/components/hipaaLogPage/hipaaLogPage.styl', 'client');
|
||||
api.addFiles('client/components/hipaaLogPage/hipaaLogPage.js', 'client');
|
||||
|
||||
api.addFiles('client/components/optionsButton/optionsButton.html', 'client');
|
||||
api.addFiles('client/components/optionsButton/optionsButton.styl', 'client');
|
||||
|
||||
api.addFiles('client/components/optionsModal/optionsModal.html', 'client');
|
||||
api.addFiles('client/components/optionsModal/optionsModal.styl', 'client');
|
||||
|
||||
@ -24,6 +24,17 @@ getStudyMetadata = function(studyInstanceUid, doneCallback, failCallback) {
|
||||
// If no study metadata is in the cache variable, we need to retrieve it from
|
||||
// the server with a call.
|
||||
Meteor.call('GetStudyMetadata', studyInstanceUid, function(error, study) {
|
||||
var hipaaEvent = {
|
||||
eventType: "viewed",
|
||||
userId: Meteor.userId(),
|
||||
userName: Meteor.user().profile.fullName,
|
||||
collectionName: "Study",
|
||||
recordId: studyInstanceUid,
|
||||
patientId: study.patientId,
|
||||
patientName: study.patientName
|
||||
};
|
||||
HipaaLogger.logEvent(hipaaEvent);
|
||||
|
||||
log.info('worklistStudy getStudyMetadata: ' + studyInstanceUid);
|
||||
|
||||
if (error) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user