PluginProbe
Booking Calendar / 10.1.3
Booking Calendar v10.1.3
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
booking / includes / _capacity / resource_support.php

resource_support.php in Booking Calendar 10.1.3, at includes/_capacity/resource_support.php

327 lines 10.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly //FixIn: 9.8.0.4
4
5
6 class WPBC_RESOURCE_SUPPORT {
7
8 public $resource_id_arr;
9 public $as_single_resource;
10
11 private $bookings_sql_obj_arr;
12
13 function __construct( $params =array() ) {
14
15 $defaults = array(
16 'resource_id' => 1 // CSD | D
17 , 'as_single_resource' => false // If true, then skip child booking resources
18 );
19 $params = wp_parse_args( $params, $defaults );
20
21 $this->resource_id_arr = $params['resource_id'];
22 $this->as_single_resource = $params['as_single_resource'];
23
24 if ( ! class_exists( 'wpdev_bk_personal' ) ) {
25 $this->bookings_sql_obj_arr = $this->get_free_resource();
26 } else {
27 $this->bookings_sql_obj_arr = $this->get__sql__booking_resources__arr();
28 }
29
30 $this->reindex_booking_resources__by__resource_id();
31
32 $this->update__capacity__in_booking_resources();
33 }
34
35
36 /**
37 * Get default data for Free version
38 * @return array
39 */
40 private function get_free_resource() {
41
42 $free_resource_obj = new stdClass();
43 $free_resource_obj->booking_type_id = 1;
44 $free_resource_obj->default_form = 'standard';
45 $free_resource_obj->title = __( 'Default', 'booking' );
46 $free_resource_obj->users = 1;
47 $free_resource_obj->import = '';
48 $free_resource_obj->export = '';
49 $free_resource_obj->cost = 0;
50 $free_resource_obj->prioritet = 1;
51 $free_resource_obj->parent = 0;
52 $free_resource_obj->visitors = 1;
53 $free_resource_obj->capacity = 1;
54
55 return array( $free_resource_obj );
56 }
57
58
59 /**
60 * Get booking resources from the DB, based on request parameters
61 *
62 * @return array|mixed|object|stdClass[]|null
63 */
64 function get__sql__booking_resources__arr() {
65
66 // CACHE - GET :: check if such request was cached and get it ----------------------------------------------- //FixIn: 9.7.3.14
67 $params_for_cache = maybe_serialize( $this->resource_id_arr );
68 $cache_result = wpbc_cache__get( 'WPBC_RESOURCE_SUPPORT__sql', $params_for_cache );
69 if ( ! is_null( $cache_result ) ) {
70 return $cache_result;
71 }
72 // -----------------------------------------------------------------------------------------------------------------
73
74 global $wpdb;
75
76 // Init params
77 $params = array(
78 'resource_id' => implode( ',', $this->resource_id_arr )
79 );
80 // S a n i t i z e
81 $params_rules = array(
82 'resource_id' => array( 'validate' => 'digit_or_csd', 'default' => 1 )
83 );
84 $params = wpbc_sanitize_params_in_arr( $params, $params_rules );
85
86 // S Q L
87 $sql = array();
88 $sql_args = array();
89
90 $sql['start_select'] = "SELECT * "; // "SELECT DISTINCT calendar_date ";
91 $sql['from'] = "FROM {$wpdb->prefix}bookingtypes ";
92
93 // W H E R E
94 $sql['where'] = 'WHERE ( 1 = 1 ) ';
95 if ( ! empty( $params['resource_id'] ) ) {
96 $sql['where'] .= " AND ( ";
97 $sql['where'] .= " booking_type_id IN ( {$params['resource_id']} ) ";
98 if ( ( class_exists( 'wpdev_bk_biz_l' ) ) && ( ! $this->as_single_resource ) ) {
99 $sql['where'] .= " OR parent IN ( {$params['resource_id']} ) ";
100 }
101 $sql['where'] .= " ) ";
102 }
103 /**
104 *
105 if ( '' != $params['prop_value'] ) {
106 $sql['where'] .= " AND ( prop_value = %s ) ";
107 $sql_args[] = $params['prop_value'];
108 }
109 */
110
111 // O R D E R
112 if ( class_exists( 'wpdev_bk_biz_l' ) ) {
113 $sql['order'] = " ORDER BY parent, prioritet, title, booking_type_id";
114 } else {
115 $sql['order'] = " ORDER BY title, booking_type_id";
116 }
117
118 // L I M I T
119 $sql['limit'] = ''; /**
120 * $sql['limit'] = " LIMIT %d, %d ";
121 * $sql_args[] = ( $params['page_num'] - 1 ) * $params['page_items_count'];
122 * $sql_args[] = $params['page_items_count'];
123 */
124
125
126 /**
127 * Good Practice: https://blog.ircmaxell.com/2017/10/disclosure-wordpress-wpdb-sql-injection-technical.html
128 *
129 * $sql['where'] .= "( bk.form LIKE %s ) ";
130 * $sql_args[] = '%' . $wpdb->esc_like( $params['keyword'] ) . '%';
131 *
132 * if ( is_numeric( $params['keyword'] ) ) {
133 * $sql['where'] .= " OR ( bk.booking_id = %d ) ";
134 * $sql_args[] = intval( $params['keyword'] );
135 * }
136 *
137 */
138 if ( empty( $sql_args ) ) {
139 $sql_prepared = $sql['start_select'] . $sql['from'] . $sql['where'] . $sql['order'] . $sql['limit'];
140 } else {
141 $sql_prepared = $wpdb->prepare( $sql['start_select'] . $sql['from'] . $sql['where'] . $sql['order'] . $sql['limit'] , $sql_args );
142 }
143
144 $bookings_sql_obj = $wpdb->get_results( $sql_prepared );
145
146 // CACHE - SAVE :: ------------------------------------------------------------------------------------------------
147 $cache_result = wpbc_cache__save( 'WPBC_RESOURCE_SUPPORT__sql', $params_for_cache, $bookings_sql_obj );
148
149 return $bookings_sql_obj;
150 }
151
152
153 /**
154 * Update capacity property to all booking resources
155 * @return void
156 */
157 private function update__capacity__in_booking_resources(){
158
159 foreach ( $this->bookings_sql_obj_arr as $key => $resource_obj ) {
160
161 $is_this_child = ( ( isset( $resource_obj->parent ) ) && ( 0 != $resource_obj->parent ) ) ? true : false;
162 $resource_id = $resource_obj->booking_type_id;
163 $capacity_count = 1;
164
165 if ( ( ! $is_this_child ) && ( class_exists( 'wpdev_bk_biz_l' ) ) ) {
166 foreach ( $this->bookings_sql_obj_arr as $child_key => $child_resource_obj ) {
167 if ( ( isset( $resource_obj->parent ) ) && ( $resource_id == $child_resource_obj->parent ) ) {
168 $capacity_count++;
169 }
170 }
171 }
172
173 $this->bookings_sql_obj_arr[ $key ]->capacity = $capacity_count;
174 }
175 }
176
177
178 /**
179 * Reindex booking resource - set keys as resource_id
180 * @return array
181 */
182 private function reindex_booking_resources__by__resource_id (){
183
184 $resource__arr = array();
185 foreach ( $this->bookings_sql_obj_arr as $sort_key => $resource_obj ) {
186 $resource_obj->sort_key=$sort_key;
187 $resource__arr[ $resource_obj->booking_type_id ] = $resource_obj;
188 }
189 $this->bookings_sql_obj_arr = $resource__arr;
190
191 return $this->bookings_sql_obj_arr;
192 }
193
194
195 /**
196 * Get booking resource object with all properties from DB
197 *
198 * @param int $resource_id
199 *
200 * @return false|mixed|stdClass if not fount then false
201 */
202 function get__booking_resource_obj( $resource_id ) {
203
204 if ( isset( $this->bookings_sql_obj_arr[ $resource_id ] ) ) {
205 return $this->bookings_sql_obj_arr[ $resource_id ];
206 } else {
207 return false;
208 }
209 }
210
211
212 /**
213 * Get title of booking resource
214 *
215 * @param int $resource_id
216 *
217 * @return string
218 */
219 function get_resource_title( $resource_id ) {
220
221 $resource_title = '';
222
223 $resource_obj = $this->get__booking_resource_obj( $resource_id );
224
225 if ( false !== $resource_obj ) {
226 $resource_title = $resource_obj->title;
227
228 $resource_title = wpbc_lang( $resource_title );
229 }
230
231 return $resource_title;
232 }
233
234
235 /**
236 * Get ID of all booking resources [ 2, 10, 11, 12 ]
237 *
238 * @return array // [ 2, 10, 11, 12 ]
239 */
240 function get_resource_id_arr() {
241
242 $resource_id_arr = array_keys( $this->bookings_sql_obj_arr );
243 return $resource_id_arr;
244 }
245
246
247 /**
248 * Get cost of all booking resources [ 'resource_id' => cost, ... ]
249 *
250 * @return array // [ 2=>20, 10>100, 12=>101, 13=>120 ]
251 */
252 function get_resources_base_cost_arr() {
253
254 $resource__arr = array();
255 foreach ( $this->bookings_sql_obj_arr as $key => $resource_obj ) {
256 $resource__arr[ $resource_obj->booking_type_id ] = isset( $resource_obj->cost ) ? $resource_obj->cost : 0;
257 }
258 return $resource__arr;
259 }
260
261
262 public function get_resources_obj_arr(){
263 return $this->bookings_sql_obj_arr;
264 }
265 }
266
267
268
269
270
271 // <editor-fold defaultstate="collapsed" desc=" == Support for booking resource IDs == " >
272
273 // -----------------------------------------------------------------------------------------------------------------
274 // Support for booking resource IDs
275 // -----------------------------------------------------------------------------------------------------------------
276
277 /**
278 * Convert $resource_id and $additional_bk_types to one array
279 *
280 * in BL this $params['additional_bk_types'] is INT or CSD ,in low version it ARRAY
281 *
282 * @param mixed $resource_id - array, CSD, int
283 * @param mixed $additional_bk_types - array, CSD, int
284 *
285 * @return array unique array of booking resource array( 1 ) | array( 3, 9, 10, 11 )
286 */
287 function wpbc_get_unique_array_of_resources_id( $resource_id = '', $additional_bk_types = '' ){
288
289 // in BL this $params['additional_bk_types'] is INT or CSD
290 // in low version $params['additional_bk_types'] is ARRAY
291
292 // If we do not pass any parameters, then use default booking resource with ID = 1
293 if ( ( empty( $resource_id ) ) && ( empty( $additional_bk_types ) ) ) {
294 $resource_id = '1';
295 }
296
297 // Get strings from parameters
298 if ( is_array( $resource_id ) ) {
299 $resource_id = implode( ',', $resource_id );
300 } else {
301 $resource_id = (string) $resource_id;
302 }
303
304 if ( is_array( $additional_bk_types ) ) {
305 $additional_bk_types = implode( ',', $additional_bk_types );
306 } else {
307 $additional_bk_types = (string) $additional_bk_types;
308 }
309
310 $resource_id_csd = $resource_id . ',' . $additional_bk_types; // Concat 2 lists
311 $resource_id_csd = str_replace( ';', ',', $resource_id_csd ); // Check for possible mistakes in separators
312
313 $resource_id__arr = explode( ',', $resource_id_csd ); // Get one array of booking resources
314 $resource_id__arr = array_unique( $resource_id__arr ); // Removes duplicate values from an array
315 $resource_id__arr = array_filter( $resource_id__arr ); // All entries of array equal to FALSE (0, '', '0' ) will be removed.
316
317 // Sanitize ID values
318 foreach ( $resource_id__arr as $resource_key => $resource_value ) {
319 $resource_id__arr[ $resource_key ] = intval( $resource_value );
320 }
321
322 return $resource_id__arr;
323 }
324
325 // </editor-fold>
326
327