/* * Copyright (C) 2014 * This file is part of WvS-VPlan. * * WvS-VPlan is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ version = '1.0.3'; function istPremium(benutzer, key){ // Supersicherer Keygenerator :P Inspiriert von kryptochef.de sollKey = ''; switch(benutzer.length % 10){ // Anzahl Zeichen ausschreiben case 0: sollKey = 'NULL'; break; case 1: sollKey = 'EINS'; break; case 2: sollKey = 'ZWEI'; break; case 3: sollKey = 'DREI'; break; case 4: sollKey = 'VIER'; break; case 5: sollKey = 'FUNF'; break; case 6: sollKey = 'SECHS'; break; case 7: sollKey = 'SIEBEN'; break; case 8: sollKey = 'ACHT'; break; case 9: sollKey = 'NEUN'; break; } sollKey = sollKey.replace(/[A-Z]/g, function(s){ return String.fromCharCode(s.charCodeAt(0) + (s < 'N' ? 13 : -13)); // ROT13 }); sollKey = sollKey + Math.round(benutzer.length * 3.14); // Eine Zahl anfügen if(sollKey === key){ return true; }else{ return false; } } function updateCheck(){ var request = $.ajax({ url: 'https://klimaag.***REMOVED***/app/www/knockout.html', cache: false }); request.done(function(resultHtml){ var appStatus = $('li[id="' + version + '"]', resultHtml).text().trim(); var motd = $('li[id="motd"]', resultHtml).html().trim(); var loginOk = true; console.log('Appstatus: ' + appStatus + ' Nachricht des Tages: ' + motd); $('.motd').html(motd); switch(appStatus){ case 'ok': break; case 'hangon': $('#versioninfo').text('Es besteht ein Problem mit der aktuellen Version. Ein Update ist in Arbeit.'); break; case 'info': $('#versioninfo').text('Ein Update ist im Appstore verfügbar.').show(); break; case 'warn': $('#versioninfo').text('Ein wichtiges Update ist im Appstore verfügbar.').show(); break; case 'force': $('#versioninfo').text('Ein wichtiges Update ist im Appstore verfügbar. Du musst es installieren, um dich weiterhin einloggen zu können.').show(); $('#loginsubmit').prop('disabled', true); loginOk = false; break; default: $('#versioninfo').text('Diese Appversion wird nicht mehr unterstützt, bitte aktualisiere auf die neueste Version aus dem Appstore.').show(); $('#loginsubmit').prop('disabled', true); loginOk = false; } if(loginOk === true){ tryLogin(); // nur wenn alles in Ordnung ist, einloggen lassen } }); request.fail(fail); } function news() { var request = $.ajax({ url: 'http://klimaag.***REMOVED***/rss/p/i/?output=rss&order=DESC' }); request.done(function (data) { $(data).find('item').each(function () { var el = $(this); var desc = el.find('description').text(); var url = el.find('link').text(); var title = el.find('title').text(); var date = el.find('pubDate').text(); var author = el.find('dc:creator'); if(author.length) { author = author.text(); } var extras = $('
'); var extra = $('

'); var element = $('
').attr('data-role', 'collapsible'); var head = $('

