public static function get_user_events($status, $user_id) { global $wpdb; $statuses = array(Eab_EventModel::BOOKING_YES => __('Attending', Eab_EventsHub::TEXT_DOMAIN), Eab_EventModel::BOOKING_MAYBE => __('Maybe', Eab_EventsHub::TEXT_DOMAIN), Eab_EventModel::BOOKING_NO => __('No', Eab_EventsHub::TEXT_DOMAIN)); if (!in_array($status, array_keys($statuses))) { return false; } // Unknown status $status_name = $statuses[$status]; $bookings = $wpdb->get_col($wpdb->prepare("SELECT event_id FROM " . Eab_EventsHub::tablename(Eab_EventsHub::BOOKING_TABLE) . " WHERE user_id = %d AND status = %s ORDER BY timestamp;", $user_id, $status)); if (!count($bookings)) { return false; } $ret = '<div class="wpmudevevents-user_bookings wpmudevevents-user_bookings-' . $status . '">'; foreach ($bookings as $event_id) { $event = new Eab_EventModel(get_post($event_id)); $id_check = $event->get_id(); if (apply_filters('eab-event-user_events-exclude_event', empty($id_check), $event)) { continue; } $ret .= '<h4>' . self::get_event_link($event) . '</h4>'; $ret .= '<div class="wpmudevevents-event-meta">' . apply_filters('eab-event-user_events-before_meta', '', $event, $status) . self::get_event_dates($event) . '<br />' . $event->get_venue_location() . '</div>'; } $ret .= '</div>'; return $ret; }
public function json_import_nearby_events() { $data = stripslashes_deep($_POST); $lat = (double) $data['lat']; $lng = (double) $data['lng']; if (empty($lat) || empty($lng)) { wp_send_json(array('status' => 0, 'msg' => __('Invalid location', Eab_EventsHub::TEXT_DOMAIN))); } $events = $this->_meetup->get_nearby_events($lat, $lng, 100); if (empty($events) || empty($events['results'])) { wp_send_json(array('status' => 1, 'msg' => __('There were no events to import', Eab_EventsHub::TEXT_DOMAIN))); } $imported = $this->_import_events($events); if (empty($imported)) { wp_send_json(array('status' => 0, 'msg' => __('No events imported.', Eab_EventsHub::TEXT_DOMAIN))); } $result = array(); foreach ($imported as $event_id) { if (empty($event_id)) { continue; } $event = new Eab_EventModel(get_post($event_id)); $result[] = '<a href="' . admin_url('post.php?action=edit&post=' . $event->get_id()) . '">' . $event->get_title() . '</a>'; } $result[] = sprintf(__('%s events successfully imported', Eab_EventsHub::TEXT_DOMAIN), count($result)); wp_send_json(array('status' => 1, 'msg' => join('<br />', $result))); }
public function export_attendees() { error_reporting(0); if (!$this->_event_id) { wp_die(__('No event to export', Eab_EventsHub::TEXT_DOMAIN)); } $event = new Eab_EventModel(get_post($this->_event_id)); $attendees = array(); $statuses = $this->_get_statuses(); foreach ($statuses as $status => $title) { $bookings = $this->_get_bookings($status); foreach ($bookings as $booking) { $user_data = get_userdata($booking->user_id); if ($event->get_id() !== $booking->event_id) { $event = new Eab_EventModel(get_post($booking->event_id)); } $payment_status = $ticket_count = __('N/A', Eab_EventsHub::TEXT_DOMAIN); if (Eab_EventModel::BOOKING_NO != $status) { $ticket_count = $event->get_booking_meta($booking->id, 'booking_ticket_count'); $ticket_count = $ticket_count ? $ticket_count : 1; if ($event->is_premium()) { $payment_status = $event->user_paid($booking->user_id) ? __('Yes', Eab_EventsHub::TEXT_DOMAIN) : __('No', Eab_EventsHub::TEXT_DOMAIN); } } $attendees[] = apply_filters('eab-exporter-csv-row', array(__('User ID', Eab_EventsHub::TEXT_DOMAIN) => $user_data->id, __('User Name', Eab_EventsHub::TEXT_DOMAIN) => apply_filters('eab-guest_list-export-guest_name', $user_data->display_name, $booking->user_id, $user_data), __('User Email', Eab_EventsHub::TEXT_DOMAIN) => $user_data->user_email, __('Attending', Eab_EventsHub::TEXT_DOMAIN) => $title, __('Ticket Count', Eab_EventsHub::TEXT_DOMAIN) => $ticket_count, __('Payment Status', Eab_EventsHub::TEXT_DOMAIN) => $payment_status), $event, $booking, $user_data); } } $delimiter = apply_filters('eab-exporter-csv-field_delimiter', $this->_delimiter); $fp = fopen('php://output', 'w'); fputcsv($fp, array_keys($attendees[0]), $delimiter); foreach ($attendees as $res) { fputcsv($fp, $res, $delimiter); } }
private function _edit_event_form($event_id) { add_action('get_footer', array($this, 'enqueue_dependency_data')); $post = $event_id ? get_post($event_id) : false; $event = new Eab_EventModel($post); $this->_enqueue_dependencies(); $style = $event->get_id() ? '' : 'style="display:none"'; $ret .= '<div id="eab-events-fpe">'; $ret .= '<a id="eab-events-fpe-back_to_event" href="' . get_permalink($event->get_id()) . '" ' . $style . '>' . __('Back to Event', Eab_EventsHub::TEXT_DOMAIN) . '</a>'; $ret .= '<input type="hidden" id="eab-events-fpe-event_id" value="' . (int) $event->get_id() . '" />'; $ret .= '<div>'; $ret .= '<label>' . __('Title', Eab_EventsHub::TEXT_DOMAIN) . '</label>'; $ret .= '<br /><input type="text" name="" id="eab-events-fpe-event_title" value="' . esc_attr($event->get_title()) . '" />'; $ret .= '</div>'; $ret .= '<div id="fpe-editor"></div>'; $ret .= $this->_get_event_meta_boxes($event); $ret .= '</div>'; return $ret; }
private function _send_cancel_event_email($event_id) { $event = new Eab_EventModel(get_post($event_id)); $rsvps = $event->get_event_bookings(Eab_EventModel::BOOKING_YES); if (empty($rsvps)) { return false; } $from = $this->_data->get_option('eab_cancelations-email-from'); $from = $from ? $from : get_option('admin_email'); $subject = trim($this->_data->get_option('eab_cancelations-email-subject')); $subject = !empty($subject) ? $subject : $this->_default_subject; $body = trim($this->_data->get_option('eab_cancelations-email-body')); $body = !empty($body) ? $body : $this->_default_message; if (empty($from) || empty($subject) || empty($body)) { return false; } $already_sent = $this->_get_users_notification_queue($event->get_id()); $limit = $this->_get_email_batch_limit(); $counter = 0; $codec = new Eab_Macro_Codec($event_id); $headers = array('From: ' . $from, 'Content-Type: ' . $this->email_charset() . '; charset="' . get_option('blog_charset') . '"'); add_filter('wp_mail_content_type', array($this, 'email_charset')); foreach ($rsvps as $rsvp) { if (in_array($rsvp->user_id, $already_sent)) { continue; } // Don't send email twice $user = get_user_by('id', $rsvp->user_id); if (!is_email($user->user_email)) { continue; } $codec->set_user($user); wp_mail($user->user_email, $codec->expand($subject, Eab_Macro_Codec::FILTER_TITLE), $codec->expand($body, Eab_Macro_Codec::FILTER_BODY), $headers); $already_sent[] = $rsvp->user_id; $counter++; if ($counter == $limit) { break; } } remove_filter('wp_mail_content_type', array($this, 'email_charset')); $this->_set_users_notification_queue($event->get_id(), $already_sent); if (count($rsvps) == count($already_sent)) { $this->_remove_event_from_schedule_queue($event->get_id()); } return $counter; }
function manage_posts_custom_column($column) { global $post; switch ($column) { case "attendees": global $wpdb; $event = $post instanceof Eab_EventModel ? $post : new Eab_EventModel($post); $yes = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM " . Eab_EventsHub::tablename(Eab_EventsHub::BOOKING_TABLE) . " WHERE event_id = %d AND status = %s;", $event->get_id(), Eab_EventModel::BOOKING_YES)); $no = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM " . Eab_EventsHub::tablename(Eab_EventsHub::BOOKING_TABLE) . " WHERE event_id = %d AND status = %s;", $event->get_id(), Eab_EventModel::BOOKING_NO)); $maybe = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM " . Eab_EventsHub::tablename(Eab_EventsHub::BOOKING_TABLE) . " WHERE event_id = %d AND status = %s;", $event->get_id(), Eab_EventModel::BOOKING_MAYBE)); printf('<b>' . __('Attending / Undecided', self::TEXT_DOMAIN) . ':</b> %d / %d<br />', $yes, $maybe); printf('<b>' . __('Not Attending', self::TEXT_DOMAIN) . ':</b> %d', $no); echo ' '; echo '<a class="button" href="' . admin_url('index.php?eab_export=attendees&event_id=' . $event->get_id()) . '" class="eab-export_attendees">' . __('Export', self::TEXT_DOMAIN) . '</a>'; break; case "start": $event = new Eab_EventModel($post); $df = get_option('date_format', 'Y-m-d'); if (!$event->is_recurring()) { echo date_i18n($df, $event->get_start_timestamp()) . ' - ' . date_i18n($df, $event->get_end_timestamp()); } else { $repeats = $event->get_supported_recurrence_intervals(); $title = @$repeats[$event->get_recurrence()]; $start = date_i18n($df, $event->get_recurrence_starts()); $end = date_i18n($df, $event->get_recurrence_ends()); printf(__("From %s, repeats every %s until %s", self::TEXT_DOMAIN), $start, $title, $end); } break; case "venue": $event = new Eab_EventModel($post); echo $event->get_venue_location(); break; case "event": $event = new Eab_EventModel($post); $post_type_object = get_post_type_object($post->post_type); $edit_link = get_edit_post_link($event->get_id()); $statuses = array(); if ('draft' == $post->post_status) { $statuses[] = __('Draft'); } if ('private' == $post->post_status) { $statuses[] = __('Private'); } if ('pending' == $post->post_status) { $statuses[] = __('Pending'); } $status = $statuses ? ' - <span class="post-state">' . join(', ', $statuses) . '</span>' : ''; $title = current_user_can($post_type_object->cap->edit_post, $event->get_id()) && 'trash' != $post->post_status ? '<strong>' . '<a class="row-title" href="' . $edit_link . '" title="' . esc_attr(sprintf(__('Edit “%s”'), $event->get_title())) . '">' . $event->get_title() . '</a> ' . $status . '</strong>' : '<strong>' . $event->get_title() . ' ' . $status . '</strong>'; if (current_user_can($post_type_object->cap->edit_post, $event->get_id()) && 'trash' != $post->post_status) { $actions['edit'] = '<a title="' . esc_attr(__('Edit Event', self::TEXT_DOMAIN)) . '" href="' . $edit_link . '">' . __('Edit') . '</a>'; if (!$event->is_recurring()) { $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr(__('Edit this Event inline', self::TEXT_DOMAIN)) . '">' . __('Quick Edit') . '</a>'; } } if (current_user_can($post_type_object->cap->delete_post, $event->get_id())) { if ('trash' == $post->post_status) { $actions['untrash'] = "<a title='" . esc_attr(__('Restore this Event from the Trash', self::TEXT_DOMAIN)) . "' href='" . wp_nonce_url(admin_url(sprintf($post_type_object->_edit_link . '&action=untrash', $event->get_id())), 'untrash-' . $post->post_type . '_' . $event->get_id()) . "'>" . __('Restore') . "</a>"; } else { if (EMPTY_TRASH_DAYS) { $actions['trash'] = '<a class="submitdelete" title="' . esc_attr(__('Move this Event to the Trash', self::TEXT_DOMAIN)) . '" href="' . get_delete_post_link($event->get_id()) . '">' . __('Trash') . '</a>'; } } if ('trash' == $post->post_status || !EMPTY_TRASH_DAYS) { $actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this Event permanently', self::TEXT_DOMAIN)) . "' href='" . get_delete_post_link($event->get_id(), '', true) . "'>" . __('Delete Permanently') . "</a>"; } } if ('trash' != $post->post_status) { $event_id = $event->get_id(); if ($event->is_recurring()) { $children = Eab_CollectionFactory::get_all_recurring_children_events($event); if (!$children || !$children[0] instanceof Eab_EventModel) { $event_id = false; } else { $event_id = $children[0]->get_id(); } } if ($event_id) { $actions['view'] = '<a href="' . get_permalink($event_id) . '" title="' . esc_attr(sprintf(__('View “%s”'), $event->get_title())) . '" rel="permalink">' . __('View') . '</a>'; } } echo $title; if (!empty($actions)) { foreach ($actions as $action => $link) { $actions[$action] = "<span class='{$action}'>{$link}</span>"; } } echo '<div class="row-actions">' . join(' | ', $actions) . '</div>'; get_inline_data($post); break; } }
private function _construct_unique_rsvp_activity($event_id, $user_id, $rsvp) { $group_id = $this->_is_group_event($event_id); if ($this->_data->get_option('bp-activity_autoupdate-user_rsvp_group_only') && !$group_id) { return false; } $event = new Eab_EventModel(get_post($event_id)); $user_link = bp_core_get_userlink($user_id); $update = false; switch ($rsvp) { case Eab_EventModel::BOOKING_YES: $update = sprintf(__('%s will be attending <a href="%s">%s</a>', Eab_EventsHub::TEXT_DOMAIN), $user_link, get_permalink($event->get_id()), $event->get_title()); break; case Eab_EventModel::BOOKING_MAYBE: $update = sprintf(__('%s will maybe attend <a href="%s">%s</a>', Eab_EventsHub::TEXT_DOMAIN), $user_link, get_permalink($event->get_id()), $event->get_title()); break; case Eab_EventModel::BOOKING_NO: $update = sprintf(__('%s won\'t be attending <a href="%s">%s</a>', Eab_EventsHub::TEXT_DOMAIN), $user_link, get_permalink($event->get_id()), $event->get_title()); break; } if (!$update) { return false; } $raw_activity = array('user_id' => $user_id, 'action' => $update, 'type' => 'event_rsvp', 'item_id' => $event->get_id()); if ($this->_data->get_option('bp-activity_autoupdate-user_rsvp_group_post') && $group_id) { global $bp; $group_activity = $raw_activity; $group_activity['component'] = $bp->groups->id; $group_activity['item_id'] = $group_id; $group_activity['secondary_item_id'] = $event->get_id(); $existing = bp_activity_get(array("filter" => array('user_id' => $user_id, "object" => $bp->groups->id, "action" => 'event_rsvp', 'primary_id' => $group_id, 'secondary_id' => $event->get_id()))); if (isset($existing['activities']) && !empty($existing['activities'])) { $old = reset($existing['activities']); if (is_object($old) && isset($old->id)) { $group_activity['id'] = $old->id; } } // Add group activity update groups_record_activity($group_activity); } else { $activity = $raw_activity; $activity['component'] = 'eab_events'; $existing = bp_activity_get(array("filter" => array('user_id' => $user_id, "object" => 'eab_events', "action" => 'event_rsvp', 'primary_id' => $event->get_id()))); if (isset($existing['activities']) && !empty($existing['activities'])) { $old = reset($existing['activities']); if (is_object($old) && isset($old->id)) { $activity['id'] = $old->id; } } // Add site/user activity update bp_activity_add($activity); } }
function get_payment_forms($form, $event_id) { $event = new Eab_EventModel($event_id); $price = $event->get_price(); if (!is_array($price)) { return $form; } $selection = '<select id="" name="amount">'; foreach ($price as $tier) { $selection .= '<option value="' . (double) $tier['fee'] . '">' . $tier['label'] . ": " . $this->_data->get_option("currency") . " " . $tier['fee'] . '</option>'; } $selection .= '</select>'; global $blog_id, $current_user; $content .= $this->_data->get_option('paypal_sandbox') ? '<form action="https://sandbox.paypal.com/cgi-bin/webscr" method="post">' : '<form action="https://www.paypal.com/cgi-bin/webscr" method="post">'; $content .= '<input type="hidden" name="business" value="' . $this->_data->get_option('paypal_email') . '" />'; $content .= '<input type="hidden" name="item_name" value="' . esc_attr($event->get_title()) . '" />'; $content .= '<input type="hidden" name="item_number" value="' . $event->get_id() . '" />'; $content .= '<input type="hidden" name="notify_url" value="' . admin_url('admin-ajax.php?action=eab_paypal_ipn&blog_id=' . $blog_id . '&booking_id=' . $booking_id) . '" />'; $content .= '<br />' . __('Please, select price tier', Eab_EventsHub::TEXT_DOMAIN) . ' ' . $selection; $content .= '<input type="hidden" name="return" value="' . get_permalink($event->get_id()) . '" />'; $content .= '<input type="hidden" name="currency_code" value="' . $this->_data->get_option('currency') . '">'; $content .= '<input type="hidden" name="cmd" value="_xclick" />'; // Add multiple tickets $extra_attributes = apply_filters('eab-payment-paypal_tickets-extra_attributes', $extra_attributes, $event->get_id(), $booking_id); $content .= '' . sprintf('<p>' . __('I want to buy %s ticket(s)', Eab_EventsHub::TEXT_DOMAIN) . '</p>', '<input type="number" size="2" name="quantity" value="1" min="1" ' . $extra_attributes . ' />'); $content .= '<input type="image" name="submit" border="0" src="https://www.paypal.com/en_US/i/btn/btn_paynow_SM.gif" alt="PayPal - The safer, easier way to pay online" />'; $content .= '<img alt="" border="0" width="1" height="1" src="https://www.paypal.com/en_US/i/scr/pixel.gif" />'; $content .= '</form>'; return $content; }