/* * 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 . */ // Login-Popup beim Start $('#mainpage').on('pagebeforeshow', function(){ setTimeout(function(){ load(); $('#lnklogin').click(); }, 500); }); $('#mainpage').on('pageshow', function(){ setTimeout(function(){ trylogin(); }, 2000); }); /* PDF Rendering */ function renderPage(div, pdf, pageNumber, callback){ pdf.getPage(pageNumber).then(function(page){ var scale = 2; var viewport = page.getViewport(scale); var pageDisplayWidth = viewport.width; var pageDisplayHeight = viewport.height; var pageDivHolder = document.createElement('div'); pageDivHolder.className = 'pdfpage'; var $canvas = $(''); var canvas = $canvas.get(0); canvas.className = 'pdfcanvas'; var context = canvas.getContext('2d'); canvas.width = pageDisplayWidth; canvas.height = pageDisplayHeight; pageDivHolder.appendChild(canvas); div.appendChild(pageDivHolder); var renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext).promise.then(callback); }); } function render_pdf(url, divstr){ console.log('Rendere PDF: ' + url + ' (' + divstr + ')'); PDFJS.getDocument(url).then(function(pdf){ var viewer = document.getElementById(divstr); var pageNumber = 1; renderPage(viewer, pdf, pageNumber++, function pageRenderingComplete(){ if(pageNumber > pdf.numPages){ return; } renderPage(viewer, pdf, pageNumber++, pageRenderingComplete); }); }); } /* wird bei Verbindungsfehlern oder anderen Fehlern aufgerufen */ function fail(text){ $('#loginform').removeClass('ui-disabled'); $('#loader').hide('slow'); $('#error_noconn').show('fast'); console.log('Fehler: ' + text.toString() + ' / ' + text.code); } /* fügt die lokale URL des Plans ein und ruft die Seite zum Rendering auf */ function addplanattr(fileEntry){ var sPath = fileEntry.toURL(); var name = fileEntry.name.replace('.pdf', ''); console.log('Dateiname: ' + name); var vplantabs = $('#vplantabs').tabs(); var ul = vplantabs.find('ul'); $('
  • ' + name + '
  • ').appendTo(ul); $('
    ').appendTo(vplantabs); render_pdf(sPath, name); vplantabs.tabs('refresh'); // TODO geht nicht } /* lädt ein PDF anhand eines Links herunter, benötigt ID zur Sortierung */ function download_pdf(link){ var filename = link.substring(link.lastIndexOf("/") + 1); window.requestFileSystem( LocalFileSystem.PERSISTENT, 0, function(fileSystem){ fileSystem.root.getDirectory('WvSVPlan', {create: true, exclusive: false}, function(dirEntry){ dirEntry.getFile(filename, {create: false, exclusive: false}, function(fileEntry){ // Datei ist schon heruntergeladen console.log('lade Datei nicht erneut herunter'); addplanattr(fileEntry); }, function(err){ // Datei existiert noch nicht dirEntry.getFile(filename, {create: true, exclusive: false}, function(fileEntry){ var fileTransfer = new FileTransfer(); fileTransfer.download( link, fileEntry.toURL(), function(theFile){ console.log('Download fertig: ' + theFile.toURL()); addplanattr(theFile); }, fail); }, fail); }); }, fail); }); } /* sucht den Downloadlink eines Plans mithilfe eines Links aus der Kursübersicht */ function get_plan(link){ var request = $.ajax({ url: link }); request.done(function gotplan(resulthtml){ var pdf_re = new RegExp('(http://***REMOVED***\\.de/moodle/pluginfile\\.php/\\d+/mod_resource/content/\\d+/.*?\\.pdf)'); var pdflink = pdf_re.exec(resulthtml)[1]; if(pdflink == null){ return 0; } console.log('Plan gefunden: ' + pdflink); download_pdf(pdflink); return 1; }); request.fail(fail); } /* ruft get_plan für jeden Link in der Kursübersicht auf */ function gotoverview(resulthtml){ var plans_re = new RegExp('window\\.open\\('(http://***REMOVED***\\.de/moodle/mod/resource/view\\.php\\?id=\\d+)&redirect=1'\\)', 'g'); var resultarr = resulthtml.match(plans_re); if(resultarr == null){ $('#error_passwd').show('fast'); $('#loginform').removeClass('ui-disabled'); $('#loader').hide('slow'); return 0; } var resultl = resultarr.length; while((link = plans_re.exec(resulthtml)) !== null){ console.log('suche Plan ' + link[1]); get_plan(link[1]); } console.log('Übersichts-Request erfolgreich'); return 1; } /* holt die Kursübersicht - bei Verbindungsfehlern wird onfail aufgerufen */ function get_overview(link, onfail){ var request = $.ajax({ url: link }); console.log('Hole Übersicht'); request.done(gotoverview); request.fail(onfail); } /* such den Link zur Übersicht von der Startseite aus */ function loggedin(resulthtml){ var vertretungs_re = new RegExp('title="Vertretungsplan" href="(http://***REMOVED***\\.de/moodle/course/view\\.php\\?id=\\d+)"'); var link = vertretungs_re.exec(resulthtml)[1]; if(link == null){ return 0; } window.localStorage.setItem('overviewlink', link); console.log('Eingeloggt'); get_overview(link, fail); return 1; } /* sendet einen HTTPost-Request mit Logindaten */ function sendlogin(username, password){ var params = 'username=' + username + '&password=' + password; $('#loginform').addClass('ui-disabled'); $('#loader').show('fast'); $('#error_noconn').hide('fast'); $('#error_passwd').hide('fast'); var request = $.ajax({ type: 'POST', url: 'https://***REMOVED***/moodle/login/index.php', data: {username: username, password: password} }); console.log('Logge ein'); request.done(loggedin); request.fail(fail); } /* lädt Benutzerdaten 1) aus den Userinterfaces oder 2) aus dem HTML5 Local Storage */ /* oder 3) gibt null zurück */ function getuserdata(){ var username = encodeURIComponent($('#username').val()); if(username == ''){ username = window.localStorage.getItem('username'); }else{ window.localStorage.setItem('username', username); } var password = encodeURIComponent($('#password').val()); if(password == ''){ password = window.localStorage.getItem('password'); }else{ window.localStorage.setItem('password', password); } console.log('Benutzerdaten geladen'); if(username !== 'undefined' && username != null && username != '' && password !== 'undefined' && password != null && password != ''){ return [username, password]; }else{ return null; } } /* loggt ein oder zeigt Loginform */ function login(){ userdata = getuserdata(); if(userdata != null){ sendlogin(userdata[0], userdata[1]); return 1; }else{ $('#loginform').removeClass('ui-disabled'); $('#loader').hide('fast'); return 0; } } /* versucht ohne HTTPost die Übersicht zu holen */ /* bei einem Fehlschlag wird in login() versucht, die Nutzerdaten zu laden */ /* und wenn das schiefläuft, muss der Nutzer seine Daten selbst eingeben */ function trylogin(){ var link = window.localStorage.getItem('overviewlink'); $('#loginform').addClass('ui-disabled'); $('#loader').show('fast'); if(typeof link !== 'undefined' && link != null){ console.log('Teste Login'); console.log(link); get_overview(link, login); }else{ login(); } } /* gibt aktuelle Pläne aus entries zurück */ function getactual(entries){ var fname_re = new RegExp('([^-]{4})-([^-]{2})-([^-]{2})(.*?)\.pdf'); // \d funktioniert nicht var today = new Date(); var actual = []; entries.forEach(function(entry){ console.log(entry.name); var results = entry.name.match(fname_re); var fdate = new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3])); if(fdate >= today){ actual.push(entry); } }); return actual; } /* lädt Vertretungspläne aus dem Speicher [1) SD-Karte oder 2) dem internen Speicher] */ function load(){ window.requestFileSystem( LocalFileSystem.PERSISTENT, 0, function(fileSystem){ fileSystem.root.getDirectory('WvSVPlan', {create: true, exclusive: false}, function(dirEntry){ var dirReader = dirEntry.createReader(); dirReader.readEntries( function(entries){ var actual = getactual(entries); console.log("Im Speicher: " + actual.length + " Pläne"); if(actual.length > 0){ for(j = 0; j < actual.length; j++){ addplanattr(actual[j]); } }else{ } }, fail); }, fail); }); }