function eme_printable_booking_report($event_id) { global $eme_timezone; $event = eme_get_event($event_id); $current_userid=get_current_user_id(); if (!(current_user_can( get_option('eme_cap_edit_events')) || current_user_can( get_option('eme_cap_list_events')) || (current_user_can( get_option('eme_cap_author_event')) && ($event['event_author']==$current_userid || $event['event_contactperson_id']==$current_userid)))) { echo "No access"; die; } $is_multiprice = eme_is_multi($event['price']); $is_multiseat = eme_is_multi($event['event_seats']); $bookings = eme_get_bookings_for($event_id); $answer_columns = eme_get_answercolumns(eme_get_bookingids_for($event_id)); $available_seats = eme_get_available_seats($event_id); $booked_seats = eme_get_booked_seats($event_id); $pending_seats = eme_get_pending_seats($event_id); if ($is_multiseat) { $available_seats_ms=eme_convert_array2multi(eme_get_available_multiseats($event_id)); $booked_seats_ms=eme_convert_array2multi(eme_get_booked_multiseats($event_id)); $pending_seats_ms=eme_convert_array2multi(eme_get_pending_multiseats($event_id)); } $stylesheet = EME_PLUGIN_URL."events_manager.css"; foreach($answer_columns as $col) { $formfield[$col["field_name"]]=eme_get_formfield_id_byname($col["field_name"]); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Bookings for <?php echo eme_trans_sanitize_html($event['event_name']);?></title> <link rel="stylesheet" href="<?php echo $stylesheet; ?>" type="text/css" media="screen" /> <?php $file_name= get_stylesheet_directory()."/eme.css"; if (file_exists($file_name)) echo "<link rel='stylesheet' href='".get_stylesheet_directory_uri()."/eme.css' type='text/css' media='screen' />\n"; $file_name= get_stylesheet_directory()."/eme_print.css"; if (file_exists($file_name)) echo "<link rel='stylesheet' href='".get_stylesheet_directory_uri()."/eme_print.css' type='text/css' media='print' />\n"; ?> </head> <body id="eme_printable_body"> <div id="eme_printable_container"> <h1>Bookings for <?php echo eme_trans_sanitize_html($event['event_name']);?></h1> <p><?php echo eme_localised_date($event['event_start_date']." ".$event['event_start_time']." ".$eme_timezone); ?></p> <p><?php if ($event['location_id']) echo eme_replace_placeholders("#_LOCATIONNAME, #_ADDRESS, #_TOWN", $event); ?></p> <?php if ($event['price']) ?> <p><?php _e ( 'Price: ','eme' ); echo eme_replace_placeholders("#_CURRENCY #_PRICE", $event)?></p> <h1><?php _e('Bookings data', 'eme');?></h1> <table id="eme_printable_table"> <tr> <th scope='col' class='eme_print_id'><?php _e('ID', 'eme')?></th> <th scope='col' class='eme_print_name'><?php _e('Last Name', 'eme')?></th> <th scope='col' class='eme_print_name'><?php _e('First Name', 'eme')?></th> <th scope='col' class='eme_print_email'><?php _e('E-mail', 'eme')?></th> <th scope='col' class='eme_print_phone'><?php _e('Phone number', 'eme')?></th> <th scope='col' class='eme_print_seats'><?php if ($is_multiprice) _e('Seats (Multiprice)', 'eme'); else _e('Seats', 'eme'); ?></th> <th scope='col' class='eme_print_paid'><?php _e('Paid', 'eme')?></th> <th scope='col' class='eme_print_booking_date'><?php _e('Booking date', 'eme')?></th> <th scope='col' class='eme_print_total_price'><?php _e('Total price', 'eme')?></th> <th scope='col' class='eme_print_unique_nbr'><?php _e('Unique nbr', 'eme')?></th> <th scope='col' class='eme_print_comment'><?php _e('Comment', 'eme')?></th> <?php $nbr_columns=11; foreach($answer_columns as $col) { $class="eme_print_formfield".$formfield[$col['field_name']]; print "<th scope='col' class='$class'>".$col['field_name']."</th>"; $nbr_columns++; } ?> </tr> <?php foreach($bookings as $booking) { $localised_booking_date = eme_localised_date($booking['creation_date']." ".$eme_timezone); $localised_booking_time = eme_localised_time($booking['creation_date']." ".$eme_timezone); $person = eme_get_person ($booking['person_id']); $pending_string=""; if (eme_event_needs_approval($event_id) && !$booking['booking_approved']) { $pending_string=__('(pending)','eme'); } ?> <tr> <td class='eme_print_id'><?php echo $booking['booking_id']?></td> <td class='eme_print_name'><?php echo $person['lastname']?></td> <td class='eme_print_name'><?php echo $person['firstname']?></td> <td class='eme_print_email'><?php echo $person['email']?></td> <td class='eme_print_phone'><?php echo $person['phone']?></td> <td class='eme_print_seats' class='seats-number'><?php if ($is_multiprice) { // in cases where the event switched to multiprice, but somebody already registered while it was still single price: booking_seats_mp is then empty if ($booking['booking_seats_mp'] == "") $booking['booking_seats_mp']=$booking['booking_seats']; echo $booking['booking_seats']." (".$booking['booking_seats_mp'].") ".$pending_string; } else { echo $booking['booking_seats']." ".$pending_string; } ?> </td> <td class='eme_print_paid'><?php if ($booking['booking_payed']) _e('Yes'); else _e('No'); ?></td> <td class='eme_print_booking_date'><?php echo $localised_booking_date." ".$localised_booking_time; ?></td> <td class='eme_print_total_price'><?php echo eme_get_total_booking_price($event,$booking); ?></td> <td class='eme_print_unique_nbr'><?php echo $booking['transfer_nbr_be97']; ?></td> <td class='eme_print_comment'><?=$booking['booking_comment'] ?></td> <?php $answers = eme_get_answers($booking['booking_id']); foreach($answer_columns as $col) { $found=0; foreach ($answers as $answer) { $class="eme_print_formfield".$formfield[$col['field_name']]; if ($answer['field_name'] == $col['field_name']) { print "<td class='$class'>".eme_sanitize_html(eme_convert_answer2tag($answer))."</td>"; $found=1; break; } } # to make sure the number of columns are correct, we add an empty answer if none was found if (!$found) print "<td class='$class'> </td>"; } ?> </tr> <?php } ?> <tr id='eme_printable_booked-seats'> <td colspan='<?php echo $nbr_columns-4;?>'> </td> <td class='total-label'><?php _e('Booked', 'eme')?>:</td> <td colspan='3' class='seats-number'><?php print $booked_seats; if ($is_multiseat) print " ($booked_seats_ms)"; if ($pending_seats>0) { if ($is_multiseat) print " ".sprintf( __('(%s pending)','eme'), $pending_seats . " ($pending_seats_ms)"); else print " ".sprintf( __('(%s pending)','eme'), $pending_seats); } ?> </td> </tr> <tr id='eme_printable_available-seats'> <td colspan='<?php echo $nbr_columns-4;?>'> </td> <td class='total-label'><?php _e('Available', 'eme')?>:</td> <td colspan='3' class='seats-number'><?php print $available_seats; if ($is_multiseat) print " ($available_seats_ms)"; ?></td> </tr> </table> </div> </body> </html> <?php die(); }
function eme_replace_booking_placeholders($format, $event, $booking, $is_multibooking = 0, $target = "html", $lang = '') { $deprecated = get_option('eme_deprecated'); preg_match_all("/#(ESC)?_?[A-Za-z0-9_]+(\\{[A-Za-z0-9_]+\\})?/", $format, $placeholders); $person = eme_get_person($booking['person_id']); $current_userid = get_current_user_id(); $answers = eme_get_answers($booking['booking_id']); $payment_id = eme_get_booking_payment_id($booking['booking_id']); $payment = eme_get_payment($payment_id); $booking_ids = array(); $bookings = array(); if ($payment_id) { $booking_ids = eme_get_payment_booking_ids($payment_id); $bookings = eme_get_bookings($booking_ids); } usort($placeholders[0], 'sort_stringlenth'); foreach ($placeholders[0] as $result) { $replacement = ''; $found = 1; $need_escape = 0; $orig_result = $result; if (strstr($result, '#ESC')) { $result = str_replace("#ESC", "#", $result); $need_escape = 1; } if (preg_match('/#_RESPID/', $result)) { $replacement = $person['person_id']; $replacement = eme_sanitize_html($replacement); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif (preg_match('/#_RESP(NAME|LASTNAME|FIRSTNAME|ZIP|CITY|STATE|COUNTRY|ADDRESS1|ADDRESS2|PHONE|EMAIL)/', $result)) { $field = preg_replace("/#_RESP/", "", $result); $field = strtolower($field); if ($field == "name") { $field = "lastname"; } $replacement = $person[$field]; $replacement = eme_sanitize_html($replacement); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif (preg_match('/#_(RESPCOMMENT|COMMENT)/', $result)) { $replacement = $booking['booking_comment']; $replacement = eme_sanitize_html($replacement); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif ($deprecated && preg_match('/#_RESPSPACES(\\d+)/', $result, $matches) || preg_match('/#_RESPSPACES\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[1]) - 1; if (eme_is_multi($booking['booking_price'])) { $seats = eme_convert_multi2array($booking['booking_seats_mp']); if (array_key_exists($field_id, $seats)) { $replacement = $seats[$field_id]; } } } elseif (preg_match('/#_TOTALPRICE$/', $result)) { $price = eme_get_total_booking_price($event, $booking); $replacement = sprintf("%01.2f", $price); } elseif (preg_match('/#_BOOKINGPRICEPERSEAT$/', $result)) { $price = eme_get_seat_booking_price($event, $booking); $replacement = sprintf("%01.2f", $price); } elseif (preg_match('/#_BOOKINGPRICEPERSEAT\\{(\\d+)\\}/', $result, $matches)) { // total price to pay per price if multiprice $total_prices = eme_get_seat_booking_multiprice($event, $booking); $field_id = intval($matches[1]) - 1; if (array_key_exists($field_id, $total_prices)) { $price = $total_prices[$field_id]; $replacement = sprintf("%01.2f", $price); } } elseif (preg_match('/#_TOTALPRICE\\{(\\d+)\\}/', $result, $matches)) { // total price to pay per price if multiprice $total_prices = eme_get_total_booking_multiprice($event, $booking); $field_id = intval($matches[1]) - 1; if (array_key_exists($field_id, $total_prices)) { $price = $total_prices[$field_id]; $replacement = sprintf("%01.2f", $price); } } elseif ($deprecated && preg_match('/#_TOTALPRICE(\\d+)/', $result, $matches)) { // total price to pay per price if multiprice $total_prices = eme_get_total_booking_multiprice($event, $booking); $field_id = intval($matches[1]) - 1; if (array_key_exists($field_id, $total_prices)) { $price = $total_prices[$field_id]; $replacement = sprintf("%01.2f", $price); } } elseif (preg_match('/#_CHARGE\\{(.+)\\}$/', $result, $matches)) { $price = eme_get_total_booking_price($event, $booking); $replacement = eme_payment_provider_extra_charge($price, $matches[1]); } elseif (preg_match('/#_RESPSPACES$/', $result)) { $replacement = eme_get_multitotal($booking['booking_seats']); } elseif (preg_match('/#_BOOKINGCREATIONDATE/', $result)) { $replacement = eme_localised_date($booking['creation_date']); } elseif (preg_match('/#_BOOKINGMODIFDATE/', $result)) { $replacement = eme_localised_date($booking['modif_date']); } elseif (preg_match('/#_BOOKINGCREATIONTIME/', $result)) { $replacement = eme_localised_time($booking['creation_date']); } elseif (preg_match('/#_BOOKINGMODIFTIME/', $result)) { $replacement = eme_localised_time($booking['modif_date']); } elseif (preg_match('/#_BOOKINGID/', $result)) { $replacement = $booking['booking_id']; } elseif (preg_match('/#_TRANSFER_NBR_BE97/', $result)) { $replacement = $booking['transfer_nbr_be97']; } elseif (preg_match('/#_PAYMENT_URL/', $result)) { if ($payment_id && eme_event_can_pay_online($event)) { $replacement = eme_payment_url($payment_id); } } elseif (preg_match('/#_CANCEL_LINK$/', $result)) { $url = eme_cancel_url($payment['random_id']); $replacement = "<a href='{$url}'>" . __('Cancel booking', 'eme') . "</a>"; } elseif (preg_match('/#_CANCEL_URL$/', $result)) { $replacement = eme_cancel_url($payment['random_id']); } elseif (preg_match('/#_CANCEL_CODE$/', $result)) { $replacement = $payment['random_id']; } elseif (preg_match('/#_FIELDS/', $result)) { $field_replace = ""; foreach ($answers as $answer) { $tmp_answer = eme_convert_answer2tag($answer); $field_replace .= $answer['field_name'] . ": {$tmp_answer}\n"; } $replacement = eme_trans_sanitize_html($field_replace, $lang); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif (preg_match('/#_PAYED/', $result)) { $replacement = $booking['booking_payed'] ? __('Yes') : __('No'); } 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'], $lang); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif ($deprecated && preg_match('/#_FIELD(\\d+)/', $result, $matches) || preg_match('/#_FIELD\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[1]); $formfield = eme_get_formfield_byid($field_id); $field_replace = ""; foreach ($answers as $answer) { if ($answer['field_name'] == $formfield['field_name']) { $tmp_answer = eme_convert_answer2tag($answer); $field_replace = $tmp_answer; } } $replacement = eme_trans_sanitize_html($field_replace, $lang); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif (preg_match('/#_FIELDVALUE\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[1]); $formfield = eme_get_formfield_byid($field_id); foreach ($answers as $answer) { if ($answer['field_name'] == $formfield['field_name']) { if (is_array($answer['answer'])) { $tmp_answer = eme_convert_array2multi($answer['answer']); } else { $tmp_answer = $answer['answer']; } $field_replace = $tmp_answer; } } $replacement = eme_trans_sanitize_html($field_replace, $lang); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } else { $replacement = apply_filters('eme_general_rss', $replacement); } } elseif (preg_match('/#_MULTIBOOKING_SEATS$/', $result)) { if ($is_multibooking) { // returns the total of all seats for all bookings in the payment id related to this booking $replacement = eme_bookings_total_booking_seats($bookings); } } elseif (preg_match('/#_MULTIBOOKING_TOTALPRICE$/', $result)) { if ($is_multibooking) { // returns the price for all bookings in the payment id related to this booking $price = eme_bookings_total_booking_price($bookings); $replacement = sprintf("%01.2f", $price); } } elseif (preg_match('/#_MULTIBOOKING_DETAILS_TEMPLATE\\{(\\d+)\\}$/', $result, $matches)) { $template_id = intval($matches[1]); $template = eme_get_template_format($template_id); $res = ""; if ($template && $is_multibooking) { // don't let eme_replace_placeholders replace other shortcodes yet, let eme_replace_booking_placeholders finish and that will do it foreach ($bookings as $tmp_booking) { $tmp_event = eme_get_event_by_booking_id($tmp_booking['booking_id']); $tmp_res = eme_replace_placeholders($template, $tmp_event, "text", 0); $res .= eme_replace_booking_placeholders($tmp_res, $tmp_event, $tmp_booking, $is_multibooking, "text") . "\n"; } } $replacement = $res; } elseif (preg_match('/#_IS_MULTIBOOKING/', $result)) { $replacement = $is_multibooking; } else { $found = 0; } if ($found) { if ($need_escape) { $replacement = eme_sanitize_request(eme_sanitize_html(preg_replace('/\\n|\\r/', '', $replacement))); } $format = str_replace($orig_result, $replacement, $format); } } // now, replace any language tags found in the format itself $format = eme_translate($format, $lang); return do_shortcode($format); }