Basic implementation event signup

This commit is contained in:
2024-05-27 16:59:30 +02:00
parent a66f2d2422
commit a69d83bc0a
321 changed files with 138376 additions and 644 deletions

View File

@ -0,0 +1,45 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
class AjaxRouterController {
function __construct() {
global $_REQUEST;
switch ($_REQUEST['method']) {
case 'kompass_print_participant_summary':
new MemberSummaryController();
break;
case 'print_kitchen_data':
new PrintParticipantListKitchenPdfController();
break;
case 'print_kitchen_allergies_data':
new PrintParticipantListKitchenAllergiesPdfController();
break;
case 'print_signup_data':
new PrintParticipantListSignupPdfController();
break;
case 'print_medical_data':
new PrintParticipantListMedicalPdfController();
break;
case 'print_drink_data':
new PrintParticipantListDrinkingPdfController();
break;
case 'print_drink_alcoholic_data':
new PrintParticipantListDrinkingAlcoholicPdfController();
break;
case 'print_photo_data':
new PrintParticipantListPhotoPdfController();
break;
default:
echo 'No "method" specified.';
}
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class ArchiveEvent {
public function __construct() {
global $_REQUEST, $dbHandler;
$dbHandler->updateRows(MainController::KOMPASS_EVENTS_EVENTS, ['signup_allowed' => false, 'archived' => true], ['id' => $_REQUEST['event-id']]);
kompass_print_message_box(__('Event archived successfully.', BDP_LV_PLUGIN_SLUG));
new ListEventsController();
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class CloseEvent {
public function __construct() {
global $_REQUEST, $dbHandler;
$dbHandler->updateRows(MainController::KOMPASS_EVENTS_EVENTS, ['signup_allowed' => false], ['id' => $_REQUEST['event-id']]);
kompass_print_message_box(__('Event closed for signup', BDP_LV_PLUGIN_SLUG));
new ListEventsController();
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class CreateEvent {
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$use_data = ['event_name', 'startdatum', 'enddatum','max_participants', 'max_volunteers', 'amount_reduced', 'amount_default', 'amount_social', 'contributing_tribes'];
$post_data = [];
foreach ($_POST as $key => $value) {
if (in_array($key, $use_data)) {
$post_data[$key] = $value;
}
};
$post_data['amount_reduced'] = str_replace(',', '.', $_POST['amount_reduced']);
$post_data['amount_default'] = str_replace(',', '.', $_POST['amount_default']);
$post_data['amount_social'] = str_replace(',', '.', $_POST['amount_social']);
$post_data['contributing_tribes'] = str_replace( PHP_EOL, ',', $post_data['contributing_tribes'] );
$new_event_id = $dbHandler->insertRows(
'kompass_veranstaltungen_index',
$post_data,
);
kompass_print_message_box(__('Event created successfull.', BDP_LV_PLUGIN_SLUG));
$pageName = $post_data['event_name'] . ' - ' .__('Registration', BDP_LV_PLUGIN_SLUG);
$page_id = wp_insert_post(array(
'post_title' => $pageName,
'post_content' => '{{event-' . $new_event_id . '}}',
'post_status' => 'publish',
'post_type' => 'page',
));
new ListEventsController();
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class DeleteMemberController {
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$participant = EventParticipant::loadById($_REQUEST['participant-id']);
$dbHandler->deleteFromDb(MainController::KOMPASS_EVENTS_PARTICIPANTS, ['id' => $participant->id]);
kompass_print_message_box(__('The participant was deleted.', BDP_LV_PLUGIN_SLUG));
new ListGroupsAndMembersController($participant->eventId);
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event as Event;
class EditEvent {
public function __construct() {
global $_GET, $_REQUEST, $dbHandler;
kompass_print_event_edit_form($_GET['event-id']);
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class EventGroupMailFormController {
public function __construct() {
global $_REQUEST;
$group = $_REQUEST['group'];
$recipients = [];
foreach (EventParticipant::list_for_event($_REQUEST['event-id']) as $participant) {
if ($participant->teilnahme !== $group) {
continue;
}
$recipient = $participant->vorname . ' <' . strtolower($participant->email_1) . '>';
if (!in_array($recipient, $recipients) && str_contains($participant->email_1, '@')) {
$recipients[] = $recipient;
}
if ('' != $participant->email_2 && str_contains($participant->email_2, '@')) {
$recipient = $participant->vorname . ' <' . strtolower($participant->email_2) . '>';
if (!in_array($recipient, $recipients)) {
$recipients[] = $recipient;
}
}
}
$recipients = array_unique($recipients);
$to = implode(', ', $recipients);
kompass_print_mail_compose($to, "[KoPfiLa '24] - ");
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class EventLocalGroupMailFormController {
public function __construct() {
global $_REQUEST;
$group = $_REQUEST['group'];
$recipients = [];
foreach (EventParticipant::list_for_event($_REQUEST['event-id']) as $participant) {
if ($participant->stamm !== $group) {
continue;
}
$recipient = $participant->vorname . ' <' . strtolower($participant->email_1) . '>';
if (!in_array($recipient, $recipients) && str_contains($participant->email_1, '@')) {
$recipients[] = $recipient;
}
if ('' != $participant->email_2 && str_contains($participant->email_2, '@')) {
$recipient = $participant->vorname . ' <' . strtolower($participant->email_2) . '>';
if (!in_array($recipient, $recipients)) {
$recipients[] = $recipient;
}
}
}
$recipients = array_unique($recipients);
$to = implode(', ', $recipients);
kompass_print_mail_compose($to, "[KoPfiLa '24] - ");
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class EventMailFormController {
public function __construct() {
global $_REQUEST;
$recipients = [];
foreach (EventParticipant::list_for_event($_REQUEST['event-id']) as $participant) {
$recipient = $participant->vorname . ' <' . strtolower($participant->email_1) . '>';
if (!in_array($recipient, $recipients) && str_contains($participant->email_1, '@')) {
$recipients[] = $recipient;
}
if ('' != $participant->email_2 && str_contains($participant->email_2, '@')) {
$recipient = $participant->vorname . ' <' . strtolower($participant->email_2) . '>';
if (!in_array($recipient, $recipients)) {
$recipients[] = $recipient;
}
}
}
$recipients = array_unique($recipients);
$to = implode(', ', $recipients);
kompass_print_mail_compose($to, "[KoPfiLa '24] - ");
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
class ListGroupsAndMembersController {
public function __construct(?int $event_id = null) {
if (!isset($_GET['event-id']) && null === $event_id) {
wp_die('Invalid url given');
}
if (isset($_GET['event-id'])) {
$event_id = $_GET['event-id'];
}
$active_tab = 'tab1';
if (isset($_GET['tab'])) {
$active_tab = $_GET['tab'];
}
$event = Event::loadById($event_id);
$admin_link = admin_url('admin.php?page=kompass-events&action=');
include dirname(__FILE__) . '/../Templates/Partials/admin/tab-control.php';
}
}

View File

@ -0,0 +1,227 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Libs\FileAccess;
use SearchMemberRequest;
class MainController
{
public const KOMPASS_EVENTS_EVENTS = 'kompass_veranstaltungen_index';
public const KOMPASS_EVENTS_GROUPS = 'kompass_veranstaltungen_gruppen';
public const KOMPASS_EVENTS_PARTICIPANTS = 'kompass_veranstaltungen_teilis';
public static function setup()
{
global $wpdb;
$charset = $wpdb->get_charset_collate();
$fileReader = new FileAccess();
foreach ([self::KOMPASS_EVENTS_EVENTS, self::KOMPASS_EVENTS_GROUPS, self::KOMPASS_EVENTS_PARTICIPANTS] as $table) {
$sqlTable = $wpdb->prefix . $table;
$sql = "SHOW TABLES LIKE '$sqlTable'";
$result = $wpdb->get_var( $sql );
if ( $result == $sqlTable ) {
continue;
}
$sqlSetup = str_replace(
'%tablename%',
$sqlTable,
$fileReader->get_contents( WP_PLUGIN_DIR . '/' . BDP_LV_PLUGIN_SLUG . '/lib/database/' . $table . '.sql' ) );
$sqlSetup = str_replace('%charset%', $charset, $sqlSetup);
$sqlSetup = str_replace('%prefix%', $wpdb->prefix, $sqlSetup);
dbDelta( $sqlSetup );
}
}
public function __construct()
{
global $dbHandler;
add_menu_page(
__('Events', BDP_LV_PLUGIN_SLUG),
__('Events', BDP_LV_PLUGIN_SLUG),
'send_mails',
'kompass-events',
[$this, 'router'],
'dashicons-tickets-alt',
3
);
foreach ($dbHandler->readFromDb( self::KOMPASS_EVENTS_EVENTS, ['archived' => false]) as $currentEvent) {
add_submenu_page(
'kompass-events',
$currentEvent->event_name,
$currentEvent->event_name,
'show_groups',
'kompass-events&action=show-event&event-id=' . $currentEvent->id,
[ $this, 'router' ]);
}
add_submenu_page(
'kompass-events',
__('New Event', BDP_LV_PLUGIN_SLUG),
__('New Event', BDP_LV_PLUGIN_SLUG),
'show_groups',
'kompass-events&action=new-event',
[ $this, 'router' ]);
}
public function router()
{
if (isset($_REQUEST['action'])) {
switch ($_REQUEST['action']) {
case 'show-event':
new ListGroupsAndMembersController();
break;
case 'show-participant':
if (isset($_REQUEST['save'])) {
new UpdateMemberDetailsController();
}
new MemberDetailsController();
break;
case 'delete-participant':
new DeleteMemberController();
break;
case 'update-participant-amount':
new UpdateMemberAmountController();
break;
case 'open-event':
new OpenEvent();
break;
case 'close-event':
new CloseEvent();
break;
case 'archive-event':
new ArchiveEvent();
break;
case 'edit-event':
new EditEvent();
break;
case 'update-event':
new UpdateEvent();
break;
case 'new-event':
new NewEvent();
break;
case 'create-event':
new CreateEvent();
break;
case 'kompass_print_participant_mail_form':
new MemberMailFormController();
break;
case 'send-mail-to-all':
new EventMailFormController();
break;
case 'send-mail-to-group':
new EventGroupMailFormController();
break;
case 'send-mail-to-local-group':
new EventLocalGroupMailFormController();
break;
case 'searchmember':
$memberList = SearchMemberRequest::listByName($_POST['member_name']);
new PrintMemberListController($memberList);
break;
case 'create_group_form':
new CreateGroupController();
break;
case 'update-group':
\UpdateGroupAction::execute(['gruppen_name' => $_REQUEST['kompass_groups_group_name']],
(int)$_REQUEST['group_id']);
new PrintGroupsController();
break;
case 'create-group':
$data = ['gruppen_name' => $_REQUEST['kompass_groups_group_name']];
\CreateGroupAction::execute($data);
new PrintGroupsController();
break;
case 'new-member':
new CreateMemberController();
break;
case 'create-member':
$userData = \CreateGroupMemberDataAction::execute($_REQUEST);
if (count($userData['errors']) === 0) {
$memberId = \CreateGroupMemberAction::execute( $userData['data'] );
new PrintMemberController($memberId);
} else {
kompass_print_message_box(implode('<br />', $userData['errors']), 'error');
new CreateMemberController($userData['rawData']);
exit;
}
new PrintGroupsController();
break;
case 'show-members':
$memberList = \ListMemberRequest::listForGroup((int)$_REQUEST['group-id']);
new PrintMemberListController($memberList);
break;
case 'show-member':
new PrintMemberController((int)$_REQUEST['member-id']);
break;
case 'compose-mail':
current_user_can('send_mails');
break;
case 'delete-group':
if (current_user_can('delete_groups')) {
}
break;
case 'edit-group':
if (current_user_can('edit_groups')) {
kompass_edit_group_form($_REQUEST['group-id']);
}
break;
default:
new ListEventsController();
}
} else {
new ListEventsController();
}
}
private function listMembers()
{
}
private function printMembers(array $memberList)
{
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class MemberDetailsController {
public function __construct() {
if (!isset($_GET['participant'])) {
wp_die('Invalid url given');
}
$participant_id = $_GET['participant'];
$participant = EventParticipant::loadById($participant_id);
$admin_link = admin_url('admin.php?page=kompass-events&action=');
include dirname(__FILE__) . '/../Templates/participant-details.php';
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class MemberMailFormController {
public function __construct() {
global $_REQUEST;
$participant = EventParticipant::loadById($_REQUEST['participant-id']);
if ($participant->email_1 === $participant->email_2) {
$participant->email_2 = '';
}
$to = $participant->vorname . ' <' . $participant->email_1 .'>' .
('' !== $participant->email_2 ? ', ' . $participant->vorname . ' <' . $participant->email_2 .'>' : '');
kompass_print_mail_compose($to, "[KoPfiLa '24] - ");
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class MemberSummaryController {
public function __construct() {
global $_REQUEST;
$participant = EventParticipant::loadById($_REQUEST['participant-id']);
include dirname(__FILE__) . '/../Templates/participant-summary.php';
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event as Event;
class NewEvent {
public function __construct() {
kompass_print_event_edit_form();
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class OpenEvent {
public function __construct() {
global $_REQUEST, $dbHandler;
$dbHandler->updateRows(MainController::KOMPASS_EVENTS_EVENTS, ['signup_allowed' => true], ['id' => $_REQUEST['event-id']]);
kompass_print_message_box(__('Event opened for signup', BDP_LV_PLUGIN_SLUG));
new ListEventsController();
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class ListEventsController {
public function __construct() {
kompass_print_events_overview();
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Reqeust\AnwesenheitRequest;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListDrinkingPdfController {
private function get_table_header(string $event_name) : string {
return '<h1>Getränkeliste (alkoholfrei) für ' . $event_name . '</h1><br /><br /><br /><br /><table style="border-spacing: 0; width: 100%;page-break-after: always">' .
'<tr>' .
'<td>Vorname</td>' .
'<td>Nachname</td>' .
'<td>Stamm</td>' .
'<td>Geburtsdatum</td>' .
'<td>Getränke</td>';
}
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$group_name = ['participant' => 'Teili', 'volunteer' => 'Teami', 'other' => 'Sonstige'];
$event = Event::loadById( $_REQUEST['event-id'] );
$output = '';
$i = 0;
foreach ( $event->tribes as $tribe => $participants ) {
if ( count( $participants ) == 0 ) {
continue;
}
foreach ( $participants as $participant ) {
if ( $i == 0 ) {
$output .= $this->get_table_header( $event->event_name );
}
$i ++;
$output .= '<tr style="min-height: 80px; height: 80px; border-style: solid; border-width: 1px;">' .
'<td style="width: 150px; border-style: solid; border-width: 1px;">' . $participant->vorname .
('' != $participant->pfadiname ? '<br /> (' . $participant->pfadiname . ')' : '') . '</td>' .
'<td style="width: 150px; border-style: solid; border-width: 1px;">' . $participant->nachname . '</td>' .
'<td style="padding-right: 100px; border-style: solid; border-width: 1px;">' . $tribe . '</td>' .
'<td style="padding-right: 50px; border-style: solid; border-width: 1px;">' .
\DateTime::createFromFormat( 'Y-m-d', $participant->geburtsdatum )->format( 'd.m.Y' ) . '<br />' .
'(' . $participant->get_age() . ' Jahre)</td>' .
'<td style="padding-right: 150px; border-style: solid; border-width: 1px;"></td></tr>';
if ( $i == 12 ) {
$output .= '</table>';
$i = 0;
}
}
}
$output .= '</table></body></html>';
kompass_create_pdf($output,$event->event_name . ' Anmeldeliste.pdf', 'landscape');
}
}

View File

@ -0,0 +1,67 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Reqeust\AnwesenheitRequest;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListDrinkingAlcoholicPdfController {
private function get_table_header(string $event_name) : string {
return '<h1>Getränkeliste (alkoholisch) für ' . $event_name . '</h1><br /><br /><br /><br /><table style="border-spacing: 0; width: 100%;page-break-after: always">' .
'<tr>' .
'<td>Vorname</td>' .
'<td>Nachname</td>' .
'<td>Stamm</td>' .
'<td>Geburtsdatum</td>' .
'<td>Anzahl Bier</td>' .
'<td>Anzahl Wein</td>';
}
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$group_name = ['participant' => 'Teili', 'volunteer' => 'Teami', 'other' => 'Sonstige'];
$event = Event::loadById( $_REQUEST['event-id'] );
$output = '';
$i = 0;
foreach ( $event->tribes as $tribe => $participants ) {
if ( count( $participants ) == 0 ) {
continue;
}
foreach ( $participants as $participant ) {
if ($participant->get_age() < 16) {
continue;
}
if ( $i == 0 ) {
$output .= $this->get_table_header( $event->event_name );
}
$i ++;
$output .= '<tr style="min-height: 80px; height: 80px; border-style: solid; border-width: 1px;">' .
'<td style="width: 150px; border-style: solid; border-width: 1px;">' . $participant->vorname .
('' != $participant->pfadiname ? '<br /> (' . $participant->pfadiname . ')' : '') . '</td>' .
'<td style="width: 150px; border-style: solid; border-width: 1px;">' . $participant->nachname . '</td>' .
'<td style="padding-right: 100px; border-style: solid; border-width: 1px;">' . $tribe . '</td>' .
'<td style="padding-right: 50px; border-style: solid; border-width: 1px;">' .
\DateTime::createFromFormat( 'Y-m-d', $participant->geburtsdatum )->format( 'd.m.Y' ) . '<br />' .
'(' . $participant->get_age() . ' Jahre)</td>' .
'<td style="padding-right: 150px; border-style: solid; border-width: 1px;"></td>' .
'<td style="padding-right: 150px; border-style: solid; border-width: 1px;"></td></tr>';
if ( $i == 12 ) {
$output .= '</table>';
$i = 0;
}
}
}
$output .= '</table></body></html>';
kompass_create_pdf($output,$event->event_name . ' Anmeldeliste.pdf', 'landscape');
}
}

View File

@ -0,0 +1,63 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Reqeust\AnwesenheitRequest;
use Bdp\Modules\EventParticipants\Reqeust\BathRequest;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListKitchenAllergiesPdfController {
private function get_table_header(string $event_name) : string {
return '<h1>Zusatz zur Küchenliste für ' . $event_name . '</h1><br /><br /><br /><br /><table style="border-spacing: 0; width: 100%;page-break-after: always">' .
'<tr>' .
'<td>Vorname</td>' .
'<td>Nachname</td>' .
'<td>Stamm</td>' .
'<td>Allergien</td>' .
'<td>Essgewohnheit</td>' .
'<td>Anreise</td>' .
'<td>Abreise</td>';
}
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$event = Event::loadById( $_REQUEST['event-id'] );
$output = '';
$i = 0;
foreach ( $event->tribes as $tribe => $participants ) {
if ( count( $participants ) == 0 ) {
continue;
}
foreach ( $participants as $participant ) {
if ($participant->allergien == '') {
continue;
}
if ( $i == 0 ) {
$output .= $this->get_table_header( $event->event_name );
}
$i ++;
$output .= '<tr style="min-height: 80px; height: 80px; border-style: solid; border-width: 1px;">' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $participant->vorname . '<br /><br /></td>' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $participant->nachname . '</td>' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $tribe . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .$participant->allergien . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .$participant->essgewohnheit . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .\DateTime::createFromFormat('Y-m-d', $participant->anreise)->format('d.m.Y') . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .\DateTime::createFromFormat('Y-m-d', $participant->abreise)->format('d.m.Y'). '</td></tr>';
if ( $i == 13 ) {
$output .= '</table>';
$i = 0;
}
}
}
$output .= '</table></body></html>';
kompass_create_pdf($output,$event->event_name . ' Zusatz Küchenliste.pdf', 'landscape');
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListKitchenPdfController {
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$event = Event::loadById($_REQUEST['event-id']);
$participantList = EventParticipant::list_for_event($event->id);
$output = '<html><body><h1>' . $event->event_name . ' - Küchenübersicht</h1><br />';
$startDate = \DateTime::createFromFormat('Y-m-d', $event->startdatum);
$endDate = \DateTime::createFromFormat('Y-m-d', $event->enddatum);
$output.='<br /><br /><table style="border-spacing: 0; width: 100%;">' .
'<tr>' .
'<td rowspan="2" style="text-align: center; font-weight: bold;">Datum</td>' .
'<td style="border-style:solid solid none solid; border-width: 1px; text-align: center; font-weight: bold;" colspan="2">Frühstück</td>' .
'<td style="border-style:solid solid none none; border-width: 1px; text-align: center; font-weight: bold;" colspan="2">Mittag</td>' .
'<td style="border-style:solid solid none none; border-width: 1px; text-align: center; font-weight: bold;" colspan="2">Abend</td></tr><tr>' .
'<td style="border-style:none solid none solid; border-width: 1px; text-align: center; font-weight: bold;">vegetarisch</td>' .
'<td style="border-style:none solid none none; border-width: 1px; text-align: center; font-weight: bold;">vegan</td>' .
'<td style="border-style:none solid none none; border-width: 1px; text-align: center; font-weight: bold;">vegetarisch</td>' .
'<td style="border-style:none solid none none; border-width: 1px; text-align: center; font-weight: bold;">vegan</td>' .
'<td style="border-style:none solid none none; border-width: 1px; text-align: center; font-weight: bold;">vegetarisch</td>' .
'<td style="border-style:none solid none none; border-width: 1px; border-style:none solid none none; border-width: 1px; text-align: center; font-weight: bold;">vegan</td>' .
'</tr>';
for ($curDate = $startDate; $curDate->getTimestamp() <= $endDate->getTimestamp(); $curDate->modify('+1 day')) {
$vegetarischEssen = EatingRequest::send($participantList,'vegetarisch', $curDate);
$veganEssen = EatingRequest::send($participantList,'vegan', $curDate);
$output .= '<tr style="border-width: 1px; border-style: solid; height: 60px;">';
$output .= '<td style="border-width: 1px; border-style: solid;">' . $curDate->format('d.m.Y') . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: solid;">' . $vegetarischEssen['1'] . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: solid;">' . $veganEssen['1'] . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: solid;">' . $vegetarischEssen['2'] . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: solid;">' . $veganEssen['2'] . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: solid;">' . $vegetarischEssen['3'] . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: solid;">' . $veganEssen['3'] . '</td>';
$output .= '</tr>';
}
$output .= '</table></body></html>';
kompass_create_pdf($output,$event->event_name . ' Küchenübersicht.pdf', 'landscape');
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Reqeust\AnwesenheitRequest;
use Bdp\Modules\EventParticipants\Reqeust\BathRequest;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListMedicalPdfController {
private function get_table_header(string $event_name) : string {
return '<h1>Erste-Hilfe-Liste für ' . $event_name . '</h1><br /><br /><br /><br /><table style="border-spacing: 0; width: 100%; page-break-after: always";">' .
'<tr>' .
'<td>Vorname</td>' .
'<td>Nachname</td>' .
'<td>Stamm</td>' .
'<td>Alter</td>' .
'<td>Badeerlaubnis</td>' .
'<td>Allergien</td>' .
'<td>Medikamente</td>' .
'<td>Bemerkungen</td>';
}
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$event = Event::loadById( $_REQUEST['event-id'] );
$output = '';
$i = 0;
foreach ( $event->tribes as $tribe => $participants ) {
if ( count( $participants ) == 0 ) {
continue;
}
foreach ( $participants as $participant ) {
if ( $i == 0 ) {
$output .= $this->get_table_header( $event->event_name );
}
$i ++;
$output .= '<tr style="min-height: 80px; height: 80px; border-style: solid; border-width: 1px;">' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $participant->vorname . '<br /><br /></td>' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $participant->nachname . '</td>' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $tribe . '</td>' .
'<td style="padding-right: 10px; border-style: solid; border-width: 1px;">' . $participant->get_age() . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' . BathRequest::send($participant) . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .$participant->allergien . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .$participant->medikamente . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' .$participant->anmerkungen . '</td></tr>';
if ( $i == 10 ) {
$output .= '</table>';
$i = 0;
}
}
}
$output .= '</table></body></html>';
kompass_create_pdf($output,$event->event_name . ' Saniteam.pdf', 'landscape');
}
}

View File

@ -0,0 +1,60 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListPhotoPdfController {
private function get_table_header(string $event_name) : string {
return '<h1>' . $event_name . ' - Foto-Erlaubnis</h1><br />' .
'<br /><br /><table style="border-spacing: 0; width: 100%;page-break-after: always">' .
'<tr>' .
'<td style="border-style:solid none solid solid; border-width: 1px; text-align: center; font-weight: bold;">Name</td>' .
'<td style="border-style:solid none solid solid; border-width: 1px; text-align: center; font-weight: bold;" >Foto-Erlaubnis Social-Media</td>' .
'<td style="border-style:solid none solid solid; border-width: 1px; text-align: center; font-weight: bold;" >Foto-Erlaubnis Print-Media</td>' .
'<td style="border-style:solid none solid solid; border-width: 1px; text-align: center; font-weight: bold;" >Foto-Erlaubnis Webseite(n)</td>' .
'<td style="border-style:solid none solid solid; border-width: 1px; text-align: center; font-weight: bold;" >Foto-Erlaubnis Partner-Mailings</td>' .
'<td style="border-style:solid solid solid solid; border-width: 1px; text-align: center; font-weight: bold;" >Foto-Erlaubnis Interne Archive</td>' .
'</tr>';
}
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$event = Event::loadById($_REQUEST['event-id']);
$participantList = EventParticipant::list_for_event($event->id);
$output = '<html><body>';
$i = 0;
foreach ($participantList as $participant) {
if ( $i == 0 ) {
$output .= $this->get_table_header( $event->event_name );
}
$i++;
$output .= '<tr style="">';
$output .= '<td style="height: 60px; border-width: 1px; border-style: none solid solid solid;">' . $participant->vorname . ($participant->pfadiname != '' ? ' (' . $participant->pfadiname . ')' : '') . ' ' . $participant->nachname . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: none solid solid none;">' . ($participant->foto_socialmedia == true ? 'X' : '---') . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: none solid solid none;">' . ($participant->foto_print == true ? 'X' : '---') . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: none solid solid none;">' . ($participant->foto_webseite == true ? 'X' : '---') . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: none solid solid none;">' . ($participant->foto_partner == true ? 'X' : '---') . '</td>';
$output .= '<td style="text-align: center; border-width: 1px; border-style: none solid solid none;">' . ($participant->foto_intern == true ? 'X' : '---') . '</td>';
$output .= '</tr>';
if ( $i == 8 ) {
$output .= '</table>';
$i = 0;
}
}
$output .= '</body></html>';
kompass_create_pdf($output,$event->event_name . ' Foto-Erlaubnis.pdf', 'landscape');
}
}

View File

@ -0,0 +1,69 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\Event;
use Bdp\Modules\EventParticipants\Reqeust\AnwesenheitRequest;
use Bdp\Modules\EventParticipants\Reqeust\EatingRequest;
class PrintParticipantListSignupPdfController {
private function get_table_header(string $event_name) : string {
return '<h1>Teili-Liste für ' . $event_name . '</h1><br /><br /><br /><br /><table style="border-spacing: 0; width: 100%;page-break-after: always">' .
'<tr>' .
'<td>Vorname</td>' .
'<td>Nachname</td>' .
'<td>Teili-Gruppe</td>' .
'<td>Stamm</td>' .
'<td>Geburtsdatum</td>' .
'<td>Datum</td>' .
'<td>Tage</td>' .
'<td>Unterschrift</td>';
}
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$group_name = ['participant' => 'Teili', 'volunteer' => 'Teami', 'other' => 'Sonstige'];
$event = Event::loadById( $_REQUEST['event-id'] );
$output = '';
$i = 0;
foreach ( $event->tribes as $tribe => $participants ) {
if ( count( $participants ) == 0 ) {
continue;
}
foreach ( $participants as $participant ) {
if ( $i == 0 ) {
$output .= $this->get_table_header( $event->event_name );
}
$i ++;
$output .= '<tr style="min-height: 80px; height: 80px; border-style: solid; border-width: 1px;">' .
'<td style="width: 150px; border-style: solid; border-width: 1px;">' . $participant->vorname .
('' != $participant->pfadiname ? '<br /> (' . $participant->pfadiname . ')' : '') . '</td>' .
'<td style="width: 150px; border-style: solid; border-width: 1px;">' . $participant->nachname . '</td>' .
'<td style="padding-right: 100px; border-style: solid; border-width: 1px;">' . $group_name[$participant->teilnahme] . '</td>' .
'<td style="padding-right: 100px; border-style: solid; border-width: 1px;">' . $tribe . '</td>' .
'<td style="padding-right: 50px; border-style: solid; border-width: 1px;">' .
\DateTime::createFromFormat( 'Y-m-d', $participant->geburtsdatum )->format( 'd.m.Y' ) . '<br />' .
'(' . $participant->get_age() . ' Jahre)</td>' .
'<td style="padding-right: 50px; border-style: solid; border-width: 1px;">' .
\DateTime::createFromFormat( 'Y-m-d', $participant->anreise )->format( 'd.m.Y' ) . ' - ' .
\DateTime::createFromFormat( 'Y-m-d', $participant->abreise )->format( 'd.m.Y' ) . '</td>' .
'<td style="border-style: solid; border-width: 1px;">' . AnwesenheitRequest::send($participant) . '</td>' .
'<td style="padding-right: 150px; border-style: solid; border-width: 1px;"></td></tr>';
if ( $i == 12 ) {
$output .= '</table>';
$i = 0;
}
}
}
$output .= '</table></body></html>';
kompass_create_pdf($output,$event->event_name . ' Anmeldeliste.pdf', 'landscape');
}
}

View File

@ -0,0 +1,78 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Libs\FileAccess;
use function Bdp\Modules\EventParticipants\Views\registrationForm;
class ParticipationSignupController
{
public static function saveRegistration(array $postedData) : string {
global $dbHandler;
$participation_types = ['other', 'participant', 'volunteer'];
if (isset($postedData['foto']) && is_array($postedData['foto'])) {
foreach ($postedData['foto'] as $fotoData) {
$postedData['foto_' . $fotoData] = true;
}
}
if ($postedData['badeerlaubnis'] == '') {
$postedData['badeerlaubnis'] = 'complete';
}
if (isset($postedData['zusatzbeitrag'])) {
(int)$postedData['beitrag'] += (int)$postedData['zusatzbeitrag'];
unset($postedData['zusatzbeitrag']);
}
unset($postedData['foto']);
unset($postedData['_dsgvo_accept']);
$postedData['teilnahme'] = $participation_types[$postedData['gruppe_id']];
unset($postedData['gruppe_id']);
if (null == $dbHandler->insertRows(MainController::KOMPASS_EVENTS_PARTICIPANTS, $postedData)) {
$errorPage = file_get_contents(dirname(__FILE__) . '/../Templates/Partials/Registration/error.webseite.php');
$errorPage = sprintf($errorPage,
$postedData['vorname']
);
wp_mail('thomas@pfadfinden-halle.de', 'Anmeldung für Pfingstlager fehlerhaft', print_r($postedData, true));
return $errorPage;
}
$successMail = file_get_contents(dirname(__FILE__) . '/../Templates/Partials/Registration/done.email.php');
$successMail = sprintf($successMail,
$postedData['vorname'],
\DateTime::createFromFormat('Y-m-d', $postedData['anreise'])->format('d.m.Y'),
\DateTime::createFromFormat('Y-m-d', $postedData['abreise'])->format('d.m.Y'),
ucfirst($postedData['essgewohnheit'])
);
$successPage = file_get_contents(dirname(__FILE__) . '/../Templates/Partials/Registration/done.webseite.php');
$successPage = sprintf($successPage,
$postedData['vorname'],
\DateTime::createFromFormat('Y-m-d', $postedData['anreise'])->format('d.m.Y'),
\DateTime::createFromFormat('Y-m-d', $postedData['abreise'])->format('d.m.Y'),
ucfirst($postedData['essgewohnheit'])
);
$sent = wp_mail(
$postedData['email_1'],
'Anmeldung zum Pfingstlager 2024 in Taucha',
$successMail,
['Reply-To: thomas@pfadfinden-halle.de', 'Content-Type: text/html; charset=UTF-8']);
if ('' !== $postedData['email_2']) {
$sent = wp_mail(
$postedData['email_2'],
'Anmeldung zum Pfingstlager 2024 in Taucha',
$successMail,
['Reply-To: thomas@pfadfinden-halle.de', 'Content-Type: text/html; charset=UTF-8']);
}
return $successPage;
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Libs\FileAccess;
use function Bdp\Modules\EventParticipants\Views\registrationForm;
class EventSignupPageController
{
public static function print_signup_page($content) : string {
// Der zu ersetzende String
$pattern = '/{{event-(\d+)}}/';
if (preg_match($pattern, $content, $matches)) {
if (isset($_POST['eventId'])) {
$content = preg_replace($pattern, ParticipationSignupController::saveRegistration($_POST), $content);
} else {
$eventId = $matches[1];
$url = str_replace(get_site_url(), '', get_permalink());
$content = preg_replace( $pattern, registrationForm( $eventId, $url ), $content );
}
}
return $content;
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class UpdateEvent {
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$use_data = ['event_name', 'startdatum', 'enddatum','max_participants', 'max_volunteers', 'amount_reduced', 'amount_default', 'amount_social', 'contributing_tribes'];
$post_data = [];
foreach ($_POST as $key => $value) {
if (in_array($key, $use_data)) {
$post_data[$key] = $value;
}
};
$post_data['amount_reduced'] = str_replace(',', '.', $_POST['amount_reduced']);
$post_data['amount_default'] = str_replace(',', '.', $_POST['amount_default']);
$post_data['amount_social'] = str_replace(',', '.', $_POST['amount_social']);
$post_data['contributing_tribes'] = str_replace( PHP_EOL, ',', $post_data['contributing_tribes'] );
$dbHandler->updateRows(
'kompass_veranstaltungen_index',
$post_data,
['id' => $_REQUEST['event-id']]
);
kompass_print_message_box(__('Event data updated successfull.', BDP_LV_PLUGIN_SLUG));
new EditEvent();
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class UpdateMemberAmountController {
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$amount = str_replace(',', '.', $_POST['beitrag_bezahlt']);
$dbHandler->updateRows(
'kompass_veranstaltungen_teilis',
['beitrag_bezahlt' => $amount],
['id' => $_POST['participant-id']]
);
kompass_print_message_box(__('Participation data updated successfull.', BDP_LV_PLUGIN_SLUG));
$participant = EventParticipant::loadById($_REQUEST['participant-id']);
new ListGroupsAndMembersController($participant->eventId);
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace Bdp\Modules\EventParticipants\Controllers;
use Bdp\Modules\EventParticipants\Models\EventGroup;
use Bdp\Modules\EventParticipants\Models\EventParticipant;
class UpdateMemberDetailsController {
public function __construct() {
global $_POST, $_REQUEST, $dbHandler;
$dbHandler->updateRows('kompass_veranstaltungen_teilis', $_POST, ['id' => $_GET['participant']]);
kompass_print_message_box(__('Participation data updated successfull.', BDP_LV_PLUGIN_SLUG));
}
}