aboutsummaryrefslogtreecommitdiff
path: root/admin-addusers.php
diff options
context:
space:
mode:
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>2026-01-30 17:59:23 +0100
committerFriedrich Beckmann <friedrich.beckmann@gmx.de>2026-01-30 17:59:23 +0100
commitd0fce093ef2f16fc2897baf7ddf93b6f969890bf (patch)
treec39446943c2a36c4bafcaa5e1640d3ea85721a90 /admin-addusers.php
initial commit
The first prototype where you can upload student data from moodle and change the marks. In student view the results for the logged in person can be viewed.
Diffstat (limited to 'admin-addusers.php')
-rw-r--r--admin-addusers.php226
1 files changed, 226 insertions, 0 deletions
diff --git a/admin-addusers.php b/admin-addusers.php
new file mode 100644
index 0000000..880a535
--- /dev/null
+++ b/admin-addusers.php
@@ -0,0 +1,226 @@
+<?php
+include "setup.php";
+my_session_start();
+$login=false;
+if (isset($_SESSION["login"])) {
+ $login = $_SESSION["login"];
+}
+if ($login !== "admin") {
+ header("Location: index.php");
+ exit;
+}
+?>
+<!DOCTYPE html>
+<html>
+<body>
+<h1>Add Users</h1>
+<table>
+<tr>
+<td>
+ <a href="admin-addusers.php">Add students</a>
+</td>
+<td>
+ <a href="admin-show.php">Show students</a>
+</td>
+<td>
+ <a href="logout.php">Logout</a>
+</td>
+</tr>
+</table>
+
+<p> Die Teilnehmer werden aus dem Moodlekurs der Veranstaltung übernommen.
+ Dazu die Teilnehmer als csv exportieren. Die csv Datei
+ dann mit den Angaben zum Kurs und zum Semester hier hochladen. Die
+ csv Datei enthält die Namen, Matrikelnummer und die Gruppen.
+</p>
+
+<?php
+
+if (!empty($_POST["upload"]) and $_POST["upload"] === "upload") {
+ $pfach = $_POST["fach"];
+ $psemester = $_POST["semester"];
+ $newstudents = [];
+ $newgroups = [];
+} else {
+ $pfach = empty($_SESSION["fach"]) ? "" :$_SESSION["fach"];
+ $psemester = empty($_SESSION["semester"]) ? "" :$_SESSION["semester"];
+ $newstudents = empty($_SESSION["newstudents"]) ? [] :$_SESSION["newstudents"];
+ $newgroups = empty($_SESSION["newgroups"]) ? [] :$_SESSION["newgroups"];
+}
+
+unset($_SESSION["newstudents"]);
+unset($_SESSION["newgroups"]);
+unset($_SESSION["fach"]);
+unset($_SESSION["semester"]);
+
+
+// Check if student is in any group. If the student is found
+// return the first groupname, otherwise FALSE
+function is_student_in_any_group($matrikelnummer, $grouplist) {
+ if (empty($grouplist) or empty($matrikelnummer)) {
+ return FALSE;
+ }
+ foreach ($grouplist as $gname => $teilnehmerliste) {
+ if (in_array($matrikelnummer, $teilnehmerliste)) {
+ return $gname;
+ }
+ }
+}
+
+function parseuserfile($fname) {
+ global $pfach,$psemester,$newstudents,$newgroups,$students,$groups;
+ if (($fh = fopen($fname, "r")) !== FALSE) {
+ while (($line = fgetcsv($fh, 1000, ",", "\"", ""))) {
+ $vorname = $line[0];
+ $nachname = $line[1];
+ $matrikelnummer = is_numeric($line[2]) ? $line[2] : "";
+ $student = array (
+ "vorname" => $vorname,
+ "nachname" => $nachname,
+ "noten" => array (
+ $pfach => []
+ )
+ );
+ $newgruppe = "";
+ if (!empty($line[4])) {
+ $gruppen = str_getcsv($line[4],",","\"","");
+ foreach ($gruppen as $gruppe) {
+ if (preg_match("/.*-G[0-9].*/u", $gruppe) or
+ preg_match("/G[0-9].*/u", $gruppe) ) {
+ $newgruppe = trim($gruppe);
+ }
+ }
+ }
+
+ if (empty($newgruppe) or empty($matrikelnummer)) {
+ echo "<p>WARNING: $vorname $nachname has no group or no matrikelnummer.</p>";
+ } elseif (!empty($groups[$psemester][$pfach]) and
+ $gname = is_student_in_any_group($matrikelnummer, $groups[$psemester][$pfach])) {
+ echo "<p>WARNING: $matrikelnummer is already in $gname in database.</p>";
+ } elseif ($gname = is_student_in_any_group($matrikelnummer, $newgroups)) {
+ echo "<p>WARNING: $matrikelnummer is already in $gname in this file</p>";
+ } else {
+ if (empty($students[$matrikelnummer])) {
+ //db_student_new($matrikelnummer,$student);
+ echo "<p>Adding student $matrikelnummer</p>";
+ $newstudents[$matrikelnummer] = $student;
+ } elseif (!array_key_exists($pfach,$students[$matrikelnummer]["noten"])) {
+ echo "<p>Adding $pfach to student $matrikelnummer</p>";
+ $newstudents[$matrikelnummer] = $student;
+ } else {
+ echo "<p>WARNING: student $matrikelnummer is already in database.</p>";
+ }
+ if (empty($groups[$psemester][$pfach][$newgruppe])) {
+ if (empty($newgroups[$newgruppe])) {
+ $newgroups[$newgruppe] = [$matrikelnummer];
+ } elseif (!in_array($matrikelnummer,$newgroups[$newgruppe])) {
+ $newgroups[$newgruppe][] = $matrikelnummer;
+ } else {
+ echo "<p>WARNING: student $matrikelnummer is already in group $newgruppe</p>";
+ }
+ } elseif (!in_array($matrikelnummer,$groups[$psemester][$pfach][$newgruppe])) {
+ echo "<p>ERROR: TODO group $newgruppe without $matrikelnummer already in database but </p>";
+ } else {
+ echo "<p>WARNING: group $newgruppe with $matrikelnummer already in database</p>";
+ }
+ }
+ //echo "<p>",$vorname,$nachname,$matrikelnummer,$newgruppe,"</p>";
+ }
+ ksort($newgroups);
+ $_SESSION["newstudents"] = $newstudents;
+ $_SESSION["newgroups"] = $newgroups;
+ $_SESSION["fach"] = $pfach;
+ $_SESSION["semester"] = $psemester;
+ } else {
+ echo "<p>Error: Could not open file</p>";
+ return FALSE;
+ }
+ return;
+}
+
+echo "<form action=\"admin-addusers.php\" method=\"post\" enctype=\"multipart/form-data\">";
+echo "<label for \"fach\">Fach: </label>";
+echo "<select name=\"fach\">";
+foreach ($pfp as $fach => $value) {
+ echo "<option value=\"$fach\">$fach</option>";
+}
+echo "</select>";
+echo "<select name=\"semester\">";
+foreach ($semester as $semestername) {
+ echo "<option value=\"$semestername\">$semestername</option>";
+}
+echo "</select>";
+echo "<input type=\"file\" name=\"csvfile\" id=\"csvfile\">";
+echo "<input type=\"submit\" name=\"upload\" value=\"upload\">";
+
+if (!empty($_POST["save"]) and $_POST["save"] === "save") {
+ foreach ($newstudents as $matrikelnummer => $student) {
+ if (empty($students[$matrikelnummer])) {
+ db_student_new($matrikelnummer,$student);
+ } elseif (empty($students[$matrikelnummer]["noten"][$pfach])) {
+ db_student_add_fach($matrikelnummer,$pfach);
+ } else {
+ echo "<p>ERROR: $matrikelnummer with $pfach already in database.</p>";
+ }
+ }
+ foreach ($newgroups as $gname => $teilnehmerarray) {
+ db_group_new($psemester,$pfach,$gname,$teilnehmerarray);
+ }
+ $newstudents = [];
+ $newgroups = [];
+ echo "<h1>Saved.</h1>";
+} elseif (!empty($_POST["cancel"]) and $_POST["cancel"] === "cancel") {
+ $newstudents = [];
+ $newgroups = [];
+ echo "<h1>Canceled.</h1>";
+} elseif (!empty($_POST["upload"]) and $_POST["upload"] === "upload") {
+ $fname = $_FILES["csvfile"]["tmp_name"];
+ $ftype = $_FILES["csvfile"]["type"];
+
+ if (!empty($fname)) {
+ if ($ftype !== "text/csv") {
+ echo "<p>ERROR: Filetype must be csv</p>";
+ } else {
+ parseuserfile($fname);
+ }
+ }
+}
+if (!empty($newstudents) or !empty($newgroups)) {
+ echo "<table>";
+ echo "<tr>";
+ echo "<th>Semester</th>";
+ echo "<th>Prüfung</th>";
+ echo "<th>Gruppe</th>";
+ echo "<th>Nachname</th>";
+ echo "<th>Vorname</th>";
+ echo "</tr>";
+ foreach ($newgroups as $gname => $teilnehmera) {
+ foreach ($teilnehmera as $matrikelnummer) {
+ if (!empty($newstudents[$matrikelnummer])) {
+ $vorname = $newstudents[$matrikelnummer]["vorname"];
+ $nachname = $newstudents[$matrikelnummer]["nachname"];
+ } else {
+ $vorname = $students[$matrikelnummer]["vorname"];
+ $nachname = $students[$matrikelnummer]["nachname"];
+ }
+ echo "<tr>";
+ echo "<td>",$psemester,"</td>";
+ echo "<td>",$pfach,"</td>";
+ echo "<td>",$gname,"</td>";
+ echo "<td>",$nachname,"</td>";
+ echo "<td>",$vorname,"</td>";
+ echo "</tr>";
+ }
+ }
+ echo "</table>";
+
+ echo "<input type=\"submit\" name=\"save\" value=\"save\">";
+ echo "<input type=\"submit\" name=\"cancel\" value=\"cancel\">";
+}
+
+echo "</form>";
+
+?>
+
+</body>
+</html> \ No newline at end of file