PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 7.9.5
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v7.9.5
8.0.5 8.0.4 8.0.3 8.0.1 8.0.2 8.0.0 7.9.9.7 7.9.9.6 7.9.9.5 7.9.9.4 7.9.9.3 7.9.9.2 7.9.9.1 7.9.9 7.9.8 7.9.7 7.9.6 7.9.5 7.9.4 7.9.3 7.9.2 7.9.1 7.9.0 7.8.9 7.8.8 All 47 releases
gamipress / includes / admin / upgrades / 1.4.7.php

1.4.7.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI 7.9.5, at includes/admin/upgrades/1.4.7.php

319 lines 9.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * 1.4.7 Upgrades
4 *
5 * @package GamiPress\Admin\Upgrades\1.4.7
6 * @since 1.4.7
7 */
8 // Exit if accessed directly
9 if( !defined( 'ABSPATH' ) ) exit;
10
11 /**
12 * Return 1.4.7 as last required upgrade
13 *
14 * @return string
15 */
16 function gamipress_147_is_last_required_upgrade() {
17
18 return '1.4.7';
19
20 }
21 add_filter( 'gamipress_get_last_required_upgrade', 'gamipress_147_is_last_required_upgrade', 147 );
22
23 /**
24 * Process 1.4.7 upgrades
25 *
26 * @param string $stored_version
27 *
28 * @return string
29 */
30 function gamipress_147_upgrades( $stored_version ) {
31
32 // Already upgrade
33 if ( version_compare( $stored_version, '1.4.7', '>=' ) ) {
34 return $stored_version;
35 }
36
37 // Prevent run upgrade until database tables are created
38 if( ! gamipress_database_table_has_column( GamiPress()->db->logs, 'trigger_type' ) ) {
39 return $stored_version;
40 }
41
42 // Check if there is something to migrate
43 $upgrade_check = gamipress_147_maybe_upgrade();
44
45 if( $upgrade_check === 0 ) {
46
47 // There is nothing to update, so upgrade
48 $stored_version = '1.4.7';
49
50 } else if( is_gamipress_upgrade_completed( 'update_logs_trigger_type' ) ) {
51
52 // Migrations are finished, so upgrade
53 $stored_version = '1.4.7';
54
55 }
56
57 return $stored_version;
58
59 }
60 add_filter( 'gamipress_process_upgrades', 'gamipress_147_upgrades', 147 );
61
62 /**
63 * 1.4.7 upgrades notices
64 */
65 function gamipress_147_upgrades_notices() {
66
67 // Bail if GamiPress is active network wide and we are not in main site
68 if( gamipress_is_network_wide_active() && ! is_main_site() ) {
69 return;
70 }
71
72 // Check user permissions
73 if ( ! current_user_can( gamipress_get_manager_capability() ) ) {
74 return;
75 }
76
77 // Already upgraded!
78 if( is_gamipress_upgraded_to( '1.4.7' ) ) {
79 return;
80 }
81
82 $running_upgrade = get_option( 'gamipress_running_upgrade' );
83
84 // Other upgrade already running
85 if( $running_upgrade && $running_upgrade !== '1.4.7' ) {
86 return;
87 }
88
89 if( ! is_gamipress_upgrade_completed( 'update_logs_trigger_type' ) ) :
90 ?>
91 <div id="gamipress-upgrade-notice" class="updated">
92
93 <?php if( $running_upgrade === '1.4.7' ) : ?>
94
95 <p>
96 <?php _e( 'Upgrading GamiPress database...', 'gamipress' ); ?>
97 </p>
98 <div class="gamipress-upgrade-progress" data-running-upgrade="1.4.7">
99 <div class="gamipress-upgrade-progress-bar" style="width: 0%;"></div>
100 </div>
101
102 <?php else : ?>
103
104 <p>
105 <?php _e( 'GamiPress needs to upgrade the database. <strong>Please backup your database before starting this upgrade.</strong> This upgrade routine will be making changes to the database that are not reversible.', 'gamipress' ); ?>
106 </p>
107 <p>
108 <a href="javascript:void(0);" onClick="jQuery(this).parent().next('p').slideToggle();" class="button"><?php _e( 'Learn more about this upgrade', 'gamipress' ); ?></a>
109 <a href="javascript:void(0);" onClick="gamipress_start_upgrade('1.4.7')" class="button button-primary"><?php _e( 'Start the upgrade', 'gamipress' ); ?></a>
110 </p>
111 <p style="display: none;">
112 <?php _e( '<strong>About this upgrade:</strong><br />This is a <strong><em>mandatory</em></strong> update that will update all logs with new database table fields. This upgrade provides better performance and scalability.', 'gamipress' ); ?>
113 </p>
114
115 <?php endif; ?>
116
117 </div>
118 <?php
119 endif;
120
121 }
122 add_action( 'admin_notices', 'gamipress_147_upgrades_notices' );
123
124 /**
125 * Return the number of entries to upgrade
126 *
127 * @return int
128 */
129 function gamipress_147_upgrade_size() {
130
131 global $wpdb;
132
133 $upgrade_size = 0;
134
135 // Retrieve the count of users earnings to upgrade
136 if( ! is_gamipress_upgrade_completed( 'update_logs_trigger_type' )
137 && gamipress_database_table_has_column( GamiPress()->db->logs, 'trigger_type' ) ) {
138
139 $logs = GamiPress()->db->logs;
140
141 $logs_count = $wpdb->get_var( "SELECT COUNT(*) FROM {$logs} AS l WHERE l.trigger_type = ''" );
142
143 $upgrade_size += absint( $logs_count );
144
145 }
146
147 return $upgrade_size;
148
149 }
150
151 /**
152 * Ajax function to meet the upgrade size
153 */
154 function gamipress_ajax_147_upgrade_info() {
155 // Security check, forces to die if not security passed
156 check_ajax_referer( 'gamipress_admin', 'nonce' );
157
158 // Already upgraded
159 if ( is_gamipress_upgraded_to( '1.4.7' ) ) {
160 wp_send_json_success( array( 'upgraded' => true ) );
161 }
162
163 $upgrade_size = gamipress_147_upgrade_size();
164
165 wp_send_json_success( array( 'total' => $upgrade_size ) );
166 }
167 add_action( 'wp_ajax_gamipress_147_upgrade_info', 'gamipress_ajax_147_upgrade_info' );
168
169 /**
170 * Ajax process of 1.4.7 upgrades
171 */
172 function gamipress_ajax_process_147_upgrade() {
173 // Security check, forces to die if not security passed
174 check_ajax_referer( 'gamipress_admin', 'nonce' );
175
176 global $wpdb;
177
178 // Already upgraded
179 if ( is_gamipress_upgraded_to( '1.4.7' ) ) {
180 wp_send_json_success( array( 'upgraded' => true ) );
181 }
182
183 ignore_user_abort( true );
184 set_time_limit( 0 );
185
186 // Add option to meet that upgrade process has been started
187 update_option( 'gamipress_running_upgrade', '1.4.7' );
188
189 $current = isset( $_REQUEST['current'] ) ? absint( $_REQUEST['current'] ) : 0;
190
191 // ----------------------------
192 // User earnings update
193 // ----------------------------
194 if( ! is_gamipress_upgrade_completed( 'update_logs_trigger_type' ) ) {
195
196 // Migrate from log meta _gamipress_trigger_type to trigger field
197 $ct_table = ct_setup_table( 'gamipress_logs' );
198
199 $limit = 100;
200
201 $logs = GamiPress()->db->logs;
202
203 // Retrieve all user earnings without title
204 $results = $wpdb->get_results( "SELECT l.log_id, l.type FROM {$logs} AS l WHERE l.trigger_type = '' LIMIT {$limit}" );
205
206 foreach( $results as $log ) {
207
208 // Setup the trigger value based on the log type
209 switch( $log->type ) {
210 case 'event_trigger':
211 $trigger_type = ct_get_object_meta( $log->log_id, '_gamipress_trigger_type', true );
212
213 if( empty( $trigger_type ) ) {
214 $trigger_type = __( '(no trigger)', 'gamipress' );
215 }
216 break;
217 case 'achievement_earn':
218 $trigger_type = 'gamipress_unlock_achievement';
219 break;
220 case 'achievement_award':
221 $trigger_type = 'gamipress_award_achievement';
222 break;
223 case 'points_earn':
224 $trigger_type = 'gamipress_earn_points';
225 break;
226 case 'points_deduct':
227 $trigger_type = 'gamipress_deduct_points';
228 break;
229 case 'points_award':
230 $trigger_type = 'gamipress_award_points';
231 break;
232 case 'points_revoke':
233 $trigger_type = 'gamipress_revoke_points';
234 break;
235 case 'rank_earn':
236 $trigger_type = 'gamipress_unlock_rank';
237 break;
238 case 'rank_award':
239 $trigger_type = 'gamipress_award_rank';
240 break;
241 default:
242 $trigger_type = __( '(no trigger)', 'gamipress' );
243 break;
244 }
245
246 $ct_table->db->update(
247 array( 'trigger_type' => $trigger_type ),
248 array( 'log_id' => $log->log_id )
249 );
250
251 $current++;
252 }
253
254 $logs_count = $wpdb->get_var( "SELECT COUNT(*) FROM {$logs} AS l WHERE l.trigger_type = ''" );
255
256 if( absint( $logs_count ) === 0 ) {
257 gamipress_set_upgrade_complete( 'update_logs_trigger_type' );
258 }
259
260 }
261
262 // Successfully upgraded
263 if( is_gamipress_upgrade_completed( 'update_logs_trigger_type' ) ) {
264
265 // Remove option to meet that upgrade process has been finished
266 delete_option( 'gamipress_running_upgrade' );
267
268 // Updated stored version
269 update_option( 'gamipress_version', '1.4.7' );
270
271 wp_send_json_success( array( 'upgraded' => true ) );
272 }
273
274 wp_send_json_success( array( 'current' => $current ) );
275
276 }
277 add_action( 'wp_ajax_gamipress_process_147_upgrade', 'gamipress_ajax_process_147_upgrade' );
278
279 function gamipress_ajax_stop_process_147_upgrade() {
280 // Security check, forces to die if not security passed
281 check_ajax_referer( 'gamipress_admin', 'nonce' );
282
283 $running_upgrade = get_option( 'gamipress_running_upgrade' );
284
285 // Check if is out upgrade
286 if( $running_upgrade === '1.4.7' ) {
287 delete_option( 'gamipress_running_upgrade' );
288 }
289
290 wp_send_json_success();
291 }
292 add_action( 'wp_ajax_gamipress_stop_process_147_upgrade', 'gamipress_ajax_stop_process_147_upgrade' );
293
294 /**
295 * Check if it is necessary upgrade
296 *
297 * @return int
298 */
299 function gamipress_147_maybe_upgrade() {
300
301 global $wpdb;
302
303 $upgrade_check = 0;
304
305 // Retrieve the count of users earnings to upgrade
306 if( ! is_gamipress_upgrade_completed( 'update_logs_trigger_type' )
307 && gamipress_database_table_has_column( GamiPress()->db->logs, 'trigger_type' ) ) {
308
309 $logs = GamiPress()->db->logs;
310
311 $logs_count = $wpdb->get_var( "SELECT COUNT(*) FROM {$logs} AS l WHERE l.trigger_type = '' LIMIT 1" );
312
313 $upgrade_check += absint( $logs_count );
314
315 }
316
317 return $upgrade_check;
318
319 }