WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#1 03.11.2020 18:03:38

wb_user82
Member

Kleiner Tipp: mpForm für Veranstaltungsanmeldungen

Hallo allerseits,

folgender Sachverhalt: die Betreiber einer Internetseite führen regelmäßige Veranstaltungen durch, bei denen aufgrund der Corona-Situation eine Voranmeldung mit Kontaktdaten (z.B. Telefonnummer, Adresse) von Nöten ist. Die Anmeldung erfolgt über ein mpForm-Formular, bei dem die Kontaktdaten aufgenommen werden sowie die Veranstaltungen, für die sich die Person anmeldet. In einem gesperrten Bereich (nur für Mitarbeiter) gibt es dann eine Seite, auf der die Anmeldungen für eine Veranstaltung eingesehen und ausgedruckt werden können (für gesetzlich vorgeschriebene Aufbewahrung der Kontakte).

Das habe ich in den letzten Wochen realisiert und möchte den Code mal zur Verfügung stellen in der Hoffnung, dass es dem einen oder anderen für vergleichbare Zwecke nützlich sein mag (natürlich ohne Gewähr).

Was ihr tun müsst:

  1. Erstellt eine mpForm-Seite mit beliebig vielen Feldern (Name, Telefonnummer etc.) aber min. ein Feld für die Veranstaltung als Checkbox. Fügt dort die benötigten Veranstaltungen ein.

  2. Notiert euch die IDs (im Backend auf der entsprechenden Seite zu finden).

  3. Findet die zugehörige Datentabelle im Adminer (meistens in der Form wbce_mod_mpform_results_???)

  4. Erstellt euch eine neue Seite mit einem Code2-Block. Wichtig: Setzt die Zugangsrechte dieser Seite so, dass nur authorisierte Nutzer darauf Zugriff erlangen können.

Alle Stellen, wo ein ToDo auftauchen, müssen angepasst werden, genau so wie die Darstellung der Tabelle.

Dort fügt nach Anpassung folgenden Code ein:

[== PHP ==]
global $database, $wb, $wb_inst;

// Funktion formatiert Namen in der Form 'Zuname, Vorname' - optional
function parseName($name) {
  
  $name = trim($name);
  if (strpos($name, ",") != FALSE) return $name;
  //Für den Fall, dass nur ein Name angegeben wird, wird impliziert, dass dieser Vorname darstellt.
  if (str_word_count($name) == 1) return $name;
  $teile = explode(" ", $name);
  $teileCount = count($teile);
  $nameNeu = $teile[$teileCount-1] . ", ";
  for ($i = 0; $i<$teileCount-1; $i++) {
    $nameNeu = $nameNeu . " " . $teile[$i];
  }
  return ucwords($nameNeu);
}

function databaseQuery() {
  global $database, $wb, $wb_inst;
  	// ToDo: Felder und Tabelle müssen angepasst werden
  	$registrationListQuery = <<<SQL
	SELECT field73 as Name, field75 as Mail, field77 as Event, field78 as Telefon, field79 as Adresse
	From wbce_mod_mpform_results_215
	Order by submission_id;
	SQL;
	return $database->query($registrationListQuery);
}

function printEvent($queryResult, $event) {
	//ToDo: Die Tabelle ggf. an die Felder und die Abfrage anpassen!
	print("<h1>Teilnehmerliste</h1>");
  print('Name: '.$event); 
	print('<p><table border="2" cellpadding="1" cellspacing="1" style="width: 100%;">');
	print('<thead>');
	print('<tr height=40><th>Nr</th><th>Name</th><th>E-Mail</th><th>Telefonnummer</th><th>Adresse</th><th>TN</th></tr>');
	print('</thead>');
	print('<tbody>');
  $nr = 1;
	while ($row = $queryResult->fetchRow()) {
      if (strpos($row[2],$event) !== False) {
  		print('<tr height=40><td>'.$nr.'</td><td>'.parseName($row[0]).'</td>'.'<td>'.str_replace('@', '@&#8203;',$row[1]).'</td>'.'<td>'.$row[3].'</td>'.'<td>'.$row[4].'</td><td></td>');
      $nr++;
      }
	}
    }
	print('</tbody>');
	print('</table></p>');
}

function optionQuery() {
  global $database;
  	$listQuery = <<<SQL
	SELECT value as Options
	From wbce_mod_mpform_fields
	Where field_id = 77; // ToDo: Hier die ID des CheckBox-Feld eintragen, welche die Veranstaltungen enthält, für die man sich anmelden kann.
	SQL;
	return $database->query($listQuery);
}

function getEventList() {
  $queryRequest = optionQuery();
  $eventString = $queryRequest->fetchRow()[0];
  $events = explode(",",$eventString);
  return $events;
}
function getEventNameByNumber($number) {
  $events = getEventList();
  return $events[$number];
}

function printStartPage() {
  print('<h1>Anmeldeverzeichnis</h1>');
  print("<p>Bitte hier die Veranstaltung auswählen, für welche die Teilnehmerliste generiert werden soll. Im Anschluss kann die Liste ausgedruckt werden.:</p>");
  $events = getEventList();
  $eventCount = count($events);
  print('<p><ul>');
  for ($i = 0; $i <= $eventCount-1; $i++) {
    print('<li><a href="?event='.$i.'">'.$events[$i].'</a></li>');
  }
  print('</ul></p>');
}

if (!isset($_GET["event"])) {
  printStartPage();
} else {
  printEvent(databaseQuery(), getEventNameByNumber($_GET["event"]));
}

Danach habt ihr ein simples Tool, womit ihr Anmeldungen unkompliziert verwalten könnt - meiner Meinung nach viel besser als bei manch kommerziellen Anbietern. Ich war selbst überrascht, wie einfach es geht, die Daten von mpForm dafür auszuwerten. Aber mpForm eignet sich sehr gut für solche Zwecke (und ist zudem sicherer als manch selbst zusammengebautes Formular).

Ich hoffe, ich kann damit vielleicht ein wenig behilflich sein. Bei Fragen, fragt gerne.

Offline

Liked by:

ice, berny, jean, hpzaun, mrbaseman

#2 19.11.2020 23:31:58

hpzaun
Member

Re: Kleiner Tipp: mpForm für Veranstaltungsanmeldungen

Hallo wb_user82,
Die Idee und Umsetzung finde ich sehr gut. thumb_up
Ich habe zwei kleine Fragen:
1. Wenn ich nur eine Veranstaltung habe, kann ich die Checkbox-Teile aus dem Formular und Code2-Teil weglassen?
2. Warum hat du mpForm genommen? miniform ist bei WBCE CMS vorinstalliert. Würde es auch damit gehen?

Und eine Anmerkung: Ist aber wahrscheinlich zuviel für eine einfache Umsetzung.
Könnte eine maximale Personenanzahl vorgegeben werden und bei jedem Absenden diese um 1 hochgezählt werden?
Bei Erreichen der Maximal-Anzahl sollte das Formular gesperrt werden(oder Link auf andere Seite)  mit  Sorry voll belegt.
Bin dann ja fast bei einem Buchungs-Tool.

Schöne Grüße
hpzaun

Offline

Board footer

Powered by FluxBB

up