em-person.php
5.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
// TODO make person details more secure and integrate with WP user data
class EM_Person extends WP_User{
public $custom_user_fields = array();
function __construct( $person_id = false, $username = '', $blog_id='' ){
if( is_array($person_id) ){
if( array_key_exists('person_id',$person_id) ){
$person_id = $person_id['person_id'];
}elseif ( array_key_exists('user_id',$person_id) ){
$person_id = $person_id['user_id'];
}else{
$person_id = $person_id['ID'];
}
}elseif( is_object($person_id) && get_class($person_id) == 'WP_User'){
$person_id = $person_id->ID; //create new object if passed a wp_user
}
if($username){
parent::__construct($person_id, $username);
}elseif( is_numeric($person_id) && $person_id == 0 ){
$this->data = new stdClass();
$this->ID = 0;
$this->display_name = 'Anonymous User';
$this->user_email = 'anonymous@'.preg_replace('/https?:\/\//', '', get_site_url());
}else{
parent::__construct($person_id);
}
$this->phone = get_metadata('user', $this->ID, 'dbem_phone', true); //extra field for EM
do_action('em_person',$this, $person_id, $username);
}
function get_bookings($ids_only = false, $status= false){
global $wpdb;
$status_condition = $blog_condition = '';
if( is_multisite() ){
if( !is_main_site() ){
//not the main blog, force single blog search
$blog_condition = "AND e.blog_id=".get_current_blog_id();
}elseif(is_main_site() && !get_option('dbem_ms_global_events')){
$blog_condition = "AND (e.blog_id=".get_current_blog_id().' OR e.blog_id IS NULL)';
}
}
if( is_numeric($status) ){
$status_condition = " AND booking_status=$status";
}elseif( EM_Object::array_is_numeric($status) ){
$status_condition = " AND booking_status IN (".implode(',', $status).")";
}
$EM_Booking = em_get_booking(); //empty booking for fields
$results = $wpdb->get_results("SELECT b.".implode(', b.', array_keys($EM_Booking->fields))." FROM ".EM_BOOKINGS_TABLE." b, ".EM_EVENTS_TABLE." e WHERE e.event_id=b.event_id AND person_id={$this->ID} {$blog_condition} {$status_condition} ORDER BY ".get_option('dbem_bookings_default_orderby','event_start_date')." ".get_option('dbem_bookings_default_order','ASC'),ARRAY_A);
$bookings = array();
if($ids_only){
foreach($results as $booking_data){
$bookings[] = $booking_data['booking_id'];
}
return apply_filters('em_person_get_bookings', $bookings, $this);
}else{
foreach($results as $booking_data){
$bookings[] = em_get_booking($booking_data);
}
return apply_filters('em_person_get_bookings', new EM_Bookings($bookings), $this);
}
}
/**
* @return EM_Events
*/
function get_events(){
global $wpdb;
$events = array();
foreach( $this->get_bookings()->get_bookings() as $EM_Booking ){
$events[$EM_Booking->event_id] = $EM_Booking->get_event();
}
return apply_filters('em_person_get_events', $events);
}
function get_bookings_url(){
if( get_option('dbem_edit_bookings_page') && (!is_admin() || !empty($_REQUEST['is_public'])) ){
$my_bookings_page = get_permalink(get_option('dbem_edit_bookings_page'));
$bookings_link = em_add_get_params($my_bookings_page, array('person_id'=>$this->ID, 'event_id'=>null, 'ticket_id'=>null, 'booking_id'=>null), false);
}else{
$bookings_link = EM_ADMIN_URL. "&page=events-manager-bookings&person_id=".$this->ID;
}
return apply_filters('em_person_get_bookings_url', $bookings_link, $this);
}
function display_summary(){
ob_start();
?>
<table class="em-form-fields">
<tr>
<td><?php echo get_avatar($this->ID); ?></td>
<td style="padding-left:10px; vertical-align: top;">
<table>
<?php if( $this->ID === 0 ): ?>
<tr><th><?php _e('Name','events-manager'); ?> : </th><th><?php echo $this->get_name(); ?></th></tr>
<?php else: ?>
<tr><th><?php _e('Name','events-manager'); ?> : </th><th><a href="<?php echo $this->get_bookings_url(); ?>"><?php echo $this->get_name(); ?></a></th></tr>
<?php endif; ?>
<tr><th><?php _e('Email','events-manager'); ?> : </th><td><?php echo $this->user_email; ?></td></tr>
<tr><th><?php _e('Phone','events-manager'); ?> : </th><td><?php echo esc_html($this->phone); ?></td></tr>
</table>
</td>
</tr>
</table>
<?php
return apply_filters('em_person_display_summary', ob_get_clean(), $this);
}
function get_summary(){
$summary = array(
'user_name' => array('name' => __('Name','events-manager'), 'value' => $this->get_name()),
'user_email' => array('name' => __('Email','events-manager'), 'value' => $this->user_email),
'dbem_phone' => array('name' => __('Phone','events-manager'), 'value' => $this->phone),
);
$summary = array_merge( $summary, $this->custom_user_fields );
return apply_filters('em_person_get_summary', $summary, $this);
}
function get_name(){
$full_name = $this->first_name . " " . $this->last_name ;
$full_name = wp_kses_data(trim($full_name));
$name = !empty($full_name) ? $full_name : $this->display_name;
return apply_filters('em_person_get_name', $name, $this);
}
function to_api(){
$person = array(
'id' => $this->ID, // maybe hide this depending on permissions
'name' => $this->get_name(),
'name_first' => $this->first_name,
'name_last' => $this->last_name,
'email' => $this->user_email,
'phone' => $this->phone,
'guest' => $this->ID > 0, // whether person is registered or not
);
$person = array_merge( $person, $this->custom_user_fields );
return apply_filters('em_person_to_api', $person);
}
}
?>