/**
* This method manages the redirection based on given page name
* @param pageName
* @param group
*/
function redirectTo(pageName, group = '') {
if (!group) {
if (pageMap[pageName]) {
window.location = pageMap[pageName];
}
}
else {
if (groupPageMap[group][pageName]) {
window.location = groupPageMap[group][pageName];
} else {
window.location = groupPageMap[group]['default'];
}
}
}
/**
* FIXME: document this method !
* @returns {boolean}
* @constructor
*/
function LoggedIn(callback) {
var response = CheckSession();
response.then(function(authSession) {
// Initialize interface
initIdentity(authSession);
callback();
}).catch(function(error) {
redirectTo('unexpected', 'error');
});
return true;
}
/**
* FIXME: document this method !
* FIXME: call the new api service 'checkSession' in order to validate authentication token from HTTP cookie
* @returns {boolean}
* @constructor
*/
function CheckSession() {
var apiRequest = initAPIRequest('post', 'session', 'CheckSession');
return makeSyncAPICall(apiRequest);
}
/**
* FIXME: Document this method !!!
* @param containerId
*/
function freeze(containerId) {
var container = $('#' + containerId);
container.find(':button').prop('disabled', true);
container.find('a').addClass('forbiddenLink').click(function () {return false;});
}
/**
* FIXME: Document this method !!!
* @param formId
*/
function freezeForm(formId) {
var container = $('#' + formId);
container.find(':input').prop('disabled', true);
container.find('select').prop('disabled', true);
container.find('textarea').prop('disabled', true);
container.find(':button').prop('disabled', true);
container.find('a').addClass('forbiddenLink').click(function () {return false;});
}
/**
* Initialize interface identity information, based on logged user
*/
function initIdentity(authSession) {
var _currentAuthUser = window.localStorage.getItem('_currentAuthUser');
if (!_currentAuthUser) {
_currentAuthUser = {
id: authSession.id,
email: authSession.email,
role: authSession.groups['0']['user_role'],
name: authSession.first_name + ' ' + authSession.last_name,
club: authSession.club,
club_group: authSession.club_group
};
window.localStorage.setItem('_currentAuthUser', JSON.stringify(_currentAuthUser));
} else {
_currentAuthUser = JSON.parse(_currentAuthUser);
}
if (!userAccessChecker(_currentAuthUser.role)) {
LogOut();
}
else {
var clubName = (_currentAuthUser.club) ? _currentAuthUser.club : 'Unknown';
var userName = (_currentAuthUser.name) ? _currentAuthUser.name : 'Unknown';
var role = (_currentAuthUser.role) ? _currentAuthUser.role : 'Unknown';
$(".clubHeaderTitle").text('').text(clubName);
$(".authUserName").text('').text(userName + ' (' + userRoleHuman[role] + ')');
adjustInterface(role);
initXHRLoader();
}
}
/**
* FIXME: document this method !
*/
function adjustInterface(role = null) {
if (!role) {
var _currentAuthUser = JSON.parse(window.localStorage.getItem('_currentAuthUser'));
role = _currentAuthUser.role;
}
var accessLevel;
var customSections = $('[data-access_level]');
$.each(customSections, function (idx, element) {
accessLevel = $(element).data('access_level');
accessLevel = accessLevel.split(",");
if (accessLevel.indexOf(role) < 0) {
$(element).hide();
}
});
}
function userAccessChecker(authUserRole) {
var viewContext = getCurrentContext();
var viewContextId = viewContextMap[viewContext];
if (accessLevel[viewContextId].length > 0) {
if (accessLevel[viewContextId].indexOf(authUserRole) < 0) {
return false;
}
}
return true;
}
function getCurrentContext() {
var allScripts = document.getElementsByTagName('script');
var lastScript = allScripts[allScripts.length-1];
var srcSegs = lastScript.src.split('/');
var contextIdx = srcSegs.length-1 ;
return srcSegs[contextIdx].slice(0,-3); // remove ".js" extension
}
function getCurrentContextId() {
return viewContextMap[getCurrentContext()];
}
function changeModalHeaderClass(container, oldClass, newClass) {
if ($(container).find('.modal-content').find('.modal-header').hasClass(oldClass)) {
$(container).find('.modal-content').find('.modal-header').removeClass(oldClass);
}
if (!$(container).find('.modal-content').find('.modal-header').hasClass(newClass)) {
$(container).find('.modal-content').find('.modal-header').addClass(newClass);
}
}
function initXHRLoader () {
if ($('#XHRWaitDialog')) {
$('#XHRWaitDialog').bind('ajaxStart', function(){
$(this).modal('show');
}).bind('ajaxStop', function(){
$(this).modal('hide');
});
}
}
function getCurrentPage() {
var currentPage = getUrlParameter('page');
validationResults = validateData({current_page: currentPage});
if (!currentPage || validationResults.error || currentPage < 1) {
currentPage = 1;
}
return currentPage;
}
/**
* FIXME: document this method !
*/
function initNextActivityPanels() {
var apiRequest = initAPIRequest('post', 'activity', 'AUX');
makeSyncAPICall(apiRequest).then(function(activities) {
$.each(activities, function(key, obj) {
var baseString = "#activity" + (key + 1);
var title = baseString + '_title';
$(title).text(obj.title);
var responsible = baseString + '_responsible';
$(responsible).text("Coordonator: " + obj.responsible);
var data = baseString + '_data';
$(data).text(obj.data);
var img = baseString + '_icon';
if (obj.category == "Competitie") {
$(img).attr("src", "images/competition_pic.png");
}
else {
$(img).attr("src", "images/debate_meeting.png");
}
});
});
}
/**
* Method that extracts cookies
* @param name
* @returns {*}
*/
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2)
return parts.pop().split(";").shift();
}
/**
* input: 2016-12-31T05:18:43Z
* output: 2016-12-31T05:18 (yyyy-MM-ddThh:mm::ss)
* @param date
*/
function formatDateToLocalFormat(date) {
var isoDate = new Date(date);
var year = isoDate.getUTCFullYear(),
month = isoDate.getUTCMonth() + 1,
day = isoDate.getUTCDate(),
hour = isoDate.getUTCHours(),
minute = isoDate.getUTCMinutes();
if (month.toString().length < 2) month = '0' + month;
if (day.toString().length < 2) day = '0' + day;
if (hour.toString().length < 2) hour = '0' + hour;
if (minute.toString().length < 2) minute = '0' + minute;
return year + '-' + month + '-' + day + 'T' + hour + ':' + minute;
}
function formatDateToPrettyFormat(date) {
var isoDate = new Date(date);
var year = isoDate.getUTCFullYear(),
month = isoDate.getUTCMonth() + 1,
day = isoDate.getUTCDate(),
hour = isoDate.getUTCHours(),
minute = isoDate.getUTCMinutes(),
second = isoDate.getUTCSeconds();
if (year.toString().length < 2) year = '0' + year.toString();
if (month.toString().length < 2) month = '0' + month.toString();
if (day.toString().length < 2) day = '0' + day.toString();
if (hour.toString().length < 2) hour = '0' + hour.toString();
if (minute.toString().length < 2) minute = '0' + minute.toString();
if (second.toString().length < 2) second = '0' + second.toString();
return day + '.' + month + '.' + year + ', ora ' + hour + ':' + minute;
}
function countObjectProperties(obj) {
var count = 0;
for (var k in obj) {
if (obj.hasOwnProperty(k)) {
++count;
}
}
return count;
}
/* =================== HTML tools =================== */
/**
* Usage: create simple select with options list
* @param elementType
* @param data
* @returns {string}
*/
function createFormElement(elementType, data) {
var content = '';
if (elementType == 'option') {
content += '';
$.each(data, function(key, obj) {
if (obj.label_value) {
content += '';
} else {
content += '';
}
});
}
else if (elementType == 'checkbox') {
// do nothing
}
return content;
}
/**
* Usage: create text field with simple select - Training field
* @param data
* @returns {string}
*/
function createFormRowSelect_Training(data) {
var content = '';
var selectOption = createFormElement('option', data);
content += '
';
content += '
';
content += '';
content += '
';
content += '
';
content += '';
content += '
';
content += '
';
return content;
}
/**
* Usage: create text field with simple select - Motion field
* @param data
* @returns {string}
*/
function createFormRowSelect_Motion(data) {
var content = '';
var selectOption = createFormElement('option', data);
content += '
';
content += '
';
content += '';
content += '
';
content += '
';
content += '';
content += '
';
content += '
';
return content;
}
/**
* Usage: create text field with simple select - Activity labels field
* @param data
* @param addButtons
* @returns {string}
*/
function createFormRowSelect_ActivityLabels(data, addButtons) {
var content = '';
var selectOption = createFormElement('option', data);
content += '