/* TEST SHIT */ // Create language switcher instance var lang = new Lang(); //lang.dynamic(language(moment.locale(navigator.languages[0])), 'js/langpack/'+language(moment.locale(navigator.languages[0]))+'.json'); lang.dynamic('th', 'js/langpack/th.json'); lang.dynamic('de', 'js/langpack/de.json'); lang.dynamic('nb', 'js/langpack/nb.json'); 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 sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } function timerIncrement() { idleTime = idleTime + 1; if (idleTime > 19) { // 20 minutes //window.location.reload(); } //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 'tabIcon'; } }else{ return 'tabIcon'; } } 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 buildFormItem(item){ var placeholder = (item.placeholder) ? ' placeholder="'+item.placeholder+'"' : ''; var id = (item.id) ? ' id="'+item.placeholder+'"' : ''; var value = (item.value) ? ' value="'+item.value+'"' : ''; var name = (item.name) ? ' name="'+item.name+'"' : ''; var extraClass = (item.class) ? ' '+item.class : ''; var disabled = (item.disabled) ? ' disabled' : ''; //+tof(item.value,'c')+` switch (item.type) { case 'input': return ''; break; case 'switch': case 'checkbox': return ''; break; default: return false; } } function buildCustomizeAppearanceItem(array){ if (Array.isArray(array.config)) { var preRowConfig = `

Config Items


`; var customizeItems = preRowConfig; $.each(array.config, function(i,v) { customizeItems += `
`+buildFormItem(v)+`
`; }); customizeItems += '
'; } return customizeItems; } function buildImageManagerViewItem(array){ var imageListing = ''; if (Array.isArray(array)) { $.each(array, function(i,v) { var filepath = v.split("/"); var name = filepath[3].split("."); imageListing += `
`+name[0]+`
`; }); } 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 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(); console.log('fired'); } }).fail(function(xhr) { console.error(post.error); }); ajaxloader(); } /* END ORGANIZR API FUNCTIONS */ function buildLanguage(replace=false,newLang=null){ var languages = { 'en':{ 'lang':'English', 'image':'plugins/images/languages/en.png' }, 'de':{ 'lang':'Deutsch', 'image':'plugins/images/languages/de.png' }, 'nb':{ 'lang':'Bokmål', 'image':'plugins/images/languages/nb.png' } }; 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 += ` `; }else{ menuList += ` `; } $(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 `
  • Logout
  • GitHub
  • `; }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)+``+v.category+` `+v.count+`
  • `; } }); $(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 += ''; }); return ''; } function buildTabGroupSelect(array, tabID, groupID){ var groupSelect = ''; var selected = ''; $.each(array, function(i,v) { selected = ''; if(v.group_id == groupID){ selected = 'selected'; } groupSelect += ''; }); return ''; } 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 += ''; }); return ''; } function buildTabCategorySelect(array,tabID, categoryID){ var categorySelect = ''; var selected = ''; $.each(array, function(i,v) { selected = ''; if(v.category_id == categoryID){ selected = 'selected'; } categorySelect += ''; }); return ''; } function buildUserManagementItem(array){ var userList = ''; $.each(array.users, function(i,v) { var disabledDelete = (v.group_id == 999 || v.group_id == 0) ? 'disabled' : 'deleteUser'; userList += `
    user-img
      `+v.id+`
    `+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 += `
    `+iconPrefix(v.image)+`
      `+v.group_id+`
    `+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 += `
    `+iconPrefix(v.image)+`
    `+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 += `
    `+iconPrefix(v.image)+`
    `+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 = ''; }else if (x === 0){ button = ''; } versions += `
    `+button+`

    `+i+`

    `+moment.utc(v.date, "YYYY-MM-DD hh:mm[Z]").local().fromNow()+`

    `+v.title+`

    `+listing+`
    `; 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'); }else{ console.log('Update Function: '+latest+' is the newest version'); } $('#githubVersions').html(buildVersion(reverseObject(json))); }).fail(function(xhr) { console.error("Organizr Function: Github Connection Failed"); }); } function updateBar(){ return `

    0%
    `; } 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(); } $('#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'); setTimeout(location.reload.bind(location), 10000); }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 ` `+listing+`
    `; } 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; 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 '; break; case "warning": return ''; break; case "error": return ''; 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('home'); } if(appearance.headerColor !== ''){ $('.navbar-header').css("background", appearance.headerColor); } } 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 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 }; 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;") 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'); } }); checkMessage(); }