PluginProbe
Chartify – WordPress Chart Plugin / 3.7.8
Chartify – WordPress Chart Plugin v3.7.8
3.8.0 3.7.9 3.7.8 3.7.7 3.7.6 3.7.5 trunk 1.0.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 All 83 releases
chart-builder / includes / class-chart-builder-db-actions.php

class-chart-builder-db-actions.php in Chartify – WordPress Chart Plugin 3.7.8, at includes/class-chart-builder-db-actions.php

1,311 lines 57.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 global $chart_builder_db_actions_notices;
3 $chart_builder_db_actions_notices = 0;
4
5 if( !class_exists( 'Chart_Builder_DB_Actions' ) ){
6 ob_start();
7
8 /**
9 * Class Chart_Builder_DB_Actions
10 * Class contains functions to interact with chart database
11 *
12 * Main functionality belong to inserting, updating and deleting of
13 * Also chart settings and options
14 *
15 * Hooks used in the class
16 * @hooks @filters ays_chart_item_save_options
17 * ays_chart_item_save_settings
18 *
19 * Database tables without prefixes
20 * @tables charts
21 * charts_meta
22 *
23 * @param $plugin_name
24 *
25 * @since 1.0.0
26 * @package Chart_Builder
27 * @subpackage Chart_Builder/includes
28 * @author Chart Builder Team <info@ays-pro.com>
29 */
30 class Chart_Builder_DB_Actions {
31
32 /**
33 * The ID of this plugin.
34 *
35 * @since 1.0.0
36 * @access private
37 * @var string $plugin_name The ID of this plugin.
38 */
39 private $plugin_name;
40
41 /**
42 * The name of table in the database.
43 *
44 * @since 1.0.0
45 * @access private
46 * @var string $db_table The name of database table.
47 */
48 private $db_table;
49
50 /**
51 * The name of meta table in the database.
52 *
53 * @since 1.0.0
54 * @access private
55 * @var string $db_table_meta The name of database table.
56 */
57 private $db_table_meta;
58
59 /**
60 * The constructor of the class
61 *
62 * @since 1.0.0
63 * @access public
64 *
65 * @param $plugin_name
66 */
67 public function __construct( $plugin_name ) {
68
69 global $wpdb;
70 global $chart_builder_db_actions_notices;
71
72 /**
73 * Assigning $plugin_name to the @plugin_name property
74 */
75 $this->plugin_name = $plugin_name;
76
77 /**
78 * Assigning database @charts table full name to the @db_table property
79 */
80 $this->db_table = $wpdb->prefix . CHART_BUILDER_DB_PREFIX . "charts";
81
82 /**
83 * Assigning database @charts metas table full name to the @db_table_meta property
84 */
85 $this->db_table_meta = $wpdb->prefix . CHART_BUILDER_DB_PREFIX . "charts_meta";
86
87
88 /**
89 * Adding action to admin_notices hook
90 * Will work when there is some notice after some action
91 */
92 if( $chart_builder_db_actions_notices === 0 ) {
93 add_action( 'admin_notices', array( $this, 'chart_notices' ) );
94 $chart_builder_db_actions_notices++;
95 }
96
97 }
98
99 /**
100 * Get instance of this class
101 *
102 * @since 1.0.0
103 * @access public
104 *
105 * @param $plugin_name
106 *
107 * @return Chart_Builder_DB_Actions
108 */
109 public static function get_instance( $plugin_name ){
110 return new self( $plugin_name );
111 }
112
113 /**
114 * Get records form database
115 * Applying filters like per page and ordering
116 *
117 * @since 1.0.0
118 * @access public
119 *
120 * @return array
121 */
122 public function get_items(){
123 global $wpdb;
124
125 $per_page = $this->get_pagination_count();
126
127 $page_number = 1;
128 if ( ! empty( $_REQUEST['paged'] ) ) {// phpcs:ignore WordPress.Security.NonceVerification.Recommended
129 $page_number = absint( sanitize_text_field(wp_unslash( $_REQUEST['paged'] ) ));// phpcs:ignore WordPress.Security.NonceVerification.Recommended
130 }
131
132 $sql = "SELECT * FROM " . $this->db_table;
133
134 $sql .= self::get_where_condition();
135
136 if ( ! empty( $_REQUEST['orderby'] ) ) {// phpcs:ignore WordPress.Security.NonceVerification.Recommended
137 $order_by = ( isset( $_REQUEST['orderby'] ) && sanitize_text_field( wp_unslash($_REQUEST['orderby'] )) != '' ) ? sanitize_text_field( wp_unslash($_REQUEST['orderby'] ) ) : 'id';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
138 $order_by .= ( ! empty( $_REQUEST['order'] ) && strtolower( sanitize_text_field(wp_unslash( $_REQUEST['order'] ) ) ) == 'asc' ) ? ' ASC' : ' DESC';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
139
140 $sql_orderby = sanitize_sql_orderby( $order_by );
141
142 if ( $sql_orderby ) {
143 $sql .= ' ORDER BY ' . $sql_orderby;
144 } else {
145 $sql .= ' ORDER BY id DESC';
146 }
147 }else{
148 $sql .= ' ORDER BY id DESC';
149 }
150
151 $p_page = ($page_number - 1) * $per_page;
152 $sql .= " LIMIT " . $per_page;
153 $sql .= " OFFSET " . $p_page;
154 $result = $wpdb->get_results( $sql, 'ARRAY_A' );
155 // $result = $wpdb->get_results( $wpdb->prepare($sql, ...$params), 'ARRAY_A' );
156 return $result;
157 }
158
159 /**
160 * @return mixed
161 */
162 public function get_pagination_count(){
163 $per_page = get_user_meta( get_current_user_id(), 'cb_charts_per_page', true );
164 if( $per_page == '' ){
165 $per_page = 5;
166 }
167 $per_page = absint( $per_page );
168 return $per_page;
169 }
170
171 /**
172 * Get WHERE condition for SQL queries that trying to get records
173 *
174 * @since 1.0.0
175 * @access public
176 *
177 * @return string
178 */
179 public static function get_where_condition(){
180 global $wpdb;
181 $chart_types = array(
182 "line_chart",
183 "bar_chart",
184 "pie_chart",
185 "column_chart",
186 "org_chart",
187 "donut_chart",
188 );
189 $chart_sources = array(
190 "manual",
191 "quiz_maker",
192 "file_import",
193 "google_sheet",
194 "import_from_db",
195 "woocommerce_data",
196 );
197 $chart_source_types = array(
198 "google-charts",
199 "chart-js",
200 );
201 $chart_dates = array(
202 'today' => "",
203 'yesterday' => "day",
204 'last_week' => "week",
205 'last_month' => "month",
206 'last_year' => "year",
207 );
208 $where = array();
209 $sql = '';
210 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
211 $search = (isset($_REQUEST['s'])) ? sanitize_text_field(wp_unslash($_REQUEST['s'])) : false;
212 if ($search) {
213 $s = array();
214 $s[] = sprintf( "`title` LIKE '%%%s%%' ", esc_sql( $wpdb->esc_like( $search ) ) );
215 $where[] = ' ( ' . implode(' OR ', $s) . ' ) ';
216 }
217
218 // if (isset( $_GET['fstatus'] ) && $_GET['fstatus'] != '') {
219 // $where[] = ' `status` = "' . esc_sql( sanitize_text_field( $_GET['fstatus'] ) ) . '" ';
220 // } else {
221 // $where[] = ' `status` != "trashed" ';
222 // }
223 if( isset( $_REQUEST['filterbytype'] ) && absint( sanitize_text_field( wp_unslash( $_REQUEST['filterbytype'] ) ) ) > 0){// phpcs:ignore WordPress.Security.NonceVerification.Recommended
224 $key = intval( sanitize_text_field( wp_unslash( $_REQUEST['filterbytype'] ) ) );// phpcs:ignore WordPress.Security.NonceVerification.Recommended
225 $where[] = ' `source_chart_type` = "'. $chart_types[$key-1] .'" ';
226 }
227
228 if( isset( $_REQUEST['filterbysource'] ) && absint( sanitize_text_field( wp_unslash($_REQUEST['filterbysource'] ) ) ) > 0){// phpcs:ignore WordPress.Security.NonceVerification.Recommended
229 $key = intval( sanitize_text_field( wp_unslash($_REQUEST['filterbysource'] )) );// phpcs:ignore WordPress.Security.NonceVerification.Recommended
230 $where[] = ' `source_type` = "'. $chart_sources[$key-1] .'" ';
231 }
232
233 if( isset( $_REQUEST['filterbychartsource'] ) && absint( sanitize_text_field( wp_unslash($_REQUEST['filterbychartsource'] )) ) > 0){// phpcs:ignore WordPress.Security.NonceVerification.Recommended
234 $key = intval( sanitize_text_field( wp_unslash($_REQUEST['filterbychartsource']) ) );// phpcs:ignore WordPress.Security.NonceVerification.Recommended
235 $where[] = ' `type` = "'. $chart_source_types[$key-1] .'" ';
236 }
237
238 if( isset( $_REQUEST['filterbydate'] ) && sanitize_text_field(wp_unslash( $_REQUEST['filterbydate'] )) !== ''){// phpcs:ignore WordPress.Security.NonceVerification.Recommended
239 $interval = sanitize_text_field( wp_unslash($_REQUEST['filterbydate'] ));// phpcs:ignore WordPress.Security.NonceVerification.Recommended
240 if ($chart_dates[$interval] !== '') {
241 $where[] = ' DATE(date_created) >= DATE_SUB(CURDATE(), INTERVAL 1 '. strtoupper($chart_dates[$interval]) .') AND DATE(date_created) < CURDATE() ';
242 } else{
243 $where[] = ' DATE(date_created) = CURDATE() ';
244 }
245 }
246
247 if( isset( $_REQUEST['filterbyauthor'] ) && absint( sanitize_text_field( wp_unslash($_REQUEST['filterbyauthor']) ) ) > 0){
248 $where[] = ' `author_id` = "'. absint(sanitize_text_field(wp_unslash($_REQUEST['filterbyauthor']))) .'" ';
249 }
250
251 if (!empty($where)) {
252 $sql = " WHERE " . implode( " AND ", $where );
253 }
254
255 return $sql;
256 }
257
258 public static function get_search_value () {
259 $search = (isset($_REQUEST['s'])) ? sanitize_text_field(wp_unslash($_REQUEST['s'])) : '';
260 return $search;
261 }
262
263 public static function get_searched_author_info () {
264 global $wpdb;
265
266 $id = (isset($_REQUEST['filterbyauthor'])) ? absint(sanitize_text_field(wp_unslash($_REQUEST['filterbyauthor']))) : 0;
267 $author_data = array();
268 if ( $id && $id > 0 ) {
269 global $wpdb;
270 $users_table = esc_sql( $wpdb->prefix . 'users' );
271 $author_data = $wpdb->get_row(// phpcs:ignore
272 $wpdb->prepare(
273 "SELECT ID, display_name
274 FROM {$users_table}
275 WHERE ID = %d",
276 $id
277 ),
278 ARRAY_A
279 );
280 }
281
282 return $author_data;
283 }
284
285 /**
286 * Get record by id
287 *
288 * @since 1.0.0
289 * @access public
290 *
291 * @param $id
292 *
293 * @return array|false
294 */
295 public function get_item( $id ){
296 global $wpdb;
297
298 if( is_null( $id ) ){
299 return false;
300 }
301
302 $result = $wpdb->get_row(// phpcs:ignore
303 $wpdb->prepare(
304 "SELECT *
305 FROM {$this->db_table}
306 WHERE id = %d",
307 $id
308 ),
309 ARRAY_A
310 );
311
312 if( $result ){
313 return $result;
314 }
315
316 return false;
317 }
318
319 /**
320 * Insert or update record by id
321 *
322 * @since 1.0.0
323 * @access public
324 *
325 * @redirect to specific page based on clicked button
326 * @param $id
327 *
328 * @return false|void
329 */
330 public function add_or_edit_item( $id ){
331 global $wpdb;
332
333 if( is_null( $id ) ){
334 return false;
335 }
336
337 if ( isset( $_POST["chart_builder_action"] ) && wp_verify_nonce( sanitize_text_field(wp_unslash( $_POST["chart_builder_action"] )), 'chart_builder_action' ) ) {
338 $success = 0;
339 $name_prefix = 'ays_';
340
341 // Save type
342 $save_type = isset( $_POST['save_type'] ) && $_POST['save_type'] != '' ? sanitize_text_field(wp_unslash( $_POST['save_type'] ) ) : '';
343
344 // Author_id
345 $author_id = get_current_user_id();
346
347 // Title
348 $title = isset( $_POST[ $name_prefix . 'title' ] ) && $_POST[ $name_prefix . 'title' ] != '' ? stripslashes( sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'title' ] )) ) : 'Untitled chart';
349
350 // if( $title == '' ){
351 // $message = 'empty-title';
352 // $url = esc_url_raw( remove_query_arg( false ) );
353 // $url = esc_url_raw( add_query_arg( array(
354 // 'status' => 'empty-title'
355 // ), $url ) );
356 // wp_redirect( $url );
357 // exit();
358 // }
359
360
361 // Description
362 $description = isset( $_POST[ $name_prefix . 'description' ] ) && $_POST[ $name_prefix . 'description' ] != '' ? stripslashes( sanitize_text_field(wp_unslash($_POST[ $name_prefix . 'description' ])) ) : '';
363
364 // Type
365 $type = isset( $_POST[ $name_prefix . 'type' ] ) && $_POST[ $name_prefix . 'type' ] != '' ? sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'type' ] )) : 'google-charts';
366
367 // Source chart type
368 $source_chart_type = isset( $_POST[ $name_prefix . 'source_chart_type' ] ) && $_POST[ $name_prefix . 'source_chart_type' ] != '' ? sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'source_chart_type' ] )) : 'pie_chart';
369
370 // Source type
371 $source_type = isset( $_POST[ $name_prefix . 'source_type' ] ) && $_POST[ $name_prefix . 'source_type' ] != '' ? sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'source_type' ] )) : 'manual';
372
373 // Manual data
374 $chart_source_filtered_data = array();
375 if ($source_chart_type == "org_chart") {
376 $chart_source_data_add = isset($_POST[ $name_prefix . 'chart_source_data_org_type' ]) && !empty( $_POST[ $name_prefix . 'chart_source_data_org_type' ] ) ? wp_unslash($_POST[ $name_prefix . 'chart_source_data_org_type' ]) : array();
377 foreach($chart_source_data_add as $chart_source_data_key => $chart_source_data_value){
378 $chart_source_data_key = (int)filter_var($chart_source_data_key, FILTER_SANITIZE_NUMBER_INT);
379 foreach($chart_source_data_value as $s_data_key => $s_data_value){
380 if ($s_data_key === 5) {
381 $chart_source_filtered_data[$chart_source_data_key][] = (isset($s_data_value) && $s_data_value != '') ? esc_url( $s_data_value ) : '';
382 } else {
383 $chart_source_filtered_data[$chart_source_data_key][] = (isset($s_data_value) && $s_data_value != '') ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) )) : '';
384 }
385 }
386 }
387 } else {
388 $chart_source_data_add = isset($_POST[ $name_prefix . 'chart_source_data' ]) && !empty( $_POST[ $name_prefix . 'chart_source_data' ] ) ? $_POST[ $name_prefix . 'chart_source_data' ] : array();
389 foreach($chart_source_data_add as $chart_source_data_key => $chart_source_data_value){
390 if ($chart_source_data_key == 0) {
391 if(!empty($chart_source_data_value)){
392 foreach($chart_source_data_value as $s_data_key => $s_data_value){
393 $chart_source_filtered_data[$chart_source_data_key][] = (isset($s_data_value) && trim(stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) ))) != '') ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) )) : 'Title '.$s_data_key;
394 }
395 }
396 } else {
397 if(!empty($chart_source_data_value) && (isset($chart_source_data_value[0]) && trim($chart_source_data_value[0]) != '')){
398 foreach($chart_source_data_value as $s_data_key => $s_data_value){
399 if ($s_data_key === 0) {
400 $chart_source_filtered_data[$chart_source_data_key][] = (isset($s_data_value) && stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) )) != '') ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) )) : 'Option';
401 } else {
402 $chart_source_filtered_data[$chart_source_data_key][] = (isset($s_data_value) && stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) )) != '') ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $s_data_value, ENT_QUOTES, 'UTF-8' )) )) : '0';
403 }
404 }
405 }
406 }
407 }
408 }
409 $chart_source_filtered_data = json_encode( $chart_source_filtered_data );
410
411 // Source type import from quiz maker database
412 $quiz_maker_data_option_name_for_quiz = $id == 0 ? 'ays_chart_quiz_maker_quiz_data_temp' : 'ays_chart_quiz_maker_quiz_data_' . $id;
413 $quiz_data = get_option( $quiz_maker_data_option_name_for_quiz );
414
415 $quiz_maker_data_option_name = $id == 0 ? 'ays_chart_quiz_maker_results_temp' : 'ays_chart_quiz_maker_results_' . $id;
416 $quiz_maker_data = get_option( $quiz_maker_data_option_name, array() );
417 $query_id = isset( $_POST[ $name_prefix . 'quiz_query' ] ) && $_POST[ $name_prefix . 'quiz_query' ] != '' ? sanitize_text_field(wp_unslash($_POST[ $name_prefix . 'quiz_query' ] )) : '';
418 $quiz_id = isset( $_POST[ $name_prefix . 'quiz_id' ] ) && $_POST[ $name_prefix . 'quiz_id' ] != '' ? intval( $_POST[ $name_prefix . 'quiz_id' ] ) : 0;
419
420 // Source
421 switch ( $source_type ){
422 case 'quiz_maker':
423 $query_id_op = sanitize_text_field($quiz_data['quiz_query']);
424 $quiz_id_op = intval($quiz_data['quiz_id']);
425
426 $chart_id = $id;
427 $user_id = get_current_user_id();
428
429 if ( !($query_id_op == $query_id && $quiz_id_op == $quiz_id) ) {
430 if ( $chart_id >= 0 ) {
431 $return_results = CBFunctions()->get_quiz_query($query_id, $quiz_id, $user_id);
432 $result_values = $return_results['result'];
433 $query = $return_results['query'];
434
435 if ( !empty($result_values) ) {
436 $results = array();
437 $headers = array();
438 if ( $result_values ) {
439 $row_num = 0;
440 foreach ( $result_values as $row ) {
441 $result = array();
442 $col_num = 0;
443 foreach ( $row as $k => $v ) {
444 $result[] = $v;
445 if ( $row_num === 0 ) {
446 $headers[] = $k;
447 }
448 }
449 $results[] = $result;
450 $row_num++;
451 }
452 }
453 }
454
455 $source_type = 'quiz_maker';
456 $option_name_for_data = $chart_id == 0 ? 'ays_chart_quiz_maker_results_temp' : 'ays_chart_quiz_maker_results_' . $chart_id;
457 $option_name_for_quiz = $chart_id == 0 ? 'ays_chart_quiz_maker_quiz_data_temp' : 'ays_chart_quiz_maker_quiz_data_' . $chart_id;
458
459 $source = $query;
460
461 $quiz_maker_data = array(
462 'source_type' => $source_type,
463 'source' => $query,
464 'data' => $results,
465 );
466 $quiz_data = array(
467 'quiz_query' => $query_id,
468 'quiz_id' => $quiz_id
469 );
470
471 update_option( $option_name_for_data, $quiz_maker_data);
472 update_option( $option_name_for_quiz, $quiz_data);
473 }
474 } else {
475 $source = isset( $quiz_maker_data['source'] ) && $quiz_maker_data['source'] !== '' ? $quiz_maker_data['source'] : '';
476
477 $query_id = $query_id_op;
478 $quiz_id = $quiz_id_op;
479 }
480 break;
481 case 'manual':
482 default:
483 $source = $chart_source_filtered_data;
484 break;
485 }
486
487 // Status
488 $status = isset( $_POST[ $name_prefix . 'status' ] ) && $_POST[ $name_prefix . 'status' ] != '' ? sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'status' ] )) : 'draft';
489
490 // Date created
491 $date_created = isset( $_POST[ $name_prefix . 'date_created' ] ) && CBFunctions()->validateDate( sanitize_text_field(wp_unslash( $_POST[ $name_prefix . 'date_created' ] )) ) ? sanitize_text_field( wp_unslash( $_POST[ $name_prefix . 'date_created' ] ) ) : current_time( 'mysql' );
492
493 // Date modified
494 $date_modified = isset( $_POST[ $name_prefix . 'date_modified' ] ) && CBFunctions()->validateDate(sanitize_text_field(wp_unslash($_POST[ $name_prefix . 'date_modified' ])) ) ? sanitize_text_field(wp_unslash($_POST[ $name_prefix . 'date_modified' ])) : current_time( 'mysql' );
495
496 // Change the author of the current chart
497 $create_author = ( isset($_POST[$name_prefix . 'create_author']) && $_POST[$name_prefix . 'create_author'] != "" ) ? absint( sanitize_text_field( wp_unslash($_POST[$name_prefix . 'create_author'] )) ) : '';
498
499 if ( $create_author != "" && $create_author > 0 ) {
500 $user = get_userdata($create_author);
501 if ( ! is_null( $user ) && $user ) {
502 $author = array(
503 'id' => $user->ID."",
504 'name' => $user->data->display_name
505 );
506
507 $author = json_encode($author, JSON_UNESCAPED_SLASHES);
508 } else {
509 $author_data = json_decode($create_author, true);
510 $create_author = (isset( $author_data['id'] ) && $author_data['id'] != "") ? absint( sanitize_text_field( wp_unslash($author_data['id'] )) ) : get_current_user_id();
511 }
512
513 $author_id = $create_author;
514 }
515
516 // Options
517 $options = array();
518 if( isset( $_POST[ $name_prefix . 'options' ] ) && !empty( $_POST[ $name_prefix . 'options' ] )) {
519 foreach(sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'options' ])) as $each_option_key => $each_option_value){
520 $each_option_value = isset($each_option_value) && $each_option_value != '' ? sanitize_text_field(wp_unslash($each_option_value)) : '';
521 $each_option_key = isset($each_option_key) && $each_option_key != '' ? sanitize_text_field(wp_unslash($each_option_key)) : '';
522 $options[$each_option_key] = sanitize_text_field($each_option_value);
523 }
524 }
525
526 $options = apply_filters( 'ays_chart_item_save_options', $options );
527
528 // Settings
529 // == Sanitize in the loop all values except checkboxes, radios (only for settings array). The latter sanitize separately (out of loop) ==
530 $settings = array();
531 if( isset( $_POST[ $name_prefix . 'settings' ] ) && !empty( $_POST[ $name_prefix . 'settings' ] )) {
532 foreach($_POST[ $name_prefix . 'settings' ] as $each_setting_key => $each_setting_value){
533 if (!is_array($each_setting_value)) {
534 $each_setting_value = isset($each_setting_value) && $each_setting_value != '' ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $each_setting_value, ENT_QUOTES, 'UTF-8' )) )) : '';
535 $each_setting_key = isset($each_setting_key) && $each_setting_key != '' ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $each_setting_key, ENT_QUOTES, 'UTF-8' )) )) : '';
536 $settings[$each_setting_key] = $each_setting_value;
537 } else {
538 foreach($each_setting_value as $each_index => $each_value){
539 $each_value = isset($each_value) && $each_value != '' ? stripslashes(sanitize_text_field( wp_strip_all_tags( html_entity_decode( $each_value, ENT_QUOTES, 'UTF-8' )) )) : '';
540 $each_index = isset($each_index) && $each_index >= 0 ? intval($each_index) : -1;
541 $settings[$each_setting_key][$each_index] = $each_value;
542 }
543 $settings[$each_setting_key] = json_encode($settings[$each_setting_key]);
544 }
545 }
546 }
547
548 // == Sanitize checkboxes, radios here (only for settings array) ==
549 $settings['responsive_width'] = ( isset( $settings['responsive_width'] ) && $settings['responsive_width'] != '' ) ? sanitize_text_field($settings['responsive_width']) : 'off';
550 $settings['transparent_background'] = ( isset( $settings['transparent_background'] ) && $settings['transparent_background'] != '' ) ? sanitize_text_field($settings['transparent_background']) : 'off';
551 $settings['box_shadow'] = ( isset( $settings['box_shadow'] ) && $settings['box_shadow'] != '' ) ? sanitize_text_field($settings['box_shadow']) : 'off';
552 $settings['show_color_code'] = ( isset( $settings['show_color_code'] ) && $settings['show_color_code'] != '' ) ? sanitize_text_field($settings['show_color_code']) : 'off';
553 $settings['tooltip_italic'] = ( isset( $settings['tooltip_italic'] ) && $settings['tooltip_italic'] != '' ) ? sanitize_text_field($settings['tooltip_italic']) : 'off';
554 $settings['legend_italic'] = ( isset( $settings['legend_italic'] ) && $settings['legend_italic'] != '' ) ? sanitize_text_field($settings['legend_italic']) : 'off';
555 $settings['legend_bold'] = ( isset( $settings['legend_bold'] ) && $settings['legend_bold'] != '' ) ? sanitize_text_field($settings['legend_bold']) : 'off';
556 $settings['haxis_italic'] = ( isset( $settings['haxis_italic'] ) && $settings['haxis_italic'] != '' ) ? sanitize_text_field($settings['haxis_italic']) : 'off';
557 $settings['haxis_bold'] = ( isset( $settings['haxis_bold'] ) && $settings['haxis_bold'] != '' ) ? sanitize_text_field($settings['haxis_bold']) : 'off';
558 $settings['vaxis_italic'] = ( isset( $settings['vaxis_italic'] ) && $settings['vaxis_italic'] != '' ) ? sanitize_text_field($settings['vaxis_italic']) : 'off';
559 $settings['vaxis_bold'] = ( isset( $settings['vaxis_bold'] ) && $settings['vaxis_bold'] != '' ) ? sanitize_text_field($settings['vaxis_bold']) : 'off';
560 $settings['reverse_categories'] = ( isset( $settings['reverse_categories'] ) && $settings['reverse_categories'] != '' ) ? sanitize_text_field($settings['reverse_categories']) : 'off';
561 $settings['haxis_title_italic'] = ( isset( $settings['haxis_title_italic'] ) && $settings['haxis_title_italic'] != '' ) ? sanitize_text_field($settings['haxis_title_italic']) : 'off';
562 $settings['haxis_title_bold'] = ( isset( $settings['haxis_title_bold'] ) && $settings['haxis_title_bold'] != '' ) ? sanitize_text_field($settings['haxis_title_bold']) : 'off';
563 $settings['haxis_enable_divide_percent'] = ( isset( $settings['haxis_enable_divide_percent'] ) && $settings['haxis_enable_divide_percent'] != '' ) ? sanitize_text_field($settings['haxis_enable_divide_percent']) : 'off';
564 $settings['vaxis_enable_divide_percent'] = ( isset( $settings['vaxis_enable_divide_percent'] ) && $settings['vaxis_enable_divide_percent'] != '' ) ? sanitize_text_field($settings['vaxis_enable_divide_percent']) : 'off';
565 $settings['vaxis_title_italic'] = ( isset( $settings['vaxis_title_italic'] ) && $settings['vaxis_title_italic'] != '' ) ? sanitize_text_field($settings['vaxis_title_italic']) : 'off';
566 $settings['vaxis_title_bold'] = ( isset( $settings['vaxis_title_bold'] ) && $settings['vaxis_title_bold'] != '' ) ? sanitize_text_field($settings['vaxis_title_bold']) : 'off';
567 $settings['enable_row_settings'] = ( isset( $settings['enable_row_settings'] ) && $settings['enable_row_settings'] != '' ) ? sanitize_text_field($settings['enable_row_settings']) : 'off';
568 $settings['is_stacked'] = ( isset( $settings['is_stacked'] ) && $settings['is_stacked'] != '' ) ? sanitize_text_field($settings['is_stacked']) : 'off';
569 $settings['multiple_selection'] = ( isset( $settings['multiple_selection'] ) && $settings['multiple_selection'] != '' ) ? sanitize_text_field($settings['multiple_selection']) : 'off';
570 $settings['show_title'] = ( isset( $settings['show_title'] ) && $settings['show_title'] != '' ) ? sanitize_text_field($settings['show_title']) : 'off';
571 $settings['title_bold'] = ( isset( $settings['title_bold'] ) && $settings['title_bold'] != '' ) ? sanitize_text_field($settings['title_bold']) : 'off';
572 $settings['title_text_shadow'] = ( isset( $settings['title_text_shadow'] ) && $settings['title_text_shadow'] != '' ) ? sanitize_text_field($settings['title_text_shadow']) : 'off';
573 $settings['title_italic'] = ( isset( $settings['title_italic'] ) && $settings['title_italic'] != '' ) ? sanitize_text_field($settings['title_italic']) : 'off';
574 $settings['show_description'] = ( isset( $settings['show_description'] ) && $settings['show_description'] != '' ) ? sanitize_text_field($settings['show_description']) : 'off';
575 $settings['description_bold'] = ( isset( $settings['description_bold'] ) && $settings['description_bold'] != '' ) ? sanitize_text_field($settings['description_bold']) : 'off';
576 $settings['description_italic'] = ( isset( $settings['description_italic'] ) && $settings['description_italic'] != '' ) ? sanitize_text_field($settings['description_italic']) : 'off';
577 $settings['description_text_shadow'] = ( isset( $settings['description_text_shadow'] ) && $settings['description_text_shadow'] != '' ) ? sanitize_text_field($settings['description_text_shadow']) : 'off';
578 $settings['enable_interactivity'] = ( isset( $settings['enable_interactivity'] ) && $settings['enable_interactivity'] != '' ) ? sanitize_text_field($settings['enable_interactivity']) : 'off';
579 $settings['maximized_view'] = ( isset( $settings['maximized_view'] ) && $settings['maximized_view'] != '' ) ? sanitize_text_field($settings['maximized_view']) : 'off';
580 $settings['haxis_direction'] = ( isset( $settings['haxis_direction'] ) && $settings['haxis_direction'] != '' ) ? sanitize_text_field($settings['haxis_direction']) : '1';
581 $settings['vaxis_direction'] = ( isset( $settings['vaxis_direction'] ) && $settings['vaxis_direction'] != '' ) ? sanitize_text_field($settings['vaxis_direction']) : '1';
582 $settings['haxis_slanted_text_angle'] = ( isset( $settings['haxis_slanted_text_angle'] ) && $settings['haxis_slanted_text_angle'] != '0' ) ? sanitize_text_field($settings['haxis_slanted_text_angle']) : '30';
583 $settings['enable_animation'] = ( isset( $settings['enable_animation'] ) && $settings['enable_animation'] != '' ) ? sanitize_text_field($settings['enable_animation']) : 'off';
584 $settings['animation_startup'] = ( isset( $settings['animation_startup'] ) && $settings['animation_startup'] != '' ) ? sanitize_text_field($settings['animation_startup']) : 'off';
585 $settings['orientation'] = ( isset( $settings['orientation'] ) && $settings['orientation'] != '' ) ? sanitize_text_field($settings['orientation']) : 'off';
586 $settings['fill_nulls'] = ( isset( $settings['fill_nulls'] ) && $settings['fill_nulls'] != '' ) ? sanitize_text_field($settings['fill_nulls']) : 'off';
587 $settings['allow_collapse'] = ( isset( $settings['allow_collapse'] ) && $settings['allow_collapse'] != '' ) ? sanitize_text_field($settings['allow_collapse']) : 'off';
588 $settings['enable_img'] = ( isset( $settings['enable_img'] ) && $settings['enable_img'] != '' ) ? sanitize_text_field($settings['enable_img']) : 'off';
589 // $settings['index_axis'] = ( isset( $settings['index_axis'] ) && $settings['index_axis'] != '' ) ? sanitize_text_field($settings['index_axis']) : 'off';
590
591 $settings = apply_filters( 'ays_chart_item_save_settings', $settings );
592 $current_chart = $this->get_item($id);
593 $message = '';
594 if( $id == 0 ){
595 $result = $wpdb->insert(// phpcs:ignore
596 $this->db_table,
597 array(
598 'author_id' => $author_id,
599 'title' => $title,
600 'description' => $description,
601 'type' => $type,
602 'source_chart_type' => $source_chart_type,
603 'source_type' => $source_type,
604 'source' => $source,
605 'status' => $status,
606 'date_created' => $date_created,
607 'date_modified' => $date_modified,
608 'quiz_query' => $query_id,
609 'quiz_id' => $quiz_id,
610 'options' => json_encode( $options ),
611 ),
612 array(
613 '%s', // author_id
614 '%s', // title
615 '%s', // description
616 '%s', // type
617 '%s', // source_chart_type
618 '%s', // source_type
619 '%s', // source
620 '%s', // status
621 '%s', // date_created
622 '%s', // date_modified
623 '%s', // query_id
624 '%d', // quiz_id
625 '%s', // options
626 )
627 );
628
629 $inserted_id = $wpdb->insert_id;
630
631 $post_type_args = array(
632 'chart_id' => $inserted_id,
633 'author_id' => !empty($create_author) ? $create_author : get_current_user_id(),
634 'chart_title' => $title,
635 );
636
637 $custom_post_id = Chart_Builder_Custom_Post_Type::ays_chart_add_custom_post($post_type_args);
638
639 if( is_array( $settings ) && ! empty( $settings ) ){
640 foreach ( $settings as $key => $setting ){
641 $this->add_meta( $inserted_id, $key, $setting );
642 }
643 }
644
645 update_option( 'ays_chart_quiz_maker_results_' . $inserted_id, $quiz_maker_data );
646 delete_option( $quiz_maker_data_option_name );
647
648 update_option( 'ays_chart_quiz_maker_quiz_data_' . $inserted_id, $quiz_data );
649 delete_option( $quiz_maker_data_option_name_for_quiz );
650
651 $message = 'created';
652 }else{
653 $result = $wpdb->update(// phpcs:ignore
654 $this->db_table,
655 array(
656 'author_id' => $author_id,
657 'title' => $title,
658 'description' => $description,
659 'type' => $type,
660 'source_chart_type' => $source_chart_type,
661 'source_type' => $source_type,
662 'source' => $source,
663 'status' => $status,
664 'date_modified' => $date_modified,
665 'quiz_query' => $query_id,
666 'quiz_id' => $quiz_id,
667 'options' => json_encode( $options ),
668 ),
669 array( 'id' => $id ),
670 array(
671 '%s', // author_id
672 '%s', // title
673 '%s', // description
674 '%s', // type
675 '%s', // source_chart_type
676 '%s', // source_type
677 '%s', // source
678 '%s', // status
679 '%s', // date_modified
680 '%s', // quiz_query
681 '%d', // quiz_id
682 '%s', // options
683 ),
684 array( '%d' )
685 );
686
687 $inserted_id = $id;
688
689 if( is_array( $settings ) && ! empty( $settings ) ){
690 foreach ( $settings as $key => $setting ){
691 if( $this->get_meta( $inserted_id, $key, 'id' ) ) {
692 $this->update_meta( $inserted_id, $key, $setting );
693 }else{
694 $this->add_meta( $inserted_id, $key, $setting );
695 }
696 }
697 }
698
699 $message = 'updated';
700 if( !empty($current_chart) && empty($current_chart['custom_post_id']) ){
701 $post_type_args = array(
702 'chart_id' => $inserted_id,
703 'author_id' => get_current_user_id(),
704 'chart_title' => $title,
705 );
706
707 $custom_post_id = Chart_Builder_Custom_Post_Type::ays_chart_add_custom_post($post_type_args);
708 }
709 }
710
711 $ays_chart_tab = isset($_POST[ $name_prefix . 'chart_tab' ]) ? sanitize_text_field( wp_unslash($_POST[ $name_prefix . 'chart_tab' ])) : 'tab1';
712
713 if($message == 'created'){
714 setcookie('ays_chart_created_new', $inserted_id, time() + 3600, '/');
715 if(!empty($custom_post_id)){
716 $custom_post_url = array(
717 'post_type' => 'ays-chart-builder',
718 'p' => $custom_post_id,
719 'preview' => 'true',
720 );
721 $custom_post_url_ready = http_build_query($custom_post_url);
722 $ready_url = get_home_url();
723 $ready_url .= '/?' . $custom_post_url_ready;
724 setcookie('ays_chart_created_new_'.$inserted_id.'_post_id', $ready_url, time() + 3600, '/');
725 }
726 }
727
728 if( $result >= 0 ) {
729 if( $save_type == 'apply' ){
730 $url = remove_query_arg( array('type', 'source') );
731 if($id == 0){
732 $url = esc_url_raw( add_query_arg( array(
733 "action" => "edit",
734 "id" => $inserted_id,
735 "ays_chart_tab" => $ays_chart_tab,
736 "status" => $message
737 ), $url ) );
738 }else{
739 $url = esc_url_raw( add_query_arg( array(
740 "ays_chart_tab" => $ays_chart_tab,
741 "status" => $message
742 ), $url ) );
743 }
744 wp_redirect( $url );
745 exit;
746 }elseif( $save_type == 'save_new' ){
747 $url = remove_query_arg( array('id', 'type', 'source') );
748 $url = esc_url_raw( add_query_arg( array(
749 "action" => "add",
750 "ays_chart_tab" => $ays_chart_tab,
751 "status" => $message
752 ), $url ) );
753 wp_redirect( $url );
754 exit;
755 }else{
756 $url = remove_query_arg( array('action', 'id', 'type', 'source') );
757 $url = esc_url_raw( add_query_arg( array(
758 "ays_chart_tab" => $ays_chart_tab,
759 "status" => $message
760 ), $url ) );
761 wp_redirect( $url );
762 exit;
763 }
764 }
765
766 }else{
767 return false;
768 }
769
770 }
771
772 /**
773 * Delete record by id
774 *
775 * @since 1.0.0
776 * @access public
777 *
778 * @param $id
779 *
780 * @return bool
781 */
782 public function delete_item( $id ){
783 global $wpdb;
784
785 if( is_null( $id ) ){
786 return false;
787 }
788
789 $wpdb->delete(// phpcs:ignore
790 $this->db_table_meta,
791 array( 'chart_id' => absint( $id ) ),
792 array( '%d' )
793 );
794
795 $wpdb->delete(// phpcs:ignore
796 $this->db_table,
797 array( 'id' => absint( $id ) ),
798 array( '%d' )
799 );
800
801 return true;
802 }
803
804 /**
805 * Move to trash record by id
806 *
807 * @since 1.0.0
808 * @access public
809 *
810 * @param $id
811 *
812 * @return bool
813 */
814 public function trash_item( $id ){
815 global $wpdb;
816
817 if( is_null( $id ) ){
818 return false;
819 }
820
821 $result = $wpdb->update(// phpcs:ignore
822 $this->db_table,
823 array( 'status' => 'trashed' ),
824 array( 'id' => absint( $id ) ),
825 array( '%s' ),
826 array( '%d' )
827 );
828
829 if( $result >= 0 ){
830 return true;
831 }
832
833 return false;
834 }
835
836 /**
837 * Move to publish record by id
838 *
839 * @since 1.0.0
840 * @access public
841 *
842 * @param $id
843 *
844 * @return bool
845 */
846 public function publish_item( $id ){
847 global $wpdb;
848
849 if( is_null( $id ) ){
850 return false;
851 }
852
853 $result = $wpdb->update(// phpcs:ignore
854 $this->db_table,
855 array( 'status' => 'published' ),
856 array( 'id' => absint( $id ) ),
857 array( '%s' ),
858 array( '%d' )
859 );
860
861 if( $result >= 0 ){
862 return true;
863 }
864
865 return false;
866 }
867
868 /**
869 * Restore record by id
870 *
871 * @since 1.0.0
872 * @access public
873 *
874 * @param $id
875 *
876 * @return bool
877 */
878 public function restore_item( $id ){
879 global $wpdb;
880
881 if( is_null( $id ) ){
882 return false;
883 }
884
885 $result = $wpdb->update(// phpcs:ignore
886 $this->db_table,
887 array( 'status' => 'draft' ),
888 array( 'id' => absint( $id ) ),
889 array( '%s' ),
890 array( '%d' )
891 );
892
893 if( $result >= 0 ){
894 return true;
895 }
896
897 return false;
898 }
899
900 /**
901 * Duplicate record by id
902 *
903 * @since 1.0.0
904 * @access public
905 *
906 * @param $id
907 *
908 * @return bool
909 */
910 public function duplicate_item( $id ){
911 global $wpdb;
912
913 if( is_null( $id ) ){
914 return false;
915 }
916
917 $current_data = $this->get_item($id);
918 array_shift($current_data);
919 $current_data['title'] .= __(' (Copy)', 'chart-builder');
920 $current_data['date_created'] = current_time( 'mysql' );
921 $current_data['date_modified'] = current_time( 'mysql' );
922 $result = $wpdb->insert(// phpcs:ignore
923 $this->db_table,
924 $current_data,
925 array('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%d','%s')
926 );
927 $new_id = $wpdb->insert_id;
928 if (!$result || $new_id <= 0) {
929 return false;
930 }
931
932 $quiz_option_result = get_option('ays_chart_quiz_maker_results_'.$id);
933 $quiz_option_data = get_option('ays_chart_quiz_maker_quiz_data_'.$id);
934 if ($quiz_option_result) {
935 update_option( 'ays_chart_quiz_maker_results_' . $new_id, $quiz_option_result );
936 }
937 if ($quiz_option_data) {
938 update_option( 'ays_chart_quiz_maker_quiz_data_' . $new_id, $quiz_option_data );
939 }
940
941 $current_metadata = $this->get_metadata($id);
942 foreach ($current_metadata as $meta_id => &$meta_row) {
943 $meta_row['chart_id'] = $new_id;
944 array_shift($meta_row);
945 $result = $wpdb->insert(// phpcs:ignore
946 $this->db_table_meta,
947 $meta_row,
948 array( '%s', '%s', '%s', '%s' )
949 );
950 if ($result < 0){
951 return false;
952 }
953 }
954
955 return true;
956 }
957
958 /**
959 * Get record metadata by id
960 *
961 * @since 1.0.0
962 * @access public
963 *
964 * @param $id
965 *
966 * @return array
967 */
968 public function get_metadata( $id ){
969 global $wpdb;
970
971 if( is_null( $id ) ){
972 return array();
973 }
974
975 $results = $wpdb->get_results(// phpcs:ignore
976 $wpdb->prepare(
977 "SELECT *
978 FROM {$this->db_table_meta}
979 WHERE chart_id = %d",
980 $id
981 ),
982 ARRAY_A
983 );
984
985 if( count( $results ) > 0 ){
986 return $results;
987 }else{
988 return array();
989 }
990 }
991
992 /**
993 * Convert record metadata to useful format
994 *
995 * @since 1.0.0
996 * @access public
997 *
998 * @param $settings
999 *
1000 * @return array
1001 */
1002 public function convert_metadata( $settings ){
1003
1004 if( ! is_array( $settings ) || empty( $settings ) ){
1005 return array();
1006 }
1007
1008 $data = array();
1009 foreach ( $settings as $k => $setting ) {
1010 $data[ $setting['meta_key'] ] = $setting['meta_value'];
1011 }
1012
1013 return $data;
1014 }
1015
1016 /**
1017 * Add default values to record metadata of the chart
1018 *
1019 * @since 1.0.0
1020 * @access public
1021 *
1022 * @param $settings
1023 *
1024 * @return array
1025 */
1026 public function apply_default_metadata( $settings ){
1027
1028 if( ! is_array( $settings ) || empty( $settings ) ){
1029 return array();
1030 }
1031
1032 $defaults = array(
1033 'width' => '',
1034 'height' => '',
1035 'font_size' => '',
1036 'title_color' => '',
1037 );
1038
1039 foreach ( $defaults as $key => $default ) {
1040 if( ! isset( $settings[ $key ] ) ) {
1041 $settings[ $key ] = $default;
1042 }
1043 }
1044
1045 return $settings;
1046 }
1047
1048 /**
1049 * Get record meta by record id and meta key
1050 *
1051 * @since 1.0.0
1052 * @access public
1053 *
1054 * @param $id
1055 * @param $meta_key
1056 *
1057 * @return false|array
1058 */
1059 public function get_meta( $id, $meta_key, $select_value = "meta_value" ){
1060 global $wpdb;
1061
1062 if( is_null( $id ) ){
1063 return false;
1064 }
1065
1066 if( is_null( $meta_key ) || trim( $meta_key ) === '' ){
1067 return false;
1068 }
1069 $result = $wpdb->get_var(// phpcs:ignore
1070 $wpdb->prepare(
1071 "SELECT {$select_value}
1072 FROM {$this->db_table_meta}
1073 WHERE meta_key = %s AND chart_id = %d",
1074 $meta_key,
1075 $id
1076 )
1077 );
1078
1079 if( $result != "" ){
1080 return $result;
1081 }
1082
1083 return false;
1084 }
1085
1086 /**
1087 * Insert record meta by record id
1088 *
1089 * @since 1.0.0
1090 * @access public
1091 *
1092 * @param $id
1093 * @param $meta_key @accept string
1094 * @param $meta_value @accept JSON|serialized array|string|number
1095 * @param string $note @accept string|number
1096 * @param string $options @accept JSON
1097 *
1098 * @return bool
1099 */
1100 public function add_meta( $id, $meta_key, $meta_value, $note = "", $options = "" ){
1101 global $wpdb;
1102
1103 if( is_null( $id ) ){
1104 return false;
1105 }
1106
1107 if( is_null( $meta_key ) || trim( $meta_key ) === '' ){
1108 return false;
1109 }
1110
1111 $result = $wpdb->insert(// phpcs:ignore
1112 $this->db_table_meta,
1113 array(
1114 'chart_id' => absint( $id ),
1115 'meta_key' => $meta_key,// phpcs:ignore
1116 'meta_value' => $meta_value,// phpcs:ignore
1117 'note' => $note,
1118 'options' => $options
1119 ),
1120 array( '%s', '%s', '%s', '%s' )
1121 );
1122
1123 if($result >= 0){
1124 return true;
1125 }
1126
1127 return false;
1128 }
1129
1130 /**
1131 * Update record meta by record id
1132 *
1133 * @since 1.0.0
1134 * @access public
1135 *
1136 * @param $id
1137 * @param $meta_key @accept string
1138 * @param $meta_value @accept JSON|serialized array|string|number
1139 * @param string $note @accept string|number
1140 * @param string $options @accept JSON
1141 *
1142 * @return bool
1143 */
1144 public function update_meta( $id, $meta_key, $meta_value, $note = "", $options = "" ){
1145 global $wpdb;
1146
1147 if( is_null( $id ) ){
1148 return false;
1149 }
1150
1151 if( is_null( $meta_key ) || trim( $meta_key ) === '' ){
1152 return false;
1153 }
1154
1155 $value = array(
1156 'meta_value' => $meta_value,// phpcs:ignore
1157 );
1158
1159 $value_s = array( '%s' );
1160 if($note != null){
1161 $value['note'] = $note;
1162 $value_s[] = '%s';
1163 }
1164
1165 if($options != null){
1166 $value['options'] = $options;
1167 $value_s[] = '%s';
1168 }
1169
1170 $result = $wpdb->update(// phpcs:ignore
1171 $this->db_table_meta,
1172 $value,
1173 array(
1174 'chart_id' => absint( $id ),
1175 'meta_key' => $meta_key,// phpcs:ignore
1176 ),
1177 $value_s,
1178 array( '%d', '%s' )
1179 );
1180
1181 if($result >= 0){
1182 return true;
1183 }
1184
1185 return false;
1186 }
1187
1188 /**
1189 * Delete record meta by record id and meta key
1190 *
1191 * @since 1.0.0
1192 * @access public
1193 *
1194 * @param $id
1195 * @param $meta_key
1196 *
1197 * @return bool
1198 */
1199 public function delete_meta( $id, $meta_key ){
1200 global $wpdb;
1201
1202 if( is_null( $id ) ){
1203 return false;
1204 }
1205
1206 if( is_null( $meta_key ) || trim( $meta_key ) === '' ){
1207 return false;
1208 }
1209
1210 $wpdb->delete(// phpcs:ignore
1211 $this->db_table_meta,
1212 array(
1213 'chart_id' => absint( $id ),
1214 'meta_key' => $meta_key,// phpcs:ignore
1215 ),
1216 array( '%d', '%s' )
1217 );
1218
1219 return true;
1220 }
1221
1222 public static function ays_chart_is_elementor(){
1223 if( isset( $_GET['action'] ) && $_GET['action'] == 'elementor' ){
1224 $is_elementor = true;
1225 }elseif( isset( $_REQUEST['elementor-preview'] ) && $_REQUEST['elementor-preview'] != '' ){
1226 $is_elementor = true;
1227 }else{
1228 $is_elementor = false;
1229 }
1230
1231 if ( ! $is_elementor ) {
1232 $is_elementor = ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ? true : false;
1233 }
1234
1235 return $is_elementor;
1236 }
1237
1238 /**
1239 * Display notice based on action that happened to record
1240 *
1241 * @since 1.0.0
1242 * @access public
1243 *
1244 * @return void|html
1245 */
1246 public function chart_notices(){
1247 $page = (isset($_REQUEST['page'])) ? sanitize_text_field( wp_unslash( $_REQUEST['page'] )) : '';
1248 if ( !($page == "chart-builder") )
1249 return;
1250
1251 $status = (isset($_REQUEST['status'])) ? sanitize_text_field( wp_unslash( $_REQUEST['status'] )) : '';
1252
1253 if ( empty( $status ) )
1254 return;
1255
1256 $error = false;
1257 switch ( $status ) {
1258 case 'created':
1259 $updated_message = __( 'Chart created.', "chart-builder" ) ;
1260 break;
1261 case 'updated':
1262 $updated_message = __( 'Chart saved.', "chart-builder" ) ;
1263 break;
1264 case 'duplicated':
1265 $updated_message = __( 'Chart duplicated.', "chart-builder" ) ;
1266 break;
1267 case 'deleted':
1268 $updated_message = __( 'Chart deleted.', "chart-builder" ) ;
1269 break;
1270 case 'trashed':
1271 $updated_message = __( 'Chart moved to trash.', "chart-builder" ) ;
1272 break;
1273 case 'restored':
1274 $updated_message = __( 'Chart restored.', "chart-builder" ) ;
1275 break;
1276 case 'all-duplicated':
1277 $updated_message = __( 'Charts are duplicated.', "chart-builder" ) ;
1278 break;
1279 case 'all-deleted':
1280 $updated_message = __( 'Charts are deleted.', "chart-builder" ) ;
1281 break;
1282 case 'all-trashed':
1283 $updated_message = __( 'Charts are moved to trash.', "chart-builder" );
1284 break;
1285 case 'all-restored':
1286 $updated_message = __( 'Charts are restored.', "chart-builder" );
1287 break;
1288 case 'empty-title':
1289 $error = true;
1290 $updated_message = __( 'Error: Chart title can not be empty.', "chart-builder" ) ;
1291 break;
1292 default:
1293 break;
1294 }
1295
1296 if ( empty( $updated_message ) )
1297 return;
1298
1299 $notice_class = 'success';
1300 if( $error ){
1301 $notice_class = 'error';
1302 }
1303 ?>
1304 <div class="notice notice-<?php echo esc_attr( $notice_class ); ?> is-dismissible">
1305 <p> <?php echo esc_html($updated_message); ?> </p>
1306 </div>
1307 <?php
1308 }
1309
1310 }
1311 }