').text(title); var text = $('
').html(desc); extra.html(moment(date).format('LLLL') + ' ' + '- extern öffnen'); extras.append(extra); element.append(head); element.append(extras); element.append(text); $('#news').append(element); }); $('#news').collapsibleset(); console.log(list.html()); }); } $('#settingspanel').change(function(){ localStorage.setItem('dntrack', $('#dntflip').val()); localStorage.setItem('classes', $('#addclass').val().toUpperCase()); localStorage.setItem('notifyday', $('#notifydayflip').val()); localStorage.setItem('notifynull', $('#notifynullflip').val()); localStorage.setItem('notifydate', $('#notifydate').val()); localStorage.setItem('apptheme', $('#themeselect').val()); }); $('#saveflip').change(function(){ localStorage.setItem('savepass', $('#saveflip').val()); if($('#saveflip').val() === 'false'){ localStorage.removeItem('password'); } }); document.addEventListener('offline', function(){ $('#loginsubmit').prop('disabled', true); $('#error_noconn').show('fast'); }, false); document.addEventListener('online', function(){ $('#loginsubmit').prop('disabled', false); $('#error_noconn').hide('fast'); }, false); $('#mainpage').on('swiperight', function(){ $('#settingspanel').panel('open'); }); String.prototype.hashCode = function() { var hash = 0, i, chr, len; if (this.length === 0) return hash; for (i = 0, len = this.length; i < len; i++) { chr = this.charCodeAt(i); hash = ((hash << 5) - hash) + chr; hash |= 0; // Convert to 32bit integer } return hash; }; function uglyUsername(user) { return Math.abs(user.hashCode()).toString(16); } var _paq = _paq || []; $('#mainpage').on('pagebeforeshow', function(){ /* Versionsnummer zeigen */ $('.version').text(version); /* Sprache setzen */ moment.locale('de'); /* Nutzungsstatistiken */ _paq.push(['setTrackerUrl', 'https://klimaag.***REMOVED***/piwik/piwik.php']); _paq.push(['setSiteId', 5]); console.log('Piwik initialisiert'); /* gespeicherte Daten laden */ var dntrack = localStorage.getItem('dntrack'); var additionalClasses = localStorage.getItem('classes'); var notifyDay = localStorage.getItem('notifyday'); var notifyNull = localStorage.getItem('notifynull'); var notifyDate = localStorage.getItem('notifydate'); var premium = localStorage.getItem('premium'); var easteregg = localStorage.getItem('easteregg'); var apptheme = localStorage.getItem('apptheme'); var savepass = localStorage.getItem('savepass'); if(dntrack === null || dntrack.length === 0){ dntrack = 'false'; } $('#dntflip').val(dntrack).slider('refresh'); if(additionalClasses === null || additionalClasses.length === 0){ additionalClasses = ''; } $('#addclass').val(additionalClasses).textinput('refresh'); if(notifyDay === null || notifyDay.length === 0){ notifyDay = 0; } $('#notifydayflip').val(notifyDay).slider('refresh'); if(notifyNull === null || notifyNull.length === 0){ notifyNull = 0; } $('#notifynullflip').val(notifyNull).slider('refresh'); if(notifyDate === null || notifyDate.length === 0){ notifyDate = '18:00'; } $('#notifydate').val(notifyDate).textinput('refresh'); if(premium === null || premium.length === 0){ premium = 'false'; } if(premium === 'true'){ $('#themeselect').append('').selectmenu('refresh'); console.log('Premium geladen'); } if(easteregg === null || easteregg.length === 0){ easteregg = 'false'; } if(easteregg === 'true'){ $('#themeselect').append('').selectmenu('refresh'); console.log('Easteregg geladen'); } if(apptheme === null || apptheme.length === 0){ apptheme = 'a'; } $('#themeselect').val(apptheme).selectmenu('refresh'); if(savepass === null || savepass.length === 0){ savepass = 'true'; } $('#saveflip').val(savepass).slider('refresh'); /* Piwik initialisieren */ _paq.push(['setCustomVariable', 4, 'DNT', dntrack, 'visit']); }); // Login-Popup beim Start document.addEventListener('deviceready', function(){ /* iOS fix */ if(window.device && parseFloat(window.device.version) >= 7.0) { $('body').addClass('iOS7'); } /* los geht's */ if(! $('#dntflip').val()) { _paq.push(['setCustomVariable', 1, 'Modell', device.model, 'visit']); _paq.push(['setCustomVariable', 2, 'Version', device.version, 'visit']); _paq.push(['setCustomVariable', 3, 'Appversion', version, 'visit']); } _paq.push(['trackPageView', 'load']); fillForm(); if(navigator.connection.type !== Connection.NONE){ // falls Netz da ist updateCheck(); // checkt ob aktuellste Version und loggt ein news(); // holt RSS Feeds } window.plugin.notification.local.cancelAll(); // alle Benachrichtigungen canceln, werden während des Renderings neu gesetzt load(); }, false); /* der Loader wird nur angezeigt, wenn das Popup zu ist */ $('#loginpopup').on('popupafteropen', function(){ $.mobile.loading('hide'); }); /* füllt die Loginform mit gespeicherten Werten */ function fillForm(){ var username = localStorage.getItem('username'); if(username !== null && username.length !== 0){ $('#username').val(username); } var password = localStorage.getItem('password'); if(password !== null && password.length !== 0){ $('#password').val(password); } } /* benachrichtigt den Benutzer an vdate mit msg */ function addNotification(vdate, msgarr, $div){ var msg = msgarr.join('\n'); var title = 'Vertretungen für ' + vdate.format('dddd'); var ndate = vdate.subtract(1, 'days').add($('#notifydayflip').val(), 'days'); // Bei Bedarf einen Tag vorher if(moment().isBefore(ndate)){ window.plugin.notification.local.add({ date: ndate.toDate(), message: msg, title: title, autoCancel: true, json: JSON.stringify({id: $div.attr('id')}) }); window.plugin.notification.local.onclick = function(id, state, json){ var div = JSON.parse(json).id; location.href = '#' + div; // TODO hoffentlich funktioniert das auch immer... }; console.log('Benachrichtigung hinzugefügt: ' + ndate.format('DD.MM. HH:mm') + '; ' + msg); } } /* zeigt einen Button an, mit dem die Vertretung geteilt werden kann */ function addSocialButton(vdate, msgarr, $div){ var msg = msgarr.join(', '); if(moment().isBefore(vdate)){ var datestr = vdate.format('dddd'); var sharebtns = $('button', $div); if(sharebtns.length === 0){ var btn = $('