| |
| <?php
|
|
|
| function get_parameters_36(): array {
|
| return [
|
| "target_page_slug" => "lesrooster-evenemententeam-2025",
|
| "tablepress_table_id" => 36
|
| ];
|
| }
|
|
|
|
|
|
|
|
|
|
|
| function etb_parse_datum_to_datetime($datum) {
|
| $tz = new DateTimeZone('Europe/Amsterdam');
|
| $s = trim((string)$datum);
|
|
|
| $s = preg_replace(
|
| '/^\s*(?:maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag|zondag|ma|di|wo|do|vr|za|zo)\.?[\s,:-]*/i',
|
| '',
|
| $s
|
| );
|
|
|
| $months = [
|
| 'januari'=>'January','februari'=>'February','maart'=>'March','april'=>'April','mei'=>'May','juni'=>'June',
|
| 'juli'=>'July','augustus'=>'August','september'=>'September','oktober'=>'October','november'=>'November','december'=>'December',
|
| 'jan'=>'January','feb'=>'February','mrt'=>'March','apr'=>'April','jun'=>'June','jul'=>'July','aug'=>'August',
|
| 'sep'=>'September','sept'=>'September','okt'=>'October','nov'=>'November','dec'=>'December'
|
| ];
|
| foreach ($months as $nl => $en) {
|
| $s = preg_replace('/\b' . preg_quote($nl, '/') . '\b/i', $en, $s);
|
| }
|
|
|
| $ts = strtotime($s);
|
| if ($ts !== false && $ts > 0) {
|
| $dt = new DateTime('@' . $ts);
|
| $dt->setTimezone($tz);
|
| return $dt;
|
| }
|
|
|
| $formats = ['d-m-Y','d/m/Y','d F Y','j F Y','d M Y','j M Y','Y-m-d','d-m'];
|
| foreach ($formats as $fmt) {
|
| $d = DateTime::createFromFormat($fmt, $s, $tz);
|
| if ($d !== false) return $d;
|
| }
|
|
|
| if (preg_match('/(\d{1,2})\D+(\d{1,2})(?:\D+(\d{2,4}))?/', $s, $m)) {
|
| $day = intval($m[1]);
|
| $mon = intval($m[2]);
|
| $yr = isset($m[3]) && $m[3] !== '' ? intval($m[3]) : intval(date('Y'));
|
| if ($yr < 100) $yr += 2000;
|
| try {
|
| return new DateTime(sprintf('%04d-%02d-%02d', $yr, $mon, $day), $tz);
|
| } catch (Exception $e) {}
|
| }
|
|
|
| return false;
|
| }
|
|
|
|
|
| add_action('wp_ajax_registreer_lesrooster', function() {
|
| check_ajax_referer('lesrooster_registratie', 'nonce');
|
|
|
| if (!is_user_logged_in()) wp_send_json_error('Niet ingelogd');
|
|
|
| $row_index = intval($_POST['row_index'] ?? -1);
|
| if ($row_index < 1) wp_send_json_error('Ongeldige rij');
|
|
|
| $user = wp_get_current_user();
|
|
|
| $full_name = trim($user->first_name . ' ' . $user->last_name);
|
| if (empty($full_name)) $full_name = $user->display_name;
|
| $username = esc_html($full_name);
|
|
|
| $table_id = get_parameters_36()['tablepress_table_id'];
|
| $table = TablePress::$model_table->load($table_id, true);
|
| if (is_wp_error($table)) wp_send_json_error('Tabel niet gevonden');
|
|
|
| $col_opg = 2;
|
| $row = $table['data'][$row_index] ?? null;
|
| if (!$row) wp_send_json_error('Rij niet gevonden');
|
|
|
| $current = trim($row[$col_opg] ?? '');
|
| $table['data'][$row_index][$col_opg] = $current === '' ? $username : $current . "\n" . $username;
|
| TablePress::$model_table->save($table);
|
|
|
| $datum_raw = strip_tags(trim($row[0] ?? ''));
|
|
|
| $dt = etb_parse_datum_to_datetime($datum_raw);
|
| if (!$dt) wp_send_json_error("Ongeldige datum: $datum_raw");
|
|
|
| $dagen = ['zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'];
|
| $maanden = [1=>'januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december'];
|
| $dagnaam = ucfirst($dagen[(int)$dt->format('w')]);
|
| $volledige_datum = $dagnaam . ' ' . $dt->format('j') . ' ' . $maanden[(int)$dt->format('n')] . ' ' . $dt->format('Y');
|
|
|
| $to = $user->user_email;
|
| $ccs = ['[email protected]','[email protected]'];
|
| $subject = "Bevestiging registratie voor $volledige_datum";
|
|
|
|
|
| $message = "Beste $username,\n\n";
|
| $message .= "Je bent succesvol geregistreerd voor de lesavond op $volledige_datum van 19:30 tot 22:00 uur.\n";
|
| $message .= "Locatie: 't Web, Zuringveld 1, 4847 KS Teteringen.\n\n";
|
| $message .= "📅 Voeg dit evenement toe aan je agenda met het bijgevoegde bestand (dubbelklik op 'lesavond.ics').\n\n";
|
| $message .= "Bedankt voor je aanmelding!\n\n";
|
| $message .= "Met vriendelijke groet,\nLedensecretariaat EHBO Evenemententeam Breda";
|
|
|
|
|
| $upload_dir = wp_upload_dir();
|
| $ics_file = $upload_dir['basedir'] . '/lesavond-' . uniqid() . '.ics';
|
| $event_location = "'t Web, Zuringveld 1, 4847 KS Teteringen";
|
|
|
| $start = clone $dt; $start->setTime(19,30,0);
|
| $end = clone $dt; $end->setTime(22,0,0);
|
|
|
| $ics_content = "BEGIN:VCALENDAR\r\n";
|
| $ics_content .= "VERSION:2.0\r\n";
|
| $ics_content .= "PRODID:-//ETB Evenemententeam Breda//NL\r\n";
|
| $ics_content .= "CALSCALE:GREGORIAN\r\n";
|
| $ics_content .= "BEGIN:VEVENT\r\n";
|
| $ics_content .= "UID:" . uniqid() . "@etb-evenemententeam.nl\r\n";
|
| $ics_content .= "DTSTAMP:" . gmdate('Ymd\THis\Z') . "\r\n";
|
| $ics_content .= "DTSTART;TZID=Europe/Amsterdam:" . $start->format('Ymd\THis') . "\r\n";
|
| $ics_content .= "DTEND;TZID=Europe/Amsterdam:" . $end->format('Ymd\THis') . "\r\n";
|
| $ics_content .= "SUMMARY:Lesavond EHBO\r\n";
|
| $ics_content .= "DESCRIPTION:Lesavond EHBO\r\n";
|
| $ics_content .= "LOCATION:" . addslashes($event_location) . "\r\n";
|
| $ics_content .= "END:VEVENT\r\n";
|
| $ics_content .= "END:VCALENDAR\r\n";
|
|
|
| file_put_contents($ics_file, $ics_content);
|
|
|
| $headers = [
|
| 'Cc: ' . implode(',', $ccs),
|
| 'Content-Type: text/plain; charset=UTF-8'
|
| ];
|
|
|
| wp_mail($to, $subject, $message, $headers, [$ics_file]);
|
|
|
| if(file_exists($ics_file)) @unlink($ics_file);
|
|
|
| wp_send_json_success($table['data'][$row_index][$col_opg]);
|
| });
|
|
|
|
|
| add_action('wp_enqueue_scripts', function() {
|
| $params = get_parameters_36();
|
| if (!is_page($params['target_page_slug'])) return;
|
|
|
| wp_enqueue_script(
|
| 'lesrooster-registratie',
|
| get_stylesheet_directory_uri() . '/js/lesrooster-registratie.js',
|
| ['jquery'],
|
| '1.0',
|
| true
|
| );
|
|
|
| wp_localize_script('lesrooster-registratie', 'lesrooster_ajax', [
|
| 'ajax_url' => admin_url('admin-ajax.php'),
|
| 'nonce' => wp_create_nonce('lesrooster_registratie')
|
| ]);
|
| });
|
|
|
| |
| |
Comments