function eme_registration_seats_form_table($pending = 0) { global $plugin_page; $scope_names = array(); $scope_names['past'] = __('Past events', 'eme'); $scope_names['all'] = __('All events', 'eme'); $scope_names['future'] = __('Future events', 'eme'); $event_id = isset($_POST['event_id']) ? intval($_POST['event_id']) : 0; $scope = isset($_POST['scope']) ? $_POST['scope'] : 'future'; if (isset($_GET['search'])) { $scope = "all"; $search = "[person_id=" . intval($_GET['search']) . "]"; } $all_events = eme_get_events(0, $scope); ?> <div class="wrap"> <div id="icon-events" class="icon32"><br /> </div> <h2><?php _e('Add a registration for an event', 'eme'); ?> </h2> <div class="wrap"> <br /> <?php admin_show_warnings(); ?> <form id='add-booking' name='add-booking' action="" method="post"> <input type='hidden' name='eme_admin_action' value='newRegistration' /> <table class="widefat"> <tbody> <tr><th scope='row'><?php _e('Event', 'eme'); ?> :</th><td> <select name="event_id"> <?php foreach ($all_events as $event) { if ($event['event_rsvp']) { $option_text = $event['event_name'] . " (" . eme_localised_date($event['event_start_date']) . ")"; echo "<option value='" . $event['event_id'] . "' >" . $option_text . "</option> "; } } ?> </select> </td> </tr> </tbody> </table> <input type="submit" class="button-primary action" value="<?php _e('Register new booking', 'eme'); ?> " /> </form> <br /> </div> <div class="clear"></div> <h2><?php if ($pending) { _e('Pending Approvals', 'eme'); } else { _e('Change reserved spaces or cancel registrations', 'eme'); } ?> </h2> <div class="wrap"> <br /> <div class="tablenav"> <div class="alignleft"> <form id="eme-admin-regsearchform" name="eme-admin-regsearchform" action="<?php echo admin_url("admin.php?page={$plugin_page}"); ?> " method="post"> <select name="scope"> <?php foreach ($scope_names as $key => $value) { $selected = ""; if ($key == $scope) { $selected = "selected='selected'"; } echo "<option value='{$key}' {$selected}>{$value}</option> "; } ?> </select> <select name="event_id"> <option value='0'><?php _e('All events'); ?> </option> <?php $events_with_bookings = array(); foreach ($all_events as $event) { $selected = ""; if ($event_id && $event['event_id'] == $event_id) { $selected = "selected='selected'"; } if ($pending && eme_get_pending_bookings($event['event_id']) > 0) { $events_with_bookings[] = $event['event_id']; echo "<option value='" . $event['event_id'] . "' {$selected}>" . $event['event_name'] . "</option> "; } elseif (eme_get_approved_seats($event['event_id']) > 0) { $events_with_bookings[] = $event['event_id']; echo "<option value='" . $event['event_id'] . "' {$selected}>" . $event['event_name'] . "</option> "; } } ?> </select> <input class="button-secondary" type="submit" value="<?php _e('Filter'); ?> " /> </form> </div> <br /> <br /> <form id="eme-admin-regform" name="eme-admin-regform" action="" method="post"> <select name="eme_admin_action"> <option value="-1" selected="selected"><?php _e('Bulk Actions'); ?> </option> <?php if ($pending) { ?> <option value="approveRegistration"><?php _e('Approve registration', 'eme'); ?> </option> <?php } ?> <option value="updatePayedStatus"><?php _e('Update payed status', 'eme'); ?> </option> <option value="denyRegistration"><?php _e('Deny registration', 'eme'); ?> </option> </select> <input type="submit" class="button-secondary" value="<?php _e('Apply'); ?> " /> <div class="clear"><p> <?php _e('Send mails to attendees upon changes being made?', 'eme'); echo eme_ui_select_binary(1, "send_mail"); ?> </p></div> <?php if ($pending) { $booking_status = 1; // different table id for pending bookings, so the save-state from datatables doesn't interfere with the one from non-pending $table_id = "eme_pending_admin_bookings"; } else { $booking_status = 2; $table_id = "eme_admin_bookings"; } if ($event_id) { $bookings = eme_get_bookings_for($event_id, $booking_status); } else { $bookings = eme_get_bookings_for($events_with_bookings, $booking_status); } if (!empty($bookings)) { ?> <table class="widefat hover stripe" id="<?php print "{$table_id}"; ?> "> <thead> <tr> <th class='manage-column column-cb check-column' scope='col'><input class='select-all' type="checkbox" value='1' /></th> <th>hidden for person id search</th> <th><?php _e('ID', 'eme'); ?> </th> <th><?php _e('Name', 'eme'); ?> </th> <th><?php _e('Date and time', 'eme'); ?> </th> <th><?php _e('Booker', 'eme'); ?> </th> <th><?php _e('Booking date', 'eme'); ?> </th> <th><?php _e('Seats', 'eme'); ?> </th> <th><?php _e('Event price', 'eme'); ?> </th> <th><?php _e('Total price', 'eme'); ?> </th> <th><?php _e('Unique nbr', 'eme'); ?> </th> <th><?php _e('Paid', 'eme'); ?> </th> </tr> </thead> <tbody> <?php $search_dest = admin_url("admin.php?page=eme-people"); foreach ($bookings as $event_booking) { $person = eme_get_person($event_booking['person_id']); $search_url = add_query_arg(array('search' => $person['person_id']), $search_dest); $event = eme_get_event($event_booking['event_id']); $payment_id = eme_get_booking_payment_id($event_booking['booking_id']); $localised_start_date = eme_localised_date($event['event_start_date']); $localised_start_time = eme_localised_time($event['event_start_time']); $localised_end_date = eme_localised_date($event['event_end_date']); $localised_end_time = eme_localised_time($event['event_end_time']); $localised_booking_date = eme_localised_date($event_booking['creation_date']); $localised_booking_time = eme_localised_time($event_booking['creation_date']); $startstring = strtotime($event['event_start_date'] . " " . $event['event_start_time']); $bookingtimestamp = strtotime($event_booking['creation_date']); $style = ""; $today = date("Y-m-d"); if ($event['event_start_date'] < $today) { $style = "style ='background-color: #FADDB7;'"; } ?> <tr <?php echo "{$style}"; ?> > <td><input type='checkbox' class='row-selector' value='<?php echo $event_booking['booking_id']; ?> ' name='selected_bookings[]' /> <input type='hidden' class='row-selector' value='<?php echo $event_booking['booking_id']; ?> ' name='bookings[]' /></td> <td>[person_id=<?php echo $person['person_id']; ?> ]</td> <td><a class="row-title" href="<?php echo admin_url("admin.php?page={$plugin_page}&eme_admin_action=editRegistration&booking_id=" . $event_booking['booking_id']); ?> " title="<?php _e('Click the booking ID in order to see and/or edit the details of the booking.', 'eme'); ?> "><?php echo $event_booking['booking_id']; ?> </a> <td><strong> <a class="row-title" href="<?php echo admin_url("admin.php?page=events-manager&eme_admin_action=edit_event&event_id=" . $event_booking['event_id']); ?> " title="<?php _e('Click the event name in order to see and/or edit the details of the event.', 'eme'); ?> "><?php echo eme_trans_sanitize_html($event['event_name']); ?> </a> </strong> <?php $approved_seats = eme_get_approved_seats($event['event_id']); $pending_seats = eme_get_pending_seats($event['event_id']); $total_seats = $event['event_seats']; echo "<br />" . __('Approved: ', 'eme') . $approved_seats . ", " . __('Pending: ', 'eme') . $pending_seats . ", " . __('Max: ', 'eme') . $total_seats; if ($approved_seats > 0) { $printable_address = admin_url("admin.php?page=eme-people&eme_admin_action=booking_printable&event_id=" . $event['event_id']); $csv_address = admin_url("admin.php?page=eme-people&eme_admin_action=booking_csv&event_id=" . $event['event_id']); echo " (<a id='booking_printable_" . $event['event_id'] . "' target='' href='{$printable_address}'>" . __('Printable view', 'eme') . "</a>)"; echo " (<a id='booking_csv_" . $event['event_id'] . "' target='' href='{$csv_address}'>" . __('CSV export', 'eme') . "</a>)"; } ?> </td> <td data-sort="<?php echo $startstring; ?> "> <?php echo $localised_start_date; if ($localised_end_date != '' && $localised_end_date != $localised_start_date) { echo " - " . $localised_end_date; } ?> <br /> <?php echo "{$localised_start_time} - {$localised_end_time}"; ?> </td> <td><a href="<?php echo $search_url; ?> " title="<?php _e('Click the name of the booker in order to see and/or edit the details of the booker.', 'eme'); ?> "><?php echo eme_sanitize_html($person['lastname']) . "(" . eme_sanitize_html($person['phone']) . ", " . eme_sanitize_html($person['email']) . ")"; ?> </a> </td> <td data-sort="<?php echo $bookingtimestamp; ?> "> <?php echo $localised_booking_date . " " . $localised_booking_time; ?> </td> <?php if (eme_is_multi(eme_get_booking_price($event, $event_booking))) { ?> <td> <?php echo $event_booking['booking_seats_mp'] . '<br />' . __('(Multiprice)', 'eme'); ?> </td> <?php } else { ?> <td> <?php echo $event_booking['booking_seats']; ?> </td> <?php } ?> <td> <?php echo eme_get_booking_price($event, $event_booking); ?> </td> <td> <?php echo eme_get_total_booking_price($event, $event_booking); ?> </td> <td> <span title="<?php print sprintf(__('This is based on the payment ID of the booking: %d', 'eme'), $payment_id); ?> "><?php echo eme_sanitize_html($event_booking['transfer_nbr_be97']); ?> </span> </td> <td> <?php echo eme_ui_select_binary($event_booking['booking_payed'], "bookings_payed[]"); ?> </td> </tr> <?php } ?> </tbody> </table> <script type="text/javascript"> jQuery(document).ready( function() { jQuery('#<?php print "{$table_id}"; ?> ').dataTable( { "dom": 'CT<"clear">Rlfrtip', <?php // jquery datatables locale loading $locale_code = get_locale(); $locale_file = EME_PLUGIN_DIR . "js/jquery-datatables/i18n/{$locale_code}.json"; $locale_file_url = EME_PLUGIN_URL . "js/jquery-datatables/i18n/{$locale_code}.json"; if ($locale_code != "en_US" && file_exists($locale_file)) { ?> "language": { "url": "<?php echo $locale_file_url; ?> " }, <?php } ?> "stateSave": true, <?php if (!empty($search)) { // If datatables state is saved, the initial search // is ignored and we need to use stateloadparams // So we give the 2 options ?> "stateLoadParams": function (settings, data) { data.search.search = "<?php echo $search; ?> "; }, "search": { "search": "<?php echo $search; ?> " }, <?php } ?> "pagingType": "full", "columnDefs": [ { "sortable": false, "targets": 0 }, { "visible": false, "targets": 1 } ], "colVis": { "exclude": [0,1] }, "tableTools": { "aButtons": [ { "sExtends": "csv", "mColumns": "visible"}, "print" ], "sSwfPath": "<?php echo EME_PLUGIN_URL; ?> js/jquery-datatables/extensions/TableTools-2.2.4-dev/swf/copy_csv_xls.swf" } } ); } ); </script> <?php } ?> <div class='tablenav'> <div class="alignleft actions"><br class='clear' /> </div> <br class='clear' /> </div> </div> </form> </div> </div> <?php }
function eme_replace_formfields_placeholders($event, $booking = "", $format = "", $eme_multibooking = 0) { global $current_user; $event_id = $event['event_id']; $registration_wp_users_only = $event['registration_wp_users_only']; $is_admin = is_admin(); if ($is_admin && $booking) { $editing_booking_from_backend = 1; } else { $editing_booking_from_backend = 0; } // if not in the backend and wp membership is required // or when editing an existing booking via backend (not a new) if ($registration_wp_users_only && !$is_admin || $editing_booking_from_backend) { $readonly = "disabled='disabled'"; } else { $readonly = ""; } if (empty($format)) { if (!empty($event['event_registration_form_format'])) { $format = $event['event_registration_form_format']; } elseif ($event['event_properties']['event_registration_form_format_tpl'] > 0) { $format = eme_get_template_format($event['event_properties']['event_registration_form_format_tpl']); } else { $format = get_option('eme_registration_form_format'); } } $min_allowed = $event['event_properties']['min_allowed']; $max_allowed = $event['event_properties']['max_allowed']; if ($event['event_properties']['take_attendance']) { $min_allowed = 0; $max_allowed = 1; } if ($editing_booking_from_backend) { // in the admin itf, and editing a booking // then the avail seats are the total seats if (eme_is_multi($event['event_seats'])) { $avail_seats = eme_get_multitotal($event['event_seats']); } else { $avail_seats = $event['event_seats']; } } else { // the next gives the number of available seats, even for multiprice $avail_seats = eme_get_available_seats($event_id); } $booked_places_options = array(); if (eme_is_multi($max_allowed)) { $multi_max_allowed = eme_convert_multi2array($max_allowed); $max_allowed_is_multi = 1; } else { $max_allowed_is_multi = 0; } if (eme_is_multi($min_allowed)) { $multi_min_allowed = eme_convert_multi2array($min_allowed); $min_allowed_is_multi = 1; } else { $min_allowed_is_multi = 0; } if (eme_is_multi($event['event_seats'])) { // in the admin itf, and editing a booking // then the avail seats are the total seats if ($editing_booking_from_backend) { $multi_avail = eme_convert_multi2array($event['event_seats']); } else { $multi_avail = eme_get_available_multiseats($event_id); } foreach ($multi_avail as $key => $avail_seats) { $booked_places_options[$key] = array(); if ($max_allowed_is_multi) { $real_max_allowed = $multi_max_allowed[$key]; } else { $real_max_allowed = $max_allowed; } // don't let people choose more seats than available if ($real_max_allowed > $avail_seats || $real_max_allowed == 0) { $real_max_allowed = $avail_seats; } if ($min_allowed_is_multi) { $real_min_allowed = $multi_min_allowed[$key]; } else { // it's no use to have a non-multi minimum for multiseats $real_min_allowed = 0; } for ($i = $real_min_allowed; $i <= $real_max_allowed; $i++) { $booked_places_options[$key][$i] = $i; } } } elseif (eme_is_multi($event['price'])) { // we just need to loop through the same amount of seats as there are prices foreach (eme_convert_multi2array($event['price']) as $key => $value) { $booked_places_options[$key] = array(); if ($max_allowed_is_multi) { $real_max_allowed = $multi_max_allowed[$key]; } else { $real_max_allowed = $max_allowed; } // don't let people choose more seats than available if ($real_max_allowed > $avail_seats || $real_max_allowed == 0) { $real_max_allowed = $avail_seats; } if ($min_allowed_is_multi) { $real_min_allowed = $multi_min_allowed[$key]; } else { // it's no use to have a non-multi minimum for multiseats/multiprice $real_min_allowed = 0; } for ($i = $real_min_allowed; $i <= $real_max_allowed; $i++) { $booked_places_options[$key][$i] = $i; } } } else { if ($max_allowed_is_multi) { $real_max_allowed = $multi_max_allowed[0]; } else { $real_max_allowed = $max_allowed; } // don't let people choose more seats than available if ($real_max_allowed > $avail_seats || $real_max_allowed == 0) { $real_max_allowed = $avail_seats; } if ($min_allowed_is_multi) { $real_min_allowed = $multi_min_allowed[0]; } else { $real_min_allowed = $min_allowed; } for ($i = $real_min_allowed; $i <= $real_max_allowed; $i++) { $booked_places_options[$i] = $i; } } $required_fields_count = 0; $eme_captcha_for_booking = get_option('eme_captcha_for_booking'); # we need 4 required fields: #_NAME, #_EMAIL, #_SEATS and #_SUBMIT # for multiprice: 3 + number of possible prices (we add those later on) if (eme_is_multi($event['price'])) { $required_fields_min = 3; } else { $required_fields_min = 4; } // if we require the captcha: add 1 if (!$is_admin && $eme_captcha_for_booking) { $required_fields_min++; } // for multi booking forms, the required field count per booking form is 1 (SEATS) if (!$is_admin && $eme_multibooking) { $required_fields_min = 1; } $bookerLastName = ""; $bookerFirstName = ""; $bookerAddress1 = ""; $bookerAddress2 = ""; $bookerCity = ""; $bookerState = ""; $bookerZip = ""; $bookerCountry = ""; $bookerEmail = ""; $bookerComment = ""; $bookerPhone = ""; $bookedSeats = 0; if (is_user_logged_in()) { get_currentuserinfo(); $bookerLastName = $current_user->user_lastname; if (empty($bookerLastName)) { $bookerLastName = $current_user->display_name; } $bookerFirstName = $current_user->user_firstname; $bookerEmail = $current_user->user_email; } if ($editing_booking_from_backend) { $person = eme_get_person($booking['person_id']); // when editing a booking $bookerLastName = eme_sanitize_html($person['lastname']); $bookerFirstName = eme_sanitize_html($person['firstname']); $bookerAddress1 = eme_sanitize_html($person['address1']); $bookerAddress2 = eme_sanitize_html($person['address2']); $bookerCity = eme_sanitize_html($person['city']); $bookerState = eme_sanitize_html($person['state']); $bookerZip = eme_sanitize_html($person['zip']); $bookerCountry = eme_sanitize_html($person['country']); $bookerEmail = eme_sanitize_html($person['email']); $bookerPhone = eme_sanitize_html($person['phone']); $bookerComment = eme_sanitize_html($booking['booking_comment']); $bookedSeats = eme_sanitize_html($booking['booking_seats']); if ($booking['booking_seats_mp']) { $booking_seats_mp = eme_convert_multi2array($booking['booking_seats_mp']); foreach ($booking_seats_mp as $key => $val) { $field_index = $key + 1; ${"bookedSeats" . $field_index} = eme_sanitize_html($val); } } } else { // check for previously filled in data // this in case people entered a wrong captcha if (isset($_POST['lastname'])) { $bookerLastName = eme_sanitize_html(stripslashes_deep($_POST['lastname'])); } if (isset($_POST['firstname'])) { $bookerFirstName = eme_sanitize_html(stripslashes_deep($_POST['firstname'])); } if (isset($_POST['address1'])) { $bookerAddress1 = eme_sanitize_html(stripslashes_deep($_POST['address1'])); } if (isset($_POST['address2'])) { $bookerAddress2 = eme_sanitize_html(stripslashes_deep($_POST['address2'])); } if (isset($_POST['city'])) { $bookerCity = eme_sanitize_html(stripslashes_deep($_POST['city'])); } if (isset($_POST['state'])) { $bookerState = eme_sanitize_html(stripslashes_deep($_POST['state'])); } if (isset($_POST['zip'])) { $bookerZip = eme_sanitize_html(stripslashes_deep($_POST['zip'])); } if (isset($_POST['country'])) { $bookerCountry = eme_sanitize_html(stripslashes_deep($_POST['country'])); } if (isset($_POST['email'])) { $bookerEmail = eme_sanitize_html(stripslashes_deep($_POST['email'])); } if (isset($_POST['phone'])) { $bookerPhone = eme_sanitize_html(stripslashes_deep($_POST['phone'])); } if (isset($_POST['comment'])) { $bookerComment = eme_sanitize_html(stripslashes_deep($_POST['comment'])); } } // first we do the custom attributes, since these can contain other placeholders preg_match_all("/#(ESC|URL)?_ATT\\{.+?\\}(\\{.+?\\})?/", $format, $results); foreach ($results[0] as $resultKey => $result) { $need_escape = 0; $need_urlencode = 0; $orig_result = $result; if (strstr($result, '#ESC')) { $result = str_replace("#ESC", "#", $result); $need_escape = 1; } elseif (strstr($result, '#URL')) { $result = str_replace("#URL", "#", $result); $need_urlencode = 1; } $replacement = ""; //Strip string of placeholder and just leave the reference $attRef = substr(substr($result, 0, strpos($result, '}')), 6); if (isset($event['event_attributes'][$attRef])) { $replacement = $event['event_attributes'][$attRef]; } if (trim($replacement) == '' && isset($results[2][$resultKey]) && $results[2][$resultKey] != '') { //Check to see if we have a second set of braces; $replacement = substr($results[2][$resultKey], 1, strlen(trim($results[2][$resultKey])) - 2); } if ($need_escape) { $replacement = eme_sanitize_request(eme_sanitize_html(preg_replace('/\\n|\\r/', '', $replacement))); } if ($need_urlencode) { $replacement = rawurlencode($replacement); } $format = str_replace($orig_result, $replacement, $format); } // the 2 placeholders that can contain extra text are treated seperately first // the question mark is used for non greedy (minimal) matching if (preg_match('/#_CAPTCHAHTML\\{.+\\}/', $format)) { // only show the captcha when booking via the frontend, not the admin backend if (!$is_admin && $eme_captcha_for_booking) { $format = preg_replace('/#_CAPTCHAHTML\\{(.+?)\\}/', '$1', $format); } else { $format = preg_replace('/#_CAPTCHAHTML\\{(.+?)\\}/', '', $format); } } if (preg_match('/#_SUBMIT\\{.+\\}/', $format)) { if ($editing_booking_from_backend) { $format = preg_replace('/#_SUBMIT\\{(.+?)\\}/', "<input name='eme_submit_button' class='eme_submit_button' type='submit' value='" . __('Update booking', 'eme') . "' />", $format); } else { $format = preg_replace('/#_SUBMIT\\{(.+?)\\}/', "<input name='eme_submit_button' class='eme_submit_button' type='submit' value='" . eme_trans_sanitize_html('$1') . "' />", $format); } if (!$eme_multibooking) { $required_fields_count++; } } $deprecated = get_option('eme_deprecated'); if ($deprecated && preg_match('/#_CAPTCHAHTML\\[.+\\]/', $format)) { // only show the captcha when booking via the frontend, not the admin backend if (!$is_admin && $eme_captcha_for_booking) { $format = preg_replace('/#_CAPTCHAHTML\\[(.+?)\\]/', '$1', $format); } else { $format = preg_replace('/#_CAPTCHAHTML\\[(.+?)\\]/', '', $format); } } if ($deprecated && preg_match('/#_SUBMIT\\[.+\\]/', $format)) { if ($editing_booking_from_backend) { $format = preg_replace('/#_SUBMIT\\[(.+?)\\]/', "<input name='eme_submit_button' class='eme_submit_button' type='submit' value='" . __('Update booking', 'eme') . "' />", $format); } else { $format = preg_replace('/#_SUBMIT\\[(.+?)\\]/', "<input name='eme_submit_button' class='eme_submit_button' type='submit' value='" . eme_trans_sanitize_html('$1') . "' />", $format); } if (!$eme_multibooking) { $required_fields_count++; } } // now the normal placeholders preg_match_all("/#(REQ)?_?[A-Z0-9_]+(\\{[A-Z0-9_]+\\})?/", $format, $placeholders); // make sure we set the largest matched placeholders first, otherwise if you found e.g. // #_LOCATION, part of #_LOCATIONPAGEURL would get replaced as well ... usort($placeholders[0], 'sort_stringlenth'); # we need 3 required fields: #_NAME, #_EMAIL and #_SEATS # if these are not present: we don't replace anything and the form is worthless foreach ($placeholders[0] as $result) { $orig_result = $result; $found = 1; $required = 0; $required_att = ""; $html5_wanted = 0; $replacement = ""; if (strstr($result, '#REQ')) { $result = str_replace("#REQ", "#", $result); $required = 1; $required_att = "required='required'"; } // also support RESPNAME, RESPEMAIL, ... if (strstr($result, '#_RESP')) { $result = str_replace("#_RESP", "#_", $result); } if ($eme_multibooking) { $var_prefix = "bookings[{$event_id}]["; $var_postfix = "]"; } else { $var_prefix = ''; $var_postfix = ''; } if (preg_match('/#_NAME|#_LASTNAME/', $result)) { if (!$eme_multibooking) { $replacement = "<input required='required' type='text' name='{$var_prefix}lastname{$var_postfix}' value='{$bookerLastName}' {$readonly} />"; $required_fields_count++; // #_NAME is always required $required = 1; } } elseif (preg_match('/#_FIRSTNAME/', $result)) { if (!empty($bookerFirstName)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}firstname{$var_postfix}' value='{$bookerFirstName}' {$readonly} />"; } else { $replacement = "<input {$required_att} type='text' name='{$var_prefix}firstname{$var_postfix}' value='{$bookerFirstName}' />"; } } elseif (preg_match('/#_ADDRESS1/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}address1{$var_postfix}' value='{$bookerAddress1}' />"; } elseif (preg_match('/#_ADDRESS2/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}address2{$var_postfix}' value='{$bookerAddress2}' />"; } elseif (preg_match('/#_CITY/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}city{$var_postfix}' value='{$bookerCity}' />"; } elseif (preg_match('/#_STATE/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}state{$var_postfix}' value='{$bookerState}' />"; } elseif (preg_match('/#_ZIP/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}zip{$var_postfix}' value='{$bookerZip}' />"; } elseif (preg_match('/#_COUNTRY/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}country{$var_postfix}' value='{$bookerCountry}' />"; } elseif (preg_match('/#_HTML5_EMAIL/', $result)) { if (!$eme_multibooking) { $replacement = "<input required='required' type='email' name='{$var_prefix}email{$var_postfix}' value='{$bookerEmail}' {$readonly} />"; $required_fields_count++; // #_EMAIL is always required $required = 1; } } elseif (preg_match('/#_EMAIL/', $result)) { if (!$eme_multibooking) { $replacement = "<input required='required' type='text' name='{$var_prefix}email{$var_postfix}' value='{$bookerEmail}' {$readonly} />"; $required_fields_count++; // #_EMAIL is always required $required = 1; } } elseif (preg_match('/#_HTML5_PHONE/', $result)) { $replacement = "<input {$required_att} type='tel' name='{$var_prefix}phone{$var_postfix}' value='{$bookerPhone}' />"; } elseif (preg_match('/#_PHONE/', $result)) { $replacement = "<input {$required_att} type='text' name='{$var_prefix}phone{$var_postfix}' value='{$bookerPhone}' />"; } elseif (preg_match('/#_SEATS$|#_SPACES$/', $result)) { $postfield_name = "{$var_prefix}bookedSeats{$var_postfix}"; if ($editing_booking_from_backend && isset($bookedSeats)) { $entered_val = $bookedSeats; } elseif ($eme_multibooking && isset($_POST['bookings'][$event_id]) && isset($_POST['bookings'][$event_id]['bookedSeats'])) { $entered_val = intval($_POST['bookings'][$event_id]['bookedSeats']); } elseif (isset($_POST['bookedSeats'])) { $entered_val = intval($_POST['bookedSeats']); } else { $entered_val = 0; } if ($event['event_properties']['take_attendance']) { $replacement = eme_ui_select_binary($entered_val, $postfield_name); } else { $replacement = eme_ui_select($entered_val, $postfield_name, $booked_places_options); } $required_fields_count++; } elseif ($deprecated && preg_match('/#_(SEATS|SPACES)(\\d+)/', $result, $matches) || preg_match('/#_(SEATS|SPACES)\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2]); $postfield_name = "{$var_prefix}bookedSeats" . $field_id . $var_postfix; if ($editing_booking_from_backend && isset(${"bookedSeats" . $field_id})) { $entered_val = ${"bookedSeats" . $field_id}; } elseif ($eme_multibooking && isset($_POST['bookings'][$event_id]) && isset($_POST['bookings'][$event_id]['bookedSeats' . $field_id])) { $entered_val = intval($_POST['bookings'][$event_id]['bookedSeats' . $field_id]); } elseif (isset($_POST['bookedSeats' . $field_id])) { $entered_val = intval($_POST['bookedSeats' . $field_id]); } else { $entered_val = 0; } if (eme_is_multi($event['event_seats']) || eme_is_multi($event['price'])) { if ($event['event_properties']['take_attendance']) { $replacement = eme_ui_select_binary($entered_val, $postfield_name); } else { $replacement = eme_ui_select($entered_val, $postfield_name, $booked_places_options[$field_id - 1]); } } else { if ($event['event_properties']['take_attendance']) { $replacement = eme_ui_select_binary($entered_val, $postfield_name); } else { $replacement = eme_ui_select($entered_val, $postfield_name, $booked_places_options); } } $required_fields_count++; } elseif (preg_match('/#_COMMENT/', $result)) { if (!$eme_multibooking) { $replacement = "<textarea {$required_att} name='{$var_prefix}comment{$var_postfix}'>{$bookerComment}</textarea>"; } } elseif (preg_match('/#_CAPTCHA/', $result) && $eme_captcha_for_booking) { if (!$eme_multibooking) { $replacement = "<img src='" . EME_PLUGIN_URL . "captcha.php?sessionvar=eme_add_booking'><br /><input required='required' type='text' name='captcha_check' autocomplete='off' />"; $required_fields_count++; } } elseif ($deprecated && preg_match('/#_FIELDNAME(\\d+)/', $result, $matches) || preg_match('/#_FIELDNAME\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[1]); $formfield = eme_get_formfield_byid($field_id); $replacement = eme_trans_sanitize_html($formfield['field_name']); } elseif ($deprecated && preg_match('/#_FIELD(\\d+)/', $result, $matches) || preg_match('/#_FIELD\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[1]); $postfield_name = "{$var_prefix}FIELD" . $field_id . $var_postfix; $entered_val = ""; if ($booking) { $answers = eme_get_answers($booking['booking_id']); $formfield = eme_get_formfield_byid($field_id); foreach ($answers as $answer) { if ($answer['field_name'] == $formfield['field_name']) { // the entered value for the function eme_get_formfield_html needs to be an array for multiple values // since we store them with "||", we can use the good old eme_is_multi function and split in an array then $entered_val = $answer['answer']; if (eme_is_multi($entered_val)) { $entered_val = eme_convert_multi2array($entered_val); } } } } elseif (isset($_POST[$postfield_name])) { $entered_val = stripslashes_deep($_POST[$postfield_name]); } $replacement = eme_get_formfield_html($field_id, $entered_val, $required); } elseif (preg_match('/#_SUBMIT/', $result, $matches)) { if (!$eme_multibooking) { if ($editing_booking_from_backend) { $replacement = "<input name='eme_submit_button' type='submit' value='" . __('Update booking', 'eme') . "' />"; } else { $replacement = "<input name='eme_submit_button' type='submit' value='" . eme_trans_sanitize_html(get_option('eme_rsvp_addbooking_submit_string')) . "' />"; } $required_fields_count++; } } else { $found = 0; } if ($required) { $replacement .= "<div class='eme-required-field'> " . __('(Required field)', 'eme') . "</div>"; } if ($found) { $format = str_replace($orig_result, $replacement, $format); } } // now any leftover event placeholders $format = eme_replace_placeholders($format, $event); // now, replace any language tags found in the format itself $format = eme_translate($format); # we need 4 required fields: #_NAME, #_EMAIL, #_SEATS and #_SUBMIT # for multiprice: 3 + number of possible prices # if these are not present: we don't replace anything and the form is worthless if (eme_is_multi($event['price'])) { $matches = preg_split('/\\|\\|/', $event['price']); $count = count($matches); // the count can be >3+$count if conditional tags are used to combine a form for single and multiple prices if ($required_fields_count >= $required_fields_min + $count) { return $format; } else { $res = __('Not all required fields are present in the booking form.', 'eme'); $res .= '<br />' . __("Since this is a multiprice event, make sure you changed the setting 'Registration Form Format' for the event to include #_SEATxx placeholders for each price.", 'eme'); $res .= '<br />' . __("See the documentation about multiprice events.", 'eme'); return "<div id='message' class='eme-rsvp-message'>{$res}</div>"; } } elseif ($required_fields_count >= $required_fields_min) { // the count can be > 4 if conditional tags are used to combine a form for single and multiple prices return $format; } else { return __('Not all required fields are present in the booking form.', 'eme'); } }