PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.1
4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 4.2.1 All 138 releases
learnpress / inc / Databases / class-lp-course-json-db.php

class-lp-course-json-db.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.4.1, at inc/Databases/class-lp-course-json-db.php

167 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class LP_Course_JSON_DB
4 *
5 * @since 4.2.6.9
6 * @version 1.0.0
7 */
8
9 defined( 'ABSPATH' ) || exit();
10
11 class LP_Course_JSON_DB extends LP_Database {
12 private static $_instance;
13
14 protected function __construct() {
15 parent::__construct();
16 }
17
18 public static function getInstance() {
19 if ( is_null( self::$_instance ) ) {
20 self::$_instance = new self();
21 }
22
23 return self::$_instance;
24 }
25
26 /**
27 * Get Courses
28 *
29 * @param LP_Course_JSON_Filter $filter
30 * @param int $total_rows return total_rows
31 *
32 * @return array|int|string|null
33 * @throws Exception
34 * @version 1.0.0
35 * @since 4.2.6.9
36 */
37 public function get_courses( LP_Course_JSON_Filter $filter, int &$total_rows = 0 ) {
38 $filter->fields = array_merge( $filter->all_fields, $filter->fields );
39
40 if ( empty( $filter->collection ) ) {
41 $filter->collection = $this->tb_lp_courses;
42 }
43
44 if ( empty( $filter->collection_alias ) ) {
45 $filter->collection_alias = 'c';
46 }
47
48 $ca = $filter->collection_alias;
49
50 // Find ID
51 if ( ! empty( $filter->ID ) ) {
52 $filter->where[] = $this->wpdb->prepare( "AND $ca.ID = %d", $filter->ID );
53 }
54
55 // Status
56 $filter->post_status = (array) $filter->post_status;
57 if ( ! empty( $filter->post_status ) ) {
58 $post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );
59 $filter->where[] = $this->wpdb->prepare( "AND $ca.post_status IN (" . $post_status_format . ')', $filter->post_status );
60 }
61
62 // Term ids
63 if ( ! empty( $filter->term_ids ) ) {
64 // Sanitize term ids
65 $filter->term_ids = array_map( 'absint', $filter->term_ids );
66 $term_ids_format = join( ',', $filter->term_ids );
67 $filter->join[] = "INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id";
68 $filter->join[] = "INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id";
69 $filter->where[] = "AND r_term_p.term_taxonomy_id IN ($term_ids_format)";
70 $filter->where[] = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );
71 }
72
73 // Course ids
74 if ( ! empty( $filter->post_ids ) ) {
75 $post_ids = array_map( 'absint', $filter->post_ids );
76 $post_ids_format = join( ',', $post_ids );
77 $filter->where[] = "AND $ca.ID IN ($post_ids_format)";
78 }
79
80 // Title
81 if ( $filter->post_title ) {
82 $filter->where[] = $this->wpdb->prepare( "AND $ca.post_title LIKE %s", '%' . $filter->post_title . '%' );
83 }
84
85 // Name(slug)
86 if ( $filter->post_name ) {
87 $filter->where[] = $this->wpdb->prepare( "AND $ca.post_name = %s", $filter->post_name );
88 }
89
90 // Author
91 if ( $filter->post_author ) {
92 $filter->where[] = $this->wpdb->prepare( "AND $ca.post_author = %d", $filter->post_author );
93 }
94
95 // Authors
96 if ( ! empty( $filter->post_authors ) ) {
97 $post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );
98 $filter->where[] = $this->wpdb->prepare( "AND $ca.ID IN (" . $post_authors_format . ')', $filter->post_authors );
99 }
100
101 $filter = apply_filters( 'lp/courses-json/query/filter', $filter );
102
103 return $this->execute( $filter, $total_rows );
104 }
105
106 /**
107 * Insert data
108 *
109 * @param array $data
110 *
111 * @return int
112 * @throws Exception
113 * @version 1.0.1
114 * @since 4.2.6.9
115 */
116 public function insert_data( array $data ): int {
117 $filter = new LP_Course_JSON_Filter();
118 foreach ( $data as $col_name => $value ) {
119 if ( ! in_array( $col_name, $filter->all_fields ) ) {
120 unset( $data[ $col_name ] );
121 }
122 }
123
124 $this->wpdb->insert( $this->tb_lp_courses, $data );
125
126 $this->check_execute_has_error();
127
128 return $this->wpdb->insert_id;
129 }
130
131 /**
132 * Update data
133 *
134 * @param array $data
135 *
136 * @return bool
137 *
138 * @throws Exception
139 * @since 4.2.6.9
140 * @version 1.0.0
141 */
142 public function update_data( array $data ): bool {
143 if ( empty( $data['ID'] ) ) {
144 throw new Exception( __( 'Invalid ID!', 'learnpress' ) . ' | ' . __FUNCTION__ );
145 }
146
147 $filter = new LP_Course_JSON_Filter();
148 $filter->collection = $this->tb_lp_courses;
149 foreach ( $data as $col_name => $value ) {
150 if ( ! in_array( $col_name, $filter->all_fields ) ) {
151 continue;
152 }
153
154 if ( is_null( $value ) ) {
155 $filter->set[] = $col_name . ' = null';
156 } else {
157 $filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );
158 }
159 }
160
161 $filter->where[] = $this->wpdb->prepare( 'AND ID = %d', $data['ID'] );
162 $this->update_execute( $filter );
163
164 return true;
165 }
166 }
167