PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
4.4.8 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 All 139 releases
← All changes | inc/Databases/QuizQuestionsDB.php +188 -188 4.3.9.14.4.8 View file →
@@ -1,188 +1,188 @@
1 -<?php
2 -
3 -namespace LearnPress\Databases;
4 -
5 -use Exception;
6 -use LearnPress\Filters\QuizQuestionsFilter;
7 -use LP_Database;
8 -use LP_Helper;
9 -
10 -if ( ! defined( 'ABSPATH' ) ) {
11 - exit; // Exit if accessed directly
12 -}
13 -
14 -/**
15 - * Class QuizQuestionsDB
16 - *
17 - * @since 4.2.9
18 - * @version 1.0.1
19 - */
20 -class QuizQuestionsDB extends DataBase {
21 - private static $_instance;
22 -
23 - protected function __construct() {
24 - parent::__construct();
25 - }
26 -
27 - public static function getInstance() {
28 - if ( is_null( self::$_instance ) ) {
29 - self::$_instance = new self();
30 - }
31 -
32 - return self::$_instance;
33 - }
34 -
35 - /**
36 - * @throws Exception
37 - */
38 - public function get_quiz_questions( QuizQuestionsFilter $filter, &$total_rows = 0 ) {
39 - $filter->fields = array_merge( $filter->all_fields, $filter->fields );
40 -
41 - if ( empty( $filter->collection ) ) {
42 - $filter->collection = $this->tb_lp_quiz_questions;
43 - }
44 -
45 - if ( empty( $filter->collection_alias ) ) {
46 - $filter->collection_alias = 'qq';
47 - }
48 -
49 - // By quiz id
50 - if ( ! empty( $filter->quiz_id ) ) {
51 - $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.quiz_id = %d", $filter->quiz_id );
52 - }
53 -
54 - // By question id
55 - if ( ! empty( $filter->question_id ) ) {
56 - $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.question_id = %d", $filter->question_id );
57 - }
58 -
59 - // Question ids
60 - if ( ! empty( $filter->question_ids ) ) {
61 - $question_ids_format = LP_Helper::db_format_array( $filter->question_ids );
62 - $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.question_id IN (" . $question_ids_format . ')', $filter->question_ids );
63 - }
64 -
65 - // Quiz ids
66 - if ( ! empty( $filter->quiz_ids ) ) {
67 - $quiz_ids_format = LP_Helper::db_format_array( $filter->question_ids );
68 - $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.quiz_id IN (" . $quiz_ids_format . ')', $filter->quiz_ids );
69 - }
70 -
71 - return $this->execute( $filter, $total_rows );
72 - }
73 -
74 - /**
75 - * Get last item number order on section
76 - *
77 - * @throws Exception
78 - */
79 - public function get_last_number_order( int $quiz_id = 0 ): int {
80 - $query = $this->wpdb->prepare(
81 - "SELECT MAX(question_order)
82 - FROM $this->tb_lp_quiz_questions
83 - WHERE quiz_id = %d",
84 - $quiz_id
85 - );
86 -
87 - $number_order = intval( $this->wpdb->get_var( $query ) );
88 -
89 - $this->check_execute_has_error();
90 -
91 - return $number_order;
92 - }
93 -
94 - /**
95 - * Insert data
96 - *
97 - * @param array $data
98 - *
99 - * @return int
100 - * @throws Exception
101 - * @version 1.0.0
102 - * @since 4.2.9
103 - */
104 - public function insert_data( array $data ): int {
105 - $filter = new QuizQuestionsFilter();
106 -
107 - foreach ( $data as $col_name => $value ) {
108 - if ( ! in_array( $col_name, $filter->all_fields ) ) {
109 - unset( $data[ $col_name ] );
110 - }
111 - }
112 -
113 - // quiz_question_id is auto increment.
114 - unset( $data['quiz_question_id'] );
115 -
116 - $this->wpdb->insert( $this->tb_lp_quiz_questions, $data );
117 -
118 - $this->check_execute_has_error();
119 -
120 - return $this->wpdb->insert_id;
121 - }
122 -
123 - /**
124 - * Update data
125 - *
126 - * @param array $data
127 - *
128 - * @return bool
129 - *
130 - * @throws Exception
131 - * @since 4.2.9
132 - * @version 1.0.0
133 - */
134 - public function update_data( array $data ): bool {
135 - if ( empty( $data['quiz_question_id'] ) ) {
136 - throw new Exception( __( 'Invalid quiz_question_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );
137 - }
138 -
139 - $filter = new QuizQuestionsFilter();
140 - $filter->collection = $this->tb_lp_quiz_questions;
141 - foreach ( $data as $col_name => $value ) {
142 - if ( ! in_array( $col_name, $filter->all_fields ) ) {
143 - continue;
144 - }
145 -
146 - if ( is_null( $value ) ) {
147 - $filter->set[] = $col_name . ' = null';
148 - } else {
149 - $filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );
150 - }
151 - }
152 -
153 - $filter->where[] = $this->wpdb->prepare( 'AND quiz_question_id = %d', $data['quiz_question_id'] );
154 - $this->update_execute( $filter );
155 -
156 - return true;
157 - }
158 -
159 - /**
160 - * Update questions position
161 - * Update question_order of each item in quiz.
162 - *
163 - * @throws Exception
164 - * @since 4.2.9
165 - * @version 1.0.0
166 - */
167 - public function update_question_position( array $question_ids, $quiz_id ) {
168 - $filter = new QuizQuestionsFilter();
169 - $filter->collection = $this->tb_lp_quiz_questions;
170 - $SET_SQL = 'question_order = CASE';
171 -
172 - foreach ( $question_ids as $position => $question_id ) {
173 - ++$position;
174 - $question_id = absint( $question_id );
175 - if ( empty( $question_id ) ) {
176 - continue;
177 - }
178 -
179 - $SET_SQL .= $this->wpdb->prepare( ' WHEN question_id = %d THEN %d', $question_id, $position );
180 - }
181 -
182 - $SET_SQL .= ' ELSE question_order END';
183 - $filter->set[] = $SET_SQL;
184 - $filter->where[] = $this->wpdb->prepare( 'AND quiz_id = %d', $quiz_id );
185 -
186 - $this->update_execute( $filter );
187 - }
188 -}
1 +<?php
2 +
3 +namespace LearnPress\Databases;
4 +
5 +use Exception;
6 +use LearnPress\Filters\QuizQuestionsFilter;
7 +use LP_Database;
8 +use LP_Helper;
9 +
10 +if ( ! defined( 'ABSPATH' ) ) {
11 + exit; // Exit if accessed directly
12 +}
13 +
14 +/**
15 + * Class QuizQuestionsDB
16 + *
17 + * @since 4.2.9
18 + * @version 1.0.1
19 + */
20 +class QuizQuestionsDB extends DataBase {
21 + private static $_instance;
22 +
23 + protected function __construct() {
24 + parent::__construct();
25 + }
26 +
27 + public static function getInstance() {
28 + if ( is_null( self::$_instance ) ) {
29 + self::$_instance = new self();
30 + }
31 +
32 + return self::$_instance;
33 + }
34 +
35 + /**
36 + * @throws Exception
37 + */
38 + public function get_quiz_questions( QuizQuestionsFilter $filter, &$total_rows = 0 ) {
39 + $filter->fields = array_merge( $filter->all_fields, $filter->fields );
40 +
41 + if ( empty( $filter->collection ) ) {
42 + $filter->collection = $this->tb_lp_quiz_questions;
43 + }
44 +
45 + if ( empty( $filter->collection_alias ) ) {
46 + $filter->collection_alias = 'qq';
47 + }
48 +
49 + // By quiz id
50 + if ( ! empty( $filter->quiz_id ) ) {
51 + $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.quiz_id = %d", $filter->quiz_id );
52 + }
53 +
54 + // By question id
55 + if ( ! empty( $filter->question_id ) ) {
56 + $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.question_id = %d", $filter->question_id );
57 + }
58 +
59 + // Question ids
60 + if ( ! empty( $filter->question_ids ) ) {
61 + $question_ids_format = LP_Helper::db_format_array( $filter->question_ids );
62 + $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.question_id IN (" . $question_ids_format . ')', $filter->question_ids );
63 + }
64 +
65 + // Quiz ids
66 + if ( ! empty( $filter->quiz_ids ) ) {
67 + $quiz_ids_format = LP_Helper::db_format_array( $filter->question_ids );
68 + $filter->where[] = $this->wpdb->prepare( "AND {$filter->collection_alias}.quiz_id IN (" . $quiz_ids_format . ')', $filter->quiz_ids );
69 + }
70 +
71 + return $this->execute( $filter, $total_rows );
72 + }
73 +
74 + /**
75 + * Get last item number order on section
76 + *
77 + * @throws Exception
78 + */
79 + public function get_last_number_order( int $quiz_id = 0 ): int {
80 + $query = $this->wpdb->prepare(
81 + "SELECT MAX(question_order)
82 + FROM $this->tb_lp_quiz_questions
83 + WHERE quiz_id = %d",
84 + $quiz_id
85 + );
86 +
87 + $number_order = intval( $this->wpdb->get_var( $query ) );
88 +
89 + $this->check_execute_has_error();
90 +
91 + return $number_order;
92 + }
93 +
94 + /**
95 + * Insert data
96 + *
97 + * @param array $data
98 + *
99 + * @return int
100 + * @throws Exception
101 + * @version 1.0.0
102 + * @since 4.2.9
103 + */
104 + public function insert_data( array $data ): int {
105 + $filter = new QuizQuestionsFilter();
106 +
107 + foreach ( $data as $col_name => $value ) {
108 + if ( ! in_array( $col_name, $filter->all_fields ) ) {
109 + unset( $data[ $col_name ] );
110 + }
111 + }
112 +
113 + // quiz_question_id is auto increment.
114 + unset( $data['quiz_question_id'] );
115 +
116 + $this->wpdb->insert( $this->tb_lp_quiz_questions, $data );
117 +
118 + $this->check_execute_has_error();
119 +
120 + return $this->wpdb->insert_id;
121 + }
122 +
123 + /**
124 + * Update data
125 + *
126 + * @param array $data
127 + *
128 + * @return bool
129 + *
130 + * @throws Exception
131 + * @since 4.2.9
132 + * @version 1.0.0
133 + */
134 + public function update_data( array $data ): bool {
135 + if ( empty( $data['quiz_question_id'] ) ) {
136 + throw new Exception( __( 'Invalid quiz_question_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );
137 + }
138 +
139 + $filter = new QuizQuestionsFilter();
140 + $filter->collection = $this->tb_lp_quiz_questions;
141 + foreach ( $data as $col_name => $value ) {
142 + if ( ! in_array( $col_name, $filter->all_fields ) ) {
143 + continue;
144 + }
145 +
146 + if ( is_null( $value ) ) {
147 + $filter->set[] = $col_name . ' = null';
148 + } else {
149 + $filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );
150 + }
151 + }
152 +
153 + $filter->where[] = $this->wpdb->prepare( 'AND quiz_question_id = %d', $data['quiz_question_id'] );
154 + $this->update_execute( $filter );
155 +
156 + return true;
157 + }
158 +
159 + /**
160 + * Update questions position
161 + * Update question_order of each item in quiz.
162 + *
163 + * @throws Exception
164 + * @since 4.2.9
165 + * @version 1.0.0
166 + */
167 + public function update_question_position( array $question_ids, $quiz_id ) {
168 + $filter = new QuizQuestionsFilter();
169 + $filter->collection = $this->tb_lp_quiz_questions;
170 + $SET_SQL = 'question_order = CASE';
171 +
172 + foreach ( $question_ids as $position => $question_id ) {
173 + ++$position;
174 + $question_id = absint( $question_id );
175 + if ( empty( $question_id ) ) {
176 + continue;
177 + }
178 +
179 + $SET_SQL .= $this->wpdb->prepare( ' WHEN question_id = %d THEN %d', $question_id, $position );
180 + }
181 +
182 + $SET_SQL .= ' ELSE question_order END';
183 + $filter->set[] = $SET_SQL;
184 + $filter->where[] = $this->wpdb->prepare( 'AND quiz_id = %d', $quiz_id );
185 +
186 + $this->update_execute( $filter );
187 + }
188 +}