Skip to content

Commit

Permalink
zalozeni repo
Browse files Browse the repository at this point in the history
  • Loading branch information
AakaFosfor committed Jan 26, 2015
0 parents commit 4108716
Show file tree
Hide file tree
Showing 11 changed files with 1,853 additions and 0 deletions.
53 changes: 53 additions & 0 deletions README.md
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í
5 changes: 5 additions & 0 deletions tools/install.php
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 added tools/log.db
Binary file not shown.
4 changes: 4 additions & 0 deletions web/adminer/.htaccess
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
1 change: 1 addition & 0 deletions web/adminer/.htpasswd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uzivatel:$apr1$LiROwZ5M$3p6kEiGKHvY4Ryw3Y8pYg/
1,401 changes: 1,401 additions & 0 deletions web/adminer/index.php

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions web/data/.htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
deny from all
Binary file added web/data/log.db
Binary file not shown.
118 changes: 118 additions & 0 deletions web/data/vypisZacJmena.sh
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
65 changes: 65 additions & 0 deletions web/hl.css
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;
}
Loading

0 comments on commit 4108716

Please sign in to comment.