-
Notifications
You must be signed in to change notification settings - Fork 0
/
wahl_ergebnisse.php
132 lines (123 loc) · 5.48 KB
/
wahl_ergebnisse.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
session_start();
include 'db_connect.php';
include 'abfragen.php';
function wahlen_anzeigen($klasse, $nbloecke) {
$wahl123_header="";
for ($i=1; $i<=$nbloecke; $i++) $wahl123_header.="<th>I</th><th>II</th><th>III</th><th>Z</th>";
$cmd="SELECT s.name,k.kuerzel,z.block FROM user AS s JOIN zuteilungen AS z ON z.schueler_id=s.id JOIN kurse AS k ON z.kurs_id=k.id JOIN kurs_beschreibungen AS kb ON kb.id=k.beschr_id"
." WHERE kb.wahl_id='".$_SESSION['wahl_id']."'";
$ergebnis = mysql_query($cmd) or die (mysql_error());
$zuteilung=array();
while($row = mysql_fetch_object($ergebnis)) {
$zuteilung[$row->name][$row->block]=$row->kuerzel;
}
$cmd="SELECT s.name, LTRIM(RIGHT(s.name,LENGTH(s.name) - LOCATE('.',s.name))) AS nachname, k.block, sw.prioritaet, k.kuerzel"
." FROM user AS s JOIN schueler_wahl AS sw ON sw.schueler_id=s.id JOIN kurse as k ON sw.kurs_id=k.id "
." JOIN kurs_beschreibungen AS kb ON kb.id=k.beschr_id JOIN klassen AS kl ON s.klassen_id=kl.id "
." WHERE kl.name='$klasse' AND kb.wahl_id=".$_SESSION['wahl_id']." ORDER BY nachname";
$ergebnis = mysql_query($cmd) or die (mysql_error());
$wahl=array();
while($row = mysql_fetch_object($ergebnis)) {
if (!isset($wahl[$row->name][$row->block][$row->prioritaet])) $wahl[$row->name][$row->block][$row->prioritaet]=array();
$wahl[$row->name][$row->block][$row->prioritaet][]=$row->kuerzel;
}
if (sizeof($wahl)<=0) {
echo "Keine Eintraege fuer Klasse $klasse.<br>";
return;
}
echo <<<END
<fieldset><legend>Klasse $klasse:</legend>
<table border='1' style='border-collapse:collapse; font-size:0.6em;'>
<tr><th>Name</th>$wahl123_header</tr>
END;
foreach ($wahl as $schueler=>$w) {
$wahl123="";
for ($b=1; $b<=$nbloecke; $b++) {
$z=" ";
if (isset($zuteilung[$schueler][$b])) $z=$zuteilung[$schueler][$b];
for ($prior=1; $prior<=3; $prior++) {
$x=isset($w[$b][$prior])?join("<br>",$w[$b][$prior]):"-";
if ($x==$z) $x="<b>$x</b>";
$wahl123.="<td>$x</td>";
}
$wahl123.="<td>$z</td>";
}
echo " <tr><td>$schueler</td>$wahl123</tr>\n";
}
echo "</table></fieldset>\n";
}
function wahlen_loeschen($klasse) {
$cmd="DELETE sw FROM schueler_wahl AS sw JOIN user AS s ON sw.schueler_id=s.id JOIN kurse AS k ON sw.kurs_id=k.id "
."JOIN kurs_beschreibungen AS kb ON kb.id=k.beschr_id JOIN klassen as kl ON s.klassen_id=kl.id "
."WHERE kl.name='$klasse' AND kb.wahl_id='".$_SESSION['wahl_id']."'";
if (!($ok=mysql_query($cmd))) if (mysql_errno()==1001) echo "<font color='red'>".mysql_error()."</font><br>"; else die(mysql_error());
if (mysql_errno()==1001) return;
$n=mysql_affected_rows();
if ($n>0) echo "$n Wahleintraege von der Klasse $klasse wurden gelöscht.<br>";
}
function zufaellig_setzen($klasse, $nbloecke) {
// Wahlen der Klasse erst löschen
wahlen_loeschen($klasse);
// Wählbare Kurse abfragen
$auswahl="('$klasse'";
if (preg_match("/([0-9]+)[a-z]/",$klasse,$matches)) $auswahl.=",'$matches[1]'";
$auswahl.=")";
$cmd="SELECT DISTINCT k.id,k.block FROM kurse AS k JOIN kurs_jahrgang as kj ON kj.kurs_id=k.id "
." JOIN kurs_beschreibungen AS kb ON kb.id=k.beschr_id WHERE kj.jahrgang IN $auswahl AND kb.wahl_id=".$_SESSION['wahl_id'];
$ergebnis=mysql_query($cmd) or die ("$cmd: ".mysql_error());
$kurse=array();
while($row = mysql_fetch_object($ergebnis)) $kurse[$row->block][]=$row->id;
// Alle IDs der Schueler aus $klasse abfragen
$schueler_ids=array();
$cmd="SELECT user.id FROM user JOIN klassen on user.klassen_id=klassen.id WHERE klassen.name='$klasse'";
$ergebnis=mysql_query($cmd) or die ("$cmd: ".mysql_error());
while($row = mysql_fetch_object($ergebnis)) $schueler_ids[]=$row->id;
if (sizeof($schueler_ids)<=0) {
echo "Keine Schüler in Klasse $klasse.<br>";
return;
}
$values="";
for ($block=1; $block<=$nbloecke; $block++) {
if (!isset($kurse[$block]) || sizeof($kurse[$block])<3) {
echo "Nicht genug wählbare Kurse für Klasse $klasse.<br>";
return;
}
}
foreach ($schueler_ids as $id) {
$weg=array();
for ($block=1; $block<=$nbloecke; $block++) {
$gewaehlt=array_rand($kurse[$block],3);
shuffle($gewaehlt);
for ($wahl=1; $wahl<=3; $wahl++) {
if (!in_array($kurse[$block][$gewaehlt[$wahl-1]],$weg)) {
$values.="($id,".$kurse[$block][$gewaehlt[$wahl-1]].",$wahl),";
$weg[]=$kurse[$block][$gewaehlt[$wahl-1]];
} else {
// Kein Eintrag, da Kurs mit 2 Kürzeln gewählt.
}
}
}
}
$values=substr($values,0,-1);
$cmd="INSERT INTO schueler_wahl (schueler_id,kurs_id,prioritaet) VALUES $values";
if (!($ok=mysql_query($cmd))) if (mysql_errno()==1001) echo "<font color='red'>".mysql_error()."</font><br>"; else die("$cmd: ".mysql_error());
}
check_login();
echo "<a href='wahl_bearbeiten.php'>Zur Wahlbearbeitung</a><br>";
$nbloecke=block_anzahl($_SESSION['wahl_id']);
if (!isset($_POST['klassen'])) {
echo "<font color='red'>Es muss eine oder mehrere Klassen aus der Liste gwählt werden.</font><br>";
include "wahl_bearbeiten.php";
exit;
}
$klassen=$_POST['klassen'];
foreach($klassen as $klasse) {
if (isset($_POST["klassen_loeschen"])) wahlen_loeschen($klasse, $nbloecke);
else {
if (isset($_POST["klassen_simulation"])) zufaellig_setzen($klasse, $nbloecke);
if (isset($_POST["klassen_simulation"]) || isset($_POST["klassen_anzeigen"])) wahlen_anzeigen($klasse, $nbloecke);
}
}
echo "<br><a href='wahl_bearbeiten.php'>Zur Wahlbearbeitung</a><br>";
?>