Checkin
Table of Contents
Aufbau
Das Klassendiagramm beschreibt den Aufbau der Konquadrat-Objekte, die für den Checkin relevant sind. In der Mitte steht das CheckinTpl, das eine Standardimplementierung "Checkin" besitzt.
Ein Checkin hat beliebig viele CheckinRelations unter sich, die auf die Objekte zeigen, welche eingecheckt sind z.B. Teilnehmer oder Begleitpersonen.
Ein Checkin kann mehrere CheckinSubjectRelations unter sich haben, die auf unterschiedliche CheckinSubjects zeigen. Ein CheckinSubject ist quasi das Ziel zu dem man eincheckt z.B. eine Veranstaltung. CheckinSubjects haben an sich keine Funktion. Die Funktion wird erst durch den Checkin definiert.
Das CheckinTpl-Objekt ist nicht die Klasse, welche den Checkin ausführt, sondern lediglich die Konfiguration zu dieser. Das CheckinTpl-ObjectTemplate besitzt bereits eine Methode "getCheckin()", welche eine Instanz vom Typ \com\setasign\Konquadrat\Checkin\AbstractCheckin zurück gibt.
Checkin\AbstractCheckin
Ein CheckinTpl-Objekt besitzt die Property "Classname". In dieser muss der Klassenname von dem AbstractCheckin stehen (der Prefix "com\setasign\Konquadrat\Custom\Checkin\" wird automatisch davor gehangen). Um nun ein AbstractCheckin zu erstellen muss im Unterordner "kon2/classes/Checkin" eine Klasse erstellt werden, welche die abstrakte Klasse erweitert.
Beispiel
Um einen Checkin zu erstellen, kann man über das Checkin Grid (#grid/CheckinTpl) ein neues Objekt erstellen. Für dieses Beispiel reichen die Einträge "Name", "Klassenname" und "Aktiv".
Wie bereits oben erklärt, wird der Klassenname zu "\com\setasign\Konquadrat\Custom\Checkin\Namensschildausgabe" aufgelöst. Die entsprechende Klasse sieht wie folgt aus:
<?php
// File: kon2/classes/Checkin/Namensschildausgabe.php
namespace com\setasign\Konquadrat\Custom\Checkin;
use com\setasign\Konquadrat\Checkin\AbstractCheckin;
use com\setasign\Konquadrat\Object\AbstractObject;
use com\setasign\Konquadrat\Object\Custom\Begleitperson;
use com\setasign\Konquadrat\Object\Custom\Person;
use com\setasign\Konquadrat\Object\Custom\Teilnehmer;
use com\setasign\Konquadrat\Object\Custom\Ticketcode;
use com\setasign\Konquadrat\Object\Undefined;
use com\setasign\SetaFramework\Database\Expression;
use com\setasign\SetaFramework\Exception;
class Namensschildausgabe extends AbstractCheckin
{
public function getTotalCount(): int
{
return $this->objectFinder->getCount(
$this->objectFinder->createSelector()
->setType(Ticketcode::NAME)
);
}
/**
* @param string $code
* @return AbstractObject
* @throws Exception
*/
public function getObjectByCode(string $code): AbstractObject
{
$ticketcode = $this->objectFinder->get(
$this->objectFinder->createSelector()
->setType(Ticketcode::NAME)
->where('Ticketcode', '=', $code)
->limit(1)
);
if ($ticketcode instanceof Undefined) {
throw new Exception($this->getNotFoundMessage($code));
}
return $ticketcode->get('parent');
}
/**
* @param AbstractObject $object
* @return bool
*/
public function isValidObject(AbstractObject $object): bool
{
return ($object instanceof Person);
}
}
Aufgerufen werden kann der Checkin anschließend über #checkin/TestA oder über #checkin/73185. Zusätzlich gibt es noch die Möglichkeit den Checkin direkt mit einem Checkin-Code zu öffnen: #checkin/TestA/123456 (alternativ #checkin/73185/123456)
Templates
Um die Darstellung der Checkin-Maske bzw. dessen Ausgaben flexibel gestalten zu können, kann man in einem Objekt unter dem Punkt "Templates" diverse Templates hinterlegen.
Diese Templates werden als Smarty-Templates ausgewertet.
Folgende eine Übersicht der Variablen und Beispiele, die in den jeweiligen Templates genutzt werden können:
NotFoundTemplate:
- $code
- $checkinObject
- $checkin
Beispiel:
Kein Teilnehmer mit der Teilnehmer-Id "{$code}" gefunden.
SuccessTemplate:
- $object
- $checkinObject
- $backendPath
- $windowId
Beispiel:
Willkommen
<span>
{if $object->Salutation == 'Mr'}Herr{else}Frau{/if} {$object->AcademicDegree}
<span class="name">
<a href="#details/{$object->id}">{$object->FirstName} {$object->LastName}</a>
</span>
</span>
SubcheckinTemplate:
Dieses Template wird genutzt, wenn dieser Checkin als Subcheckin eines anderen genutzt wird.
- $object
- $checkinObject
- $checkedIn
- $backendPath
- $windowId
Beispiel:
Konferenztasche
AlreadyCheckedInTemplate:
- $object
- $checkinRelation
- $checkinObject
- $checkin
- $backendPath
- $windowId
Beispiel:
<div style="color:red;">
{if $object->Salutation == 'Mr'}Herr{else}Frau{/if} {$object->AcademicDegree}
<span class="name">
<a href="#details/{$object->id}">{$object->FirstName|escape} {$object->LastName|escape}</a>
</span>
hat bereits am {$checkinRelation->changeDateTime|date_format: "%d.%m.%Y"} um {$checkinRelation->changeDateTime|date_format: "%H:%M:%S"} eingecheckt.
</div>
