// Create language switcher instance
var lang = new Lang();
loadLanguageList();
lang.init({
defaultLang: 'en',
currentLang: language(moment.locale(navigator.languages[0])),
cookie: {
name: 'organizrLanguage',
expiry: 365,
path: '/'
},
allowCookieOverride: true
});
// Start Organizr
launch();
/* NORMAL FUNCTIONS */
function loadLanguageList(){
var languages = languageList();
$.each(languages, function(i,v) {
lang.dynamic(i, 'js/langpack/'+i+'.json');
});
lang.dynamic('strings', 'js/langpack/strings.json');
}
function languageList(){
return {
'en':{
'lang':'English',
'image':'plugins/images/languages/en.png'
},
'nb':{
'lang':'Bokmål',
'image':'plugins/images/languages/nb.png'
},
'nl':{
'lang':'Dutch',
'image':'plugins/images/languages/nl.png'
},
'fr':{
'lang':'French',
'image':'plugins/images/languages/fr.png'
},
'de':{
'lang':'German',
'image':'plugins/images/languages/de.png'
},
'de-ch':{
'lang':'German (Switzerland)',
'image':'plugins/images/languages/de-ch.png'
},
'it':{
'lang':'Italian',
'image':'plugins/images/languages/it.png'
}
};
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime > 19) { // 20 minutes
//window.location.reload();
console.log('timedout!');
}
//check for cookieExpiry
if(hasCookie){
if(getCookie('organizrToken')){
//do nothing
}else{
location.reload();
};
}
}
function ajaxloader(element=null, action='out'){
var loader = `
`;
switch (action) {
case 'in':
case 'fadein':
$(loader).appendTo(element);
break;
case 'out':
case 'fadeout':
$('.ajaxloader').remove();
break;
default:
}
}
function getDefault(tabName,tabType){
if(getHash() === false){
if(tabName !== null && tabType !== null){
switchTab(tabName,tabType);
}else{
$('#side-menu').children().first().children().click()
}
}else{
var hashTab = getHash();
var hashType = getTabType(hashTab);
if (typeof hashTab !== 'undefined' && typeof hashType !== 'undefined') {
switchTab(hashTab,hashType);
}else{
console.warn("Tab Function: "+hashTab+" is not a defined tab");
}
}
}
function getTabType(tabName){
var tabType = $('#menu-'+tabName);
if (typeof tabType !== 'undefined') {
return tabType.attr('type');
}else{
return false;
}
}
function getHash(){
if ($(location).attr('hash')){
return $(location).attr('hash').substr(1);
}
return false;
}
function setHash(hash){
window.location.hash = '#'+hash;
}
function getQueryVariable(variable){
var query = window.location.search.substring(1);
console.log(query);
var vars = query.split("&");
console.log(vars);
for (var i=0;i';
}else{
return ' ';
}
}else{
return ' ';
}
}
function cleanClass(string){
return string.replace(/ +/g, "-").replace(/\W+/g, "-");
}
function noTabs(arrayItems){
if (arrayItems.data.user.loggedin === true) {
organizrConnect('api/?v1/no_tabs').success(function(data) {
var json = JSON.parse(data);
console.log("Organizr Function: No Tabs Available");
$(json.data).appendTo($('.organizr-area'));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}else {
buildLogin();
}
}
function logout(){
message('',' Goodbye!','bottom-right','#FFF','success','10000')
organizrAPI('GET','api/?v1/logout').success(function(data) {
var html = JSON.parse(data);
if(html.data == true){
location.reload();
}else{
$.toast().reset('all');
message('Logout Error',' An Error Occured','bottom-right','#FFF','warning','10000');
console.error('Organizr Function: Logout failed');
}
}).fail(function(xhr) {
console.error("Organizr Function: Logout Failed");
});
}
function reloadOrganizr(){
location.reload();
}
function hideFrames(){
$(".iFrame-listing div[class^='frame-container']").addClass("hidden").removeClass('show');
}
function closeSideMenu(){
$('.fix-header').removeClass('show-sidebar');
}
function removeMenuActive(){
$("#side-menu a").removeClass('active');
}
function swapDisplay(type){
switch (type) {
case 'internal':
$('.iFrame-listing').addClass('hidden').removeClass('show');
$('.internal-listing').addClass('show').removeClass('hidden');
$('.login-area').addClass('hidden').removeClass('show');
break;
case 'iframe':
$('.iFrame-listing').addClass('show').removeClass('hidden');
$('.internal-listing').addClass('hidden').removeClass('show');
$('.login-area').addClass('hidden').removeClass('show');
break;
case 'login':
$('.iFrame-listing').addClass('hidden').removeClass('show');
$('.internal-listing').addClass('hidden').removeClass('show');
$('.login-area').addClass('show').removeClass('hidden');
break;
default:
}
}
function toggleParentActive(tab){
var childTab = $('#menu-'+tab);
if(childTab.parent().hasClass('nav-second-level')){
if(!childTab.parent().hasClass('in')){
childTab.parent().addClass('collapse in');
childTab.parent().parent().addClass('active');
}
}
}
function switchTab(tab, type){
hideFrames();
closeSideMenu();
removeMenuActive();
toggleParentActive(tab);
switch (type) {
case 0:
case '0':
case 'internal':
swapDisplay('internal');
$('#menu-'+cleanClass(tab)).find('a').addClass("active");
var newTab = $('#internal-'+tab);
var tabURL = newTab.attr('data-url');
if(newTab.hasClass('loaded')){
console.log('Tab Function: Switching to tab: '+tab);
newTab.addClass("show").removeClass('hidden');
}else{
$("#preloader").fadeIn();
console.log('Tab Function: Loading new tab for: '+tab);
newTab.addClass("show loaded").removeClass('hidden');
loadInternal(tabURL,cleanClass(tab));
$("#preloader").fadeOut();
}
break;
case 1:
case '1':
case 'iframe':
swapDisplay('iframe');
var newTab = $('#container-'+tab);
var tabURL = newTab.attr('data-url');
$('#menu-'+cleanClass(tab)).find('a').addClass("active");
if(newTab.hasClass('loaded')){
console.log('Tab Function: Switching to tab: '+tab);
newTab.addClass("show").removeClass('hidden');
}else{
$("#preloader").fadeIn();
console.log('Tab Function: Loading new tab for: '+tab);
newTab.addClass("show loaded").removeClass('hidden');
$(buildFrame(tab,tabURL)).appendTo(newTab);
$("#preloader").fadeOut();
}
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
popTab(cleanClass(tab), type);
break;
default:
console.error('Tab Function: Action not set');
}
setHash(tab);
}
function popTab(tab, type){
switch (type) {
case 0:
case '0':
case 'internal':
console.warn('Tab Function: New window not supported for tab: '+tab);
break;
case 1:
case '1':
case 'iframe':
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
console.log('Tab Function: Creating New Window for tab: '+tab);
var url = $('#container-'+cleanClass(tab)).attr('data-url');
window.open(url, '_blank');
break;
default:
console.error('Tab Function: Action not set');
}
}
function closeTab(tab, type){
}
function reloadTab(tab, type){
$("#preloader").fadeIn();
console.log('Tab Function: Reloading tab: '+tab);
switch (type) {
case 0:
case '0':
case 'internal':
break;
case 1:
case '1':
case 'iframe':
$('#frame-'+cleanClass(tab)).attr('src', $('#frame-'+cleanClass(tab)).attr('src'));
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Function: Action not set');
}
$("#preloader").fadeOut();
}
function reloadCurrentTab(){
$("#preloader").fadeIn();
console.log('Tab Function: Reloading Current tab');
var iframe = $('.iFrame-listing').find('.show');
var internal = $('.internal-listing').find('.show');
if(iframe.length > 0){
var type = 'iframe';
}else if(internal.length > 0){
var type = 'internal';
}else{
var type = 'not set';
}
switch (type) {
case 0:
case '0':
case 'internal':
var activeInternal = $('.internal-listing').find('.show');
$(activeInternal).html('');
loadInternal(activeInternal.attr('data-url'),activeInternal.attr('data-name'));
break;
case 1:
case '1':
case 'iframe':
var activeFrame = $('.iFrame-listing').find('.show').children('iframe');
activeFrame.attr('src', activeFrame.attr('src'));
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Function: Action not set');
}
$("#preloader").fadeOut();
}
function loadNextTab(){
var next = $('.iFrame-listing').find('.loaded').attr('data-name');
if (typeof next !== 'undefined') {
var type = $('.iFrame-listing').find('.loaded').attr('data-type');
switchTab(next,type);
}else{
console.log("Tab Function: No Available Tab to open");
}
}
function closeCurrentTab(){
var iframe = $('.iFrame-listing').find('.show');
var internal = $('.internal-listing').find('.show');
if(iframe.length > 0){
var type = 'iframe';
}else if(internal.length > 0){
var type = 'internal';
}else{
var type = 'not set';
}
switch (type) {
case 0:
case '0':
case 'internal':
var tab = $('.internal-listing').find('.show').attr('data-name');
console.log('Tab Function: Closing tab: '+tab);
$('#internal-'+cleanClass(tab)).html('');
$('#internal-'+cleanClass(tab)).removeClass("loaded show");
$('#menu-'+cleanClass(tab)).removeClass("active");
loadNextTab();
break;
case 1:
case '1':
case 'iframe':
var tab = $('.iFrame-listing').find('.show').children('iframe').attr('data-name');
console.log('Tab Function: Closing tab: '+tab);
$('#menu-'+cleanClass(tab)).removeClass("active");
$('#container-'+cleanClass(tab)).removeClass("loaded show");
$('#frame-'+cleanClass(tab)).remove();
loadNextTab();
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Function: Action not set');
}
}
function message(heading,text,position,color,icon,timeout){
$.toast({
heading: heading,
text: text,
position: position,
loaderBg: color,
icon: icon,
hideAfter: timeout,
stack: 6,
showHideTransition: 'slide',
});
}
function messageSingle(heading,text,position,color,icon,timeout){
$.toast({
heading: heading,
text: text,
position: position,
loaderBg: color,
icon: icon,
hideAfter: timeout,
stack: 1,
showHideTransition: 'slide',
});
}
function tabActions(event,name, type){
if(event.ctrlKey){
popTab(cleanClass(name), type);
}else if(event.altKey){
console.log('alt key');
}else if(event.shiftKey){
reloadTab(cleanClass(name), type);
}else{
switchTab(cleanClass(name), type);
}
}
function reverseObject(object) {
var newObject = {};
var keys = [];
for (var key in object) {
keys.push(key);
}
for (var i = keys.length - 1; i >= 0; i--) {
var value = object[keys[i]];
newObject[keys[i]]= value;
}
return newObject;
}
function hasValue(test){
if(Array.isArray(test) && test[0] !== ''){
return true;
}else{
return false;
}
return false;
}
/* END NORMAL FUNCTIONS */
/* BUILD FUNCTIONS */
/* END BUILD FUNCTIONS */
/* ORGANIZR API FUNCTIONS */
function selectOptions(options, active){
var selectOptions = '';
$.each(options, function(i,v) {
var selected = (active.toString() == v.value) ? 'selected' : '';
var disabled = (v.disabled) ? ' disabled' : '';
selectOptions += ''+v.name+' ';
});
return selectOptions;
}
function buildFormItem(item){
var placeholder = (item.placeholder) ? ' placeholder="'+item.placeholder+'"' : '';
var id = (item.id) ? ' id="'+item.placeholder+'"' : '';
var type = (item.type) ? ' data-type="'+item.type+'"' : '';
var value = (item.value) ? ' value="'+item.value+'"' : '';
var name = (item.name) ? ' name="'+item.name+'"' : '';
var extraClass = (item.class) ? ' '+item.class : '';
var icon = (item.icon) ? ' '+item.icon : '';
var text = (item.text) ? ' '+item.text : '';
var attr = (item.attr) ? ' '+item.attr : '';
var disabled = (item.disabled) ? ' disabled' : '';
var href = (item.href) ? ' href="'+item.href+'"' : '';
//+tof(item.value,'c')+`
switch (item.type) {
case 'input':
return '';
break;
case 'password':
return '';
break;
case 'hidden':
return '';
break;
case 'select':
return '';
break;
case 'switch':
case 'checkbox':
return ' ';
break;
case 'button':
return '';
break;
case 'blank':
return '';
break;
case 'html':
return item.html;
break;
default:
return false;
}
}
function buildPluginsItem(array){
var activePlugins = '';
var inactivePlugins = '';
$.each(array, function(i,v) {
var settingsPage = (v.settings == true) ? `
` : '';
var href = (v.settings == true) ? '#'+v.idPrefix+'-settings-page' : 'javascript:void(0);';
if(v.enabled == true){
var activeToggle = ` `;
var settings = ` `;
}else{
var activeToggle = ` `;
var settings = '';
}
var plugin = `
`+settings+activeToggle+`
`+v.name+`
`+v.category+`
`;
if(v.enabled == true){
activePlugins += plugin+settingsPage;
}else{
inactivePlugins += plugin+settingsPage;
}
});
activePlugins = (activePlugins.length !== 0) ? activePlugins : 'Nothing Active ';
inactivePlugins = (inactivePlugins.length !== 0) ? inactivePlugins : 'Everything Active ';
var panes = `
`;
return panes;
}
function buildPlugins(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/settings/plugins/list').success(function(data) {
var response = JSON.parse(data);
$('#main-plugin-area').html(buildPluginsItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildCustomizeAppearanceItem(array){
if (Array.isArray(array.config)) {
var preRowConfig = `
Config Items
`;
var customizeItems = preRowConfig;
$.each(array.config, function(i,v) {
customizeItems += `
`;
});
customizeItems += '
';
}
return customizeItems;
}
function buildSSOItem(array){
if (Array.isArray(array)) {
var count = 0;
var preRow = `
SSO Settings
`;
var ssoItems = preRow;
$.each(array, function(i,v) {
count++;
if(count%2 !== 0 ){ ssoItems += '
'; };
ssoItems += `
`;
if(count%2 == 0 ){ ssoItems += '
'; };
});
ssoItems += '
';
}
return ssoItems;
}
function buildSettingsMainItem(array){
if (Array.isArray(array)) {
var count = 0;
var preRow = `
Main Settings
`;
var settingsItems = preRow;
$.each(array, function(i,v) {
count++;
if(count%2 !== 0 ){ settingsItems += '
'; };
settingsItems += `
`;
if(count%2 == 0 ){ settingsItems += '
'; };
});
settingsItems += '
';
}
return settingsItems;
}
function buildImageManagerViewItem(array){
var imageListing = '';
if (Array.isArray(array)) {
$.each(array, function(i,v) {
var filepath = v.split("/");
var name = filepath[3].split(".");
imageListing += `
`;
});
}
return imageListing;
}
function buildImageManagerView(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/image/list').success(function(data) {
var response = JSON.parse(data);
$('#settings-image-manager-list').html(buildImageManagerViewItem(response.data));
;
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildCustomizeAppearance(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/customize/appearance').success(function(data) {
var response = JSON.parse(data);
$('#customize-appearance-form').html(buildCustomizeAppearanceItem(response.data));
;
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildSSO(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/sso').success(function(data) {
var response = JSON.parse(data);
$('#sso-form').html(buildSSOItem(response.data));
;
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildSettingsMain(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/settings/main').success(function(data) {
var response = JSON.parse(data);
console.log(response)
$('#settings-main-form').html(buildSettingsMainItem(response.data));
;
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildUserManagement(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/user/list').success(function(data) {
var response = JSON.parse(data);
$('#manageUserTable').html(buildUserManagementItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildGroupManagement(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/user/list').success(function(data) {
var response = JSON.parse(data);
$('#manageGroupTable').html(buildGroupManagementItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildTabEditor(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/tab/list').success(function(data) {
var response = JSON.parse(data);
$('#tabEditorTable').html(buildTabEditorItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function buildCategoryEditor(){
ajaxloader(".content-wrap","in");
organizrAPI('GET','api/?v1/tab/list').success(function(data) {
var response = JSON.parse(data);
$('#categoryEditorTable').html(buildCategoryEditorItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
}
function settingsAPI(post, callbacks=null){
ajaxloader(".content-wrap","in");
organizrAPI('POST',post.api,post).success(function(data) {
var response = JSON.parse(data);
console.log(response);
message(post.messageTitle,post.messageBody,"bottom-right","#FFF","success","5000");
if(callbacks){ callbacks.fire(); }
}).fail(function(xhr) {
console.error(post.error);
});
ajaxloader();
}
/* END ORGANIZR API FUNCTIONS */
function buildLanguage(replace=false,newLang=null){
var languages = languageList();
var languageItems = '';
var currentLanguage = (getCookie('organizrLanguage')) ? getCookie('organizrLanguage') : window.lang.currentLang;
$.each(languages, function(i,v) {
var active = (i == currentLanguage) ? '' : '';
languageItems += `
`+v.lang+` `+active+`
`;
});
var lang = `
`;
if(replace == true){
$('#languageDropdown').replaceWith(lang);
message("",window.lang.translate('Changed Language To')+": "+newLang,"bottom-right","#FFF","success","3500");
}else if(replace == 'wizard'){
$(lang).appendTo('.navbar-right');
}else{
return lang;
}
}
function userMenu(user){
var menuList = buildLanguage();
if (user.data.user.loggedin === true) {
menuList += `
`+user.data.user.username+`
`;
}else{
menuList += `
`+user.data.user.username+`
`;
}
$(menuList).appendTo('.navbar-right').html;
message("",window.lang.translate('Welcome')+" "+user.data.user.username,"bottom-right","#FFF","success","3500");
console.log(window.lang.translate('Welcome')+" "+user.data.user.username);
}
function menuExtras(active){
if(active === true){
return `
`;
}else{
return `
`;
}
}
function categoryProcess(arrayItems){
var menuList = '';
if (Array.isArray(arrayItems['data']['categories']) && Array.isArray(arrayItems['data']['tabs'])) {
$.each(arrayItems['data']['categories'], function(i,v) {
if(v.count !== 0 && v.category_id !== 0){
menuList += `
`+iconPrefix(v.image)+`
`;
}
});
$(menuList).appendTo($('#side-menu'));
}
}
function buildFrame(name,url){
return `
`;
}
function buildFrameContainer(name,url,type){
return `
`;
}
function buildInternalContainer(name,url,type){
return `
`;
}
function buildMenuList(name,url,type,icon){
return ``;
}
function tabProcess(arrayItems) {
var iFrameList = '';
var internalList = '';
var defaultTabName = null;
var defaultTabType = null;
if (Array.isArray(arrayItems['data']['tabs']) && arrayItems['data']['tabs'].length > 0) {
$.each(arrayItems['data']['tabs'], function(i,v) {
if(v.enabled === 1){
switch (v.type) {
case 0:
case '0':
case 'internal':
internalList += buildInternalContainer(v.name,v.url,v.type);
$(internalList).appendTo($('.internal-listing'));
break;
case 1:
case '1':
case 'iframe':
if(v.default === 1){
defaultTabName = cleanClass(v.name);
defaultTabType = v.type;
}
iFrameList = buildFrameContainer(v.name,v.url,v.type);
$(iFrameList).appendTo($('.iFrame-listing'));
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Process: Action not set');
}
menuList = buildMenuList(v.name,v.url,v.type,v.image);
if(v.category_id === 0){
$(menuList).prependTo($('#side-menu'));
}else{
$(menuList).prependTo($('.category-'+v.category_id));
}
}
});
getDefault(defaultTabName,defaultTabType);
}else{
noTabs(arrayItems);
}
$(menuExtras(arrayItems.data.user.loggedin)).appendTo($('#side-menu'));
}
function buildLogin(){
swapDisplay('login');
closeSideMenu();
removeMenuActive();
$('#menu-login a').addClass('active');
organizrConnect('api/?v1/login_page').success(function(data) {
var json = JSON.parse(data);
console.log("Organizr Function: Opening Login Page");
$('.login-area').html(json.data);
}).fail(function(xhr) {
console.error("Organizr Function: Login Connection Failed");
});
$("#preloader").fadeOut();
}
function buildLockscreen(){
$("#preloader").fadeIn();
closeSideMenu();
organizrConnect('api/?v1/lockscreen').success(function(data) {
var json = JSON.parse(data);
console.log("Organizr Function: Adding Lockscreen");
$(json.data).appendTo($('body'));
}).fail(function(xhr) {
console.error("Organizr Function: Lockscreen Connection Failed");
});
$("#preloader").fadeOut();
}
function buildUserGroupSelect(array, userID, groupID){
var groupSelect = '';
var selected = '';
var disabled = '';
if(groupID == 0 && userID == 1){
disabled = 'disabled';
}
$.each(array, function(i,v) {
selected = '';
if(v.group_id == groupID){
selected = 'selected';
}
var selectDisable = (v.group_id == 0 || v.group_id == 999) ? 'disabled' : '';
groupSelect += ''+v.group+' ';
});
return ''+groupSelect+' ';
}
function buildTabGroupSelect(array, tabID, groupID){
var groupSelect = '';
var selected = '';
$.each(array, function(i,v) {
selected = '';
if(v.group_id == groupID){
selected = 'selected';
}
groupSelect += ''+v.group+' ';
});
return ''+groupSelect+' ';
}
function buildTabTypeSelect(tabID, typeID){
var array = [
{
'type_id':0,
'type':'Internal'
},
{
'type_id':1,
'type':'iFrame'
},
{
'type_id':2,
'type':'New Window'
}
]
var typeSelect = '';
var selected = '';
$.each(array, function(i,v) {
selected = '';
if(v.type_id == typeID){
selected = 'selected';
}
typeSelect += ''+v.type+' ';
});
return ''+typeSelect+' ';
}
function buildTabCategorySelect(array,tabID, categoryID){
var categorySelect = '';
var selected = '';
$.each(array, function(i,v) {
selected = '';
if(v.category_id == categoryID){
selected = 'selected';
}
categorySelect += ''+v.category+' ';
});
return ''+categorySelect+' ';
}
function buildUserManagementItem(array){
var userList = '';
$.each(array.users, function(i,v) {
var disabledDelete = (v.group_id == 999 || v.group_id == 0) ? 'disabled' : 'deleteUser';
userList += `
`+v.username+`
`+v.email+`
`+moment(v.register_date).format('ll')+`
`+moment(v.register_date).format('LT')+`
`+buildUserGroupSelect(array.groups,v.id,v.group_id)+`
`;
});
return userList;
}
function buildGroupManagementItem(array){
var userList = '';
$.each(array.groups, function(i,v) {
var userCount = array.users.reduce(function (n, group) {
return n + (group.group_id == v.group_id);
}, 0);
var disabledDefault = (v.group_id == 0 || v.group_id == 999) ? 'disabled' : '';
var disabledDelete = (userCount > 0 || v.default == 1 || v.group_id == 999 || v.group_id == 0) ? 'disabled' : '';
var defaultIcon = (v.default == 1) ? 'icon-user-following' : 'icon-user-follow';
var defaultColor = (v.default == 1) ? 'btn-info disabled' : 'btn-warning';
userList += `
`+v.group+`
`+userCount+`
`;
});
return userList;
}
function buildCategoryEditorItem(array){
var categoryList = '';
$.each(array.categories, function(i,v) {
var tabCount = array.tabs.reduce(function (n, category) {
return n + (category.category_id == v.category_id);
}, 0);
var disabledDefault = (v.category_id == 0) ? 'disabled' : '';
var disabledDelete = (tabCount > 0 || v.default == 1 || v.category_id == 0) ? 'disabled' : '';
var defaultIcon = (v.default == 1) ? 'icon-user-following' : 'icon-user-follow';
var defaultColor = (v.default == 1) ? 'btn-info disabled' : 'btn-warning';
categoryList += `
`+v.category+`
`+tabCount+`
`;
});
return categoryList;
}
function buildTabEditorItem(array){
var tabList = '';
$.each(array.tabs, function(i,v) {
var deleteDisabled = v.url.indexOf('/?v') > 0 ? 'disabled' : 'deleteTab';
tabList += `
`+v.name+`
`+buildTabCategorySelect(array.categories,v.id, v.category_id)+`
`+buildTabGroupSelect(array.groups,v.id, v.group_id)+`
`+buildTabTypeSelect(v.id, v.type)+`
`;
});
return tabList;
}
function submitTabOrder(){
var post = {
action:'changeOrder',
api:'api/?v1/settings/tab/editor/tabs',
tabs:$( "#submit-tabs-form" ).serializeToJSON(),
messageTitle:'',
messageBody:window.lang.translate('Tab Order Saved'),
error:'Organizr Function: API Connection Failed'
};
settingsAPI(post);
buildTabEditor();
}
function submitCategoryOrder(){
var post = {
action:'changeOrder',
api:'api/?v1/settings/tab/editor/categories',
categories:$( "#submit-categories-form" ).serializeToJSON(),
messageTitle:'',
messageBody:window.lang.translate('Category Order Saved'),
error:'Organizr Function: API Connection Failed'
};
console.log(post);
settingsAPI(post);
buildCategoryEditor();
}
function buildTR(array,type,badge){
var listing = '';
var arrayItems = array.split("|");
if(hasValue(arrayItems) === true){
$.each(arrayItems, function(i,v) {
listing += `
`+type+`
`+v+`
`;
});
return listing;
}
return ' ';
}
function buildVersion(array){
var x = 0;
var versions = 'Organizr Versions ';
var listing = '';
var currentV = currentVersion;
var installed = '';
var spanClass = '';
var button = '';
$.each(array, function(i,v) {
listing += buildTR(v.new,'NEW','info');
listing += buildTR(v.fixed,'FIXED','success');
listing += buildTR(v.notes,'NOTE','warning');
if(currentV === i){
button = 'Installed ';
}else if (x === 0){
button = 'Install Update ';
}
versions += `
`+button+`
`+i+`
`+moment.utc(v.date, "YYYY-MM-DD hh:mm[Z]").local().fromNow()+`
`+v.title+`
`;
listing = '';
button = '';
x++;
});
return versions;
}
function loadInternal(url,tabName){
organizrAPI('get',url).success(function(data) {
var html = JSON.parse(data);
$('#internal-'+tabName).html(html.data);
}).fail(function(xhr) {
console.error("Organizr Function: Connection Failed");
});
}
function loadSettingsPage(api,element,organizrFn){
organizrAPI('get',api).success(function(data) {
var json = JSON.parse(data);
console.log('Organizr Function: Loading '+organizrFn);
$(element).html(json.data);
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function updateCheck(){
githubVersions().success(function(data) {
var json = JSON.parse(data);
for (var a in reverseObject(json)){
var latest = a;
break;
}
if(latest !== currentVersion){
console.log('Update Function: Update to '+latest+' is available');
message(window.lang.translate('Update Available'),latest+' '+window.lang.translate('is available, goto')+' Update Tab ','bottom-right','#FFF','update','60000');
}
$('#githubVersions').html(buildVersion(reverseObject(json)));
}).fail(function(xhr) {
console.error("Organizr Function: Github Connection Failed");
});
}
function updateBar(){
return `
`;
}
function updateUpdateBar(title,percent,update=false){
$('#update-title').text(title);
$('#update-bar').text(percent);
$('#update-bar').css('width',percent);
if(update){
$('#update-time').removeClass('hidden');
countdown(10);
}
}
function countdown(remaining) {
if(remaining === 0){
local('set','message','Organizr Update|Update Successful|update');
location.reload(true);
}
$('#update-seconds').text(remaining);
setTimeout(function(){ countdown(remaining - 1); }, 1000);
}
function updateNow(){
console.log('Organizr Function: Starting Update Process');
$(updateBar()).appendTo('.organizr-area');
updateUpdateBar('Starting Download','5%');
messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Starting Update Process'),'bottom-right','#FFF','success','60000');
organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:1}).success(function(data) {
var json = JSON.parse(data);
if(json.data == true){
updateUpdateBar('Starting Unzip','50%');
messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update File Downloaded'),'bottom-right','#FFF','success','60000');
organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:2}).success(function(data) {
var json = JSON.parse(data);
if(json.data == true){
updateUpdateBar('Starting Copy','70%');
messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update File Unzipped'),'bottom-right','#FFF','success','60000');
organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:3}).success(function(data) {
var json = JSON.parse(data);
if(json.data == true){
updateUpdateBar('Starting Cleanup','90%');
messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update Files Copied'),'bottom-right','#FFF','success','60000');
organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:4}).success(function(data) {
var json = JSON.parse(data);
if(json.data == true){
updateUpdateBar('Restarting Organizr in','100%', true);
messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update Cleanup Finished'),'bottom-right','#FFF','success','60000');
}else{
message('',window.lang.translate('Update Cleanup Failed'),'bottom-right','#FFF','error','10000');
}
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}else{
message('',window.lang.translate('Update File Copy Failed'),'bottom-right','#FFF','error','10000');
}
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}else{
message('',window.lang.translate('Update File Unzip Failed'),'bottom-right','#FFF','error','10000');
}
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}else{
message('',window.lang.translate('Update File Download Failed'),'bottom-right','#FFF','error','10000');
}
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function organizrAPI(type,path,data=null){
//console.log('Organizr API: Calling API: '+path);
switch (type) {
case 'get':
case 'GET':
case 'g':
return $.ajax({
url:path,
method:"GET",
beforeSend: function(request) {
request.setRequestHeader("Token", activeInfo.token);
},
});
break;
case 'post':
case 'POST':
case 'p':
return $.ajax({
url:path,
method:"POST",
beforeSend: function(request) {
request.setRequestHeader("Token", activeInfo.token);
},
data:{
data: data,
}
});
default:
console.warn('Organizr API: Method Not Supported');
}
}
function githubVersions() {
return $.ajax({
url: "https://raw.githubusercontent.com/causefx/Organizr/"+activeInfo.branch+"/js/version.json",
});
}
function organizrConnect(path){
return $.ajax({
url: path,
});
}
function changeSettingsMenu(path){
var menuItems = path.split("::");
var menu = '';
if(Array.isArray(menuItems)){
$.each(menuItems, function(i,v) {
menu += ''+v+' ';
});
}
$('#settingsBreadcrumb').html(menu);
}
function buildWizard(){
organizrConnect('api/?v1/wizard_page').success(function(data) {
var json = JSON.parse(data);
console.log("Organizr Function: Starting Install Wizard");
$(json.data).appendTo($('.organizr-area'));
}).fail(function(xhr) {
console.error("Organizr Function: Wizard Connection Failed");
});
$("#preloader").fadeOut();
}
function buildDependencyCheck(orgdata){
organizrConnect('api/?v1/dependencies_page').success(function(data) {
var json = JSON.parse(data);
console.log("Organizr Function: Starting Dependencies Check");
$(json.data).appendTo($('.organizr-area'));
$(buildBrowserInfo()).appendTo($('#browser-info'));
$('#web-folder').html(buildWebFolder(orgdata));
$(buildDependencyInfo(orgdata)).appendTo($('#depenency-info'));
}).fail(function(xhr) {
console.error("Organizr Function: Dependencies Connection Failed");
});
$("#preloader").fadeOut();
}
function buildDependencyInfo(arrayItems){
var listing = '';
$.each(arrayItems.data.status.dependenciesActive, function(i,v) {
listing += ' '+v+' ';
});
$.each(arrayItems.data.status.dependenciesInactive, function(i,v) {
listing += '
'+v+' ';
});
return listing;
}
function buildWebFolder(arrayItems){
var writable = (arrayItems.data.status.writable == 'yes') ? 'Writable - All Good' : 'Not Writable - Please fix permissions';
var className = (writable == 'Writable - All Good') ? 'bg-primary' : 'bg-danger text-warning';
$('#web-folder').addClass(className);
return writable;
}
function buildBrowserInfo(){
var listing = '';
$.each(activeInfo, function(i,v) {
listing += `
`+i+`
`+tof(v)+`
`;
});
return `
`;
}
function tof(string,type){
var result;
if (typeof string == 'undefined' || string == 'false' || string == false || string == null || string == 0 || string == 'off' || string == 'no') {
result = "0";
}else if (string == 'true' || string == true || string == 1 || string == 'on' || string == 'yes') {
result = "1";
}
switch (type) {
case 'bool':
case 'b':
return (result == "0") ? (false) : ((result == "1") ? (true) : (string));
break;
case 'switch':
case 's':
return (result == "0") ? ('off') : ((result == "1") ? ('on') : (string));
break;
case 'checkbox':
case 'c':
return (result == "0") ? ('') : ((result == "1") ? ('checked') : (string));
break;
case 'integer':
case 'number':
case 'i':
case 'n':
return (result == "0") ? (0) : ((result == "1") ? (1) : (string));
break;
case 'question':
case 'q':
return (result == "0") ? ('yes') : ((result == "1") ? ('no') : (string));
break;
case 'string':
return string.toString();
break;
default:
return (result == "0") ? ("false") : ((result == "1") ? ("true") : (string));
}
}
function createRandomString( length ) {
var str = "";
for ( ; str.length < length; str += Math.random().toString( 36 ).substr( 2 ) );
return str.substr( 0, length );
}
function generateAPI(){
var string = createRandomString(20);
$('#form-api').focus();
$('#form-api').val(string);
$('#form-api').focusout();
$('#verify-api').text(string);
$('#form-username').focus();
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i Success ';
break;
case "warning":
return 'Warning ';
break;
case "error":
return 'Error ';
break;
default:
}
}
function radioLoop(element){
$('[type=radio][id!="'+element.id+'"]').each(function() { this.checked=false });
}
function loadAppearance(appearance){
//console.log(appearance);
if(appearance.useLogo === false){
$('#main-logo').html(appearance.title);
$('#side-logo').html(appearance.title);
}else{
$('#main-logo').html(' ');
$('#side-logo').html(' ');
}
if(appearance.headerColor !== ''){
$('.navbar-header').css("background", appearance.headerColor);
}
if(appearance.loginWallpaper !== ''){
$('#user-appearance').html(`
.login-register {
background: url(`+appearance.loginWallpaper+`) center center/cover no-repeat!important;
height: 100%;
position: fixed;
}
.lock-screen {
background: url(`+appearance.loginWallpaper+`) center center/cover no-repeat!important;
height: 100%;
position: fixed;
z-index: 999999;
top: 0;
width: 100%;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
`);
}
}
function clearForm(form){
$(form+" input[type=text]", form+" input[type=password]").each(function() {
$(this).val('');
})
}
function checkMessage(){
var check = (local('get','message')) ? local('get','message') : false;
if(check){
local('remove', 'message');
var message = check.split('|');
messageSingle(window.lang.translate(message[0]),window.lang.translate(message[1]),'bottom-right','#FFF',message[2],'10000');
}
}
function setError(error){
local('set','error',error);
var url = window.location.href.split('?')[0];
url = url.split('#')[0];
window.location.href = url+'?error';
}
function buildErrorPage(error){
var description = '';
var message = '';
var color = '';
switch (error) {
case '401':
description = 'Unauthorized';
message = 'Look, you dont belong here';
color = 'danger';
break;
case '404':
description = 'Not Found';
message = 'I think I lost it...';
color = 'primary';
break;
default:
description = 'Something happened';
message = 'But I dont know what';
color = 'muted';
}
return `
`+error+`
`+description+`
`+message+`
OK
`;
}
function errorPage(error=null){
if(error){
local('set','error',error);
}
var urlParams = new URLSearchParams(window.location.search);
if(urlParams.has('error')){
if(urlParams.get('error')){
local('set','error',urlParams.get('error'));
}
}
if(local('get', 'error')){
//show error page
$('.error-page').html(buildErrorPage(local('get', 'error')));
$('.error-page').fadeIn();
local('remove', 'error');
window.history.pushState({}, document.title, "/" );
}
}
function changeTheme(theme){
//$("#preloader").fadeIn();
$('#theme').attr({
href: 'css/themes/' + theme + '.css?v='+activeInfo.version
});
//$("#preloader").fadeOut();
console.log('Theme: '+theme);
}
function changeStyle(style){
//$("#preloader").fadeIn();
$('#style').attr({
href: 'css/' + style + '.css?v='+activeInfo.version
});
//$("#preloader").fadeOut();
console.log('Style: '+style);
}
function setSSO(){
$.each(activeInfo.sso, function(i,v) {
if(v !== false){
local('set', i, v);
}
});
}
//Generate API
function generateCode() {
var code = "";
var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 20; i++)
code += possible.charAt(Math.floor(Math.random() * possible.length));
return code;
}
function launch(){
organizrConnect('api/?v1/launch_organizr').success(function (data) {
var json = JSON.parse(data);
if(json.data.user == false){ location.reload(); }
currentVersion = json.data.status.version;
activeInfo = {
timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,
offest:new Date().getTimezoneOffset(),
language:language(moment.locale(navigator.languages[0])),
browserVersion:bowser.name,
browserName:bowser.version,
mobile:bowser.mobile,
tablet:bowser.tablet,
osName:bowser.osname,
osVersion:bowser.osversion,
serverOS:json.data.status.os,
phpVersion:json.data.status.php,
token:json.data.user.token,
branch:json.branch,
sso:json.sso,
theme:json.theme,
style:json.style,
version:json.version
};
console.log("%cOrganizr","color: #66D9EF; font-size: 24px; font-family: Monospace;");
console.log("%cVersion: "+currentVersion,"color: #AD80FD; font-size: 12px; font-family: Monospace;");
console.log("%cStarting Up...","color: #F92671; font-size: 12px; font-family: Monospace;");
checkMessage();
errorPage();
changeStyle(activeInfo.style);
changeTheme(activeInfo.theme);
setSSO();
switch (json.data.status.status) {
case "wizard":
buildWizard();
buildLanguage('wizard');
break;
case "dependencies":
buildDependencyCheck(json);
break;
case "ok":
loadAppearance(json.appearance);
userMenu(json);
categoryProcess(json);
tabProcess(json);
break;
default:
console.error('Organizr Function: Action not set or defined');
}
});
}