em-ml-bookings.php
9.65 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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<?php
class EM_ML_Bookings {
public static $ignore_post_ids = array();
public static $displaying_locale = false;
public static function init(){
add_action('em_booking_get_post_pre','EM_ML_Bookings::em_booking_get_post_pre', 1, 1);
add_filter('em_event_get_bookings', 'EM_ML_Bookings::override_bookings',100,2);
add_action('em_booking_form_footer','EM_ML_Bookings::em_booking_form_footer',10,1);
add_filter('em_booking_get_event', 'EM_ML_Bookings::em_booking_get_event',10,2);
add_filter('em_booking_email_messages', 'EM_ML_Bookings::em_booking_email_messages',10,2);
add_action('em_bookings_admin_page', 'EM_ML_Bookings::em_bookings_admin_page',10,2);
add_filter('em_bookings_table_rows_col', 'EM_ML_Bookings::em_bookings_table_rows_col',1,6);
add_filter('em_bookings_table_cols_template', 'EM_ML_Bookings::em_bookings_table_cols_template',1,2);
// email language context
add_action('em_booking_email_before_send', 'EM_ML_Bookings::em_booking_email_before_send');
add_action('em_booking_email_after_send', 'EM_ML_Bookings::em_booking_email_after_send');
//add_action('em_booking_output_pre', 'EM_ML_Bookings::em_booking_output_pre', 1, 1);
//add_filter('em_booking_output', 'EM_ML_Bookings::em_booking_output', 10, 2);
// prevent overrides from happening during certain operations
add_action('before_delete_post', function($post_id){
EM_ML_Bookings::$ignore_post_ids[] = $post_id;
});
}
/**
* @param EM_Booking $EM_Booking
*/
public static function em_booking_email_before_send( $EM_Booking ){
if( $EM_Booking->language && get_locale() !== $EM_Booking->language ){
static::$displaying_locale = EM_ML::$current_language;
EM_ML::switch_locale($EM_Booking->language);
}
}
/**
* Sets the current language to the booking language so that email placeholders are translated correctly.
* @param EM_Booking $EM_Booking
*/
public static function em_booking_output_pre( $EM_Booking ){
if( !static::$displaying_locale ){
if( $EM_Booking->language && get_locale() !== $EM_Booking->language ){
EM_ML::switch_locale($EM_Booking->language);
}
}
}
/**
* Reverts the current language in case it was changed temporarily during email sending.
* @param string $output
* @param EM_Booking $EM_Booking
* @return boolean
*/
public static function em_booking_output( $output, $EM_Booking ){
if( !static::$displaying_locale && $EM_Booking->language ){
// we can run this knowing that if locale wasnt switched previously it won't proceed with switching anything
EM_ML::restore_locale();
}
return $output;
}
public static function em_booking_email_after_send( $EM_Booking ){
if( static::$displaying_locale ){
EM_ML::restore_locale();
static::$displaying_locale = false;
}
}
/**
* @param EM_Booking $EM_Booking
*/
public static function em_booking_get_post_pre( $EM_Booking ){
if( empty($EM_Booking->booking_id) ){
$EM_Booking->language = EM_ML::$current_language;
}
}
/**
* Checks to see if an event is a translation and therefore references booking data from the original event. If so, EM_Bookings object
* is replaced with the one belonging to the original event.
* @param $EM_Bookings
* @param $EM_Event
* @return EM_Bookings
*/
public static function override_bookings($EM_Bookings, $EM_Event){
if( !empty($EM_Event->post_id) && !in_array($EM_Event->post_id, static::$ignore_post_ids) && !EM_ML::is_original($EM_Event) ){
$event = EM_ML::get_original_event($EM_Event);
if( !empty($EM_Bookings->translated) ){
//we've already done this before, so we just need to make sure the event id isn't being reset to the translated event id
$EM_Bookings->event_id = $event->event_id;
}else{
//bookings hasn't been 'translated' yet, so we get the original event, get the EM_Bookings object and replace the current event with it.
$EM_Bookings = new EM_Bookings($event);
$EM_Bookings->event_id = $event->event_id;
$EM_Bookings->translated = true;
}
}
return $EM_Bookings;
}
/**
* @param $EM_Event
*/
public static function em_booking_form_footer($EM_Event){
if( EM_ML::$current_language != EM_ML::$wplang || EM_ML::$current_language != EM_ML::get_the_language($EM_Event) ){
echo '<input type="hidden" name="em_lang" value="'.EM_ML::$current_language.'" />';
}
}
/**
* Switches the event related to this booking if a translation was booked, so that when outputting information like emails, event info shows in appropriate language.
* The event_id booking property should remain the original event id.
* @param EM_Event $EM_Event
* @param EM_Booking $EM_Booking
* @return EM_Event
*/
public static function em_booking_get_event($EM_Event, $EM_Booking){
if( EM_ML::get_the_language($EM_Event) != $EM_Booking->language ){
$EM_Event = EM_ML::get_translation($EM_Event, $EM_Booking->language);
$EM_Booking->event = $EM_Event; // so that we always fire this filter each time get_event() is called
}
return $EM_Event;
}
public static function em_booking_email_messages($msg, $EM_Booking){
//only proceed if booking was in another language AND we're not in the current language given the option is translated automatically
if( $EM_Booking->language && EM_ML::$current_language != $EM_Booking->language ){
$lang = $EM_Booking->language;
//get the translated event
$EM_Event = EM_ML::get_translation($EM_Booking->get_event(), $lang);
//check that we're not already dealing with the translated event
if( $EM_Event->post_id != $EM_Booking->get_event()->post_id ){
//below is copied script from EM_Booking::email_messages() replacing get_option with EM_ML_Options::get_option() supplying the booking language
switch( $EM_Booking->booking_status ){
case 0:
case 5: //TODO remove offline status from here and move to pro
$msg['user']['subject'] = EM_ML_Options::get_option('dbem_bookings_email_pending_subject', $lang);
$msg['user']['body'] = EM_ML_Options::get_option('dbem_bookings_email_pending_body', $lang);
//admins should get something (if set to)
$msg['admin']['subject'] = EM_ML_Options::get_option('dbem_bookings_contact_email_pending_subject', $lang);
$msg['admin']['body'] = EM_ML_Options::get_option('dbem_bookings_contact_email_pending_body', $lang);
break;
case 1:
$msg['user']['subject'] = EM_ML_Options::get_option('dbem_bookings_email_confirmed_subject', $lang);
$msg['user']['body'] = EM_ML_Options::get_option('dbem_bookings_email_confirmed_body', $lang);
//admins should get something (if set to)
$msg['admin']['subject'] = EM_ML_Options::get_option('dbem_bookings_contact_email_confirmed_subject', $lang);
$msg['admin']['body'] = EM_ML_Options::get_option('dbem_bookings_contact_email_confirmed_body', $lang);
break;
case 2:
$msg['user']['subject'] = EM_ML_Options::get_option('dbem_bookings_email_rejected_subject', $lang);
$msg['user']['body'] = EM_ML_Options::get_option('dbem_bookings_email_rejected_body', $lang);
//admins should get something (if set to)
$msg['admin']['subject'] = EM_ML_Options::get_option('dbem_bookings_contact_email_rejected_subject', $lang);
$msg['admin']['body'] = EM_ML_Options::get_option('dbem_bookings_contact_email_rejected_body', $lang);
break;
case 3:
$msg['user']['subject'] = EM_ML_Options::get_option('dbem_bookings_email_cancelled_subject', $lang);
$msg['user']['body'] = EM_ML_Options::get_option('dbem_bookings_email_cancelled_body', $lang);
//admins should get something (if set to)
$msg['admin']['subject'] = EM_ML_Options::get_option('dbem_bookings_contact_email_cancelled_subject', $lang);
$msg['admin']['body'] = EM_ML_Options::get_option('dbem_bookings_contact_email_cancelled_body', $lang);
break;
}
}
}
return $msg;
}
public static function em_bookings_admin_page(){
global $EM_Booking; /* @var EM_Notices $EM_Notices */
if( !empty($_REQUEST['booking_id']) && is_object($EM_Booking) ){
if( $EM_Booking->language && EM_ML::$wplang != $EM_Booking->language ){
$EM_Notices = new EM_Notices(false);
require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
$languages = EM_ML::get_langs();
$lang = $EM_Booking->language;
$language = !empty($languages[$lang]) ? $languages[$lang]:$lang;
$EM_Notices->add_info(sprintf(esc_html__('The language used to make this booking was %s', 'events-manager'), $language));
echo $EM_Notices;
}
}
}
public static function em_bookings_table_rows_col($value, $col, $EM_Booking, $EM_Bookings_Table, $format, $object){
if( $col == 'booking_language' ){
$languages = EM_ML::get_langs();
$lang = $EM_Booking->language ? $EM_Booking->language : EM_ML::$wplang;
$value = !empty($languages[$lang]) ? $languages[$lang]:$lang;
}
return $value;
}
public static function em_bookings_table_cols_template($template, $EM_Bookings_Table){
$template ['booking_language'] = __('Language Booked', 'events-manager');
return $template;
}
}
EM_ML_Bookings::init();