@@ -20,139 +20,139 @@ |
||
20 | 20 | interface RequestInterface extends RequestTypeContextCheckerInterface |
21 | 21 | { |
22 | 22 | |
23 | - /** |
|
24 | - * @param RequestTypeContextCheckerInterface $type |
|
25 | - */ |
|
26 | - public function setRequestTypeContextChecker(RequestTypeContextCheckerInterface $type); |
|
27 | - |
|
28 | - /** |
|
29 | - * @return array |
|
30 | - */ |
|
31 | - public function getParams(); |
|
32 | - |
|
33 | - |
|
34 | - /** |
|
35 | - * @return array |
|
36 | - */ |
|
37 | - public function postParams(); |
|
38 | - |
|
39 | - |
|
40 | - /** |
|
41 | - * @return array |
|
42 | - */ |
|
43 | - public function cookieParams(); |
|
44 | - |
|
45 | - |
|
46 | - /** |
|
47 | - * @return array |
|
48 | - */ |
|
49 | - public function serverParams(); |
|
50 | - |
|
51 | - |
|
52 | - /** |
|
53 | - * returns contents of $_REQUEST |
|
54 | - * |
|
55 | - * @return array |
|
56 | - */ |
|
57 | - public function requestParams(); |
|
23 | + /** |
|
24 | + * @param RequestTypeContextCheckerInterface $type |
|
25 | + */ |
|
26 | + public function setRequestTypeContextChecker(RequestTypeContextCheckerInterface $type); |
|
27 | + |
|
28 | + /** |
|
29 | + * @return array |
|
30 | + */ |
|
31 | + public function getParams(); |
|
32 | + |
|
33 | + |
|
34 | + /** |
|
35 | + * @return array |
|
36 | + */ |
|
37 | + public function postParams(); |
|
38 | + |
|
39 | + |
|
40 | + /** |
|
41 | + * @return array |
|
42 | + */ |
|
43 | + public function cookieParams(); |
|
44 | + |
|
45 | + |
|
46 | + /** |
|
47 | + * @return array |
|
48 | + */ |
|
49 | + public function serverParams(); |
|
50 | + |
|
51 | + |
|
52 | + /** |
|
53 | + * returns contents of $_REQUEST |
|
54 | + * |
|
55 | + * @return array |
|
56 | + */ |
|
57 | + public function requestParams(); |
|
58 | 58 | |
59 | 59 | |
60 | - /** |
|
61 | - * @param string $key |
|
62 | - * @param string $value |
|
63 | - * @param bool $override_ee |
|
64 | - * @return void |
|
65 | - */ |
|
66 | - public function setRequestParam($key, $value, $override_ee = false); |
|
60 | + /** |
|
61 | + * @param string $key |
|
62 | + * @param string $value |
|
63 | + * @param bool $override_ee |
|
64 | + * @return void |
|
65 | + */ |
|
66 | + public function setRequestParam($key, $value, $override_ee = false); |
|
67 | 67 | |
68 | 68 | |
69 | - /** |
|
70 | - * returns the value for a request param if the given key exists |
|
71 | - * |
|
72 | - * @param string $key |
|
73 | - * @param null $default |
|
74 | - * @return mixed |
|
75 | - */ |
|
76 | - public function getRequestParam($key, $default = null); |
|
69 | + /** |
|
70 | + * returns the value for a request param if the given key exists |
|
71 | + * |
|
72 | + * @param string $key |
|
73 | + * @param null $default |
|
74 | + * @return mixed |
|
75 | + */ |
|
76 | + public function getRequestParam($key, $default = null); |
|
77 | 77 | |
78 | 78 | |
79 | - /** |
|
80 | - * check if param exists |
|
81 | - * |
|
82 | - * @param string $key |
|
83 | - * @return bool |
|
84 | - */ |
|
85 | - public function requestParamIsSet($key); |
|
79 | + /** |
|
80 | + * check if param exists |
|
81 | + * |
|
82 | + * @param string $key |
|
83 | + * @return bool |
|
84 | + */ |
|
85 | + public function requestParamIsSet($key); |
|
86 | 86 | |
87 | 87 | |
88 | - /** |
|
89 | - * check if a request parameter exists whose key that matches the supplied wildcard pattern |
|
90 | - * and return the value for the first match found |
|
91 | - * wildcards can be either of the following: |
|
92 | - * ? to represent a single character of any type |
|
93 | - * * to represent one or more characters of any type |
|
94 | - * |
|
95 | - * @param string $pattern |
|
96 | - * @param null|mixed $default |
|
97 | - * @return false|int |
|
98 | - */ |
|
99 | - public function getMatch($pattern, $default = null); |
|
88 | + /** |
|
89 | + * check if a request parameter exists whose key that matches the supplied wildcard pattern |
|
90 | + * and return the value for the first match found |
|
91 | + * wildcards can be either of the following: |
|
92 | + * ? to represent a single character of any type |
|
93 | + * * to represent one or more characters of any type |
|
94 | + * |
|
95 | + * @param string $pattern |
|
96 | + * @param null|mixed $default |
|
97 | + * @return false|int |
|
98 | + */ |
|
99 | + public function getMatch($pattern, $default = null); |
|
100 | 100 | |
101 | 101 | |
102 | - /** |
|
103 | - * check if a request parameter exists whose key matches the supplied wildcard pattern |
|
104 | - * wildcards can be either of the following: |
|
105 | - * ? to represent a single character of any type |
|
106 | - * * to represent one or more characters of any type |
|
107 | - * returns true if a match is found or false if not |
|
108 | - * |
|
109 | - * @param string $pattern |
|
110 | - * @return false|int |
|
111 | - */ |
|
112 | - public function matches($pattern); |
|
102 | + /** |
|
103 | + * check if a request parameter exists whose key matches the supplied wildcard pattern |
|
104 | + * wildcards can be either of the following: |
|
105 | + * ? to represent a single character of any type |
|
106 | + * * to represent one or more characters of any type |
|
107 | + * returns true if a match is found or false if not |
|
108 | + * |
|
109 | + * @param string $pattern |
|
110 | + * @return false|int |
|
111 | + */ |
|
112 | + public function matches($pattern); |
|
113 | 113 | |
114 | 114 | |
115 | - /** |
|
116 | - * remove param |
|
117 | - * |
|
118 | - * @param string $key |
|
119 | - * @param bool $unset_from_global_too |
|
120 | - */ |
|
121 | - public function unSetRequestParam($key, $unset_from_global_too = false); |
|
115 | + /** |
|
116 | + * remove param |
|
117 | + * |
|
118 | + * @param string $key |
|
119 | + * @param bool $unset_from_global_too |
|
120 | + */ |
|
121 | + public function unSetRequestParam($key, $unset_from_global_too = false); |
|
122 | 122 | |
123 | 123 | |
124 | - /** |
|
125 | - * @return string |
|
126 | - */ |
|
127 | - public function ipAddress(); |
|
124 | + /** |
|
125 | + * @return string |
|
126 | + */ |
|
127 | + public function ipAddress(); |
|
128 | 128 | |
129 | 129 | |
130 | - /** |
|
131 | - * @return string |
|
132 | - */ |
|
133 | - public function requestUri(); |
|
134 | - |
|
130 | + /** |
|
131 | + * @return string |
|
132 | + */ |
|
133 | + public function requestUri(); |
|
134 | + |
|
135 | 135 | |
136 | - /** |
|
137 | - * @return string |
|
138 | - */ |
|
139 | - public function userAgent(); |
|
140 | - |
|
141 | - |
|
142 | - /** |
|
143 | - * @param string $user_agent |
|
144 | - */ |
|
145 | - public function setUserAgent($user_agent = ''); |
|
146 | - |
|
147 | - |
|
148 | - /** |
|
149 | - * @return bool |
|
150 | - */ |
|
151 | - public function isBot(); |
|
152 | - |
|
153 | - |
|
154 | - /** |
|
155 | - * @param bool $is_bot |
|
156 | - */ |
|
157 | - public function setIsBot($is_bot); |
|
136 | + /** |
|
137 | + * @return string |
|
138 | + */ |
|
139 | + public function userAgent(); |
|
140 | + |
|
141 | + |
|
142 | + /** |
|
143 | + * @param string $user_agent |
|
144 | + */ |
|
145 | + public function setUserAgent($user_agent = ''); |
|
146 | + |
|
147 | + |
|
148 | + /** |
|
149 | + * @return bool |
|
150 | + */ |
|
151 | + public function isBot(); |
|
152 | + |
|
153 | + |
|
154 | + /** |
|
155 | + * @param bool $is_bot |
|
156 | + */ |
|
157 | + public function setIsBot($is_bot); |
|
158 | 158 | } |
@@ -14,28 +14,28 @@ |
||
14 | 14 | class EE_Detect_File_Editor_Request extends EE_Middleware |
15 | 15 | { |
16 | 16 | |
17 | - /** |
|
18 | - * @deprecated |
|
19 | - * @param EE_Request $request |
|
20 | - * @param EE_Response $response |
|
21 | - * @return EE_Response |
|
22 | - */ |
|
23 | - public function handle_request(EE_Request $request, EE_Response $response) |
|
24 | - { |
|
25 | - EE_Error::doing_it_wrong( |
|
26 | - __METHOD__, |
|
27 | - sprintf( |
|
28 | - esc_html__( |
|
29 | - 'This class is deprecated. Please use %1$s instead. All Event Espresso request stack classes have been moved to %2$s and are now under the %3$s namespace', |
|
30 | - 'event_espresso' |
|
31 | - ), |
|
32 | - 'EventEspresso\core\services\request\middleware\DetectFileEditorRequest', |
|
33 | - '\core\services\request', |
|
34 | - 'EventEspresso\core\services\request' |
|
35 | - ), |
|
36 | - '4.9.52' |
|
37 | - ); |
|
38 | - return $response; |
|
39 | - } |
|
17 | + /** |
|
18 | + * @deprecated |
|
19 | + * @param EE_Request $request |
|
20 | + * @param EE_Response $response |
|
21 | + * @return EE_Response |
|
22 | + */ |
|
23 | + public function handle_request(EE_Request $request, EE_Response $response) |
|
24 | + { |
|
25 | + EE_Error::doing_it_wrong( |
|
26 | + __METHOD__, |
|
27 | + sprintf( |
|
28 | + esc_html__( |
|
29 | + 'This class is deprecated. Please use %1$s instead. All Event Espresso request stack classes have been moved to %2$s and are now under the %3$s namespace', |
|
30 | + 'event_espresso' |
|
31 | + ), |
|
32 | + 'EventEspresso\core\services\request\middleware\DetectFileEditorRequest', |
|
33 | + '\core\services\request', |
|
34 | + 'EventEspresso\core\services\request' |
|
35 | + ), |
|
36 | + '4.9.52' |
|
37 | + ); |
|
38 | + return $response; |
|
39 | + } |
|
40 | 40 | |
41 | 41 | } |
@@ -83,12 +83,12 @@ |
||
83 | 83 | <div class="notice inline notice-alt"> |
84 | 84 | <div class="ee-upsell-container"> |
85 | 85 | <div class="ee-upsell-inner-container"> |
86 | - <a href="' . $button_url . '"> |
|
87 | - ' . $button_text . ' |
|
86 | + <a href="' . $button_url.'"> |
|
87 | + ' . $button_text.' |
|
88 | 88 | </a> |
89 | 89 | </div> |
90 | 90 | <div class="ee-upsell-inner-container"> |
91 | - <p>' . $upsell_text . '</p> |
|
91 | + <p>' . $upsell_text.'</p> |
|
92 | 92 | </div> |
93 | 93 | <div style="clear:both"></div> |
94 | 94 | </div> |
@@ -17,47 +17,47 @@ discard block |
||
17 | 17 | class PluginUpsells |
18 | 18 | { |
19 | 19 | |
20 | - /** |
|
21 | - * @var DomainInterface |
|
22 | - */ |
|
23 | - private $domain; |
|
20 | + /** |
|
21 | + * @var DomainInterface |
|
22 | + */ |
|
23 | + private $domain; |
|
24 | 24 | |
25 | 25 | |
26 | - /** |
|
27 | - * PluginUpsells constructor. |
|
28 | - * |
|
29 | - * @param DomainInterface $domain |
|
30 | - */ |
|
31 | - public function __construct(DomainInterface $domain) |
|
32 | - { |
|
33 | - $this->domain = $domain; |
|
34 | - } |
|
26 | + /** |
|
27 | + * PluginUpsells constructor. |
|
28 | + * |
|
29 | + * @param DomainInterface $domain |
|
30 | + */ |
|
31 | + public function __construct(DomainInterface $domain) |
|
32 | + { |
|
33 | + $this->domain = $domain; |
|
34 | + } |
|
35 | 35 | |
36 | 36 | |
37 | - /** |
|
38 | - * Hook in various upsells for the decaf version of EE. |
|
39 | - */ |
|
40 | - public function decafUpsells() |
|
41 | - { |
|
42 | - if ($this->domain instanceof CaffeinatedInterface && ! $this->domain->isCaffeinated()) { |
|
43 | - add_action('after_plugin_row', array($this, 'doPremiumUpsell'), 10, 3); |
|
44 | - } |
|
45 | - } |
|
37 | + /** |
|
38 | + * Hook in various upsells for the decaf version of EE. |
|
39 | + */ |
|
40 | + public function decafUpsells() |
|
41 | + { |
|
42 | + if ($this->domain instanceof CaffeinatedInterface && ! $this->domain->isCaffeinated()) { |
|
43 | + add_action('after_plugin_row', array($this, 'doPremiumUpsell'), 10, 3); |
|
44 | + } |
|
45 | + } |
|
46 | 46 | |
47 | 47 | |
48 | - /** |
|
49 | - * Callback for `after_plugin_row` to add upsell info |
|
50 | - * |
|
51 | - * @param string $plugin_file |
|
52 | - * @param array $plugin_data |
|
53 | - * @param string $status |
|
54 | - * @throws DomainException |
|
55 | - */ |
|
56 | - public function doPremiumUpsell($plugin_file, $plugin_data, $status) |
|
57 | - { |
|
58 | - if ($plugin_file === $this->domain->pluginBasename()) { |
|
59 | - list($button_text, $button_url, $upsell_text) = $this->getAfterPluginRowDetails(); |
|
60 | - echo '<tr class="plugin-update-tr ee-upsell-plugin-list-table active"> |
|
48 | + /** |
|
49 | + * Callback for `after_plugin_row` to add upsell info |
|
50 | + * |
|
51 | + * @param string $plugin_file |
|
52 | + * @param array $plugin_data |
|
53 | + * @param string $status |
|
54 | + * @throws DomainException |
|
55 | + */ |
|
56 | + public function doPremiumUpsell($plugin_file, $plugin_data, $status) |
|
57 | + { |
|
58 | + if ($plugin_file === $this->domain->pluginBasename()) { |
|
59 | + list($button_text, $button_url, $upsell_text) = $this->getAfterPluginRowDetails(); |
|
60 | + echo '<tr class="plugin-update-tr ee-upsell-plugin-list-table active"> |
|
61 | 61 | <td colspan="3" class="plugin-update colspanchange"> |
62 | 62 | <div class="notice inline notice-alt"> |
63 | 63 | <div class="ee-upsell-container"> |
@@ -74,27 +74,27 @@ discard block |
||
74 | 74 | </div> |
75 | 75 | </td> |
76 | 76 | </tr>'; |
77 | - } |
|
78 | - } |
|
77 | + } |
|
78 | + } |
|
79 | 79 | |
80 | - /** |
|
81 | - * Provide the details used for the upsell container. |
|
82 | - * |
|
83 | - * @return array |
|
84 | - */ |
|
85 | - protected function getAfterPluginRowDetails() |
|
86 | - { |
|
87 | - return array( |
|
88 | - esc_html__('Upgrade for Support', 'event_espresso'), |
|
89 | - 'https://eventespresso.com/purchase/?slug=ee4-license-personal&utm_source=wp_admin_plugins_screen&utm_medium=link&utm_campaign=plugins_screen_upgrade_link" class="button button-primary', |
|
90 | - sprintf( |
|
91 | - esc_html__( |
|
92 | - 'You\'re missing out on %1$sexpert support%2$s and %1$sone-click updates%2$s! Don\'t have an Event Espresso support license key? Support the project and buy one today!', |
|
93 | - 'event_espresso' |
|
94 | - ), |
|
95 | - '<strong>', |
|
96 | - '</strong>' |
|
97 | - ), |
|
98 | - ); |
|
99 | - } |
|
80 | + /** |
|
81 | + * Provide the details used for the upsell container. |
|
82 | + * |
|
83 | + * @return array |
|
84 | + */ |
|
85 | + protected function getAfterPluginRowDetails() |
|
86 | + { |
|
87 | + return array( |
|
88 | + esc_html__('Upgrade for Support', 'event_espresso'), |
|
89 | + 'https://eventespresso.com/purchase/?slug=ee4-license-personal&utm_source=wp_admin_plugins_screen&utm_medium=link&utm_campaign=plugins_screen_upgrade_link" class="button button-primary', |
|
90 | + sprintf( |
|
91 | + esc_html__( |
|
92 | + 'You\'re missing out on %1$sexpert support%2$s and %1$sone-click updates%2$s! Don\'t have an Event Espresso support license key? Support the project and buy one today!', |
|
93 | + 'event_espresso' |
|
94 | + ), |
|
95 | + '<strong>', |
|
96 | + '</strong>' |
|
97 | + ), |
|
98 | + ); |
|
99 | + } |
|
100 | 100 | } |
@@ -66,7 +66,7 @@ |
||
66 | 66 | */ |
67 | 67 | private function setCaffeinated() |
68 | 68 | { |
69 | - $this->caffeinated = (! defined('EE_DECAF') || EE_DECAF !== true) |
|
70 | - && is_readable($this->pluginPath() . 'caffeinated/brewing_regular.php'); |
|
69 | + $this->caffeinated = ( ! defined('EE_DECAF') || EE_DECAF !== true) |
|
70 | + && is_readable($this->pluginPath().'caffeinated/brewing_regular.php'); |
|
71 | 71 | } |
72 | 72 | } |
@@ -19,54 +19,54 @@ |
||
19 | 19 | class Domain extends DomainBase implements CaffeinatedInterface |
20 | 20 | { |
21 | 21 | |
22 | - /** |
|
23 | - * URL path component used to denote an API request |
|
24 | - */ |
|
25 | - const API_NAMESPACE = 'ee/v'; |
|
22 | + /** |
|
23 | + * URL path component used to denote an API request |
|
24 | + */ |
|
25 | + const API_NAMESPACE = 'ee/v'; |
|
26 | 26 | |
27 | - /** |
|
28 | - * Slug used for the context where a registration status is changed from a manual trigger in the Registration Admin |
|
29 | - * Page ui. |
|
30 | - */ |
|
31 | - const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN |
|
32 | - = 'manual_registration_status_change_from_registration_admin'; |
|
27 | + /** |
|
28 | + * Slug used for the context where a registration status is changed from a manual trigger in the Registration Admin |
|
29 | + * Page ui. |
|
30 | + */ |
|
31 | + const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN |
|
32 | + = 'manual_registration_status_change_from_registration_admin'; |
|
33 | 33 | |
34 | - const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN_NOTIFY |
|
35 | - = 'manual_registration_status_change_from_registration_admin_and_notify'; |
|
34 | + const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN_NOTIFY |
|
35 | + = 'manual_registration_status_change_from_registration_admin_and_notify'; |
|
36 | 36 | |
37 | 37 | |
38 | - /** |
|
39 | - * Whether or not EE core is the full premium version. |
|
40 | - * @since 4.9.59.p |
|
41 | - * @var bool |
|
42 | - */ |
|
43 | - private $caffeinated; |
|
38 | + /** |
|
39 | + * Whether or not EE core is the full premium version. |
|
40 | + * @since 4.9.59.p |
|
41 | + * @var bool |
|
42 | + */ |
|
43 | + private $caffeinated; |
|
44 | 44 | |
45 | 45 | |
46 | - public function __construct(FilePath $plugin_file, Version $version) |
|
47 | - { |
|
48 | - parent::__construct($plugin_file, $version); |
|
49 | - $this->setCaffeinated(); |
|
50 | - } |
|
46 | + public function __construct(FilePath $plugin_file, Version $version) |
|
47 | + { |
|
48 | + parent::__construct($plugin_file, $version); |
|
49 | + $this->setCaffeinated(); |
|
50 | + } |
|
51 | 51 | |
52 | - /** |
|
53 | - * Whether or not EE core is the full premium version. |
|
54 | - * @since 4.9.59.p |
|
55 | - * @return bool |
|
56 | - */ |
|
57 | - public function isCaffeinated() |
|
58 | - { |
|
59 | - return $this->caffeinated; |
|
60 | - } |
|
52 | + /** |
|
53 | + * Whether or not EE core is the full premium version. |
|
54 | + * @since 4.9.59.p |
|
55 | + * @return bool |
|
56 | + */ |
|
57 | + public function isCaffeinated() |
|
58 | + { |
|
59 | + return $this->caffeinated; |
|
60 | + } |
|
61 | 61 | |
62 | 62 | |
63 | - /** |
|
64 | - * Setter for $is_caffeinated property. |
|
65 | - * @since 4.9.59.p |
|
66 | - */ |
|
67 | - private function setCaffeinated() |
|
68 | - { |
|
69 | - $this->caffeinated = (! defined('EE_DECAF') || EE_DECAF !== true) |
|
70 | - && is_readable($this->pluginPath() . 'caffeinated/brewing_regular.php'); |
|
71 | - } |
|
63 | + /** |
|
64 | + * Setter for $is_caffeinated property. |
|
65 | + * @since 4.9.59.p |
|
66 | + */ |
|
67 | + private function setCaffeinated() |
|
68 | + { |
|
69 | + $this->caffeinated = (! defined('EE_DECAF') || EE_DECAF !== true) |
|
70 | + && is_readable($this->pluginPath() . 'caffeinated/brewing_regular.php'); |
|
71 | + } |
|
72 | 72 | } |
@@ -101,7 +101,7 @@ |
||
101 | 101 | |
102 | 102 | |
103 | 103 | /** |
104 | - * @param FullyQualifiedName|string $fqcn |
|
104 | + * @param string $fqcn |
|
105 | 105 | * @param array $arguments |
106 | 106 | * @return mixed |
107 | 107 | */ |
@@ -15,115 +15,115 @@ |
||
15 | 15 | class Loader implements LoaderInterface |
16 | 16 | { |
17 | 17 | |
18 | - /** |
|
19 | - * @var LoaderDecoratorInterface $new_loader |
|
20 | - */ |
|
21 | - private $new_loader; |
|
22 | - |
|
23 | - /** |
|
24 | - * @var LoaderDecoratorInterface $shared_loader |
|
25 | - */ |
|
26 | - private $shared_loader; |
|
27 | - |
|
28 | - /** |
|
29 | - * @var ClassInterfaceCache $class_cache |
|
30 | - */ |
|
31 | - private $class_cache; |
|
32 | - |
|
33 | - /** |
|
34 | - * Loader constructor. |
|
35 | - * |
|
36 | - * @param LoaderDecoratorInterface $new_loader |
|
37 | - * @param CachingLoaderDecoratorInterface $shared_loader |
|
38 | - * @param ClassInterfaceCache $class_cache |
|
39 | - */ |
|
40 | - public function __construct( |
|
41 | - LoaderDecoratorInterface $new_loader, |
|
42 | - CachingLoaderDecoratorInterface $shared_loader, |
|
43 | - ClassInterfaceCache $class_cache |
|
44 | - ) { |
|
45 | - $this->new_loader = $new_loader; |
|
46 | - $this->shared_loader = $shared_loader; |
|
47 | - $this->class_cache = $class_cache; |
|
48 | - } |
|
49 | - |
|
50 | - |
|
51 | - /** |
|
52 | - * @return LoaderDecoratorInterface |
|
53 | - */ |
|
54 | - public function getNewLoader() |
|
55 | - { |
|
56 | - return $this->new_loader; |
|
57 | - } |
|
58 | - |
|
59 | - |
|
60 | - /** |
|
61 | - * @return CachingLoaderDecoratorInterface |
|
62 | - */ |
|
63 | - public function getSharedLoader() |
|
64 | - { |
|
65 | - return $this->shared_loader; |
|
66 | - } |
|
67 | - |
|
68 | - |
|
69 | - /** |
|
70 | - * @param FullyQualifiedName|string $fqcn |
|
71 | - * @param array $arguments |
|
72 | - * @param bool $shared |
|
73 | - * @return mixed |
|
74 | - */ |
|
75 | - public function load($fqcn, array $arguments = array(), $shared = true) |
|
76 | - { |
|
77 | - $fqcn = $this->class_cache->getFqn($fqcn); |
|
78 | - if ($this->class_cache->hasInterface($fqcn, 'EventEspresso\core\interfaces\ReservedInstanceInterface')) { |
|
79 | - $shared = true; |
|
80 | - } |
|
81 | - return $shared |
|
82 | - ? $this->getSharedLoader()->load($fqcn, $arguments, $shared) |
|
83 | - : $this->getNewLoader()->load($fqcn, $arguments, $shared); |
|
84 | - } |
|
85 | - |
|
86 | - |
|
87 | - /** |
|
88 | - * @param FullyQualifiedName|string $fqcn |
|
89 | - * @param array $arguments |
|
90 | - * @return mixed |
|
91 | - */ |
|
92 | - public function getNew($fqcn, array $arguments = array()) |
|
93 | - { |
|
94 | - return $this->load($fqcn, $arguments, false); |
|
95 | - } |
|
96 | - |
|
97 | - |
|
98 | - /** |
|
99 | - * @param FullyQualifiedName|string $fqcn |
|
100 | - * @param array $arguments |
|
101 | - * @return mixed |
|
102 | - */ |
|
103 | - public function getShared($fqcn, array $arguments = array()) |
|
104 | - { |
|
105 | - return $this->load($fqcn, $arguments); |
|
106 | - } |
|
107 | - |
|
108 | - |
|
109 | - /** |
|
110 | - * @param FullyQualifiedName|string $fqcn |
|
111 | - * @param mixed $object |
|
112 | - * @return bool |
|
113 | - * @throws InvalidArgumentException |
|
114 | - */ |
|
115 | - public function share($fqcn, $object) |
|
116 | - { |
|
117 | - $fqcn = $this->class_cache->getFqn($fqcn); |
|
118 | - return $this->getSharedLoader()->share($fqcn, $object); |
|
119 | - } |
|
120 | - |
|
121 | - |
|
122 | - /** |
|
123 | - * calls reset() on loaders if that method exists |
|
124 | - */ |
|
125 | - public function reset() |
|
126 | - { |
|
127 | - $this->shared_loader->reset(); |
|
128 | - } |
|
18 | + /** |
|
19 | + * @var LoaderDecoratorInterface $new_loader |
|
20 | + */ |
|
21 | + private $new_loader; |
|
22 | + |
|
23 | + /** |
|
24 | + * @var LoaderDecoratorInterface $shared_loader |
|
25 | + */ |
|
26 | + private $shared_loader; |
|
27 | + |
|
28 | + /** |
|
29 | + * @var ClassInterfaceCache $class_cache |
|
30 | + */ |
|
31 | + private $class_cache; |
|
32 | + |
|
33 | + /** |
|
34 | + * Loader constructor. |
|
35 | + * |
|
36 | + * @param LoaderDecoratorInterface $new_loader |
|
37 | + * @param CachingLoaderDecoratorInterface $shared_loader |
|
38 | + * @param ClassInterfaceCache $class_cache |
|
39 | + */ |
|
40 | + public function __construct( |
|
41 | + LoaderDecoratorInterface $new_loader, |
|
42 | + CachingLoaderDecoratorInterface $shared_loader, |
|
43 | + ClassInterfaceCache $class_cache |
|
44 | + ) { |
|
45 | + $this->new_loader = $new_loader; |
|
46 | + $this->shared_loader = $shared_loader; |
|
47 | + $this->class_cache = $class_cache; |
|
48 | + } |
|
49 | + |
|
50 | + |
|
51 | + /** |
|
52 | + * @return LoaderDecoratorInterface |
|
53 | + */ |
|
54 | + public function getNewLoader() |
|
55 | + { |
|
56 | + return $this->new_loader; |
|
57 | + } |
|
58 | + |
|
59 | + |
|
60 | + /** |
|
61 | + * @return CachingLoaderDecoratorInterface |
|
62 | + */ |
|
63 | + public function getSharedLoader() |
|
64 | + { |
|
65 | + return $this->shared_loader; |
|
66 | + } |
|
67 | + |
|
68 | + |
|
69 | + /** |
|
70 | + * @param FullyQualifiedName|string $fqcn |
|
71 | + * @param array $arguments |
|
72 | + * @param bool $shared |
|
73 | + * @return mixed |
|
74 | + */ |
|
75 | + public function load($fqcn, array $arguments = array(), $shared = true) |
|
76 | + { |
|
77 | + $fqcn = $this->class_cache->getFqn($fqcn); |
|
78 | + if ($this->class_cache->hasInterface($fqcn, 'EventEspresso\core\interfaces\ReservedInstanceInterface')) { |
|
79 | + $shared = true; |
|
80 | + } |
|
81 | + return $shared |
|
82 | + ? $this->getSharedLoader()->load($fqcn, $arguments, $shared) |
|
83 | + : $this->getNewLoader()->load($fqcn, $arguments, $shared); |
|
84 | + } |
|
85 | + |
|
86 | + |
|
87 | + /** |
|
88 | + * @param FullyQualifiedName|string $fqcn |
|
89 | + * @param array $arguments |
|
90 | + * @return mixed |
|
91 | + */ |
|
92 | + public function getNew($fqcn, array $arguments = array()) |
|
93 | + { |
|
94 | + return $this->load($fqcn, $arguments, false); |
|
95 | + } |
|
96 | + |
|
97 | + |
|
98 | + /** |
|
99 | + * @param FullyQualifiedName|string $fqcn |
|
100 | + * @param array $arguments |
|
101 | + * @return mixed |
|
102 | + */ |
|
103 | + public function getShared($fqcn, array $arguments = array()) |
|
104 | + { |
|
105 | + return $this->load($fqcn, $arguments); |
|
106 | + } |
|
107 | + |
|
108 | + |
|
109 | + /** |
|
110 | + * @param FullyQualifiedName|string $fqcn |
|
111 | + * @param mixed $object |
|
112 | + * @return bool |
|
113 | + * @throws InvalidArgumentException |
|
114 | + */ |
|
115 | + public function share($fqcn, $object) |
|
116 | + { |
|
117 | + $fqcn = $this->class_cache->getFqn($fqcn); |
|
118 | + return $this->getSharedLoader()->share($fqcn, $object); |
|
119 | + } |
|
120 | + |
|
121 | + |
|
122 | + /** |
|
123 | + * calls reset() on loaders if that method exists |
|
124 | + */ |
|
125 | + public function reset() |
|
126 | + { |
|
127 | + $this->shared_loader->reset(); |
|
128 | + } |
|
129 | 129 | } |
@@ -78,13 +78,13 @@ |
||
78 | 78 | // EE_Dependency_Map: info about how to load classes required by other classes |
79 | 79 | espresso_load_required( |
80 | 80 | 'EE_Dependency_Map', |
81 | - EE_CORE . 'EE_Dependency_Map.core.php' |
|
81 | + EE_CORE.'EE_Dependency_Map.core.php' |
|
82 | 82 | ); |
83 | 83 | $this->dependency_map = EE_Dependency_Map::instance($this->class_cache); |
84 | 84 | // EE_Registry: central repository for classes (legacy) |
85 | 85 | espresso_load_required( |
86 | 86 | 'EE_Registry', |
87 | - EE_CORE . 'EE_Registry.core.php' |
|
87 | + EE_CORE.'EE_Registry.core.php' |
|
88 | 88 | ); |
89 | 89 | $this->registry = EE_Registry::instance( |
90 | 90 | $this->dependency_map, |
@@ -25,123 +25,123 @@ |
||
25 | 25 | class BootstrapDependencyInjectionContainer |
26 | 26 | { |
27 | 27 | |
28 | - /** |
|
29 | - * @var EE_Dependency_Map $dependency_map |
|
30 | - */ |
|
31 | - protected $dependency_map; |
|
32 | - |
|
33 | - /** |
|
34 | - * @type LoaderInterface $loader |
|
35 | - */ |
|
36 | - protected $loader; |
|
37 | - |
|
38 | - /** |
|
39 | - * @var EE_Registry $registry |
|
40 | - */ |
|
41 | - protected $registry; |
|
42 | - |
|
43 | - /** |
|
44 | - * @var ClassInterfaceCache $class_cache |
|
45 | - */ |
|
46 | - private $class_cache; |
|
47 | - |
|
48 | - /** |
|
49 | - * @var Mirror |
|
50 | - */ |
|
51 | - private $mirror; |
|
52 | - |
|
53 | - /** |
|
54 | - * @var ObjectIdentifier |
|
55 | - */ |
|
56 | - private $object_identifier; |
|
57 | - |
|
58 | - |
|
59 | - /** |
|
60 | - * Can't use this just yet until we exorcise some more of our singleton usage from core |
|
61 | - */ |
|
62 | - public function buildDependencyInjectionContainer() |
|
63 | - { |
|
64 | - // build DI container |
|
65 | - // $OpenCoffeeShop = new EventEspresso\core\services\container\OpenCoffeeShop(); |
|
66 | - // $OpenCoffeeShop->addRecipes(); |
|
67 | - // $CoffeeShop = $OpenCoffeeShop->CoffeeShop(); |
|
68 | - } |
|
69 | - |
|
70 | - |
|
71 | - /** |
|
72 | - * Setups EE_Registry and EE_Dependency_Map |
|
73 | - * |
|
74 | - * @throws EE_Error |
|
75 | - */ |
|
76 | - public function buildLegacyDependencyInjectionContainer() |
|
77 | - { |
|
78 | - $this->class_cache = new ClassInterfaceCache(); |
|
79 | - $this->object_identifier = new ObjectIdentifier($this->class_cache); |
|
80 | - $this->mirror = new Mirror(); |
|
81 | - // EE_Dependency_Map: info about how to load classes required by other classes |
|
82 | - espresso_load_required( |
|
83 | - 'EE_Dependency_Map', |
|
84 | - EE_CORE . 'EE_Dependency_Map.core.php' |
|
85 | - ); |
|
86 | - $this->dependency_map = EE_Dependency_Map::instance($this->class_cache); |
|
87 | - // EE_Registry: central repository for classes (legacy) |
|
88 | - espresso_load_required( |
|
89 | - 'EE_Registry', |
|
90 | - EE_CORE . 'EE_Registry.core.php' |
|
91 | - ); |
|
92 | - $this->registry = EE_Registry::instance( |
|
93 | - $this->dependency_map, |
|
94 | - $this->mirror, |
|
95 | - $this->class_cache, |
|
96 | - $this->object_identifier |
|
97 | - ); |
|
98 | - } |
|
99 | - |
|
100 | - |
|
101 | - /** |
|
102 | - * Performs initial setup for the generic Loader |
|
103 | - * |
|
104 | - * @throws InvalidDataTypeException |
|
105 | - * @throws InvalidInterfaceException |
|
106 | - * @throws InvalidArgumentException |
|
107 | - */ |
|
108 | - public function buildLoader() |
|
109 | - { |
|
110 | - $this->loader = LoaderFactory::getLoader( |
|
111 | - $this->registry, |
|
112 | - $this->class_cache, |
|
113 | - $this->object_identifier |
|
114 | - ); |
|
115 | - $this->loader->share('EventEspresso\core\services\loaders\ClassInterfaceCache', $this->class_cache); |
|
116 | - $this->loader->share('EventEspresso\core\services\loaders\ObjectIdentifier', $this->object_identifier); |
|
117 | - $this->loader->share('EventEspresso\core\services\container\Mirror', $this->mirror); |
|
118 | - $this->dependency_map->setLoader($this->loader); |
|
119 | - } |
|
120 | - |
|
121 | - |
|
122 | - /** |
|
123 | - * @return EE_Dependency_Map |
|
124 | - */ |
|
125 | - public function getDependencyMap() |
|
126 | - { |
|
127 | - return $this->dependency_map; |
|
128 | - } |
|
129 | - |
|
130 | - |
|
131 | - /** |
|
132 | - * @return EE_Registry |
|
133 | - */ |
|
134 | - public function getRegistry() |
|
135 | - { |
|
136 | - return $this->registry; |
|
137 | - } |
|
138 | - |
|
139 | - |
|
140 | - /** |
|
141 | - * @return LoaderInterface |
|
142 | - */ |
|
143 | - public function getLoader() |
|
144 | - { |
|
145 | - return $this->loader; |
|
146 | - } |
|
28 | + /** |
|
29 | + * @var EE_Dependency_Map $dependency_map |
|
30 | + */ |
|
31 | + protected $dependency_map; |
|
32 | + |
|
33 | + /** |
|
34 | + * @type LoaderInterface $loader |
|
35 | + */ |
|
36 | + protected $loader; |
|
37 | + |
|
38 | + /** |
|
39 | + * @var EE_Registry $registry |
|
40 | + */ |
|
41 | + protected $registry; |
|
42 | + |
|
43 | + /** |
|
44 | + * @var ClassInterfaceCache $class_cache |
|
45 | + */ |
|
46 | + private $class_cache; |
|
47 | + |
|
48 | + /** |
|
49 | + * @var Mirror |
|
50 | + */ |
|
51 | + private $mirror; |
|
52 | + |
|
53 | + /** |
|
54 | + * @var ObjectIdentifier |
|
55 | + */ |
|
56 | + private $object_identifier; |
|
57 | + |
|
58 | + |
|
59 | + /** |
|
60 | + * Can't use this just yet until we exorcise some more of our singleton usage from core |
|
61 | + */ |
|
62 | + public function buildDependencyInjectionContainer() |
|
63 | + { |
|
64 | + // build DI container |
|
65 | + // $OpenCoffeeShop = new EventEspresso\core\services\container\OpenCoffeeShop(); |
|
66 | + // $OpenCoffeeShop->addRecipes(); |
|
67 | + // $CoffeeShop = $OpenCoffeeShop->CoffeeShop(); |
|
68 | + } |
|
69 | + |
|
70 | + |
|
71 | + /** |
|
72 | + * Setups EE_Registry and EE_Dependency_Map |
|
73 | + * |
|
74 | + * @throws EE_Error |
|
75 | + */ |
|
76 | + public function buildLegacyDependencyInjectionContainer() |
|
77 | + { |
|
78 | + $this->class_cache = new ClassInterfaceCache(); |
|
79 | + $this->object_identifier = new ObjectIdentifier($this->class_cache); |
|
80 | + $this->mirror = new Mirror(); |
|
81 | + // EE_Dependency_Map: info about how to load classes required by other classes |
|
82 | + espresso_load_required( |
|
83 | + 'EE_Dependency_Map', |
|
84 | + EE_CORE . 'EE_Dependency_Map.core.php' |
|
85 | + ); |
|
86 | + $this->dependency_map = EE_Dependency_Map::instance($this->class_cache); |
|
87 | + // EE_Registry: central repository for classes (legacy) |
|
88 | + espresso_load_required( |
|
89 | + 'EE_Registry', |
|
90 | + EE_CORE . 'EE_Registry.core.php' |
|
91 | + ); |
|
92 | + $this->registry = EE_Registry::instance( |
|
93 | + $this->dependency_map, |
|
94 | + $this->mirror, |
|
95 | + $this->class_cache, |
|
96 | + $this->object_identifier |
|
97 | + ); |
|
98 | + } |
|
99 | + |
|
100 | + |
|
101 | + /** |
|
102 | + * Performs initial setup for the generic Loader |
|
103 | + * |
|
104 | + * @throws InvalidDataTypeException |
|
105 | + * @throws InvalidInterfaceException |
|
106 | + * @throws InvalidArgumentException |
|
107 | + */ |
|
108 | + public function buildLoader() |
|
109 | + { |
|
110 | + $this->loader = LoaderFactory::getLoader( |
|
111 | + $this->registry, |
|
112 | + $this->class_cache, |
|
113 | + $this->object_identifier |
|
114 | + ); |
|
115 | + $this->loader->share('EventEspresso\core\services\loaders\ClassInterfaceCache', $this->class_cache); |
|
116 | + $this->loader->share('EventEspresso\core\services\loaders\ObjectIdentifier', $this->object_identifier); |
|
117 | + $this->loader->share('EventEspresso\core\services\container\Mirror', $this->mirror); |
|
118 | + $this->dependency_map->setLoader($this->loader); |
|
119 | + } |
|
120 | + |
|
121 | + |
|
122 | + /** |
|
123 | + * @return EE_Dependency_Map |
|
124 | + */ |
|
125 | + public function getDependencyMap() |
|
126 | + { |
|
127 | + return $this->dependency_map; |
|
128 | + } |
|
129 | + |
|
130 | + |
|
131 | + /** |
|
132 | + * @return EE_Registry |
|
133 | + */ |
|
134 | + public function getRegistry() |
|
135 | + { |
|
136 | + return $this->registry; |
|
137 | + } |
|
138 | + |
|
139 | + |
|
140 | + /** |
|
141 | + * @return LoaderInterface |
|
142 | + */ |
|
143 | + public function getLoader() |
|
144 | + { |
|
145 | + return $this->loader; |
|
146 | + } |
|
147 | 147 | } |
@@ -25,226 +25,226 @@ |
||
25 | 25 | class Mirror |
26 | 26 | { |
27 | 27 | |
28 | - /** |
|
29 | - * @var ReflectionClass[] $classes |
|
30 | - */ |
|
31 | - private $classes = array(); |
|
32 | - |
|
33 | - /** |
|
34 | - * @var ReflectionMethod[] $constructors |
|
35 | - */ |
|
36 | - private $constructors = array(); |
|
37 | - |
|
38 | - /** |
|
39 | - * @var ReflectionParameter[][] $parameters |
|
40 | - */ |
|
41 | - private $parameters = array(); |
|
42 | - |
|
43 | - /** |
|
44 | - * @var ReflectionParameter[][] $parameters |
|
45 | - */ |
|
46 | - private $parameter_classes = array(); |
|
47 | - |
|
48 | - /** |
|
49 | - * @var ReflectionProperty[][] $properties |
|
50 | - */ |
|
51 | - private $properties = array(); |
|
52 | - |
|
53 | - /** |
|
54 | - * @var ReflectionMethod[][] $methods |
|
55 | - */ |
|
56 | - private $methods = array(); |
|
57 | - |
|
58 | - |
|
59 | - /** |
|
60 | - * @param string $class_name |
|
61 | - * @return ReflectionClass |
|
62 | - * @throws ReflectionException |
|
63 | - * @throws InvalidDataTypeException |
|
64 | - */ |
|
65 | - public function getReflectionClass($class_name) |
|
66 | - { |
|
67 | - if (! is_string($class_name)) { |
|
68 | - throw new InvalidDataTypeException($class_name, '$class_name', 'string (fully qualified class name)'); |
|
69 | - } |
|
70 | - if (! isset($this->classes[ $class_name ])) { |
|
71 | - $this->classes[ $class_name ] = new ReflectionClass($class_name); |
|
72 | - } |
|
73 | - return $this->classes[ $class_name ]; |
|
74 | - } |
|
75 | - |
|
76 | - |
|
77 | - /** |
|
78 | - * @param string $class_name |
|
79 | - * @return ReflectionMethod |
|
80 | - * @throws InvalidDataTypeException |
|
81 | - * @throws ReflectionException |
|
82 | - */ |
|
83 | - public function getConstructor($class_name) |
|
84 | - { |
|
85 | - if (! is_string($class_name)) { |
|
86 | - throw new InvalidDataTypeException($class_name, '$class_name', 'string (fully qualified class name)'); |
|
87 | - } |
|
88 | - if (! isset($this->constructors[ $class_name ])) { |
|
89 | - $reflection_class = $this->getReflectionClass($class_name); |
|
90 | - $this->constructors[ $class_name ] = $reflection_class->getConstructor(); |
|
91 | - } |
|
92 | - return $this->constructors[ $class_name ]; |
|
93 | - } |
|
94 | - |
|
95 | - |
|
96 | - /** |
|
97 | - * @param ReflectionClass $reflection_class |
|
98 | - * @return ReflectionMethod |
|
99 | - * @throws InvalidDataTypeException |
|
100 | - * @throws ReflectionException |
|
101 | - */ |
|
102 | - public function getConstructorFromReflection(ReflectionClass $reflection_class) |
|
103 | - { |
|
104 | - return $this->getConstructor($reflection_class->getName()); |
|
105 | - } |
|
106 | - |
|
107 | - |
|
108 | - /** |
|
109 | - * @param string $class_name |
|
110 | - * @return ReflectionParameter[] |
|
111 | - * @throws InvalidDataTypeException |
|
112 | - * @throws ReflectionException |
|
113 | - */ |
|
114 | - public function getParameters($class_name) |
|
115 | - { |
|
116 | - if (! isset($this->parameters[ $class_name ])) { |
|
117 | - $constructor = $this->getConstructor($class_name); |
|
118 | - $this->parameters[ $class_name ] = $constructor->getParameters(); |
|
119 | - } |
|
120 | - return $this->parameters[ $class_name ]; |
|
121 | - } |
|
122 | - |
|
123 | - |
|
124 | - /** |
|
125 | - * @param ReflectionClass $reflection_class |
|
126 | - * @return ReflectionParameter[] |
|
127 | - * @throws InvalidDataTypeException |
|
128 | - * @throws ReflectionException |
|
129 | - */ |
|
130 | - public function getParametersFromReflection(ReflectionClass $reflection_class) |
|
131 | - { |
|
132 | - return $this->getParameters($reflection_class->getName()); |
|
133 | - } |
|
134 | - |
|
135 | - |
|
136 | - /** |
|
137 | - * @param ReflectionMethod $constructor |
|
138 | - * @return ReflectionParameter[] |
|
139 | - * @throws InvalidDataTypeException |
|
140 | - * @throws ReflectionException |
|
141 | - */ |
|
142 | - public function getParametersFromReflectionConstructor(ReflectionMethod $constructor) |
|
143 | - { |
|
144 | - return $this->getParameters($constructor->getDeclaringClass()); |
|
145 | - } |
|
146 | - |
|
147 | - |
|
148 | - /** |
|
149 | - * @param ReflectionParameter $param |
|
150 | - * @param string $class_name |
|
151 | - * @param string $index |
|
152 | - * @return string|null |
|
153 | - */ |
|
154 | - public function getParameterClassName(ReflectionParameter $param, $class_name, $index) |
|
155 | - { |
|
156 | - if (isset($this->parameter_classes[ $class_name ][ $index ]['param_class_name'])) { |
|
157 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_name']; |
|
158 | - } |
|
159 | - if (! isset($this->parameter_classes[ $class_name ])) { |
|
160 | - $this->parameter_classes[ $class_name ] = array(); |
|
161 | - } |
|
162 | - if (! isset($this->parameter_classes[ $class_name ][ $index ])) { |
|
163 | - $this->parameter_classes[ $class_name ][ $index ] = array(); |
|
164 | - } |
|
165 | - $this->parameter_classes[ $class_name ][ $index ]['param_class_name'] = $param->getClass() |
|
166 | - ? $param->getClass()->name |
|
167 | - : null; |
|
168 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_name']; |
|
169 | - } |
|
170 | - |
|
171 | - |
|
172 | - /** |
|
173 | - * @param ReflectionParameter $param |
|
174 | - * @param string $class_name |
|
175 | - * @param string $index |
|
176 | - * @return string|null |
|
177 | - */ |
|
178 | - public function getParameterDefaultValue(ReflectionParameter $param, $class_name, $index) |
|
179 | - { |
|
180 | - if (isset($this->parameter_classes[ $class_name ][ $index ]['param_class_default'])) { |
|
181 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_default']; |
|
182 | - } |
|
183 | - if (! isset($this->parameter_classes[ $class_name ])) { |
|
184 | - $this->parameter_classes[ $class_name ] = array(); |
|
185 | - } |
|
186 | - if (! isset($this->parameter_classes[ $class_name ][ $index ])) { |
|
187 | - $this->parameter_classes[ $class_name ][ $index ] = array(); |
|
188 | - } |
|
189 | - $this->parameter_classes[ $class_name ][ $index ]['param_class_default'] = $param->isDefaultValueAvailable() |
|
190 | - ? $param->getDefaultValue() |
|
191 | - : null; |
|
192 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_default']; |
|
193 | - } |
|
194 | - |
|
195 | - |
|
196 | - /** |
|
197 | - * @param string $class_name |
|
198 | - * @return ReflectionProperty[] |
|
199 | - * @throws InvalidDataTypeException |
|
200 | - * @throws ReflectionException |
|
201 | - */ |
|
202 | - public function getProperties($class_name) |
|
203 | - { |
|
204 | - if (! isset($this->properties[ $class_name ])) { |
|
205 | - $reflection_class = $this->getReflectionClass($class_name); |
|
206 | - $this->properties[ $class_name ] = $reflection_class->getProperties(); |
|
207 | - } |
|
208 | - return $this->properties[ $class_name ]; |
|
209 | - } |
|
210 | - |
|
211 | - |
|
212 | - /** |
|
213 | - * @param ReflectionClass $reflection_class |
|
214 | - * @return ReflectionProperty[] |
|
215 | - * @throws InvalidDataTypeException |
|
216 | - * @throws ReflectionException |
|
217 | - */ |
|
218 | - public function getPropertiesFromReflection(ReflectionClass $reflection_class) |
|
219 | - { |
|
220 | - return $this->getProperties($reflection_class->getName()); |
|
221 | - } |
|
222 | - |
|
223 | - |
|
224 | - /** |
|
225 | - * @param string $class_name |
|
226 | - * @return ReflectionMethod[] |
|
227 | - * @throws InvalidDataTypeException |
|
228 | - * @throws ReflectionException |
|
229 | - */ |
|
230 | - public function getMethods($class_name) |
|
231 | - { |
|
232 | - if (! isset($this->methods[ $class_name ])) { |
|
233 | - $reflection_class = $this->getReflectionClass($class_name); |
|
234 | - $this->methods[ $class_name ] = $reflection_class->getMethods(); |
|
235 | - } |
|
236 | - return $this->methods[ $class_name ]; |
|
237 | - } |
|
238 | - |
|
239 | - |
|
240 | - /** |
|
241 | - * @param ReflectionClass $reflection_class ) |
|
242 | - * @return ReflectionMethod[] |
|
243 | - * @throws InvalidDataTypeException |
|
244 | - * @throws ReflectionException |
|
245 | - */ |
|
246 | - public function getMethodsFromReflection(ReflectionClass $reflection_class) |
|
247 | - { |
|
248 | - return $this->getMethods($reflection_class->getName()); |
|
249 | - } |
|
28 | + /** |
|
29 | + * @var ReflectionClass[] $classes |
|
30 | + */ |
|
31 | + private $classes = array(); |
|
32 | + |
|
33 | + /** |
|
34 | + * @var ReflectionMethod[] $constructors |
|
35 | + */ |
|
36 | + private $constructors = array(); |
|
37 | + |
|
38 | + /** |
|
39 | + * @var ReflectionParameter[][] $parameters |
|
40 | + */ |
|
41 | + private $parameters = array(); |
|
42 | + |
|
43 | + /** |
|
44 | + * @var ReflectionParameter[][] $parameters |
|
45 | + */ |
|
46 | + private $parameter_classes = array(); |
|
47 | + |
|
48 | + /** |
|
49 | + * @var ReflectionProperty[][] $properties |
|
50 | + */ |
|
51 | + private $properties = array(); |
|
52 | + |
|
53 | + /** |
|
54 | + * @var ReflectionMethod[][] $methods |
|
55 | + */ |
|
56 | + private $methods = array(); |
|
57 | + |
|
58 | + |
|
59 | + /** |
|
60 | + * @param string $class_name |
|
61 | + * @return ReflectionClass |
|
62 | + * @throws ReflectionException |
|
63 | + * @throws InvalidDataTypeException |
|
64 | + */ |
|
65 | + public function getReflectionClass($class_name) |
|
66 | + { |
|
67 | + if (! is_string($class_name)) { |
|
68 | + throw new InvalidDataTypeException($class_name, '$class_name', 'string (fully qualified class name)'); |
|
69 | + } |
|
70 | + if (! isset($this->classes[ $class_name ])) { |
|
71 | + $this->classes[ $class_name ] = new ReflectionClass($class_name); |
|
72 | + } |
|
73 | + return $this->classes[ $class_name ]; |
|
74 | + } |
|
75 | + |
|
76 | + |
|
77 | + /** |
|
78 | + * @param string $class_name |
|
79 | + * @return ReflectionMethod |
|
80 | + * @throws InvalidDataTypeException |
|
81 | + * @throws ReflectionException |
|
82 | + */ |
|
83 | + public function getConstructor($class_name) |
|
84 | + { |
|
85 | + if (! is_string($class_name)) { |
|
86 | + throw new InvalidDataTypeException($class_name, '$class_name', 'string (fully qualified class name)'); |
|
87 | + } |
|
88 | + if (! isset($this->constructors[ $class_name ])) { |
|
89 | + $reflection_class = $this->getReflectionClass($class_name); |
|
90 | + $this->constructors[ $class_name ] = $reflection_class->getConstructor(); |
|
91 | + } |
|
92 | + return $this->constructors[ $class_name ]; |
|
93 | + } |
|
94 | + |
|
95 | + |
|
96 | + /** |
|
97 | + * @param ReflectionClass $reflection_class |
|
98 | + * @return ReflectionMethod |
|
99 | + * @throws InvalidDataTypeException |
|
100 | + * @throws ReflectionException |
|
101 | + */ |
|
102 | + public function getConstructorFromReflection(ReflectionClass $reflection_class) |
|
103 | + { |
|
104 | + return $this->getConstructor($reflection_class->getName()); |
|
105 | + } |
|
106 | + |
|
107 | + |
|
108 | + /** |
|
109 | + * @param string $class_name |
|
110 | + * @return ReflectionParameter[] |
|
111 | + * @throws InvalidDataTypeException |
|
112 | + * @throws ReflectionException |
|
113 | + */ |
|
114 | + public function getParameters($class_name) |
|
115 | + { |
|
116 | + if (! isset($this->parameters[ $class_name ])) { |
|
117 | + $constructor = $this->getConstructor($class_name); |
|
118 | + $this->parameters[ $class_name ] = $constructor->getParameters(); |
|
119 | + } |
|
120 | + return $this->parameters[ $class_name ]; |
|
121 | + } |
|
122 | + |
|
123 | + |
|
124 | + /** |
|
125 | + * @param ReflectionClass $reflection_class |
|
126 | + * @return ReflectionParameter[] |
|
127 | + * @throws InvalidDataTypeException |
|
128 | + * @throws ReflectionException |
|
129 | + */ |
|
130 | + public function getParametersFromReflection(ReflectionClass $reflection_class) |
|
131 | + { |
|
132 | + return $this->getParameters($reflection_class->getName()); |
|
133 | + } |
|
134 | + |
|
135 | + |
|
136 | + /** |
|
137 | + * @param ReflectionMethod $constructor |
|
138 | + * @return ReflectionParameter[] |
|
139 | + * @throws InvalidDataTypeException |
|
140 | + * @throws ReflectionException |
|
141 | + */ |
|
142 | + public function getParametersFromReflectionConstructor(ReflectionMethod $constructor) |
|
143 | + { |
|
144 | + return $this->getParameters($constructor->getDeclaringClass()); |
|
145 | + } |
|
146 | + |
|
147 | + |
|
148 | + /** |
|
149 | + * @param ReflectionParameter $param |
|
150 | + * @param string $class_name |
|
151 | + * @param string $index |
|
152 | + * @return string|null |
|
153 | + */ |
|
154 | + public function getParameterClassName(ReflectionParameter $param, $class_name, $index) |
|
155 | + { |
|
156 | + if (isset($this->parameter_classes[ $class_name ][ $index ]['param_class_name'])) { |
|
157 | + return $this->parameter_classes[ $class_name ][ $index ]['param_class_name']; |
|
158 | + } |
|
159 | + if (! isset($this->parameter_classes[ $class_name ])) { |
|
160 | + $this->parameter_classes[ $class_name ] = array(); |
|
161 | + } |
|
162 | + if (! isset($this->parameter_classes[ $class_name ][ $index ])) { |
|
163 | + $this->parameter_classes[ $class_name ][ $index ] = array(); |
|
164 | + } |
|
165 | + $this->parameter_classes[ $class_name ][ $index ]['param_class_name'] = $param->getClass() |
|
166 | + ? $param->getClass()->name |
|
167 | + : null; |
|
168 | + return $this->parameter_classes[ $class_name ][ $index ]['param_class_name']; |
|
169 | + } |
|
170 | + |
|
171 | + |
|
172 | + /** |
|
173 | + * @param ReflectionParameter $param |
|
174 | + * @param string $class_name |
|
175 | + * @param string $index |
|
176 | + * @return string|null |
|
177 | + */ |
|
178 | + public function getParameterDefaultValue(ReflectionParameter $param, $class_name, $index) |
|
179 | + { |
|
180 | + if (isset($this->parameter_classes[ $class_name ][ $index ]['param_class_default'])) { |
|
181 | + return $this->parameter_classes[ $class_name ][ $index ]['param_class_default']; |
|
182 | + } |
|
183 | + if (! isset($this->parameter_classes[ $class_name ])) { |
|
184 | + $this->parameter_classes[ $class_name ] = array(); |
|
185 | + } |
|
186 | + if (! isset($this->parameter_classes[ $class_name ][ $index ])) { |
|
187 | + $this->parameter_classes[ $class_name ][ $index ] = array(); |
|
188 | + } |
|
189 | + $this->parameter_classes[ $class_name ][ $index ]['param_class_default'] = $param->isDefaultValueAvailable() |
|
190 | + ? $param->getDefaultValue() |
|
191 | + : null; |
|
192 | + return $this->parameter_classes[ $class_name ][ $index ]['param_class_default']; |
|
193 | + } |
|
194 | + |
|
195 | + |
|
196 | + /** |
|
197 | + * @param string $class_name |
|
198 | + * @return ReflectionProperty[] |
|
199 | + * @throws InvalidDataTypeException |
|
200 | + * @throws ReflectionException |
|
201 | + */ |
|
202 | + public function getProperties($class_name) |
|
203 | + { |
|
204 | + if (! isset($this->properties[ $class_name ])) { |
|
205 | + $reflection_class = $this->getReflectionClass($class_name); |
|
206 | + $this->properties[ $class_name ] = $reflection_class->getProperties(); |
|
207 | + } |
|
208 | + return $this->properties[ $class_name ]; |
|
209 | + } |
|
210 | + |
|
211 | + |
|
212 | + /** |
|
213 | + * @param ReflectionClass $reflection_class |
|
214 | + * @return ReflectionProperty[] |
|
215 | + * @throws InvalidDataTypeException |
|
216 | + * @throws ReflectionException |
|
217 | + */ |
|
218 | + public function getPropertiesFromReflection(ReflectionClass $reflection_class) |
|
219 | + { |
|
220 | + return $this->getProperties($reflection_class->getName()); |
|
221 | + } |
|
222 | + |
|
223 | + |
|
224 | + /** |
|
225 | + * @param string $class_name |
|
226 | + * @return ReflectionMethod[] |
|
227 | + * @throws InvalidDataTypeException |
|
228 | + * @throws ReflectionException |
|
229 | + */ |
|
230 | + public function getMethods($class_name) |
|
231 | + { |
|
232 | + if (! isset($this->methods[ $class_name ])) { |
|
233 | + $reflection_class = $this->getReflectionClass($class_name); |
|
234 | + $this->methods[ $class_name ] = $reflection_class->getMethods(); |
|
235 | + } |
|
236 | + return $this->methods[ $class_name ]; |
|
237 | + } |
|
238 | + |
|
239 | + |
|
240 | + /** |
|
241 | + * @param ReflectionClass $reflection_class ) |
|
242 | + * @return ReflectionMethod[] |
|
243 | + * @throws InvalidDataTypeException |
|
244 | + * @throws ReflectionException |
|
245 | + */ |
|
246 | + public function getMethodsFromReflection(ReflectionClass $reflection_class) |
|
247 | + { |
|
248 | + return $this->getMethods($reflection_class->getName()); |
|
249 | + } |
|
250 | 250 | } |
@@ -64,13 +64,13 @@ discard block |
||
64 | 64 | */ |
65 | 65 | public function getReflectionClass($class_name) |
66 | 66 | { |
67 | - if (! is_string($class_name)) { |
|
67 | + if ( ! is_string($class_name)) { |
|
68 | 68 | throw new InvalidDataTypeException($class_name, '$class_name', 'string (fully qualified class name)'); |
69 | 69 | } |
70 | - if (! isset($this->classes[ $class_name ])) { |
|
71 | - $this->classes[ $class_name ] = new ReflectionClass($class_name); |
|
70 | + if ( ! isset($this->classes[$class_name])) { |
|
71 | + $this->classes[$class_name] = new ReflectionClass($class_name); |
|
72 | 72 | } |
73 | - return $this->classes[ $class_name ]; |
|
73 | + return $this->classes[$class_name]; |
|
74 | 74 | } |
75 | 75 | |
76 | 76 | |
@@ -82,14 +82,14 @@ discard block |
||
82 | 82 | */ |
83 | 83 | public function getConstructor($class_name) |
84 | 84 | { |
85 | - if (! is_string($class_name)) { |
|
85 | + if ( ! is_string($class_name)) { |
|
86 | 86 | throw new InvalidDataTypeException($class_name, '$class_name', 'string (fully qualified class name)'); |
87 | 87 | } |
88 | - if (! isset($this->constructors[ $class_name ])) { |
|
88 | + if ( ! isset($this->constructors[$class_name])) { |
|
89 | 89 | $reflection_class = $this->getReflectionClass($class_name); |
90 | - $this->constructors[ $class_name ] = $reflection_class->getConstructor(); |
|
90 | + $this->constructors[$class_name] = $reflection_class->getConstructor(); |
|
91 | 91 | } |
92 | - return $this->constructors[ $class_name ]; |
|
92 | + return $this->constructors[$class_name]; |
|
93 | 93 | } |
94 | 94 | |
95 | 95 | |
@@ -113,11 +113,11 @@ discard block |
||
113 | 113 | */ |
114 | 114 | public function getParameters($class_name) |
115 | 115 | { |
116 | - if (! isset($this->parameters[ $class_name ])) { |
|
116 | + if ( ! isset($this->parameters[$class_name])) { |
|
117 | 117 | $constructor = $this->getConstructor($class_name); |
118 | - $this->parameters[ $class_name ] = $constructor->getParameters(); |
|
118 | + $this->parameters[$class_name] = $constructor->getParameters(); |
|
119 | 119 | } |
120 | - return $this->parameters[ $class_name ]; |
|
120 | + return $this->parameters[$class_name]; |
|
121 | 121 | } |
122 | 122 | |
123 | 123 | |
@@ -153,19 +153,19 @@ discard block |
||
153 | 153 | */ |
154 | 154 | public function getParameterClassName(ReflectionParameter $param, $class_name, $index) |
155 | 155 | { |
156 | - if (isset($this->parameter_classes[ $class_name ][ $index ]['param_class_name'])) { |
|
157 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_name']; |
|
156 | + if (isset($this->parameter_classes[$class_name][$index]['param_class_name'])) { |
|
157 | + return $this->parameter_classes[$class_name][$index]['param_class_name']; |
|
158 | 158 | } |
159 | - if (! isset($this->parameter_classes[ $class_name ])) { |
|
160 | - $this->parameter_classes[ $class_name ] = array(); |
|
159 | + if ( ! isset($this->parameter_classes[$class_name])) { |
|
160 | + $this->parameter_classes[$class_name] = array(); |
|
161 | 161 | } |
162 | - if (! isset($this->parameter_classes[ $class_name ][ $index ])) { |
|
163 | - $this->parameter_classes[ $class_name ][ $index ] = array(); |
|
162 | + if ( ! isset($this->parameter_classes[$class_name][$index])) { |
|
163 | + $this->parameter_classes[$class_name][$index] = array(); |
|
164 | 164 | } |
165 | - $this->parameter_classes[ $class_name ][ $index ]['param_class_name'] = $param->getClass() |
|
165 | + $this->parameter_classes[$class_name][$index]['param_class_name'] = $param->getClass() |
|
166 | 166 | ? $param->getClass()->name |
167 | 167 | : null; |
168 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_name']; |
|
168 | + return $this->parameter_classes[$class_name][$index]['param_class_name']; |
|
169 | 169 | } |
170 | 170 | |
171 | 171 | |
@@ -177,19 +177,19 @@ discard block |
||
177 | 177 | */ |
178 | 178 | public function getParameterDefaultValue(ReflectionParameter $param, $class_name, $index) |
179 | 179 | { |
180 | - if (isset($this->parameter_classes[ $class_name ][ $index ]['param_class_default'])) { |
|
181 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_default']; |
|
180 | + if (isset($this->parameter_classes[$class_name][$index]['param_class_default'])) { |
|
181 | + return $this->parameter_classes[$class_name][$index]['param_class_default']; |
|
182 | 182 | } |
183 | - if (! isset($this->parameter_classes[ $class_name ])) { |
|
184 | - $this->parameter_classes[ $class_name ] = array(); |
|
183 | + if ( ! isset($this->parameter_classes[$class_name])) { |
|
184 | + $this->parameter_classes[$class_name] = array(); |
|
185 | 185 | } |
186 | - if (! isset($this->parameter_classes[ $class_name ][ $index ])) { |
|
187 | - $this->parameter_classes[ $class_name ][ $index ] = array(); |
|
186 | + if ( ! isset($this->parameter_classes[$class_name][$index])) { |
|
187 | + $this->parameter_classes[$class_name][$index] = array(); |
|
188 | 188 | } |
189 | - $this->parameter_classes[ $class_name ][ $index ]['param_class_default'] = $param->isDefaultValueAvailable() |
|
189 | + $this->parameter_classes[$class_name][$index]['param_class_default'] = $param->isDefaultValueAvailable() |
|
190 | 190 | ? $param->getDefaultValue() |
191 | 191 | : null; |
192 | - return $this->parameter_classes[ $class_name ][ $index ]['param_class_default']; |
|
192 | + return $this->parameter_classes[$class_name][$index]['param_class_default']; |
|
193 | 193 | } |
194 | 194 | |
195 | 195 | |
@@ -201,11 +201,11 @@ discard block |
||
201 | 201 | */ |
202 | 202 | public function getProperties($class_name) |
203 | 203 | { |
204 | - if (! isset($this->properties[ $class_name ])) { |
|
204 | + if ( ! isset($this->properties[$class_name])) { |
|
205 | 205 | $reflection_class = $this->getReflectionClass($class_name); |
206 | - $this->properties[ $class_name ] = $reflection_class->getProperties(); |
|
206 | + $this->properties[$class_name] = $reflection_class->getProperties(); |
|
207 | 207 | } |
208 | - return $this->properties[ $class_name ]; |
|
208 | + return $this->properties[$class_name]; |
|
209 | 209 | } |
210 | 210 | |
211 | 211 | |
@@ -229,11 +229,11 @@ discard block |
||
229 | 229 | */ |
230 | 230 | public function getMethods($class_name) |
231 | 231 | { |
232 | - if (! isset($this->methods[ $class_name ])) { |
|
232 | + if ( ! isset($this->methods[$class_name])) { |
|
233 | 233 | $reflection_class = $this->getReflectionClass($class_name); |
234 | - $this->methods[ $class_name ] = $reflection_class->getMethods(); |
|
234 | + $this->methods[$class_name] = $reflection_class->getMethods(); |
|
235 | 235 | } |
236 | - return $this->methods[ $class_name ]; |
|
236 | + return $this->methods[$class_name]; |
|
237 | 237 | } |
238 | 238 | |
239 | 239 |
@@ -416,7 +416,7 @@ |
||
416 | 416 | * If $expired is set to true, then only line items for expired sessions will be returned. |
417 | 417 | * If $expired is set to false, then only line items for active sessions will be returned. |
418 | 418 | * |
419 | - * @param null $expired |
|
419 | + * @param boolean $expired |
|
420 | 420 | * @return EE_Base_Class[]|EE_Line_Item[] |
421 | 421 | * @throws EE_Error |
422 | 422 | * @throws InvalidArgumentException |
@@ -32,443 +32,443 @@ |
||
32 | 32 | class EEM_Line_Item extends EEM_Base |
33 | 33 | { |
34 | 34 | |
35 | - /** |
|
36 | - * Tax sub-total is just the total of all the taxes, which should be children |
|
37 | - * of this line item. There should only ever be one tax sub-total, and it should |
|
38 | - * be a direct child of. Its quantity and LIN_unit_price = 1. |
|
39 | - */ |
|
40 | - const type_tax_sub_total = 'tax-sub-total'; |
|
41 | - |
|
42 | - /** |
|
43 | - * Tax line items indicate a tax applied to all the taxable line items. |
|
44 | - * Should not have any children line items. Its LIN_unit_price = 0. Its LIN_percent is a percent, not a decimal |
|
45 | - * (eg 10% tax = 10, not 0.1). Its LIN_total = LIN_unit_price * pre-tax-total. Quantity = 1. |
|
46 | - */ |
|
47 | - const type_tax = 'tax'; |
|
48 | - |
|
49 | - /** |
|
50 | - * Indicating individual items purchased, or discounts or surcharges. |
|
51 | - * The sum of all the regular line items plus the tax items should equal |
|
52 | - * the grand total. |
|
53 | - * Possible children are sub-line-items and cancellations. |
|
54 | - * For flat items, LIN_unit_price * LIN_quantity = LIN_total. Its LIN_total is the sum of all the children |
|
55 | - * LIN_totals. Its LIN_percent = 0. |
|
56 | - * For percent items, its LIN_unit_price = 0. Its LIN_percent is a percent, not a decimal (eg 10% = 10, not 0.1). |
|
57 | - * Its LIN_total is LIN_percent / 100 * sum of lower-priority sibling line items. Quantity = 1. |
|
58 | - */ |
|
59 | - const type_line_item = 'line-item'; |
|
60 | - |
|
61 | - /** |
|
62 | - * Line item indicating all the factors that make a single line item. |
|
63 | - * Sub-line items should have NO children line items. |
|
64 | - * For flat sub-items, their quantity should match their parent item, their LIN_unit_price should be this sub-item's |
|
65 | - * contribution towards the price of ONE of their parent items, and its LIN_total should be |
|
66 | - * = LIN_quantity * LIN_unit_price. Its LIN_percent = 0. |
|
67 | - * For percent sub-items, the quantity should be 1, LIN_unit_price should be 0, and its LIN_total should |
|
68 | - * = LIN_percent / 100 * sum of lower-priority sibling line items.. |
|
69 | - */ |
|
70 | - const type_sub_line_item = 'sub-item'; |
|
71 | - |
|
72 | - /** |
|
73 | - * Line item indicating a sub-total (eg total for an event, or pre-tax subtotal). |
|
74 | - * Direct children should be event subtotals. |
|
75 | - * Should have quantity of 1, and a LIN_total and LIN_unit_price of the sum of all its sub-items' LIN_totals. |
|
76 | - * |
|
77 | - */ |
|
78 | - const type_sub_total = 'sub-total'; |
|
79 | - |
|
80 | - /** |
|
81 | - * Line item for the grand total of an order. Its direct children |
|
82 | - * should be tax subtotals and (pre-tax) subtotals, and possibly a regular line item |
|
83 | - * indicating a transaction-wide discount/surcharge. Should have a quantity of 1, a LIN_total and LIN_unit_price of |
|
84 | - * the entire order's mount. |
|
85 | - */ |
|
86 | - const type_total = 'total'; |
|
87 | - |
|
88 | - /** |
|
89 | - * When a line item is cancelled, a sub-line-item of type 'cancellation' |
|
90 | - * should be created, indicating the quantity that were cancelled |
|
91 | - * (because a line item could have a quantity of 1, and its cancellation item |
|
92 | - * could be for 3, indicating that originally 4 were purchased, but 3 have been |
|
93 | - * cancelled, and only one remains). |
|
94 | - * When items are refunded, a cancellation line item should be made, which points |
|
95 | - * to teh payment model object which actually refunded the payment. |
|
96 | - * Cancellations should NOT have any children line items; the should NOT affect |
|
97 | - * any calculations, and are only meant as a record that cancellations have occurred. |
|
98 | - * Their LIN_percent should be 0. |
|
99 | - */ |
|
100 | - const type_cancellation = 'cancellation'; |
|
101 | - |
|
102 | - // private instance of the EEM_Line_Item object |
|
103 | - protected static $_instance = null; |
|
104 | - |
|
105 | - |
|
106 | - /** |
|
107 | - * private constructor to prevent direct creation |
|
108 | - * @Constructor |
|
109 | - * @access protected |
|
110 | - * @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) |
|
111 | - * @return \EEM_Line_Item |
|
112 | - */ |
|
113 | - protected function __construct($timezone) |
|
114 | - { |
|
115 | - $this->singular_item = __('Line Item', 'event_espresso'); |
|
116 | - $this->plural_item = __('Line Items', 'event_espresso'); |
|
117 | - |
|
118 | - $this->_tables = array( |
|
119 | - 'Line_Item' => new EE_Primary_Table('esp_line_item', 'LIN_ID') |
|
120 | - ); |
|
121 | - $line_items_can_be_for = apply_filters('FHEE__EEM_Line_Item__line_items_can_be_for', array('Ticket', 'Price', 'Event')); |
|
122 | - $this->_fields = array( |
|
123 | - 'Line_Item' => array( |
|
124 | - 'LIN_ID' => new EE_Primary_Key_Int_Field('LIN_ID', __("ID", "event_espresso")), |
|
125 | - 'LIN_code' => new EE_Slug_Field('LIN_code', __("Code for index into Cart", "event_espresso"), true), |
|
126 | - 'TXN_ID' => new EE_Foreign_Key_Int_Field('TXN_ID', __("Transaction ID", "event_espresso"), true, null, 'Transaction'), |
|
127 | - 'LIN_name' => new EE_Full_HTML_Field('LIN_name', __("Line Item Name", "event_espresso"), false, ''), |
|
128 | - 'LIN_desc' => new EE_Full_HTML_Field('LIN_desc', __("Line Item Description", "event_espresso"), true), |
|
129 | - 'LIN_unit_price' => new EE_Money_Field('LIN_unit_price', __("Unit Price", "event_espresso"), false, 0), |
|
130 | - 'LIN_percent' => new EE_Float_Field('LIN_percent', __("Percent", "event_espresso"), false, 0), |
|
131 | - 'LIN_is_taxable' => new EE_Boolean_Field('LIN_is_taxable', __("Taxable", "event_espresso"), false, false), |
|
132 | - 'LIN_order' => new EE_Integer_Field('LIN_order', __("Order of Application towards total of parent", "event_espresso"), false, 1), |
|
133 | - 'LIN_total' => new EE_Money_Field('LIN_total', __("Total (unit price x quantity)", "event_espresso"), false, 0), |
|
134 | - 'LIN_quantity' => new EE_Integer_Field('LIN_quantity', __("Quantity", "event_espresso"), true, 1), |
|
135 | - 'LIN_parent' => new EE_Integer_Field('LIN_parent', __("Parent ID (this item goes towards that Line Item's total)", "event_espresso"), true, null), |
|
136 | - 'LIN_type' => new EE_Enum_Text_Field('LIN_type', __("Type", "event_espresso"), false, 'line-item', array( |
|
137 | - self::type_line_item => __("Line Item", "event_espresso"), |
|
138 | - self::type_sub_line_item => __("Sub-Item", "event_espresso"), |
|
139 | - self::type_sub_total => __("Subtotal", "event_espresso"), |
|
140 | - self::type_tax_sub_total => __("Tax Subtotal", "event_espresso"), |
|
141 | - self::type_tax => __("Tax", "event_espresso"), |
|
142 | - self::type_total => __("Total", "event_espresso"), |
|
143 | - self::type_cancellation => __('Cancellation', 'event_espresso') |
|
144 | - )), |
|
145 | - 'OBJ_ID' => new EE_Foreign_Key_Int_Field('OBJ_ID', __('ID of Item purchased.', 'event_espresso'), true, null, $line_items_can_be_for), |
|
146 | - 'OBJ_type' => new EE_Any_Foreign_Model_Name_Field('OBJ_type', __("Model Name this Line Item is for", "event_espresso"), true, null, $line_items_can_be_for), |
|
147 | - 'LIN_timestamp' => new EE_Datetime_Field('LIN_timestamp', __('When the line item was created', 'event_espresso'), false, EE_Datetime_Field::now, $timezone), |
|
148 | - ) |
|
149 | - ); |
|
150 | - $this->_model_relations = array( |
|
151 | - 'Transaction' => new EE_Belongs_To_Relation(), |
|
152 | - 'Ticket' => new EE_Belongs_To_Any_Relation(), |
|
153 | - 'Price' => new EE_Belongs_To_Any_Relation(), |
|
154 | - 'Event' => new EE_Belongs_To_Any_Relation() |
|
155 | - ); |
|
156 | - $this->_model_chain_to_wp_user = 'Transaction.Registration.Event'; |
|
157 | - $this->_caps_slug = 'transactions'; |
|
158 | - parent::__construct($timezone); |
|
159 | - } |
|
160 | - |
|
161 | - |
|
162 | - /** |
|
163 | - * Gets all the line items for this transaction of the given type |
|
164 | - * @param string $line_item_type like one of EEM_Line_Item::type_* |
|
165 | - * @param EE_Transaction|int $transaction |
|
166 | - * @return EE_Line_Item[] |
|
167 | - */ |
|
168 | - public function get_all_of_type_for_transaction($line_item_type, $transaction) |
|
169 | - { |
|
170 | - $transaction = EEM_Transaction::instance()->ensure_is_ID($transaction); |
|
171 | - return $this->get_all(array(array( |
|
172 | - 'LIN_type' => $line_item_type, |
|
173 | - 'TXN_ID' => $transaction |
|
174 | - ))); |
|
175 | - } |
|
176 | - |
|
177 | - |
|
178 | - /** |
|
179 | - * Gets all line items unrelated to tickets that are normal line items |
|
180 | - * (eg shipping, promotions, and miscellaneous other stuff should probably fit in this category) |
|
181 | - * @param EE_Transaction|int $transaction |
|
182 | - * @return EE_Line_Item[] |
|
183 | - */ |
|
184 | - public function get_all_non_ticket_line_items_for_transaction($transaction) |
|
185 | - { |
|
186 | - $transaction = EEM_Transaction::instance()->ensure_is_ID($transaction); |
|
187 | - return $this->get_all(array(array( |
|
188 | - 'LIN_type' => self::type_line_item, |
|
189 | - 'TXN_ID' => $transaction, |
|
190 | - 'OR' => array( |
|
191 | - 'OBJ_type*notticket' => array('!=', 'Ticket'), |
|
192 | - 'OBJ_type*null' => array('IS_NULL')) |
|
193 | - ))); |
|
194 | - } |
|
195 | - |
|
196 | - /** |
|
197 | - * Deletes line items with no transaction who have passed the transaction cutoff time. |
|
198 | - * This needs to be very efficient |
|
199 | - * because if there are spam bots afoot there will be LOTS of line items |
|
200 | - * @return int count of how many deleted |
|
201 | - */ |
|
202 | - public function delete_line_items_with_no_transaction() |
|
203 | - { |
|
204 | - /** @type WPDB $wpdb */ |
|
205 | - global $wpdb; |
|
206 | - $time_to_leave_alone = apply_filters( |
|
207 | - 'FHEE__EEM_Line_Item__delete_line_items_with_no_transaction__time_to_leave_alone', |
|
208 | - WEEK_IN_SECONDS |
|
209 | - ); |
|
210 | - $query = $wpdb->prepare( |
|
211 | - 'DELETE li |
|
35 | + /** |
|
36 | + * Tax sub-total is just the total of all the taxes, which should be children |
|
37 | + * of this line item. There should only ever be one tax sub-total, and it should |
|
38 | + * be a direct child of. Its quantity and LIN_unit_price = 1. |
|
39 | + */ |
|
40 | + const type_tax_sub_total = 'tax-sub-total'; |
|
41 | + |
|
42 | + /** |
|
43 | + * Tax line items indicate a tax applied to all the taxable line items. |
|
44 | + * Should not have any children line items. Its LIN_unit_price = 0. Its LIN_percent is a percent, not a decimal |
|
45 | + * (eg 10% tax = 10, not 0.1). Its LIN_total = LIN_unit_price * pre-tax-total. Quantity = 1. |
|
46 | + */ |
|
47 | + const type_tax = 'tax'; |
|
48 | + |
|
49 | + /** |
|
50 | + * Indicating individual items purchased, or discounts or surcharges. |
|
51 | + * The sum of all the regular line items plus the tax items should equal |
|
52 | + * the grand total. |
|
53 | + * Possible children are sub-line-items and cancellations. |
|
54 | + * For flat items, LIN_unit_price * LIN_quantity = LIN_total. Its LIN_total is the sum of all the children |
|
55 | + * LIN_totals. Its LIN_percent = 0. |
|
56 | + * For percent items, its LIN_unit_price = 0. Its LIN_percent is a percent, not a decimal (eg 10% = 10, not 0.1). |
|
57 | + * Its LIN_total is LIN_percent / 100 * sum of lower-priority sibling line items. Quantity = 1. |
|
58 | + */ |
|
59 | + const type_line_item = 'line-item'; |
|
60 | + |
|
61 | + /** |
|
62 | + * Line item indicating all the factors that make a single line item. |
|
63 | + * Sub-line items should have NO children line items. |
|
64 | + * For flat sub-items, their quantity should match their parent item, their LIN_unit_price should be this sub-item's |
|
65 | + * contribution towards the price of ONE of their parent items, and its LIN_total should be |
|
66 | + * = LIN_quantity * LIN_unit_price. Its LIN_percent = 0. |
|
67 | + * For percent sub-items, the quantity should be 1, LIN_unit_price should be 0, and its LIN_total should |
|
68 | + * = LIN_percent / 100 * sum of lower-priority sibling line items.. |
|
69 | + */ |
|
70 | + const type_sub_line_item = 'sub-item'; |
|
71 | + |
|
72 | + /** |
|
73 | + * Line item indicating a sub-total (eg total for an event, or pre-tax subtotal). |
|
74 | + * Direct children should be event subtotals. |
|
75 | + * Should have quantity of 1, and a LIN_total and LIN_unit_price of the sum of all its sub-items' LIN_totals. |
|
76 | + * |
|
77 | + */ |
|
78 | + const type_sub_total = 'sub-total'; |
|
79 | + |
|
80 | + /** |
|
81 | + * Line item for the grand total of an order. Its direct children |
|
82 | + * should be tax subtotals and (pre-tax) subtotals, and possibly a regular line item |
|
83 | + * indicating a transaction-wide discount/surcharge. Should have a quantity of 1, a LIN_total and LIN_unit_price of |
|
84 | + * the entire order's mount. |
|
85 | + */ |
|
86 | + const type_total = 'total'; |
|
87 | + |
|
88 | + /** |
|
89 | + * When a line item is cancelled, a sub-line-item of type 'cancellation' |
|
90 | + * should be created, indicating the quantity that were cancelled |
|
91 | + * (because a line item could have a quantity of 1, and its cancellation item |
|
92 | + * could be for 3, indicating that originally 4 were purchased, but 3 have been |
|
93 | + * cancelled, and only one remains). |
|
94 | + * When items are refunded, a cancellation line item should be made, which points |
|
95 | + * to teh payment model object which actually refunded the payment. |
|
96 | + * Cancellations should NOT have any children line items; the should NOT affect |
|
97 | + * any calculations, and are only meant as a record that cancellations have occurred. |
|
98 | + * Their LIN_percent should be 0. |
|
99 | + */ |
|
100 | + const type_cancellation = 'cancellation'; |
|
101 | + |
|
102 | + // private instance of the EEM_Line_Item object |
|
103 | + protected static $_instance = null; |
|
104 | + |
|
105 | + |
|
106 | + /** |
|
107 | + * private constructor to prevent direct creation |
|
108 | + * @Constructor |
|
109 | + * @access protected |
|
110 | + * @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) |
|
111 | + * @return \EEM_Line_Item |
|
112 | + */ |
|
113 | + protected function __construct($timezone) |
|
114 | + { |
|
115 | + $this->singular_item = __('Line Item', 'event_espresso'); |
|
116 | + $this->plural_item = __('Line Items', 'event_espresso'); |
|
117 | + |
|
118 | + $this->_tables = array( |
|
119 | + 'Line_Item' => new EE_Primary_Table('esp_line_item', 'LIN_ID') |
|
120 | + ); |
|
121 | + $line_items_can_be_for = apply_filters('FHEE__EEM_Line_Item__line_items_can_be_for', array('Ticket', 'Price', 'Event')); |
|
122 | + $this->_fields = array( |
|
123 | + 'Line_Item' => array( |
|
124 | + 'LIN_ID' => new EE_Primary_Key_Int_Field('LIN_ID', __("ID", "event_espresso")), |
|
125 | + 'LIN_code' => new EE_Slug_Field('LIN_code', __("Code for index into Cart", "event_espresso"), true), |
|
126 | + 'TXN_ID' => new EE_Foreign_Key_Int_Field('TXN_ID', __("Transaction ID", "event_espresso"), true, null, 'Transaction'), |
|
127 | + 'LIN_name' => new EE_Full_HTML_Field('LIN_name', __("Line Item Name", "event_espresso"), false, ''), |
|
128 | + 'LIN_desc' => new EE_Full_HTML_Field('LIN_desc', __("Line Item Description", "event_espresso"), true), |
|
129 | + 'LIN_unit_price' => new EE_Money_Field('LIN_unit_price', __("Unit Price", "event_espresso"), false, 0), |
|
130 | + 'LIN_percent' => new EE_Float_Field('LIN_percent', __("Percent", "event_espresso"), false, 0), |
|
131 | + 'LIN_is_taxable' => new EE_Boolean_Field('LIN_is_taxable', __("Taxable", "event_espresso"), false, false), |
|
132 | + 'LIN_order' => new EE_Integer_Field('LIN_order', __("Order of Application towards total of parent", "event_espresso"), false, 1), |
|
133 | + 'LIN_total' => new EE_Money_Field('LIN_total', __("Total (unit price x quantity)", "event_espresso"), false, 0), |
|
134 | + 'LIN_quantity' => new EE_Integer_Field('LIN_quantity', __("Quantity", "event_espresso"), true, 1), |
|
135 | + 'LIN_parent' => new EE_Integer_Field('LIN_parent', __("Parent ID (this item goes towards that Line Item's total)", "event_espresso"), true, null), |
|
136 | + 'LIN_type' => new EE_Enum_Text_Field('LIN_type', __("Type", "event_espresso"), false, 'line-item', array( |
|
137 | + self::type_line_item => __("Line Item", "event_espresso"), |
|
138 | + self::type_sub_line_item => __("Sub-Item", "event_espresso"), |
|
139 | + self::type_sub_total => __("Subtotal", "event_espresso"), |
|
140 | + self::type_tax_sub_total => __("Tax Subtotal", "event_espresso"), |
|
141 | + self::type_tax => __("Tax", "event_espresso"), |
|
142 | + self::type_total => __("Total", "event_espresso"), |
|
143 | + self::type_cancellation => __('Cancellation', 'event_espresso') |
|
144 | + )), |
|
145 | + 'OBJ_ID' => new EE_Foreign_Key_Int_Field('OBJ_ID', __('ID of Item purchased.', 'event_espresso'), true, null, $line_items_can_be_for), |
|
146 | + 'OBJ_type' => new EE_Any_Foreign_Model_Name_Field('OBJ_type', __("Model Name this Line Item is for", "event_espresso"), true, null, $line_items_can_be_for), |
|
147 | + 'LIN_timestamp' => new EE_Datetime_Field('LIN_timestamp', __('When the line item was created', 'event_espresso'), false, EE_Datetime_Field::now, $timezone), |
|
148 | + ) |
|
149 | + ); |
|
150 | + $this->_model_relations = array( |
|
151 | + 'Transaction' => new EE_Belongs_To_Relation(), |
|
152 | + 'Ticket' => new EE_Belongs_To_Any_Relation(), |
|
153 | + 'Price' => new EE_Belongs_To_Any_Relation(), |
|
154 | + 'Event' => new EE_Belongs_To_Any_Relation() |
|
155 | + ); |
|
156 | + $this->_model_chain_to_wp_user = 'Transaction.Registration.Event'; |
|
157 | + $this->_caps_slug = 'transactions'; |
|
158 | + parent::__construct($timezone); |
|
159 | + } |
|
160 | + |
|
161 | + |
|
162 | + /** |
|
163 | + * Gets all the line items for this transaction of the given type |
|
164 | + * @param string $line_item_type like one of EEM_Line_Item::type_* |
|
165 | + * @param EE_Transaction|int $transaction |
|
166 | + * @return EE_Line_Item[] |
|
167 | + */ |
|
168 | + public function get_all_of_type_for_transaction($line_item_type, $transaction) |
|
169 | + { |
|
170 | + $transaction = EEM_Transaction::instance()->ensure_is_ID($transaction); |
|
171 | + return $this->get_all(array(array( |
|
172 | + 'LIN_type' => $line_item_type, |
|
173 | + 'TXN_ID' => $transaction |
|
174 | + ))); |
|
175 | + } |
|
176 | + |
|
177 | + |
|
178 | + /** |
|
179 | + * Gets all line items unrelated to tickets that are normal line items |
|
180 | + * (eg shipping, promotions, and miscellaneous other stuff should probably fit in this category) |
|
181 | + * @param EE_Transaction|int $transaction |
|
182 | + * @return EE_Line_Item[] |
|
183 | + */ |
|
184 | + public function get_all_non_ticket_line_items_for_transaction($transaction) |
|
185 | + { |
|
186 | + $transaction = EEM_Transaction::instance()->ensure_is_ID($transaction); |
|
187 | + return $this->get_all(array(array( |
|
188 | + 'LIN_type' => self::type_line_item, |
|
189 | + 'TXN_ID' => $transaction, |
|
190 | + 'OR' => array( |
|
191 | + 'OBJ_type*notticket' => array('!=', 'Ticket'), |
|
192 | + 'OBJ_type*null' => array('IS_NULL')) |
|
193 | + ))); |
|
194 | + } |
|
195 | + |
|
196 | + /** |
|
197 | + * Deletes line items with no transaction who have passed the transaction cutoff time. |
|
198 | + * This needs to be very efficient |
|
199 | + * because if there are spam bots afoot there will be LOTS of line items |
|
200 | + * @return int count of how many deleted |
|
201 | + */ |
|
202 | + public function delete_line_items_with_no_transaction() |
|
203 | + { |
|
204 | + /** @type WPDB $wpdb */ |
|
205 | + global $wpdb; |
|
206 | + $time_to_leave_alone = apply_filters( |
|
207 | + 'FHEE__EEM_Line_Item__delete_line_items_with_no_transaction__time_to_leave_alone', |
|
208 | + WEEK_IN_SECONDS |
|
209 | + ); |
|
210 | + $query = $wpdb->prepare( |
|
211 | + 'DELETE li |
|
212 | 212 | FROM ' . $this->table() . ' li |
213 | 213 | LEFT JOIN ' . EEM_Transaction::instance()->table() . ' t ON li.TXN_ID = t.TXN_ID |
214 | 214 | WHERE t.TXN_ID IS NULL AND li.LIN_timestamp < %s', |
215 | - // use GMT time because that's what TXN_timestamps are in |
|
216 | - date('Y-m-d H:i:s', time() - $time_to_leave_alone) |
|
217 | - ); |
|
218 | - return $wpdb->query($query); |
|
219 | - } |
|
220 | - |
|
221 | - |
|
222 | - /** |
|
223 | - * get_line_item_for_transaction_object |
|
224 | - * Gets a transaction's line item record for a specific object such as a EE_Event or EE_Ticket |
|
225 | - * |
|
226 | - * @param int $TXN_ID |
|
227 | - * @param \EE_Base_Class $object |
|
228 | - * @return EE_Line_Item[] |
|
229 | - */ |
|
230 | - public function get_line_item_for_transaction_object($TXN_ID, EE_Base_Class $object) |
|
231 | - { |
|
232 | - return $this->get_all(array(array( |
|
233 | - 'TXN_ID' => $TXN_ID, |
|
234 | - 'OBJ_type' => str_replace('EE_', '', get_class($object)), |
|
235 | - 'OBJ_ID' => $object->ID() |
|
236 | - ))); |
|
237 | - } |
|
238 | - |
|
239 | - |
|
240 | - /** |
|
241 | - * get_object_line_items_for_transaction |
|
242 | - * Gets all of the the object line items for a transaction, based on an object type plus an array of object IDs |
|
243 | - * |
|
244 | - * @param int $TXN_ID |
|
245 | - * @param string $OBJ_type |
|
246 | - * @param array $OBJ_IDs |
|
247 | - * @return EE_Line_Item[] |
|
248 | - */ |
|
249 | - public function get_object_line_items_for_transaction($TXN_ID, $OBJ_type = 'Event', $OBJ_IDs = array()) |
|
250 | - { |
|
251 | - $query_params = array( |
|
252 | - 'OBJ_type' => $OBJ_type, |
|
253 | - // if incoming $OBJ_IDs is an array, then make sure it is formatted correctly for the query |
|
254 | - 'OBJ_ID' => is_array($OBJ_IDs) && !isset($OBJ_IDs['IN']) ? array('IN', $OBJ_IDs) : $OBJ_IDs |
|
255 | - ); |
|
256 | - if ($TXN_ID) { |
|
257 | - $query_params['TXN_ID'] = $TXN_ID; |
|
258 | - } |
|
259 | - return $this->get_all(array($query_params)); |
|
260 | - } |
|
261 | - |
|
262 | - |
|
263 | - /** |
|
264 | - * get_all_ticket_line_items_for_transaction |
|
265 | - * |
|
266 | - * @param EE_Transaction $transaction |
|
267 | - * @return EE_Line_Item[] |
|
268 | - */ |
|
269 | - public function get_all_ticket_line_items_for_transaction(EE_Transaction $transaction) |
|
270 | - { |
|
271 | - return $this->get_all(array( |
|
272 | - array( |
|
273 | - 'TXN_ID' => $transaction->ID(), |
|
274 | - 'OBJ_type' => 'Ticket', |
|
275 | - ) |
|
276 | - )); |
|
277 | - } |
|
278 | - |
|
279 | - |
|
280 | - /** |
|
281 | - * get_ticket_line_item_for_transaction |
|
282 | - * |
|
283 | - * @param int $TXN_ID |
|
284 | - * @param int $TKT_ID |
|
285 | - * @return \EE_Line_Item |
|
286 | - */ |
|
287 | - public function get_ticket_line_item_for_transaction($TXN_ID, $TKT_ID) |
|
288 | - { |
|
289 | - return $this->get_one(array( |
|
290 | - array( |
|
291 | - 'TXN_ID' => EEM_Transaction::instance()->ensure_is_ID($TXN_ID), |
|
292 | - 'OBJ_ID' => $TKT_ID, |
|
293 | - 'OBJ_type' => 'Ticket', |
|
294 | - ) |
|
295 | - )); |
|
296 | - } |
|
297 | - |
|
298 | - |
|
299 | - /** |
|
300 | - * get_existing_promotion_line_item |
|
301 | - * searches the cart for existing line items for the specified promotion |
|
302 | - * |
|
303 | - * @since 1.0.0 |
|
304 | - * |
|
305 | - * @param EE_Line_Item $parent_line_item |
|
306 | - * @param EE_Promotion $promotion |
|
307 | - * @return EE_Line_Item |
|
308 | - */ |
|
309 | - public function get_existing_promotion_line_item(EE_Line_Item $parent_line_item, EE_Promotion $promotion) |
|
310 | - { |
|
311 | - return $this->get_one(array( |
|
312 | - array( |
|
313 | - 'TXN_ID' => $parent_line_item->TXN_ID(), |
|
314 | - 'LIN_parent' => $parent_line_item->ID(), |
|
315 | - 'OBJ_type' => 'Promotion', |
|
316 | - 'OBJ_ID' => $promotion->ID() |
|
317 | - ) |
|
318 | - )); |
|
319 | - } |
|
320 | - |
|
321 | - |
|
322 | - /** |
|
323 | - * get_all_promotion_line_items |
|
324 | - * searches the cart for any and all existing promotion line items |
|
325 | - * |
|
326 | - * @since 1.0.0 |
|
327 | - * |
|
328 | - * @param EE_Line_Item $parent_line_item |
|
329 | - * @return EE_Line_Item[] |
|
330 | - */ |
|
331 | - public function get_all_promotion_line_items(EE_Line_Item $parent_line_item) |
|
332 | - { |
|
333 | - return $this->get_all(array( |
|
334 | - array( |
|
335 | - 'TXN_ID' => $parent_line_item->TXN_ID(), |
|
336 | - 'LIN_parent' => $parent_line_item->ID(), |
|
337 | - 'OBJ_type' => 'Promotion' |
|
338 | - ) |
|
339 | - )); |
|
340 | - } |
|
341 | - |
|
342 | - /** |
|
343 | - * Gets the registration's corresponding line item. |
|
344 | - * Note: basically does NOT support having multiple line items for a single ticket, |
|
345 | - * which would happen if some of the registrations had a price modifier while others didn't. |
|
346 | - * In order to support that, we'd probably need a LIN_ID on registrations or something. |
|
347 | - * @param EE_Registration $registration |
|
348 | - * @return EE_Line_ITem |
|
349 | - */ |
|
350 | - public function get_line_item_for_registration(EE_Registration $registration) |
|
351 | - { |
|
352 | - return $this->get_one($this->line_item_for_registration_query_params($registration)); |
|
353 | - } |
|
354 | - |
|
355 | - /** |
|
356 | - * Gets the query params used to retrieve a specific line item for the given registration |
|
357 | - * @param EE_Registration $registration |
|
358 | - * @param array $original_query_params any extra query params you'd like to be merged with |
|
359 | - * @return array like EEM_Base::get_all()'s $query_params |
|
360 | - */ |
|
361 | - public function line_item_for_registration_query_params(EE_Registration $registration, $original_query_params = array()) |
|
362 | - { |
|
363 | - return array_replace_recursive($original_query_params, array( |
|
364 | - array( |
|
365 | - 'OBJ_ID' => $registration->ticket_ID(), |
|
366 | - 'OBJ_type' => 'Ticket', |
|
367 | - 'TXN_ID' => $registration->transaction_ID() |
|
368 | - ) |
|
369 | - )); |
|
370 | - } |
|
371 | - |
|
372 | - |
|
373 | - /** |
|
374 | - * @return EE_Base_Class[]|EE_Line_Item[] |
|
375 | - * @throws InvalidInterfaceException |
|
376 | - * @throws InvalidDataTypeException |
|
377 | - * @throws EE_Error |
|
378 | - * @throws InvalidArgumentException |
|
379 | - */ |
|
380 | - public function get_total_line_items_with_no_transaction() |
|
381 | - { |
|
382 | - return $this->get_total_line_items_for_carts(); |
|
383 | - } |
|
384 | - |
|
385 | - |
|
386 | - /** |
|
387 | - * @return EE_Base_Class[]|EE_Line_Item[] |
|
388 | - * @throws InvalidInterfaceException |
|
389 | - * @throws InvalidDataTypeException |
|
390 | - * @throws EE_Error |
|
391 | - * @throws InvalidArgumentException |
|
392 | - */ |
|
393 | - public function get_total_line_items_for_active_carts() |
|
394 | - { |
|
395 | - return $this->get_total_line_items_for_carts(false); |
|
396 | - } |
|
397 | - |
|
398 | - |
|
399 | - /** |
|
400 | - * @return EE_Base_Class[]|EE_Line_Item[] |
|
401 | - * @throws InvalidInterfaceException |
|
402 | - * @throws InvalidDataTypeException |
|
403 | - * @throws EE_Error |
|
404 | - * @throws InvalidArgumentException |
|
405 | - */ |
|
406 | - public function get_total_line_items_for_expired_carts() |
|
407 | - { |
|
408 | - return $this->get_total_line_items_for_carts(true); |
|
409 | - } |
|
410 | - |
|
411 | - |
|
412 | - /** |
|
413 | - * Returns an array of grand total line items where the TXN_ID is 0. |
|
414 | - * If $expired is set to true, then only line items for expired sessions will be returned. |
|
415 | - * If $expired is set to false, then only line items for active sessions will be returned. |
|
416 | - * |
|
417 | - * @param null $expired |
|
418 | - * @return EE_Base_Class[]|EE_Line_Item[] |
|
419 | - * @throws EE_Error |
|
420 | - * @throws InvalidArgumentException |
|
421 | - * @throws InvalidDataTypeException |
|
422 | - * @throws InvalidInterfaceException |
|
423 | - */ |
|
424 | - private function get_total_line_items_for_carts($expired = null) |
|
425 | - { |
|
426 | - $where_params = array( |
|
427 | - 'TXN_ID' => 0, |
|
428 | - 'LIN_type' => 'total', |
|
429 | - ); |
|
430 | - if ($expired !== null) { |
|
431 | - /** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */ |
|
432 | - $session_lifespan = LoaderFactory::getLoader()->getShared( |
|
433 | - 'EventEspresso\core\domain\values\session\SessionLifespan' |
|
434 | - ); |
|
435 | - $where_params['LIN_timestamp'] = array( |
|
436 | - $expired ? '<=' : '>', |
|
437 | - $session_lifespan->expiration(), |
|
438 | - ); |
|
439 | - } |
|
440 | - return $this->get_all(array($where_params)); |
|
441 | - } |
|
442 | - |
|
443 | - |
|
444 | - /** |
|
445 | - * Returns an array of ticket total line items where the TXN_ID is 0 |
|
446 | - * AND the timestamp is older than the session lifespan. |
|
447 | - * |
|
448 | - * @param int $timestamp |
|
449 | - * @return EE_Base_Class[]|EE_Line_Item[] |
|
450 | - * @throws EE_Error |
|
451 | - * @throws InvalidArgumentException |
|
452 | - * @throws InvalidDataTypeException |
|
453 | - * @throws InvalidInterfaceException |
|
454 | - */ |
|
455 | - public function getTicketLineItemsForExpiredCarts($timestamp = 0) |
|
456 | - { |
|
457 | - if (! absint($timestamp)) { |
|
458 | - /** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */ |
|
459 | - $session_lifespan = LoaderFactory::getLoader()->getShared( |
|
460 | - 'EventEspresso\core\domain\values\session\SessionLifespan' |
|
461 | - ); |
|
462 | - $timestamp = $session_lifespan->expiration(); |
|
463 | - } |
|
464 | - return $this->get_all( |
|
465 | - array( |
|
466 | - array( |
|
467 | - 'TXN_ID' => 0, |
|
468 | - 'OBJ_type' => 'Ticket', |
|
469 | - 'LIN_timestamp' => array('<=', $timestamp), |
|
470 | - ) |
|
471 | - ) |
|
472 | - ); |
|
473 | - } |
|
215 | + // use GMT time because that's what TXN_timestamps are in |
|
216 | + date('Y-m-d H:i:s', time() - $time_to_leave_alone) |
|
217 | + ); |
|
218 | + return $wpdb->query($query); |
|
219 | + } |
|
220 | + |
|
221 | + |
|
222 | + /** |
|
223 | + * get_line_item_for_transaction_object |
|
224 | + * Gets a transaction's line item record for a specific object such as a EE_Event or EE_Ticket |
|
225 | + * |
|
226 | + * @param int $TXN_ID |
|
227 | + * @param \EE_Base_Class $object |
|
228 | + * @return EE_Line_Item[] |
|
229 | + */ |
|
230 | + public function get_line_item_for_transaction_object($TXN_ID, EE_Base_Class $object) |
|
231 | + { |
|
232 | + return $this->get_all(array(array( |
|
233 | + 'TXN_ID' => $TXN_ID, |
|
234 | + 'OBJ_type' => str_replace('EE_', '', get_class($object)), |
|
235 | + 'OBJ_ID' => $object->ID() |
|
236 | + ))); |
|
237 | + } |
|
238 | + |
|
239 | + |
|
240 | + /** |
|
241 | + * get_object_line_items_for_transaction |
|
242 | + * Gets all of the the object line items for a transaction, based on an object type plus an array of object IDs |
|
243 | + * |
|
244 | + * @param int $TXN_ID |
|
245 | + * @param string $OBJ_type |
|
246 | + * @param array $OBJ_IDs |
|
247 | + * @return EE_Line_Item[] |
|
248 | + */ |
|
249 | + public function get_object_line_items_for_transaction($TXN_ID, $OBJ_type = 'Event', $OBJ_IDs = array()) |
|
250 | + { |
|
251 | + $query_params = array( |
|
252 | + 'OBJ_type' => $OBJ_type, |
|
253 | + // if incoming $OBJ_IDs is an array, then make sure it is formatted correctly for the query |
|
254 | + 'OBJ_ID' => is_array($OBJ_IDs) && !isset($OBJ_IDs['IN']) ? array('IN', $OBJ_IDs) : $OBJ_IDs |
|
255 | + ); |
|
256 | + if ($TXN_ID) { |
|
257 | + $query_params['TXN_ID'] = $TXN_ID; |
|
258 | + } |
|
259 | + return $this->get_all(array($query_params)); |
|
260 | + } |
|
261 | + |
|
262 | + |
|
263 | + /** |
|
264 | + * get_all_ticket_line_items_for_transaction |
|
265 | + * |
|
266 | + * @param EE_Transaction $transaction |
|
267 | + * @return EE_Line_Item[] |
|
268 | + */ |
|
269 | + public function get_all_ticket_line_items_for_transaction(EE_Transaction $transaction) |
|
270 | + { |
|
271 | + return $this->get_all(array( |
|
272 | + array( |
|
273 | + 'TXN_ID' => $transaction->ID(), |
|
274 | + 'OBJ_type' => 'Ticket', |
|
275 | + ) |
|
276 | + )); |
|
277 | + } |
|
278 | + |
|
279 | + |
|
280 | + /** |
|
281 | + * get_ticket_line_item_for_transaction |
|
282 | + * |
|
283 | + * @param int $TXN_ID |
|
284 | + * @param int $TKT_ID |
|
285 | + * @return \EE_Line_Item |
|
286 | + */ |
|
287 | + public function get_ticket_line_item_for_transaction($TXN_ID, $TKT_ID) |
|
288 | + { |
|
289 | + return $this->get_one(array( |
|
290 | + array( |
|
291 | + 'TXN_ID' => EEM_Transaction::instance()->ensure_is_ID($TXN_ID), |
|
292 | + 'OBJ_ID' => $TKT_ID, |
|
293 | + 'OBJ_type' => 'Ticket', |
|
294 | + ) |
|
295 | + )); |
|
296 | + } |
|
297 | + |
|
298 | + |
|
299 | + /** |
|
300 | + * get_existing_promotion_line_item |
|
301 | + * searches the cart for existing line items for the specified promotion |
|
302 | + * |
|
303 | + * @since 1.0.0 |
|
304 | + * |
|
305 | + * @param EE_Line_Item $parent_line_item |
|
306 | + * @param EE_Promotion $promotion |
|
307 | + * @return EE_Line_Item |
|
308 | + */ |
|
309 | + public function get_existing_promotion_line_item(EE_Line_Item $parent_line_item, EE_Promotion $promotion) |
|
310 | + { |
|
311 | + return $this->get_one(array( |
|
312 | + array( |
|
313 | + 'TXN_ID' => $parent_line_item->TXN_ID(), |
|
314 | + 'LIN_parent' => $parent_line_item->ID(), |
|
315 | + 'OBJ_type' => 'Promotion', |
|
316 | + 'OBJ_ID' => $promotion->ID() |
|
317 | + ) |
|
318 | + )); |
|
319 | + } |
|
320 | + |
|
321 | + |
|
322 | + /** |
|
323 | + * get_all_promotion_line_items |
|
324 | + * searches the cart for any and all existing promotion line items |
|
325 | + * |
|
326 | + * @since 1.0.0 |
|
327 | + * |
|
328 | + * @param EE_Line_Item $parent_line_item |
|
329 | + * @return EE_Line_Item[] |
|
330 | + */ |
|
331 | + public function get_all_promotion_line_items(EE_Line_Item $parent_line_item) |
|
332 | + { |
|
333 | + return $this->get_all(array( |
|
334 | + array( |
|
335 | + 'TXN_ID' => $parent_line_item->TXN_ID(), |
|
336 | + 'LIN_parent' => $parent_line_item->ID(), |
|
337 | + 'OBJ_type' => 'Promotion' |
|
338 | + ) |
|
339 | + )); |
|
340 | + } |
|
341 | + |
|
342 | + /** |
|
343 | + * Gets the registration's corresponding line item. |
|
344 | + * Note: basically does NOT support having multiple line items for a single ticket, |
|
345 | + * which would happen if some of the registrations had a price modifier while others didn't. |
|
346 | + * In order to support that, we'd probably need a LIN_ID on registrations or something. |
|
347 | + * @param EE_Registration $registration |
|
348 | + * @return EE_Line_ITem |
|
349 | + */ |
|
350 | + public function get_line_item_for_registration(EE_Registration $registration) |
|
351 | + { |
|
352 | + return $this->get_one($this->line_item_for_registration_query_params($registration)); |
|
353 | + } |
|
354 | + |
|
355 | + /** |
|
356 | + * Gets the query params used to retrieve a specific line item for the given registration |
|
357 | + * @param EE_Registration $registration |
|
358 | + * @param array $original_query_params any extra query params you'd like to be merged with |
|
359 | + * @return array like EEM_Base::get_all()'s $query_params |
|
360 | + */ |
|
361 | + public function line_item_for_registration_query_params(EE_Registration $registration, $original_query_params = array()) |
|
362 | + { |
|
363 | + return array_replace_recursive($original_query_params, array( |
|
364 | + array( |
|
365 | + 'OBJ_ID' => $registration->ticket_ID(), |
|
366 | + 'OBJ_type' => 'Ticket', |
|
367 | + 'TXN_ID' => $registration->transaction_ID() |
|
368 | + ) |
|
369 | + )); |
|
370 | + } |
|
371 | + |
|
372 | + |
|
373 | + /** |
|
374 | + * @return EE_Base_Class[]|EE_Line_Item[] |
|
375 | + * @throws InvalidInterfaceException |
|
376 | + * @throws InvalidDataTypeException |
|
377 | + * @throws EE_Error |
|
378 | + * @throws InvalidArgumentException |
|
379 | + */ |
|
380 | + public function get_total_line_items_with_no_transaction() |
|
381 | + { |
|
382 | + return $this->get_total_line_items_for_carts(); |
|
383 | + } |
|
384 | + |
|
385 | + |
|
386 | + /** |
|
387 | + * @return EE_Base_Class[]|EE_Line_Item[] |
|
388 | + * @throws InvalidInterfaceException |
|
389 | + * @throws InvalidDataTypeException |
|
390 | + * @throws EE_Error |
|
391 | + * @throws InvalidArgumentException |
|
392 | + */ |
|
393 | + public function get_total_line_items_for_active_carts() |
|
394 | + { |
|
395 | + return $this->get_total_line_items_for_carts(false); |
|
396 | + } |
|
397 | + |
|
398 | + |
|
399 | + /** |
|
400 | + * @return EE_Base_Class[]|EE_Line_Item[] |
|
401 | + * @throws InvalidInterfaceException |
|
402 | + * @throws InvalidDataTypeException |
|
403 | + * @throws EE_Error |
|
404 | + * @throws InvalidArgumentException |
|
405 | + */ |
|
406 | + public function get_total_line_items_for_expired_carts() |
|
407 | + { |
|
408 | + return $this->get_total_line_items_for_carts(true); |
|
409 | + } |
|
410 | + |
|
411 | + |
|
412 | + /** |
|
413 | + * Returns an array of grand total line items where the TXN_ID is 0. |
|
414 | + * If $expired is set to true, then only line items for expired sessions will be returned. |
|
415 | + * If $expired is set to false, then only line items for active sessions will be returned. |
|
416 | + * |
|
417 | + * @param null $expired |
|
418 | + * @return EE_Base_Class[]|EE_Line_Item[] |
|
419 | + * @throws EE_Error |
|
420 | + * @throws InvalidArgumentException |
|
421 | + * @throws InvalidDataTypeException |
|
422 | + * @throws InvalidInterfaceException |
|
423 | + */ |
|
424 | + private function get_total_line_items_for_carts($expired = null) |
|
425 | + { |
|
426 | + $where_params = array( |
|
427 | + 'TXN_ID' => 0, |
|
428 | + 'LIN_type' => 'total', |
|
429 | + ); |
|
430 | + if ($expired !== null) { |
|
431 | + /** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */ |
|
432 | + $session_lifespan = LoaderFactory::getLoader()->getShared( |
|
433 | + 'EventEspresso\core\domain\values\session\SessionLifespan' |
|
434 | + ); |
|
435 | + $where_params['LIN_timestamp'] = array( |
|
436 | + $expired ? '<=' : '>', |
|
437 | + $session_lifespan->expiration(), |
|
438 | + ); |
|
439 | + } |
|
440 | + return $this->get_all(array($where_params)); |
|
441 | + } |
|
442 | + |
|
443 | + |
|
444 | + /** |
|
445 | + * Returns an array of ticket total line items where the TXN_ID is 0 |
|
446 | + * AND the timestamp is older than the session lifespan. |
|
447 | + * |
|
448 | + * @param int $timestamp |
|
449 | + * @return EE_Base_Class[]|EE_Line_Item[] |
|
450 | + * @throws EE_Error |
|
451 | + * @throws InvalidArgumentException |
|
452 | + * @throws InvalidDataTypeException |
|
453 | + * @throws InvalidInterfaceException |
|
454 | + */ |
|
455 | + public function getTicketLineItemsForExpiredCarts($timestamp = 0) |
|
456 | + { |
|
457 | + if (! absint($timestamp)) { |
|
458 | + /** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */ |
|
459 | + $session_lifespan = LoaderFactory::getLoader()->getShared( |
|
460 | + 'EventEspresso\core\domain\values\session\SessionLifespan' |
|
461 | + ); |
|
462 | + $timestamp = $session_lifespan->expiration(); |
|
463 | + } |
|
464 | + return $this->get_all( |
|
465 | + array( |
|
466 | + array( |
|
467 | + 'TXN_ID' => 0, |
|
468 | + 'OBJ_type' => 'Ticket', |
|
469 | + 'LIN_timestamp' => array('<=', $timestamp), |
|
470 | + ) |
|
471 | + ) |
|
472 | + ); |
|
473 | + } |
|
474 | 474 | } |
@@ -209,8 +209,8 @@ discard block |
||
209 | 209 | ); |
210 | 210 | $query = $wpdb->prepare( |
211 | 211 | 'DELETE li |
212 | - FROM ' . $this->table() . ' li |
|
213 | - LEFT JOIN ' . EEM_Transaction::instance()->table() . ' t ON li.TXN_ID = t.TXN_ID |
|
212 | + FROM ' . $this->table().' li |
|
213 | + LEFT JOIN ' . EEM_Transaction::instance()->table().' t ON li.TXN_ID = t.TXN_ID |
|
214 | 214 | WHERE t.TXN_ID IS NULL AND li.LIN_timestamp < %s', |
215 | 215 | // use GMT time because that's what TXN_timestamps are in |
216 | 216 | date('Y-m-d H:i:s', time() - $time_to_leave_alone) |
@@ -251,7 +251,7 @@ discard block |
||
251 | 251 | $query_params = array( |
252 | 252 | 'OBJ_type' => $OBJ_type, |
253 | 253 | // if incoming $OBJ_IDs is an array, then make sure it is formatted correctly for the query |
254 | - 'OBJ_ID' => is_array($OBJ_IDs) && !isset($OBJ_IDs['IN']) ? array('IN', $OBJ_IDs) : $OBJ_IDs |
|
254 | + 'OBJ_ID' => is_array($OBJ_IDs) && ! isset($OBJ_IDs['IN']) ? array('IN', $OBJ_IDs) : $OBJ_IDs |
|
255 | 255 | ); |
256 | 256 | if ($TXN_ID) { |
257 | 257 | $query_params['TXN_ID'] = $TXN_ID; |
@@ -454,7 +454,7 @@ discard block |
||
454 | 454 | */ |
455 | 455 | public function getTicketLineItemsForExpiredCarts($timestamp = 0) |
456 | 456 | { |
457 | - if (! absint($timestamp)) { |
|
457 | + if ( ! absint($timestamp)) { |
|
458 | 458 | /** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */ |
459 | 459 | $session_lifespan = LoaderFactory::getLoader()->getShared( |
460 | 460 | 'EventEspresso\core\domain\values\session\SessionLifespan' |
@@ -185,7 +185,7 @@ discard block |
||
185 | 185 | * |
186 | 186 | * @param $key |
187 | 187 | * @param null $default |
188 | - * @return mixed |
|
188 | + * @return integer |
|
189 | 189 | */ |
190 | 190 | public function getRequestParam($key, $default = null) |
191 | 191 | { |
@@ -231,7 +231,7 @@ discard block |
||
231 | 231 | * returns true if a match is found or false if not |
232 | 232 | * |
233 | 233 | * @param string $pattern |
234 | - * @return false|int |
|
234 | + * @return boolean |
|
235 | 235 | */ |
236 | 236 | public function matches($pattern) |
237 | 237 | { |
@@ -299,7 +299,7 @@ discard block |
||
299 | 299 | * would return true if default parameters were set |
300 | 300 | * |
301 | 301 | * @param string $callback |
302 | - * @param $key |
|
302 | + * @param string $key |
|
303 | 303 | * @param null $default |
304 | 304 | * @param array $request_params |
305 | 305 | * @return bool|mixed|null |
@@ -163,7 +163,7 @@ discard block |
||
163 | 163 | || ($key === 'ee' && empty($this->request['ee'])) |
164 | 164 | || ($key === 'ee' && ! empty($this->request['ee']) && $override_ee) |
165 | 165 | ) { |
166 | - $this->request[ $key ] = $value; |
|
166 | + $this->request[$key] = $value; |
|
167 | 167 | } |
168 | 168 | } |
169 | 169 | |
@@ -254,10 +254,10 @@ discard block |
||
254 | 254 | preg_quote($pattern, '/') |
255 | 255 | ); |
256 | 256 | foreach ($request_params as $key => $request_param) { |
257 | - if (preg_match('/^' . $pattern . '$/is', $key)) { |
|
257 | + if (preg_match('/^'.$pattern.'$/is', $key)) { |
|
258 | 258 | // return value for request param |
259 | 259 | if ($return === 'value') { |
260 | - return $request_params[ $key ]; |
|
260 | + return $request_params[$key]; |
|
261 | 261 | } |
262 | 262 | // or actual key or true just to indicate it was found |
263 | 263 | return $return === 'key' ? $key : true; |
@@ -314,29 +314,29 @@ discard block |
||
314 | 314 | $key = $real_key ? $real_key : $key; |
315 | 315 | } |
316 | 316 | // check if top level key exists |
317 | - if (isset($request_params[ $key ])) { |
|
317 | + if (isset($request_params[$key])) { |
|
318 | 318 | // build a new key to pass along like: 'second[third]' |
319 | 319 | // or just 'second' depending on depth of keys |
320 | 320 | $key_string = array_shift($keys); |
321 | - if (! empty($keys)) { |
|
322 | - $key_string .= '[' . implode('][', $keys) . ']'; |
|
321 | + if ( ! empty($keys)) { |
|
322 | + $key_string .= '['.implode('][', $keys).']'; |
|
323 | 323 | } |
324 | 324 | return $this->requestParameterDrillDown( |
325 | 325 | $key_string, |
326 | 326 | $default, |
327 | 327 | $callback, |
328 | - $request_params[ $key ] |
|
328 | + $request_params[$key] |
|
329 | 329 | ); |
330 | 330 | } |
331 | 331 | } |
332 | 332 | if ($callback === 'is_set') { |
333 | - return isset($request_params[ $key ]); |
|
333 | + return isset($request_params[$key]); |
|
334 | 334 | } |
335 | 335 | if ($callback === 'match') { |
336 | 336 | return $this->match($key, $request_params, $default); |
337 | 337 | } |
338 | - return isset($request_params[ $key ]) |
|
339 | - ? $request_params[ $key ] |
|
338 | + return isset($request_params[$key]) |
|
339 | + ? $request_params[$key] |
|
340 | 340 | : $default; |
341 | 341 | } |
342 | 342 | |
@@ -349,9 +349,9 @@ discard block |
||
349 | 349 | */ |
350 | 350 | public function unSetRequestParam($key, $unset_from_global_too = false) |
351 | 351 | { |
352 | - unset($this->request[ $key ]); |
|
352 | + unset($this->request[$key]); |
|
353 | 353 | if ($unset_from_global_too) { |
354 | - unset($_REQUEST[ $key ]); |
|
354 | + unset($_REQUEST[$key]); |
|
355 | 355 | } |
356 | 356 | } |
357 | 357 | |
@@ -385,8 +385,8 @@ discard block |
||
385 | 385 | 'REMOTE_ADDR', |
386 | 386 | ); |
387 | 387 | foreach ($server_keys as $key) { |
388 | - if (isset($this->server[ $key ])) { |
|
389 | - foreach (array_map('trim', explode(',', $this->server[ $key ])) as $ip) { |
|
388 | + if (isset($this->server[$key])) { |
|
389 | + foreach (array_map('trim', explode(',', $this->server[$key])) as $ip) { |
|
390 | 390 | if ($ip === '127.0.0.1' || filter_var($ip, FILTER_VALIDATE_IP) !== false) { |
391 | 391 | $visitor_ip = $ip; |
392 | 392 | } |
@@ -17,586 +17,586 @@ |
||
17 | 17 | class Request implements InterminableInterface, RequestInterface, ReservedInstanceInterface |
18 | 18 | { |
19 | 19 | |
20 | - /** |
|
21 | - * $_GET parameters |
|
22 | - * |
|
23 | - * @var array $get |
|
24 | - */ |
|
25 | - private $get; |
|
26 | - |
|
27 | - /** |
|
28 | - * $_POST parameters |
|
29 | - * |
|
30 | - * @var array $post |
|
31 | - */ |
|
32 | - private $post; |
|
33 | - |
|
34 | - /** |
|
35 | - * $_COOKIE parameters |
|
36 | - * |
|
37 | - * @var array $cookie |
|
38 | - */ |
|
39 | - private $cookie; |
|
40 | - |
|
41 | - /** |
|
42 | - * $_SERVER parameters |
|
43 | - * |
|
44 | - * @var array $server |
|
45 | - */ |
|
46 | - private $server; |
|
47 | - |
|
48 | - /** |
|
49 | - * $_REQUEST parameters |
|
50 | - * |
|
51 | - * @var array $request |
|
52 | - */ |
|
53 | - private $request; |
|
54 | - |
|
55 | - /** |
|
56 | - * @var RequestTypeContextCheckerInterface |
|
57 | - */ |
|
58 | - private $request_type; |
|
59 | - |
|
60 | - /** |
|
61 | - * IP address for request |
|
62 | - * |
|
63 | - * @var string $ip_address |
|
64 | - */ |
|
65 | - private $ip_address; |
|
66 | - |
|
67 | - /** |
|
68 | - * @var string $user_agent |
|
69 | - */ |
|
70 | - private $user_agent; |
|
71 | - |
|
72 | - /** |
|
73 | - * true if current user appears to be some kind of bot |
|
74 | - * |
|
75 | - * @var bool $is_bot |
|
76 | - */ |
|
77 | - private $is_bot; |
|
78 | - |
|
79 | - |
|
80 | - /** |
|
81 | - * @param array $get |
|
82 | - * @param array $post |
|
83 | - * @param array $cookie |
|
84 | - * @param array $server |
|
85 | - */ |
|
86 | - public function __construct(array $get, array $post, array $cookie, array $server) |
|
87 | - { |
|
88 | - // grab request vars |
|
89 | - $this->get = $get; |
|
90 | - $this->post = $post; |
|
91 | - $this->cookie = $cookie; |
|
92 | - $this->server = $server; |
|
93 | - $this->request = array_merge($this->get, $this->post); |
|
94 | - $this->ip_address = $this->visitorIp(); |
|
95 | - } |
|
96 | - |
|
97 | - |
|
98 | - /** |
|
99 | - * @param RequestTypeContextCheckerInterface $type |
|
100 | - */ |
|
101 | - public function setRequestTypeContextChecker(RequestTypeContextCheckerInterface $type) |
|
102 | - { |
|
103 | - $this->request_type = $type; |
|
104 | - } |
|
105 | - |
|
106 | - |
|
107 | - /** |
|
108 | - * @return array |
|
109 | - */ |
|
110 | - public function getParams() |
|
111 | - { |
|
112 | - return $this->get; |
|
113 | - } |
|
114 | - |
|
115 | - |
|
116 | - /** |
|
117 | - * @return array |
|
118 | - */ |
|
119 | - public function postParams() |
|
120 | - { |
|
121 | - return $this->post; |
|
122 | - } |
|
123 | - |
|
124 | - |
|
125 | - /** |
|
126 | - * @return array |
|
127 | - */ |
|
128 | - public function cookieParams() |
|
129 | - { |
|
130 | - return $this->cookie; |
|
131 | - } |
|
132 | - |
|
133 | - |
|
134 | - /** |
|
135 | - * @return array |
|
136 | - */ |
|
137 | - public function serverParams() |
|
138 | - { |
|
139 | - return $this->server; |
|
140 | - } |
|
141 | - |
|
142 | - |
|
143 | - /** |
|
144 | - * returns contents of $_REQUEST |
|
145 | - * |
|
146 | - * @return array |
|
147 | - */ |
|
148 | - public function requestParams() |
|
149 | - { |
|
150 | - return $this->request; |
|
151 | - } |
|
152 | - |
|
153 | - |
|
154 | - /** |
|
155 | - * @param $key |
|
156 | - * @param $value |
|
157 | - * @param bool $override_ee |
|
158 | - * @return void |
|
159 | - */ |
|
160 | - public function setRequestParam($key, $value, $override_ee = false) |
|
161 | - { |
|
162 | - // don't allow "ee" to be overwritten unless explicitly instructed to do so |
|
163 | - if ($key !== 'ee' |
|
164 | - || ($key === 'ee' && empty($this->request['ee'])) |
|
165 | - || ($key === 'ee' && ! empty($this->request['ee']) && $override_ee) |
|
166 | - ) { |
|
167 | - $this->request[ $key ] = $value; |
|
168 | - } |
|
169 | - } |
|
170 | - |
|
171 | - |
|
172 | - /** |
|
173 | - * returns the value for a request param if the given key exists |
|
174 | - * |
|
175 | - * @param $key |
|
176 | - * @param null $default |
|
177 | - * @return mixed |
|
178 | - */ |
|
179 | - public function getRequestParam($key, $default = null) |
|
180 | - { |
|
181 | - return $this->requestParameterDrillDown($key, $default, 'get'); |
|
182 | - } |
|
183 | - |
|
184 | - |
|
185 | - /** |
|
186 | - * check if param exists |
|
187 | - * |
|
188 | - * @param $key |
|
189 | - * @return bool |
|
190 | - */ |
|
191 | - public function requestParamIsSet($key) |
|
192 | - { |
|
193 | - return $this->requestParameterDrillDown($key); |
|
194 | - } |
|
195 | - |
|
196 | - |
|
197 | - /** |
|
198 | - * check if a request parameter exists whose key that matches the supplied wildcard pattern |
|
199 | - * and return the value for the first match found |
|
200 | - * wildcards can be either of the following: |
|
201 | - * ? to represent a single character of any type |
|
202 | - * * to represent one or more characters of any type |
|
203 | - * |
|
204 | - * @param string $pattern |
|
205 | - * @param null|mixed $default |
|
206 | - * @return false|int |
|
207 | - */ |
|
208 | - public function getMatch($pattern, $default = null) |
|
209 | - { |
|
210 | - return $this->requestParameterDrillDown($pattern, $default, 'match'); |
|
211 | - } |
|
212 | - |
|
213 | - |
|
214 | - /** |
|
215 | - * check if a request parameter exists whose key matches the supplied wildcard pattern |
|
216 | - * wildcards can be either of the following: |
|
217 | - * ? to represent a single character of any type |
|
218 | - * * to represent one or more characters of any type |
|
219 | - * returns true if a match is found or false if not |
|
220 | - * |
|
221 | - * @param string $pattern |
|
222 | - * @return false|int |
|
223 | - */ |
|
224 | - public function matches($pattern) |
|
225 | - { |
|
226 | - return $this->requestParameterDrillDown($pattern, null, 'match') !== null; |
|
227 | - } |
|
228 | - |
|
229 | - |
|
230 | - /** |
|
231 | - * @see https://stackoverflow.com/questions/6163055/php-string-matching-with-wildcard |
|
232 | - * @param string $pattern A string including wildcards to be converted to a regex pattern |
|
233 | - * and used to search through the current request's parameter keys |
|
234 | - * @param array $request_params The array of request parameters to search through |
|
235 | - * @param mixed $default [optional] The value to be returned if no match is found. |
|
236 | - * Default is null |
|
237 | - * @param string $return [optional] Controls what kind of value is returned. |
|
238 | - * Options are: |
|
239 | - * 'bool' will return true or false if match is found or not |
|
240 | - * 'key' will return the first key found that matches the supplied pattern |
|
241 | - * 'value' will return the value for the first request parameter |
|
242 | - * whose key matches the supplied pattern |
|
243 | - * Default is 'value' |
|
244 | - * @return boolean|string |
|
245 | - */ |
|
246 | - private function match($pattern, array $request_params, $default = null, $return = 'value') |
|
247 | - { |
|
248 | - $return = in_array($return, array('bool', 'key', 'value'), true) |
|
249 | - ? $return |
|
250 | - : 'is_set'; |
|
251 | - // replace wildcard chars with regex chars |
|
252 | - $pattern = str_replace( |
|
253 | - array("\*", "\?"), |
|
254 | - array('.*', '.'), |
|
255 | - preg_quote($pattern, '/') |
|
256 | - ); |
|
257 | - foreach ($request_params as $key => $request_param) { |
|
258 | - if (preg_match('/^' . $pattern . '$/is', $key)) { |
|
259 | - // return value for request param |
|
260 | - if ($return === 'value') { |
|
261 | - return $request_params[ $key ]; |
|
262 | - } |
|
263 | - // or actual key or true just to indicate it was found |
|
264 | - return $return === 'key' ? $key : true; |
|
265 | - } |
|
266 | - } |
|
267 | - // match not found so return default value or false |
|
268 | - return $return === 'value' ? $default : false; |
|
269 | - } |
|
270 | - |
|
271 | - |
|
272 | - /** |
|
273 | - * the supplied key can be a simple string to represent a "top-level" request parameter |
|
274 | - * or represent a key for a request parameter that is nested deeper within the request parameter array, |
|
275 | - * by using square brackets to surround keys for deeper array elements. |
|
276 | - * For example : |
|
277 | - * if the supplied $key was: "first[second][third]" |
|
278 | - * then this will attempt to drill down into the request parameter array to find a value. |
|
279 | - * Given the following request parameters: |
|
280 | - * array( |
|
281 | - * 'first' => array( |
|
282 | - * 'second' => array( |
|
283 | - * 'third' => 'has a value' |
|
284 | - * ) |
|
285 | - * ) |
|
286 | - * ) |
|
287 | - * would return true if default parameters were set |
|
288 | - * |
|
289 | - * @param string $callback |
|
290 | - * @param $key |
|
291 | - * @param null $default |
|
292 | - * @param array $request_params |
|
293 | - * @return bool|mixed|null |
|
294 | - */ |
|
295 | - private function requestParameterDrillDown( |
|
296 | - $key, |
|
297 | - $default = null, |
|
298 | - $callback = 'is_set', |
|
299 | - array $request_params = array() |
|
300 | - ) { |
|
301 | - $callback = in_array($callback, array('is_set', 'get', 'match'), true) |
|
302 | - ? $callback |
|
303 | - : 'is_set'; |
|
304 | - $request_params = ! empty($request_params) |
|
305 | - ? $request_params |
|
306 | - : $this->request; |
|
307 | - // does incoming key represent an array like 'first[second][third]' ? |
|
308 | - if (strpos($key, '[') !== false) { |
|
309 | - // turn it into an actual array |
|
310 | - $key = str_replace(']', '', $key); |
|
311 | - $keys = explode('[', $key); |
|
312 | - $key = array_shift($keys); |
|
313 | - if ($callback === 'match') { |
|
314 | - $real_key = $this->match($key, $request_params, $default, 'key'); |
|
315 | - $key = $real_key ? $real_key : $key; |
|
316 | - } |
|
317 | - // check if top level key exists |
|
318 | - if (isset($request_params[ $key ])) { |
|
319 | - // build a new key to pass along like: 'second[third]' |
|
320 | - // or just 'second' depending on depth of keys |
|
321 | - $key_string = array_shift($keys); |
|
322 | - if (! empty($keys)) { |
|
323 | - $key_string .= '[' . implode('][', $keys) . ']'; |
|
324 | - } |
|
325 | - return $this->requestParameterDrillDown( |
|
326 | - $key_string, |
|
327 | - $default, |
|
328 | - $callback, |
|
329 | - $request_params[ $key ] |
|
330 | - ); |
|
331 | - } |
|
332 | - } |
|
333 | - if ($callback === 'is_set') { |
|
334 | - return isset($request_params[ $key ]); |
|
335 | - } |
|
336 | - if ($callback === 'match') { |
|
337 | - return $this->match($key, $request_params, $default); |
|
338 | - } |
|
339 | - return isset($request_params[ $key ]) |
|
340 | - ? $request_params[ $key ] |
|
341 | - : $default; |
|
342 | - } |
|
343 | - |
|
344 | - |
|
345 | - /** |
|
346 | - * remove param |
|
347 | - * |
|
348 | - * @param $key |
|
349 | - * @param bool $unset_from_global_too |
|
350 | - */ |
|
351 | - public function unSetRequestParam($key, $unset_from_global_too = false) |
|
352 | - { |
|
353 | - unset($this->request[ $key ]); |
|
354 | - if ($unset_from_global_too) { |
|
355 | - unset($_REQUEST[ $key ]); |
|
356 | - } |
|
357 | - } |
|
358 | - |
|
359 | - |
|
360 | - /** |
|
361 | - * @return string |
|
362 | - */ |
|
363 | - public function ipAddress() |
|
364 | - { |
|
365 | - return $this->ip_address; |
|
366 | - } |
|
367 | - |
|
368 | - |
|
369 | - /** |
|
370 | - * attempt to get IP address of current visitor from server |
|
371 | - * plz see: http://stackoverflow.com/a/2031935/1475279 |
|
372 | - * |
|
373 | - * @access public |
|
374 | - * @return string |
|
375 | - */ |
|
376 | - private function visitorIp() |
|
377 | - { |
|
378 | - $visitor_ip = '0.0.0.0'; |
|
379 | - $server_keys = array( |
|
380 | - 'HTTP_CLIENT_IP', |
|
381 | - 'HTTP_X_FORWARDED_FOR', |
|
382 | - 'HTTP_X_FORWARDED', |
|
383 | - 'HTTP_X_CLUSTER_CLIENT_IP', |
|
384 | - 'HTTP_FORWARDED_FOR', |
|
385 | - 'HTTP_FORWARDED', |
|
386 | - 'REMOTE_ADDR', |
|
387 | - ); |
|
388 | - foreach ($server_keys as $key) { |
|
389 | - if (isset($this->server[ $key ])) { |
|
390 | - foreach (array_map('trim', explode(',', $this->server[ $key ])) as $ip) { |
|
391 | - if ($ip === '127.0.0.1' || filter_var($ip, FILTER_VALIDATE_IP) !== false) { |
|
392 | - $visitor_ip = $ip; |
|
393 | - } |
|
394 | - } |
|
395 | - } |
|
396 | - } |
|
397 | - return $visitor_ip; |
|
398 | - } |
|
399 | - |
|
400 | - |
|
401 | - /** |
|
402 | - * @return string |
|
403 | - */ |
|
404 | - public function requestUri() |
|
405 | - { |
|
406 | - $request_uri = filter_input( |
|
407 | - INPUT_SERVER, |
|
408 | - 'REQUEST_URI', |
|
409 | - FILTER_SANITIZE_URL, |
|
410 | - FILTER_NULL_ON_FAILURE |
|
411 | - ); |
|
412 | - if (empty($request_uri)) { |
|
413 | - // fallback sanitization if the above fails |
|
414 | - $request_uri = wp_sanitize_redirect($this->server['REQUEST_URI']); |
|
415 | - } |
|
416 | - return $request_uri; |
|
417 | - } |
|
418 | - |
|
419 | - |
|
420 | - /** |
|
421 | - * @return string |
|
422 | - */ |
|
423 | - public function userAgent() |
|
424 | - { |
|
425 | - return $this->user_agent; |
|
426 | - } |
|
427 | - |
|
428 | - |
|
429 | - /** |
|
430 | - * @param string $user_agent |
|
431 | - */ |
|
432 | - public function setUserAgent($user_agent = '') |
|
433 | - { |
|
434 | - if ($user_agent === '' || ! is_string($user_agent)) { |
|
435 | - $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? (string) esc_attr($_SERVER['HTTP_USER_AGENT']) : ''; |
|
436 | - } |
|
437 | - $this->user_agent = $user_agent; |
|
438 | - } |
|
439 | - |
|
440 | - |
|
441 | - /** |
|
442 | - * @return bool |
|
443 | - */ |
|
444 | - public function isBot() |
|
445 | - { |
|
446 | - return $this->is_bot; |
|
447 | - } |
|
448 | - |
|
449 | - |
|
450 | - /** |
|
451 | - * @param bool $is_bot |
|
452 | - */ |
|
453 | - public function setIsBot($is_bot) |
|
454 | - { |
|
455 | - $this->is_bot = filter_var($is_bot, FILTER_VALIDATE_BOOLEAN); |
|
456 | - } |
|
457 | - |
|
458 | - |
|
459 | - /** |
|
460 | - * @return bool |
|
461 | - */ |
|
462 | - public function isActivation() |
|
463 | - { |
|
464 | - return $this->request_type->isActivation(); |
|
465 | - } |
|
466 | - |
|
467 | - |
|
468 | - /** |
|
469 | - * @param $is_activation |
|
470 | - * @return bool |
|
471 | - */ |
|
472 | - public function setIsActivation($is_activation) |
|
473 | - { |
|
474 | - return $this->request_type->setIsActivation($is_activation); |
|
475 | - } |
|
476 | - |
|
477 | - |
|
478 | - /** |
|
479 | - * @return bool |
|
480 | - */ |
|
481 | - public function isAdmin() |
|
482 | - { |
|
483 | - return $this->request_type->isAdmin(); |
|
484 | - } |
|
485 | - |
|
486 | - |
|
487 | - /** |
|
488 | - * @return bool |
|
489 | - */ |
|
490 | - public function isAdminAjax() |
|
491 | - { |
|
492 | - return $this->request_type->isAdminAjax(); |
|
493 | - } |
|
494 | - |
|
495 | - |
|
496 | - /** |
|
497 | - * @return bool |
|
498 | - */ |
|
499 | - public function isAjax() |
|
500 | - { |
|
501 | - return $this->request_type->isAjax(); |
|
502 | - } |
|
503 | - |
|
504 | - |
|
505 | - /** |
|
506 | - * @return bool |
|
507 | - */ |
|
508 | - public function isEeAjax() |
|
509 | - { |
|
510 | - return $this->request_type->isEeAjax(); |
|
511 | - } |
|
512 | - |
|
513 | - |
|
514 | - /** |
|
515 | - * @return bool |
|
516 | - */ |
|
517 | - public function isOtherAjax() |
|
518 | - { |
|
519 | - return $this->request_type->isOtherAjax(); |
|
520 | - } |
|
521 | - |
|
522 | - |
|
523 | - /** |
|
524 | - * @return bool |
|
525 | - */ |
|
526 | - public function isApi() |
|
527 | - { |
|
528 | - return $this->request_type->isApi(); |
|
529 | - } |
|
530 | - |
|
531 | - |
|
532 | - /** |
|
533 | - * @return bool |
|
534 | - */ |
|
535 | - public function isCli() |
|
536 | - { |
|
537 | - return $this->request_type->isCli(); |
|
538 | - } |
|
539 | - |
|
540 | - |
|
541 | - /** |
|
542 | - * @return bool |
|
543 | - */ |
|
544 | - public function isCron() |
|
545 | - { |
|
546 | - return $this->request_type->isCron(); |
|
547 | - } |
|
548 | - |
|
549 | - |
|
550 | - /** |
|
551 | - * @return bool |
|
552 | - */ |
|
553 | - public function isFeed() |
|
554 | - { |
|
555 | - return $this->request_type->isFeed(); |
|
556 | - } |
|
557 | - |
|
558 | - |
|
559 | - /** |
|
560 | - * @return bool |
|
561 | - */ |
|
562 | - public function isFrontend() |
|
563 | - { |
|
564 | - return $this->request_type->isFrontend(); |
|
565 | - } |
|
566 | - |
|
567 | - |
|
568 | - /** |
|
569 | - * @return bool |
|
570 | - */ |
|
571 | - public function isFrontAjax() |
|
572 | - { |
|
573 | - return $this->request_type->isFrontAjax(); |
|
574 | - } |
|
575 | - |
|
576 | - |
|
577 | - /** |
|
578 | - * @return bool |
|
579 | - */ |
|
580 | - public function isIframe() |
|
581 | - { |
|
582 | - return $this->request_type->isIframe(); |
|
583 | - } |
|
584 | - |
|
585 | - |
|
586 | - /** |
|
587 | - * @return bool |
|
588 | - */ |
|
589 | - public function isWordPressScrape() |
|
590 | - { |
|
591 | - return $this->request_type->isWordPressScrape(); |
|
592 | - } |
|
593 | - |
|
594 | - |
|
595 | - /** |
|
596 | - * @return string |
|
597 | - */ |
|
598 | - public function slug() |
|
599 | - { |
|
600 | - return $this->request_type->slug(); |
|
601 | - } |
|
20 | + /** |
|
21 | + * $_GET parameters |
|
22 | + * |
|
23 | + * @var array $get |
|
24 | + */ |
|
25 | + private $get; |
|
26 | + |
|
27 | + /** |
|
28 | + * $_POST parameters |
|
29 | + * |
|
30 | + * @var array $post |
|
31 | + */ |
|
32 | + private $post; |
|
33 | + |
|
34 | + /** |
|
35 | + * $_COOKIE parameters |
|
36 | + * |
|
37 | + * @var array $cookie |
|
38 | + */ |
|
39 | + private $cookie; |
|
40 | + |
|
41 | + /** |
|
42 | + * $_SERVER parameters |
|
43 | + * |
|
44 | + * @var array $server |
|
45 | + */ |
|
46 | + private $server; |
|
47 | + |
|
48 | + /** |
|
49 | + * $_REQUEST parameters |
|
50 | + * |
|
51 | + * @var array $request |
|
52 | + */ |
|
53 | + private $request; |
|
54 | + |
|
55 | + /** |
|
56 | + * @var RequestTypeContextCheckerInterface |
|
57 | + */ |
|
58 | + private $request_type; |
|
59 | + |
|
60 | + /** |
|
61 | + * IP address for request |
|
62 | + * |
|
63 | + * @var string $ip_address |
|
64 | + */ |
|
65 | + private $ip_address; |
|
66 | + |
|
67 | + /** |
|
68 | + * @var string $user_agent |
|
69 | + */ |
|
70 | + private $user_agent; |
|
71 | + |
|
72 | + /** |
|
73 | + * true if current user appears to be some kind of bot |
|
74 | + * |
|
75 | + * @var bool $is_bot |
|
76 | + */ |
|
77 | + private $is_bot; |
|
78 | + |
|
79 | + |
|
80 | + /** |
|
81 | + * @param array $get |
|
82 | + * @param array $post |
|
83 | + * @param array $cookie |
|
84 | + * @param array $server |
|
85 | + */ |
|
86 | + public function __construct(array $get, array $post, array $cookie, array $server) |
|
87 | + { |
|
88 | + // grab request vars |
|
89 | + $this->get = $get; |
|
90 | + $this->post = $post; |
|
91 | + $this->cookie = $cookie; |
|
92 | + $this->server = $server; |
|
93 | + $this->request = array_merge($this->get, $this->post); |
|
94 | + $this->ip_address = $this->visitorIp(); |
|
95 | + } |
|
96 | + |
|
97 | + |
|
98 | + /** |
|
99 | + * @param RequestTypeContextCheckerInterface $type |
|
100 | + */ |
|
101 | + public function setRequestTypeContextChecker(RequestTypeContextCheckerInterface $type) |
|
102 | + { |
|
103 | + $this->request_type = $type; |
|
104 | + } |
|
105 | + |
|
106 | + |
|
107 | + /** |
|
108 | + * @return array |
|
109 | + */ |
|
110 | + public function getParams() |
|
111 | + { |
|
112 | + return $this->get; |
|
113 | + } |
|
114 | + |
|
115 | + |
|
116 | + /** |
|
117 | + * @return array |
|
118 | + */ |
|
119 | + public function postParams() |
|
120 | + { |
|
121 | + return $this->post; |
|
122 | + } |
|
123 | + |
|
124 | + |
|
125 | + /** |
|
126 | + * @return array |
|
127 | + */ |
|
128 | + public function cookieParams() |
|
129 | + { |
|
130 | + return $this->cookie; |
|
131 | + } |
|
132 | + |
|
133 | + |
|
134 | + /** |
|
135 | + * @return array |
|
136 | + */ |
|
137 | + public function serverParams() |
|
138 | + { |
|
139 | + return $this->server; |
|
140 | + } |
|
141 | + |
|
142 | + |
|
143 | + /** |
|
144 | + * returns contents of $_REQUEST |
|
145 | + * |
|
146 | + * @return array |
|
147 | + */ |
|
148 | + public function requestParams() |
|
149 | + { |
|
150 | + return $this->request; |
|
151 | + } |
|
152 | + |
|
153 | + |
|
154 | + /** |
|
155 | + * @param $key |
|
156 | + * @param $value |
|
157 | + * @param bool $override_ee |
|
158 | + * @return void |
|
159 | + */ |
|
160 | + public function setRequestParam($key, $value, $override_ee = false) |
|
161 | + { |
|
162 | + // don't allow "ee" to be overwritten unless explicitly instructed to do so |
|
163 | + if ($key !== 'ee' |
|
164 | + || ($key === 'ee' && empty($this->request['ee'])) |
|
165 | + || ($key === 'ee' && ! empty($this->request['ee']) && $override_ee) |
|
166 | + ) { |
|
167 | + $this->request[ $key ] = $value; |
|
168 | + } |
|
169 | + } |
|
170 | + |
|
171 | + |
|
172 | + /** |
|
173 | + * returns the value for a request param if the given key exists |
|
174 | + * |
|
175 | + * @param $key |
|
176 | + * @param null $default |
|
177 | + * @return mixed |
|
178 | + */ |
|
179 | + public function getRequestParam($key, $default = null) |
|
180 | + { |
|
181 | + return $this->requestParameterDrillDown($key, $default, 'get'); |
|
182 | + } |
|
183 | + |
|
184 | + |
|
185 | + /** |
|
186 | + * check if param exists |
|
187 | + * |
|
188 | + * @param $key |
|
189 | + * @return bool |
|
190 | + */ |
|
191 | + public function requestParamIsSet($key) |
|
192 | + { |
|
193 | + return $this->requestParameterDrillDown($key); |
|
194 | + } |
|
195 | + |
|
196 | + |
|
197 | + /** |
|
198 | + * check if a request parameter exists whose key that matches the supplied wildcard pattern |
|
199 | + * and return the value for the first match found |
|
200 | + * wildcards can be either of the following: |
|
201 | + * ? to represent a single character of any type |
|
202 | + * * to represent one or more characters of any type |
|
203 | + * |
|
204 | + * @param string $pattern |
|
205 | + * @param null|mixed $default |
|
206 | + * @return false|int |
|
207 | + */ |
|
208 | + public function getMatch($pattern, $default = null) |
|
209 | + { |
|
210 | + return $this->requestParameterDrillDown($pattern, $default, 'match'); |
|
211 | + } |
|
212 | + |
|
213 | + |
|
214 | + /** |
|
215 | + * check if a request parameter exists whose key matches the supplied wildcard pattern |
|
216 | + * wildcards can be either of the following: |
|
217 | + * ? to represent a single character of any type |
|
218 | + * * to represent one or more characters of any type |
|
219 | + * returns true if a match is found or false if not |
|
220 | + * |
|
221 | + * @param string $pattern |
|
222 | + * @return false|int |
|
223 | + */ |
|
224 | + public function matches($pattern) |
|
225 | + { |
|
226 | + return $this->requestParameterDrillDown($pattern, null, 'match') !== null; |
|
227 | + } |
|
228 | + |
|
229 | + |
|
230 | + /** |
|
231 | + * @see https://stackoverflow.com/questions/6163055/php-string-matching-with-wildcard |
|
232 | + * @param string $pattern A string including wildcards to be converted to a regex pattern |
|
233 | + * and used to search through the current request's parameter keys |
|
234 | + * @param array $request_params The array of request parameters to search through |
|
235 | + * @param mixed $default [optional] The value to be returned if no match is found. |
|
236 | + * Default is null |
|
237 | + * @param string $return [optional] Controls what kind of value is returned. |
|
238 | + * Options are: |
|
239 | + * 'bool' will return true or false if match is found or not |
|
240 | + * 'key' will return the first key found that matches the supplied pattern |
|
241 | + * 'value' will return the value for the first request parameter |
|
242 | + * whose key matches the supplied pattern |
|
243 | + * Default is 'value' |
|
244 | + * @return boolean|string |
|
245 | + */ |
|
246 | + private function match($pattern, array $request_params, $default = null, $return = 'value') |
|
247 | + { |
|
248 | + $return = in_array($return, array('bool', 'key', 'value'), true) |
|
249 | + ? $return |
|
250 | + : 'is_set'; |
|
251 | + // replace wildcard chars with regex chars |
|
252 | + $pattern = str_replace( |
|
253 | + array("\*", "\?"), |
|
254 | + array('.*', '.'), |
|
255 | + preg_quote($pattern, '/') |
|
256 | + ); |
|
257 | + foreach ($request_params as $key => $request_param) { |
|
258 | + if (preg_match('/^' . $pattern . '$/is', $key)) { |
|
259 | + // return value for request param |
|
260 | + if ($return === 'value') { |
|
261 | + return $request_params[ $key ]; |
|
262 | + } |
|
263 | + // or actual key or true just to indicate it was found |
|
264 | + return $return === 'key' ? $key : true; |
|
265 | + } |
|
266 | + } |
|
267 | + // match not found so return default value or false |
|
268 | + return $return === 'value' ? $default : false; |
|
269 | + } |
|
270 | + |
|
271 | + |
|
272 | + /** |
|
273 | + * the supplied key can be a simple string to represent a "top-level" request parameter |
|
274 | + * or represent a key for a request parameter that is nested deeper within the request parameter array, |
|
275 | + * by using square brackets to surround keys for deeper array elements. |
|
276 | + * For example : |
|
277 | + * if the supplied $key was: "first[second][third]" |
|
278 | + * then this will attempt to drill down into the request parameter array to find a value. |
|
279 | + * Given the following request parameters: |
|
280 | + * array( |
|
281 | + * 'first' => array( |
|
282 | + * 'second' => array( |
|
283 | + * 'third' => 'has a value' |
|
284 | + * ) |
|
285 | + * ) |
|
286 | + * ) |
|
287 | + * would return true if default parameters were set |
|
288 | + * |
|
289 | + * @param string $callback |
|
290 | + * @param $key |
|
291 | + * @param null $default |
|
292 | + * @param array $request_params |
|
293 | + * @return bool|mixed|null |
|
294 | + */ |
|
295 | + private function requestParameterDrillDown( |
|
296 | + $key, |
|
297 | + $default = null, |
|
298 | + $callback = 'is_set', |
|
299 | + array $request_params = array() |
|
300 | + ) { |
|
301 | + $callback = in_array($callback, array('is_set', 'get', 'match'), true) |
|
302 | + ? $callback |
|
303 | + : 'is_set'; |
|
304 | + $request_params = ! empty($request_params) |
|
305 | + ? $request_params |
|
306 | + : $this->request; |
|
307 | + // does incoming key represent an array like 'first[second][third]' ? |
|
308 | + if (strpos($key, '[') !== false) { |
|
309 | + // turn it into an actual array |
|
310 | + $key = str_replace(']', '', $key); |
|
311 | + $keys = explode('[', $key); |
|
312 | + $key = array_shift($keys); |
|
313 | + if ($callback === 'match') { |
|
314 | + $real_key = $this->match($key, $request_params, $default, 'key'); |
|
315 | + $key = $real_key ? $real_key : $key; |
|
316 | + } |
|
317 | + // check if top level key exists |
|
318 | + if (isset($request_params[ $key ])) { |
|
319 | + // build a new key to pass along like: 'second[third]' |
|
320 | + // or just 'second' depending on depth of keys |
|
321 | + $key_string = array_shift($keys); |
|
322 | + if (! empty($keys)) { |
|
323 | + $key_string .= '[' . implode('][', $keys) . ']'; |
|
324 | + } |
|
325 | + return $this->requestParameterDrillDown( |
|
326 | + $key_string, |
|
327 | + $default, |
|
328 | + $callback, |
|
329 | + $request_params[ $key ] |
|
330 | + ); |
|
331 | + } |
|
332 | + } |
|
333 | + if ($callback === 'is_set') { |
|
334 | + return isset($request_params[ $key ]); |
|
335 | + } |
|
336 | + if ($callback === 'match') { |
|
337 | + return $this->match($key, $request_params, $default); |
|
338 | + } |
|
339 | + return isset($request_params[ $key ]) |
|
340 | + ? $request_params[ $key ] |
|
341 | + : $default; |
|
342 | + } |
|
343 | + |
|
344 | + |
|
345 | + /** |
|
346 | + * remove param |
|
347 | + * |
|
348 | + * @param $key |
|
349 | + * @param bool $unset_from_global_too |
|
350 | + */ |
|
351 | + public function unSetRequestParam($key, $unset_from_global_too = false) |
|
352 | + { |
|
353 | + unset($this->request[ $key ]); |
|
354 | + if ($unset_from_global_too) { |
|
355 | + unset($_REQUEST[ $key ]); |
|
356 | + } |
|
357 | + } |
|
358 | + |
|
359 | + |
|
360 | + /** |
|
361 | + * @return string |
|
362 | + */ |
|
363 | + public function ipAddress() |
|
364 | + { |
|
365 | + return $this->ip_address; |
|
366 | + } |
|
367 | + |
|
368 | + |
|
369 | + /** |
|
370 | + * attempt to get IP address of current visitor from server |
|
371 | + * plz see: http://stackoverflow.com/a/2031935/1475279 |
|
372 | + * |
|
373 | + * @access public |
|
374 | + * @return string |
|
375 | + */ |
|
376 | + private function visitorIp() |
|
377 | + { |
|
378 | + $visitor_ip = '0.0.0.0'; |
|
379 | + $server_keys = array( |
|
380 | + 'HTTP_CLIENT_IP', |
|
381 | + 'HTTP_X_FORWARDED_FOR', |
|
382 | + 'HTTP_X_FORWARDED', |
|
383 | + 'HTTP_X_CLUSTER_CLIENT_IP', |
|
384 | + 'HTTP_FORWARDED_FOR', |
|
385 | + 'HTTP_FORWARDED', |
|
386 | + 'REMOTE_ADDR', |
|
387 | + ); |
|
388 | + foreach ($server_keys as $key) { |
|
389 | + if (isset($this->server[ $key ])) { |
|
390 | + foreach (array_map('trim', explode(',', $this->server[ $key ])) as $ip) { |
|
391 | + if ($ip === '127.0.0.1' || filter_var($ip, FILTER_VALIDATE_IP) !== false) { |
|
392 | + $visitor_ip = $ip; |
|
393 | + } |
|
394 | + } |
|
395 | + } |
|
396 | + } |
|
397 | + return $visitor_ip; |
|
398 | + } |
|
399 | + |
|
400 | + |
|
401 | + /** |
|
402 | + * @return string |
|
403 | + */ |
|
404 | + public function requestUri() |
|
405 | + { |
|
406 | + $request_uri = filter_input( |
|
407 | + INPUT_SERVER, |
|
408 | + 'REQUEST_URI', |
|
409 | + FILTER_SANITIZE_URL, |
|
410 | + FILTER_NULL_ON_FAILURE |
|
411 | + ); |
|
412 | + if (empty($request_uri)) { |
|
413 | + // fallback sanitization if the above fails |
|
414 | + $request_uri = wp_sanitize_redirect($this->server['REQUEST_URI']); |
|
415 | + } |
|
416 | + return $request_uri; |
|
417 | + } |
|
418 | + |
|
419 | + |
|
420 | + /** |
|
421 | + * @return string |
|
422 | + */ |
|
423 | + public function userAgent() |
|
424 | + { |
|
425 | + return $this->user_agent; |
|
426 | + } |
|
427 | + |
|
428 | + |
|
429 | + /** |
|
430 | + * @param string $user_agent |
|
431 | + */ |
|
432 | + public function setUserAgent($user_agent = '') |
|
433 | + { |
|
434 | + if ($user_agent === '' || ! is_string($user_agent)) { |
|
435 | + $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? (string) esc_attr($_SERVER['HTTP_USER_AGENT']) : ''; |
|
436 | + } |
|
437 | + $this->user_agent = $user_agent; |
|
438 | + } |
|
439 | + |
|
440 | + |
|
441 | + /** |
|
442 | + * @return bool |
|
443 | + */ |
|
444 | + public function isBot() |
|
445 | + { |
|
446 | + return $this->is_bot; |
|
447 | + } |
|
448 | + |
|
449 | + |
|
450 | + /** |
|
451 | + * @param bool $is_bot |
|
452 | + */ |
|
453 | + public function setIsBot($is_bot) |
|
454 | + { |
|
455 | + $this->is_bot = filter_var($is_bot, FILTER_VALIDATE_BOOLEAN); |
|
456 | + } |
|
457 | + |
|
458 | + |
|
459 | + /** |
|
460 | + * @return bool |
|
461 | + */ |
|
462 | + public function isActivation() |
|
463 | + { |
|
464 | + return $this->request_type->isActivation(); |
|
465 | + } |
|
466 | + |
|
467 | + |
|
468 | + /** |
|
469 | + * @param $is_activation |
|
470 | + * @return bool |
|
471 | + */ |
|
472 | + public function setIsActivation($is_activation) |
|
473 | + { |
|
474 | + return $this->request_type->setIsActivation($is_activation); |
|
475 | + } |
|
476 | + |
|
477 | + |
|
478 | + /** |
|
479 | + * @return bool |
|
480 | + */ |
|
481 | + public function isAdmin() |
|
482 | + { |
|
483 | + return $this->request_type->isAdmin(); |
|
484 | + } |
|
485 | + |
|
486 | + |
|
487 | + /** |
|
488 | + * @return bool |
|
489 | + */ |
|
490 | + public function isAdminAjax() |
|
491 | + { |
|
492 | + return $this->request_type->isAdminAjax(); |
|
493 | + } |
|
494 | + |
|
495 | + |
|
496 | + /** |
|
497 | + * @return bool |
|
498 | + */ |
|
499 | + public function isAjax() |
|
500 | + { |
|
501 | + return $this->request_type->isAjax(); |
|
502 | + } |
|
503 | + |
|
504 | + |
|
505 | + /** |
|
506 | + * @return bool |
|
507 | + */ |
|
508 | + public function isEeAjax() |
|
509 | + { |
|
510 | + return $this->request_type->isEeAjax(); |
|
511 | + } |
|
512 | + |
|
513 | + |
|
514 | + /** |
|
515 | + * @return bool |
|
516 | + */ |
|
517 | + public function isOtherAjax() |
|
518 | + { |
|
519 | + return $this->request_type->isOtherAjax(); |
|
520 | + } |
|
521 | + |
|
522 | + |
|
523 | + /** |
|
524 | + * @return bool |
|
525 | + */ |
|
526 | + public function isApi() |
|
527 | + { |
|
528 | + return $this->request_type->isApi(); |
|
529 | + } |
|
530 | + |
|
531 | + |
|
532 | + /** |
|
533 | + * @return bool |
|
534 | + */ |
|
535 | + public function isCli() |
|
536 | + { |
|
537 | + return $this->request_type->isCli(); |
|
538 | + } |
|
539 | + |
|
540 | + |
|
541 | + /** |
|
542 | + * @return bool |
|
543 | + */ |
|
544 | + public function isCron() |
|
545 | + { |
|
546 | + return $this->request_type->isCron(); |
|
547 | + } |
|
548 | + |
|
549 | + |
|
550 | + /** |
|
551 | + * @return bool |
|
552 | + */ |
|
553 | + public function isFeed() |
|
554 | + { |
|
555 | + return $this->request_type->isFeed(); |
|
556 | + } |
|
557 | + |
|
558 | + |
|
559 | + /** |
|
560 | + * @return bool |
|
561 | + */ |
|
562 | + public function isFrontend() |
|
563 | + { |
|
564 | + return $this->request_type->isFrontend(); |
|
565 | + } |
|
566 | + |
|
567 | + |
|
568 | + /** |
|
569 | + * @return bool |
|
570 | + */ |
|
571 | + public function isFrontAjax() |
|
572 | + { |
|
573 | + return $this->request_type->isFrontAjax(); |
|
574 | + } |
|
575 | + |
|
576 | + |
|
577 | + /** |
|
578 | + * @return bool |
|
579 | + */ |
|
580 | + public function isIframe() |
|
581 | + { |
|
582 | + return $this->request_type->isIframe(); |
|
583 | + } |
|
584 | + |
|
585 | + |
|
586 | + /** |
|
587 | + * @return bool |
|
588 | + */ |
|
589 | + public function isWordPressScrape() |
|
590 | + { |
|
591 | + return $this->request_type->isWordPressScrape(); |
|
592 | + } |
|
593 | + |
|
594 | + |
|
595 | + /** |
|
596 | + * @return string |
|
597 | + */ |
|
598 | + public function slug() |
|
599 | + { |
|
600 | + return $this->request_type->slug(); |
|
601 | + } |
|
602 | 602 | } |