Example #1
0
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);
});
Example #2
0
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);

});