@@ -9,19 +9,19 @@ |
||
9 | 9 | interface EEI_Contact |
10 | 10 | { |
11 | 11 | |
12 | - public function fname(); |
|
12 | + public function fname(); |
|
13 | 13 | |
14 | 14 | |
15 | 15 | |
16 | - public function lname(); |
|
16 | + public function lname(); |
|
17 | 17 | |
18 | 18 | |
19 | 19 | |
20 | - public function email(); |
|
20 | + public function email(); |
|
21 | 21 | |
22 | 22 | |
23 | 23 | |
24 | - public function phone(); |
|
24 | + public function phone(); |
|
25 | 25 | } |
26 | 26 | |
27 | 27 | // End of file EEI_Contact.php |
@@ -8,99 +8,99 @@ |
||
8 | 8 | interface EEI_Base |
9 | 9 | { |
10 | 10 | |
11 | - /** |
|
12 | - * gets the unique ID of the model object. If it hasn't been saved yet |
|
13 | - * to the database, this should be 0 or NULL |
|
14 | - */ |
|
15 | - public function ID(); |
|
16 | - |
|
17 | - |
|
18 | - |
|
19 | - /** |
|
20 | - * Returns an array where keys are field names and values are their values |
|
21 | - * |
|
22 | - * @return array |
|
23 | - */ |
|
24 | - public function model_field_array(); |
|
25 | - |
|
26 | - |
|
27 | - |
|
28 | - /** |
|
29 | - * Saves the thing to the database and returns success (or an ID) |
|
30 | - * |
|
31 | - * @return boolean success on insert; or int on update (ID of newly inserted thing) |
|
32 | - */ |
|
33 | - public function save(); |
|
34 | - |
|
35 | - |
|
36 | - |
|
37 | - /** |
|
38 | - * Similar to insert_post_meta, adds a record in the Extra_Meta model's table with the given key and value. |
|
39 | - * A $previous_value can be specified in case there are many meta rows with the same key |
|
40 | - * |
|
41 | - * @param string $meta_key |
|
42 | - * @param string $meta_value |
|
43 | - * @param string $previous_value |
|
44 | - * @return int records updated (or BOOLEAN if we actually ended up inserting the extra meta row) |
|
45 | - * NOTE: if the values haven't changed, returns 0 |
|
46 | - */ |
|
47 | - public function update_extra_meta($meta_key, $meta_value, $previous_value = null); |
|
48 | - |
|
49 | - |
|
50 | - |
|
51 | - /** |
|
52 | - * Adds a new extra meta record. If $unique is set to TRUE, we'll first double-check |
|
53 | - * no other extra meta for this model object have the same key. Returns TRUE if the |
|
54 | - * extra meta row was entered, false if not |
|
55 | - * |
|
56 | - * @param string $meta_key |
|
57 | - * @param string $meta_value |
|
58 | - * @param boolean $unique |
|
59 | - * @return boolean |
|
60 | - */ |
|
61 | - public function add_extra_meta($meta_key, $meta_value, $unique = false); |
|
62 | - |
|
63 | - |
|
64 | - |
|
65 | - /** |
|
66 | - * Deletes all the extra meta rows for this record as specified by key. If $meta_value |
|
67 | - * is specified, only deletes extra meta records with that value. |
|
68 | - * |
|
69 | - * @param string $meta_key |
|
70 | - * @param string $meta_value |
|
71 | - * @return int number of extra meta rows deleted |
|
72 | - */ |
|
73 | - public function delete_extra_meta($meta_key, $meta_value = null); |
|
74 | - |
|
75 | - |
|
76 | - |
|
77 | - /** |
|
78 | - * Gets the extra meta with the given meta key. If you specify "single" we just return 1, otherwise |
|
79 | - * an array of everything found. Requires that this model actually have a relation of type EE_Has_Many_Any_Relation. |
|
80 | - * You can specify $default is case you haven't found the extra meta |
|
81 | - * |
|
82 | - * @param string $meta_key |
|
83 | - * @param boolean $single |
|
84 | - * @param mixed $default if we don't find anything, what should we return? |
|
85 | - * @return mixed single value if $single; array if ! $single |
|
86 | - */ |
|
87 | - public function get_extra_meta($meta_key, $single = false, $default = NULL); |
|
88 | - |
|
89 | - |
|
90 | - |
|
91 | - /** |
|
92 | - * Gets a pretty view of the field's value. $extra_cache_ref can specify different formats for this. |
|
93 | - * The $extra_cache_ref will be passed to the model field's prepare_for_pretty_echoing, so consult the field's class |
|
94 | - * to see what options are available. |
|
95 | - * |
|
96 | - * @param string $field_name |
|
97 | - * @param string $extra_cache_ref This allows the user to specify an extra cache ref for the given property |
|
98 | - * (in cases where the same property may be used for different outputs |
|
99 | - * - i.e. datetime, money etc.) |
|
100 | - * @return mixed |
|
101 | - * @throws \EE_Error |
|
102 | - */ |
|
103 | - public function get_pretty($field_name, $extra_cache_ref); |
|
11 | + /** |
|
12 | + * gets the unique ID of the model object. If it hasn't been saved yet |
|
13 | + * to the database, this should be 0 or NULL |
|
14 | + */ |
|
15 | + public function ID(); |
|
16 | + |
|
17 | + |
|
18 | + |
|
19 | + /** |
|
20 | + * Returns an array where keys are field names and values are their values |
|
21 | + * |
|
22 | + * @return array |
|
23 | + */ |
|
24 | + public function model_field_array(); |
|
25 | + |
|
26 | + |
|
27 | + |
|
28 | + /** |
|
29 | + * Saves the thing to the database and returns success (or an ID) |
|
30 | + * |
|
31 | + * @return boolean success on insert; or int on update (ID of newly inserted thing) |
|
32 | + */ |
|
33 | + public function save(); |
|
34 | + |
|
35 | + |
|
36 | + |
|
37 | + /** |
|
38 | + * Similar to insert_post_meta, adds a record in the Extra_Meta model's table with the given key and value. |
|
39 | + * A $previous_value can be specified in case there are many meta rows with the same key |
|
40 | + * |
|
41 | + * @param string $meta_key |
|
42 | + * @param string $meta_value |
|
43 | + * @param string $previous_value |
|
44 | + * @return int records updated (or BOOLEAN if we actually ended up inserting the extra meta row) |
|
45 | + * NOTE: if the values haven't changed, returns 0 |
|
46 | + */ |
|
47 | + public function update_extra_meta($meta_key, $meta_value, $previous_value = null); |
|
48 | + |
|
49 | + |
|
50 | + |
|
51 | + /** |
|
52 | + * Adds a new extra meta record. If $unique is set to TRUE, we'll first double-check |
|
53 | + * no other extra meta for this model object have the same key. Returns TRUE if the |
|
54 | + * extra meta row was entered, false if not |
|
55 | + * |
|
56 | + * @param string $meta_key |
|
57 | + * @param string $meta_value |
|
58 | + * @param boolean $unique |
|
59 | + * @return boolean |
|
60 | + */ |
|
61 | + public function add_extra_meta($meta_key, $meta_value, $unique = false); |
|
62 | + |
|
63 | + |
|
64 | + |
|
65 | + /** |
|
66 | + * Deletes all the extra meta rows for this record as specified by key. If $meta_value |
|
67 | + * is specified, only deletes extra meta records with that value. |
|
68 | + * |
|
69 | + * @param string $meta_key |
|
70 | + * @param string $meta_value |
|
71 | + * @return int number of extra meta rows deleted |
|
72 | + */ |
|
73 | + public function delete_extra_meta($meta_key, $meta_value = null); |
|
74 | + |
|
75 | + |
|
76 | + |
|
77 | + /** |
|
78 | + * Gets the extra meta with the given meta key. If you specify "single" we just return 1, otherwise |
|
79 | + * an array of everything found. Requires that this model actually have a relation of type EE_Has_Many_Any_Relation. |
|
80 | + * You can specify $default is case you haven't found the extra meta |
|
81 | + * |
|
82 | + * @param string $meta_key |
|
83 | + * @param boolean $single |
|
84 | + * @param mixed $default if we don't find anything, what should we return? |
|
85 | + * @return mixed single value if $single; array if ! $single |
|
86 | + */ |
|
87 | + public function get_extra_meta($meta_key, $single = false, $default = NULL); |
|
88 | + |
|
89 | + |
|
90 | + |
|
91 | + /** |
|
92 | + * Gets a pretty view of the field's value. $extra_cache_ref can specify different formats for this. |
|
93 | + * The $extra_cache_ref will be passed to the model field's prepare_for_pretty_echoing, so consult the field's class |
|
94 | + * to see what options are available. |
|
95 | + * |
|
96 | + * @param string $field_name |
|
97 | + * @param string $extra_cache_ref This allows the user to specify an extra cache ref for the given property |
|
98 | + * (in cases where the same property may be used for different outputs |
|
99 | + * - i.e. datetime, money etc.) |
|
100 | + * @return mixed |
|
101 | + * @throws \EE_Error |
|
102 | + */ |
|
103 | + public function get_pretty($field_name, $extra_cache_ref); |
|
104 | 104 | |
105 | 105 | |
106 | 106 |
@@ -9,13 +9,13 @@ |
||
9 | 9 | interface EEI_Request_Stack_Core_App |
10 | 10 | { |
11 | 11 | |
12 | - /** |
|
13 | - * gives the core app a chance to handle the response after the request stack has fully processed |
|
14 | - * |
|
15 | - * @param EE_Request $request |
|
16 | - * @param EE_Response $response |
|
17 | - */ |
|
18 | - public function handle_response(EE_Request $request, EE_Response $response); |
|
12 | + /** |
|
13 | + * gives the core app a chance to handle the response after the request stack has fully processed |
|
14 | + * |
|
15 | + * @param EE_Request $request |
|
16 | + * @param EE_Response $response |
|
17 | + */ |
|
18 | + public function handle_response(EE_Request $request, EE_Response $response); |
|
19 | 19 | |
20 | 20 | } |
21 | 21 | // End of file EEI_Request_Stack_Core_App.interface.php |
@@ -9,27 +9,27 @@ |
||
9 | 9 | interface EEHI_File |
10 | 10 | { |
11 | 11 | |
12 | - /** |
|
13 | - * ensure_file_exists_and_is_writable |
|
14 | - * ensures that a file exists and is writable, will attempt to create file if it does not exist |
|
15 | - * |
|
16 | - * @param string $full_file_path |
|
17 | - * @throws EE_Error |
|
18 | - * @return bool |
|
19 | - */ |
|
20 | - public static function ensure_file_exists_and_is_writable($full_file_path = ''); |
|
12 | + /** |
|
13 | + * ensure_file_exists_and_is_writable |
|
14 | + * ensures that a file exists and is writable, will attempt to create file if it does not exist |
|
15 | + * |
|
16 | + * @param string $full_file_path |
|
17 | + * @throws EE_Error |
|
18 | + * @return bool |
|
19 | + */ |
|
20 | + public static function ensure_file_exists_and_is_writable($full_file_path = ''); |
|
21 | 21 | |
22 | 22 | |
23 | 23 | |
24 | - /** |
|
25 | - * ensure_folder_exists_and_is_writable |
|
26 | - * ensures that a folder exists and is writable, will attempt to create folder if it does not exist |
|
27 | - * |
|
28 | - * @param string $folder |
|
29 | - * @throws EE_Error |
|
30 | - * @return bool |
|
31 | - */ |
|
32 | - public static function ensure_folder_exists_and_is_writable($folder = ''); |
|
24 | + /** |
|
25 | + * ensure_folder_exists_and_is_writable |
|
26 | + * ensures that a folder exists and is writable, will attempt to create folder if it does not exist |
|
27 | + * |
|
28 | + * @param string $folder |
|
29 | + * @throws EE_Error |
|
30 | + * @return bool |
|
31 | + */ |
|
32 | + public static function ensure_folder_exists_and_is_writable($folder = ''); |
|
33 | 33 | } |
34 | 34 | // End of file EEHI_File.interface.php |
35 | 35 | // Location: core/interfaces/EEHI_File.interface.php |
36 | 36 | \ No newline at end of file |
@@ -9,18 +9,18 @@ |
||
9 | 9 | interface EEHI_Money |
10 | 10 | { |
11 | 11 | |
12 | - /** |
|
13 | - * For comparing floats. Default operator is '=', but see the $operator below for all options. |
|
14 | - * This should be used to compare floats instead of normal '==' because floats |
|
15 | - * are inherently imprecise, and so you can sometimes have two floats that appear to be identical |
|
16 | - * but actually differ by 0.00000001. |
|
17 | - * |
|
18 | - * @param float $float1 |
|
19 | - * @param float $float2 |
|
20 | - * @param string $operator The operator. Valid options are =, <=, <, >=, >, <>, eq, lt, lte, gt, gte, ne |
|
21 | - * @return boolean whether the equation is true or false |
|
22 | - */ |
|
23 | - public function compare_floats($float1, $float2, $operator = '='); |
|
12 | + /** |
|
13 | + * For comparing floats. Default operator is '=', but see the $operator below for all options. |
|
14 | + * This should be used to compare floats instead of normal '==' because floats |
|
15 | + * are inherently imprecise, and so you can sometimes have two floats that appear to be identical |
|
16 | + * but actually differ by 0.00000001. |
|
17 | + * |
|
18 | + * @param float $float1 |
|
19 | + * @param float $float2 |
|
20 | + * @param string $operator The operator. Valid options are =, <=, <, >=, >, <>, eq, lt, lte, gt, gte, ne |
|
21 | + * @return boolean whether the equation is true or false |
|
22 | + */ |
|
23 | + public function compare_floats($float1, $float2, $operator = '='); |
|
24 | 24 | } |
25 | 25 | // End of file EEHI_Money.interface.php |
26 | 26 | // Location: core/interfaces/EEHI_Money.interface.php |
27 | 27 | \ No newline at end of file |
@@ -38,30 +38,30 @@ discard block |
||
38 | 38 | * @throws EE_Error if filesystem credentials are required |
39 | 39 | * @return WP_Filesystem_Base |
40 | 40 | */ |
41 | - private static function _get_wp_filesystem( $filepath = null) { |
|
42 | - if( apply_filters( |
|
41 | + private static function _get_wp_filesystem($filepath = null) { |
|
42 | + if (apply_filters( |
|
43 | 43 | 'FHEE__EEH_File___get_wp_filesystem__allow_using_filesystem_direct', |
44 | - $filepath && EEH_File::is_in_uploads_folder( $filepath ), |
|
45 | - $filepath ) ) { |
|
46 | - if( ! EEH_File::$_wp_filesystem_direct instanceof WP_Filesystem_Direct ) { |
|
47 | - require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php'); |
|
44 | + $filepath && EEH_File::is_in_uploads_folder($filepath), |
|
45 | + $filepath )) { |
|
46 | + if ( ! EEH_File::$_wp_filesystem_direct instanceof WP_Filesystem_Direct) { |
|
47 | + require_once(ABSPATH.'wp-admin/includes/class-wp-filesystem-base.php'); |
|
48 | 48 | $method = 'direct'; |
49 | - $wp_filesystem_direct_file = apply_filters( 'filesystem_method_file', ABSPATH . 'wp-admin/includes/class-wp-filesystem-' . $method . '.php', $method ); |
|
49 | + $wp_filesystem_direct_file = apply_filters('filesystem_method_file', ABSPATH.'wp-admin/includes/class-wp-filesystem-'.$method.'.php', $method); |
|
50 | 50 | //check constants defined, just like in wp-admin/includes/file.php's WP_Filesystem() |
51 | - if ( ! defined('FS_CHMOD_DIR') ) { |
|
52 | - define('FS_CHMOD_DIR', ( fileperms( ABSPATH ) & 0777 | 0755 ) ); |
|
51 | + if ( ! defined('FS_CHMOD_DIR')) { |
|
52 | + define('FS_CHMOD_DIR', (fileperms(ABSPATH) & 0777 | 0755)); |
|
53 | 53 | } |
54 | - if ( ! defined('FS_CHMOD_FILE') ) { |
|
55 | - define('FS_CHMOD_FILE', ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 ) ); |
|
54 | + if ( ! defined('FS_CHMOD_FILE')) { |
|
55 | + define('FS_CHMOD_FILE', (fileperms(ABSPATH.'index.php') & 0777 | 0644)); |
|
56 | 56 | } |
57 | - require_once( $wp_filesystem_direct_file ); |
|
58 | - EEH_File::$_wp_filesystem_direct = new WP_Filesystem_Direct( array() ); |
|
57 | + require_once($wp_filesystem_direct_file); |
|
58 | + EEH_File::$_wp_filesystem_direct = new WP_Filesystem_Direct(array()); |
|
59 | 59 | } |
60 | 60 | return EEH_File::$_wp_filesystem_direct; |
61 | 61 | } |
62 | 62 | global $wp_filesystem; |
63 | 63 | // no filesystem setup ??? |
64 | - if ( ! $wp_filesystem instanceof WP_Filesystem_Base ) { |
|
64 | + if ( ! $wp_filesystem instanceof WP_Filesystem_Base) { |
|
65 | 65 | // if some eager beaver's just trying to get in there too early... |
66 | 66 | // let them do it, because we are one of those eager beavers! :P |
67 | 67 | /** |
@@ -74,34 +74,34 @@ discard block |
||
74 | 74 | * and there may be troubles if the WP files are owned by a different user |
75 | 75 | * than the server user. But both of these issues should exist in 4.4 and earlier too |
76 | 76 | */ |
77 | - if ( FALSE && ! did_action( 'wp_loaded' )) { |
|
77 | + if (FALSE && ! did_action('wp_loaded')) { |
|
78 | 78 | $msg = __('An attempt to access and/or write to a file on the server could not be completed due to a lack of sufficient credentials.', 'event_espresso'); |
79 | - if ( WP_DEBUG ) { |
|
80 | - $msg .= '<br />' . __('The WP Filesystem can not be accessed until after the "wp_loaded" hook has run, so it\'s best not to attempt access until the "admin_init" hookpoint.', 'event_espresso'); |
|
79 | + if (WP_DEBUG) { |
|
80 | + $msg .= '<br />'.__('The WP Filesystem can not be accessed until after the "wp_loaded" hook has run, so it\'s best not to attempt access until the "admin_init" hookpoint.', 'event_espresso'); |
|
81 | 81 | } |
82 | - throw new EE_Error( $msg ); |
|
82 | + throw new EE_Error($msg); |
|
83 | 83 | } else { |
84 | 84 | // should be loaded if we are past the wp_loaded hook... |
85 | - if ( ! function_exists( 'WP_Filesystem' )) { |
|
86 | - require_once( ABSPATH . 'wp-admin/includes/file.php' ); |
|
87 | - require_once( ABSPATH . 'wp-admin/includes/template.php' ); |
|
85 | + if ( ! function_exists('WP_Filesystem')) { |
|
86 | + require_once(ABSPATH.'wp-admin/includes/file.php'); |
|
87 | + require_once(ABSPATH.'wp-admin/includes/template.php'); |
|
88 | 88 | } |
89 | 89 | // turn on output buffering so that we can capture the credentials form |
90 | 90 | ob_start(); |
91 | - $credentials = request_filesystem_credentials( '' ); |
|
91 | + $credentials = request_filesystem_credentials(''); |
|
92 | 92 | // store credentials form for the time being |
93 | 93 | EEH_File::$_credentials_form = ob_get_clean(); |
94 | 94 | // basically check for direct or previously configured access |
95 | - if ( ! WP_Filesystem( $credentials ) ) { |
|
95 | + if ( ! WP_Filesystem($credentials)) { |
|
96 | 96 | // if credentials do NOT exist |
97 | - if ( $credentials === FALSE ) { |
|
98 | - add_action( 'admin_notices', array( 'EEH_File', 'display_request_filesystem_credentials_form' ), 999 ); |
|
99 | - throw new EE_Error( __('An attempt to access and/or write to a file on the server could not be completed due to a lack of sufficient credentials.', 'event_espresso')); |
|
100 | - } elseif( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { |
|
101 | - add_action( 'admin_notices', array( 'EEH_File', 'display_request_filesystem_credentials_form' ), 999 ); |
|
97 | + if ($credentials === FALSE) { |
|
98 | + add_action('admin_notices', array('EEH_File', 'display_request_filesystem_credentials_form'), 999); |
|
99 | + throw new EE_Error(__('An attempt to access and/or write to a file on the server could not be completed due to a lack of sufficient credentials.', 'event_espresso')); |
|
100 | + } elseif (is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code()) { |
|
101 | + add_action('admin_notices', array('EEH_File', 'display_request_filesystem_credentials_form'), 999); |
|
102 | 102 | throw new EE_Error( |
103 | 103 | sprintf( |
104 | - __( 'WP Filesystem Error: $1%s', 'event_espresso' ), |
|
104 | + __('WP Filesystem Error: $1%s', 'event_espresso'), |
|
105 | 105 | $wp_filesystem->errors->get_error_message() ) ); |
106 | 106 | } |
107 | 107 | } |
@@ -114,8 +114,8 @@ discard block |
||
114 | 114 | * display_request_filesystem_credentials_form |
115 | 115 | */ |
116 | 116 | public static function display_request_filesystem_credentials_form() { |
117 | - if ( ! empty( EEH_File::$_credentials_form )) { |
|
118 | - echo '<div class="updated espresso-notices-attention"><p>' . EEH_File::$_credentials_form . '</p></div>'; |
|
117 | + if ( ! empty(EEH_File::$_credentials_form)) { |
|
118 | + echo '<div class="updated espresso-notices-attention"><p>'.EEH_File::$_credentials_form.'</p></div>'; |
|
119 | 119 | } |
120 | 120 | } |
121 | 121 | |
@@ -133,29 +133,29 @@ discard block |
||
133 | 133 | * @throws EE_Error if filesystem credentials are required |
134 | 134 | * @return bool |
135 | 135 | */ |
136 | - public static function verify_filepath_and_permissions( $full_file_path = '', $file_name = '', $file_ext = '', $type_of_file = '' ) { |
|
136 | + public static function verify_filepath_and_permissions($full_file_path = '', $file_name = '', $file_ext = '', $type_of_file = '') { |
|
137 | 137 | // load WP_Filesystem and set file permissions |
138 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
139 | - $full_file_path = EEH_File::standardise_directory_separators( $full_file_path ); |
|
140 | - if ( ! $wp_filesystem->is_readable( EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ) )) { |
|
141 | - $file_name = ! empty( $type_of_file ) ? $file_name . ' ' . $type_of_file : $file_name; |
|
142 | - $file_name .= ! empty( $file_ext ) ? ' file' : ' folder'; |
|
138 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
139 | + $full_file_path = EEH_File::standardise_directory_separators($full_file_path); |
|
140 | + if ( ! $wp_filesystem->is_readable(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path))) { |
|
141 | + $file_name = ! empty($type_of_file) ? $file_name.' '.$type_of_file : $file_name; |
|
142 | + $file_name .= ! empty($file_ext) ? ' file' : ' folder'; |
|
143 | 143 | $msg = sprintf( |
144 | - __( 'The requested %1$s could not be found or is not readable, possibly due to an incorrect filepath, or incorrect file permissions.%2$s', 'event_espresso' ), |
|
144 | + __('The requested %1$s could not be found or is not readable, possibly due to an incorrect filepath, or incorrect file permissions.%2$s', 'event_espresso'), |
|
145 | 145 | $file_name, |
146 | 146 | '<br />' |
147 | 147 | ); |
148 | - if ( EEH_File::exists( $full_file_path )) { |
|
149 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_file_path, $type_of_file ); |
|
148 | + if (EEH_File::exists($full_file_path)) { |
|
149 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_file_path, $type_of_file); |
|
150 | 150 | } else { |
151 | 151 | // no file permissions means the file was not found |
152 | 152 | $msg .= sprintf( |
153 | - __( 'Please ensure the following path is correct: "%s".', 'event_espresso' ), |
|
153 | + __('Please ensure the following path is correct: "%s".', 'event_espresso'), |
|
154 | 154 | $full_file_path |
155 | 155 | ); |
156 | 156 | } |
157 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
158 | - throw new EE_Error( $msg . '||' . $msg ); |
|
157 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
158 | + throw new EE_Error($msg.'||'.$msg); |
|
159 | 159 | } |
160 | 160 | return FALSE; |
161 | 161 | } |
@@ -173,24 +173,24 @@ discard block |
||
173 | 173 | * @throws EE_Error if filesystem credentials are required |
174 | 174 | * @return string |
175 | 175 | */ |
176 | - private static function _permissions_error_for_unreadable_filepath( $full_file_path = '', $type_of_file = '' ){ |
|
176 | + private static function _permissions_error_for_unreadable_filepath($full_file_path = '', $type_of_file = '') { |
|
177 | 177 | // load WP_Filesystem and set file permissions |
178 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
178 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
179 | 179 | // check file permissions |
180 | - $perms = $wp_filesystem->getchmod( EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ) ); |
|
181 | - if ( $perms ) { |
|
180 | + $perms = $wp_filesystem->getchmod(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path)); |
|
181 | + if ($perms) { |
|
182 | 182 | // file permissions exist, but way be set incorrectly |
183 | - $type_of_file = ! empty( $type_of_file ) ? $type_of_file . ' ' : ''; |
|
184 | - $type_of_file .= ! empty( $type_of_file ) ? 'file' : 'folder'; |
|
183 | + $type_of_file = ! empty($type_of_file) ? $type_of_file.' ' : ''; |
|
184 | + $type_of_file .= ! empty($type_of_file) ? 'file' : 'folder'; |
|
185 | 185 | return sprintf( |
186 | - __( 'File permissions for the requested %1$s are currently set at "%2$s". The recommended permissions are 644 for files and 755 for folders.', 'event_espresso' ), |
|
186 | + __('File permissions for the requested %1$s are currently set at "%2$s". The recommended permissions are 644 for files and 755 for folders.', 'event_espresso'), |
|
187 | 187 | $type_of_file, |
188 | 188 | $perms |
189 | 189 | ); |
190 | 190 | } else { |
191 | 191 | // file exists but file permissions could not be read ?!?! |
192 | 192 | return sprintf( |
193 | - __( 'Please ensure that the server and/or PHP configuration allows the current process to access the following file: "%s".', 'event_espresso' ), |
|
193 | + __('Please ensure that the server and/or PHP configuration allows the current process to access the following file: "%s".', 'event_espresso'), |
|
194 | 194 | $full_file_path |
195 | 195 | ); |
196 | 196 | } |
@@ -208,35 +208,35 @@ discard block |
||
208 | 208 | * can't write to it |
209 | 209 | * @return bool false if folder isn't writable; true if it exists and is writeable, |
210 | 210 | */ |
211 | - public static function ensure_folder_exists_and_is_writable( $folder = '' ){ |
|
212 | - if ( empty( $folder )) { |
|
211 | + public static function ensure_folder_exists_and_is_writable($folder = '') { |
|
212 | + if (empty($folder)) { |
|
213 | 213 | return false; |
214 | 214 | } |
215 | 215 | // remove ending DS |
216 | - $folder = EEH_File::standardise_directory_separators( rtrim( $folder, '/\\' )); |
|
217 | - $parent_folder = EEH_File::get_parent_folder( $folder ); |
|
216 | + $folder = EEH_File::standardise_directory_separators(rtrim($folder, '/\\')); |
|
217 | + $parent_folder = EEH_File::get_parent_folder($folder); |
|
218 | 218 | // add DS to folder |
219 | - $folder = EEH_File::end_with_directory_separator( $folder ); |
|
220 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $folder ); |
|
221 | - if ( ! $wp_filesystem->is_dir( EEH_File::convert_local_filepath_to_remote_filepath( $folder ) ) ) { |
|
219 | + $folder = EEH_File::end_with_directory_separator($folder); |
|
220 | + $wp_filesystem = EEH_File::_get_wp_filesystem($folder); |
|
221 | + if ( ! $wp_filesystem->is_dir(EEH_File::convert_local_filepath_to_remote_filepath($folder))) { |
|
222 | 222 | //ok so it doesn't exist. Does its parent? Can we write to it? |
223 | - if( ! EEH_File::ensure_folder_exists_and_is_writable( $parent_folder ) ) { |
|
223 | + if ( ! EEH_File::ensure_folder_exists_and_is_writable($parent_folder)) { |
|
224 | 224 | return false; |
225 | 225 | } |
226 | - if ( ! EEH_File::verify_is_writable( $parent_folder, 'folder' )) { |
|
226 | + if ( ! EEH_File::verify_is_writable($parent_folder, 'folder')) { |
|
227 | 227 | return false; |
228 | 228 | } else { |
229 | - if ( ! $wp_filesystem->mkdir( EEH_File::convert_local_filepath_to_remote_filepath( $folder ) ) ) { |
|
230 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
231 | - $msg = sprintf( __( '"%s" could not be created.', 'event_espresso' ), $folder ); |
|
232 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $folder ); |
|
233 | - throw new EE_Error( $msg ); |
|
229 | + if ( ! $wp_filesystem->mkdir(EEH_File::convert_local_filepath_to_remote_filepath($folder))) { |
|
230 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
231 | + $msg = sprintf(__('"%s" could not be created.', 'event_espresso'), $folder); |
|
232 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($folder); |
|
233 | + throw new EE_Error($msg); |
|
234 | 234 | } |
235 | 235 | return false; |
236 | 236 | } |
237 | - EEH_File::add_index_file( $folder ); |
|
237 | + EEH_File::add_index_file($folder); |
|
238 | 238 | } |
239 | - } elseif ( ! EEH_File::verify_is_writable( $folder, 'folder' )) { |
|
239 | + } elseif ( ! EEH_File::verify_is_writable($folder, 'folder')) { |
|
240 | 240 | return false; |
241 | 241 | } |
242 | 242 | return true; |
@@ -251,15 +251,15 @@ discard block |
||
251 | 251 | * @throws EE_Error if filesystem credentials are required |
252 | 252 | * @return bool |
253 | 253 | */ |
254 | - public static function verify_is_writable( $full_path = '', $file_or_folder = 'folder' ){ |
|
254 | + public static function verify_is_writable($full_path = '', $file_or_folder = 'folder') { |
|
255 | 255 | // load WP_Filesystem and set file permissions |
256 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_path ); |
|
257 | - $full_path = EEH_File::standardise_directory_separators( $full_path ); |
|
258 | - if ( ! $wp_filesystem->is_writable( EEH_File::convert_local_filepath_to_remote_filepath( $full_path ) ) ) { |
|
259 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
260 | - $msg = sprintf( __( 'The "%1$s" %2$s is not writable.', 'event_espresso' ), $full_path, $file_or_folder ); |
|
261 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_path ); |
|
262 | - throw new EE_Error( $msg ); |
|
256 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_path); |
|
257 | + $full_path = EEH_File::standardise_directory_separators($full_path); |
|
258 | + if ( ! $wp_filesystem->is_writable(EEH_File::convert_local_filepath_to_remote_filepath($full_path))) { |
|
259 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
260 | + $msg = sprintf(__('The "%1$s" %2$s is not writable.', 'event_espresso'), $full_path, $file_or_folder); |
|
261 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_path); |
|
262 | + throw new EE_Error($msg); |
|
263 | 263 | } |
264 | 264 | return FALSE; |
265 | 265 | } |
@@ -276,25 +276,25 @@ discard block |
||
276 | 276 | * @throws EE_Error if filesystem credentials are required |
277 | 277 | * @return bool |
278 | 278 | */ |
279 | - public static function ensure_file_exists_and_is_writable( $full_file_path = '' ) { |
|
279 | + public static function ensure_file_exists_and_is_writable($full_file_path = '') { |
|
280 | 280 | // load WP_Filesystem and set file permissions |
281 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
282 | - $full_file_path = EEH_File::standardise_directory_separators( $full_file_path ); |
|
283 | - $parent_folder = EEH_File::get_parent_folder( $full_file_path ); |
|
284 | - if ( ! EEH_File::exists( $full_file_path )) { |
|
285 | - if( ! EEH_File::ensure_folder_exists_and_is_writable( $parent_folder ) ) { |
|
281 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
282 | + $full_file_path = EEH_File::standardise_directory_separators($full_file_path); |
|
283 | + $parent_folder = EEH_File::get_parent_folder($full_file_path); |
|
284 | + if ( ! EEH_File::exists($full_file_path)) { |
|
285 | + if ( ! EEH_File::ensure_folder_exists_and_is_writable($parent_folder)) { |
|
286 | 286 | return false; |
287 | 287 | } |
288 | - if ( ! $wp_filesystem->touch( EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ) ) ) { |
|
289 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
290 | - $msg = sprintf( __( 'The "%s" file could not be created.', 'event_espresso' ), $full_file_path ); |
|
291 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_file_path ); |
|
292 | - throw new EE_Error( $msg ); |
|
288 | + if ( ! $wp_filesystem->touch(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path))) { |
|
289 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
290 | + $msg = sprintf(__('The "%s" file could not be created.', 'event_espresso'), $full_file_path); |
|
291 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_file_path); |
|
292 | + throw new EE_Error($msg); |
|
293 | 293 | } |
294 | 294 | return false; |
295 | 295 | } |
296 | 296 | } |
297 | - if ( ! EEH_File::verify_is_writable( $full_file_path, 'file' )) { |
|
297 | + if ( ! EEH_File::verify_is_writable($full_file_path, 'file')) { |
|
298 | 298 | return false; |
299 | 299 | } |
300 | 300 | return true; |
@@ -306,7 +306,7 @@ discard block |
||
306 | 306 | * @param string $file_or_folder_path |
307 | 307 | * @return string parent folder, ENDING with a directory separator |
308 | 308 | */ |
309 | - public static function get_parent_folder( $file_or_folder_path ) { |
|
309 | + public static function get_parent_folder($file_or_folder_path) { |
|
310 | 310 | //find the last DS, ignoring a DS on the very end |
311 | 311 | //eg if given "/var/something/somewhere/", we want to get "somewhere"'s |
312 | 312 | //parent folder, "/var/something/" |
@@ -328,12 +328,12 @@ discard block |
||
328 | 328 | * @throws EE_Error if filesystem credentials are required |
329 | 329 | * @return string |
330 | 330 | */ |
331 | - public static function get_file_contents( $full_file_path = '' ){ |
|
332 | - $full_file_path = EEH_File::standardise_directory_separators( $full_file_path ); |
|
333 | - if ( EEH_File::verify_filepath_and_permissions( $full_file_path, EEH_File::get_filename_from_filepath( $full_file_path ) , EEH_File::get_file_extension( $full_file_path ))) { |
|
331 | + public static function get_file_contents($full_file_path = '') { |
|
332 | + $full_file_path = EEH_File::standardise_directory_separators($full_file_path); |
|
333 | + if (EEH_File::verify_filepath_and_permissions($full_file_path, EEH_File::get_filename_from_filepath($full_file_path), EEH_File::get_file_extension($full_file_path))) { |
|
334 | 334 | // load WP_Filesystem and set file permissions |
335 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
336 | - return $wp_filesystem->get_contents(EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ) ); |
|
335 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
336 | + return $wp_filesystem->get_contents(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path)); |
|
337 | 337 | } |
338 | 338 | return ''; |
339 | 339 | } |
@@ -348,26 +348,26 @@ discard block |
||
348 | 348 | * @throws EE_Error if filesystem credentials are required |
349 | 349 | * @return bool |
350 | 350 | */ |
351 | - public static function write_to_file( $full_file_path = '', $file_contents = '', $file_type = '' ){ |
|
352 | - $full_file_path = EEH_File::standardise_directory_separators( $full_file_path ); |
|
353 | - $file_type = ! empty( $file_type ) ? rtrim( $file_type, ' ' ) . ' ' : ''; |
|
354 | - $folder = EEH_File::remove_filename_from_filepath( $full_file_path ); |
|
355 | - if ( ! EEH_File::verify_is_writable( $folder, 'folder' )) { |
|
356 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
357 | - $msg = sprintf( __( 'The %1$sfile located at "%2$s" is not writable.', 'event_espresso' ), $file_type, $full_file_path ); |
|
358 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_file_path ); |
|
359 | - throw new EE_Error( $msg ); |
|
351 | + public static function write_to_file($full_file_path = '', $file_contents = '', $file_type = '') { |
|
352 | + $full_file_path = EEH_File::standardise_directory_separators($full_file_path); |
|
353 | + $file_type = ! empty($file_type) ? rtrim($file_type, ' ').' ' : ''; |
|
354 | + $folder = EEH_File::remove_filename_from_filepath($full_file_path); |
|
355 | + if ( ! EEH_File::verify_is_writable($folder, 'folder')) { |
|
356 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
357 | + $msg = sprintf(__('The %1$sfile located at "%2$s" is not writable.', 'event_espresso'), $file_type, $full_file_path); |
|
358 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_file_path); |
|
359 | + throw new EE_Error($msg); |
|
360 | 360 | } |
361 | 361 | return FALSE; |
362 | 362 | } |
363 | 363 | // load WP_Filesystem and set file permissions |
364 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
364 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
365 | 365 | // write the file |
366 | - if ( ! $wp_filesystem->put_contents(EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ), $file_contents )) { |
|
367 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
368 | - $msg = sprintf( __( 'The %1$sfile located at "%2$s" could not be written to.', 'event_espresso' ), $file_type, $full_file_path ); |
|
369 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_file_path, 'f' ); |
|
370 | - throw new EE_Error( $msg ); |
|
366 | + if ( ! $wp_filesystem->put_contents(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path), $file_contents)) { |
|
367 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
368 | + $msg = sprintf(__('The %1$sfile located at "%2$s" could not be written to.', 'event_espresso'), $file_type, $full_file_path); |
|
369 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_file_path, 'f'); |
|
370 | + throw new EE_Error($msg); |
|
371 | 371 | } |
372 | 372 | return FALSE; |
373 | 373 | } |
@@ -383,9 +383,9 @@ discard block |
||
383 | 383 | * @throws EE_Error if filesystem credentials are required |
384 | 384 | * @return boolean |
385 | 385 | */ |
386 | - public static function delete( $filepath, $recursive = false, $type = false ) { |
|
386 | + public static function delete($filepath, $recursive = false, $type = false) { |
|
387 | 387 | $wp_filesystem = EEH_File::_get_wp_filesystem(); |
388 | - return $wp_filesystem->delete( $filepath, $recursive, $type ) ? TRUE : FALSE; |
|
388 | + return $wp_filesystem->delete($filepath, $recursive, $type) ? TRUE : FALSE; |
|
389 | 389 | } |
390 | 390 | |
391 | 391 | |
@@ -397,9 +397,9 @@ discard block |
||
397 | 397 | * @throws EE_Error if filesystem credentials are required |
398 | 398 | * @return bool |
399 | 399 | */ |
400 | - public static function exists( $full_file_path = '' ) { |
|
401 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
402 | - return $wp_filesystem->exists( EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ) ) ? TRUE : FALSE; |
|
400 | + public static function exists($full_file_path = '') { |
|
401 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
402 | + return $wp_filesystem->exists(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path)) ? TRUE : FALSE; |
|
403 | 403 | } |
404 | 404 | |
405 | 405 | |
@@ -412,9 +412,9 @@ discard block |
||
412 | 412 | * @throws EE_Error if filesystem credentials are required |
413 | 413 | * @return bool |
414 | 414 | */ |
415 | - public static function is_readable( $full_file_path = '' ) { |
|
416 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $full_file_path ); |
|
417 | - if( $wp_filesystem->is_readable( EEH_File::convert_local_filepath_to_remote_filepath( $full_file_path ) ) ) { |
|
415 | + public static function is_readable($full_file_path = '') { |
|
416 | + $wp_filesystem = EEH_File::_get_wp_filesystem($full_file_path); |
|
417 | + if ($wp_filesystem->is_readable(EEH_File::convert_local_filepath_to_remote_filepath($full_file_path))) { |
|
418 | 418 | return true; |
419 | 419 | } else { |
420 | 420 | return false; |
@@ -430,8 +430,8 @@ discard block |
||
430 | 430 | * @param string $full_file_path |
431 | 431 | * @return string |
432 | 432 | */ |
433 | - public static function remove_filename_from_filepath( $full_file_path = '' ) { |
|
434 | - return pathinfo( $full_file_path, PATHINFO_DIRNAME ); |
|
433 | + public static function remove_filename_from_filepath($full_file_path = '') { |
|
434 | + return pathinfo($full_file_path, PATHINFO_DIRNAME); |
|
435 | 435 | } |
436 | 436 | |
437 | 437 | |
@@ -441,8 +441,8 @@ discard block |
||
441 | 441 | * @param string $full_file_path |
442 | 442 | * @return string |
443 | 443 | */ |
444 | - public static function get_filename_from_filepath( $full_file_path = '' ) { |
|
445 | - return pathinfo( $full_file_path, PATHINFO_BASENAME ); |
|
444 | + public static function get_filename_from_filepath($full_file_path = '') { |
|
445 | + return pathinfo($full_file_path, PATHINFO_BASENAME); |
|
446 | 446 | } |
447 | 447 | |
448 | 448 | |
@@ -452,8 +452,8 @@ discard block |
||
452 | 452 | * @param string $full_file_path |
453 | 453 | * @return string |
454 | 454 | */ |
455 | - public static function get_file_extension( $full_file_path = '' ) { |
|
456 | - return pathinfo( $full_file_path, PATHINFO_EXTENSION ); |
|
455 | + public static function get_file_extension($full_file_path = '') { |
|
456 | + return pathinfo($full_file_path, PATHINFO_EXTENSION); |
|
457 | 457 | } |
458 | 458 | |
459 | 459 | |
@@ -464,10 +464,10 @@ discard block |
||
464 | 464 | * @throws EE_Error if filesystem credentials are required |
465 | 465 | * @return bool |
466 | 466 | */ |
467 | - public static function add_htaccess_deny_from_all( $folder = '' ) { |
|
468 | - $folder = EEH_File::standardise_and_end_with_directory_separator( $folder ); |
|
469 | - if ( ! EEH_File::exists( $folder . '.htaccess' ) ) { |
|
470 | - if ( ! EEH_File::write_to_file( $folder . '.htaccess', 'deny from all', '.htaccess' )) { |
|
467 | + public static function add_htaccess_deny_from_all($folder = '') { |
|
468 | + $folder = EEH_File::standardise_and_end_with_directory_separator($folder); |
|
469 | + if ( ! EEH_File::exists($folder.'.htaccess')) { |
|
470 | + if ( ! EEH_File::write_to_file($folder.'.htaccess', 'deny from all', '.htaccess')) { |
|
471 | 471 | return FALSE; |
472 | 472 | } |
473 | 473 | } |
@@ -481,10 +481,10 @@ discard block |
||
481 | 481 | * @throws EE_Error if filesystem credentials are required |
482 | 482 | * @return boolean |
483 | 483 | */ |
484 | - public static function add_index_file( $folder ) { |
|
485 | - $folder = EEH_File::standardise_and_end_with_directory_separator( $folder ); |
|
486 | - if ( ! EEH_File::exists( $folder . 'index.php' ) ) { |
|
487 | - if ( ! EEH_File::write_to_file( $folder . 'index.php', 'You are not permitted to read from this folder', '.php' )) { |
|
484 | + public static function add_index_file($folder) { |
|
485 | + $folder = EEH_File::standardise_and_end_with_directory_separator($folder); |
|
486 | + if ( ! EEH_File::exists($folder.'index.php')) { |
|
487 | + if ( ! EEH_File::write_to_file($folder.'index.php', 'You are not permitted to read from this folder', '.php')) { |
|
488 | 488 | return false; |
489 | 489 | } |
490 | 490 | } |
@@ -499,11 +499,11 @@ discard block |
||
499 | 499 | * @param string $file_path |
500 | 500 | * @return string |
501 | 501 | */ |
502 | - public static function get_classname_from_filepath_with_standard_filename( $file_path ){ |
|
502 | + public static function get_classname_from_filepath_with_standard_filename($file_path) { |
|
503 | 503 | //extract file from path |
504 | - $filename = basename( $file_path ); |
|
504 | + $filename = basename($file_path); |
|
505 | 505 | //now remove the first period and everything after |
506 | - $pos_of_first_period = strpos( $filename,'.' ); |
|
506 | + $pos_of_first_period = strpos($filename, '.'); |
|
507 | 507 | return substr($filename, 0, $pos_of_first_period); |
508 | 508 | } |
509 | 509 | |
@@ -515,8 +515,8 @@ discard block |
||
515 | 515 | * @param string $file_path |
516 | 516 | * @return string |
517 | 517 | */ |
518 | - public static function standardise_directory_separators( $file_path ){ |
|
519 | - return str_replace( array( '\\', '/' ), DS, $file_path ); |
|
518 | + public static function standardise_directory_separators($file_path) { |
|
519 | + return str_replace(array('\\', '/'), DS, $file_path); |
|
520 | 520 | } |
521 | 521 | |
522 | 522 | |
@@ -527,8 +527,8 @@ discard block |
||
527 | 527 | * @param string $file_path |
528 | 528 | * @return string |
529 | 529 | */ |
530 | - public static function end_with_directory_separator( $file_path ){ |
|
531 | - return rtrim( $file_path, '/\\' ) . DS; |
|
530 | + public static function end_with_directory_separator($file_path) { |
|
531 | + return rtrim($file_path, '/\\').DS; |
|
532 | 532 | } |
533 | 533 | |
534 | 534 | |
@@ -538,8 +538,8 @@ discard block |
||
538 | 538 | * @param $file_path |
539 | 539 | * @return string |
540 | 540 | */ |
541 | - public static function standardise_and_end_with_directory_separator( $file_path ){ |
|
542 | - return self::end_with_directory_separator( self::standardise_directory_separators( $file_path )); |
|
541 | + public static function standardise_and_end_with_directory_separator($file_path) { |
|
542 | + return self::end_with_directory_separator(self::standardise_directory_separators($file_path)); |
|
543 | 543 | } |
544 | 544 | |
545 | 545 | |
@@ -556,21 +556,21 @@ discard block |
||
556 | 556 | * if $index_numerically == FALSE (Default) keys are what the class names SHOULD be; |
557 | 557 | * and values are their filepaths |
558 | 558 | */ |
559 | - public static function get_contents_of_folders( $folder_paths = array(), $index_numerically = FALSE ){ |
|
559 | + public static function get_contents_of_folders($folder_paths = array(), $index_numerically = FALSE) { |
|
560 | 560 | $class_to_folder_path = array(); |
561 | - foreach( $folder_paths as $folder_path ){ |
|
562 | - $folder_path = self::standardise_and_end_with_directory_separator( $folder_path ); |
|
561 | + foreach ($folder_paths as $folder_path) { |
|
562 | + $folder_path = self::standardise_and_end_with_directory_separator($folder_path); |
|
563 | 563 | // load WP_Filesystem and set file permissions |
564 | - $files_in_folder = glob( $folder_path . '*' ); |
|
564 | + $files_in_folder = glob($folder_path.'*'); |
|
565 | 565 | $class_to_folder_path = array(); |
566 | - if ( $files_in_folder ) { |
|
567 | - foreach( $files_in_folder as $file_path ){ |
|
566 | + if ($files_in_folder) { |
|
567 | + foreach ($files_in_folder as $file_path) { |
|
568 | 568 | //only add files, not folders |
569 | - if ( ! is_dir( $file_path )) { |
|
570 | - if ( $index_numerically ) { |
|
569 | + if ( ! is_dir($file_path)) { |
|
570 | + if ($index_numerically) { |
|
571 | 571 | $class_to_folder_path[] = $file_path; |
572 | 572 | } else { |
573 | - $classname = self::get_classname_from_filepath_with_standard_filename( $file_path ); |
|
573 | + $classname = self::get_classname_from_filepath_with_standard_filename($file_path); |
|
574 | 574 | $class_to_folder_path[$classname] = $file_path; |
575 | 575 | } |
576 | 576 | } |
@@ -590,39 +590,39 @@ discard block |
||
590 | 590 | * @throws EE_Error if filesystem credentials are required |
591 | 591 | * @return boolean success |
592 | 592 | */ |
593 | - public static function copy( $source_file, $destination_file, $overwrite = FALSE ){ |
|
594 | - $full_source_path = EEH_File::standardise_directory_separators( $source_file ); |
|
595 | - if( ! EEH_File::exists( $full_source_path ) ){ |
|
596 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
597 | - $msg = sprintf( __( 'The file located at "%2$s" is not readable or doesn\'t exist.', 'event_espresso' ), $full_source_path ); |
|
598 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_source_path ); |
|
599 | - throw new EE_Error( $msg ); |
|
593 | + public static function copy($source_file, $destination_file, $overwrite = FALSE) { |
|
594 | + $full_source_path = EEH_File::standardise_directory_separators($source_file); |
|
595 | + if ( ! EEH_File::exists($full_source_path)) { |
|
596 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
597 | + $msg = sprintf(__('The file located at "%2$s" is not readable or doesn\'t exist.', 'event_espresso'), $full_source_path); |
|
598 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_source_path); |
|
599 | + throw new EE_Error($msg); |
|
600 | 600 | } |
601 | 601 | return FALSE; |
602 | 602 | } |
603 | 603 | |
604 | - $full_dest_path = EEH_File::standardise_directory_separators( $destination_file ); |
|
605 | - $folder = EEH_File::remove_filename_from_filepath( $full_dest_path ); |
|
606 | - if ( ! EEH_File::verify_is_writable( $folder, 'folder' )) { |
|
607 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
608 | - $msg = sprintf( __( 'The file located at "%2$s" is not writable.', 'event_espresso' ), $full_dest_path ); |
|
609 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_dest_path ); |
|
610 | - throw new EE_Error( $msg ); |
|
604 | + $full_dest_path = EEH_File::standardise_directory_separators($destination_file); |
|
605 | + $folder = EEH_File::remove_filename_from_filepath($full_dest_path); |
|
606 | + if ( ! EEH_File::verify_is_writable($folder, 'folder')) { |
|
607 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
608 | + $msg = sprintf(__('The file located at "%2$s" is not writable.', 'event_espresso'), $full_dest_path); |
|
609 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_dest_path); |
|
610 | + throw new EE_Error($msg); |
|
611 | 611 | } |
612 | 612 | return FALSE; |
613 | 613 | } |
614 | 614 | |
615 | 615 | // load WP_Filesystem and set file permissions |
616 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $destination_file ); |
|
616 | + $wp_filesystem = EEH_File::_get_wp_filesystem($destination_file); |
|
617 | 617 | // write the file |
618 | 618 | if ( ! $wp_filesystem->copy( |
619 | - EEH_File::convert_local_filepath_to_remote_filepath( $full_source_path ), |
|
620 | - EEH_File::convert_local_filepath_to_remote_filepath( $full_dest_path ), |
|
619 | + EEH_File::convert_local_filepath_to_remote_filepath($full_source_path), |
|
620 | + EEH_File::convert_local_filepath_to_remote_filepath($full_dest_path), |
|
621 | 621 | $overwrite )) { |
622 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
|
623 | - $msg = sprintf( __( 'Attempted writing to file %1$s, but could not, probably because of permissions issues', 'event_espresso' ), $full_source_path ); |
|
624 | - $msg .= EEH_File::_permissions_error_for_unreadable_filepath( $full_source_path, 'f' ); |
|
625 | - throw new EE_Error( $msg ); |
|
622 | + if (defined('WP_DEBUG') && WP_DEBUG) { |
|
623 | + $msg = sprintf(__('Attempted writing to file %1$s, but could not, probably because of permissions issues', 'event_espresso'), $full_source_path); |
|
624 | + $msg .= EEH_File::_permissions_error_for_unreadable_filepath($full_source_path, 'f'); |
|
625 | + throw new EE_Error($msg); |
|
626 | 626 | } |
627 | 627 | return FALSE; |
628 | 628 | } |
@@ -634,9 +634,9 @@ discard block |
||
634 | 634 | * @param string $filepath |
635 | 635 | * @return boolean |
636 | 636 | */ |
637 | - public static function is_in_uploads_folder( $filepath ) { |
|
637 | + public static function is_in_uploads_folder($filepath) { |
|
638 | 638 | $uploads = wp_upload_dir(); |
639 | - return strpos( $filepath, $uploads[ 'basedir' ] ) === 0 ? true : false; |
|
639 | + return strpos($filepath, $uploads['basedir']) === 0 ? true : false; |
|
640 | 640 | } |
641 | 641 | |
642 | 642 | /** |
@@ -651,9 +651,9 @@ discard block |
||
651 | 651 | * @return string the remote filepath (eg the filepath the filesystem method, eg |
652 | 652 | * ftp or ssh, will use to access the folder |
653 | 653 | */ |
654 | - public static function convert_local_filepath_to_remote_filepath( $local_filepath ) { |
|
655 | - $wp_filesystem = EEH_File::_get_wp_filesystem( $local_filepath ); |
|
656 | - return str_replace( WP_CONTENT_DIR . DS, $wp_filesystem->wp_content_dir(), $local_filepath ); |
|
654 | + public static function convert_local_filepath_to_remote_filepath($local_filepath) { |
|
655 | + $wp_filesystem = EEH_File::_get_wp_filesystem($local_filepath); |
|
656 | + return str_replace(WP_CONTENT_DIR.DS, $wp_filesystem->wp_content_dir(), $local_filepath); |
|
657 | 657 | } |
658 | 658 | } |
659 | 659 | // End of file EEH_File.helper.php |
@@ -1,4 +1,6 @@ |
||
1 | -<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) exit('No direct script access allowed'); |
|
1 | +<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
2 | + exit('No direct script access allowed'); |
|
3 | +} |
|
2 | 4 | |
3 | 5 | /** |
4 | 6 | * |
@@ -8,7 +8,7 @@ discard block |
||
8 | 8 | * @author Michael Nelson, Brent Christensen |
9 | 9 | * |
10 | 10 | */ |
11 | -class EEM_Payment extends EEM_Base implements EEMI_Payment{ |
|
11 | +class EEM_Payment extends EEM_Base implements EEMI_Payment { |
|
12 | 12 | |
13 | 13 | // private instance of the Payment object |
14 | 14 | protected static $_instance = NULL; |
@@ -56,28 +56,28 @@ discard block |
||
56 | 56 | * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved). Note this just sends the timezone info to the date time model field objects. Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option) |
57 | 57 | * @return EEM_Payment |
58 | 58 | */ |
59 | - protected function __construct( $timezone ) { |
|
59 | + protected function __construct($timezone) { |
|
60 | 60 | |
61 | - $this->singular_item = __('Payment','event_espresso'); |
|
62 | - $this->plural_item = __('Payments','event_espresso'); |
|
61 | + $this->singular_item = __('Payment', 'event_espresso'); |
|
62 | + $this->plural_item = __('Payments', 'event_espresso'); |
|
63 | 63 | |
64 | 64 | $this->_tables = array( |
65 | - 'Payment'=>new EE_Primary_Table('esp_payment','PAY_ID') |
|
65 | + 'Payment'=>new EE_Primary_Table('esp_payment', 'PAY_ID') |
|
66 | 66 | ); |
67 | 67 | $this->_fields = array( |
68 | 68 | 'Payment'=>array( |
69 | - 'PAY_ID'=>new EE_Primary_Key_Int_Field('PAY_ID', __('Payment ID','event_espresso')), |
|
70 | - 'TXN_ID'=>new EE_Foreign_Key_Int_Field('TXN_ID', __('Transaction ID','event_espresso'), false, 0, 'Transaction'), |
|
71 | - 'STS_ID'=>new EE_Foreign_Key_String_Field('STS_ID', __('Status ID','event_espresso'), false, EEM_Payment::status_id_failed, 'Status'), |
|
72 | - 'PAY_timestamp'=> new EE_Datetime_Field('PAY_timestamp', __('Timestamp of when payment was attempted','event_espresso'), false, EE_Datetime_Field::now, $timezone ), |
|
73 | - 'PAY_source'=>new EE_All_Caps_Text_Field('PAY_source', __('User-friendly description of payment','event_espresso'), false, 'CART'), |
|
74 | - 'PAY_amount'=>new EE_Money_Field('PAY_amount', __('Amount Payment should be for','event_espresso'), false, 0), |
|
69 | + 'PAY_ID'=>new EE_Primary_Key_Int_Field('PAY_ID', __('Payment ID', 'event_espresso')), |
|
70 | + 'TXN_ID'=>new EE_Foreign_Key_Int_Field('TXN_ID', __('Transaction ID', 'event_espresso'), false, 0, 'Transaction'), |
|
71 | + 'STS_ID'=>new EE_Foreign_Key_String_Field('STS_ID', __('Status ID', 'event_espresso'), false, EEM_Payment::status_id_failed, 'Status'), |
|
72 | + 'PAY_timestamp'=> new EE_Datetime_Field('PAY_timestamp', __('Timestamp of when payment was attempted', 'event_espresso'), false, EE_Datetime_Field::now, $timezone), |
|
73 | + 'PAY_source'=>new EE_All_Caps_Text_Field('PAY_source', __('User-friendly description of payment', 'event_espresso'), false, 'CART'), |
|
74 | + 'PAY_amount'=>new EE_Money_Field('PAY_amount', __('Amount Payment should be for', 'event_espresso'), false, 0), |
|
75 | 75 | 'PMD_ID'=>new EE_Foreign_Key_Int_Field('PMD_ID', __("Payment Method ID", 'event_espresso'), false, NULL, 'Payment_Method'), |
76 | - 'PAY_gateway_response'=>new EE_Plain_Text_Field('PAY_gateway_response', __('Response from Gateway about the payment','event_espresso'), false, ''), |
|
77 | - 'PAY_txn_id_chq_nmbr'=>new EE_Plain_Text_Field('PAY_txn_id_chq_nmbr', __('Gateway Transaction ID or Cheque Number','event_espresso'), true, ''), |
|
78 | - 'PAY_po_number'=>new EE_Plain_Text_Field('PAY_po_number', __('Purchase or Sales Number','event_espresso'), true, ''), |
|
79 | - 'PAY_extra_accntng'=>new EE_Simple_HTML_Field('PAY_extra_accntng', __('Extra Account Info','event_espresso'), true, ''), |
|
80 | - 'PAY_details'=>new EE_Serialized_Text_Field('PAY_details', __('Full Gateway response about payment','event_espresso'), true, ''), |
|
76 | + 'PAY_gateway_response'=>new EE_Plain_Text_Field('PAY_gateway_response', __('Response from Gateway about the payment', 'event_espresso'), false, ''), |
|
77 | + 'PAY_txn_id_chq_nmbr'=>new EE_Plain_Text_Field('PAY_txn_id_chq_nmbr', __('Gateway Transaction ID or Cheque Number', 'event_espresso'), true, ''), |
|
78 | + 'PAY_po_number'=>new EE_Plain_Text_Field('PAY_po_number', __('Purchase or Sales Number', 'event_espresso'), true, ''), |
|
79 | + 'PAY_extra_accntng'=>new EE_Simple_HTML_Field('PAY_extra_accntng', __('Extra Account Info', 'event_espresso'), true, ''), |
|
80 | + 'PAY_details'=>new EE_Serialized_Text_Field('PAY_details', __('Full Gateway response about payment', 'event_espresso'), true, ''), |
|
81 | 81 | 'PAY_redirect_url'=>new EE_Plain_Text_Field('PAY_redirect_url', __("Redirect URL", 'event_espresso'), true), |
82 | 82 | 'PAY_redirect_args'=>new EE_Serialized_Text_Field('PAY_redirect_args', __("Key-Value POST vars to send along with redirect", 'event_espresso'), true) |
83 | 83 | ) |
@@ -87,11 +87,11 @@ discard block |
||
87 | 87 | 'Status'=> new EE_Belongs_To_Relation(), |
88 | 88 | 'Payment_Method'=>new EE_Belongs_To_Relation(), |
89 | 89 | 'Registration_Payment' => new EE_Has_Many_Relation(), |
90 | - 'Registration' => new EE_HABTM_Relation( 'Registration_Payment' ), |
|
90 | + 'Registration' => new EE_HABTM_Relation('Registration_Payment'), |
|
91 | 91 | ); |
92 | 92 | $this->_model_chain_to_wp_user = 'Payment_Method'; |
93 | 93 | $this->_caps_slug = 'transactions'; |
94 | - parent::__construct( $timezone ); |
|
94 | + parent::__construct($timezone); |
|
95 | 95 | } |
96 | 96 | |
97 | 97 | |
@@ -103,7 +103,7 @@ discard block |
||
103 | 103 | * @param string $PAY_txn_id_chq_nmbr |
104 | 104 | * @return EE_Payment |
105 | 105 | */ |
106 | - public function get_payment_by_txn_id_chq_nmbr( $PAY_txn_id_chq_nmbr ){ |
|
106 | + public function get_payment_by_txn_id_chq_nmbr($PAY_txn_id_chq_nmbr) { |
|
107 | 107 | return $this->get_one(array(array('PAY_txn_id_chq_nmbr'=>$PAY_txn_id_chq_nmbr))); |
108 | 108 | } |
109 | 109 | |
@@ -119,15 +119,15 @@ discard block |
||
119 | 119 | * @param string $status_of_payment one of EEM_Payment::status_id_*, like 'PAP','PCN',etc. If none is provided, gets payments with any status |
120 | 120 | * @return EE_Payment[] |
121 | 121 | */ |
122 | - public function get_payments_for_transaction( $TXN_ID = FALSE, $status_of_payment = null ) { |
|
122 | + public function get_payments_for_transaction($TXN_ID = FALSE, $status_of_payment = null) { |
|
123 | 123 | // all payments for a TXN ordered chronologically |
124 | - $query_params = array( array( 'TXN_ID' => $TXN_ID ), 'order_by' => array( 'PAY_timestamp' => 'ASC' )); |
|
124 | + $query_params = array(array('TXN_ID' => $TXN_ID), 'order_by' => array('PAY_timestamp' => 'ASC')); |
|
125 | 125 | // if provided with a status, search specifically for that status. Otherwise get them all |
126 | - if ( $status_of_payment ){ |
|
126 | + if ($status_of_payment) { |
|
127 | 127 | $query_params[0]['STS_ID'] = $status_of_payment; |
128 | 128 | } |
129 | 129 | // retrieve payments |
130 | - return $this->get_all ( $query_params ); |
|
130 | + return $this->get_all($query_params); |
|
131 | 131 | } |
132 | 132 | |
133 | 133 | |
@@ -137,8 +137,8 @@ discard block |
||
137 | 137 | * @param int $TXN_ID |
138 | 138 | * @return EE_Payment[] |
139 | 139 | */ |
140 | - public function get_approved_payments_for_transaction( $TXN_ID = 0 ) { |
|
141 | - return $this->get_payments_for_transaction( $TXN_ID, EEM_Payment::status_id_approved ); |
|
140 | + public function get_approved_payments_for_transaction($TXN_ID = 0) { |
|
141 | + return $this->get_payments_for_transaction($TXN_ID, EEM_Payment::status_id_approved); |
|
142 | 142 | |
143 | 143 | } |
144 | 144 | |
@@ -159,36 +159,36 @@ discard block |
||
159 | 159 | * |
160 | 160 | * @return EE_Payment[] |
161 | 161 | */ |
162 | - public function get_payments_made_between_dates( $start_date = '', $end_date = '', $format = '', $timezone = '' ) { |
|
163 | - $timezone = empty( $timezone ) ? EEH_DTT_Helper::get_timezone() : $timezone; |
|
162 | + public function get_payments_made_between_dates($start_date = '', $end_date = '', $format = '', $timezone = '') { |
|
163 | + $timezone = empty($timezone) ? EEH_DTT_Helper::get_timezone() : $timezone; |
|
164 | 164 | //if $start_date or $end date, verify $format is included. |
165 | - if ( ( ! empty( $start_date ) || ! empty( $end_date ) ) && empty( $format ) ) { |
|
166 | - throw new EE_Error( __('You included a start date and/or a end date for this method but did not include a format string. The format string is needed for setting up the query', 'event_espresso' ) ); |
|
165 | + if (( ! empty($start_date) || ! empty($end_date)) && empty($format)) { |
|
166 | + throw new EE_Error(__('You included a start date and/or a end date for this method but did not include a format string. The format string is needed for setting up the query', 'event_espresso')); |
|
167 | 167 | } |
168 | - $now = new DateTime( 'now' ); |
|
168 | + $now = new DateTime('now'); |
|
169 | 169 | // setup timezone objects once |
170 | - $modelDateTimeZone = new DateTimeZone( $this->_timezone ); |
|
171 | - $passedDateTimeZone = new DateTimeZone( $timezone ); |
|
170 | + $modelDateTimeZone = new DateTimeZone($this->_timezone); |
|
171 | + $passedDateTimeZone = new DateTimeZone($timezone); |
|
172 | 172 | // setup start date |
173 | - $start_date = ! empty( $start_date ) ? date_create_from_format( $format, $start_date, $passedDateTimeZone ) : $now; |
|
174 | - $start_date->setTimeZone( $modelDateTimeZone ); |
|
175 | - $start_date = $start_date->format( 'Y-m-d' ) . ' 00:00:00'; |
|
176 | - $start_date = strtotime( $start_date ); |
|
173 | + $start_date = ! empty($start_date) ? date_create_from_format($format, $start_date, $passedDateTimeZone) : $now; |
|
174 | + $start_date->setTimeZone($modelDateTimeZone); |
|
175 | + $start_date = $start_date->format('Y-m-d').' 00:00:00'; |
|
176 | + $start_date = strtotime($start_date); |
|
177 | 177 | // setup end date |
178 | - $end_date = ! empty( $end_date ) ? date_create_from_format( $format, $end_date, $passedDateTimeZone ) : $now; |
|
179 | - $end_date->setTimeZone( $modelDateTimeZone ); |
|
180 | - $end_date = $end_date->format('Y-m-d') . ' 23:59:59'; |
|
181 | - $end_date = strtotime( $end_date ); |
|
178 | + $end_date = ! empty($end_date) ? date_create_from_format($format, $end_date, $passedDateTimeZone) : $now; |
|
179 | + $end_date->setTimeZone($modelDateTimeZone); |
|
180 | + $end_date = $end_date->format('Y-m-d').' 23:59:59'; |
|
181 | + $end_date = strtotime($end_date); |
|
182 | 182 | |
183 | 183 | // make sure our start date is the lowest value and vice versa |
184 | - $start = min( $start_date, $end_date ); |
|
185 | - $end = max( $start_date, $end_date ); |
|
184 | + $start = min($start_date, $end_date); |
|
185 | + $end = max($start_date, $end_date); |
|
186 | 186 | |
187 | 187 | //yes we generated the date and time string in utc but we WANT this start date and time used in the set timezone on the model. |
188 | - $start_date = $this->convert_datetime_for_query( 'PAY_timestamp', date( 'Y-m-d', $start ) . ' 00:00:00', 'Y-m-d H:i:s', $this->get_timezone() ); |
|
189 | - $end_date = $this->convert_datetime_for_query( 'PAY_timestamp', date( 'Y-m-d', $end) . ' 23:59:59' , 'Y-m-d H:i:s', $this->get_timezone() ); |
|
188 | + $start_date = $this->convert_datetime_for_query('PAY_timestamp', date('Y-m-d', $start).' 00:00:00', 'Y-m-d H:i:s', $this->get_timezone()); |
|
189 | + $end_date = $this->convert_datetime_for_query('PAY_timestamp', date('Y-m-d', $end).' 23:59:59', 'Y-m-d H:i:s', $this->get_timezone()); |
|
190 | 190 | |
191 | - return $this->get_all(array(array('PAY_timestamp'=>array('>=',$start_date),'PAY_timestamp*'=>array('<=',$end_date)))); |
|
191 | + return $this->get_all(array(array('PAY_timestamp'=>array('>=', $start_date), 'PAY_timestamp*'=>array('<=', $end_date)))); |
|
192 | 192 | } |
193 | 193 | |
194 | 194 | /** |
@@ -198,35 +198,35 @@ discard block |
||
198 | 198 | * returns a string for the approved status |
199 | 199 | * @return string |
200 | 200 | */ |
201 | - function approved_status(){ |
|
201 | + function approved_status() { |
|
202 | 202 | return self::status_id_approved; |
203 | 203 | } |
204 | 204 | /** |
205 | 205 | * returns a string for the pending status |
206 | 206 | * @return string |
207 | 207 | */ |
208 | - function pending_status(){ |
|
208 | + function pending_status() { |
|
209 | 209 | return self::status_id_pending; |
210 | 210 | } |
211 | 211 | /** |
212 | 212 | * returns a string for the cancelled status |
213 | 213 | * @return string |
214 | 214 | */ |
215 | - function cancelled_status(){ |
|
215 | + function cancelled_status() { |
|
216 | 216 | return self::status_id_cancelled; |
217 | 217 | } |
218 | 218 | /** |
219 | 219 | * returns a string for the failed status |
220 | 220 | * @return string |
221 | 221 | */ |
222 | - function failed_status(){ |
|
222 | + function failed_status() { |
|
223 | 223 | return self::status_id_failed; |
224 | 224 | } |
225 | 225 | /** |
226 | 226 | * returns a string for the declined status |
227 | 227 | * @return string |
228 | 228 | */ |
229 | - function declined_status(){ |
|
229 | + function declined_status() { |
|
230 | 230 | return self::status_id_declined; |
231 | 231 | } |
232 | 232 |
@@ -1,4 +1,6 @@ |
||
1 | -<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) exit('No direct script access allowed'); |
|
1 | +<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
2 | + exit('No direct script access allowed'); |
|
3 | +} |
|
2 | 4 | /** |
3 | 5 | * |
4 | 6 | * Payment Model |
@@ -34,17 +34,16 @@ discard block |
||
34 | 34 | |
35 | 35 | |
36 | 36 | |
37 | - /** |
|
38 | - * Add an EE_Middleware class to the beginning of the middleware_stack |
|
39 | - * First parameter is the middleware classname, |
|
40 | - * any number of arguments can also be passed, and detected via func_get_args() |
|
41 | - |
|
42 | - * @ param $class_name |
|
43 | - * @ param $args |
|
44 | - * |
|
45 | - * @return EE_Request_Stack_Builder |
|
46 | - * @throws \InvalidArgumentException |
|
47 | - */ |
|
37 | + /** |
|
38 | + * Add an EE_Middleware class to the beginning of the middleware_stack |
|
39 | + * First parameter is the middleware classname, |
|
40 | + * any number of arguments can also be passed, and detected via func_get_args() |
|
41 | + * @ param $class_name |
|
42 | + * @ param $args |
|
43 | + * |
|
44 | + * @return EE_Request_Stack_Builder |
|
45 | + * @throws \InvalidArgumentException |
|
46 | + */ |
|
48 | 47 | public function unshift( /*$class_name, $args*/ ) { |
49 | 48 | if ( func_num_args() === 0 ) { |
50 | 49 | throw new InvalidArgumentException( 'Missing argument(s) when calling unshift' ); |
@@ -56,35 +55,34 @@ discard block |
||
56 | 55 | |
57 | 56 | |
58 | 57 | |
59 | - /** |
|
60 | - * Add an EE_Middleware class to the end of the middleware_stack |
|
61 | - * First parameter is the middleware classname, |
|
62 | - * any number of arguments can also be passed, and detected via func_get_args() |
|
63 | - |
|
64 | - * @ param $class_name |
|
65 | - * @ param $args |
|
66 | - * |
|
67 | - * @return EE_Request_Stack_Builder |
|
68 | - * @throws \InvalidArgumentException |
|
69 | - */ |
|
58 | + /** |
|
59 | + * Add an EE_Middleware class to the end of the middleware_stack |
|
60 | + * First parameter is the middleware classname, |
|
61 | + * any number of arguments can also be passed, and detected via func_get_args() |
|
62 | + * @ param $class_name |
|
63 | + * @ param $args |
|
64 | + * |
|
65 | + * @return EE_Request_Stack_Builder |
|
66 | + * @throws \InvalidArgumentException |
|
67 | + */ |
|
70 | 68 | public function push( /*$class_name, $args...*/ ) { |
71 | 69 | if ( func_num_args() === 0 ) { |
72 | 70 | throw new InvalidArgumentException( 'Missing argument(s) when calling push' ); |
73 | 71 | } |
74 | - $middleware = func_get_args(); |
|
75 | - $this->_middleware_stack[] = $middleware; |
|
72 | + $middleware = func_get_args(); |
|
73 | + $this->_middleware_stack[] = $middleware; |
|
76 | 74 | return $this; |
77 | 75 | } |
78 | 76 | |
79 | 77 | |
80 | 78 | |
81 | - /** |
|
82 | - * builds decorated middleware stack |
|
83 | - * by continuously injecting previous middleware app into the next |
|
84 | - * |
|
85 | - * @param EEI_Request_Decorator $application |
|
86 | - * @return EE_Request_Stack |
|
87 | - */ |
|
79 | + /** |
|
80 | + * builds decorated middleware stack |
|
81 | + * by continuously injecting previous middleware app into the next |
|
82 | + * |
|
83 | + * @param EEI_Request_Decorator $application |
|
84 | + * @return EE_Request_Stack |
|
85 | + */ |
|
88 | 86 | public function resolve( EEI_Request_Decorator $application ) { |
89 | 87 | $middlewares = array( $application ); |
90 | 88 | foreach ( $this->_middleware_stack as $middleware_args ) { |
@@ -93,9 +91,9 @@ discard block |
||
93 | 91 | $application = $class_name( $application ); |
94 | 92 | } else { |
95 | 93 | array_unshift( $middleware_args, $application ); |
96 | - $reflection = new ReflectionClass($class_name); |
|
97 | - $application = $reflection->newInstanceArgs($middleware_args); |
|
98 | - } |
|
94 | + $reflection = new ReflectionClass($class_name); |
|
95 | + $application = $reflection->newInstanceArgs($middleware_args); |
|
96 | + } |
|
99 | 97 | array_unshift( $middlewares, $application ); |
100 | 98 | } |
101 | 99 | return new EE_Request_Stack( $application, $middlewares ); |
@@ -46,11 +46,11 @@ discard block |
||
46 | 46 | * @throws \InvalidArgumentException |
47 | 47 | */ |
48 | 48 | public function unshift( /*$class_name, $args*/ ) { |
49 | - if ( func_num_args() === 0 ) { |
|
50 | - throw new InvalidArgumentException( 'Missing argument(s) when calling unshift' ); |
|
49 | + if (func_num_args() === 0) { |
|
50 | + throw new InvalidArgumentException('Missing argument(s) when calling unshift'); |
|
51 | 51 | } |
52 | 52 | $middleware = func_get_args(); |
53 | - array_unshift( $this->_middleware_stack, $middleware ); |
|
53 | + array_unshift($this->_middleware_stack, $middleware); |
|
54 | 54 | return $this; |
55 | 55 | } |
56 | 56 | |
@@ -68,8 +68,8 @@ discard block |
||
68 | 68 | * @throws \InvalidArgumentException |
69 | 69 | */ |
70 | 70 | public function push( /*$class_name, $args...*/ ) { |
71 | - if ( func_num_args() === 0 ) { |
|
72 | - throw new InvalidArgumentException( 'Missing argument(s) when calling push' ); |
|
71 | + if (func_num_args() === 0) { |
|
72 | + throw new InvalidArgumentException('Missing argument(s) when calling push'); |
|
73 | 73 | } |
74 | 74 | $middleware = func_get_args(); |
75 | 75 | $this->_middleware_stack[] = $middleware; |
@@ -85,20 +85,20 @@ discard block |
||
85 | 85 | * @param EEI_Request_Decorator $application |
86 | 86 | * @return EE_Request_Stack |
87 | 87 | */ |
88 | - public function resolve( EEI_Request_Decorator $application ) { |
|
89 | - $middlewares = array( $application ); |
|
90 | - foreach ( $this->_middleware_stack as $middleware_args ) { |
|
91 | - $class_name = array_shift( $middleware_args ); |
|
92 | - if ( is_callable( $class_name ) ) { |
|
93 | - $application = $class_name( $application ); |
|
88 | + public function resolve(EEI_Request_Decorator $application) { |
|
89 | + $middlewares = array($application); |
|
90 | + foreach ($this->_middleware_stack as $middleware_args) { |
|
91 | + $class_name = array_shift($middleware_args); |
|
92 | + if (is_callable($class_name)) { |
|
93 | + $application = $class_name($application); |
|
94 | 94 | } else { |
95 | - array_unshift( $middleware_args, $application ); |
|
95 | + array_unshift($middleware_args, $application); |
|
96 | 96 | $reflection = new ReflectionClass($class_name); |
97 | 97 | $application = $reflection->newInstanceArgs($middleware_args); |
98 | 98 | } |
99 | - array_unshift( $middlewares, $application ); |
|
99 | + array_unshift($middlewares, $application); |
|
100 | 100 | } |
101 | - return new EE_Request_Stack( $application, $middlewares ); |
|
101 | + return new EE_Request_Stack($application, $middlewares); |
|
102 | 102 | } |
103 | 103 | |
104 | 104 |
@@ -218,19 +218,19 @@ discard block |
||
218 | 218 | */ |
219 | 219 | public static function set_definitions() |
220 | 220 | { |
221 | - if(defined('SPCO_BASE_PATH')) { |
|
221 | + if (defined('SPCO_BASE_PATH')) { |
|
222 | 222 | return; |
223 | 223 | } |
224 | 224 | define( |
225 | 225 | 'SPCO_BASE_PATH', |
226 | - rtrim(str_replace(array('\\', '/'), DS, plugin_dir_path(__FILE__)), DS) . DS |
|
226 | + rtrim(str_replace(array('\\', '/'), DS, plugin_dir_path(__FILE__)), DS).DS |
|
227 | 227 | ); |
228 | - define('SPCO_CSS_URL', plugin_dir_url(__FILE__) . 'css' . DS); |
|
229 | - define('SPCO_IMG_URL', plugin_dir_url(__FILE__) . 'img' . DS); |
|
230 | - define('SPCO_JS_URL', plugin_dir_url(__FILE__) . 'js' . DS); |
|
231 | - define('SPCO_INC_PATH', SPCO_BASE_PATH . 'inc' . DS); |
|
232 | - define('SPCO_REG_STEPS_PATH', SPCO_BASE_PATH . 'reg_steps' . DS); |
|
233 | - define('SPCO_TEMPLATES_PATH', SPCO_BASE_PATH . 'templates' . DS); |
|
228 | + define('SPCO_CSS_URL', plugin_dir_url(__FILE__).'css'.DS); |
|
229 | + define('SPCO_IMG_URL', plugin_dir_url(__FILE__).'img'.DS); |
|
230 | + define('SPCO_JS_URL', plugin_dir_url(__FILE__).'js'.DS); |
|
231 | + define('SPCO_INC_PATH', SPCO_BASE_PATH.'inc'.DS); |
|
232 | + define('SPCO_REG_STEPS_PATH', SPCO_BASE_PATH.'reg_steps'.DS); |
|
233 | + define('SPCO_TEMPLATES_PATH', SPCO_BASE_PATH.'templates'.DS); |
|
234 | 234 | EEH_Autoloader::register_autoloaders_for_each_file_in_folder(SPCO_BASE_PATH, true); |
235 | 235 | EE_Registry::$i18n_js_strings['registration_expiration_notice'] = sprintf( |
236 | 236 | __('%1$sWe\'re sorry, but you\'re registration time has expired.%2$s%4$sIf you still wish to complete your registration, please return to the %5$sEvent List%6$sEvent List%7$s and reselect your tickets if available. Please except our apologies for any inconvenience this may have caused.%8$s', |
@@ -239,7 +239,7 @@ discard block |
||
239 | 239 | '</h4>', |
240 | 240 | '<br />', |
241 | 241 | '<p>', |
242 | - '<a href="' . get_post_type_archive_link('espresso_events') . '" title="', |
|
242 | + '<a href="'.get_post_type_archive_link('espresso_events').'" title="', |
|
243 | 243 | '">', |
244 | 244 | '</a>', |
245 | 245 | '</p>' |
@@ -262,7 +262,7 @@ discard block |
||
262 | 262 | return; |
263 | 263 | } |
264 | 264 | // filter list of reg_steps |
265 | - $reg_steps_to_load = (array)apply_filters( |
|
265 | + $reg_steps_to_load = (array) apply_filters( |
|
266 | 266 | 'AHEE__SPCO__load_reg_steps__reg_steps_to_load', |
267 | 267 | EED_Single_Page_Checkout::get_reg_steps() |
268 | 268 | ); |
@@ -314,25 +314,25 @@ discard block |
||
314 | 314 | if (empty($reg_steps)) { |
315 | 315 | $reg_steps = array( |
316 | 316 | 10 => array( |
317 | - 'file_path' => SPCO_REG_STEPS_PATH . 'attendee_information', |
|
317 | + 'file_path' => SPCO_REG_STEPS_PATH.'attendee_information', |
|
318 | 318 | 'class_name' => 'EE_SPCO_Reg_Step_Attendee_Information', |
319 | 319 | 'slug' => 'attendee_information', |
320 | 320 | 'has_hooks' => false, |
321 | 321 | ), |
322 | 322 | 20 => array( |
323 | - 'file_path' => SPCO_REG_STEPS_PATH . 'registration_confirmation', |
|
323 | + 'file_path' => SPCO_REG_STEPS_PATH.'registration_confirmation', |
|
324 | 324 | 'class_name' => 'EE_SPCO_Reg_Step_Registration_Confirmation', |
325 | 325 | 'slug' => 'registration_confirmation', |
326 | 326 | 'has_hooks' => false, |
327 | 327 | ), |
328 | 328 | 30 => array( |
329 | - 'file_path' => SPCO_REG_STEPS_PATH . 'payment_options', |
|
329 | + 'file_path' => SPCO_REG_STEPS_PATH.'payment_options', |
|
330 | 330 | 'class_name' => 'EE_SPCO_Reg_Step_Payment_Options', |
331 | 331 | 'slug' => 'payment_options', |
332 | 332 | 'has_hooks' => true, |
333 | 333 | ), |
334 | 334 | 999 => array( |
335 | - 'file_path' => SPCO_REG_STEPS_PATH . 'finalize_registration', |
|
335 | + 'file_path' => SPCO_REG_STEPS_PATH.'finalize_registration', |
|
336 | 336 | 'class_name' => 'EE_SPCO_Reg_Step_Finalize_Registration', |
337 | 337 | 'slug' => 'finalize_registration', |
338 | 338 | 'has_hooks' => false, |
@@ -516,7 +516,7 @@ discard block |
||
516 | 516 | // DEBUG LOG |
517 | 517 | //$this->checkout->log( __CLASS__, __FUNCTION__, __LINE__ ); |
518 | 518 | // get reg form |
519 | - if( ! $this->_check_form_submission()) { |
|
519 | + if ( ! $this->_check_form_submission()) { |
|
520 | 520 | EED_Single_Page_Checkout::$_initialized = true; |
521 | 521 | return; |
522 | 522 | } |
@@ -557,7 +557,7 @@ discard block |
||
557 | 557 | ); |
558 | 558 | // is session still valid ? |
559 | 559 | if ($clear_session_requested |
560 | - || ( EE_Registry::instance()->SSN->expired() |
|
560 | + || (EE_Registry::instance()->SSN->expired() |
|
561 | 561 | && EE_Registry::instance()->REQ->get('e_reg_url_link', '') === '' |
562 | 562 | ) |
563 | 563 | ) { |
@@ -566,7 +566,7 @@ discard block |
||
566 | 566 | // EE_Registry::instance()->SSN->reset_cart(); |
567 | 567 | // EE_Registry::instance()->SSN->reset_checkout(); |
568 | 568 | // EE_Registry::instance()->SSN->reset_transaction(); |
569 | - if (! $clear_session_requested) { |
|
569 | + if ( ! $clear_session_requested) { |
|
570 | 570 | EE_Error::add_attention( |
571 | 571 | EE_Registry::$i18n_js_strings['registration_expiration_notice'], |
572 | 572 | __FILE__, __FUNCTION__, __LINE__ |
@@ -1121,7 +1121,7 @@ discard block |
||
1121 | 1121 | if ( ! $registration instanceof EE_Registration) { |
1122 | 1122 | throw new InvalidEntityException($registration, 'EE_Registration'); |
1123 | 1123 | } |
1124 | - $registrations[ $registration->ID() ] = $registration; |
|
1124 | + $registrations[$registration->ID()] = $registration; |
|
1125 | 1125 | } |
1126 | 1126 | } |
1127 | 1127 | $registration_processor->fix_reg_final_price_rounding_issue($transaction); |
@@ -1382,7 +1382,7 @@ discard block |
||
1382 | 1382 | ) { |
1383 | 1383 | EE_Error::add_success( |
1384 | 1384 | $this->checkout->current_step->success_message() |
1385 | - . '<br />' . $this->checkout->next_step->_instructions() |
|
1385 | + . '<br />'.$this->checkout->next_step->_instructions() |
|
1386 | 1386 | ); |
1387 | 1387 | } |
1388 | 1388 | // pack it up, pack it in... |
@@ -1507,7 +1507,7 @@ discard block |
||
1507 | 1507 | '</h4>', |
1508 | 1508 | '<br />', |
1509 | 1509 | '<p>', |
1510 | - '<a href="' . get_post_type_archive_link('espresso_events') . '" title="', |
|
1510 | + '<a href="'.get_post_type_archive_link('espresso_events').'" title="', |
|
1511 | 1511 | '">', |
1512 | 1512 | '</a>', |
1513 | 1513 | '</p>' |
@@ -1539,7 +1539,7 @@ discard block |
||
1539 | 1539 | // load css |
1540 | 1540 | wp_register_style( |
1541 | 1541 | 'single_page_checkout', |
1542 | - SPCO_CSS_URL . 'single_page_checkout.css', |
|
1542 | + SPCO_CSS_URL.'single_page_checkout.css', |
|
1543 | 1543 | array('espresso_default'), |
1544 | 1544 | EVENT_ESPRESSO_VERSION |
1545 | 1545 | ); |
@@ -1547,21 +1547,21 @@ discard block |
||
1547 | 1547 | // load JS |
1548 | 1548 | wp_register_script( |
1549 | 1549 | 'jquery_plugin', |
1550 | - EE_THIRD_PARTY_URL . 'jquery .plugin.min.js', |
|
1550 | + EE_THIRD_PARTY_URL.'jquery .plugin.min.js', |
|
1551 | 1551 | array('jquery'), |
1552 | 1552 | '1.0.1', |
1553 | 1553 | true |
1554 | 1554 | ); |
1555 | 1555 | wp_register_script( |
1556 | 1556 | 'jquery_countdown', |
1557 | - EE_THIRD_PARTY_URL . 'jquery .countdown.min.js', |
|
1557 | + EE_THIRD_PARTY_URL.'jquery .countdown.min.js', |
|
1558 | 1558 | array('jquery_plugin'), |
1559 | 1559 | '2.0.2', |
1560 | 1560 | true |
1561 | 1561 | ); |
1562 | 1562 | wp_register_script( |
1563 | 1563 | 'single_page_checkout', |
1564 | - SPCO_JS_URL . 'single_page_checkout.js', |
|
1564 | + SPCO_JS_URL.'single_page_checkout.js', |
|
1565 | 1565 | array('espresso_core', 'underscore', 'ee_form_section_validation', 'jquery_countdown'), |
1566 | 1566 | EVENT_ESPRESSO_VERSION, |
1567 | 1567 | true |
@@ -1584,7 +1584,7 @@ discard block |
||
1584 | 1584 | * AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__attendee_information |
1585 | 1585 | */ |
1586 | 1586 | do_action( |
1587 | - 'AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__' . $this->checkout->current_step->slug(), |
|
1587 | + 'AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__'.$this->checkout->current_step->slug(), |
|
1588 | 1588 | $this |
1589 | 1589 | ); |
1590 | 1590 | } |
@@ -1638,7 +1638,7 @@ discard block |
||
1638 | 1638 | 'layout_strategy' => |
1639 | 1639 | new EE_Template_Layout( |
1640 | 1640 | array( |
1641 | - 'layout_template_file' => SPCO_TEMPLATES_PATH . 'registration_page_wrapper.template.php', |
|
1641 | + 'layout_template_file' => SPCO_TEMPLATES_PATH.'registration_page_wrapper.template.php', |
|
1642 | 1642 | 'template_args' => array( |
1643 | 1643 | 'empty_cart' => $empty_cart, |
1644 | 1644 | 'revisit' => $this->checkout->revisit, |
@@ -1713,7 +1713,7 @@ discard block |
||
1713 | 1713 | ) { |
1714 | 1714 | add_filter( |
1715 | 1715 | 'FHEE__EEH_Template__powered_by_event_espresso__url', |
1716 | - function ($url) { |
|
1716 | + function($url) { |
|
1717 | 1717 | return apply_filters('FHEE__EE_Front_Controller__registration_footer__url', $url); |
1718 | 1718 | } |
1719 | 1719 | ); |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | use EventEspresso\core\exceptions\InvalidEntityException; |
6 | 6 | |
7 | 7 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
8 | - exit('No direct script access allowed'); |
|
8 | + exit('No direct script access allowed'); |
|
9 | 9 | } |
10 | 10 | |
11 | 11 | |
@@ -20,1865 +20,1865 @@ discard block |
||
20 | 20 | class EED_Single_Page_Checkout extends EED_Module |
21 | 21 | { |
22 | 22 | |
23 | - /** |
|
24 | - * $_initialized - has the SPCO controller already been initialized ? |
|
25 | - * |
|
26 | - * @access private |
|
27 | - * @var bool $_initialized |
|
28 | - */ |
|
29 | - private static $_initialized = false; |
|
30 | - |
|
31 | - |
|
32 | - /** |
|
33 | - * $_checkout_verified - is the EE_Checkout verified as correct for this request ? |
|
34 | - * |
|
35 | - * @access private |
|
36 | - * @var bool $_valid_checkout |
|
37 | - */ |
|
38 | - private static $_checkout_verified = true; |
|
39 | - |
|
40 | - /** |
|
41 | - * $_reg_steps_array - holds initial array of reg steps |
|
42 | - * |
|
43 | - * @access private |
|
44 | - * @var array $_reg_steps_array |
|
45 | - */ |
|
46 | - private static $_reg_steps_array = array(); |
|
47 | - |
|
48 | - /** |
|
49 | - * $checkout - EE_Checkout object for handling the properties of the current checkout process |
|
50 | - * |
|
51 | - * @access public |
|
52 | - * @var EE_Checkout $checkout |
|
53 | - */ |
|
54 | - public $checkout; |
|
55 | - |
|
56 | - |
|
57 | - |
|
58 | - /** |
|
59 | - * @return EED_Module|EED_Single_Page_Checkout |
|
60 | - */ |
|
61 | - public static function instance() |
|
62 | - { |
|
63 | - add_filter('EED_Single_Page_Checkout__SPCO_active', '__return_true'); |
|
64 | - return parent::get_instance(__CLASS__); |
|
65 | - } |
|
66 | - |
|
67 | - |
|
68 | - |
|
69 | - /** |
|
70 | - * @return EE_CART |
|
71 | - */ |
|
72 | - public function cart() |
|
73 | - { |
|
74 | - return $this->checkout->cart; |
|
75 | - } |
|
76 | - |
|
77 | - |
|
78 | - |
|
79 | - /** |
|
80 | - * @return EE_Transaction |
|
81 | - */ |
|
82 | - public function transaction() |
|
83 | - { |
|
84 | - return $this->checkout->transaction; |
|
85 | - } |
|
86 | - |
|
87 | - |
|
88 | - |
|
89 | - /** |
|
90 | - * set_hooks - for hooking into EE Core, other modules, etc |
|
91 | - * |
|
92 | - * @access public |
|
93 | - * @return void |
|
94 | - * @throws EE_Error |
|
95 | - */ |
|
96 | - public static function set_hooks() |
|
97 | - { |
|
98 | - EED_Single_Page_Checkout::set_definitions(); |
|
99 | - } |
|
100 | - |
|
101 | - |
|
102 | - |
|
103 | - /** |
|
104 | - * set_hooks_admin - for hooking into EE Admin Core, other modules, etc |
|
105 | - * |
|
106 | - * @access public |
|
107 | - * @return void |
|
108 | - * @throws EE_Error |
|
109 | - */ |
|
110 | - public static function set_hooks_admin() |
|
111 | - { |
|
112 | - EED_Single_Page_Checkout::set_definitions(); |
|
113 | - if ( ! (defined('DOING_AJAX') && DOING_AJAX)) { |
|
114 | - return; |
|
115 | - } |
|
116 | - // going to start an output buffer in case anything gets accidentally output |
|
117 | - // that might disrupt our JSON response |
|
118 | - ob_start(); |
|
119 | - EED_Single_Page_Checkout::load_request_handler(); |
|
120 | - EED_Single_Page_Checkout::load_reg_steps(); |
|
121 | - // set ajax hooks |
|
122 | - add_action('wp_ajax_process_reg_step', array('EED_Single_Page_Checkout', 'process_reg_step')); |
|
123 | - add_action('wp_ajax_nopriv_process_reg_step', array('EED_Single_Page_Checkout', 'process_reg_step')); |
|
124 | - add_action('wp_ajax_display_spco_reg_step', array('EED_Single_Page_Checkout', 'display_reg_step')); |
|
125 | - add_action('wp_ajax_nopriv_display_spco_reg_step', array('EED_Single_Page_Checkout', 'display_reg_step')); |
|
126 | - add_action('wp_ajax_update_reg_step', array('EED_Single_Page_Checkout', 'update_reg_step')); |
|
127 | - add_action('wp_ajax_nopriv_update_reg_step', array('EED_Single_Page_Checkout', 'update_reg_step')); |
|
128 | - } |
|
129 | - |
|
130 | - |
|
131 | - |
|
132 | - /** |
|
133 | - * process ajax request |
|
134 | - * |
|
135 | - * @param string $ajax_action |
|
136 | - * @throws EE_Error |
|
137 | - */ |
|
138 | - public static function process_ajax_request($ajax_action) |
|
139 | - { |
|
140 | - EE_Registry::instance()->REQ->set('action', $ajax_action); |
|
141 | - EED_Single_Page_Checkout::instance()->_initialize(); |
|
142 | - } |
|
143 | - |
|
144 | - |
|
145 | - |
|
146 | - /** |
|
147 | - * ajax display registration step |
|
148 | - * |
|
149 | - * @throws EE_Error |
|
150 | - */ |
|
151 | - public static function display_reg_step() |
|
152 | - { |
|
153 | - EED_Single_Page_Checkout::process_ajax_request('display_spco_reg_step'); |
|
154 | - } |
|
155 | - |
|
156 | - |
|
157 | - |
|
158 | - /** |
|
159 | - * ajax process registration step |
|
160 | - * |
|
161 | - * @throws EE_Error |
|
162 | - */ |
|
163 | - public static function process_reg_step() |
|
164 | - { |
|
165 | - EED_Single_Page_Checkout::process_ajax_request('process_reg_step'); |
|
166 | - } |
|
167 | - |
|
168 | - |
|
169 | - |
|
170 | - /** |
|
171 | - * ajax process registration step |
|
172 | - * |
|
173 | - * @throws EE_Error |
|
174 | - */ |
|
175 | - public static function update_reg_step() |
|
176 | - { |
|
177 | - EED_Single_Page_Checkout::process_ajax_request('update_reg_step'); |
|
178 | - } |
|
179 | - |
|
180 | - |
|
181 | - |
|
182 | - /** |
|
183 | - * update_checkout |
|
184 | - * |
|
185 | - * @access public |
|
186 | - * @return void |
|
187 | - * @throws EE_Error |
|
188 | - */ |
|
189 | - public static function update_checkout() |
|
190 | - { |
|
191 | - EED_Single_Page_Checkout::process_ajax_request('update_checkout'); |
|
192 | - } |
|
193 | - |
|
194 | - |
|
195 | - |
|
196 | - /** |
|
197 | - * load_request_handler |
|
198 | - * |
|
199 | - * @access public |
|
200 | - * @return void |
|
201 | - */ |
|
202 | - public static function load_request_handler() |
|
203 | - { |
|
204 | - // load core Request_Handler class |
|
205 | - if (EE_Registry::instance()->REQ !== null) { |
|
206 | - EE_Registry::instance()->load_core('Request_Handler'); |
|
207 | - } |
|
208 | - } |
|
209 | - |
|
210 | - |
|
211 | - |
|
212 | - /** |
|
213 | - * set_definitions |
|
214 | - * |
|
215 | - * @access public |
|
216 | - * @return void |
|
217 | - * @throws EE_Error |
|
218 | - */ |
|
219 | - public static function set_definitions() |
|
220 | - { |
|
221 | - if(defined('SPCO_BASE_PATH')) { |
|
222 | - return; |
|
223 | - } |
|
224 | - define( |
|
225 | - 'SPCO_BASE_PATH', |
|
226 | - rtrim(str_replace(array('\\', '/'), DS, plugin_dir_path(__FILE__)), DS) . DS |
|
227 | - ); |
|
228 | - define('SPCO_CSS_URL', plugin_dir_url(__FILE__) . 'css' . DS); |
|
229 | - define('SPCO_IMG_URL', plugin_dir_url(__FILE__) . 'img' . DS); |
|
230 | - define('SPCO_JS_URL', plugin_dir_url(__FILE__) . 'js' . DS); |
|
231 | - define('SPCO_INC_PATH', SPCO_BASE_PATH . 'inc' . DS); |
|
232 | - define('SPCO_REG_STEPS_PATH', SPCO_BASE_PATH . 'reg_steps' . DS); |
|
233 | - define('SPCO_TEMPLATES_PATH', SPCO_BASE_PATH . 'templates' . DS); |
|
234 | - EEH_Autoloader::register_autoloaders_for_each_file_in_folder(SPCO_BASE_PATH, true); |
|
235 | - EE_Registry::$i18n_js_strings['registration_expiration_notice'] = sprintf( |
|
236 | - __('%1$sWe\'re sorry, but you\'re registration time has expired.%2$s%4$sIf you still wish to complete your registration, please return to the %5$sEvent List%6$sEvent List%7$s and reselect your tickets if available. Please except our apologies for any inconvenience this may have caused.%8$s', |
|
237 | - 'event_espresso'), |
|
238 | - '<h4 class="important-notice">', |
|
239 | - '</h4>', |
|
240 | - '<br />', |
|
241 | - '<p>', |
|
242 | - '<a href="' . get_post_type_archive_link('espresso_events') . '" title="', |
|
243 | - '">', |
|
244 | - '</a>', |
|
245 | - '</p>' |
|
246 | - ); |
|
247 | - } |
|
248 | - |
|
249 | - |
|
250 | - |
|
251 | - /** |
|
252 | - * load_reg_steps |
|
253 | - * loads and instantiates each reg step based on the EE_Registry::instance()->CFG->registration->reg_steps array |
|
254 | - * |
|
255 | - * @access private |
|
256 | - * @throws EE_Error |
|
257 | - */ |
|
258 | - public static function load_reg_steps() |
|
259 | - { |
|
260 | - static $reg_steps_loaded = false; |
|
261 | - if ($reg_steps_loaded) { |
|
262 | - return; |
|
263 | - } |
|
264 | - // filter list of reg_steps |
|
265 | - $reg_steps_to_load = (array)apply_filters( |
|
266 | - 'AHEE__SPCO__load_reg_steps__reg_steps_to_load', |
|
267 | - EED_Single_Page_Checkout::get_reg_steps() |
|
268 | - ); |
|
269 | - // sort by key (order) |
|
270 | - ksort($reg_steps_to_load); |
|
271 | - // loop through folders |
|
272 | - foreach ($reg_steps_to_load as $order => $reg_step) { |
|
273 | - // we need a |
|
274 | - if (isset($reg_step['file_path'], $reg_step['class_name'], $reg_step['slug'])) { |
|
275 | - // copy over to the reg_steps_array |
|
276 | - EED_Single_Page_Checkout::$_reg_steps_array[$order] = $reg_step; |
|
277 | - // register custom key route for each reg step |
|
278 | - // ie: step=>"slug" - this is the entire reason we load the reg steps array now |
|
279 | - EE_Config::register_route( |
|
280 | - $reg_step['slug'], |
|
281 | - 'EED_Single_Page_Checkout', |
|
282 | - 'run', |
|
283 | - 'step' |
|
284 | - ); |
|
285 | - // add AJAX or other hooks |
|
286 | - if (isset($reg_step['has_hooks']) && $reg_step['has_hooks']) { |
|
287 | - // setup autoloaders if necessary |
|
288 | - if ( ! class_exists($reg_step['class_name'])) { |
|
289 | - EEH_Autoloader::register_autoloaders_for_each_file_in_folder( |
|
290 | - $reg_step['file_path'], |
|
291 | - true |
|
292 | - ); |
|
293 | - } |
|
294 | - if (is_callable($reg_step['class_name'], 'set_hooks')) { |
|
295 | - call_user_func(array($reg_step['class_name'], 'set_hooks')); |
|
296 | - } |
|
297 | - } |
|
298 | - } |
|
299 | - } |
|
300 | - $reg_steps_loaded = true; |
|
301 | - } |
|
302 | - |
|
303 | - |
|
304 | - |
|
305 | - /** |
|
306 | - * get_reg_steps |
|
307 | - * |
|
308 | - * @access public |
|
309 | - * @return array |
|
310 | - */ |
|
311 | - public static function get_reg_steps() |
|
312 | - { |
|
313 | - $reg_steps = EE_Registry::instance()->CFG->registration->reg_steps; |
|
314 | - if (empty($reg_steps)) { |
|
315 | - $reg_steps = array( |
|
316 | - 10 => array( |
|
317 | - 'file_path' => SPCO_REG_STEPS_PATH . 'attendee_information', |
|
318 | - 'class_name' => 'EE_SPCO_Reg_Step_Attendee_Information', |
|
319 | - 'slug' => 'attendee_information', |
|
320 | - 'has_hooks' => false, |
|
321 | - ), |
|
322 | - 20 => array( |
|
323 | - 'file_path' => SPCO_REG_STEPS_PATH . 'registration_confirmation', |
|
324 | - 'class_name' => 'EE_SPCO_Reg_Step_Registration_Confirmation', |
|
325 | - 'slug' => 'registration_confirmation', |
|
326 | - 'has_hooks' => false, |
|
327 | - ), |
|
328 | - 30 => array( |
|
329 | - 'file_path' => SPCO_REG_STEPS_PATH . 'payment_options', |
|
330 | - 'class_name' => 'EE_SPCO_Reg_Step_Payment_Options', |
|
331 | - 'slug' => 'payment_options', |
|
332 | - 'has_hooks' => true, |
|
333 | - ), |
|
334 | - 999 => array( |
|
335 | - 'file_path' => SPCO_REG_STEPS_PATH . 'finalize_registration', |
|
336 | - 'class_name' => 'EE_SPCO_Reg_Step_Finalize_Registration', |
|
337 | - 'slug' => 'finalize_registration', |
|
338 | - 'has_hooks' => false, |
|
339 | - ), |
|
340 | - ); |
|
341 | - } |
|
342 | - return $reg_steps; |
|
343 | - } |
|
344 | - |
|
345 | - |
|
346 | - |
|
347 | - /** |
|
348 | - * registration_checkout_for_admin |
|
349 | - * |
|
350 | - * @access public |
|
351 | - * @return string |
|
352 | - * @throws EE_Error |
|
353 | - */ |
|
354 | - public static function registration_checkout_for_admin() |
|
355 | - { |
|
356 | - EED_Single_Page_Checkout::load_request_handler(); |
|
357 | - EE_Registry::instance()->REQ->set('step', 'attendee_information'); |
|
358 | - EE_Registry::instance()->REQ->set('action', 'display_spco_reg_step'); |
|
359 | - EE_Registry::instance()->REQ->set('process_form_submission', false); |
|
360 | - EED_Single_Page_Checkout::instance()->_initialize(); |
|
361 | - EED_Single_Page_Checkout::instance()->_display_spco_reg_form(); |
|
362 | - return EE_Registry::instance()->REQ->get_output(); |
|
363 | - } |
|
364 | - |
|
365 | - |
|
366 | - |
|
367 | - /** |
|
368 | - * process_registration_from_admin |
|
369 | - * |
|
370 | - * @access public |
|
371 | - * @return \EE_Transaction |
|
372 | - * @throws EE_Error |
|
373 | - */ |
|
374 | - public static function process_registration_from_admin() |
|
375 | - { |
|
376 | - EED_Single_Page_Checkout::load_request_handler(); |
|
377 | - EE_Registry::instance()->REQ->set('step', 'attendee_information'); |
|
378 | - EE_Registry::instance()->REQ->set('action', 'process_reg_step'); |
|
379 | - EE_Registry::instance()->REQ->set('process_form_submission', true); |
|
380 | - EED_Single_Page_Checkout::instance()->_initialize(); |
|
381 | - if (EED_Single_Page_Checkout::instance()->checkout->current_step->completed()) { |
|
382 | - $final_reg_step = end(EED_Single_Page_Checkout::instance()->checkout->reg_steps); |
|
383 | - if ($final_reg_step instanceof EE_SPCO_Reg_Step_Finalize_Registration) { |
|
384 | - EED_Single_Page_Checkout::instance()->checkout->set_reg_step_initiated($final_reg_step); |
|
385 | - if ($final_reg_step->process_reg_step()) { |
|
386 | - $final_reg_step->set_completed(); |
|
387 | - EED_Single_Page_Checkout::instance()->checkout->update_txn_reg_steps_array(); |
|
388 | - return EED_Single_Page_Checkout::instance()->checkout->transaction; |
|
389 | - } |
|
390 | - } |
|
391 | - } |
|
392 | - return null; |
|
393 | - } |
|
394 | - |
|
395 | - |
|
396 | - |
|
397 | - /** |
|
398 | - * run |
|
399 | - * |
|
400 | - * @access public |
|
401 | - * @param WP_Query $WP_Query |
|
402 | - * @return void |
|
403 | - * @throws EE_Error |
|
404 | - */ |
|
405 | - public function run($WP_Query) |
|
406 | - { |
|
407 | - if ( |
|
408 | - $WP_Query instanceof WP_Query |
|
409 | - && $WP_Query->is_main_query() |
|
410 | - && apply_filters('FHEE__EED_Single_Page_Checkout__run', true) |
|
411 | - && $this->_is_reg_checkout() |
|
412 | - ) { |
|
413 | - $this->_initialize(); |
|
414 | - } |
|
415 | - } |
|
416 | - |
|
417 | - |
|
418 | - |
|
419 | - /** |
|
420 | - * determines whether current url matches reg page url |
|
421 | - * |
|
422 | - * @return bool |
|
423 | - */ |
|
424 | - protected function _is_reg_checkout() |
|
425 | - { |
|
426 | - // get current permalink for reg page without any extra query args |
|
427 | - $reg_page_url = \get_permalink(EE_Config::instance()->core->reg_page_id); |
|
428 | - // get request URI for current request, but without the scheme or host |
|
429 | - $current_request_uri = \EEH_URL::filter_input_server_url('REQUEST_URI'); |
|
430 | - $current_request_uri = html_entity_decode($current_request_uri); |
|
431 | - // get array of query args from the current request URI |
|
432 | - $query_args = \EEH_URL::get_query_string($current_request_uri); |
|
433 | - // grab page id if it is set |
|
434 | - $page_id = isset($query_args['page_id']) ? absint($query_args['page_id']) : 0; |
|
435 | - // and remove the page id from the query args (we will re-add it later) |
|
436 | - unset($query_args['page_id']); |
|
437 | - // now strip all query args from current request URI |
|
438 | - $current_request_uri = remove_query_arg(array_keys($query_args), $current_request_uri); |
|
439 | - // and re-add the page id if it was set |
|
440 | - if ($page_id) { |
|
441 | - $current_request_uri = add_query_arg('page_id', $page_id, $current_request_uri); |
|
442 | - } |
|
443 | - // remove slashes and ? |
|
444 | - $current_request_uri = trim($current_request_uri, '?/'); |
|
445 | - // is current request URI part of the known full reg page URL ? |
|
446 | - return ! empty($current_request_uri) && strpos($reg_page_url, $current_request_uri) !== false; |
|
447 | - } |
|
448 | - |
|
449 | - |
|
450 | - |
|
451 | - /** |
|
452 | - * @param WP_Query $wp_query |
|
453 | - * @return void |
|
454 | - * @throws EE_Error |
|
455 | - */ |
|
456 | - public static function init($wp_query) |
|
457 | - { |
|
458 | - EED_Single_Page_Checkout::instance()->run($wp_query); |
|
459 | - } |
|
460 | - |
|
461 | - |
|
462 | - |
|
463 | - /** |
|
464 | - * _initialize - initial module setup |
|
465 | - * |
|
466 | - * @access private |
|
467 | - * @throws EE_Error |
|
468 | - * @return void |
|
469 | - */ |
|
470 | - private function _initialize() |
|
471 | - { |
|
472 | - // ensure SPCO doesn't run twice |
|
473 | - if (EED_Single_Page_Checkout::$_initialized) { |
|
474 | - return; |
|
475 | - } |
|
476 | - try { |
|
477 | - EED_Single_Page_Checkout::load_reg_steps(); |
|
478 | - $this->_verify_session(); |
|
479 | - // setup the EE_Checkout object |
|
480 | - $this->checkout = $this->_initialize_checkout(); |
|
481 | - // filter checkout |
|
482 | - $this->checkout = apply_filters('FHEE__EED_Single_Page_Checkout___initialize__checkout', $this->checkout); |
|
483 | - // get the $_GET |
|
484 | - $this->_get_request_vars(); |
|
485 | - if ($this->_block_bots()) { |
|
486 | - return; |
|
487 | - } |
|
488 | - // filter continue_reg |
|
489 | - $this->checkout->continue_reg = apply_filters( |
|
490 | - 'FHEE__EED_Single_Page_Checkout__init___continue_reg', |
|
491 | - true, |
|
492 | - $this->checkout |
|
493 | - ); |
|
494 | - // load the reg steps array |
|
495 | - if ( ! $this->_load_and_instantiate_reg_steps()) { |
|
496 | - EED_Single_Page_Checkout::$_initialized = true; |
|
497 | - return; |
|
498 | - } |
|
499 | - // set the current step |
|
500 | - $this->checkout->set_current_step($this->checkout->step); |
|
501 | - // and the next step |
|
502 | - $this->checkout->set_next_step(); |
|
503 | - // verify that everything has been setup correctly |
|
504 | - if ( ! ($this->_verify_transaction_and_get_registrations() && $this->_final_verifications())) { |
|
505 | - EED_Single_Page_Checkout::$_initialized = true; |
|
506 | - return; |
|
507 | - } |
|
508 | - // lock the transaction |
|
509 | - $this->checkout->transaction->lock(); |
|
510 | - // make sure all of our cached objects are added to their respective model entity mappers |
|
511 | - $this->checkout->refresh_all_entities(); |
|
512 | - // set amount owing |
|
513 | - $this->checkout->amount_owing = $this->checkout->transaction->remaining(); |
|
514 | - // initialize each reg step, which gives them the chance to potentially alter the process |
|
515 | - $this->_initialize_reg_steps(); |
|
516 | - // DEBUG LOG |
|
517 | - //$this->checkout->log( __CLASS__, __FUNCTION__, __LINE__ ); |
|
518 | - // get reg form |
|
519 | - if( ! $this->_check_form_submission()) { |
|
520 | - EED_Single_Page_Checkout::$_initialized = true; |
|
521 | - return; |
|
522 | - } |
|
523 | - // checkout the action!!! |
|
524 | - $this->_process_form_action(); |
|
525 | - // add some style and make it dance |
|
526 | - $this->add_styles_and_scripts(); |
|
527 | - // kk... SPCO has successfully run |
|
528 | - EED_Single_Page_Checkout::$_initialized = true; |
|
529 | - // set no cache headers and constants |
|
530 | - EE_System::do_not_cache(); |
|
531 | - // add anchor |
|
532 | - add_action('loop_start', array($this, 'set_checkout_anchor'), 1); |
|
533 | - // remove transaction lock |
|
534 | - add_action('shutdown', array($this, 'unlock_transaction'), 1); |
|
535 | - } catch (Exception $e) { |
|
536 | - EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
537 | - } |
|
538 | - } |
|
539 | - |
|
540 | - |
|
541 | - |
|
542 | - /** |
|
543 | - * _verify_session |
|
544 | - * checks that the session is valid and not expired |
|
545 | - * |
|
546 | - * @access private |
|
547 | - * @throws EE_Error |
|
548 | - */ |
|
549 | - private function _verify_session() |
|
550 | - { |
|
551 | - if ( ! EE_Registry::instance()->SSN instanceof EE_Session) { |
|
552 | - throw new EE_Error(__('The EE_Session class could not be loaded.', 'event_espresso')); |
|
553 | - } |
|
554 | - $clear_session_requested = filter_var( |
|
555 | - EE_Registry::instance()->REQ->get('clear_session', false), |
|
556 | - FILTER_VALIDATE_BOOLEAN |
|
557 | - ); |
|
558 | - // is session still valid ? |
|
559 | - if ($clear_session_requested |
|
560 | - || ( EE_Registry::instance()->SSN->expired() |
|
561 | - && EE_Registry::instance()->REQ->get('e_reg_url_link', '') === '' |
|
562 | - ) |
|
563 | - ) { |
|
564 | - $this->checkout = new EE_Checkout(); |
|
565 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
566 | - // EE_Registry::instance()->SSN->reset_cart(); |
|
567 | - // EE_Registry::instance()->SSN->reset_checkout(); |
|
568 | - // EE_Registry::instance()->SSN->reset_transaction(); |
|
569 | - if (! $clear_session_requested) { |
|
570 | - EE_Error::add_attention( |
|
571 | - EE_Registry::$i18n_js_strings['registration_expiration_notice'], |
|
572 | - __FILE__, __FUNCTION__, __LINE__ |
|
573 | - ); |
|
574 | - } |
|
575 | - // EE_Registry::instance()->SSN->reset_expired(); |
|
576 | - } |
|
577 | - } |
|
578 | - |
|
579 | - |
|
580 | - |
|
581 | - /** |
|
582 | - * _initialize_checkout |
|
583 | - * loads and instantiates EE_Checkout |
|
584 | - * |
|
585 | - * @access private |
|
586 | - * @throws EE_Error |
|
587 | - * @return EE_Checkout |
|
588 | - */ |
|
589 | - private function _initialize_checkout() |
|
590 | - { |
|
591 | - // look in session for existing checkout |
|
592 | - /** @type EE_Checkout $checkout */ |
|
593 | - $checkout = EE_Registry::instance()->SSN->checkout(); |
|
594 | - // verify |
|
595 | - if ( ! $checkout instanceof EE_Checkout) { |
|
596 | - // instantiate EE_Checkout object for handling the properties of the current checkout process |
|
597 | - $checkout = EE_Registry::instance()->load_file( |
|
598 | - SPCO_INC_PATH, |
|
599 | - 'EE_Checkout', |
|
600 | - 'class', array(), |
|
601 | - false |
|
602 | - ); |
|
603 | - } else { |
|
604 | - if ($checkout->current_step->is_final_step() && $checkout->exit_spco() === true) { |
|
605 | - $this->unlock_transaction(); |
|
606 | - wp_safe_redirect($checkout->redirect_url); |
|
607 | - exit(); |
|
608 | - } |
|
609 | - } |
|
610 | - $checkout = apply_filters('FHEE__EED_Single_Page_Checkout___initialize_checkout__checkout', $checkout); |
|
611 | - // verify again |
|
612 | - if ( ! $checkout instanceof EE_Checkout) { |
|
613 | - throw new EE_Error(__('The EE_Checkout class could not be loaded.', 'event_espresso')); |
|
614 | - } |
|
615 | - // reset anything that needs a clean slate for each request |
|
616 | - $checkout->reset_for_current_request(); |
|
617 | - return $checkout; |
|
618 | - } |
|
619 | - |
|
620 | - |
|
621 | - |
|
622 | - /** |
|
623 | - * _get_request_vars |
|
624 | - * |
|
625 | - * @access private |
|
626 | - * @return void |
|
627 | - * @throws EE_Error |
|
628 | - */ |
|
629 | - private function _get_request_vars() |
|
630 | - { |
|
631 | - // load classes |
|
632 | - EED_Single_Page_Checkout::load_request_handler(); |
|
633 | - //make sure this request is marked as belonging to EE |
|
634 | - EE_Registry::instance()->REQ->set_espresso_page(true); |
|
635 | - // which step is being requested ? |
|
636 | - $this->checkout->step = EE_Registry::instance()->REQ->get('step', $this->_get_first_step()); |
|
637 | - // which step is being edited ? |
|
638 | - $this->checkout->edit_step = EE_Registry::instance()->REQ->get('edit_step', ''); |
|
639 | - // and what we're doing on the current step |
|
640 | - $this->checkout->action = EE_Registry::instance()->REQ->get('action', 'display_spco_reg_step'); |
|
641 | - // timestamp |
|
642 | - $this->checkout->uts = EE_Registry::instance()->REQ->get('uts', 0); |
|
643 | - // returning to edit ? |
|
644 | - $this->checkout->reg_url_link = EE_Registry::instance()->REQ->get('e_reg_url_link', ''); |
|
645 | - // add reg url link to registration query params |
|
646 | - if ($this->checkout->reg_url_link && strpos($this->checkout->reg_url_link, '1-') !== 0) { |
|
647 | - $this->checkout->reg_cache_where_params[0]['REG_url_link'] = $this->checkout->reg_url_link; |
|
648 | - } |
|
649 | - // or some other kind of revisit ? |
|
650 | - $this->checkout->revisit = filter_var( |
|
651 | - EE_Registry::instance()->REQ->get('revisit', false), |
|
652 | - FILTER_VALIDATE_BOOLEAN |
|
653 | - ); |
|
654 | - // and whether or not to generate a reg form for this request |
|
655 | - $this->checkout->generate_reg_form = filter_var( |
|
656 | - EE_Registry::instance()->REQ->get('generate_reg_form', true), |
|
657 | - FILTER_VALIDATE_BOOLEAN |
|
658 | - ); |
|
659 | - // and whether or not to process a reg form submission for this request |
|
660 | - $this->checkout->process_form_submission = filter_var( |
|
661 | - EE_Registry::instance()->REQ->get( |
|
662 | - 'process_form_submission', |
|
663 | - $this->checkout->action === 'process_reg_step' |
|
664 | - ), |
|
665 | - FILTER_VALIDATE_BOOLEAN |
|
666 | - ); |
|
667 | - $this->checkout->process_form_submission = filter_var( |
|
668 | - $this->checkout->action !== 'display_spco_reg_step' |
|
669 | - ? $this->checkout->process_form_submission |
|
670 | - : false, |
|
671 | - FILTER_VALIDATE_BOOLEAN |
|
672 | - ); |
|
673 | - // $this->_display_request_vars(); |
|
674 | - } |
|
675 | - |
|
676 | - |
|
677 | - |
|
678 | - /** |
|
679 | - * _display_request_vars |
|
680 | - * |
|
681 | - * @access protected |
|
682 | - * @return void |
|
683 | - */ |
|
684 | - protected function _display_request_vars() |
|
685 | - { |
|
686 | - if ( ! WP_DEBUG) { |
|
687 | - return; |
|
688 | - } |
|
689 | - EEH_Debug_Tools::printr($_REQUEST, '$_REQUEST', __FILE__, __LINE__); |
|
690 | - EEH_Debug_Tools::printr($this->checkout->step, '$this->checkout->step', __FILE__, __LINE__); |
|
691 | - EEH_Debug_Tools::printr($this->checkout->edit_step, '$this->checkout->edit_step', __FILE__, __LINE__); |
|
692 | - EEH_Debug_Tools::printr($this->checkout->action, '$this->checkout->action', __FILE__, __LINE__); |
|
693 | - EEH_Debug_Tools::printr($this->checkout->reg_url_link, '$this->checkout->reg_url_link', __FILE__, __LINE__); |
|
694 | - EEH_Debug_Tools::printr($this->checkout->revisit, '$this->checkout->revisit', __FILE__, __LINE__); |
|
695 | - EEH_Debug_Tools::printr($this->checkout->generate_reg_form, '$this->checkout->generate_reg_form', __FILE__, __LINE__); |
|
696 | - EEH_Debug_Tools::printr($this->checkout->process_form_submission, '$this->checkout->process_form_submission', __FILE__, __LINE__); |
|
697 | - } |
|
698 | - |
|
699 | - |
|
700 | - |
|
701 | - /** |
|
702 | - * _block_bots |
|
703 | - * checks that the incoming request has either of the following set: |
|
704 | - * a uts (unix timestamp) which indicates that the request was redirected from the Ticket Selector |
|
705 | - * a REG URL Link, which indicates that the request is a return visit to SPCO for a valid TXN |
|
706 | - * so if you're not coming from the Ticket Selector nor returning for a valid IP... |
|
707 | - * then where you coming from man? |
|
708 | - * |
|
709 | - * @return boolean |
|
710 | - */ |
|
711 | - private function _block_bots() |
|
712 | - { |
|
713 | - $invalid_checkout_access = EED_Invalid_Checkout_Access::getInvalidCheckoutAccess(); |
|
714 | - if ($invalid_checkout_access->checkoutAccessIsInvalid($this->checkout)) { |
|
715 | - return true; |
|
716 | - } |
|
717 | - return false; |
|
718 | - } |
|
719 | - |
|
720 | - |
|
721 | - |
|
722 | - /** |
|
723 | - * _get_first_step |
|
724 | - * gets slug for first step in $_reg_steps_array |
|
725 | - * |
|
726 | - * @access private |
|
727 | - * @throws EE_Error |
|
728 | - * @return string |
|
729 | - */ |
|
730 | - private function _get_first_step() |
|
731 | - { |
|
732 | - $first_step = reset(EED_Single_Page_Checkout::$_reg_steps_array); |
|
733 | - return isset($first_step['slug']) ? $first_step['slug'] : 'attendee_information'; |
|
734 | - } |
|
735 | - |
|
736 | - |
|
737 | - |
|
738 | - /** |
|
739 | - * _load_and_instantiate_reg_steps |
|
740 | - * instantiates each reg step based on the loaded reg_steps array |
|
741 | - * |
|
742 | - * @access private |
|
743 | - * @throws EE_Error |
|
744 | - * @return bool |
|
745 | - */ |
|
746 | - private function _load_and_instantiate_reg_steps() |
|
747 | - { |
|
748 | - do_action('AHEE__Single_Page_Checkout___load_and_instantiate_reg_steps__start', $this->checkout); |
|
749 | - // have reg_steps already been instantiated ? |
|
750 | - if ( |
|
751 | - empty($this->checkout->reg_steps) |
|
752 | - || apply_filters('FHEE__Single_Page_Checkout__load_reg_steps__reload_reg_steps', false, $this->checkout) |
|
753 | - ) { |
|
754 | - // if not, then loop through raw reg steps array |
|
755 | - foreach (EED_Single_Page_Checkout::$_reg_steps_array as $order => $reg_step) { |
|
756 | - if ( ! $this->_load_and_instantiate_reg_step($reg_step, $order)) { |
|
757 | - return false; |
|
758 | - } |
|
759 | - } |
|
760 | - EE_Registry::instance()->CFG->registration->skip_reg_confirmation = true; |
|
761 | - EE_Registry::instance()->CFG->registration->reg_confirmation_last = true; |
|
762 | - // skip the registration_confirmation page ? |
|
763 | - if (EE_Registry::instance()->CFG->registration->skip_reg_confirmation) { |
|
764 | - // just remove it from the reg steps array |
|
765 | - $this->checkout->remove_reg_step('registration_confirmation', false); |
|
766 | - } else if ( |
|
767 | - isset($this->checkout->reg_steps['registration_confirmation']) |
|
768 | - && EE_Registry::instance()->CFG->registration->reg_confirmation_last |
|
769 | - ) { |
|
770 | - // set the order to something big like 100 |
|
771 | - $this->checkout->set_reg_step_order('registration_confirmation', 100); |
|
772 | - } |
|
773 | - // filter the array for good luck |
|
774 | - $this->checkout->reg_steps = apply_filters( |
|
775 | - 'FHEE__Single_Page_Checkout__load_reg_steps__reg_steps', |
|
776 | - $this->checkout->reg_steps |
|
777 | - ); |
|
778 | - // finally re-sort based on the reg step class order properties |
|
779 | - $this->checkout->sort_reg_steps(); |
|
780 | - } else { |
|
781 | - foreach ($this->checkout->reg_steps as $reg_step) { |
|
782 | - // set all current step stati to FALSE |
|
783 | - $reg_step->set_is_current_step(false); |
|
784 | - } |
|
785 | - } |
|
786 | - if (empty($this->checkout->reg_steps)) { |
|
787 | - EE_Error::add_error( |
|
788 | - __('No Reg Steps were loaded..', 'event_espresso'), |
|
789 | - __FILE__, __FUNCTION__, __LINE__ |
|
790 | - ); |
|
791 | - return false; |
|
792 | - } |
|
793 | - // make reg step details available to JS |
|
794 | - $this->checkout->set_reg_step_JSON_info(); |
|
795 | - return true; |
|
796 | - } |
|
797 | - |
|
798 | - |
|
799 | - |
|
800 | - /** |
|
801 | - * _load_and_instantiate_reg_step |
|
802 | - * |
|
803 | - * @access private |
|
804 | - * @param array $reg_step |
|
805 | - * @param int $order |
|
806 | - * @return bool |
|
807 | - */ |
|
808 | - private function _load_and_instantiate_reg_step($reg_step = array(), $order = 0) |
|
809 | - { |
|
810 | - // we need a file_path, class_name, and slug to add a reg step |
|
811 | - if (isset($reg_step['file_path'], $reg_step['class_name'], $reg_step['slug'])) { |
|
812 | - // if editing a specific step, but this is NOT that step... (and it's not the 'finalize_registration' step) |
|
813 | - if ( |
|
814 | - $this->checkout->reg_url_link |
|
815 | - && $this->checkout->step !== $reg_step['slug'] |
|
816 | - && $reg_step['slug'] !== 'finalize_registration' |
|
817 | - // normally at this point we would NOT load the reg step, but this filter can change that |
|
818 | - && apply_filters( |
|
819 | - 'FHEE__Single_Page_Checkout___load_and_instantiate_reg_step__bypass_reg_step', |
|
820 | - true, |
|
821 | - $reg_step, |
|
822 | - $this->checkout |
|
823 | - ) |
|
824 | - ) { |
|
825 | - return true; |
|
826 | - } |
|
827 | - // instantiate step class using file path and class name |
|
828 | - $reg_step_obj = EE_Registry::instance()->load_file( |
|
829 | - $reg_step['file_path'], |
|
830 | - $reg_step['class_name'], |
|
831 | - 'class', |
|
832 | - $this->checkout, |
|
833 | - false |
|
834 | - ); |
|
835 | - // did we gets the goods ? |
|
836 | - if ($reg_step_obj instanceof EE_SPCO_Reg_Step) { |
|
837 | - // set reg step order based on config |
|
838 | - $reg_step_obj->set_order($order); |
|
839 | - // add instantiated reg step object to the master reg steps array |
|
840 | - $this->checkout->add_reg_step($reg_step_obj); |
|
841 | - } else { |
|
842 | - EE_Error::add_error( |
|
843 | - __('The current step could not be set.', 'event_espresso'), |
|
844 | - __FILE__, __FUNCTION__, __LINE__ |
|
845 | - ); |
|
846 | - return false; |
|
847 | - } |
|
848 | - } else { |
|
849 | - if (WP_DEBUG) { |
|
850 | - EE_Error::add_error( |
|
851 | - sprintf( |
|
852 | - __( |
|
853 | - 'A registration step could not be loaded. One or more of the following data points is invalid:%4$s%5$sFile Path: %1$s%6$s%5$sClass Name: %2$s%6$s%5$sSlug: %3$s%6$s%7$s', |
|
854 | - 'event_espresso' |
|
855 | - ), |
|
856 | - isset($reg_step['file_path']) ? $reg_step['file_path'] : '', |
|
857 | - isset($reg_step['class_name']) ? $reg_step['class_name'] : '', |
|
858 | - isset($reg_step['slug']) ? $reg_step['slug'] : '', |
|
859 | - '<ul>', |
|
860 | - '<li>', |
|
861 | - '</li>', |
|
862 | - '</ul>' |
|
863 | - ), |
|
864 | - __FILE__, __FUNCTION__, __LINE__ |
|
865 | - ); |
|
866 | - } |
|
867 | - return false; |
|
868 | - } |
|
869 | - return true; |
|
870 | - } |
|
871 | - |
|
872 | - |
|
873 | - /** |
|
874 | - * _verify_transaction_and_get_registrations |
|
875 | - * |
|
876 | - * @access private |
|
877 | - * @return bool |
|
878 | - * @throws InvalidDataTypeException |
|
879 | - * @throws InvalidEntityException |
|
880 | - * @throws EE_Error |
|
881 | - */ |
|
882 | - private function _verify_transaction_and_get_registrations() |
|
883 | - { |
|
884 | - // was there already a valid transaction in the checkout from the session ? |
|
885 | - if ( ! $this->checkout->transaction instanceof EE_Transaction) { |
|
886 | - // get transaction from db or session |
|
887 | - $this->checkout->transaction = $this->checkout->reg_url_link && ! is_admin() |
|
888 | - ? $this->_get_transaction_and_cart_for_previous_visit() |
|
889 | - : $this->_get_cart_for_current_session_and_setup_new_transaction(); |
|
890 | - if ( ! $this->checkout->transaction instanceof EE_Transaction) { |
|
891 | - EE_Error::add_error( |
|
892 | - __('Your Registration and Transaction information could not be retrieved from the db.', |
|
893 | - 'event_espresso'), |
|
894 | - __FILE__, __FUNCTION__, __LINE__ |
|
895 | - ); |
|
896 | - $this->checkout->transaction = EE_Transaction::new_instance(); |
|
897 | - // add some style and make it dance |
|
898 | - $this->add_styles_and_scripts(); |
|
899 | - EED_Single_Page_Checkout::$_initialized = true; |
|
900 | - return false; |
|
901 | - } |
|
902 | - // and the registrations for the transaction |
|
903 | - $this->_get_registrations($this->checkout->transaction); |
|
904 | - } |
|
905 | - return true; |
|
906 | - } |
|
907 | - |
|
908 | - |
|
909 | - |
|
910 | - /** |
|
911 | - * _get_transaction_and_cart_for_previous_visit |
|
912 | - * |
|
913 | - * @access private |
|
914 | - * @return mixed EE_Transaction|NULL |
|
915 | - */ |
|
916 | - private function _get_transaction_and_cart_for_previous_visit() |
|
917 | - { |
|
918 | - /** @var $TXN_model EEM_Transaction */ |
|
919 | - $TXN_model = EE_Registry::instance()->load_model('Transaction'); |
|
920 | - // because the reg_url_link is present in the request, |
|
921 | - // this is a return visit to SPCO, so we'll get the transaction data from the db |
|
922 | - $transaction = $TXN_model->get_transaction_from_reg_url_link($this->checkout->reg_url_link); |
|
923 | - // verify transaction |
|
924 | - if ($transaction instanceof EE_Transaction) { |
|
925 | - // and get the cart that was used for that transaction |
|
926 | - $this->checkout->cart = $this->_get_cart_for_transaction($transaction); |
|
927 | - return $transaction; |
|
928 | - } |
|
929 | - EE_Error::add_error( |
|
930 | - __('Your Registration and Transaction information could not be retrieved from the db.', 'event_espresso'), |
|
931 | - __FILE__, __FUNCTION__, __LINE__ |
|
932 | - ); |
|
933 | - return null; |
|
934 | - |
|
935 | - } |
|
936 | - |
|
937 | - |
|
938 | - |
|
939 | - /** |
|
940 | - * _get_cart_for_transaction |
|
941 | - * |
|
942 | - * @access private |
|
943 | - * @param EE_Transaction $transaction |
|
944 | - * @return EE_Cart |
|
945 | - */ |
|
946 | - private function _get_cart_for_transaction($transaction) |
|
947 | - { |
|
948 | - return $this->checkout->get_cart_for_transaction($transaction); |
|
949 | - } |
|
950 | - |
|
951 | - |
|
952 | - |
|
953 | - /** |
|
954 | - * get_cart_for_transaction |
|
955 | - * |
|
956 | - * @access public |
|
957 | - * @param EE_Transaction $transaction |
|
958 | - * @return EE_Cart |
|
959 | - */ |
|
960 | - public function get_cart_for_transaction(EE_Transaction $transaction) |
|
961 | - { |
|
962 | - return $this->checkout->get_cart_for_transaction($transaction); |
|
963 | - } |
|
964 | - |
|
965 | - |
|
966 | - |
|
967 | - /** |
|
968 | - * _get_transaction_and_cart_for_current_session |
|
969 | - * generates a new EE_Transaction object and adds it to the $_transaction property. |
|
970 | - * |
|
971 | - * @access private |
|
972 | - * @return EE_Transaction |
|
973 | - * @throws EE_Error |
|
974 | - */ |
|
975 | - private function _get_cart_for_current_session_and_setup_new_transaction() |
|
976 | - { |
|
977 | - // if there's no transaction, then this is the FIRST visit to SPCO |
|
978 | - // so load up the cart ( passing nothing for the TXN because it doesn't exist yet ) |
|
979 | - $this->checkout->cart = $this->_get_cart_for_transaction(null); |
|
980 | - // and then create a new transaction |
|
981 | - $transaction = $this->_initialize_transaction(); |
|
982 | - // verify transaction |
|
983 | - if ($transaction instanceof EE_Transaction) { |
|
984 | - // save it so that we have an ID for other objects to use |
|
985 | - $transaction->save(); |
|
986 | - // and save TXN data to the cart |
|
987 | - $this->checkout->cart->get_grand_total()->save_this_and_descendants_to_txn($transaction->ID()); |
|
988 | - } else { |
|
989 | - EE_Error::add_error( |
|
990 | - __('A Valid Transaction could not be initialized.', 'event_espresso'), |
|
991 | - __FILE__, __FUNCTION__, __LINE__ |
|
992 | - ); |
|
993 | - } |
|
994 | - return $transaction; |
|
995 | - } |
|
996 | - |
|
997 | - |
|
998 | - |
|
999 | - /** |
|
1000 | - * generates a new EE_Transaction object and adds it to the $_transaction property. |
|
1001 | - * |
|
1002 | - * @access private |
|
1003 | - * @return mixed EE_Transaction|NULL |
|
1004 | - */ |
|
1005 | - private function _initialize_transaction() |
|
1006 | - { |
|
1007 | - try { |
|
1008 | - // ensure cart totals have been calculated |
|
1009 | - $this->checkout->cart->get_grand_total()->recalculate_total_including_taxes(); |
|
1010 | - // grab the cart grand total |
|
1011 | - $cart_total = $this->checkout->cart->get_cart_grand_total(); |
|
1012 | - // create new TXN |
|
1013 | - $transaction = EE_Transaction::new_instance( |
|
1014 | - array( |
|
1015 | - 'TXN_reg_steps' => $this->checkout->initialize_txn_reg_steps_array(), |
|
1016 | - 'TXN_total' => $cart_total > 0 ? $cart_total : 0, |
|
1017 | - 'TXN_paid' => 0, |
|
1018 | - 'STS_ID' => EEM_Transaction::failed_status_code, |
|
1019 | - ) |
|
1020 | - ); |
|
1021 | - // save it so that we have an ID for other objects to use |
|
1022 | - $transaction->save(); |
|
1023 | - // set cron job for following up on TXNs after their session has expired |
|
1024 | - EE_Cron_Tasks::schedule_expired_transaction_check( |
|
1025 | - EE_Registry::instance()->SSN->expiration() + 1, |
|
1026 | - $transaction->ID() |
|
1027 | - ); |
|
1028 | - return $transaction; |
|
1029 | - } catch (Exception $e) { |
|
1030 | - EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
1031 | - } |
|
1032 | - return null; |
|
1033 | - } |
|
1034 | - |
|
1035 | - |
|
1036 | - /** |
|
1037 | - * _get_registrations |
|
1038 | - * |
|
1039 | - * @access private |
|
1040 | - * @param EE_Transaction $transaction |
|
1041 | - * @return void |
|
1042 | - * @throws InvalidDataTypeException |
|
1043 | - * @throws InvalidEntityException |
|
1044 | - * @throws EE_Error |
|
1045 | - */ |
|
1046 | - private function _get_registrations(EE_Transaction $transaction) |
|
1047 | - { |
|
1048 | - // first step: grab the registrants { : o |
|
1049 | - $registrations = $transaction->registrations($this->checkout->reg_cache_where_params, false); |
|
1050 | - $this->checkout->total_ticket_count = count($registrations); |
|
1051 | - // verify registrations have been set |
|
1052 | - if (empty($registrations)) { |
|
1053 | - // if no cached registrations, then check the db |
|
1054 | - $registrations = $transaction->registrations($this->checkout->reg_cache_where_params, false); |
|
1055 | - // still nothing ? well as long as this isn't a revisit |
|
1056 | - if (empty($registrations) && ! $this->checkout->revisit) { |
|
1057 | - // generate new registrations from scratch |
|
1058 | - $registrations = $this->_initialize_registrations($transaction); |
|
1059 | - } |
|
1060 | - } |
|
1061 | - // sort by their original registration order |
|
1062 | - usort($registrations, array('EED_Single_Page_Checkout', 'sort_registrations_by_REG_count')); |
|
1063 | - // then loop thru the array |
|
1064 | - foreach ($registrations as $registration) { |
|
1065 | - // verify each registration |
|
1066 | - if ($registration instanceof EE_Registration) { |
|
1067 | - // we display all attendee info for the primary registrant |
|
1068 | - if ($this->checkout->reg_url_link === $registration->reg_url_link() |
|
1069 | - && $registration->is_primary_registrant() |
|
1070 | - ) { |
|
1071 | - $this->checkout->primary_revisit = true; |
|
1072 | - break; |
|
1073 | - } |
|
1074 | - if ($this->checkout->revisit && $this->checkout->reg_url_link !== $registration->reg_url_link()) { |
|
1075 | - // but hide info if it doesn't belong to you |
|
1076 | - $transaction->clear_cache('Registration', $registration->ID()); |
|
1077 | - $this->checkout->total_ticket_count--; |
|
1078 | - } |
|
1079 | - $this->checkout->set_reg_status_updated($registration->ID(), false); |
|
1080 | - } |
|
1081 | - } |
|
1082 | - } |
|
1083 | - |
|
1084 | - |
|
1085 | - /** |
|
1086 | - * adds related EE_Registration objects for each ticket in the cart to the current EE_Transaction object |
|
1087 | - * |
|
1088 | - * @access private |
|
1089 | - * @param EE_Transaction $transaction |
|
1090 | - * @return array |
|
1091 | - * @throws InvalidDataTypeException |
|
1092 | - * @throws InvalidEntityException |
|
1093 | - * @throws EE_Error |
|
1094 | - */ |
|
1095 | - private function _initialize_registrations(EE_Transaction $transaction) |
|
1096 | - { |
|
1097 | - $att_nmbr = 0; |
|
1098 | - $registrations = array(); |
|
1099 | - if ($transaction instanceof EE_Transaction) { |
|
1100 | - /** @type EE_Registration_Processor $registration_processor */ |
|
1101 | - $registration_processor = EE_Registry::instance()->load_class('Registration_Processor'); |
|
1102 | - $this->checkout->total_ticket_count = $this->checkout->cart->all_ticket_quantity_count(); |
|
1103 | - // now let's add the cart items to the $transaction |
|
1104 | - foreach ($this->checkout->cart->get_tickets() as $line_item) { |
|
1105 | - //do the following for each ticket of this type they selected |
|
1106 | - for ($x = 1; $x <= $line_item->quantity(); $x++) { |
|
1107 | - $att_nmbr++; |
|
1108 | - /** @var EventEspresso\core\services\commands\registration\CreateRegistrationCommand $CreateRegistrationCommand */ |
|
1109 | - $CreateRegistrationCommand = EE_Registry::instance()->create( |
|
1110 | - 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand', |
|
1111 | - array( |
|
1112 | - $transaction, |
|
1113 | - $line_item, |
|
1114 | - $att_nmbr, |
|
1115 | - $this->checkout->total_ticket_count, |
|
1116 | - ) |
|
1117 | - ); |
|
1118 | - // override capabilities for frontend registrations |
|
1119 | - if ( ! is_admin()) { |
|
1120 | - $CreateRegistrationCommand->setCapCheck( |
|
1121 | - new PublicCapabilities('', 'create_new_registration') |
|
1122 | - ); |
|
1123 | - } |
|
1124 | - $registration = EE_Registry::instance()->BUS->execute($CreateRegistrationCommand); |
|
1125 | - if ( ! $registration instanceof EE_Registration) { |
|
1126 | - throw new InvalidEntityException($registration, 'EE_Registration'); |
|
1127 | - } |
|
1128 | - $registrations[ $registration->ID() ] = $registration; |
|
1129 | - } |
|
1130 | - } |
|
1131 | - $registration_processor->fix_reg_final_price_rounding_issue($transaction); |
|
1132 | - } |
|
1133 | - return $registrations; |
|
1134 | - } |
|
1135 | - |
|
1136 | - |
|
1137 | - |
|
1138 | - /** |
|
1139 | - * sorts registrations by REG_count |
|
1140 | - * |
|
1141 | - * @access public |
|
1142 | - * @param EE_Registration $reg_A |
|
1143 | - * @param EE_Registration $reg_B |
|
1144 | - * @return int |
|
1145 | - */ |
|
1146 | - public static function sort_registrations_by_REG_count(EE_Registration $reg_A, EE_Registration $reg_B) |
|
1147 | - { |
|
1148 | - // this shouldn't ever happen within the same TXN, but oh well |
|
1149 | - if ($reg_A->count() === $reg_B->count()) { |
|
1150 | - return 0; |
|
1151 | - } |
|
1152 | - return ($reg_A->count() > $reg_B->count()) ? 1 : -1; |
|
1153 | - } |
|
1154 | - |
|
1155 | - |
|
1156 | - |
|
1157 | - /** |
|
1158 | - * _final_verifications |
|
1159 | - * just makes sure that everything is set up correctly before proceeding |
|
1160 | - * |
|
1161 | - * @access private |
|
1162 | - * @return bool |
|
1163 | - * @throws EE_Error |
|
1164 | - */ |
|
1165 | - private function _final_verifications() |
|
1166 | - { |
|
1167 | - // filter checkout |
|
1168 | - $this->checkout = apply_filters( |
|
1169 | - 'FHEE__EED_Single_Page_Checkout___final_verifications__checkout', |
|
1170 | - $this->checkout |
|
1171 | - ); |
|
1172 | - //verify that current step is still set correctly |
|
1173 | - if ( ! $this->checkout->current_step instanceof EE_SPCO_Reg_Step) { |
|
1174 | - EE_Error::add_error( |
|
1175 | - __('We\'re sorry but the registration process can not proceed because one or more registration steps were not setup correctly. Please refresh the page and try again or contact support.', 'event_espresso'), |
|
1176 | - __FILE__, |
|
1177 | - __FUNCTION__, |
|
1178 | - __LINE__ |
|
1179 | - ); |
|
1180 | - return false; |
|
1181 | - } |
|
1182 | - // if returning to SPCO, then verify that primary registrant is set |
|
1183 | - if ( ! empty($this->checkout->reg_url_link)) { |
|
1184 | - $valid_registrant = $this->checkout->transaction->primary_registration(); |
|
1185 | - if ( ! $valid_registrant instanceof EE_Registration) { |
|
1186 | - EE_Error::add_error( |
|
1187 | - __('We\'re sorry but there appears to be an error with the "reg_url_link" or the primary registrant for this transaction. Please refresh the page and try again or contact support.', 'event_espresso'), |
|
1188 | - __FILE__, |
|
1189 | - __FUNCTION__, |
|
1190 | - __LINE__ |
|
1191 | - ); |
|
1192 | - return false; |
|
1193 | - } |
|
1194 | - $valid_registrant = null; |
|
1195 | - foreach ( |
|
1196 | - $this->checkout->transaction->registrations($this->checkout->reg_cache_where_params) as $registration |
|
1197 | - ) { |
|
1198 | - if ( |
|
1199 | - $registration instanceof EE_Registration |
|
1200 | - && $registration->reg_url_link() === $this->checkout->reg_url_link |
|
1201 | - ) { |
|
1202 | - $valid_registrant = $registration; |
|
1203 | - } |
|
1204 | - } |
|
1205 | - if ( ! $valid_registrant instanceof EE_Registration) { |
|
1206 | - // hmmm... maybe we have the wrong session because the user is opening multiple tabs ? |
|
1207 | - if (EED_Single_Page_Checkout::$_checkout_verified) { |
|
1208 | - // clear the session, mark the checkout as unverified, and try again |
|
1209 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
1210 | - EED_Single_Page_Checkout::$_initialized = false; |
|
1211 | - EED_Single_Page_Checkout::$_checkout_verified = false; |
|
1212 | - $this->_initialize(); |
|
1213 | - EE_Error::reset_notices(); |
|
1214 | - return false; |
|
1215 | - } |
|
1216 | - EE_Error::add_error( |
|
1217 | - __( |
|
1218 | - 'We\'re sorry but there appears to be an error with the "reg_url_link" or the transaction itself. Please refresh the page and try again or contact support.', |
|
1219 | - 'event_espresso' |
|
1220 | - ), |
|
1221 | - __FILE__, |
|
1222 | - __FUNCTION__, |
|
1223 | - __LINE__ |
|
1224 | - ); |
|
1225 | - return false; |
|
1226 | - } |
|
1227 | - } |
|
1228 | - // now that things have been kinda sufficiently verified, |
|
1229 | - // let's add the checkout to the session so that it's available to other systems |
|
1230 | - EE_Registry::instance()->SSN->set_checkout($this->checkout); |
|
1231 | - return true; |
|
1232 | - } |
|
1233 | - |
|
1234 | - |
|
1235 | - |
|
1236 | - /** |
|
1237 | - * _initialize_reg_steps |
|
1238 | - * first makes sure that EE_Transaction_Processor::set_reg_step_initiated() is called as required |
|
1239 | - * then loops thru all of the active reg steps and calls the initialize_reg_step() method |
|
1240 | - * |
|
1241 | - * @access private |
|
1242 | - * @param bool $reinitializing |
|
1243 | - * @throws EE_Error |
|
1244 | - */ |
|
1245 | - private function _initialize_reg_steps($reinitializing = false) |
|
1246 | - { |
|
1247 | - $this->checkout->set_reg_step_initiated($this->checkout->current_step); |
|
1248 | - // loop thru all steps to call their individual "initialize" methods and set i18n strings for JS |
|
1249 | - foreach ($this->checkout->reg_steps as $reg_step) { |
|
1250 | - if ( ! $reg_step->initialize_reg_step()) { |
|
1251 | - // if not initialized then maybe this step is being removed... |
|
1252 | - if ( ! $reinitializing && $reg_step->is_current_step()) { |
|
1253 | - // if it was the current step, then we need to start over here |
|
1254 | - $this->_initialize_reg_steps(true); |
|
1255 | - return; |
|
1256 | - } |
|
1257 | - continue; |
|
1258 | - } |
|
1259 | - // add css and JS for current step |
|
1260 | - $reg_step->enqueue_styles_and_scripts(); |
|
1261 | - // i18n |
|
1262 | - $reg_step->translate_js_strings(); |
|
1263 | - if ($reg_step->is_current_step()) { |
|
1264 | - // the text that appears on the reg step form submit button |
|
1265 | - $reg_step->set_submit_button_text(); |
|
1266 | - } |
|
1267 | - } |
|
1268 | - // dynamically creates hook point like: AHEE__Single_Page_Checkout___initialize_reg_step__attendee_information |
|
1269 | - do_action( |
|
1270 | - "AHEE__Single_Page_Checkout___initialize_reg_step__{$this->checkout->current_step->slug()}", |
|
1271 | - $this->checkout->current_step |
|
1272 | - ); |
|
1273 | - } |
|
1274 | - |
|
1275 | - |
|
1276 | - |
|
1277 | - /** |
|
1278 | - * _check_form_submission |
|
1279 | - * |
|
1280 | - * @access private |
|
1281 | - * @return boolean |
|
1282 | - */ |
|
1283 | - private function _check_form_submission() |
|
1284 | - { |
|
1285 | - //does this request require the reg form to be generated ? |
|
1286 | - if ($this->checkout->generate_reg_form) { |
|
1287 | - // ever heard that song by Blue Rodeo ? |
|
1288 | - try { |
|
1289 | - $this->checkout->current_step->reg_form = $this->checkout->current_step->generate_reg_form(); |
|
1290 | - // if not displaying a form, then check for form submission |
|
1291 | - if ( |
|
1292 | - $this->checkout->process_form_submission |
|
1293 | - && $this->checkout->current_step->reg_form->was_submitted() |
|
1294 | - ) { |
|
1295 | - // clear out any old data in case this step is being run again |
|
1296 | - $this->checkout->current_step->set_valid_data(array()); |
|
1297 | - // capture submitted form data |
|
1298 | - $this->checkout->current_step->reg_form->receive_form_submission( |
|
1299 | - apply_filters( |
|
1300 | - 'FHEE__Single_Page_Checkout___check_form_submission__request_params', |
|
1301 | - EE_Registry::instance()->REQ->params(), |
|
1302 | - $this->checkout |
|
1303 | - ) |
|
1304 | - ); |
|
1305 | - // validate submitted form data |
|
1306 | - if ( ! $this->checkout->continue_reg || ! $this->checkout->current_step->reg_form->is_valid()) { |
|
1307 | - // thou shall not pass !!! |
|
1308 | - $this->checkout->continue_reg = false; |
|
1309 | - // any form validation errors? |
|
1310 | - if ($this->checkout->current_step->reg_form->submission_error_message() !== '') { |
|
1311 | - $submission_error_messages = array(); |
|
1312 | - // bad, bad, bad registrant |
|
1313 | - foreach ( |
|
1314 | - $this->checkout->current_step->reg_form->get_validation_errors_accumulated() |
|
1315 | - as $validation_error |
|
1316 | - ) { |
|
1317 | - if ($validation_error instanceof EE_Validation_Error) { |
|
1318 | - $submission_error_messages[] = sprintf( |
|
1319 | - __('%s : %s', 'event_espresso'), |
|
1320 | - $validation_error->get_form_section()->html_label_text(), |
|
1321 | - $validation_error->getMessage() |
|
1322 | - ); |
|
1323 | - } |
|
1324 | - } |
|
1325 | - EE_Error::add_error( |
|
1326 | - implode('<br />', $submission_error_messages), |
|
1327 | - __FILE__, __FUNCTION__, __LINE__ |
|
1328 | - ); |
|
1329 | - } |
|
1330 | - // well not really... what will happen is |
|
1331 | - // we'll just get redirected back to redo the current step |
|
1332 | - $this->go_to_next_step(); |
|
1333 | - return false; |
|
1334 | - } |
|
1335 | - } |
|
1336 | - } catch (EE_Error $e) { |
|
1337 | - $e->get_error(); |
|
1338 | - } |
|
1339 | - } |
|
1340 | - return true; |
|
1341 | - } |
|
1342 | - |
|
1343 | - |
|
1344 | - |
|
1345 | - /** |
|
1346 | - * _process_action |
|
1347 | - * |
|
1348 | - * @access private |
|
1349 | - * @return void |
|
1350 | - * @throws EE_Error |
|
1351 | - */ |
|
1352 | - private function _process_form_action() |
|
1353 | - { |
|
1354 | - // what cha wanna do? |
|
1355 | - switch ($this->checkout->action) { |
|
1356 | - // AJAX next step reg form |
|
1357 | - case 'display_spco_reg_step' : |
|
1358 | - $this->checkout->redirect = false; |
|
1359 | - if (EE_Registry::instance()->REQ->ajax) { |
|
1360 | - $this->checkout->json_response->set_reg_step_html( |
|
1361 | - $this->checkout->current_step->display_reg_form() |
|
1362 | - ); |
|
1363 | - } |
|
1364 | - break; |
|
1365 | - default : |
|
1366 | - // meh... do one of those other steps first |
|
1367 | - if ( |
|
1368 | - ! empty($this->checkout->action) |
|
1369 | - && is_callable(array($this->checkout->current_step, $this->checkout->action)) |
|
1370 | - ) { |
|
1371 | - // dynamically creates hook point like: |
|
1372 | - // AHEE__Single_Page_Checkout__before_attendee_information__process_reg_step |
|
1373 | - do_action( |
|
1374 | - "AHEE__Single_Page_Checkout__before_{$this->checkout->current_step->slug()}__{$this->checkout->action}", |
|
1375 | - $this->checkout->current_step |
|
1376 | - ); |
|
1377 | - // call action on current step |
|
1378 | - if (call_user_func(array($this->checkout->current_step, $this->checkout->action))) { |
|
1379 | - // good registrant, you get to proceed |
|
1380 | - if ( |
|
1381 | - $this->checkout->current_step->success_message() !== '' |
|
1382 | - && apply_filters( |
|
1383 | - 'FHEE__Single_Page_Checkout___process_form_action__display_success', |
|
1384 | - false |
|
1385 | - ) |
|
1386 | - ) { |
|
1387 | - EE_Error::add_success( |
|
1388 | - $this->checkout->current_step->success_message() |
|
1389 | - . '<br />' . $this->checkout->next_step->_instructions() |
|
1390 | - ); |
|
1391 | - } |
|
1392 | - // pack it up, pack it in... |
|
1393 | - $this->_setup_redirect(); |
|
1394 | - } |
|
1395 | - // dynamically creates hook point like: |
|
1396 | - // AHEE__Single_Page_Checkout__after_payment_options__process_reg_step |
|
1397 | - do_action( |
|
1398 | - "AHEE__Single_Page_Checkout__after_{$this->checkout->current_step->slug()}__{$this->checkout->action}", |
|
1399 | - $this->checkout->current_step |
|
1400 | - ); |
|
1401 | - } else { |
|
1402 | - EE_Error::add_error( |
|
1403 | - sprintf( |
|
1404 | - __( |
|
1405 | - 'The requested form action "%s" does not exist for the current "%s" registration step.', |
|
1406 | - 'event_espresso' |
|
1407 | - ), |
|
1408 | - $this->checkout->action, |
|
1409 | - $this->checkout->current_step->name() |
|
1410 | - ), |
|
1411 | - __FILE__, |
|
1412 | - __FUNCTION__, |
|
1413 | - __LINE__ |
|
1414 | - ); |
|
1415 | - } |
|
1416 | - // end default |
|
1417 | - } |
|
1418 | - // store our progress so far |
|
1419 | - $this->checkout->stash_transaction_and_checkout(); |
|
1420 | - // advance to the next step! If you pass GO, collect $200 |
|
1421 | - $this->go_to_next_step(); |
|
1422 | - } |
|
1423 | - |
|
1424 | - |
|
1425 | - |
|
1426 | - /** |
|
1427 | - * add_styles_and_scripts |
|
1428 | - * |
|
1429 | - * @access public |
|
1430 | - * @return void |
|
1431 | - */ |
|
1432 | - public function add_styles_and_scripts() |
|
1433 | - { |
|
1434 | - // i18n |
|
1435 | - $this->translate_js_strings(); |
|
1436 | - if ($this->checkout->admin_request) { |
|
1437 | - add_action('admin_enqueue_scripts', array($this, 'enqueue_styles_and_scripts'), 10); |
|
1438 | - } else { |
|
1439 | - add_action('wp_enqueue_scripts', array($this, 'enqueue_styles_and_scripts'), 10); |
|
1440 | - } |
|
1441 | - } |
|
1442 | - |
|
1443 | - |
|
1444 | - |
|
1445 | - /** |
|
1446 | - * translate_js_strings |
|
1447 | - * |
|
1448 | - * @access public |
|
1449 | - * @return void |
|
1450 | - */ |
|
1451 | - public function translate_js_strings() |
|
1452 | - { |
|
1453 | - EE_Registry::$i18n_js_strings['revisit'] = $this->checkout->revisit; |
|
1454 | - EE_Registry::$i18n_js_strings['e_reg_url_link'] = $this->checkout->reg_url_link; |
|
1455 | - EE_Registry::$i18n_js_strings['server_error'] = __( |
|
1456 | - 'An unknown error occurred on the server while attempting to process your request. Please refresh the page and try again or contact support.', |
|
1457 | - 'event_espresso' |
|
1458 | - ); |
|
1459 | - EE_Registry::$i18n_js_strings['invalid_json_response'] = __( |
|
1460 | - 'An invalid response was returned from the server while attempting to process your request. Please refresh the page and try again or contact support.', |
|
1461 | - 'event_espresso' |
|
1462 | - ); |
|
1463 | - EE_Registry::$i18n_js_strings['validation_error'] = __( |
|
1464 | - 'There appears to be a problem with the form validation configuration! Please check the admin settings or contact support.', |
|
1465 | - 'event_espresso' |
|
1466 | - ); |
|
1467 | - EE_Registry::$i18n_js_strings['invalid_payment_method'] = __( |
|
1468 | - 'There appears to be a problem with the payment method configuration! Please refresh the page and try again or contact support.', |
|
1469 | - 'event_espresso' |
|
1470 | - ); |
|
1471 | - EE_Registry::$i18n_js_strings['reg_step_error'] = __( |
|
1472 | - 'This registration step could not be completed. Please refresh the page and try again.', |
|
1473 | - 'event_espresso' |
|
1474 | - ); |
|
1475 | - EE_Registry::$i18n_js_strings['invalid_coupon'] = __( |
|
1476 | - 'We\'re sorry but that coupon code does not appear to be valid. If this is incorrect, please contact the site administrator.', |
|
1477 | - 'event_espresso' |
|
1478 | - ); |
|
1479 | - EE_Registry::$i18n_js_strings['process_registration'] = sprintf( |
|
1480 | - __( |
|
1481 | - 'Please wait while we process your registration.%sDo not refresh the page or navigate away while this is happening.%sThank you for your patience.', |
|
1482 | - 'event_espresso' |
|
1483 | - ), |
|
1484 | - '<br/>', |
|
1485 | - '<br/>' |
|
1486 | - ); |
|
1487 | - EE_Registry::$i18n_js_strings['language'] = get_bloginfo('language'); |
|
1488 | - EE_Registry::$i18n_js_strings['EESID'] = EE_Registry::instance()->SSN->id(); |
|
1489 | - EE_Registry::$i18n_js_strings['currency'] = EE_Registry::instance()->CFG->currency; |
|
1490 | - EE_Registry::$i18n_js_strings['datepicker_yearRange'] = '-150:+20'; |
|
1491 | - EE_Registry::$i18n_js_strings['timer_years'] = __('years', 'event_espresso'); |
|
1492 | - EE_Registry::$i18n_js_strings['timer_months'] = __('months', 'event_espresso'); |
|
1493 | - EE_Registry::$i18n_js_strings['timer_weeks'] = __('weeks', 'event_espresso'); |
|
1494 | - EE_Registry::$i18n_js_strings['timer_days'] = __('days', 'event_espresso'); |
|
1495 | - EE_Registry::$i18n_js_strings['timer_hours'] = __('hours', 'event_espresso'); |
|
1496 | - EE_Registry::$i18n_js_strings['timer_minutes'] = __('minutes', 'event_espresso'); |
|
1497 | - EE_Registry::$i18n_js_strings['timer_seconds'] = __('seconds', 'event_espresso'); |
|
1498 | - EE_Registry::$i18n_js_strings['timer_year'] = __('year', 'event_espresso'); |
|
1499 | - EE_Registry::$i18n_js_strings['timer_month'] = __('month', 'event_espresso'); |
|
1500 | - EE_Registry::$i18n_js_strings['timer_week'] = __('week', 'event_espresso'); |
|
1501 | - EE_Registry::$i18n_js_strings['timer_day'] = __('day', 'event_espresso'); |
|
1502 | - EE_Registry::$i18n_js_strings['timer_hour'] = __('hour', 'event_espresso'); |
|
1503 | - EE_Registry::$i18n_js_strings['timer_minute'] = __('minute', 'event_espresso'); |
|
1504 | - EE_Registry::$i18n_js_strings['timer_second'] = __('second', 'event_espresso'); |
|
1505 | - EE_Registry::$i18n_js_strings['registration_expiration_notice'] = sprintf( |
|
1506 | - __( |
|
1507 | - '%1$sWe\'re sorry, but your registration time has expired.%2$s%3$s%4$sIf you still wish to complete your registration, please return to the %5$sEvent List%6$sEvent List%7$s and reselect your tickets if available. Please except our apologies for any inconvenience this may have caused.%8$s', |
|
1508 | - 'event_espresso' |
|
1509 | - ), |
|
1510 | - '<h4 class="important-notice">', |
|
1511 | - '</h4>', |
|
1512 | - '<br />', |
|
1513 | - '<p>', |
|
1514 | - '<a href="' . get_post_type_archive_link('espresso_events') . '" title="', |
|
1515 | - '">', |
|
1516 | - '</a>', |
|
1517 | - '</p>' |
|
1518 | - ); |
|
1519 | - EE_Registry::$i18n_js_strings['ajax_submit'] = apply_filters( |
|
1520 | - 'FHEE__Single_Page_Checkout__translate_js_strings__ajax_submit', |
|
1521 | - true |
|
1522 | - ); |
|
1523 | - EE_Registry::$i18n_js_strings['session_extension'] = absint( |
|
1524 | - apply_filters('FHEE__EE_Session__extend_expiration__seconds_added', 10 * MINUTE_IN_SECONDS) |
|
1525 | - ); |
|
1526 | - EE_Registry::$i18n_js_strings['session_expiration'] = gmdate( |
|
1527 | - 'M d, Y H:i:s', |
|
1528 | - EE_Registry::instance()->SSN->expiration() + (get_option('gmt_offset') * HOUR_IN_SECONDS) |
|
1529 | - ); |
|
1530 | - } |
|
1531 | - |
|
1532 | - |
|
1533 | - |
|
1534 | - /** |
|
1535 | - * enqueue_styles_and_scripts |
|
1536 | - * |
|
1537 | - * @access public |
|
1538 | - * @return void |
|
1539 | - * @throws EE_Error |
|
1540 | - */ |
|
1541 | - public function enqueue_styles_and_scripts() |
|
1542 | - { |
|
1543 | - // load css |
|
1544 | - wp_register_style( |
|
1545 | - 'single_page_checkout', |
|
1546 | - SPCO_CSS_URL . 'single_page_checkout.css', |
|
1547 | - array('espresso_default'), |
|
1548 | - EVENT_ESPRESSO_VERSION |
|
1549 | - ); |
|
1550 | - wp_enqueue_style('single_page_checkout'); |
|
1551 | - // load JS |
|
1552 | - wp_register_script( |
|
1553 | - 'jquery_plugin', |
|
1554 | - EE_THIRD_PARTY_URL . 'jquery .plugin.min.js', |
|
1555 | - array('jquery'), |
|
1556 | - '1.0.1', |
|
1557 | - true |
|
1558 | - ); |
|
1559 | - wp_register_script( |
|
1560 | - 'jquery_countdown', |
|
1561 | - EE_THIRD_PARTY_URL . 'jquery .countdown.min.js', |
|
1562 | - array('jquery_plugin'), |
|
1563 | - '2.0.2', |
|
1564 | - true |
|
1565 | - ); |
|
1566 | - wp_register_script( |
|
1567 | - 'single_page_checkout', |
|
1568 | - SPCO_JS_URL . 'single_page_checkout.js', |
|
1569 | - array('espresso_core', 'underscore', 'ee_form_section_validation', 'jquery_countdown'), |
|
1570 | - EVENT_ESPRESSO_VERSION, |
|
1571 | - true |
|
1572 | - ); |
|
1573 | - if ($this->checkout->registration_form instanceof EE_Form_Section_Proper) { |
|
1574 | - $this->checkout->registration_form->enqueue_js(); |
|
1575 | - } |
|
1576 | - if ($this->checkout->current_step->reg_form instanceof EE_Form_Section_Proper) { |
|
1577 | - $this->checkout->current_step->reg_form->enqueue_js(); |
|
1578 | - } |
|
1579 | - wp_enqueue_script('single_page_checkout'); |
|
1580 | - /** |
|
1581 | - * global action hook for enqueueing styles and scripts with |
|
1582 | - * spco calls. |
|
1583 | - */ |
|
1584 | - do_action('AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts', $this); |
|
1585 | - /** |
|
1586 | - * dynamic action hook for enqueueing styles and scripts with spco calls. |
|
1587 | - * The hook will end up being something like: |
|
1588 | - * AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__attendee_information |
|
1589 | - */ |
|
1590 | - do_action( |
|
1591 | - 'AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__' . $this->checkout->current_step->slug(), |
|
1592 | - $this |
|
1593 | - ); |
|
1594 | - } |
|
1595 | - |
|
1596 | - |
|
1597 | - |
|
1598 | - /** |
|
1599 | - * display the Registration Single Page Checkout Form |
|
1600 | - * |
|
1601 | - * @access private |
|
1602 | - * @return void |
|
1603 | - * @throws EE_Error |
|
1604 | - */ |
|
1605 | - private function _display_spco_reg_form() |
|
1606 | - { |
|
1607 | - // if registering via the admin, just display the reg form for the current step |
|
1608 | - if ($this->checkout->admin_request) { |
|
1609 | - EE_Registry::instance()->REQ->add_output($this->checkout->current_step->display_reg_form()); |
|
1610 | - } else { |
|
1611 | - // add powered by EE msg |
|
1612 | - add_action('AHEE__SPCO__reg_form_footer', array('EED_Single_Page_Checkout', 'display_registration_footer')); |
|
1613 | - $empty_cart = count( |
|
1614 | - $this->checkout->transaction->registrations($this->checkout->reg_cache_where_params) |
|
1615 | - ) < 1; |
|
1616 | - EE_Registry::$i18n_js_strings['empty_cart'] = $empty_cart; |
|
1617 | - $cookies_not_set_msg = ''; |
|
1618 | - if ($empty_cart && ! isset($_COOKIE['ee_cookie_test'])) { |
|
1619 | - $cookies_not_set_msg = apply_filters( |
|
1620 | - 'FHEE__Single_Page_Checkout__display_spco_reg_form__cookies_not_set_msg', |
|
1621 | - sprintf( |
|
1622 | - __( |
|
1623 | - '%1$s%3$sIt appears your browser is not currently set to accept Cookies%4$s%5$sIn order to register for events, you need to enable cookies.%7$sIf you require assistance, then click the following link to learn how to %8$senable cookies%9$s%6$s%2$s', |
|
1624 | - 'event_espresso' |
|
1625 | - ), |
|
1626 | - '<div class="ee-attention">', |
|
1627 | - '</div>', |
|
1628 | - '<h6 class="important-notice">', |
|
1629 | - '</h6>', |
|
1630 | - '<p>', |
|
1631 | - '</p>', |
|
1632 | - '<br />', |
|
1633 | - '<a href="http://www.whatarecookies.com/enable.asp" target="_blank">', |
|
1634 | - '</a>' |
|
1635 | - ) |
|
1636 | - ); |
|
1637 | - } |
|
1638 | - $this->checkout->registration_form = new EE_Form_Section_Proper( |
|
1639 | - array( |
|
1640 | - 'name' => 'single-page-checkout', |
|
1641 | - 'html_id' => 'ee-single-page-checkout-dv', |
|
1642 | - 'layout_strategy' => |
|
1643 | - new EE_Template_Layout( |
|
1644 | - array( |
|
1645 | - 'layout_template_file' => SPCO_TEMPLATES_PATH . 'registration_page_wrapper.template.php', |
|
1646 | - 'template_args' => array( |
|
1647 | - 'empty_cart' => $empty_cart, |
|
1648 | - 'revisit' => $this->checkout->revisit, |
|
1649 | - 'reg_steps' => $this->checkout->reg_steps, |
|
1650 | - 'next_step' => $this->checkout->next_step instanceof EE_SPCO_Reg_Step |
|
1651 | - ? $this->checkout->next_step->slug() |
|
1652 | - : '', |
|
1653 | - 'cancel_page_url' => $this->checkout->cancel_page_url, |
|
1654 | - 'empty_msg' => apply_filters( |
|
1655 | - 'FHEE__Single_Page_Checkout__display_spco_reg_form__empty_msg', |
|
1656 | - sprintf( |
|
1657 | - __( |
|
1658 | - 'You need to %1$sReturn to Events list%2$sselect at least one event%3$s before you can proceed with the registration process.', |
|
1659 | - 'event_espresso' |
|
1660 | - ), |
|
1661 | - '<a href="' |
|
1662 | - . get_post_type_archive_link('espresso_events') |
|
1663 | - . '" title="', |
|
1664 | - '">', |
|
1665 | - '</a>' |
|
1666 | - ) |
|
1667 | - ), |
|
1668 | - 'cookies_not_set_msg' => $cookies_not_set_msg, |
|
1669 | - 'registration_time_limit' => $this->checkout->get_registration_time_limit(), |
|
1670 | - 'session_expiration' => gmdate( |
|
1671 | - 'M d, Y H:i:s', |
|
1672 | - EE_Registry::instance()->SSN->expiration() |
|
1673 | - + (get_option('gmt_offset') * HOUR_IN_SECONDS) |
|
1674 | - ), |
|
1675 | - ), |
|
1676 | - ) |
|
1677 | - ), |
|
1678 | - ) |
|
1679 | - ); |
|
1680 | - // load template and add to output sent that gets filtered into the_content() |
|
1681 | - EE_Registry::instance()->REQ->add_output($this->checkout->registration_form->get_html()); |
|
1682 | - } |
|
1683 | - } |
|
1684 | - |
|
1685 | - |
|
1686 | - |
|
1687 | - /** |
|
1688 | - * add_extra_finalize_registration_inputs |
|
1689 | - * |
|
1690 | - * @access public |
|
1691 | - * @param $next_step |
|
1692 | - * @internal param string $label |
|
1693 | - * @return void |
|
1694 | - */ |
|
1695 | - public function add_extra_finalize_registration_inputs($next_step) |
|
1696 | - { |
|
1697 | - if ($next_step === 'finalize_registration') { |
|
1698 | - echo '<div id="spco-extra-finalize_registration-inputs-dv"></div>'; |
|
1699 | - } |
|
1700 | - } |
|
1701 | - |
|
1702 | - |
|
1703 | - |
|
1704 | - /** |
|
1705 | - * display_registration_footer |
|
1706 | - * |
|
1707 | - * @access public |
|
1708 | - * @return string |
|
1709 | - */ |
|
1710 | - public static function display_registration_footer() |
|
1711 | - { |
|
1712 | - if ( |
|
1713 | - apply_filters( |
|
1714 | - 'FHEE__EE_Front__Controller__show_reg_footer', |
|
1715 | - EE_Registry::instance()->CFG->admin->show_reg_footer |
|
1716 | - ) |
|
1717 | - ) { |
|
1718 | - add_filter( |
|
1719 | - 'FHEE__EEH_Template__powered_by_event_espresso__url', |
|
1720 | - function ($url) { |
|
1721 | - return apply_filters('FHEE__EE_Front_Controller__registration_footer__url', $url); |
|
1722 | - } |
|
1723 | - ); |
|
1724 | - echo apply_filters( |
|
1725 | - 'FHEE__EE_Front_Controller__display_registration_footer', |
|
1726 | - \EEH_Template::powered_by_event_espresso( |
|
1727 | - '', |
|
1728 | - 'espresso-registration-footer-dv', |
|
1729 | - array('utm_content' => 'registration_checkout') |
|
1730 | - ) |
|
1731 | - ); |
|
1732 | - } |
|
1733 | - return ''; |
|
1734 | - } |
|
1735 | - |
|
1736 | - |
|
1737 | - |
|
1738 | - /** |
|
1739 | - * unlock_transaction |
|
1740 | - * |
|
1741 | - * @access public |
|
1742 | - * @return void |
|
1743 | - * @throws EE_Error |
|
1744 | - */ |
|
1745 | - public function unlock_transaction() |
|
1746 | - { |
|
1747 | - if ($this->checkout->transaction instanceof EE_Transaction) { |
|
1748 | - $this->checkout->transaction->unlock(); |
|
1749 | - } |
|
1750 | - } |
|
1751 | - |
|
1752 | - |
|
1753 | - |
|
1754 | - /** |
|
1755 | - * _setup_redirect |
|
1756 | - * |
|
1757 | - * @access private |
|
1758 | - * @return void |
|
1759 | - */ |
|
1760 | - private function _setup_redirect() |
|
1761 | - { |
|
1762 | - if ($this->checkout->continue_reg && $this->checkout->next_step instanceof EE_SPCO_Reg_Step) { |
|
1763 | - $this->checkout->redirect = true; |
|
1764 | - if (empty($this->checkout->redirect_url)) { |
|
1765 | - $this->checkout->redirect_url = $this->checkout->next_step->reg_step_url(); |
|
1766 | - } |
|
1767 | - $this->checkout->redirect_url = apply_filters( |
|
1768 | - 'FHEE__EED_Single_Page_Checkout___setup_redirect__checkout_redirect_url', |
|
1769 | - $this->checkout->redirect_url, |
|
1770 | - $this->checkout |
|
1771 | - ); |
|
1772 | - } |
|
1773 | - } |
|
1774 | - |
|
1775 | - |
|
1776 | - |
|
1777 | - /** |
|
1778 | - * handle ajax message responses and redirects |
|
1779 | - * |
|
1780 | - * @access public |
|
1781 | - * @return void |
|
1782 | - * @throws EE_Error |
|
1783 | - */ |
|
1784 | - public function go_to_next_step() |
|
1785 | - { |
|
1786 | - if (EE_Registry::instance()->REQ->ajax) { |
|
1787 | - // capture contents of output buffer we started earlier in the request, and insert into JSON response |
|
1788 | - $this->checkout->json_response->set_unexpected_errors(ob_get_clean()); |
|
1789 | - } |
|
1790 | - $this->unlock_transaction(); |
|
1791 | - // just return for these conditions |
|
1792 | - if ( |
|
1793 | - $this->checkout->admin_request |
|
1794 | - || $this->checkout->action === 'redirect_form' |
|
1795 | - || $this->checkout->action === 'update_checkout' |
|
1796 | - ) { |
|
1797 | - return; |
|
1798 | - } |
|
1799 | - // AJAX response |
|
1800 | - $this->_handle_json_response(); |
|
1801 | - // redirect to next step or the Thank You page |
|
1802 | - $this->_handle_html_redirects(); |
|
1803 | - // hmmm... must be something wrong, so let's just display the form again ! |
|
1804 | - $this->_display_spco_reg_form(); |
|
1805 | - } |
|
1806 | - |
|
1807 | - |
|
1808 | - |
|
1809 | - /** |
|
1810 | - * _handle_json_response |
|
1811 | - * |
|
1812 | - * @access protected |
|
1813 | - * @return void |
|
1814 | - */ |
|
1815 | - protected function _handle_json_response() |
|
1816 | - { |
|
1817 | - // if this is an ajax request |
|
1818 | - if (EE_Registry::instance()->REQ->ajax) { |
|
1819 | - // DEBUG LOG |
|
1820 | - //$this->checkout->log( |
|
1821 | - // __CLASS__, __FUNCTION__, __LINE__, |
|
1822 | - // array( |
|
1823 | - // 'json_response_redirect_url' => $this->checkout->json_response->redirect_url(), |
|
1824 | - // 'redirect' => $this->checkout->redirect, |
|
1825 | - // 'continue_reg' => $this->checkout->continue_reg, |
|
1826 | - // ) |
|
1827 | - //); |
|
1828 | - $this->checkout->json_response->set_registration_time_limit( |
|
1829 | - $this->checkout->get_registration_time_limit() |
|
1830 | - ); |
|
1831 | - $this->checkout->json_response->set_payment_amount($this->checkout->amount_owing); |
|
1832 | - // just send the ajax ( |
|
1833 | - $json_response = apply_filters( |
|
1834 | - 'FHEE__EE_Single_Page_Checkout__JSON_response', |
|
1835 | - $this->checkout->json_response |
|
1836 | - ); |
|
1837 | - echo $json_response; |
|
1838 | - exit(); |
|
1839 | - } |
|
1840 | - } |
|
1841 | - |
|
1842 | - |
|
1843 | - |
|
1844 | - /** |
|
1845 | - * _handle_redirects |
|
1846 | - * |
|
1847 | - * @access protected |
|
1848 | - * @return void |
|
1849 | - */ |
|
1850 | - protected function _handle_html_redirects() |
|
1851 | - { |
|
1852 | - // going somewhere ? |
|
1853 | - if ($this->checkout->redirect && ! empty($this->checkout->redirect_url)) { |
|
1854 | - // store notices in a transient |
|
1855 | - EE_Error::get_notices(false, true, true); |
|
1856 | - // DEBUG LOG |
|
1857 | - //$this->checkout->log( |
|
1858 | - // __CLASS__, __FUNCTION__, __LINE__, |
|
1859 | - // array( |
|
1860 | - // 'headers_sent' => headers_sent(), |
|
1861 | - // 'redirect_url' => $this->checkout->redirect_url, |
|
1862 | - // 'headers_list' => headers_list(), |
|
1863 | - // ) |
|
1864 | - //); |
|
1865 | - wp_safe_redirect($this->checkout->redirect_url); |
|
1866 | - exit(); |
|
1867 | - } |
|
1868 | - } |
|
1869 | - |
|
1870 | - |
|
1871 | - |
|
1872 | - /** |
|
1873 | - * set_checkout_anchor |
|
1874 | - * |
|
1875 | - * @access public |
|
1876 | - * @return void |
|
1877 | - */ |
|
1878 | - public function set_checkout_anchor() |
|
1879 | - { |
|
1880 | - echo '<a id="checkout" style="float: left; margin-left: -999em;"></a>'; |
|
1881 | - } |
|
23 | + /** |
|
24 | + * $_initialized - has the SPCO controller already been initialized ? |
|
25 | + * |
|
26 | + * @access private |
|
27 | + * @var bool $_initialized |
|
28 | + */ |
|
29 | + private static $_initialized = false; |
|
30 | + |
|
31 | + |
|
32 | + /** |
|
33 | + * $_checkout_verified - is the EE_Checkout verified as correct for this request ? |
|
34 | + * |
|
35 | + * @access private |
|
36 | + * @var bool $_valid_checkout |
|
37 | + */ |
|
38 | + private static $_checkout_verified = true; |
|
39 | + |
|
40 | + /** |
|
41 | + * $_reg_steps_array - holds initial array of reg steps |
|
42 | + * |
|
43 | + * @access private |
|
44 | + * @var array $_reg_steps_array |
|
45 | + */ |
|
46 | + private static $_reg_steps_array = array(); |
|
47 | + |
|
48 | + /** |
|
49 | + * $checkout - EE_Checkout object for handling the properties of the current checkout process |
|
50 | + * |
|
51 | + * @access public |
|
52 | + * @var EE_Checkout $checkout |
|
53 | + */ |
|
54 | + public $checkout; |
|
55 | + |
|
56 | + |
|
57 | + |
|
58 | + /** |
|
59 | + * @return EED_Module|EED_Single_Page_Checkout |
|
60 | + */ |
|
61 | + public static function instance() |
|
62 | + { |
|
63 | + add_filter('EED_Single_Page_Checkout__SPCO_active', '__return_true'); |
|
64 | + return parent::get_instance(__CLASS__); |
|
65 | + } |
|
66 | + |
|
67 | + |
|
68 | + |
|
69 | + /** |
|
70 | + * @return EE_CART |
|
71 | + */ |
|
72 | + public function cart() |
|
73 | + { |
|
74 | + return $this->checkout->cart; |
|
75 | + } |
|
76 | + |
|
77 | + |
|
78 | + |
|
79 | + /** |
|
80 | + * @return EE_Transaction |
|
81 | + */ |
|
82 | + public function transaction() |
|
83 | + { |
|
84 | + return $this->checkout->transaction; |
|
85 | + } |
|
86 | + |
|
87 | + |
|
88 | + |
|
89 | + /** |
|
90 | + * set_hooks - for hooking into EE Core, other modules, etc |
|
91 | + * |
|
92 | + * @access public |
|
93 | + * @return void |
|
94 | + * @throws EE_Error |
|
95 | + */ |
|
96 | + public static function set_hooks() |
|
97 | + { |
|
98 | + EED_Single_Page_Checkout::set_definitions(); |
|
99 | + } |
|
100 | + |
|
101 | + |
|
102 | + |
|
103 | + /** |
|
104 | + * set_hooks_admin - for hooking into EE Admin Core, other modules, etc |
|
105 | + * |
|
106 | + * @access public |
|
107 | + * @return void |
|
108 | + * @throws EE_Error |
|
109 | + */ |
|
110 | + public static function set_hooks_admin() |
|
111 | + { |
|
112 | + EED_Single_Page_Checkout::set_definitions(); |
|
113 | + if ( ! (defined('DOING_AJAX') && DOING_AJAX)) { |
|
114 | + return; |
|
115 | + } |
|
116 | + // going to start an output buffer in case anything gets accidentally output |
|
117 | + // that might disrupt our JSON response |
|
118 | + ob_start(); |
|
119 | + EED_Single_Page_Checkout::load_request_handler(); |
|
120 | + EED_Single_Page_Checkout::load_reg_steps(); |
|
121 | + // set ajax hooks |
|
122 | + add_action('wp_ajax_process_reg_step', array('EED_Single_Page_Checkout', 'process_reg_step')); |
|
123 | + add_action('wp_ajax_nopriv_process_reg_step', array('EED_Single_Page_Checkout', 'process_reg_step')); |
|
124 | + add_action('wp_ajax_display_spco_reg_step', array('EED_Single_Page_Checkout', 'display_reg_step')); |
|
125 | + add_action('wp_ajax_nopriv_display_spco_reg_step', array('EED_Single_Page_Checkout', 'display_reg_step')); |
|
126 | + add_action('wp_ajax_update_reg_step', array('EED_Single_Page_Checkout', 'update_reg_step')); |
|
127 | + add_action('wp_ajax_nopriv_update_reg_step', array('EED_Single_Page_Checkout', 'update_reg_step')); |
|
128 | + } |
|
129 | + |
|
130 | + |
|
131 | + |
|
132 | + /** |
|
133 | + * process ajax request |
|
134 | + * |
|
135 | + * @param string $ajax_action |
|
136 | + * @throws EE_Error |
|
137 | + */ |
|
138 | + public static function process_ajax_request($ajax_action) |
|
139 | + { |
|
140 | + EE_Registry::instance()->REQ->set('action', $ajax_action); |
|
141 | + EED_Single_Page_Checkout::instance()->_initialize(); |
|
142 | + } |
|
143 | + |
|
144 | + |
|
145 | + |
|
146 | + /** |
|
147 | + * ajax display registration step |
|
148 | + * |
|
149 | + * @throws EE_Error |
|
150 | + */ |
|
151 | + public static function display_reg_step() |
|
152 | + { |
|
153 | + EED_Single_Page_Checkout::process_ajax_request('display_spco_reg_step'); |
|
154 | + } |
|
155 | + |
|
156 | + |
|
157 | + |
|
158 | + /** |
|
159 | + * ajax process registration step |
|
160 | + * |
|
161 | + * @throws EE_Error |
|
162 | + */ |
|
163 | + public static function process_reg_step() |
|
164 | + { |
|
165 | + EED_Single_Page_Checkout::process_ajax_request('process_reg_step'); |
|
166 | + } |
|
167 | + |
|
168 | + |
|
169 | + |
|
170 | + /** |
|
171 | + * ajax process registration step |
|
172 | + * |
|
173 | + * @throws EE_Error |
|
174 | + */ |
|
175 | + public static function update_reg_step() |
|
176 | + { |
|
177 | + EED_Single_Page_Checkout::process_ajax_request('update_reg_step'); |
|
178 | + } |
|
179 | + |
|
180 | + |
|
181 | + |
|
182 | + /** |
|
183 | + * update_checkout |
|
184 | + * |
|
185 | + * @access public |
|
186 | + * @return void |
|
187 | + * @throws EE_Error |
|
188 | + */ |
|
189 | + public static function update_checkout() |
|
190 | + { |
|
191 | + EED_Single_Page_Checkout::process_ajax_request('update_checkout'); |
|
192 | + } |
|
193 | + |
|
194 | + |
|
195 | + |
|
196 | + /** |
|
197 | + * load_request_handler |
|
198 | + * |
|
199 | + * @access public |
|
200 | + * @return void |
|
201 | + */ |
|
202 | + public static function load_request_handler() |
|
203 | + { |
|
204 | + // load core Request_Handler class |
|
205 | + if (EE_Registry::instance()->REQ !== null) { |
|
206 | + EE_Registry::instance()->load_core('Request_Handler'); |
|
207 | + } |
|
208 | + } |
|
209 | + |
|
210 | + |
|
211 | + |
|
212 | + /** |
|
213 | + * set_definitions |
|
214 | + * |
|
215 | + * @access public |
|
216 | + * @return void |
|
217 | + * @throws EE_Error |
|
218 | + */ |
|
219 | + public static function set_definitions() |
|
220 | + { |
|
221 | + if(defined('SPCO_BASE_PATH')) { |
|
222 | + return; |
|
223 | + } |
|
224 | + define( |
|
225 | + 'SPCO_BASE_PATH', |
|
226 | + rtrim(str_replace(array('\\', '/'), DS, plugin_dir_path(__FILE__)), DS) . DS |
|
227 | + ); |
|
228 | + define('SPCO_CSS_URL', plugin_dir_url(__FILE__) . 'css' . DS); |
|
229 | + define('SPCO_IMG_URL', plugin_dir_url(__FILE__) . 'img' . DS); |
|
230 | + define('SPCO_JS_URL', plugin_dir_url(__FILE__) . 'js' . DS); |
|
231 | + define('SPCO_INC_PATH', SPCO_BASE_PATH . 'inc' . DS); |
|
232 | + define('SPCO_REG_STEPS_PATH', SPCO_BASE_PATH . 'reg_steps' . DS); |
|
233 | + define('SPCO_TEMPLATES_PATH', SPCO_BASE_PATH . 'templates' . DS); |
|
234 | + EEH_Autoloader::register_autoloaders_for_each_file_in_folder(SPCO_BASE_PATH, true); |
|
235 | + EE_Registry::$i18n_js_strings['registration_expiration_notice'] = sprintf( |
|
236 | + __('%1$sWe\'re sorry, but you\'re registration time has expired.%2$s%4$sIf you still wish to complete your registration, please return to the %5$sEvent List%6$sEvent List%7$s and reselect your tickets if available. Please except our apologies for any inconvenience this may have caused.%8$s', |
|
237 | + 'event_espresso'), |
|
238 | + '<h4 class="important-notice">', |
|
239 | + '</h4>', |
|
240 | + '<br />', |
|
241 | + '<p>', |
|
242 | + '<a href="' . get_post_type_archive_link('espresso_events') . '" title="', |
|
243 | + '">', |
|
244 | + '</a>', |
|
245 | + '</p>' |
|
246 | + ); |
|
247 | + } |
|
248 | + |
|
249 | + |
|
250 | + |
|
251 | + /** |
|
252 | + * load_reg_steps |
|
253 | + * loads and instantiates each reg step based on the EE_Registry::instance()->CFG->registration->reg_steps array |
|
254 | + * |
|
255 | + * @access private |
|
256 | + * @throws EE_Error |
|
257 | + */ |
|
258 | + public static function load_reg_steps() |
|
259 | + { |
|
260 | + static $reg_steps_loaded = false; |
|
261 | + if ($reg_steps_loaded) { |
|
262 | + return; |
|
263 | + } |
|
264 | + // filter list of reg_steps |
|
265 | + $reg_steps_to_load = (array)apply_filters( |
|
266 | + 'AHEE__SPCO__load_reg_steps__reg_steps_to_load', |
|
267 | + EED_Single_Page_Checkout::get_reg_steps() |
|
268 | + ); |
|
269 | + // sort by key (order) |
|
270 | + ksort($reg_steps_to_load); |
|
271 | + // loop through folders |
|
272 | + foreach ($reg_steps_to_load as $order => $reg_step) { |
|
273 | + // we need a |
|
274 | + if (isset($reg_step['file_path'], $reg_step['class_name'], $reg_step['slug'])) { |
|
275 | + // copy over to the reg_steps_array |
|
276 | + EED_Single_Page_Checkout::$_reg_steps_array[$order] = $reg_step; |
|
277 | + // register custom key route for each reg step |
|
278 | + // ie: step=>"slug" - this is the entire reason we load the reg steps array now |
|
279 | + EE_Config::register_route( |
|
280 | + $reg_step['slug'], |
|
281 | + 'EED_Single_Page_Checkout', |
|
282 | + 'run', |
|
283 | + 'step' |
|
284 | + ); |
|
285 | + // add AJAX or other hooks |
|
286 | + if (isset($reg_step['has_hooks']) && $reg_step['has_hooks']) { |
|
287 | + // setup autoloaders if necessary |
|
288 | + if ( ! class_exists($reg_step['class_name'])) { |
|
289 | + EEH_Autoloader::register_autoloaders_for_each_file_in_folder( |
|
290 | + $reg_step['file_path'], |
|
291 | + true |
|
292 | + ); |
|
293 | + } |
|
294 | + if (is_callable($reg_step['class_name'], 'set_hooks')) { |
|
295 | + call_user_func(array($reg_step['class_name'], 'set_hooks')); |
|
296 | + } |
|
297 | + } |
|
298 | + } |
|
299 | + } |
|
300 | + $reg_steps_loaded = true; |
|
301 | + } |
|
302 | + |
|
303 | + |
|
304 | + |
|
305 | + /** |
|
306 | + * get_reg_steps |
|
307 | + * |
|
308 | + * @access public |
|
309 | + * @return array |
|
310 | + */ |
|
311 | + public static function get_reg_steps() |
|
312 | + { |
|
313 | + $reg_steps = EE_Registry::instance()->CFG->registration->reg_steps; |
|
314 | + if (empty($reg_steps)) { |
|
315 | + $reg_steps = array( |
|
316 | + 10 => array( |
|
317 | + 'file_path' => SPCO_REG_STEPS_PATH . 'attendee_information', |
|
318 | + 'class_name' => 'EE_SPCO_Reg_Step_Attendee_Information', |
|
319 | + 'slug' => 'attendee_information', |
|
320 | + 'has_hooks' => false, |
|
321 | + ), |
|
322 | + 20 => array( |
|
323 | + 'file_path' => SPCO_REG_STEPS_PATH . 'registration_confirmation', |
|
324 | + 'class_name' => 'EE_SPCO_Reg_Step_Registration_Confirmation', |
|
325 | + 'slug' => 'registration_confirmation', |
|
326 | + 'has_hooks' => false, |
|
327 | + ), |
|
328 | + 30 => array( |
|
329 | + 'file_path' => SPCO_REG_STEPS_PATH . 'payment_options', |
|
330 | + 'class_name' => 'EE_SPCO_Reg_Step_Payment_Options', |
|
331 | + 'slug' => 'payment_options', |
|
332 | + 'has_hooks' => true, |
|
333 | + ), |
|
334 | + 999 => array( |
|
335 | + 'file_path' => SPCO_REG_STEPS_PATH . 'finalize_registration', |
|
336 | + 'class_name' => 'EE_SPCO_Reg_Step_Finalize_Registration', |
|
337 | + 'slug' => 'finalize_registration', |
|
338 | + 'has_hooks' => false, |
|
339 | + ), |
|
340 | + ); |
|
341 | + } |
|
342 | + return $reg_steps; |
|
343 | + } |
|
344 | + |
|
345 | + |
|
346 | + |
|
347 | + /** |
|
348 | + * registration_checkout_for_admin |
|
349 | + * |
|
350 | + * @access public |
|
351 | + * @return string |
|
352 | + * @throws EE_Error |
|
353 | + */ |
|
354 | + public static function registration_checkout_for_admin() |
|
355 | + { |
|
356 | + EED_Single_Page_Checkout::load_request_handler(); |
|
357 | + EE_Registry::instance()->REQ->set('step', 'attendee_information'); |
|
358 | + EE_Registry::instance()->REQ->set('action', 'display_spco_reg_step'); |
|
359 | + EE_Registry::instance()->REQ->set('process_form_submission', false); |
|
360 | + EED_Single_Page_Checkout::instance()->_initialize(); |
|
361 | + EED_Single_Page_Checkout::instance()->_display_spco_reg_form(); |
|
362 | + return EE_Registry::instance()->REQ->get_output(); |
|
363 | + } |
|
364 | + |
|
365 | + |
|
366 | + |
|
367 | + /** |
|
368 | + * process_registration_from_admin |
|
369 | + * |
|
370 | + * @access public |
|
371 | + * @return \EE_Transaction |
|
372 | + * @throws EE_Error |
|
373 | + */ |
|
374 | + public static function process_registration_from_admin() |
|
375 | + { |
|
376 | + EED_Single_Page_Checkout::load_request_handler(); |
|
377 | + EE_Registry::instance()->REQ->set('step', 'attendee_information'); |
|
378 | + EE_Registry::instance()->REQ->set('action', 'process_reg_step'); |
|
379 | + EE_Registry::instance()->REQ->set('process_form_submission', true); |
|
380 | + EED_Single_Page_Checkout::instance()->_initialize(); |
|
381 | + if (EED_Single_Page_Checkout::instance()->checkout->current_step->completed()) { |
|
382 | + $final_reg_step = end(EED_Single_Page_Checkout::instance()->checkout->reg_steps); |
|
383 | + if ($final_reg_step instanceof EE_SPCO_Reg_Step_Finalize_Registration) { |
|
384 | + EED_Single_Page_Checkout::instance()->checkout->set_reg_step_initiated($final_reg_step); |
|
385 | + if ($final_reg_step->process_reg_step()) { |
|
386 | + $final_reg_step->set_completed(); |
|
387 | + EED_Single_Page_Checkout::instance()->checkout->update_txn_reg_steps_array(); |
|
388 | + return EED_Single_Page_Checkout::instance()->checkout->transaction; |
|
389 | + } |
|
390 | + } |
|
391 | + } |
|
392 | + return null; |
|
393 | + } |
|
394 | + |
|
395 | + |
|
396 | + |
|
397 | + /** |
|
398 | + * run |
|
399 | + * |
|
400 | + * @access public |
|
401 | + * @param WP_Query $WP_Query |
|
402 | + * @return void |
|
403 | + * @throws EE_Error |
|
404 | + */ |
|
405 | + public function run($WP_Query) |
|
406 | + { |
|
407 | + if ( |
|
408 | + $WP_Query instanceof WP_Query |
|
409 | + && $WP_Query->is_main_query() |
|
410 | + && apply_filters('FHEE__EED_Single_Page_Checkout__run', true) |
|
411 | + && $this->_is_reg_checkout() |
|
412 | + ) { |
|
413 | + $this->_initialize(); |
|
414 | + } |
|
415 | + } |
|
416 | + |
|
417 | + |
|
418 | + |
|
419 | + /** |
|
420 | + * determines whether current url matches reg page url |
|
421 | + * |
|
422 | + * @return bool |
|
423 | + */ |
|
424 | + protected function _is_reg_checkout() |
|
425 | + { |
|
426 | + // get current permalink for reg page without any extra query args |
|
427 | + $reg_page_url = \get_permalink(EE_Config::instance()->core->reg_page_id); |
|
428 | + // get request URI for current request, but without the scheme or host |
|
429 | + $current_request_uri = \EEH_URL::filter_input_server_url('REQUEST_URI'); |
|
430 | + $current_request_uri = html_entity_decode($current_request_uri); |
|
431 | + // get array of query args from the current request URI |
|
432 | + $query_args = \EEH_URL::get_query_string($current_request_uri); |
|
433 | + // grab page id if it is set |
|
434 | + $page_id = isset($query_args['page_id']) ? absint($query_args['page_id']) : 0; |
|
435 | + // and remove the page id from the query args (we will re-add it later) |
|
436 | + unset($query_args['page_id']); |
|
437 | + // now strip all query args from current request URI |
|
438 | + $current_request_uri = remove_query_arg(array_keys($query_args), $current_request_uri); |
|
439 | + // and re-add the page id if it was set |
|
440 | + if ($page_id) { |
|
441 | + $current_request_uri = add_query_arg('page_id', $page_id, $current_request_uri); |
|
442 | + } |
|
443 | + // remove slashes and ? |
|
444 | + $current_request_uri = trim($current_request_uri, '?/'); |
|
445 | + // is current request URI part of the known full reg page URL ? |
|
446 | + return ! empty($current_request_uri) && strpos($reg_page_url, $current_request_uri) !== false; |
|
447 | + } |
|
448 | + |
|
449 | + |
|
450 | + |
|
451 | + /** |
|
452 | + * @param WP_Query $wp_query |
|
453 | + * @return void |
|
454 | + * @throws EE_Error |
|
455 | + */ |
|
456 | + public static function init($wp_query) |
|
457 | + { |
|
458 | + EED_Single_Page_Checkout::instance()->run($wp_query); |
|
459 | + } |
|
460 | + |
|
461 | + |
|
462 | + |
|
463 | + /** |
|
464 | + * _initialize - initial module setup |
|
465 | + * |
|
466 | + * @access private |
|
467 | + * @throws EE_Error |
|
468 | + * @return void |
|
469 | + */ |
|
470 | + private function _initialize() |
|
471 | + { |
|
472 | + // ensure SPCO doesn't run twice |
|
473 | + if (EED_Single_Page_Checkout::$_initialized) { |
|
474 | + return; |
|
475 | + } |
|
476 | + try { |
|
477 | + EED_Single_Page_Checkout::load_reg_steps(); |
|
478 | + $this->_verify_session(); |
|
479 | + // setup the EE_Checkout object |
|
480 | + $this->checkout = $this->_initialize_checkout(); |
|
481 | + // filter checkout |
|
482 | + $this->checkout = apply_filters('FHEE__EED_Single_Page_Checkout___initialize__checkout', $this->checkout); |
|
483 | + // get the $_GET |
|
484 | + $this->_get_request_vars(); |
|
485 | + if ($this->_block_bots()) { |
|
486 | + return; |
|
487 | + } |
|
488 | + // filter continue_reg |
|
489 | + $this->checkout->continue_reg = apply_filters( |
|
490 | + 'FHEE__EED_Single_Page_Checkout__init___continue_reg', |
|
491 | + true, |
|
492 | + $this->checkout |
|
493 | + ); |
|
494 | + // load the reg steps array |
|
495 | + if ( ! $this->_load_and_instantiate_reg_steps()) { |
|
496 | + EED_Single_Page_Checkout::$_initialized = true; |
|
497 | + return; |
|
498 | + } |
|
499 | + // set the current step |
|
500 | + $this->checkout->set_current_step($this->checkout->step); |
|
501 | + // and the next step |
|
502 | + $this->checkout->set_next_step(); |
|
503 | + // verify that everything has been setup correctly |
|
504 | + if ( ! ($this->_verify_transaction_and_get_registrations() && $this->_final_verifications())) { |
|
505 | + EED_Single_Page_Checkout::$_initialized = true; |
|
506 | + return; |
|
507 | + } |
|
508 | + // lock the transaction |
|
509 | + $this->checkout->transaction->lock(); |
|
510 | + // make sure all of our cached objects are added to their respective model entity mappers |
|
511 | + $this->checkout->refresh_all_entities(); |
|
512 | + // set amount owing |
|
513 | + $this->checkout->amount_owing = $this->checkout->transaction->remaining(); |
|
514 | + // initialize each reg step, which gives them the chance to potentially alter the process |
|
515 | + $this->_initialize_reg_steps(); |
|
516 | + // DEBUG LOG |
|
517 | + //$this->checkout->log( __CLASS__, __FUNCTION__, __LINE__ ); |
|
518 | + // get reg form |
|
519 | + if( ! $this->_check_form_submission()) { |
|
520 | + EED_Single_Page_Checkout::$_initialized = true; |
|
521 | + return; |
|
522 | + } |
|
523 | + // checkout the action!!! |
|
524 | + $this->_process_form_action(); |
|
525 | + // add some style and make it dance |
|
526 | + $this->add_styles_and_scripts(); |
|
527 | + // kk... SPCO has successfully run |
|
528 | + EED_Single_Page_Checkout::$_initialized = true; |
|
529 | + // set no cache headers and constants |
|
530 | + EE_System::do_not_cache(); |
|
531 | + // add anchor |
|
532 | + add_action('loop_start', array($this, 'set_checkout_anchor'), 1); |
|
533 | + // remove transaction lock |
|
534 | + add_action('shutdown', array($this, 'unlock_transaction'), 1); |
|
535 | + } catch (Exception $e) { |
|
536 | + EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
537 | + } |
|
538 | + } |
|
539 | + |
|
540 | + |
|
541 | + |
|
542 | + /** |
|
543 | + * _verify_session |
|
544 | + * checks that the session is valid and not expired |
|
545 | + * |
|
546 | + * @access private |
|
547 | + * @throws EE_Error |
|
548 | + */ |
|
549 | + private function _verify_session() |
|
550 | + { |
|
551 | + if ( ! EE_Registry::instance()->SSN instanceof EE_Session) { |
|
552 | + throw new EE_Error(__('The EE_Session class could not be loaded.', 'event_espresso')); |
|
553 | + } |
|
554 | + $clear_session_requested = filter_var( |
|
555 | + EE_Registry::instance()->REQ->get('clear_session', false), |
|
556 | + FILTER_VALIDATE_BOOLEAN |
|
557 | + ); |
|
558 | + // is session still valid ? |
|
559 | + if ($clear_session_requested |
|
560 | + || ( EE_Registry::instance()->SSN->expired() |
|
561 | + && EE_Registry::instance()->REQ->get('e_reg_url_link', '') === '' |
|
562 | + ) |
|
563 | + ) { |
|
564 | + $this->checkout = new EE_Checkout(); |
|
565 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
566 | + // EE_Registry::instance()->SSN->reset_cart(); |
|
567 | + // EE_Registry::instance()->SSN->reset_checkout(); |
|
568 | + // EE_Registry::instance()->SSN->reset_transaction(); |
|
569 | + if (! $clear_session_requested) { |
|
570 | + EE_Error::add_attention( |
|
571 | + EE_Registry::$i18n_js_strings['registration_expiration_notice'], |
|
572 | + __FILE__, __FUNCTION__, __LINE__ |
|
573 | + ); |
|
574 | + } |
|
575 | + // EE_Registry::instance()->SSN->reset_expired(); |
|
576 | + } |
|
577 | + } |
|
578 | + |
|
579 | + |
|
580 | + |
|
581 | + /** |
|
582 | + * _initialize_checkout |
|
583 | + * loads and instantiates EE_Checkout |
|
584 | + * |
|
585 | + * @access private |
|
586 | + * @throws EE_Error |
|
587 | + * @return EE_Checkout |
|
588 | + */ |
|
589 | + private function _initialize_checkout() |
|
590 | + { |
|
591 | + // look in session for existing checkout |
|
592 | + /** @type EE_Checkout $checkout */ |
|
593 | + $checkout = EE_Registry::instance()->SSN->checkout(); |
|
594 | + // verify |
|
595 | + if ( ! $checkout instanceof EE_Checkout) { |
|
596 | + // instantiate EE_Checkout object for handling the properties of the current checkout process |
|
597 | + $checkout = EE_Registry::instance()->load_file( |
|
598 | + SPCO_INC_PATH, |
|
599 | + 'EE_Checkout', |
|
600 | + 'class', array(), |
|
601 | + false |
|
602 | + ); |
|
603 | + } else { |
|
604 | + if ($checkout->current_step->is_final_step() && $checkout->exit_spco() === true) { |
|
605 | + $this->unlock_transaction(); |
|
606 | + wp_safe_redirect($checkout->redirect_url); |
|
607 | + exit(); |
|
608 | + } |
|
609 | + } |
|
610 | + $checkout = apply_filters('FHEE__EED_Single_Page_Checkout___initialize_checkout__checkout', $checkout); |
|
611 | + // verify again |
|
612 | + if ( ! $checkout instanceof EE_Checkout) { |
|
613 | + throw new EE_Error(__('The EE_Checkout class could not be loaded.', 'event_espresso')); |
|
614 | + } |
|
615 | + // reset anything that needs a clean slate for each request |
|
616 | + $checkout->reset_for_current_request(); |
|
617 | + return $checkout; |
|
618 | + } |
|
619 | + |
|
620 | + |
|
621 | + |
|
622 | + /** |
|
623 | + * _get_request_vars |
|
624 | + * |
|
625 | + * @access private |
|
626 | + * @return void |
|
627 | + * @throws EE_Error |
|
628 | + */ |
|
629 | + private function _get_request_vars() |
|
630 | + { |
|
631 | + // load classes |
|
632 | + EED_Single_Page_Checkout::load_request_handler(); |
|
633 | + //make sure this request is marked as belonging to EE |
|
634 | + EE_Registry::instance()->REQ->set_espresso_page(true); |
|
635 | + // which step is being requested ? |
|
636 | + $this->checkout->step = EE_Registry::instance()->REQ->get('step', $this->_get_first_step()); |
|
637 | + // which step is being edited ? |
|
638 | + $this->checkout->edit_step = EE_Registry::instance()->REQ->get('edit_step', ''); |
|
639 | + // and what we're doing on the current step |
|
640 | + $this->checkout->action = EE_Registry::instance()->REQ->get('action', 'display_spco_reg_step'); |
|
641 | + // timestamp |
|
642 | + $this->checkout->uts = EE_Registry::instance()->REQ->get('uts', 0); |
|
643 | + // returning to edit ? |
|
644 | + $this->checkout->reg_url_link = EE_Registry::instance()->REQ->get('e_reg_url_link', ''); |
|
645 | + // add reg url link to registration query params |
|
646 | + if ($this->checkout->reg_url_link && strpos($this->checkout->reg_url_link, '1-') !== 0) { |
|
647 | + $this->checkout->reg_cache_where_params[0]['REG_url_link'] = $this->checkout->reg_url_link; |
|
648 | + } |
|
649 | + // or some other kind of revisit ? |
|
650 | + $this->checkout->revisit = filter_var( |
|
651 | + EE_Registry::instance()->REQ->get('revisit', false), |
|
652 | + FILTER_VALIDATE_BOOLEAN |
|
653 | + ); |
|
654 | + // and whether or not to generate a reg form for this request |
|
655 | + $this->checkout->generate_reg_form = filter_var( |
|
656 | + EE_Registry::instance()->REQ->get('generate_reg_form', true), |
|
657 | + FILTER_VALIDATE_BOOLEAN |
|
658 | + ); |
|
659 | + // and whether or not to process a reg form submission for this request |
|
660 | + $this->checkout->process_form_submission = filter_var( |
|
661 | + EE_Registry::instance()->REQ->get( |
|
662 | + 'process_form_submission', |
|
663 | + $this->checkout->action === 'process_reg_step' |
|
664 | + ), |
|
665 | + FILTER_VALIDATE_BOOLEAN |
|
666 | + ); |
|
667 | + $this->checkout->process_form_submission = filter_var( |
|
668 | + $this->checkout->action !== 'display_spco_reg_step' |
|
669 | + ? $this->checkout->process_form_submission |
|
670 | + : false, |
|
671 | + FILTER_VALIDATE_BOOLEAN |
|
672 | + ); |
|
673 | + // $this->_display_request_vars(); |
|
674 | + } |
|
675 | + |
|
676 | + |
|
677 | + |
|
678 | + /** |
|
679 | + * _display_request_vars |
|
680 | + * |
|
681 | + * @access protected |
|
682 | + * @return void |
|
683 | + */ |
|
684 | + protected function _display_request_vars() |
|
685 | + { |
|
686 | + if ( ! WP_DEBUG) { |
|
687 | + return; |
|
688 | + } |
|
689 | + EEH_Debug_Tools::printr($_REQUEST, '$_REQUEST', __FILE__, __LINE__); |
|
690 | + EEH_Debug_Tools::printr($this->checkout->step, '$this->checkout->step', __FILE__, __LINE__); |
|
691 | + EEH_Debug_Tools::printr($this->checkout->edit_step, '$this->checkout->edit_step', __FILE__, __LINE__); |
|
692 | + EEH_Debug_Tools::printr($this->checkout->action, '$this->checkout->action', __FILE__, __LINE__); |
|
693 | + EEH_Debug_Tools::printr($this->checkout->reg_url_link, '$this->checkout->reg_url_link', __FILE__, __LINE__); |
|
694 | + EEH_Debug_Tools::printr($this->checkout->revisit, '$this->checkout->revisit', __FILE__, __LINE__); |
|
695 | + EEH_Debug_Tools::printr($this->checkout->generate_reg_form, '$this->checkout->generate_reg_form', __FILE__, __LINE__); |
|
696 | + EEH_Debug_Tools::printr($this->checkout->process_form_submission, '$this->checkout->process_form_submission', __FILE__, __LINE__); |
|
697 | + } |
|
698 | + |
|
699 | + |
|
700 | + |
|
701 | + /** |
|
702 | + * _block_bots |
|
703 | + * checks that the incoming request has either of the following set: |
|
704 | + * a uts (unix timestamp) which indicates that the request was redirected from the Ticket Selector |
|
705 | + * a REG URL Link, which indicates that the request is a return visit to SPCO for a valid TXN |
|
706 | + * so if you're not coming from the Ticket Selector nor returning for a valid IP... |
|
707 | + * then where you coming from man? |
|
708 | + * |
|
709 | + * @return boolean |
|
710 | + */ |
|
711 | + private function _block_bots() |
|
712 | + { |
|
713 | + $invalid_checkout_access = EED_Invalid_Checkout_Access::getInvalidCheckoutAccess(); |
|
714 | + if ($invalid_checkout_access->checkoutAccessIsInvalid($this->checkout)) { |
|
715 | + return true; |
|
716 | + } |
|
717 | + return false; |
|
718 | + } |
|
719 | + |
|
720 | + |
|
721 | + |
|
722 | + /** |
|
723 | + * _get_first_step |
|
724 | + * gets slug for first step in $_reg_steps_array |
|
725 | + * |
|
726 | + * @access private |
|
727 | + * @throws EE_Error |
|
728 | + * @return string |
|
729 | + */ |
|
730 | + private function _get_first_step() |
|
731 | + { |
|
732 | + $first_step = reset(EED_Single_Page_Checkout::$_reg_steps_array); |
|
733 | + return isset($first_step['slug']) ? $first_step['slug'] : 'attendee_information'; |
|
734 | + } |
|
735 | + |
|
736 | + |
|
737 | + |
|
738 | + /** |
|
739 | + * _load_and_instantiate_reg_steps |
|
740 | + * instantiates each reg step based on the loaded reg_steps array |
|
741 | + * |
|
742 | + * @access private |
|
743 | + * @throws EE_Error |
|
744 | + * @return bool |
|
745 | + */ |
|
746 | + private function _load_and_instantiate_reg_steps() |
|
747 | + { |
|
748 | + do_action('AHEE__Single_Page_Checkout___load_and_instantiate_reg_steps__start', $this->checkout); |
|
749 | + // have reg_steps already been instantiated ? |
|
750 | + if ( |
|
751 | + empty($this->checkout->reg_steps) |
|
752 | + || apply_filters('FHEE__Single_Page_Checkout__load_reg_steps__reload_reg_steps', false, $this->checkout) |
|
753 | + ) { |
|
754 | + // if not, then loop through raw reg steps array |
|
755 | + foreach (EED_Single_Page_Checkout::$_reg_steps_array as $order => $reg_step) { |
|
756 | + if ( ! $this->_load_and_instantiate_reg_step($reg_step, $order)) { |
|
757 | + return false; |
|
758 | + } |
|
759 | + } |
|
760 | + EE_Registry::instance()->CFG->registration->skip_reg_confirmation = true; |
|
761 | + EE_Registry::instance()->CFG->registration->reg_confirmation_last = true; |
|
762 | + // skip the registration_confirmation page ? |
|
763 | + if (EE_Registry::instance()->CFG->registration->skip_reg_confirmation) { |
|
764 | + // just remove it from the reg steps array |
|
765 | + $this->checkout->remove_reg_step('registration_confirmation', false); |
|
766 | + } else if ( |
|
767 | + isset($this->checkout->reg_steps['registration_confirmation']) |
|
768 | + && EE_Registry::instance()->CFG->registration->reg_confirmation_last |
|
769 | + ) { |
|
770 | + // set the order to something big like 100 |
|
771 | + $this->checkout->set_reg_step_order('registration_confirmation', 100); |
|
772 | + } |
|
773 | + // filter the array for good luck |
|
774 | + $this->checkout->reg_steps = apply_filters( |
|
775 | + 'FHEE__Single_Page_Checkout__load_reg_steps__reg_steps', |
|
776 | + $this->checkout->reg_steps |
|
777 | + ); |
|
778 | + // finally re-sort based on the reg step class order properties |
|
779 | + $this->checkout->sort_reg_steps(); |
|
780 | + } else { |
|
781 | + foreach ($this->checkout->reg_steps as $reg_step) { |
|
782 | + // set all current step stati to FALSE |
|
783 | + $reg_step->set_is_current_step(false); |
|
784 | + } |
|
785 | + } |
|
786 | + if (empty($this->checkout->reg_steps)) { |
|
787 | + EE_Error::add_error( |
|
788 | + __('No Reg Steps were loaded..', 'event_espresso'), |
|
789 | + __FILE__, __FUNCTION__, __LINE__ |
|
790 | + ); |
|
791 | + return false; |
|
792 | + } |
|
793 | + // make reg step details available to JS |
|
794 | + $this->checkout->set_reg_step_JSON_info(); |
|
795 | + return true; |
|
796 | + } |
|
797 | + |
|
798 | + |
|
799 | + |
|
800 | + /** |
|
801 | + * _load_and_instantiate_reg_step |
|
802 | + * |
|
803 | + * @access private |
|
804 | + * @param array $reg_step |
|
805 | + * @param int $order |
|
806 | + * @return bool |
|
807 | + */ |
|
808 | + private function _load_and_instantiate_reg_step($reg_step = array(), $order = 0) |
|
809 | + { |
|
810 | + // we need a file_path, class_name, and slug to add a reg step |
|
811 | + if (isset($reg_step['file_path'], $reg_step['class_name'], $reg_step['slug'])) { |
|
812 | + // if editing a specific step, but this is NOT that step... (and it's not the 'finalize_registration' step) |
|
813 | + if ( |
|
814 | + $this->checkout->reg_url_link |
|
815 | + && $this->checkout->step !== $reg_step['slug'] |
|
816 | + && $reg_step['slug'] !== 'finalize_registration' |
|
817 | + // normally at this point we would NOT load the reg step, but this filter can change that |
|
818 | + && apply_filters( |
|
819 | + 'FHEE__Single_Page_Checkout___load_and_instantiate_reg_step__bypass_reg_step', |
|
820 | + true, |
|
821 | + $reg_step, |
|
822 | + $this->checkout |
|
823 | + ) |
|
824 | + ) { |
|
825 | + return true; |
|
826 | + } |
|
827 | + // instantiate step class using file path and class name |
|
828 | + $reg_step_obj = EE_Registry::instance()->load_file( |
|
829 | + $reg_step['file_path'], |
|
830 | + $reg_step['class_name'], |
|
831 | + 'class', |
|
832 | + $this->checkout, |
|
833 | + false |
|
834 | + ); |
|
835 | + // did we gets the goods ? |
|
836 | + if ($reg_step_obj instanceof EE_SPCO_Reg_Step) { |
|
837 | + // set reg step order based on config |
|
838 | + $reg_step_obj->set_order($order); |
|
839 | + // add instantiated reg step object to the master reg steps array |
|
840 | + $this->checkout->add_reg_step($reg_step_obj); |
|
841 | + } else { |
|
842 | + EE_Error::add_error( |
|
843 | + __('The current step could not be set.', 'event_espresso'), |
|
844 | + __FILE__, __FUNCTION__, __LINE__ |
|
845 | + ); |
|
846 | + return false; |
|
847 | + } |
|
848 | + } else { |
|
849 | + if (WP_DEBUG) { |
|
850 | + EE_Error::add_error( |
|
851 | + sprintf( |
|
852 | + __( |
|
853 | + 'A registration step could not be loaded. One or more of the following data points is invalid:%4$s%5$sFile Path: %1$s%6$s%5$sClass Name: %2$s%6$s%5$sSlug: %3$s%6$s%7$s', |
|
854 | + 'event_espresso' |
|
855 | + ), |
|
856 | + isset($reg_step['file_path']) ? $reg_step['file_path'] : '', |
|
857 | + isset($reg_step['class_name']) ? $reg_step['class_name'] : '', |
|
858 | + isset($reg_step['slug']) ? $reg_step['slug'] : '', |
|
859 | + '<ul>', |
|
860 | + '<li>', |
|
861 | + '</li>', |
|
862 | + '</ul>' |
|
863 | + ), |
|
864 | + __FILE__, __FUNCTION__, __LINE__ |
|
865 | + ); |
|
866 | + } |
|
867 | + return false; |
|
868 | + } |
|
869 | + return true; |
|
870 | + } |
|
871 | + |
|
872 | + |
|
873 | + /** |
|
874 | + * _verify_transaction_and_get_registrations |
|
875 | + * |
|
876 | + * @access private |
|
877 | + * @return bool |
|
878 | + * @throws InvalidDataTypeException |
|
879 | + * @throws InvalidEntityException |
|
880 | + * @throws EE_Error |
|
881 | + */ |
|
882 | + private function _verify_transaction_and_get_registrations() |
|
883 | + { |
|
884 | + // was there already a valid transaction in the checkout from the session ? |
|
885 | + if ( ! $this->checkout->transaction instanceof EE_Transaction) { |
|
886 | + // get transaction from db or session |
|
887 | + $this->checkout->transaction = $this->checkout->reg_url_link && ! is_admin() |
|
888 | + ? $this->_get_transaction_and_cart_for_previous_visit() |
|
889 | + : $this->_get_cart_for_current_session_and_setup_new_transaction(); |
|
890 | + if ( ! $this->checkout->transaction instanceof EE_Transaction) { |
|
891 | + EE_Error::add_error( |
|
892 | + __('Your Registration and Transaction information could not be retrieved from the db.', |
|
893 | + 'event_espresso'), |
|
894 | + __FILE__, __FUNCTION__, __LINE__ |
|
895 | + ); |
|
896 | + $this->checkout->transaction = EE_Transaction::new_instance(); |
|
897 | + // add some style and make it dance |
|
898 | + $this->add_styles_and_scripts(); |
|
899 | + EED_Single_Page_Checkout::$_initialized = true; |
|
900 | + return false; |
|
901 | + } |
|
902 | + // and the registrations for the transaction |
|
903 | + $this->_get_registrations($this->checkout->transaction); |
|
904 | + } |
|
905 | + return true; |
|
906 | + } |
|
907 | + |
|
908 | + |
|
909 | + |
|
910 | + /** |
|
911 | + * _get_transaction_and_cart_for_previous_visit |
|
912 | + * |
|
913 | + * @access private |
|
914 | + * @return mixed EE_Transaction|NULL |
|
915 | + */ |
|
916 | + private function _get_transaction_and_cart_for_previous_visit() |
|
917 | + { |
|
918 | + /** @var $TXN_model EEM_Transaction */ |
|
919 | + $TXN_model = EE_Registry::instance()->load_model('Transaction'); |
|
920 | + // because the reg_url_link is present in the request, |
|
921 | + // this is a return visit to SPCO, so we'll get the transaction data from the db |
|
922 | + $transaction = $TXN_model->get_transaction_from_reg_url_link($this->checkout->reg_url_link); |
|
923 | + // verify transaction |
|
924 | + if ($transaction instanceof EE_Transaction) { |
|
925 | + // and get the cart that was used for that transaction |
|
926 | + $this->checkout->cart = $this->_get_cart_for_transaction($transaction); |
|
927 | + return $transaction; |
|
928 | + } |
|
929 | + EE_Error::add_error( |
|
930 | + __('Your Registration and Transaction information could not be retrieved from the db.', 'event_espresso'), |
|
931 | + __FILE__, __FUNCTION__, __LINE__ |
|
932 | + ); |
|
933 | + return null; |
|
934 | + |
|
935 | + } |
|
936 | + |
|
937 | + |
|
938 | + |
|
939 | + /** |
|
940 | + * _get_cart_for_transaction |
|
941 | + * |
|
942 | + * @access private |
|
943 | + * @param EE_Transaction $transaction |
|
944 | + * @return EE_Cart |
|
945 | + */ |
|
946 | + private function _get_cart_for_transaction($transaction) |
|
947 | + { |
|
948 | + return $this->checkout->get_cart_for_transaction($transaction); |
|
949 | + } |
|
950 | + |
|
951 | + |
|
952 | + |
|
953 | + /** |
|
954 | + * get_cart_for_transaction |
|
955 | + * |
|
956 | + * @access public |
|
957 | + * @param EE_Transaction $transaction |
|
958 | + * @return EE_Cart |
|
959 | + */ |
|
960 | + public function get_cart_for_transaction(EE_Transaction $transaction) |
|
961 | + { |
|
962 | + return $this->checkout->get_cart_for_transaction($transaction); |
|
963 | + } |
|
964 | + |
|
965 | + |
|
966 | + |
|
967 | + /** |
|
968 | + * _get_transaction_and_cart_for_current_session |
|
969 | + * generates a new EE_Transaction object and adds it to the $_transaction property. |
|
970 | + * |
|
971 | + * @access private |
|
972 | + * @return EE_Transaction |
|
973 | + * @throws EE_Error |
|
974 | + */ |
|
975 | + private function _get_cart_for_current_session_and_setup_new_transaction() |
|
976 | + { |
|
977 | + // if there's no transaction, then this is the FIRST visit to SPCO |
|
978 | + // so load up the cart ( passing nothing for the TXN because it doesn't exist yet ) |
|
979 | + $this->checkout->cart = $this->_get_cart_for_transaction(null); |
|
980 | + // and then create a new transaction |
|
981 | + $transaction = $this->_initialize_transaction(); |
|
982 | + // verify transaction |
|
983 | + if ($transaction instanceof EE_Transaction) { |
|
984 | + // save it so that we have an ID for other objects to use |
|
985 | + $transaction->save(); |
|
986 | + // and save TXN data to the cart |
|
987 | + $this->checkout->cart->get_grand_total()->save_this_and_descendants_to_txn($transaction->ID()); |
|
988 | + } else { |
|
989 | + EE_Error::add_error( |
|
990 | + __('A Valid Transaction could not be initialized.', 'event_espresso'), |
|
991 | + __FILE__, __FUNCTION__, __LINE__ |
|
992 | + ); |
|
993 | + } |
|
994 | + return $transaction; |
|
995 | + } |
|
996 | + |
|
997 | + |
|
998 | + |
|
999 | + /** |
|
1000 | + * generates a new EE_Transaction object and adds it to the $_transaction property. |
|
1001 | + * |
|
1002 | + * @access private |
|
1003 | + * @return mixed EE_Transaction|NULL |
|
1004 | + */ |
|
1005 | + private function _initialize_transaction() |
|
1006 | + { |
|
1007 | + try { |
|
1008 | + // ensure cart totals have been calculated |
|
1009 | + $this->checkout->cart->get_grand_total()->recalculate_total_including_taxes(); |
|
1010 | + // grab the cart grand total |
|
1011 | + $cart_total = $this->checkout->cart->get_cart_grand_total(); |
|
1012 | + // create new TXN |
|
1013 | + $transaction = EE_Transaction::new_instance( |
|
1014 | + array( |
|
1015 | + 'TXN_reg_steps' => $this->checkout->initialize_txn_reg_steps_array(), |
|
1016 | + 'TXN_total' => $cart_total > 0 ? $cart_total : 0, |
|
1017 | + 'TXN_paid' => 0, |
|
1018 | + 'STS_ID' => EEM_Transaction::failed_status_code, |
|
1019 | + ) |
|
1020 | + ); |
|
1021 | + // save it so that we have an ID for other objects to use |
|
1022 | + $transaction->save(); |
|
1023 | + // set cron job for following up on TXNs after their session has expired |
|
1024 | + EE_Cron_Tasks::schedule_expired_transaction_check( |
|
1025 | + EE_Registry::instance()->SSN->expiration() + 1, |
|
1026 | + $transaction->ID() |
|
1027 | + ); |
|
1028 | + return $transaction; |
|
1029 | + } catch (Exception $e) { |
|
1030 | + EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
1031 | + } |
|
1032 | + return null; |
|
1033 | + } |
|
1034 | + |
|
1035 | + |
|
1036 | + /** |
|
1037 | + * _get_registrations |
|
1038 | + * |
|
1039 | + * @access private |
|
1040 | + * @param EE_Transaction $transaction |
|
1041 | + * @return void |
|
1042 | + * @throws InvalidDataTypeException |
|
1043 | + * @throws InvalidEntityException |
|
1044 | + * @throws EE_Error |
|
1045 | + */ |
|
1046 | + private function _get_registrations(EE_Transaction $transaction) |
|
1047 | + { |
|
1048 | + // first step: grab the registrants { : o |
|
1049 | + $registrations = $transaction->registrations($this->checkout->reg_cache_where_params, false); |
|
1050 | + $this->checkout->total_ticket_count = count($registrations); |
|
1051 | + // verify registrations have been set |
|
1052 | + if (empty($registrations)) { |
|
1053 | + // if no cached registrations, then check the db |
|
1054 | + $registrations = $transaction->registrations($this->checkout->reg_cache_where_params, false); |
|
1055 | + // still nothing ? well as long as this isn't a revisit |
|
1056 | + if (empty($registrations) && ! $this->checkout->revisit) { |
|
1057 | + // generate new registrations from scratch |
|
1058 | + $registrations = $this->_initialize_registrations($transaction); |
|
1059 | + } |
|
1060 | + } |
|
1061 | + // sort by their original registration order |
|
1062 | + usort($registrations, array('EED_Single_Page_Checkout', 'sort_registrations_by_REG_count')); |
|
1063 | + // then loop thru the array |
|
1064 | + foreach ($registrations as $registration) { |
|
1065 | + // verify each registration |
|
1066 | + if ($registration instanceof EE_Registration) { |
|
1067 | + // we display all attendee info for the primary registrant |
|
1068 | + if ($this->checkout->reg_url_link === $registration->reg_url_link() |
|
1069 | + && $registration->is_primary_registrant() |
|
1070 | + ) { |
|
1071 | + $this->checkout->primary_revisit = true; |
|
1072 | + break; |
|
1073 | + } |
|
1074 | + if ($this->checkout->revisit && $this->checkout->reg_url_link !== $registration->reg_url_link()) { |
|
1075 | + // but hide info if it doesn't belong to you |
|
1076 | + $transaction->clear_cache('Registration', $registration->ID()); |
|
1077 | + $this->checkout->total_ticket_count--; |
|
1078 | + } |
|
1079 | + $this->checkout->set_reg_status_updated($registration->ID(), false); |
|
1080 | + } |
|
1081 | + } |
|
1082 | + } |
|
1083 | + |
|
1084 | + |
|
1085 | + /** |
|
1086 | + * adds related EE_Registration objects for each ticket in the cart to the current EE_Transaction object |
|
1087 | + * |
|
1088 | + * @access private |
|
1089 | + * @param EE_Transaction $transaction |
|
1090 | + * @return array |
|
1091 | + * @throws InvalidDataTypeException |
|
1092 | + * @throws InvalidEntityException |
|
1093 | + * @throws EE_Error |
|
1094 | + */ |
|
1095 | + private function _initialize_registrations(EE_Transaction $transaction) |
|
1096 | + { |
|
1097 | + $att_nmbr = 0; |
|
1098 | + $registrations = array(); |
|
1099 | + if ($transaction instanceof EE_Transaction) { |
|
1100 | + /** @type EE_Registration_Processor $registration_processor */ |
|
1101 | + $registration_processor = EE_Registry::instance()->load_class('Registration_Processor'); |
|
1102 | + $this->checkout->total_ticket_count = $this->checkout->cart->all_ticket_quantity_count(); |
|
1103 | + // now let's add the cart items to the $transaction |
|
1104 | + foreach ($this->checkout->cart->get_tickets() as $line_item) { |
|
1105 | + //do the following for each ticket of this type they selected |
|
1106 | + for ($x = 1; $x <= $line_item->quantity(); $x++) { |
|
1107 | + $att_nmbr++; |
|
1108 | + /** @var EventEspresso\core\services\commands\registration\CreateRegistrationCommand $CreateRegistrationCommand */ |
|
1109 | + $CreateRegistrationCommand = EE_Registry::instance()->create( |
|
1110 | + 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand', |
|
1111 | + array( |
|
1112 | + $transaction, |
|
1113 | + $line_item, |
|
1114 | + $att_nmbr, |
|
1115 | + $this->checkout->total_ticket_count, |
|
1116 | + ) |
|
1117 | + ); |
|
1118 | + // override capabilities for frontend registrations |
|
1119 | + if ( ! is_admin()) { |
|
1120 | + $CreateRegistrationCommand->setCapCheck( |
|
1121 | + new PublicCapabilities('', 'create_new_registration') |
|
1122 | + ); |
|
1123 | + } |
|
1124 | + $registration = EE_Registry::instance()->BUS->execute($CreateRegistrationCommand); |
|
1125 | + if ( ! $registration instanceof EE_Registration) { |
|
1126 | + throw new InvalidEntityException($registration, 'EE_Registration'); |
|
1127 | + } |
|
1128 | + $registrations[ $registration->ID() ] = $registration; |
|
1129 | + } |
|
1130 | + } |
|
1131 | + $registration_processor->fix_reg_final_price_rounding_issue($transaction); |
|
1132 | + } |
|
1133 | + return $registrations; |
|
1134 | + } |
|
1135 | + |
|
1136 | + |
|
1137 | + |
|
1138 | + /** |
|
1139 | + * sorts registrations by REG_count |
|
1140 | + * |
|
1141 | + * @access public |
|
1142 | + * @param EE_Registration $reg_A |
|
1143 | + * @param EE_Registration $reg_B |
|
1144 | + * @return int |
|
1145 | + */ |
|
1146 | + public static function sort_registrations_by_REG_count(EE_Registration $reg_A, EE_Registration $reg_B) |
|
1147 | + { |
|
1148 | + // this shouldn't ever happen within the same TXN, but oh well |
|
1149 | + if ($reg_A->count() === $reg_B->count()) { |
|
1150 | + return 0; |
|
1151 | + } |
|
1152 | + return ($reg_A->count() > $reg_B->count()) ? 1 : -1; |
|
1153 | + } |
|
1154 | + |
|
1155 | + |
|
1156 | + |
|
1157 | + /** |
|
1158 | + * _final_verifications |
|
1159 | + * just makes sure that everything is set up correctly before proceeding |
|
1160 | + * |
|
1161 | + * @access private |
|
1162 | + * @return bool |
|
1163 | + * @throws EE_Error |
|
1164 | + */ |
|
1165 | + private function _final_verifications() |
|
1166 | + { |
|
1167 | + // filter checkout |
|
1168 | + $this->checkout = apply_filters( |
|
1169 | + 'FHEE__EED_Single_Page_Checkout___final_verifications__checkout', |
|
1170 | + $this->checkout |
|
1171 | + ); |
|
1172 | + //verify that current step is still set correctly |
|
1173 | + if ( ! $this->checkout->current_step instanceof EE_SPCO_Reg_Step) { |
|
1174 | + EE_Error::add_error( |
|
1175 | + __('We\'re sorry but the registration process can not proceed because one or more registration steps were not setup correctly. Please refresh the page and try again or contact support.', 'event_espresso'), |
|
1176 | + __FILE__, |
|
1177 | + __FUNCTION__, |
|
1178 | + __LINE__ |
|
1179 | + ); |
|
1180 | + return false; |
|
1181 | + } |
|
1182 | + // if returning to SPCO, then verify that primary registrant is set |
|
1183 | + if ( ! empty($this->checkout->reg_url_link)) { |
|
1184 | + $valid_registrant = $this->checkout->transaction->primary_registration(); |
|
1185 | + if ( ! $valid_registrant instanceof EE_Registration) { |
|
1186 | + EE_Error::add_error( |
|
1187 | + __('We\'re sorry but there appears to be an error with the "reg_url_link" or the primary registrant for this transaction. Please refresh the page and try again or contact support.', 'event_espresso'), |
|
1188 | + __FILE__, |
|
1189 | + __FUNCTION__, |
|
1190 | + __LINE__ |
|
1191 | + ); |
|
1192 | + return false; |
|
1193 | + } |
|
1194 | + $valid_registrant = null; |
|
1195 | + foreach ( |
|
1196 | + $this->checkout->transaction->registrations($this->checkout->reg_cache_where_params) as $registration |
|
1197 | + ) { |
|
1198 | + if ( |
|
1199 | + $registration instanceof EE_Registration |
|
1200 | + && $registration->reg_url_link() === $this->checkout->reg_url_link |
|
1201 | + ) { |
|
1202 | + $valid_registrant = $registration; |
|
1203 | + } |
|
1204 | + } |
|
1205 | + if ( ! $valid_registrant instanceof EE_Registration) { |
|
1206 | + // hmmm... maybe we have the wrong session because the user is opening multiple tabs ? |
|
1207 | + if (EED_Single_Page_Checkout::$_checkout_verified) { |
|
1208 | + // clear the session, mark the checkout as unverified, and try again |
|
1209 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
1210 | + EED_Single_Page_Checkout::$_initialized = false; |
|
1211 | + EED_Single_Page_Checkout::$_checkout_verified = false; |
|
1212 | + $this->_initialize(); |
|
1213 | + EE_Error::reset_notices(); |
|
1214 | + return false; |
|
1215 | + } |
|
1216 | + EE_Error::add_error( |
|
1217 | + __( |
|
1218 | + 'We\'re sorry but there appears to be an error with the "reg_url_link" or the transaction itself. Please refresh the page and try again or contact support.', |
|
1219 | + 'event_espresso' |
|
1220 | + ), |
|
1221 | + __FILE__, |
|
1222 | + __FUNCTION__, |
|
1223 | + __LINE__ |
|
1224 | + ); |
|
1225 | + return false; |
|
1226 | + } |
|
1227 | + } |
|
1228 | + // now that things have been kinda sufficiently verified, |
|
1229 | + // let's add the checkout to the session so that it's available to other systems |
|
1230 | + EE_Registry::instance()->SSN->set_checkout($this->checkout); |
|
1231 | + return true; |
|
1232 | + } |
|
1233 | + |
|
1234 | + |
|
1235 | + |
|
1236 | + /** |
|
1237 | + * _initialize_reg_steps |
|
1238 | + * first makes sure that EE_Transaction_Processor::set_reg_step_initiated() is called as required |
|
1239 | + * then loops thru all of the active reg steps and calls the initialize_reg_step() method |
|
1240 | + * |
|
1241 | + * @access private |
|
1242 | + * @param bool $reinitializing |
|
1243 | + * @throws EE_Error |
|
1244 | + */ |
|
1245 | + private function _initialize_reg_steps($reinitializing = false) |
|
1246 | + { |
|
1247 | + $this->checkout->set_reg_step_initiated($this->checkout->current_step); |
|
1248 | + // loop thru all steps to call their individual "initialize" methods and set i18n strings for JS |
|
1249 | + foreach ($this->checkout->reg_steps as $reg_step) { |
|
1250 | + if ( ! $reg_step->initialize_reg_step()) { |
|
1251 | + // if not initialized then maybe this step is being removed... |
|
1252 | + if ( ! $reinitializing && $reg_step->is_current_step()) { |
|
1253 | + // if it was the current step, then we need to start over here |
|
1254 | + $this->_initialize_reg_steps(true); |
|
1255 | + return; |
|
1256 | + } |
|
1257 | + continue; |
|
1258 | + } |
|
1259 | + // add css and JS for current step |
|
1260 | + $reg_step->enqueue_styles_and_scripts(); |
|
1261 | + // i18n |
|
1262 | + $reg_step->translate_js_strings(); |
|
1263 | + if ($reg_step->is_current_step()) { |
|
1264 | + // the text that appears on the reg step form submit button |
|
1265 | + $reg_step->set_submit_button_text(); |
|
1266 | + } |
|
1267 | + } |
|
1268 | + // dynamically creates hook point like: AHEE__Single_Page_Checkout___initialize_reg_step__attendee_information |
|
1269 | + do_action( |
|
1270 | + "AHEE__Single_Page_Checkout___initialize_reg_step__{$this->checkout->current_step->slug()}", |
|
1271 | + $this->checkout->current_step |
|
1272 | + ); |
|
1273 | + } |
|
1274 | + |
|
1275 | + |
|
1276 | + |
|
1277 | + /** |
|
1278 | + * _check_form_submission |
|
1279 | + * |
|
1280 | + * @access private |
|
1281 | + * @return boolean |
|
1282 | + */ |
|
1283 | + private function _check_form_submission() |
|
1284 | + { |
|
1285 | + //does this request require the reg form to be generated ? |
|
1286 | + if ($this->checkout->generate_reg_form) { |
|
1287 | + // ever heard that song by Blue Rodeo ? |
|
1288 | + try { |
|
1289 | + $this->checkout->current_step->reg_form = $this->checkout->current_step->generate_reg_form(); |
|
1290 | + // if not displaying a form, then check for form submission |
|
1291 | + if ( |
|
1292 | + $this->checkout->process_form_submission |
|
1293 | + && $this->checkout->current_step->reg_form->was_submitted() |
|
1294 | + ) { |
|
1295 | + // clear out any old data in case this step is being run again |
|
1296 | + $this->checkout->current_step->set_valid_data(array()); |
|
1297 | + // capture submitted form data |
|
1298 | + $this->checkout->current_step->reg_form->receive_form_submission( |
|
1299 | + apply_filters( |
|
1300 | + 'FHEE__Single_Page_Checkout___check_form_submission__request_params', |
|
1301 | + EE_Registry::instance()->REQ->params(), |
|
1302 | + $this->checkout |
|
1303 | + ) |
|
1304 | + ); |
|
1305 | + // validate submitted form data |
|
1306 | + if ( ! $this->checkout->continue_reg || ! $this->checkout->current_step->reg_form->is_valid()) { |
|
1307 | + // thou shall not pass !!! |
|
1308 | + $this->checkout->continue_reg = false; |
|
1309 | + // any form validation errors? |
|
1310 | + if ($this->checkout->current_step->reg_form->submission_error_message() !== '') { |
|
1311 | + $submission_error_messages = array(); |
|
1312 | + // bad, bad, bad registrant |
|
1313 | + foreach ( |
|
1314 | + $this->checkout->current_step->reg_form->get_validation_errors_accumulated() |
|
1315 | + as $validation_error |
|
1316 | + ) { |
|
1317 | + if ($validation_error instanceof EE_Validation_Error) { |
|
1318 | + $submission_error_messages[] = sprintf( |
|
1319 | + __('%s : %s', 'event_espresso'), |
|
1320 | + $validation_error->get_form_section()->html_label_text(), |
|
1321 | + $validation_error->getMessage() |
|
1322 | + ); |
|
1323 | + } |
|
1324 | + } |
|
1325 | + EE_Error::add_error( |
|
1326 | + implode('<br />', $submission_error_messages), |
|
1327 | + __FILE__, __FUNCTION__, __LINE__ |
|
1328 | + ); |
|
1329 | + } |
|
1330 | + // well not really... what will happen is |
|
1331 | + // we'll just get redirected back to redo the current step |
|
1332 | + $this->go_to_next_step(); |
|
1333 | + return false; |
|
1334 | + } |
|
1335 | + } |
|
1336 | + } catch (EE_Error $e) { |
|
1337 | + $e->get_error(); |
|
1338 | + } |
|
1339 | + } |
|
1340 | + return true; |
|
1341 | + } |
|
1342 | + |
|
1343 | + |
|
1344 | + |
|
1345 | + /** |
|
1346 | + * _process_action |
|
1347 | + * |
|
1348 | + * @access private |
|
1349 | + * @return void |
|
1350 | + * @throws EE_Error |
|
1351 | + */ |
|
1352 | + private function _process_form_action() |
|
1353 | + { |
|
1354 | + // what cha wanna do? |
|
1355 | + switch ($this->checkout->action) { |
|
1356 | + // AJAX next step reg form |
|
1357 | + case 'display_spco_reg_step' : |
|
1358 | + $this->checkout->redirect = false; |
|
1359 | + if (EE_Registry::instance()->REQ->ajax) { |
|
1360 | + $this->checkout->json_response->set_reg_step_html( |
|
1361 | + $this->checkout->current_step->display_reg_form() |
|
1362 | + ); |
|
1363 | + } |
|
1364 | + break; |
|
1365 | + default : |
|
1366 | + // meh... do one of those other steps first |
|
1367 | + if ( |
|
1368 | + ! empty($this->checkout->action) |
|
1369 | + && is_callable(array($this->checkout->current_step, $this->checkout->action)) |
|
1370 | + ) { |
|
1371 | + // dynamically creates hook point like: |
|
1372 | + // AHEE__Single_Page_Checkout__before_attendee_information__process_reg_step |
|
1373 | + do_action( |
|
1374 | + "AHEE__Single_Page_Checkout__before_{$this->checkout->current_step->slug()}__{$this->checkout->action}", |
|
1375 | + $this->checkout->current_step |
|
1376 | + ); |
|
1377 | + // call action on current step |
|
1378 | + if (call_user_func(array($this->checkout->current_step, $this->checkout->action))) { |
|
1379 | + // good registrant, you get to proceed |
|
1380 | + if ( |
|
1381 | + $this->checkout->current_step->success_message() !== '' |
|
1382 | + && apply_filters( |
|
1383 | + 'FHEE__Single_Page_Checkout___process_form_action__display_success', |
|
1384 | + false |
|
1385 | + ) |
|
1386 | + ) { |
|
1387 | + EE_Error::add_success( |
|
1388 | + $this->checkout->current_step->success_message() |
|
1389 | + . '<br />' . $this->checkout->next_step->_instructions() |
|
1390 | + ); |
|
1391 | + } |
|
1392 | + // pack it up, pack it in... |
|
1393 | + $this->_setup_redirect(); |
|
1394 | + } |
|
1395 | + // dynamically creates hook point like: |
|
1396 | + // AHEE__Single_Page_Checkout__after_payment_options__process_reg_step |
|
1397 | + do_action( |
|
1398 | + "AHEE__Single_Page_Checkout__after_{$this->checkout->current_step->slug()}__{$this->checkout->action}", |
|
1399 | + $this->checkout->current_step |
|
1400 | + ); |
|
1401 | + } else { |
|
1402 | + EE_Error::add_error( |
|
1403 | + sprintf( |
|
1404 | + __( |
|
1405 | + 'The requested form action "%s" does not exist for the current "%s" registration step.', |
|
1406 | + 'event_espresso' |
|
1407 | + ), |
|
1408 | + $this->checkout->action, |
|
1409 | + $this->checkout->current_step->name() |
|
1410 | + ), |
|
1411 | + __FILE__, |
|
1412 | + __FUNCTION__, |
|
1413 | + __LINE__ |
|
1414 | + ); |
|
1415 | + } |
|
1416 | + // end default |
|
1417 | + } |
|
1418 | + // store our progress so far |
|
1419 | + $this->checkout->stash_transaction_and_checkout(); |
|
1420 | + // advance to the next step! If you pass GO, collect $200 |
|
1421 | + $this->go_to_next_step(); |
|
1422 | + } |
|
1423 | + |
|
1424 | + |
|
1425 | + |
|
1426 | + /** |
|
1427 | + * add_styles_and_scripts |
|
1428 | + * |
|
1429 | + * @access public |
|
1430 | + * @return void |
|
1431 | + */ |
|
1432 | + public function add_styles_and_scripts() |
|
1433 | + { |
|
1434 | + // i18n |
|
1435 | + $this->translate_js_strings(); |
|
1436 | + if ($this->checkout->admin_request) { |
|
1437 | + add_action('admin_enqueue_scripts', array($this, 'enqueue_styles_and_scripts'), 10); |
|
1438 | + } else { |
|
1439 | + add_action('wp_enqueue_scripts', array($this, 'enqueue_styles_and_scripts'), 10); |
|
1440 | + } |
|
1441 | + } |
|
1442 | + |
|
1443 | + |
|
1444 | + |
|
1445 | + /** |
|
1446 | + * translate_js_strings |
|
1447 | + * |
|
1448 | + * @access public |
|
1449 | + * @return void |
|
1450 | + */ |
|
1451 | + public function translate_js_strings() |
|
1452 | + { |
|
1453 | + EE_Registry::$i18n_js_strings['revisit'] = $this->checkout->revisit; |
|
1454 | + EE_Registry::$i18n_js_strings['e_reg_url_link'] = $this->checkout->reg_url_link; |
|
1455 | + EE_Registry::$i18n_js_strings['server_error'] = __( |
|
1456 | + 'An unknown error occurred on the server while attempting to process your request. Please refresh the page and try again or contact support.', |
|
1457 | + 'event_espresso' |
|
1458 | + ); |
|
1459 | + EE_Registry::$i18n_js_strings['invalid_json_response'] = __( |
|
1460 | + 'An invalid response was returned from the server while attempting to process your request. Please refresh the page and try again or contact support.', |
|
1461 | + 'event_espresso' |
|
1462 | + ); |
|
1463 | + EE_Registry::$i18n_js_strings['validation_error'] = __( |
|
1464 | + 'There appears to be a problem with the form validation configuration! Please check the admin settings or contact support.', |
|
1465 | + 'event_espresso' |
|
1466 | + ); |
|
1467 | + EE_Registry::$i18n_js_strings['invalid_payment_method'] = __( |
|
1468 | + 'There appears to be a problem with the payment method configuration! Please refresh the page and try again or contact support.', |
|
1469 | + 'event_espresso' |
|
1470 | + ); |
|
1471 | + EE_Registry::$i18n_js_strings['reg_step_error'] = __( |
|
1472 | + 'This registration step could not be completed. Please refresh the page and try again.', |
|
1473 | + 'event_espresso' |
|
1474 | + ); |
|
1475 | + EE_Registry::$i18n_js_strings['invalid_coupon'] = __( |
|
1476 | + 'We\'re sorry but that coupon code does not appear to be valid. If this is incorrect, please contact the site administrator.', |
|
1477 | + 'event_espresso' |
|
1478 | + ); |
|
1479 | + EE_Registry::$i18n_js_strings['process_registration'] = sprintf( |
|
1480 | + __( |
|
1481 | + 'Please wait while we process your registration.%sDo not refresh the page or navigate away while this is happening.%sThank you for your patience.', |
|
1482 | + 'event_espresso' |
|
1483 | + ), |
|
1484 | + '<br/>', |
|
1485 | + '<br/>' |
|
1486 | + ); |
|
1487 | + EE_Registry::$i18n_js_strings['language'] = get_bloginfo('language'); |
|
1488 | + EE_Registry::$i18n_js_strings['EESID'] = EE_Registry::instance()->SSN->id(); |
|
1489 | + EE_Registry::$i18n_js_strings['currency'] = EE_Registry::instance()->CFG->currency; |
|
1490 | + EE_Registry::$i18n_js_strings['datepicker_yearRange'] = '-150:+20'; |
|
1491 | + EE_Registry::$i18n_js_strings['timer_years'] = __('years', 'event_espresso'); |
|
1492 | + EE_Registry::$i18n_js_strings['timer_months'] = __('months', 'event_espresso'); |
|
1493 | + EE_Registry::$i18n_js_strings['timer_weeks'] = __('weeks', 'event_espresso'); |
|
1494 | + EE_Registry::$i18n_js_strings['timer_days'] = __('days', 'event_espresso'); |
|
1495 | + EE_Registry::$i18n_js_strings['timer_hours'] = __('hours', 'event_espresso'); |
|
1496 | + EE_Registry::$i18n_js_strings['timer_minutes'] = __('minutes', 'event_espresso'); |
|
1497 | + EE_Registry::$i18n_js_strings['timer_seconds'] = __('seconds', 'event_espresso'); |
|
1498 | + EE_Registry::$i18n_js_strings['timer_year'] = __('year', 'event_espresso'); |
|
1499 | + EE_Registry::$i18n_js_strings['timer_month'] = __('month', 'event_espresso'); |
|
1500 | + EE_Registry::$i18n_js_strings['timer_week'] = __('week', 'event_espresso'); |
|
1501 | + EE_Registry::$i18n_js_strings['timer_day'] = __('day', 'event_espresso'); |
|
1502 | + EE_Registry::$i18n_js_strings['timer_hour'] = __('hour', 'event_espresso'); |
|
1503 | + EE_Registry::$i18n_js_strings['timer_minute'] = __('minute', 'event_espresso'); |
|
1504 | + EE_Registry::$i18n_js_strings['timer_second'] = __('second', 'event_espresso'); |
|
1505 | + EE_Registry::$i18n_js_strings['registration_expiration_notice'] = sprintf( |
|
1506 | + __( |
|
1507 | + '%1$sWe\'re sorry, but your registration time has expired.%2$s%3$s%4$sIf you still wish to complete your registration, please return to the %5$sEvent List%6$sEvent List%7$s and reselect your tickets if available. Please except our apologies for any inconvenience this may have caused.%8$s', |
|
1508 | + 'event_espresso' |
|
1509 | + ), |
|
1510 | + '<h4 class="important-notice">', |
|
1511 | + '</h4>', |
|
1512 | + '<br />', |
|
1513 | + '<p>', |
|
1514 | + '<a href="' . get_post_type_archive_link('espresso_events') . '" title="', |
|
1515 | + '">', |
|
1516 | + '</a>', |
|
1517 | + '</p>' |
|
1518 | + ); |
|
1519 | + EE_Registry::$i18n_js_strings['ajax_submit'] = apply_filters( |
|
1520 | + 'FHEE__Single_Page_Checkout__translate_js_strings__ajax_submit', |
|
1521 | + true |
|
1522 | + ); |
|
1523 | + EE_Registry::$i18n_js_strings['session_extension'] = absint( |
|
1524 | + apply_filters('FHEE__EE_Session__extend_expiration__seconds_added', 10 * MINUTE_IN_SECONDS) |
|
1525 | + ); |
|
1526 | + EE_Registry::$i18n_js_strings['session_expiration'] = gmdate( |
|
1527 | + 'M d, Y H:i:s', |
|
1528 | + EE_Registry::instance()->SSN->expiration() + (get_option('gmt_offset') * HOUR_IN_SECONDS) |
|
1529 | + ); |
|
1530 | + } |
|
1531 | + |
|
1532 | + |
|
1533 | + |
|
1534 | + /** |
|
1535 | + * enqueue_styles_and_scripts |
|
1536 | + * |
|
1537 | + * @access public |
|
1538 | + * @return void |
|
1539 | + * @throws EE_Error |
|
1540 | + */ |
|
1541 | + public function enqueue_styles_and_scripts() |
|
1542 | + { |
|
1543 | + // load css |
|
1544 | + wp_register_style( |
|
1545 | + 'single_page_checkout', |
|
1546 | + SPCO_CSS_URL . 'single_page_checkout.css', |
|
1547 | + array('espresso_default'), |
|
1548 | + EVENT_ESPRESSO_VERSION |
|
1549 | + ); |
|
1550 | + wp_enqueue_style('single_page_checkout'); |
|
1551 | + // load JS |
|
1552 | + wp_register_script( |
|
1553 | + 'jquery_plugin', |
|
1554 | + EE_THIRD_PARTY_URL . 'jquery .plugin.min.js', |
|
1555 | + array('jquery'), |
|
1556 | + '1.0.1', |
|
1557 | + true |
|
1558 | + ); |
|
1559 | + wp_register_script( |
|
1560 | + 'jquery_countdown', |
|
1561 | + EE_THIRD_PARTY_URL . 'jquery .countdown.min.js', |
|
1562 | + array('jquery_plugin'), |
|
1563 | + '2.0.2', |
|
1564 | + true |
|
1565 | + ); |
|
1566 | + wp_register_script( |
|
1567 | + 'single_page_checkout', |
|
1568 | + SPCO_JS_URL . 'single_page_checkout.js', |
|
1569 | + array('espresso_core', 'underscore', 'ee_form_section_validation', 'jquery_countdown'), |
|
1570 | + EVENT_ESPRESSO_VERSION, |
|
1571 | + true |
|
1572 | + ); |
|
1573 | + if ($this->checkout->registration_form instanceof EE_Form_Section_Proper) { |
|
1574 | + $this->checkout->registration_form->enqueue_js(); |
|
1575 | + } |
|
1576 | + if ($this->checkout->current_step->reg_form instanceof EE_Form_Section_Proper) { |
|
1577 | + $this->checkout->current_step->reg_form->enqueue_js(); |
|
1578 | + } |
|
1579 | + wp_enqueue_script('single_page_checkout'); |
|
1580 | + /** |
|
1581 | + * global action hook for enqueueing styles and scripts with |
|
1582 | + * spco calls. |
|
1583 | + */ |
|
1584 | + do_action('AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts', $this); |
|
1585 | + /** |
|
1586 | + * dynamic action hook for enqueueing styles and scripts with spco calls. |
|
1587 | + * The hook will end up being something like: |
|
1588 | + * AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__attendee_information |
|
1589 | + */ |
|
1590 | + do_action( |
|
1591 | + 'AHEE__EED_Single_Page_Checkout__enqueue_styles_and_scripts__' . $this->checkout->current_step->slug(), |
|
1592 | + $this |
|
1593 | + ); |
|
1594 | + } |
|
1595 | + |
|
1596 | + |
|
1597 | + |
|
1598 | + /** |
|
1599 | + * display the Registration Single Page Checkout Form |
|
1600 | + * |
|
1601 | + * @access private |
|
1602 | + * @return void |
|
1603 | + * @throws EE_Error |
|
1604 | + */ |
|
1605 | + private function _display_spco_reg_form() |
|
1606 | + { |
|
1607 | + // if registering via the admin, just display the reg form for the current step |
|
1608 | + if ($this->checkout->admin_request) { |
|
1609 | + EE_Registry::instance()->REQ->add_output($this->checkout->current_step->display_reg_form()); |
|
1610 | + } else { |
|
1611 | + // add powered by EE msg |
|
1612 | + add_action('AHEE__SPCO__reg_form_footer', array('EED_Single_Page_Checkout', 'display_registration_footer')); |
|
1613 | + $empty_cart = count( |
|
1614 | + $this->checkout->transaction->registrations($this->checkout->reg_cache_where_params) |
|
1615 | + ) < 1; |
|
1616 | + EE_Registry::$i18n_js_strings['empty_cart'] = $empty_cart; |
|
1617 | + $cookies_not_set_msg = ''; |
|
1618 | + if ($empty_cart && ! isset($_COOKIE['ee_cookie_test'])) { |
|
1619 | + $cookies_not_set_msg = apply_filters( |
|
1620 | + 'FHEE__Single_Page_Checkout__display_spco_reg_form__cookies_not_set_msg', |
|
1621 | + sprintf( |
|
1622 | + __( |
|
1623 | + '%1$s%3$sIt appears your browser is not currently set to accept Cookies%4$s%5$sIn order to register for events, you need to enable cookies.%7$sIf you require assistance, then click the following link to learn how to %8$senable cookies%9$s%6$s%2$s', |
|
1624 | + 'event_espresso' |
|
1625 | + ), |
|
1626 | + '<div class="ee-attention">', |
|
1627 | + '</div>', |
|
1628 | + '<h6 class="important-notice">', |
|
1629 | + '</h6>', |
|
1630 | + '<p>', |
|
1631 | + '</p>', |
|
1632 | + '<br />', |
|
1633 | + '<a href="http://www.whatarecookies.com/enable.asp" target="_blank">', |
|
1634 | + '</a>' |
|
1635 | + ) |
|
1636 | + ); |
|
1637 | + } |
|
1638 | + $this->checkout->registration_form = new EE_Form_Section_Proper( |
|
1639 | + array( |
|
1640 | + 'name' => 'single-page-checkout', |
|
1641 | + 'html_id' => 'ee-single-page-checkout-dv', |
|
1642 | + 'layout_strategy' => |
|
1643 | + new EE_Template_Layout( |
|
1644 | + array( |
|
1645 | + 'layout_template_file' => SPCO_TEMPLATES_PATH . 'registration_page_wrapper.template.php', |
|
1646 | + 'template_args' => array( |
|
1647 | + 'empty_cart' => $empty_cart, |
|
1648 | + 'revisit' => $this->checkout->revisit, |
|
1649 | + 'reg_steps' => $this->checkout->reg_steps, |
|
1650 | + 'next_step' => $this->checkout->next_step instanceof EE_SPCO_Reg_Step |
|
1651 | + ? $this->checkout->next_step->slug() |
|
1652 | + : '', |
|
1653 | + 'cancel_page_url' => $this->checkout->cancel_page_url, |
|
1654 | + 'empty_msg' => apply_filters( |
|
1655 | + 'FHEE__Single_Page_Checkout__display_spco_reg_form__empty_msg', |
|
1656 | + sprintf( |
|
1657 | + __( |
|
1658 | + 'You need to %1$sReturn to Events list%2$sselect at least one event%3$s before you can proceed with the registration process.', |
|
1659 | + 'event_espresso' |
|
1660 | + ), |
|
1661 | + '<a href="' |
|
1662 | + . get_post_type_archive_link('espresso_events') |
|
1663 | + . '" title="', |
|
1664 | + '">', |
|
1665 | + '</a>' |
|
1666 | + ) |
|
1667 | + ), |
|
1668 | + 'cookies_not_set_msg' => $cookies_not_set_msg, |
|
1669 | + 'registration_time_limit' => $this->checkout->get_registration_time_limit(), |
|
1670 | + 'session_expiration' => gmdate( |
|
1671 | + 'M d, Y H:i:s', |
|
1672 | + EE_Registry::instance()->SSN->expiration() |
|
1673 | + + (get_option('gmt_offset') * HOUR_IN_SECONDS) |
|
1674 | + ), |
|
1675 | + ), |
|
1676 | + ) |
|
1677 | + ), |
|
1678 | + ) |
|
1679 | + ); |
|
1680 | + // load template and add to output sent that gets filtered into the_content() |
|
1681 | + EE_Registry::instance()->REQ->add_output($this->checkout->registration_form->get_html()); |
|
1682 | + } |
|
1683 | + } |
|
1684 | + |
|
1685 | + |
|
1686 | + |
|
1687 | + /** |
|
1688 | + * add_extra_finalize_registration_inputs |
|
1689 | + * |
|
1690 | + * @access public |
|
1691 | + * @param $next_step |
|
1692 | + * @internal param string $label |
|
1693 | + * @return void |
|
1694 | + */ |
|
1695 | + public function add_extra_finalize_registration_inputs($next_step) |
|
1696 | + { |
|
1697 | + if ($next_step === 'finalize_registration') { |
|
1698 | + echo '<div id="spco-extra-finalize_registration-inputs-dv"></div>'; |
|
1699 | + } |
|
1700 | + } |
|
1701 | + |
|
1702 | + |
|
1703 | + |
|
1704 | + /** |
|
1705 | + * display_registration_footer |
|
1706 | + * |
|
1707 | + * @access public |
|
1708 | + * @return string |
|
1709 | + */ |
|
1710 | + public static function display_registration_footer() |
|
1711 | + { |
|
1712 | + if ( |
|
1713 | + apply_filters( |
|
1714 | + 'FHEE__EE_Front__Controller__show_reg_footer', |
|
1715 | + EE_Registry::instance()->CFG->admin->show_reg_footer |
|
1716 | + ) |
|
1717 | + ) { |
|
1718 | + add_filter( |
|
1719 | + 'FHEE__EEH_Template__powered_by_event_espresso__url', |
|
1720 | + function ($url) { |
|
1721 | + return apply_filters('FHEE__EE_Front_Controller__registration_footer__url', $url); |
|
1722 | + } |
|
1723 | + ); |
|
1724 | + echo apply_filters( |
|
1725 | + 'FHEE__EE_Front_Controller__display_registration_footer', |
|
1726 | + \EEH_Template::powered_by_event_espresso( |
|
1727 | + '', |
|
1728 | + 'espresso-registration-footer-dv', |
|
1729 | + array('utm_content' => 'registration_checkout') |
|
1730 | + ) |
|
1731 | + ); |
|
1732 | + } |
|
1733 | + return ''; |
|
1734 | + } |
|
1735 | + |
|
1736 | + |
|
1737 | + |
|
1738 | + /** |
|
1739 | + * unlock_transaction |
|
1740 | + * |
|
1741 | + * @access public |
|
1742 | + * @return void |
|
1743 | + * @throws EE_Error |
|
1744 | + */ |
|
1745 | + public function unlock_transaction() |
|
1746 | + { |
|
1747 | + if ($this->checkout->transaction instanceof EE_Transaction) { |
|
1748 | + $this->checkout->transaction->unlock(); |
|
1749 | + } |
|
1750 | + } |
|
1751 | + |
|
1752 | + |
|
1753 | + |
|
1754 | + /** |
|
1755 | + * _setup_redirect |
|
1756 | + * |
|
1757 | + * @access private |
|
1758 | + * @return void |
|
1759 | + */ |
|
1760 | + private function _setup_redirect() |
|
1761 | + { |
|
1762 | + if ($this->checkout->continue_reg && $this->checkout->next_step instanceof EE_SPCO_Reg_Step) { |
|
1763 | + $this->checkout->redirect = true; |
|
1764 | + if (empty($this->checkout->redirect_url)) { |
|
1765 | + $this->checkout->redirect_url = $this->checkout->next_step->reg_step_url(); |
|
1766 | + } |
|
1767 | + $this->checkout->redirect_url = apply_filters( |
|
1768 | + 'FHEE__EED_Single_Page_Checkout___setup_redirect__checkout_redirect_url', |
|
1769 | + $this->checkout->redirect_url, |
|
1770 | + $this->checkout |
|
1771 | + ); |
|
1772 | + } |
|
1773 | + } |
|
1774 | + |
|
1775 | + |
|
1776 | + |
|
1777 | + /** |
|
1778 | + * handle ajax message responses and redirects |
|
1779 | + * |
|
1780 | + * @access public |
|
1781 | + * @return void |
|
1782 | + * @throws EE_Error |
|
1783 | + */ |
|
1784 | + public function go_to_next_step() |
|
1785 | + { |
|
1786 | + if (EE_Registry::instance()->REQ->ajax) { |
|
1787 | + // capture contents of output buffer we started earlier in the request, and insert into JSON response |
|
1788 | + $this->checkout->json_response->set_unexpected_errors(ob_get_clean()); |
|
1789 | + } |
|
1790 | + $this->unlock_transaction(); |
|
1791 | + // just return for these conditions |
|
1792 | + if ( |
|
1793 | + $this->checkout->admin_request |
|
1794 | + || $this->checkout->action === 'redirect_form' |
|
1795 | + || $this->checkout->action === 'update_checkout' |
|
1796 | + ) { |
|
1797 | + return; |
|
1798 | + } |
|
1799 | + // AJAX response |
|
1800 | + $this->_handle_json_response(); |
|
1801 | + // redirect to next step or the Thank You page |
|
1802 | + $this->_handle_html_redirects(); |
|
1803 | + // hmmm... must be something wrong, so let's just display the form again ! |
|
1804 | + $this->_display_spco_reg_form(); |
|
1805 | + } |
|
1806 | + |
|
1807 | + |
|
1808 | + |
|
1809 | + /** |
|
1810 | + * _handle_json_response |
|
1811 | + * |
|
1812 | + * @access protected |
|
1813 | + * @return void |
|
1814 | + */ |
|
1815 | + protected function _handle_json_response() |
|
1816 | + { |
|
1817 | + // if this is an ajax request |
|
1818 | + if (EE_Registry::instance()->REQ->ajax) { |
|
1819 | + // DEBUG LOG |
|
1820 | + //$this->checkout->log( |
|
1821 | + // __CLASS__, __FUNCTION__, __LINE__, |
|
1822 | + // array( |
|
1823 | + // 'json_response_redirect_url' => $this->checkout->json_response->redirect_url(), |
|
1824 | + // 'redirect' => $this->checkout->redirect, |
|
1825 | + // 'continue_reg' => $this->checkout->continue_reg, |
|
1826 | + // ) |
|
1827 | + //); |
|
1828 | + $this->checkout->json_response->set_registration_time_limit( |
|
1829 | + $this->checkout->get_registration_time_limit() |
|
1830 | + ); |
|
1831 | + $this->checkout->json_response->set_payment_amount($this->checkout->amount_owing); |
|
1832 | + // just send the ajax ( |
|
1833 | + $json_response = apply_filters( |
|
1834 | + 'FHEE__EE_Single_Page_Checkout__JSON_response', |
|
1835 | + $this->checkout->json_response |
|
1836 | + ); |
|
1837 | + echo $json_response; |
|
1838 | + exit(); |
|
1839 | + } |
|
1840 | + } |
|
1841 | + |
|
1842 | + |
|
1843 | + |
|
1844 | + /** |
|
1845 | + * _handle_redirects |
|
1846 | + * |
|
1847 | + * @access protected |
|
1848 | + * @return void |
|
1849 | + */ |
|
1850 | + protected function _handle_html_redirects() |
|
1851 | + { |
|
1852 | + // going somewhere ? |
|
1853 | + if ($this->checkout->redirect && ! empty($this->checkout->redirect_url)) { |
|
1854 | + // store notices in a transient |
|
1855 | + EE_Error::get_notices(false, true, true); |
|
1856 | + // DEBUG LOG |
|
1857 | + //$this->checkout->log( |
|
1858 | + // __CLASS__, __FUNCTION__, __LINE__, |
|
1859 | + // array( |
|
1860 | + // 'headers_sent' => headers_sent(), |
|
1861 | + // 'redirect_url' => $this->checkout->redirect_url, |
|
1862 | + // 'headers_list' => headers_list(), |
|
1863 | + // ) |
|
1864 | + //); |
|
1865 | + wp_safe_redirect($this->checkout->redirect_url); |
|
1866 | + exit(); |
|
1867 | + } |
|
1868 | + } |
|
1869 | + |
|
1870 | + |
|
1871 | + |
|
1872 | + /** |
|
1873 | + * set_checkout_anchor |
|
1874 | + * |
|
1875 | + * @access public |
|
1876 | + * @return void |
|
1877 | + */ |
|
1878 | + public function set_checkout_anchor() |
|
1879 | + { |
|
1880 | + echo '<a id="checkout" style="float: left; margin-left: -999em;"></a>'; |
|
1881 | + } |
|
1882 | 1882 | |
1883 | 1883 | |
1884 | 1884 |