session.on('change', function (userCtx) { var isAdmin = utils.isUserAdmin(userCtx); _.extend(data_records, { isAdmin: isAdmin, userCtx: userCtx }); // update user district cookie if (userCtx.name) { users.get(userCtx.name, function (err, user) { var $iframe; if (err) { // TODO handle better utils.logger.error( 'Error with user doc: ' + err.message || err.toString()); } else if (user) { cookies.setBrowserCookie(dutils.currentRequest(), { name: 'facility_id', value: user.facility_id || '' }); cookies.setBrowserCookie(dutils.currentRequest(), { name: 'kujua_locale', value: user.locale || '' }); _.extend(data_records, { user: user }); // store the users number for rendering the iframe later $('#add-record-panel iframe').data('from-phone', user.phone); data_records.setupAddRecordButton(); } }); } else { // clear cookies cookies.setBrowserCookie(dutils.currentRequest(), { name: 'facility_id', value: '' }); cookies.setBrowserCookie(dutils.currentRequest(), { name: 'kujua_locale', value: '' }); } var el; if (userCtx.name && isAdmin) { el = $( '<li id="session_menu" class="dropdown">' + '<a class="dropdown-toggle" data-toggle="dropdown">' + '<i class="icon-user"></i> ' + userCtx.name + ' ' + '<b class="caret"></b>' + '</a>' + '<ul class="dropdown-menu"></ul>' + '</li>' ); var items = [ { path: 'reminders', label: 'Reminder Log' }, { path: 'help', label: 'Help' } ]; if (utils.isDbAdmin(userCtx)) { items.push({ path: 'settings', label: 'Settings' }); items.push({ path: 'schedules', label: 'Schedules' }); items.push({ path: 'users', label: 'Users' }); items.push({ path: 'test', label: 'Run Tests' }); } var baseUrl = dutils.getBaseURL(); _.each(items, function(item) { var path = baseUrl + '/' + item.path; var label = $.kansotranslate(item.label); $('.dropdown-menu', el).append( '<li><a href="' + path + '">' + label + '</a></li>' ); }); } $('#session_menu').replaceWith(el); // hide the nav items from non-admin users if (_.difference(['district_admin', 'national_admin', '_admin'], userCtx.roles).length === 3) { $('.navbar .nav li').hide(); $('.navbar .nav .docs').show(); } else { $('.navbar .nav li').show(); } $('#topnav .pull-right').append(el); });
session.on('change', function(userCtx, req) { var users = require('users') try { app_settings = appinfo.getAppInfo.call(this); } catch (e) { shows.render500('Failed to retrieve settings.'); console.error('Failed to retrieve settings.'); throw e; } exports.addHelpers(); var isAdmin = utils.isClinicAdmin(userCtx) || utils.isDistrictAdmin(userCtx); _.extend(data_records, { isAdmin: isAdmin, userCtx: userCtx }); if (userCtx.name) { users.get(userCtx.name, function (err, doc) { if (err) { console.error(err); } session.emit('userDoc', doc); }); } else { session.emit('userDoc', null); } if (!$('#session_menu').length) { $('#topnav .pull-right').append( '<li id="session_menu" class="dropdown"><li>' ); } var el; if (userCtx.name) { log("Logged in.") el = $( '<li id="session_menu" class="dropdown">' + '<a class="dropdown-toggle" data-toggle="dropdown">' + '<i class="icon icon-user"></i> ' + userCtx.name + ' ' + '<b class="icon icon-chevron-down"></b>' + '</a>' + '<ul class="dropdown-menu" role="menu">' + '<li><a class="logout" href="#">Logout</a></li>' + '</ul>' + '</li>' ); console.log(userCtx) //$('.dropdown-toggle', el).click(data_records.handleUpdateDropdown); $('.logout', el).click(function(ev) { ev.preventDefault(); session.logout(function(err, resp) { location.href = dutils.getBaseURL(); }); return false; }); } else { log("Not logged in.") el = $( '<li id="session_menu">' + '<a class="login" href="#">' + $.kansotranslate('Login') + '</a>' + '</li>' ); if (m) { // clear previous modal dialog m.modal('hide'); m.data('modal', null); m.remove(); } m = $(templates.render("login_modal.html", { userCtx: userCtx }, {})); var submitHandler = function(ev) { ev.preventDefault(); var username = $('#id_username', m).val(); var password = $('#id_password', m).val(); $('.alert', m).remove(); $('.help-inline', m).remove(); $('.control-group', m).removeClass('error'); $('.controls', m).show(); // sometimes these get hidden var username_cg = $('#id_username').parents('.control-group'); var password_cg = $('#id_password').parents('.control-group'); var errors = false; if (!username) { username_cg.addClass('error'); $('#id_username').attr("placeholder", $.kansotranslate('Username Required')); $('#id_username').parent().addClass("has-error"); errors = true; } if (!password) { password_cg.addClass('error'); $('#id_password').attr("placeholder", $.kansotranslate('Password Required')); $('#id_password').parent().addClass("has-error"); errors = true; } if (errors) { return false; } session.login(username, password, function(err, usrCtx) { if (err) { var msg = err.toString(); $('form', m).after( '<div class="">' + msg + '</div>' ); } else { m.modal('hide'); users.get(username, function (err, doc) { // if (typeof cookies.readBrowserCookie("userLang") != 'undefined') { cookies.setBrowserCookie(req, {name: "userLang", value: doc.language, path: '/'}) // } }) location.href = dutils.getBaseURL(); } }); return false; }; $('form', m).submit(submitHandler); // fake form submit event $('input', m).keyup(function(ev) { if (ev.keyCode === 13) { return submitHandler.apply(this, arguments); } }); $('.btn-primary', m).click(submitHandler); $('.btn-close', m).click(function() { m.modal('hide'); }); $('.btn-cancel', m).click(function() { m.modal('hide'); }); $('.login', el).click(function(ev) { ev.preventDefault(); m.modal('show'); return false; }); m.on('shown.bs.modal', function() { $('#id_username').focus(); }) } for (lang in app_settings.locales) { $('.dropdown-menu', el).append( '<li><a href="#" class="lang" id="' + lang + '">' + app_settings.locales[lang] + '</a></li>' ); $('.dropdown-menu .lang', el).click(function(ev) { ev.preventDefault(); console.log(ev.target.id) cookies.setBrowserCookie(req, { name: "userLang", value: ev.target.id, path: '/' }) // location.href = dutils.getBaseURL(); location.reload(); return false; }); } $('#session_menu').replaceWith(el); if (utils.isDbAdmin(userCtx)) { $('.dropdown-menu', el).append( '<li><a href="' + dutils.getBaseURL() + '/users">Administration</a></li>' ); } $('#session_menu').replaceWith(el); // hide the nav items from non-admin users if (_.difference(['district_admin', 'clinic_admin', 'data_entry', '_admin'], userCtx.roles).length === 3) { $('.navbar .nav li').hide(); $('.navbar .nav .docs').show(); } else { $('.navbar .nav li').show(); } $('#topnav .navbar-right').append(el); });