develop #28
212
public/views/createuser.php
Normal file
212
public/views/createuser.php
Normal file
@ -0,0 +1,212 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* View-Template zur Erstellung von Active-Directory-Benutzern.
|
||||
*
|
||||
* Funktionen:
|
||||
* - Formular zum Anlegen eines einzelnen Benutzers (sAMAccountName, Anzeigename, E-Mail, Passwort, OU, Gruppen).
|
||||
* - Formular zum Hochladen einer CSV-Datei zum Anlegen mehrerer Benutzer.
|
||||
* - Vorschau-Textbox, in der die CSV-Datei angezeigt und bearbeitet werden kann, bevor sie abgesendet wird.
|
||||
* - Gibt optionalen Erfolg / Fehler aus.
|
||||
*
|
||||
* Erwartete View-Daten:
|
||||
* - string|null $error Fehlermeldung
|
||||
* - string|null $success Erfolgsmeldung
|
||||
*/
|
||||
|
||||
/**
|
||||
* @var string|null $error
|
||||
* @var string|null $success
|
||||
*/
|
||||
?>
|
||||
|
||||
<div class="d-sm-flex align-items-center justify-content-between mb-4">
|
||||
<h1 class="h3 mb-0 text-gray-800">Benutzer erstellen</h1>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($error)): ?>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<?php echo htmlspecialchars((string)$error, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($success)): ?>
|
||||
<div class="alert alert-success" role="alert">
|
||||
<?php echo htmlspecialchars((string)$success, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<p class="mb-4">Hier können Sie einzelne Active-Directory-Benutzer anlegen oder eine CSV-Datei hochladen, um mehrere Benutzer gleichzeitig zu erstellen. Sie können die CSV in der Vorschau bearbeiten bevor Sie die Erstellung auslösen.</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Einzelner Benutzer</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form method="post" action="/api/create_user.php">
|
||||
<div class="form-group">
|
||||
<label for="samaccountname">Anmeldename (sAMAccountName)</label>
|
||||
<input type="text" class="form-control" id="samaccountname" name="samaccountname" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="displayname">Anzeigename</label>
|
||||
<input type="text" class="form-control" id="displayname" name="displayname">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="mail">E-Mail</label>
|
||||
<input type="email" class="form-control" id="mail" name="mail">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password">Passwort</label>
|
||||
<input type="password" class="form-control" id="password" name="password" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="ou">Organisationseinheit (OU) — optional</label>
|
||||
<input type="text" class="form-control" id="ou" name="ou" placeholder="OU=Users,DC=example,DC=local">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="groups">Gruppen (kommagetrennt, optional)</label>
|
||||
<input type="text" class="form-control" id="groups" name="groups" placeholder="Domain Users,IT-Staff">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Benutzer erstellen</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Mehrere Benutzer via CSV</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="small text-muted">Die CSV-Datei sollte eine Kopfzeile mit folgenden Spalten enthalten: <code>samaccountname,displayname,mail,password,ou,groups</code>. Gruppen können komma-getrennt sein. Nach dem Hochladen erscheint der Inhalt in der Vorschau, dort kann er vor dem Absenden editiert werden.</p>
|
||||
|
||||
<form id="csvUploadForm" method="post" action="/api/create_users_csv.php" enctype="multipart/form-data">
|
||||
<div class="form-group">
|
||||
<label for="csvfile">CSV-Datei</label>
|
||||
<input type="file" class="form-control-file" id="csvfile" name="csvfile" accept=".csv">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="csvdelimiter">Trennzeichen</label>
|
||||
<select class="form-control" id="csvdelimiter" name="csvdelimiter">
|
||||
<option value="," selected>Komma (,)</option>
|
||||
<option value=";">Semikolon (;)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="hasHeader">Kopfzeile vorhanden?</label>
|
||||
<select class="form-control" id="hasHeader" name="hasHeader">
|
||||
<option value="1" selected>Ja</option>
|
||||
<option value="0">Nein</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="csvpreview">CSV-Vorschau (editierbar)</label>
|
||||
<textarea id="csvpreview" name="csvcontent" rows="12" class="form-control" placeholder="CSV-Inhalt wird hier angezeigt, nachdem Sie eine Datei ausgewählt haben. Sie können den Text bearbeiten, bevor Sie ihn absenden."></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group d-flex gap-2">
|
||||
<button type="button" id="loadPreviewBtn" class="btn btn-secondary">In Vorschau laden</button>
|
||||
<button type="submit" class="btn btn-primary">CSV verarbeiten</button>
|
||||
<button type="button" id="clearPreviewBtn" class="btn btn-light">Vorschau löschen</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<small class="form-text text-muted mt-2">Tipp: Wenn Sie die CSV im Textfeld bearbeiten, wird der bearbeitete Text an den Server gesendet.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-secondary">Hinweise</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<ul>
|
||||
<li>Die tatsächliche Erstellung von AD-Benutzern wird serverseitig durchgeführt. Diese View sendet Daten an die Endpunkte <code>/api/create_user.php</code> und <code>/api/create_users_csv.php</code>.</li>
|
||||
<li>Stellen Sie sicher, dass der Webserver die nötigen Rechte hat und die LDAP/AD-Verbindung korrekt konfiguriert ist.</li>
|
||||
<li>Für Sicherheit: prüfen Sie bitte CSRF-Schutz und Validierung auf der Serverseite.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
const fileInput = document.getElementById('csvfile');
|
||||
const preview = document.getElementById('csvpreview');
|
||||
const loadBtn = document.getElementById('loadPreviewBtn');
|
||||
const clearBtn = document.getElementById('clearPreviewBtn');
|
||||
const form = document.getElementById('csvUploadForm');
|
||||
|
||||
function readFileToPreview(file) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
preview.value = e.target.result || '';
|
||||
};
|
||||
reader.onerror = function () {
|
||||
alert('Fehler beim Lesen der Datei.');
|
||||
};
|
||||
reader.readAsText(file, 'utf-8');
|
||||
}
|
||||
|
||||
if (loadBtn) {
|
||||
loadBtn.addEventListener('click', function () {
|
||||
const file = fileInput.files && fileInput.files[0];
|
||||
if (!file) {
|
||||
// Wenn keine Datei ausgewählt ist, laden wir nichts, behalten aber vorhandenen Text.
|
||||
alert('Bitte wählen Sie zuerst eine CSV-Datei aus oder fügen Sie CSV-Text direkt in das Feld ein.');
|
||||
return;
|
||||
}
|
||||
readFileToPreview(file);
|
||||
});
|
||||
}
|
||||
|
||||
if (clearBtn) {
|
||||
clearBtn.addEventListener('click', function () {
|
||||
preview.value = '';
|
||||
fileInput.value = '';
|
||||
});
|
||||
}
|
||||
|
||||
// Falls der Benutzer direkt die Datei auswählt, füllen wir die Vorschau automatisch.
|
||||
if (fileInput) {
|
||||
fileInput.addEventListener('change', function () {
|
||||
const file = fileInput.files && fileInput.files[0];
|
||||
if (file) {
|
||||
readFileToPreview(file);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Optional: Intercept submit to ensure csvcontent is present when no file is uploaded.
|
||||
form.addEventListener('submit', function (e) {
|
||||
// If no file was sent, ensure csvcontent isn't empty.
|
||||
const file = fileInput.files && fileInput.files[0];
|
||||
if (!file && preview.value.trim() === '') {
|
||||
e.preventDefault();
|
||||
alert('Die CSV-Vorschau ist leer. Bitte wählen Sie eine Datei oder fügen Sie CSV-Inhalt ein.');
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<?php // Ende der View ?>
|
||||
Loading…
Reference in New Issue
Block a user