-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4108716
Showing
11 changed files
with
1,853 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
# FIT-odevzdávač | ||
|
||
je PHP serverová aplikace určená pro zjednodušení odevzdávání studentských testů (souborů) při výuce (primárně BI-CAO). | ||
|
||
## Konfigurace – zprovoznění | ||
|
||
Do určeného prostoru na webovém serveru umístit obsah adresáře `web`. Poté je třeba nastavit několik drobností: | ||
* **přístupy učitelů:** username každého učitele, který má mít možnost stahovat odevzdané soubory, musí být zadaný v poli `$teachers` v souboru `(web/)index.php` | ||
* **přístup k databázi odevzdání:** v souboru `(web/)adminer/.htpasswd` je třeba zadat jméno a heslo pro HTTP autentikaci (vzorově vyplněno `uzivatel`/`heslo`). (Nevíme-li jak, [google](http://gog.is/http+password+generator+.htpasswd) poradí.) Dále je třeba v souboru `(web/)adminer/.htaccess` změnit absolutní cestu `AuthUserFile` na opravdovou cestu. | ||
* případně **obnova databáze:** pokud by bylo třeba obnovit databázi, lze použít vzorový soubor prázdné databáze `tools/log.db`, případně skriptem `tools/install.php` vygenerovat databázi novou. | ||
|
||
## Používání | ||
|
||
### Student | ||
Tedy kdokoliv ověřitelný školním LDAPem, kdo není v kódu uveden jako cvičíčí. | ||
1. otevře příslušnou stránku | ||
1. vyplní svůj školní login a heslo | ||
1. vybere soubor k odevzdání (libovolně pojmenovaný) | ||
1. klikne na "Odeslat soubor" | ||
1. zelená hláška potvrdí, že byl soubor v pořádku uložen v systému | ||
|
||
### Cvičící | ||
Ten, kdo je v kódu uvedeni jako cvičící (a je ověřitelný školním LDAPem). | ||
1. otevře příslušnou stránku | ||
1. vyplní svůj školní login a heslo | ||
1. klikne na "Jsem cvičící" | ||
1. vyplní ID podle tohoto pravidla: {den}/{první hodina cvičení podle rozvrhu} např. "2/7" pro úterý od 12:45, "4/9" pro čtvrtek od 14:30 | ||
1. stáhne se mu ZIP archiv se všemi odevzanými soubory pro dané cvičení | ||
|
||
## Jak to funguje | ||
|
||
* studenti mohou pouze odesílat, cvičící mohou pouze stahovat | ||
* studenti mohou odevzdávat vícekrát, ukládá se každé odevzdání | ||
* studentské odevzdání se podle času a dne v týdnu automaticky třídí do odpovídajících cvičení | ||
* soubory odeslané studenty jsou přejmenovány podle jejich username a času odeslání, přípona je vždy přejmenovaná na ".nb" | ||
* do databáze odevzdání se loguje každé odeslání (username, čas, IP adresa, originální název souboru); přístup je možný z prohlížeče pomocí adresy `(web/)adminer/(index.php)` | ||
* soubory se automaticky nijak neodstraňují, případný "reset" odevzdávače na další týden je nutné provést ručním odstraněním souborů (adresářů) `(web/)data/[1-7]` | ||
* pokud se odevzdává na více místech najednou, je nutné tento odevzdávač zprovoznit ve více oddělených instancích | ||
|
||
## Stav odevzdání | ||
|
||
Je možné průbežně vypisovat stav odevzdání - aby si studenti mohli kontrolovat, zda se jim odevzdání podařilo. Je k tomu nutný přístup k příkazové řádce v místě, kde jsou uložena data. | ||
|
||
Viz soubor `(web/)data/vypisZacJmena.sh` | ||
|
||
## TODO | ||
|
||
Aneb co by šlo vylepšit: | ||
* podrobnější popis chyb | ||
* indikace správného přihlášení studenta/cvičícího (aneb: jako kdo jsem přihlášen?) | ||
* lepší správa cvičících (databáze? GUI?) | ||
* přímá podpora paralelních cvičení | ||
* podpora archivace/promazání |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?php | ||
|
||
$db = new SQLite3('log.db'); | ||
|
||
var_dump($db->exec('CREATE TABLE log (id INTEGER PRIMARY KEY NOT NULL, date INTEGER NOT NULL, ip TEXT NOT NULL, user TEXT NOT NULL, filename TEXT NOT NULL)')); |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
AuthType Basic | ||
AuthName "Databaze odevzdani" | ||
AuthUserFile /absolutni/cesta/k/souboru/.htpasswd | ||
Require valid-user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
uzivatel:$apr1$LiROwZ5M$3p6kEiGKHvY4Ryw3Y8pYg/ |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
deny from all |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
#!/bin/bash | ||
# autor: Vojtech Myslivec ([email protected]) | ||
|
||
# skript pro vypsani zacatku jmena souboru (do charu separator), poctu jejich | ||
# opakovani a celkoveho poctu souboru v danem adresari | ||
# Vystup se formatuje na dany pocet sloupcu oddeleny tabulatorem | ||
|
||
# solaris: | ||
awk="nawk" | ||
# ubuntu | ||
# awk="awk" | ||
|
||
# navratove hodnoty skriptu | ||
ERR_USAGE=1 | ||
ERR_PARAMETER=2 | ||
|
||
USAGE="USAGE: | ||
$0 -h | ||
$0 [-s separator] [-t seconds_to_refresh] [-c number_of_columns] dir | ||
EXAMPLES: | ||
$0 dir1/dir2 | ||
$0 -s \".\" -t 1 -c 10 dir | ||
" | ||
|
||
# funkce na debug vypisy, pokud je definovana promenna DEBUG, vypise argumenty | ||
# na std. error s prefixem | ||
debug() { | ||
[ $DEBUG -eq 1 ] && echo "${0}[deb]:" "$*" >&2 | ||
} | ||
# ----------------------------------------------------------------------------- | ||
|
||
# funkce na error vypisy, vypisuji se vzdy | ||
error () { | ||
echo "${0}[err]:" "$*" >&2 | ||
} | ||
|
||
# funkce na ohlaseni chybneho paramteru | ||
# $1 -- nazev parametru, $2 -- hodnota, $3 -- povolena syntaxe | ||
err_par() { | ||
error "parameter '$1' can't be setted to value '$2'. Usable syntax: '$3'" | ||
exit $ERR_PARAMETER | ||
} | ||
|
||
|
||
# defaultni hodnoty options: | ||
seconds="5" | ||
separator="_" | ||
columns="4" | ||
|
||
# zpracovani parametru z radky: | ||
# pokud je pouze -h, vypise napovedu a skonci uspesne | ||
[ "$1" == "-h" ] && { echo "$USAGE"; exit 0; } | ||
while getopts s:t:c: opt; do | ||
case "$opt" in | ||
# separator musi byt jeden symbol | ||
s) [[ "${#OPTARG}" -ne 1 ]] || err_par "separator" "$OPTARG" "char" | ||
separator="$OPTARG";; | ||
# seconds musi byt kladne int cislo | ||
t) [[ "$OPTARG" =~ ^[0-9]*$ ]] || err_par "seconds" "$OPTARG" "positive int" | ||
seconds="$OPTARG";; | ||
# columns musi byt kladne int cislo | ||
c) [[ "$OPTARG" =~ ^[0-9]*$ ]] || err_par "columns" "$OPTARG" "positive int" | ||
columns="$OPTARG";; | ||
*) echo "$USAGE" >&2 | ||
exit $ERR_USAGE;; | ||
esac | ||
done | ||
# posunuti parametru na argumenty | ||
shift `expr "$OPTIND" - 1` | ||
|
||
|
||
[[ $# -ne 1 ]] && { | ||
error "chybi adresar" | ||
echo "$USAGE" >&2 | ||
exit $ERR_USAGE | ||
} | ||
|
||
[[ -d "$1" && -r "$1" ]] || { | ||
error "'$1' neni citelny adresar" | ||
exit $ERR_PARAMETER | ||
} | ||
|
||
echo "Ukonci program ctrl-c; Dalsi refresh vypise jmena" | ||
|
||
while [[ 1 -eq 1 ]]; do | ||
|
||
sleep "$seconds" | ||
clear | ||
dir=`ls "$1" | sort` | ||
echo "$dir" | "$awk" -v m="$columns" -v sep="$separator" \ | ||
'BEGIN { FS=sep; ORS=""; OFS=""; total=0; cnt=0 } | ||
NR==1 { dup=$1; dupcnt=1; } | ||
NR!=1 { | ||
if ( dup==$1 ) { | ||
dupcnt++ | ||
} | ||
else { | ||
if ( cnt!=0 && cnt%m==0 ) print "\n" | ||
print dup," (",dupcnt,")" | ||
cnt++ | ||
if ( cnt%m!=0 ) print "\t" | ||
dup=$1 | ||
dupcnt=1 | ||
} | ||
total++ | ||
} | ||
END { | ||
if ( cnt!=0 && cnt%m==0 ) print "\n" | ||
print dup," (",dupcnt,")" | ||
cnt++ | ||
total++ | ||
print "\n\ntotal = ",cnt," (",total,")\n" | ||
}' | ||
|
||
|
||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
body { | ||
padding: 0px; | ||
font-family: verdana; | ||
font-size: 12px; | ||
} | ||
|
||
h1 { | ||
text-align: center; | ||
} | ||
|
||
a { | ||
color: #ffa800; | ||
font-weight: bold; | ||
text-decoration: none; | ||
} | ||
|
||
p { | ||
padding-left: 20px; | ||
padding-right: 20px; | ||
} | ||
|
||
p:first-letter { | ||
padding-left: 15px; | ||
} | ||
|
||
table { | ||
margin: auto; | ||
text-align: center; | ||
} | ||
|
||
table tr td { | ||
border: solid black 1px; | ||
padding: 7px; | ||
font-size: 12px; | ||
} | ||
|
||
table tr th { | ||
padding: 5px; | ||
font-size: 13px; | ||
} | ||
|
||
div#message { | ||
font-weight: bold; | ||
margin: auto; | ||
margin-top: 20px; | ||
padding: 7px; | ||
text-align: center; | ||
width: 50%; | ||
} | ||
|
||
div.ok#message { | ||
background-color: #ccff99; | ||
border: 1px solid #ccff00; | ||
color: green; | ||
} | ||
|
||
div.ko#message { | ||
background-color: #ffcccc; | ||
border: 1px solid #ff9900; | ||
color: red; | ||
} | ||
|
||
tr#cvicici-info a { | ||
display: block; | ||
} |
Oops, something went wrong.