diff --git a/actions.js b/actions.js index 6c27312..de333d7 100755 --- a/actions.js +++ b/actions.js @@ -45,16 +45,16 @@ function Process(d, file) { var newRes = CheckData(newFile); var oldRes = CheckData(oldFile); - if (newRes.count > 0) - logger.Log("[NLOD]:\t\tnew file result: " + newRes.count, logger.GetColor("blue")); - else - logger.Log("[NLOD]:\t\tnew file NLOD error, " + newRes.log, logger.GetColor("redbg"), true); - if (oldRes.count > 0) logger.Log("[NLOD]:\t\told public result: " + oldRes.count, logger.GetColor("blue")); else logger.Log("[NLOD]:\t\told public NLOD error, " + oldRes.log, logger.GetColor("redbg"), true); + if (newRes.count > 0) + logger.Log("[NLOD]:\t\tnew file result: " + newRes.count, logger.GetColor("blue")); + else + logger.Log("[NLOD]:\t\tnew file NLOD error, " + newRes.log, logger.GetColor("redbg"), true); + utils.WriteFile(newFile, file); logger.Log("[NLOD]:\t\tNew data written to: " + file); @@ -73,16 +73,23 @@ function Process(d, file) { function ProcessIncomingRequest(data) { - logger.Log("[PCES] ----------------------------------------------------------<", - logger.GetColor("yellow")); if (data == undefined) { logger.Log("[PCES]:\tRecieved data is undefined!", logger.GetColor("redbg")); return; } var d = SetupData(data); + var qcount = -1; + try { + var splitted = d.alldata.split("\n"); + var count = 0; + for (var i = 0; i < splitted.length; i++) + if (splitted[i][0] == '?') + count ++; + qcount = count; + } catch (e) {console.log("Error :c"); console.log(e);} - logger.Log("[PCES]:\tProcessing data: " + d.subj + " (" + d.type + ")", logger.GetColor("green")); + logger.Log("[PCES]:\tProcessing data: " + d.subj + " (" + d.type + "), count: " + qcount, logger.GetColor("green")); if (d.subj == undefined){ logger.Log(JSON.stringify(d), logger.GetColor("red")); return; @@ -99,22 +106,12 @@ function ProcessIncomingRequest(data) { Process(d, publicFile); Process(d, staticFile); }*/ - try { - var splitted = d.alldata.split("\n"); - var count = 0; - for (var i = 0; i < splitted.length; i++) - if (splitted[i][0] == '?') - count ++; - logger.Log("[PCES]:\tTest all question count: " + count, logger.GetColor("blue")); - } catch (e) {console.log("Error :c"); console.log(e);} var newPubItems = Process(d, publicFile); var newStatItems = Process(d, staticFile); utils.AppendToFile(logger.GetDateString() + "\n" + d.data, recievedFile); PrintNewCount(d, newPubItems, publicFile); PrintNewCount(d, newStatItems, staticFile); - logger.Log("[PCES] ----------------------------------------------------------<", - logger.GetColor("yellow")); } function PrintNewCount(d, newItems, file) { diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..cab5a02 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/man.html b/public/man.html new file mode 100644 index 0000000..3ae54b7 --- /dev/null +++ b/public/man.html @@ -0,0 +1,504 @@ + + + + + + + Moodle/Elearning/KMOOC manual + + + img +
+

Moodle/Elearnig/KMOOC manual

+
+
+ Ez a userscript Moodle/Elearnig/KMOOC tesztek megoldása során segítséget jelenít meg. +
+

+
+ img + img + img +
+

+ A válasz ablakban jobb felül lévő százalék jelzi, hogy mekkora eséllyel jó a megoldás. Ez + sokszor jó viszonyítás, de semmi sem biztos! Bármikor előfordulhat, hogy nem jó a + megjelenített válasz! Ezért csak saját felelőségedre használd! Sok kikerülhetetlen + hibalehetőség van, amit egyszerű nem lehet scriptben lekezelni (Pl rosszul megadott kérdés + tanár részéről). Kézzel is lehet keresni a elmentett kérdések között. Ezért mindég + legyen egy letöltött verziód a kérdésekről, mert nem 100% hogy mindég elérhető a szerver! + Továbbá ha a moodle oldalán a layout megváltozik, a script nem fog működni! Ez nem annyira + gyakori, de bármikor megtörténhet! Érdemes nem kikapcsolni a tampermonkey-ban a userscript + frissítést. Ez nem windows update, itt tényleg hibajavítások jönnek ki. Hiba, észrevétel + esetén : Script Feedback (ezt + gyakran még aznap megnézem. +

+

+ Továbbá ez a userscript HTTP requestekket küldhet egy szerver felé (ha ezt engedélyezed), + ahova az összes megoldott teszteid kérdéseit és (helyes)válaszait feltölti! Ezzel garantálja, + hogy neked, és mindenki másnak a legfrissebb adatok állnak rendelkezésre. Ezt letilthatod, ha a + menüben a helyi fájl használatát választod, vagy a userscript kiegészitődnél nem engeded meg + ezeket a kéréseket továbbítani. Ez alapból engedélyezve van, +
+

Tartalomjegyzék

+
+
+ +
+

Használat

+
+
+ + + +
+

Ha először használod, olvasd el a lenti beüzemelés részt. +

Ha másodszor, és tesztet akarsz megoldani, akkor először nézd meg a menüben, hogy aktív-e a + tárgyad. Teszt közben a script a megadott tárgy már lementett kérdéseiből próbál segíteni. +

+ Teszt végén teendők ha helyi fájlban vannak az adatjaid: Ha egy teszt végére + értél, akkor megjelenik a megoldásos oldal, ahol minden kérdés fel van sorolva. Itt a + script szépen öszegyűjti a kérdés/válasz kombókat, aztán feldob egy ablakot, amire + kattintva ezt megjeleníti. Az ott megjelenített kérdéseket be kell másolnod a .txt-be, a + megfelelő tárgy után (+tárgynév...). Userscript nem tud fájlba írni. +

+

Teszt közben még több dolog történhet: +

+
    +
  • Nem jó kérdésre ad választ a script: Ilyenkor az van, hogy nincs meg a kérdés a + txt-ben, vagy több hasonló kéréds/válasz van. Ilyenkor a jobbra/balra gombal váltogathatsz + azok a kérdés/válasz kombók közül, amit talált a script
  • + +
  • Több teszt kérdés van egy odalon: Fel le gombal váltogathatsz a kérdések között. + Ilyenkor is működik az előbb említett funkció. Az indexek, amit kiír a bal felső sarokban: + aktuális kérdés száma / aktuális találat száma.
  • + +
  • Nem jelenik meg semmi, vagy nem működik a script: Megesik az ilyesmi. Ekkor + megnyithatd a kérdések filet, és oldschool CTRL-F el keresgethetsz. Na, azért még mindég + jobb mint a semmi!
  • +
+

A script radiobuttonos, tickboxos, képes és szöveges kérdéseknél is jól működik. Egyéb + típusú kérdésekre nincsen (nagyon) felkészítve. + +

Egyéb funkciók: +
    +
  • + Ha esetleg videókat nézel, akkor spacel lehet play/pausolni, és jobra/balra + gombbal ugrani a videóban. +
  • +
  • + Menüben el lehet rejteni a kérdéseket a felugró ablakról, így az + kisebb helyet foglal, de így nem bírod ellenőrizni, hogy tényleg jó kérdés/választ talált-e. +
  • +
  • + Ugyanitt az üdvözlő üzenetet is el lehet rejteni. Ez frissítésnél vagy hibánál ígyis + úgyis megjelenik, mert azok nagyából fontosak. +
  • +
  • + Ha bármikor nem kell a scirpt, simán kapcsold ki tampermonkeyban. Ha + bármiért is el akarod tüntetni a következő oldalig az éppen megjelenő script ablakot, akkor + középső egérgombal kattintva rajta ezt megteheted. +
  • +
+

TL; DR:

+ + Olvasd csak el. Az öszes bonyodalom abból adódik, hogy a tampermonkey API-je korlátozott, és + néhány dolgot neked kell megcsinálni, megérteni. Ha az online kérdéseket használod, akkor nagy + eséllyel semmi teendőd, de azért jó ha tudod hogy működik, ha esetleg valami elromlik teszt + közben, tudd hogy lehet megcsinálni gyorsan. Legyen mindég nálad egy másolat az online + kérdésekről, mert bármikor eltűnhet! + +
+ img +
+
+

Eddigi teszt kérdések:

+
+
+ Eddigi összes kérdés Használat: + Másold be a saját fájlodba. Ha csak egy tárgyé kell, akkor vedd ki a pipát a scirpt UI-nál, vagy + töröld ki a fájlból azt a részt. Csak akkor kell, ha helyi adatokat akarsz használni Viszont + kifejezetten ajánlott ezeket még ekkor is lementeni, mivel nincs garancia a szerver folyamatos + működésére! + + + + +
+
+

Beüzemelés (online)

+
+
+ +

1.5-ben bekerült egy új feature, ez pedig az, hogy szervertől szedi a kérdéseket a script. + Elküldött, és letöltött adatokról lentebb tudsz olvasni. 3 opció elérhető, amit a menüben lehet + álligatni: +
    +
  • +

    Helyi fájlból: a script a forráskódban általad megatodd útvonalon + található fájlból olvassa be a kérdéseket, és ott keres. A tesztek végén mindég be kell + másolnod az új kérdéseket. Erről a következő szekció mesél többet +
  • +
  • + Neteről: interneten hostolt adatbázis letöltése, és használata. Mindkét verzióhoz + azonnal feltölti az éppen megoldott tesztek kérdés-válaszait, ezért azonnal látnod + kell(ene) azokat. +
      +
    • + Karbantartott: Ez garantáltan működik, válogatott kérdések vannak benne. Viszont + nem a legfrissebb. +
    • +
    • + Szabadon szerkeszthető: Legfrisebb kérdések. Ezt bárki szerkesztheti, nem csak + jó szándékból! +
    • +
    +
  • +
+ +
A weboldal működése:
+ + Egyik oldalon egy szerkeszthető textbox található (bal). Ez a nem karbantartott adat. Ezt bárki + szerkesztheti, és azonnal életbe lép minden változtatás, szóval óvatosan. Elvileg ellenőrzi, + hogy helyes-e a bevitt adat, de ez nem bomba biztos. Másik oldaloni (jobb) egy read-only, stabil + adatbázis van, ami manuálisan van karban tartva, és biztosan működik.

Ha online adatokat + használsz, akkor a tesztek végén automatikusan el lesznek küldve az új kérdések, és hozzá + lesznek adva a nyílt végére. Így azonnal frissül neked, és másoknak is az adatbázis. Ezért nem + válalok felelősséget, és hibák is lehetnek benne. Ezeket nyugodtan kijavíthatod. Időnként ezek + bekerülnek a stabilba. Ajánlott ezeket lementeni, mivel nincs garancia a szerver folyamatos + működésére! Legalul egy textbox van, ahol minden lelki + bánatodat elküldheted. + +
+
+

Beüzemelés (helyi adatokkal)

+
+
+ +

+ Ha netről használod a kérdéseket, akkor ezt a részt kiskippelheted. De csak ezt +

Ezt minden frissítésnél el kell játszanod, mert az egész script (beleértve az elérési + utadat) felülíródik. Frissítés után a 3. pontot ismételd. +
    +
  • + 1. : + + Greasyfork-ról + telepítsd a scriptet. Ha ezt látod, akkor ez nagy esélyel sikerült. +

    + 2. : +
      +
    • a/ Ha van kérdés adatbázisod. Ugorj a 3.-as pontra. +
    • +

      +
    • b/ Ha nincs kérdés adatbázisod. Hozz létre egy üres .txt-filet, vagy + fentebb az Eddigi kérdések pontnál tölts le párat. Inditásnál ha üres a file, akkor + hibát jelez, de miután feltöltöd nem kellene. Ha több tárgyat szeretnél használni, + akkor feltétlen olvasd el az ez alatti útmutatót! +
    • +
    +
  • +
  • + 3. : Nyisd meg a tampermonkey-d. Böngésző jobbfelsősarkánál nagy esélyel van + tampermonkey ikon. Katt, majd dashboard. Ott fel lesz sorolva egy pár script. Válaszd ki + az Elektro help-et. +
    Rögtön az elején látsz csomó cuccot.// ==UserScript== meg @name meg ilyesmi. + Keresd meg a @resource taget. +
    Most jön a .txt-d. Az elérési útját másold be, hogy nagyából hasonló legyen: +
    + +

    // @resource data file:///D:/OE/Elektronika/Elektro%20All%20ELearning.txt +

    Ide másold be a sima elérési utat, majd convert! Ezután az eredményt + bemásolhatod a @resouce taghoz. kiterjesztésről (.txt) ne feledkezz meg ;) + +
    Másik jó megoldás, hogy a fájlodat megnyitod böngészöben, és az url-jét + másolod be a script fejlécébe. +
  • +

    +
  • + 4. : Kész! Mentsd el, és hf. Nagy esélyel először hibával fogsz találkozni. + Dont worry! A Hibák részben pont ezt fogom leírni. +
  • +
+
+

Több tárgy kérdéseinek használata helyi adatokkal: (1.2)

+
+
+
Röviden: Kérdések +tárgynév sorral elválasztva külön tárgynak számítanak +

Hosszabban: Vegyük például, hogy Elektornika, és Jazz kérdésekre szeretnéd használni a + scriptet. Ekkor a .txt-d két részre lesz fel osztva a következő módon: Első sora: "+Elektró + (moodle)". Ez a neve annak a tárgynak, amihez a sor után következő kérdések tartoznak, + mindaddíg, amíg egy másik "+" kezdetű sor nem következik. Ha ez történik, akkor meg kell adnod a + következő tárgy nevét, ez esetben: "+Jazz (kmooc). Ebből tudja a script, hogy ez egy másik + tárgy. Minden kmooc és moodle oldalon megjelenik egy Menü a jobb alsó sarokban, amire kattintva + ki bírod választani, hogy mely tárgy legyen aktív. Ha valamely tárgy aktív, akkor a script a + tárgy kérdései közül fogja keresni a választ az aktuális kérdésre. Ha egy sincs bejelölve, akkor + nem lesz találta soha. +

+ A jobb alsó sarokban 1.2 óta található egy menü gomb. Ha rákattintasz, akkor megjelenik egy + új ablak az oldal közepefele. Ezt be tudod zárni, vagy a listázott tárgyakat tudod + aktiválni/inaktiválni. Ha egy tárgy aktív, akkor annak a kérdés-válaszai között keres a + script választ az aktuális kérdésre. +
+
+

Beolvasott kérdések struktúrája

+
+
+

A .txt-ben "?" jelöli a kérdést, "!" a választ, ">" a kérdéshez tartozó képneveket (ez + optimális) és "+" a tárgy nevét. Ami más karakterrel kezdődik, és kérdés előtt van, az + figyelmen kívül van hagyva, egyéb helyen hibát eredményezhet egy ismeretlen sor! Ha új + tárgyat szeretnél hozzáadni, egyszerűen másold be az aljára a kérdéseket sorban, egy új + +[tárgynév]-el kezdődő sor után. Ha online adatokat szerkesztesz, akkor ezt érdemes tudni, + küldönben elronthatod! +
+

Gyakran előforduló kérdések

+
+
+ +
+

Adat egyszerűsítés

+
+
Másold be ide az egész txt-d, és ez kiszedi belőle az ugyanolyan kérdéseket, illetve ha + hibás részeket talál, akkor kikommenteli. Érdemes megnézni, hogy történt-e ilyen, keress rá a + kész szövegben a "#"-karakterre. Ezzel azért óvatosan, ez kipusztithatja a szobanövényed. + + +
Jogosultságok: +
GM_openInTab: help megnyitása új lapon, GM_xmlhttpRequest: online adatbázishoz. + GM_getResourceText: a txt beolvasáshoz. Mást nem bír beolvasni, csak amit megadsz a @resouces + tagnál. GM_info: a scriptről információ, a verzióváltozás érzékeléséhez. GM_getValue/ + GM_setValue: oldal bezárásakor megmaradó változók kezelése. Előző verzió tárolására, ugyanúgy + verzióváltozás érzékeléséhez, néhány beállítás, illetve hogy melyik tárgyakból keressen + kérdéseket. Ezek függvények, és a sciptben néhol meg vannak hívva, keresd meg. +

Elküldött adatok online módban: Minden teszt végén az összes kérdés, és rá a moodle szerint + helyesnek vélt válaszok. Fogadott adatok: az összes eddig ismert moodle kérdés +
+
+

+ Script + Greasyforkon + | + Script + Feedback + | + Weboldal +

+

+ img +
+ + + + diff --git a/server.js b/server.js index ec26b4f..b94d289 100755 --- a/server.js +++ b/server.js @@ -32,6 +32,7 @@ var stat = require('./stat.js'); var bodyParser = require('body-parser'); const recivedFiles = "public/recivedfiles"; +const motdFile = "public/motd"; const publicFile = "public/data/public"; const staticFile = "public/data/static"; const countFile = "public/data/count"; @@ -101,12 +102,16 @@ app.get('/manual', function(req, res) { }); app.get('/public', function(req, res) { - res.write(utils.ReadFile(publicFile)); + var response = '@' + utils.ReadFile(motdFile); + response += utils.ReadFile(staticFile); + res.write(response); res.end(); }); app.get('/static', function(req, res) { - res.write(utils.ReadFile(staticFile)); + var response = '@' + utils.ReadFile(motdFile); + response += utils.ReadFile(staticFile); + res.write(response); res.end(); }); @@ -193,6 +198,11 @@ app.get('/sanityCheck', function(req, res) { res.end('Hello guys'); }); +app.get('/menuClick', function(req, res) { + res.redirect("/"); + res.end(); +}); + app.route('/badtestsender').post(function(req, res, next) { var fstream; req.pipe(req.busboy); diff --git a/stat.js b/stat.js index ad774d7..43882e9 100755 --- a/stat.js +++ b/stat.js @@ -31,7 +31,7 @@ const vStatFile = "stats/vstats"; const writeInterval = 10; var data = {}; -var vData = []; +var vData = {}; var writes = 0; function Load() { @@ -55,6 +55,7 @@ function Load() { function LogStat(url) { Inc(url); AddVisitStat(url); + Save(); } function Inc(value) { @@ -63,7 +64,18 @@ function Inc(value) { if (data[value] == undefined) data[value] = 0; data[value]++; - Save(); +} + +function AddVisitStat(name) { + var m = new Date(); + const now = m.getFullYear() + "/" + + ("0" + (m.getMonth() + 1)).slice(-2) + "/" + + ("0" + m.getDate()).slice(-2); + if (vData[now] == undefined) + vData[now] = {}; + if (vData[now][name] == undefined) + vData[now][name] = 0; + vData[now][name]++; } function AddVisitStat(name) { diff --git a/todos b/todos index 58c7804..69dfa3d 100644 --- a/todos +++ b/todos @@ -4,3 +4,4 @@ redirects, for more stats (ex. to greasyfork: /script like - dislike button static public links above textboxes public questions allow question deletion +remove public questions diff --git a/views/main.ejs b/views/main.ejs index d5bee92..76b9226 100755 --- a/views/main.ejs +++ b/views/main.ejs @@ -28,20 +28,9 @@ greasyforkon -
- -
- - - -
- -
- -
- - +Összes kérdés +