dvm/admin/upload.php

403 lines
15 KiB
PHP
Executable File

<?php
session_start();
include_once '../classes/TestProjektSmarty.class_subdir.php';
require_once("../config.inc.php");
$templatename = substr(basename($_SERVER['PHP_SELF']), 0, -3) . "html";
$smarty = new SmartyAdmin();
require_once("../language/german.inc.php");
require_once("../func_get_parameter.php");
require_once("../config/func_cryption.php");
if (isset($_GET['action'])) {
$action = $_GET['action'];
} else {
$action = '';
}
#########Konfiguration#######################################
$verz = "upload_csv/"; // relatives Uploadverzeichnis (relativ zum 'Standort' dieser Datei, wohin die Dateien kopiert werden sollen
$trennzeichen_excel = "\t"; // Das Trennzeichen das Excel f&uuml;r CVS-Dateien nimmt ist je nach Excelversion unterschiedlich:
// Entweder $trennzeichen_excel = ";"; --> Semikolon
// oder $trennzeichen_excel = ","; --> Komma
#############################################################
$_SESSION["ck_verz"] = $verz;
if ($action == '') {
$german = $db->query("SET lc_time_names = 'de_DE';");
$query1 = "SELECT a.tm_id, date_format(tm_datum, '%a, %d.%m.%Y - %H:%i Uhr')tm_datum_form, tm_standort
FROM dvm_termine a, dvm_term_kand b
WHERE a.tm_id=b.tm_id
AND a.tm_datum > ADDDATE(now(), -21)
GROUP BY a.tm_id, tm_datum_form, tm_standort
ORDER BY tm_datum ASC";
$result1 = $db->query($query1) or die("Cannot execute query1");
while ($row1 = $result1->fetch_array()) {
if ($row1['tm_standort'] == 'L') {
$standort = 'Ludwigsburg';
}
if ($row1['tm_standort'] == 'K') {
$standort = 'Kehl';
}
$row1['tm_standort'] = $standort;
$table_data1[] = $row1;
}
$smarty->assign('table_data1', $table_data1);
}
if ($action == 'upload') {
# Den Testtermin wählt man, damit jede Hochschule seine eigenen Daten importieren kann. Wenn eine Hochschule am selben TAg einen Test hat vermeidet man dass ein halbfertiger Test importiert wird
if (isset($_POST["testtermin"])) {
$testtermin = $_POST["testtermin"];
} else {
$testtermin = $_SESSION["testtermin"];
}
$_SESSION["testtermin"] = $testtermin;
# Uploadverzeichnis aufräumen. Temporäre Dateien, die älter als 2 Wochen sind, werden gelöscht
$dir = $_SERVER["DOCUMENT_ROOT"].dirname($_SERVER['PHP_SELF'])."/$verz";
$folder = dir($dir);
while ($dateiname = $folder->read()) {
if (filetype($dir.$dateiname) != "dir") {
if (strtotime("-2 weeks") >
@filemtime($dir.$dateiname)) {
if (@unlink($dir.$dateiname) != false){
# echo $dateiname.' wurde gelöscht<br>';
}else{
# echo $dateiname.' konnte nichtgelöscht werden<br>';
}
}
}
}
# Fehler beim Upload anzeigen
if (isset($_GET['error'])) {
$errorno = $_GET['error'];
$smarty->assign('index_error', 1);
if ($errorno == 1) {
$smarty->assign('index_error_text', "Es dürfen nur CSV Dateien hochgeladen werden.");
}
if ($errorno == 2) {
# Tabelle dvm_parameter
$size_mb = trim(get_parameter(12));
$smarty->assign('index_error_text', "Die Datei ist zu groß. Die Dateigröße darf max. $size_mb MB betragen.");
}
if ($errorno == 3) {
$smarty->assign('index_error_text', "Vorgang wurde abgebrochen. Die Datei wurde vom Server gelöscht");
}
if ($errorno == 4) {
$smarty->assign('index_error_text', "Vorgang wurde abgebrochen. Die Datei wurde nicht vom Server gelöscht");
}
}
}
if ($action == 'csvimp') {
$testtermin = $_SESSION["testtermin"];
// https://www.tutorials.de/tutorials65420.html
#echo '<pre>', print_r($_POST, true), '</pre>';
$tempname = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];
$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];
$einheit = "Byte"; // F&uuml;r die Efolgsmeldung.
$limitedext = array(
".csv"
); //Erlaubte Dateieindung beim Upload
$extlimit = "yes"; //Do you want to limit the extensions of files uploaded
$ext = strrchr($name, '.');
if (($extlimit == "yes") && (!in_array($ext, $limitedext))) {
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=upload&error=1\">";
exit;
}
# Tabelle dvm_parameter
$size_mb = trim(get_parameter(12));
$size_bt = $size_mb * 1024 * 1024;
if ($size > $size_bt) {
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=upload&error=2\">";
exit;
}
$name = str_replace(array(
"&auml;",
"&ouml;",
"&uuml;",
"&szlig;",
"&Auml;",
"&Ouml;",
"&Uuml;",
" "
), array(
"ae",
"oe",
"ue",
"ss",
"Ae",
"Oe",
"Ue",
"_"
), $name);
$heute = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); // heutiges Datum & Zeit: https://de2.php.net/manual/de/function.date.php
$heuteformat = date("H-i-s_Y-m-d", $heute); // Formatierung, wie es vor dem Dateinamen erscheinen soll
$datum_db = date("Y-m-d H:i:s", $heute); // Formatierung, wie es vor dem Dateinamen erscheinen soll
$neu = $heuteformat . "_" . $name;
$_SESSION["ck_neu"] = $neu;
move_uploaded_file("$tempname", "$verz$neu"); // Unterverzeichnisse wie folgt: copy("$tempname", "pdf/$neu");
$handle = fopen("$verz$neu", "r"); // Datei zum Lesen &ouml;ffnen
# Bestehnswert 65 Punkte
$bestehenswert = trim(get_parameter(11));
# Hier vor der Schleife erste Zeile holen und ignorieren. Enthält Überschrift
fgetcsv($handle, 0, $trennzeichen_excel);
while (($data = fgetcsv($handle, 0, $trennzeichen_excel)) !== FALSE) { // Daten werden aus der Datei in ein Array $data gelesen
#2020-02-23T17:44:56
$tag = substr($data[11], 8, 2);
$monat = substr($data[11], 5, 2);
$jahr = substr($data[11], 0, 4);
$std = substr($data[11], 11, 2);
$min = substr($data[11], 14, 2);
$sek = substr($data[11], 17, 2);
$datum = "$tag.$monat.$jahr - $std:$min:$sek";
$datum_db = "$jahr-$monat-$tag";
$tan = $data[7];
$result_ct = $db->query("SELECT concat(vorname,' ', nachname) name, date_format(tm_datum, '%Y-%m-%d') tm_datum
FROM dvm_kandidat a, dvm_term_kand b, dvm_termine c, dvm_tanpool d
WHERE a.ka_id = b.ka_id
AND b.tm_id = c.tm_id
AND b.tp_id = d.tp_id
AND d.tan = '$tan'
AND c.tm_id = $testtermin");
$row_ct = $result_ct->fetch_array();
if ($row_ct['name'] != '' AND $row_ct['tm_datum'] == $datum_db) {
$satzerg_raw = $data[13];
$analogie_raw = $data[14];
#$gemeinsamkeiten_raw = $data[15];
$rechenaufgaben_raw = $data[16];
$zahlenreihen_raw = $data[17];
$rechenzeichen_raw = $data[18];
$matrizen_raw = $data[21];
$merkf_raw = $data[27];
$row1['tan'] = $tan;
$row1['name'] = $row_ct['name'];
$row1['datum'] = $datum;
$row1['satzerg_raw'] = $satzerg_raw;
$row1['analogie_raw'] = $analogie_raw;
#$row1['gemeinsamkeiten_raw'] = $gemeinsamkeiten_raw;
$row1['rechenaufgaben_raw'] = $rechenaufgaben_raw;
$row1['zahlenreihen_raw'] = $zahlenreihen_raw;
$row1['rechenzeichen_raw'] = $rechenzeichen_raw;
$row1['matrizen_raw'] = $matrizen_raw;
$row1['merkf_raw'] = $merkf_raw;
# In die Berechnung fliest verb/num Intelligenz nicht mit ein. Das sind interne Berechnungen und keine Testaufgaben
$summe = $satzerg_raw + $analogie_raw + $rechenaufgaben_raw + $zahlenreihen_raw + $rechenzeichen_raw + $matrizen_raw + $merkf_raw;
$row1['summe'] = $summe;
if ($summe >= $bestehenswert) {
$bestanden = 1;
} else {
$bestanden = 0;
}
$row1['bestanden'] = $bestanden;
$table_data1[] = $row1;
}
}
$smarty->assign('table_data1', $table_data1);
fclose($handle);
}
if ($action == 'csvimp2') {
$neu = $_SESSION["ck_neu"]; //CSV-Dateinamen um Datei l&ouml;schen zu k&ouml;nnen
$verz = $_SESSION["ck_verz"]; //Uploadverzeichnis aus Cookie holen
$testtermin = $_SESSION["testtermin"];
if ($_POST['import'] == "0") // DS sollen nicht importiert werden
{
$dateiname = "$verz$neu";
if (@unlink($dateiname)) // Funktion l&ouml;scht Dateien und gibt true / false zur&uuml;ck
{
# Abbruch, datei gelöscht
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=upload&error=3\">";
exit;
} else {
# Abbruch, datei nicht gelöscht
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=upload&error=4\">";
exit;
} // End if
} elseif ($_POST['import'] == "1") // DS sollen importiert werden
{
$handle = fopen("$verz$neu", "r"); // Datei zum Lesen &ouml;ffnen
# Bestehnswert 65 Punkte
$bestehenswert = trim(get_parameter(11));
# Hier vor der Schleife erste Zeile holen und ignorieren. Enthält Überschrift
fgetcsv($handle, 0, $trennzeichen_excel);
while (($data = fgetcsv($handle, 0, $trennzeichen_excel)) !== FALSE) { // Daten werden aus der Datei in ein Array $data gelesen
#2020-02-23T17:44:56
$tag = substr($data[11], 8, 2);
$monat = substr($data[11], 5, 2);
$jahr = substr($data[11], 0, 4);
$std = substr($data[11], 11, 2);
$min = substr($data[11], 14, 2);
$sek = substr($data[11], 17, 2);
$datum = "$tag.$monat.$jahr - $std:$min:$sek";
$datum_db = "$jahr-$monat-$tag";
$tan = $data[7];
$result_ct = $db->query("SELECT a.ka_id, concat(vorname,' ', nachname) name, date_format(tm_datum, '%Y-%m-%d') tm_datum
FROM dvm_kandidat a, dvm_term_kand b, dvm_termine c, dvm_tanpool d
WHERE a.ka_id = b.ka_id
AND b.tm_id = c.tm_id
AND b.tp_id = d.tp_id
AND d.tan = '$tan'
AND c.tm_id = $testtermin");
$row_ct = $result_ct->fetch_array();
if ($row_ct['name'] != '' AND $row_ct['tm_datum'] == $datum_db) {
$satzerg_raw = $data[13];
$analogie_raw = $data[14];
#$gemeinsamkeiten_raw = $data[15];
$rechenaufgaben_raw = $data[16];
$zahlenreihen_raw = $data[17];
$rechenzeichen_raw = $data[18];
$matrizen_raw = $data[21];
$merkf_raw = $data[27];
$summe = $satzerg_raw + $analogie_raw + $rechenaufgaben_raw + $zahlenreihen_raw + $rechenzeichen_raw + $matrizen_raw + $merkf_raw;
if ($summe >= $bestehenswert) {
$bestanden = 1;
} else {
$bestanden = 0;
# Tan Inaktiv setzen
$result_1 = $db->query("UPDATE dvm_tanpool
SET aktiv='I'
WHERE tan = '$tan'");
}
$result_ct1 = $db->query("SELECT count(*) Anz
FROM dvm_ergebnisse
WHERE ka_id = $row_ct[ka_id]
AND tan = '$tan'");
$row_ct1 = $result_ct1->fetch_array();
if ($row_ct1['Anz'] == 0) {
# keine Ergebnisse vorhanden, insert
$sql1 = $db->query("insert into dvm_ergebnisse (ka_id
, tan
, satzerg
, analogie
, rechenaufgaben
, zahlenreihen
, rechenzeichen
, matrizen
, merkf
, summe
, bestanden)
VALUES ('$row_ct[ka_id]'
, '$tan'
, '$satzerg_raw'
, '$analogie_raw'
, '$rechenaufgaben_raw'
, '$zahlenreihen_raw'
, '$rechenzeichen_raw'
, '$matrizen_raw'
, '$merkf_raw'
, '$summe'
, '$bestanden')");
if (!$sql1) {
$hinweis['hinweis'] = "TAN: " . $tan . " Fehler: Ergebnis nicht gespeichert<br>";
$smarty->assign('index_error', 1);
}
} else {
# Ergebnisse gibt es schon, kein insert
$hinweis['hinweis'] = "TAN: " . $tan . " Ergebnisse schon gespeichert<br>";
$smarty->assign('index_error', 1);
}
} else {
# Testdatum stimmt nicht, kein Student gefunden
$hinweis['hinweis'] = "TAN: " . $tan . " in der CSV gehört nicht zu diesem Datum (Kein Fehler)<br>";
$smarty->assign('index_error', 1);
}
$table_data2[] = $hinweis;
}
$smarty->assign('table_data2', $table_data2);
fclose($handle);
} else { // Es wurde kein Radiobutton gew&auml;hlt! Technisch aber ausgeschlossen
echo "sie m&uuml;ssen eine Auswahl treffen";
}
function deleteFiles($verz)
{
$handle = opendir($verz);
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
$datei = $verz . $file;
if (@unlink($datei)) {
$error = TRUE;
} else {
$error = FALSE;
}
}
}
closedir($handle);
return $error;
}
deleteFiles($verz); // Dateien werden im Uploadverzeichnis gel&ouml;scht, falls noch welche darin w&auml;ren
} // ende Action
$smarty->assign('action', "$action");
$smarty->display("$template/admin/$templatename");
?>