PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.3
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.3
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 7.8.7 7.8.6 All 45 releases
← All changes | integrations/meta-box/includes/requirements.php +213 -0 7.9.28.0.3 View file →
@@ -1,0 +1,213 @@
1 +<?php
2 +/**
3 + * Requirements
4 + *
5 + * @package GamiPress\Meta_Box\Requirements
6 + * @since 1.0.0
7 + */
8 +
9 +// Exit if accessed directly
10 +if( !defined( 'ABSPATH' ) ) exit;
11 +
12 +/**
13 + * Add the custom field to the requirement object
14 + *
15 + * @since 1.0.0
16 + *
17 + * @param $requirement
18 + * @param $requirement_id
19 + *
20 + * @return array
21 + */
22 +function gamipress_meta_box_requirement_object( $requirement, $requirement_id ) {
23 +
24 + if( isset( $requirement['trigger_type'] )
25 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_post_field_any_value'
26 + || $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_user_field_any_value' ) ) {
27 +
28 + $requirement['mb_field_name'] = get_post_meta( $requirement_id, '_gamipress_meta_box_field_name', true );
29 +
30 + }
31 +
32 + if( isset( $requirement['trigger_type'] )
33 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_any_post_field_specific_value'
34 + || $requirement['trigger_type'] === 'gamipress_meta_box_update_any_user_field_specific_value' ) ) {
35 +
36 + $requirement['mb_field_value'] = get_post_meta( $requirement_id, '_gamipress_meta_box_field_value', true );
37 + $requirement['mb_field_value_condition'] = get_post_meta( $requirement_id, '_gamipress_meta_box_field_value_condition', true );
38 + }
39 +
40 + if( isset( $requirement['trigger_type'] )
41 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_post_field_specific_value'
42 + || $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_user_field_specific_value' ) ) {
43 +
44 + $requirement['mb_field_name'] = get_post_meta( $requirement_id, '_gamipress_meta_box_field_name', true );
45 + $requirement['mb_field_value'] = get_post_meta( $requirement_id, '_gamipress_meta_box_field_value', true );
46 + $requirement['mb_field_value_condition'] = get_post_meta( $requirement_id, '_gamipress_meta_box_field_value_condition', true );
47 + }
48 +
49 + return $requirement;
50 +}
51 +add_filter( 'gamipress_requirement_object', 'gamipress_meta_box_requirement_object', 10, 2 );
52 +
53 +/**
54 + * Custom field on requirements UI
55 + *
56 + * @since 1.0.0
57 + *
58 + * @param $requirement_id
59 + * @param $post_id
60 + */
61 +function gamipress_meta_box_requirement_ui_fields( $requirement_id, $post_id ) {
62 +
63 + $value_conditions = gamipress_meta_box_get_value_conditions();
64 + $value_condition = get_post_meta( $requirement_id, '_gamipress_meta_box_field_value_condition', true );
65 + $field_value = get_post_meta( $requirement_id, '_gamipress_meta_box_field_value', true );
66 + $field_name = get_post_meta( $requirement_id, '_gamipress_meta_box_field_name', true );
67 + $field_name_user = get_post_meta( $requirement_id, '_gamipress_meta_box_field_name_user', true );
68 +
69 + $post_fields = gamipress_meta_box_get_all_post_fields();
70 +
71 + // Meta Box User Meta Extension
72 + if ( defined( 'MBAIO_DIR' ) || class_exists( 'RWMB_User_Storage' ) ) {
73 +
74 + if ( ! function_exists( 'rwmb_get_object_fields' ) ) {
75 + return;
76 + }
77 +
78 + $user_fields = rwmb_get_object_fields( 'user', 'user' );
79 + }
80 +
81 + ?>
82 +
83 + <span class="mb-field-name">
84 + <select>
85 + <?php foreach( $post_fields as $id => $name ) : ?>
86 + <option value="<?php echo esc_attr( $id ); ?>" <?php selected( $field_name, $id ); ?>><?php echo esc_html( $name['name'] ); ?></option>
87 + <?php endforeach; ?>
88 + </select>
89 + </span>
90 +
91 + <?php
92 + if ( isset( $user_fields ) ){
93 + ?>
94 +
95 + <span class="mb-field-name-user">
96 + <select>
97 + <?php foreach( $user_fields as $id => $name ) : ?>
98 + <option value="<?php echo esc_attr( $id ); ?>" <?php selected( $field_name_user, $id ); ?>><?php echo esc_html( $name['name'] ); ?></option>
99 + <?php endforeach; ?>
100 + </select>
101 + </span>
102 +
103 + <?php
104 + }
105 + ?>
106 +
107 + <span class="mb-field-value">
108 + <select>
109 + <?php foreach( $value_conditions as $id => $name ) : ?>
110 + <option value="<?php echo esc_attr( $id ); ?>" <?php selected( $value_condition, $id ); ?>><?php echo esc_html( $name ); ?></option>
111 + <?php endforeach; ?>
112 + </select>
113 + <input type="text" value="<?php echo $field_value; ?>" placeholder="<?php echo __( 'Field value', 'gamipress' ); ?>" />
114 + </span>
115 +
116 + <?php
117 +}
118 +add_action( 'gamipress_requirement_ui_html_after_achievement_post', 'gamipress_meta_box_requirement_ui_fields', 10, 2 );
119 +
120 +/**
121 + * Custom handler to save the custom field on requirements UI
122 + *
123 + * @since 1.0.0
124 + *
125 + * @param $requirement_id
126 + * @param $requirement
127 + */
128 +function gamipress_meta_box_ajax_update_requirement( $requirement_id, $requirement ) {
129 +
130 + $requirement = wp_parse_args( $requirement, array(
131 + 'mb_field_name' => '',
132 + 'mb_field_name_user' => '',
133 + 'mb_field_value_condition' => '',
134 + 'mb_field_value' => '',
135 + ) );
136 +
137 + // Specific Field Any Value
138 + if( isset( $requirement['trigger_type'] )
139 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_post_field_any_value' ) ) {
140 +
141 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_name', $requirement['mb_field_name'] );
142 + }
143 +
144 + // Specific Field Any Value
145 + if( isset( $requirement['trigger_type'] )
146 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_user_field_any_value' ) ) {
147 +
148 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_name_user', $requirement['mb_field_name_user'] );
149 + }
150 +
151 + // Any Field Specific Value
152 + if( isset( $requirement['trigger_type'] )
153 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_any_post_field_specific_value'
154 + || $requirement['trigger_type'] === 'gamipress_meta_box_update_any_user_field_specific_value' ) ) {
155 +
156 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_value_condition', $requirement['mb_field_value_condition'] );
157 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_value', $requirement['mb_field_value'] );
158 +
159 +
160 + }
161 +
162 + // Specific Field Specific Value
163 + if( isset( $requirement['trigger_type'] )
164 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_post_field_specific_value' ) ) {
165 +
166 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_value_condition', $requirement['mb_field_value_condition'] );
167 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_value', $requirement['mb_field_value'] );
168 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_name', $requirement['mb_field_name'] );
169 + }
170 +
171 + // Specific Field Specific Value
172 + if( isset( $requirement['trigger_type'] )
173 + && ( $requirement['trigger_type'] === 'gamipress_meta_box_update_specific_user_field_specific_value' ) ) {
174 +
175 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_value_condition', $requirement['mb_field_value_condition'] );
176 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_value', $requirement['mb_field_value'] );
177 + update_post_meta( $requirement_id, '_gamipress_meta_box_field_name_user', $requirement['mb_field_name_user'] );
178 + }
179 +}
180 +add_action( 'gamipress_ajax_update_requirement', 'gamipress_meta_box_ajax_update_requirement', 10, 2 );
181 +
182 +/**
183 + * Get meta box fields objects related to posts and custom types
184 + *
185 + * @since 1.0.0
186 + *
187 + * @return array
188 + */
189 +function gamipress_meta_box_get_all_post_fields() {
190 +
191 + if ( ! function_exists( 'rwmb_get_object_fields' ) ) {
192 + return array();
193 + }
194 +
195 + $post_fields = rwmb_get_object_fields( 'post' );
196 +
197 + // Get custom types created on Meta Box
198 + $custom_post_types = get_posts( [
199 + 'post_type' => 'mb-post-type',
200 + 'post_status' => 'publish',
201 + 'numberposts' => -1
202 + ] );
203 +
204 + if ( !empty ( $custom_post_types ) ) {
205 + foreach ( $custom_post_types as $custom_type ) {
206 + $custom_fields = rwmb_get_object_fields( $custom_type->post_name );
207 + $post_fields = array_merge($post_fields, $custom_fields);
208 + }
209 + }
210 +
211 + return $post_fields;
212 +
213 +}