survey/admin/old/upload.php
2023-03-14 14:47:50 +01:00

403 lines
15 KiB
PHP

<?php
if(!isset($_SESSION)) { 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 bpm_termine a, bpm_term_kand b
WHERE a.tm_id=b.tm_id
AND a.tm_datum > ADDDATE(now(), -7)
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 bpm_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"];
// http://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 bpm_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: http://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 bpm_kandidat a, bpm_term_kand b, bpm_termine c, bpm_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[26];
$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 + $gemeinsamkeiten_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 bpm_kandidat a, bpm_term_kand b, bpm_termine c, bpm_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[26];
$summe = $satzerg_raw + $gemeinsamkeiten_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 bpm_tanpool
SET aktiv='I'
WHERE tan = '$tan'");
}
$result_ct1 = $db->query("SELECT count(*) Anz
FROM bpm_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 bpm_ergebnisse (ka_id
, tan
, satzerg
, gemeinsamkeiten
, rechenaufgaben
, zahlenreihen
, rechenzeichen
, matrizen
, merkf
, summe
, bestanden)
VALUES ('$row_ct[ka_id]'
, '$tan'
, '$satzerg_raw'
, '$gemeinsamkeiten_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");
?>