60 |
61 |
62 |
63 |
72 |
73 | get_error_code() || 'blog_taken' == $result->get_error_code() ) {
79 | $signup = $result->get_error_data();
80 | ?>
81 |
82 | ';
84 | if ( $signup->domain . $signup->path == '' ) {
85 | printf( __( 'Your account has been activated. You may now
log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can
reset your password.' ), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, network_site_url( 'wp-login.php?action=lostpassword', 'login' ) );
86 | } else {
87 | printf( __( 'Your site at
%2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can
reset your password.' ), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, network_site_url( 'wp-login.php?action=lostpassword' ) );
88 | }
89 | echo '';
90 | } else {
91 | ?>
92 |
93 | ' . $result->get_error_message() . '';
95 | }
96 | } else {
97 | extract( $result );
98 | $url = is_multisite() ? get_blogaddress_by_id( (int) $blog_id ) : home_url( '', 'http' );
99 | $user = new WP_User( (int) $user_id );
100 | ?>
101 |
102 |
103 |
104 |
user_login ?>
105 |
106 |
107 |
108 | user_activation_key ) ) {
112 | esc_html_e( 'Check your email for the set password link.', 'gravityformsuserregistration' );
113 | } else {
114 | printf( '%s', esc_url( gf_user_registration()->get_set_password_url( $user ) ), esc_html__( 'Set your password.', 'gravityformsuserregistration' ) );
115 | }
116 | ?>
117 |
118 |
119 |
120 |
121 |
View your site or Log in' ), $url, $url . 'wp-login.php' ); ?>
122 |
123 |
Log in or go back to the homepage.' ), network_site_url( 'wp-login.php', 'login' ), network_home_url() ); ?>
124 |
128 |
129 |
133 |
--------------------------------------------------------------------------------
/includes/signups.php:
--------------------------------------------------------------------------------
1 | get_results( "SHOW TABLES LIKE '{$wpdb->signups}'" );
11 |
12 | // Upgrade verions prior to 3.7
13 | if ( $table_exists ) {
14 |
15 | $column_exists = $wpdb->query( "SHOW COLUMNS FROM {$wpdb->signups} LIKE 'signup_id'" );
16 |
17 | if ( empty( $column_exists ) ) {
18 |
19 | // New primary key for signups.
20 | $wpdb->query( "ALTER TABLE $wpdb->signups ADD signup_id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST" );
21 | $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain" );
22 |
23 | }
24 |
25 | }
26 |
27 | self::install_signups();
28 |
29 | }
30 |
31 | private static function install_signups() {
32 | global $wpdb;
33 |
34 | // Signups is not there and we need it so let's create it
35 | require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
36 |
37 | // Use WP's core CREATE TABLE query
38 | $create_queries = wp_get_db_schema( 'ms_global' );
39 | if ( ! is_array( $create_queries ) ) {
40 | $create_queries = explode( ';', $create_queries );
41 | $create_queries = array_filter( $create_queries );
42 | }
43 |
44 | // Filter out all the queries except wp_signups
45 | foreach ( $create_queries as $key => $query ) {
46 | if ( preg_match( "|CREATE TABLE ([^ ]*)|", $query, $matches ) ) {
47 | if ( trim( $matches[1], '`' ) !== $wpdb->signups ) {
48 | unset( $create_queries[ $key ] );
49 | }
50 | }
51 | }
52 |
53 | // Run WordPress's database upgrader
54 | if ( ! empty( $create_queries ) ) {
55 | $result = dbDelta( $create_queries );
56 | }
57 |
58 | }
59 |
60 | /**
61 | * Add signups property to $wpdb object. Used by several MS functions.
62 | */
63 | private static function add_signups_to_wpdb() {
64 | global $wpdb;
65 | $wpdb->signups = $wpdb->base_prefix . 'signups';
66 | }
67 |
68 | public static function prep_signups_functionality() {
69 |
70 | if ( ! is_multisite() ) {
71 |
72 | // require MS functions
73 | require_once( ABSPATH . 'wp-includes/ms-functions.php' );
74 |
75 | // add $wpdb->signups property (accessed in various MS functions)
76 | self::add_signups_to_wpdb();
77 |
78 | // remove filter which checks for Network setting (not active on non-ms install)
79 | remove_filter( 'option_users_can_register', 'users_can_register_signup_filter' );
80 |
81 | }
82 |
83 | // signup: update the signup URL to GF's custom activation page
84 | add_filter( 'wpmu_signup_user_notification_email', array( 'GFUserSignups', 'modify_signup_user_notification_message' ), 10, 4 );
85 | add_filter( 'wpmu_signup_blog_notification_email', array( 'GFUserSignups', 'modify_signup_blog_notification_message' ), 10, 7 );
86 |
87 | // disable activation email for manual activation feeds
88 | add_filter( 'wpmu_signup_user_notification', array( 'GFUserSignups', 'maybe_suppress_signup_user_notification' ), 10, 3 );
89 | add_filter( 'wpmu_signup_blog_notification', array( 'GFUserSignups', 'maybe_suppress_signup_blog_notification' ), 10, 6 );
90 |
91 | add_filter( 'wpmu_signup_user_notification', array( __class__, 'add_site_name_filter' ) );
92 | add_filter( 'wpmu_signup_user_notification_subject', array( __class__, 'remove_site_name_filter' ) );
93 |
94 | // signup: BP cancels default MS signup notification and replaces with its own; hook up to BP's custom notification hook
95 | if ( gf_user_registration()->is_bp_active() ) {
96 | add_filter( 'bp_core_activation_signup_user_notification_message', array( 'GFUserSignups', 'modify_signup_user_notification_message' ), 10, 4 );
97 | add_filter( 'bp_core_activation_signup_blog_notification_message', array( 'GFUserSignups', 'modify_signup_blog_notification_message' ), 10, 7 );
98 | }
99 |
100 | }
101 |
102 | public static function maybe_suppress_signup_user_notification( $user, $user_email, $key ) {
103 | return self::is_manual_activation( $key ) ? false : $user;
104 | }
105 |
106 | public static function maybe_suppress_signup_blog_notification( $domain, $path, $title, $user, $user_email, $key ) {
107 | return self::is_manual_activation( $key ) ? false : $user;
108 | }
109 |
110 | public static function is_manual_activation( $key ) {
111 | $signup = GFSignup::get( $key );
112 |
113 | return ! is_wp_error( $signup ) && $signup->get_activation_type() == 'manual';
114 | }
115 |
116 | public static function modify_signup_user_notification_message( $message, $user, $user_email, $key ) {
117 |
118 | // don't send activation email for manual activations
119 | if ( self::is_manual_activation( $key ) ) {
120 | return false;
121 | }
122 |
123 | $url = gf_user_registration()->get_activation_url( $key );
124 |
125 | // BP replaces URL before passing the message, get the BP activation URL and replace
126 | if ( gf_user_registration()->is_bp_active() ) {
127 | $activate_url = esc_url_raw( sprintf( '%s?key=%s', bp_get_activation_page(), $key ) );
128 | $message = str_replace( $activate_url, '%s', $message );
129 | }
130 |
131 | return sprintf( $message, esc_url_raw( $url ) );
132 | }
133 |
134 | public static function modify_signup_blog_notification_message( $message, $domain, $path, $title, $user, $user_email, $key ) {
135 |
136 | // don't send activation email for manual activations
137 | if ( self::is_manual_activation( $key ) ) {
138 | return false;
139 | }
140 |
141 | $url = gf_user_registration()->get_activation_url( $key );
142 |
143 | // BP replaces URL before passing the message, get the BP activation URL and replace
144 | if ( gf_user_registration()->is_bp_active() ) {
145 | $activate_url = esc_url( bp_get_activation_page() . "?key=$key" );
146 | $message = str_replace( $activate_url, '%s', $message );
147 | }
148 |
149 | return sprintf( $message, esc_url_raw( $url ), esc_url( "http://{$domain}{$path}" ), $key );
150 | }
151 |
152 | public static function add_site_name_filter( $return ) {
153 | add_filter( 'site_option_site_name', array( __class__, 'modify_site_name' ) );
154 |
155 | return $return;
156 | }
157 |
158 | public static function remove_site_name_filter( $return ) {
159 | remove_filter( 'site_option_site_name', array( __class__, 'modify_site_name' ) );
160 |
161 | return $return;
162 | }
163 |
164 | public static function modify_site_name( $site_name ) {
165 |
166 | if ( ! $site_name ) {
167 | $site_name = get_site_option( 'blogname' );
168 | }
169 |
170 | return $site_name;
171 | }
172 |
173 | public static function add_signup_meta( $lead_id, $activation_key ) {
174 | gform_update_meta( $lead_id, 'activation_key', $activation_key );
175 | }
176 |
177 | public static function get_lead_activation_key( $lead_id ) {
178 | return gform_get_meta( $lead_id, 'activation_key' );
179 | }
180 |
181 | /**
182 | * Activate a signup.
183 | *
184 | */
185 | public static function activate_signup( $key ) {
186 | global $wpdb, $current_site;
187 |
188 | $blog_id = is_object( $current_site ) ? $current_site->id : false;
189 | $signup = GFSignup::get( $key );
190 |
191 | if ( is_wp_error( $signup ) ) {
192 | return $signup;
193 | }
194 |
195 | $user_id = username_exists( $signup->user_login );
196 | if ( $user_id ) {
197 | //username already exists, go ahead and mark signup activated and return error message
198 | $signup->set_as_activated();
199 |
200 | return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup );
201 | }
202 |
203 | if ( gf_user_registration()->activation_email_exists( $signup->user_email ) ) {
204 | // Email address already exists, return error message.
205 | return new WP_Error( 'email_already_exists', __( 'Sorry, that email address is already used!' ), $signup );
206 | }
207 |
208 | // unbind site creation from gform_user_registered hook, run it manually below
209 | if ( is_multisite() ) {
210 | remove_action( 'gform_user_registered', array( 'GFUser', 'create_new_multisite' ) );
211 | }
212 |
213 | gf_user_registration()->log( "Activating signup for username: {$signup->user_login} - entry: {$signup->lead['id']}" );
214 |
215 | $user_data = gf_user_registration()->create_user( $signup->lead, $signup->form, $signup->config, '', $signup->meta['password_hash'] );
216 | $user_id = rgar( $user_data, 'user_id' );
217 |
218 | if ( ! $user_id ) {
219 | return new WP_Error( 'create_user', __( 'Could not create user' ), $signup );
220 | }
221 |
222 | $signup->set_as_activated();
223 |
224 | // Send notifications
225 | GFAPI::send_notifications( $signup->form, $signup->lead, 'gfur_user_activated' );
226 |
227 | do_action( 'gform_activate_user', $user_id, $user_data, $signup->meta );
228 |
229 | if ( is_multisite() ) {
230 | $ms_options = rgars( $signup->config, 'meta/multisite_options' );
231 | if ( rgar( $ms_options, 'create_site' ) ) {
232 | $blog_id = gf_user_registration()->create_new_multisite( $user_id, $signup->config, $signup->lead, $user_data['password'] );
233 | }
234 | }
235 |
236 | return array( 'user_id' => $user_id, 'password' => $user_data['password'], 'password_hash' => $user_data['password_hash'], 'blog_id' => $blog_id );
237 | }
238 |
239 | public static function delete_signup( $key ) {
240 | $signup = GFSignup::get( $key );
241 |
242 | if ( is_wp_error( $signup ) ) {
243 | return $signup;
244 | }
245 |
246 | do_action( 'gform_userregistration_delete_signup', $signup );
247 |
248 | $result = $signup->delete();
249 |
250 | if ( $result ) {
251 | GFAPI::send_notifications( $signup->form, $signup->lead, 'gfur_user_activation_deleted' );
252 | }
253 |
254 | return $result;
255 | }
256 |
257 | }
258 |
259 | /**
260 | * Create a signup object from a signup key.
261 | */
262 | class GFSignup {
263 |
264 | public $meta;
265 | public $lead;
266 | public $form;
267 | public $config;
268 |
269 | private $error;
270 |
271 | function __construct( $signup ) {
272 |
273 | foreach ( $signup as $key => $value ) {
274 | $this->$key = $value;
275 | }
276 |
277 | $this->meta = unserialize( $signup->meta );
278 | $this->lead = GFFormsModel::get_lead( $this->meta['lead_id'] );
279 | $this->form = GFFormsModel::get_form_meta( $this->lead['form_id'] );
280 | $this->config = gf_user_registration()->get_filtered_single_submission_feed( $this->lead, $this->form );
281 |
282 | }
283 |
284 | public static function get( $key ) {
285 | global $wpdb;
286 |
287 | $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key ) );
288 |
289 | if ( empty( $signup ) ) {
290 | return new WP_Error( 'invalid_key', __( 'Invalid activation key.' ) );
291 | }
292 |
293 | if ( $signup->active ) {
294 | return new WP_Error( 'already_active', __( 'The user is already active.' ), $signup );
295 | }
296 |
297 | return new GFSignup( $signup );
298 | }
299 |
300 | function get_activation_type() {
301 | return rgars( $this->config, 'meta/userActivationValue' );
302 | }
303 |
304 | function set_as_activated() {
305 | global $wpdb;
306 |
307 | // Remove password for security.
308 | $this->meta['password'] = '';
309 |
310 | $now = current_time( 'mysql', true );
311 | $result = $wpdb->update( $wpdb->signups, array(
312 | 'active' => 1,
313 | 'activated' => $now,
314 | 'meta' => serialize( $this->meta ),
315 | ), array( 'activation_key' => $this->activation_key ) );
316 |
317 | return $result;
318 | }
319 |
320 | function delete() {
321 | global $wpdb;
322 |
323 | return $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->signups WHERE activation_key = %s", $this->activation_key ) );
324 | }
325 |
326 | }
327 |
--------------------------------------------------------------------------------
/includes/class-gf-login-widget.php:
--------------------------------------------------------------------------------
1 | load_text_domain();
32 |
33 | // Initialize widget.
34 | WP_Widget::__construct(
35 | 'gform_login_widget',
36 | esc_html__( 'Login', 'gravityformsuserregistration' ),
37 | array(
38 | 'classname' => 'gform_login_widget',
39 | 'description' => esc_html__( 'Gravity Forms Login Widget', 'gravityformsuserregistration' ),
40 | ),
41 | array(
42 | 'width' => 200,
43 | 'height' => 250,
44 | 'id_base' => 'gform_login_widget',
45 | )
46 | );
47 |
48 | }
49 |
50 | /**
51 | * Displays login form.
52 | *
53 | * @see WP_Widget::widget()
54 | *
55 | * @access public
56 | * @param array $args Widget arguments.
57 | * @param array $instance Saved values from database.
58 | */
59 | public function widget( $args, $instance ) {
60 |
61 | extract( $args );
62 |
63 | // Open widget.
64 | $widget = $before_widget;
65 |
66 | // Get the widget title.
67 | $title = is_user_logged_in() ? $instance['logged_in_title'] : $instance['title'];
68 | $title = GFCommon::replace_variables( $title, array(), array() );
69 | $title = apply_filters( 'widget_title', $title );
70 |
71 | // Display the widget title.
72 | $widget .= $title ? $before_title . $title . $after_title : null;
73 |
74 | // Get the tab index.
75 | $tabindex = is_numeric( $instance['tabindex'] ) ? $instance['tabindex'] : 1;
76 |
77 | // Create form.
78 | $form = gf_user_registration()->login_form_object();
79 |
80 | if ( empty( $instance['disable_scripts'] ) && ! is_admin() ) {
81 | RGForms::print_form_scripts( $form, false );
82 | }
83 |
84 | $form_markup = gf_user_registration()->get_login_html( array(
85 | 'display_title' => false,
86 | 'display_description' => false,
87 | 'logged_in_avatar' => '1' === $instance['logged_in_avatar'] ? true : false,
88 | 'logged_in_links' => $instance['logged_in_links'],
89 | 'logged_in_message' => $instance['logged_in_message'],
90 | 'logged_out_links' => $instance['logged_out_links'],
91 | 'login_redirect' => $instance['login_redirect_url'],
92 | 'logout_redirect' => $instance['logout_redirect_url'],
93 | 'tabindex' => $tabindex,
94 | ) );
95 |
96 | // Display form.
97 | $widget .= $form_markup;
98 | $widget .= $after_widget;
99 |
100 | echo $widget;
101 |
102 | }
103 |
104 | /**
105 | * Sanitize widget form values as they are saved.
106 | *
107 | * @see WP_Widget::update()
108 | *
109 | * @access public
110 | * @param mixed $new_instance Values just sent to be saved.
111 | * @param mixed $old_instance Previously saved values from database.
112 | *
113 | * @return array Updated safe values to be saved.
114 | */
115 | public function update( $new_instance, $old_instance ) {
116 |
117 | // Prepare instance.
118 | $instance = $old_instance;
119 | $instance['active_view'] = rgar( $new_instance, 'active_view' );
120 | $instance['title'] = strip_tags( $new_instance['title'] );
121 | $instance['tabindex'] = rgar( $new_instance, 'tabindex' );
122 | $instance['login_redirect_url'] = rgar( $new_instance, 'login_redirect_url' );
123 | $instance['logged_in_title'] = rgar( $new_instance, 'logged_in_title' );
124 | $instance['logged_in_avatar'] = rgar( $new_instance, 'logged_in_avatar' );
125 | $instance['logged_in_message'] = rgar( $new_instance, 'logged_in_message' );
126 | $instance['logged_in_links'] = json_decode( rgar( $new_instance, 'logged_in_links' ), true );
127 | $instance['logged_out_links'] = json_decode( rgar( $new_instance, 'logged_out_links' ), true );
128 | $instance['logout_redirect_url'] = rgar( $new_instance, 'logout_redirect_url' );
129 |
130 | // Remove empty logged in links.
131 | foreach ( $instance['logged_in_links'] as $i => $link ) {
132 | if ( rgblank( $link['text'] ) && rgblank( $link['url'] ) ) {
133 | unset( $instance['logged_in_links'][ $i ] );
134 | }
135 | }
136 | $instance['logged_in_links'] = array_values( $instance['logged_in_links'] );
137 |
138 | // Remove empty logged out links.
139 | foreach ( $instance['logged_out_links'] as $i => $link ) {
140 | if ( rgblank( $link['text'] ) && rgblank( $link['url'] ) ) {
141 | unset( $instance['logged_out_links'][ $i ] );
142 | }
143 | }
144 | $instance['logged_out_links'] = array_values( $instance['logged_out_links'] );
145 |
146 | // Loop through instance properties and sanitize.
147 | foreach ( $instance as $key => &$value ) {
148 |
149 | // Loop through array items and sanitize individually.
150 | if ( is_array( $value ) ) {
151 |
152 | foreach ( $value as &$child_item ) {
153 |
154 | // If child item is array, map sanitization to array.
155 | $child_item = is_array( $child_item ) ? array_map( 'sanitize_text_field', $child_item ) : sanitize_text_field( $child_item );
156 |
157 | }
158 |
159 | } else {
160 |
161 | $value = sanitize_text_field( $value );
162 |
163 | }
164 |
165 | }
166 |
167 | return $instance;
168 |
169 | }
170 |
171 | /**
172 | * Back-end widget form.
173 | *
174 | * @see WP_Widget::form()
175 | *
176 | * @access public
177 | * @param array $instance Previously saved values from database.
178 | */
179 | public function form( $instance ) {
180 |
181 | // Add defaults to widget instance.
182 | $instance = wp_parse_args(
183 | (array) $instance,
184 | array(
185 | 'active_view' => 'logged-out',
186 | 'title' => __( 'Login', 'gravityformsuserregistration' ),
187 | 'tabindex' => '1',
188 | 'login_redirect_url' => '',
189 | 'logged_in_title' => 'Welcome {user:display_name}',
190 | 'logged_in_avatar' => '1',
191 | 'logged_in_message' => '',
192 | 'logout_redirect_url' => '',
193 | 'logged_in_links' => array(
194 | array(
195 | 'text' => esc_html__( 'Logout', 'gravityformsuserregistration' ),
196 | 'url' => '{logout_url}',
197 | ),
198 | ),
199 | 'logged_out_links' => array(
200 | array(
201 | 'text' => esc_html__( 'Register', 'gravityformsuserregistration' ),
202 | 'url' => '{register_url}',
203 | ),
204 | array(
205 | 'text' => esc_html__( 'Forgot Password?', 'gravityformsuserregistration' ),
206 | 'url' => '{password_url}',
207 | ),
208 | ),
209 | )
210 | );
211 |
212 | // Ensure there is at least one logged in links row.
213 | if ( empty( $instance['logged_in_links'] ) ) {
214 | $instance['logged_in_links'] = array( array( 'text' => null, 'url' => null ) );
215 | }
216 |
217 | // Ensure there is at least one logged out links row.
218 | if ( empty( $instance['logged_out_links'] ) ) {
219 | $instance['logged_out_links'] = array( array( 'text' => null, 'url' => null ) );
220 | }
221 |
222 | ?>
223 |
224 |
212 |
213 | %2$s%1$s>', $is_global ? 'h2' : 'h3', __( 'Pending Activations', 'gravityformsuserregistration' ) );
216 |
217 | if ( rgpost( 'is_submit' ) ) {
218 | self::handle_submission();
219 | GFCommon::display_admin_message();
220 | }
221 |
222 | ?>
223 |
224 |
239 |
240 |
241 |
242 |
251 |
252 | 'DESC',
264 | 'order_by' => 'registered',
265 | 'page' => 1,
266 | 'per_page' => 10,
267 | 'get_total' => false,
268 | 'lead_id' => false
269 | ) ) );
270 |
271 | if ( ! is_multisite() ) {
272 | require_once( gf_user_registration()->get_base_path() . '/includes/signups.php' );
273 | GFUserSignups::prep_signups_functionality();
274 | }
275 |
276 | $where = array();
277 |
278 | if ( $form_id ) {
279 | $where[] = $wpdb->prepare( 'l.form_id = %d', $form_id );
280 | }
281 |
282 | if ( $lead_id ) {
283 | $where[] = $wpdb->prepare( "l.id = %d", $lead_id );
284 | }
285 |
286 | $where[] = "s.active = 0";
287 | $where = 'WHERE ' . implode( ' AND ', $where );
288 |
289 | $order = "ORDER BY {$order_by} {$order}";
290 | $offset = ( $page * $per_page ) - $per_page;
291 | $limit_offset = $get_total ? '' : "LIMIT $per_page OFFSET $offset";
292 | $method = $get_total ? 'get_var' : 'get_results';
293 |
294 | if ( $form_id ) {
295 | $entry_table = self::get_entry_table_name();
296 | $entry_meta_table = self::get_entry_meta_table_name();
297 |
298 | $entry_id_column = version_compare( self::get_gravityforms_db_version(), '2.3-dev-1', '<' ) ? 'lead_id' : 'entry_id';
299 |
300 | $charset_db = empty( $wpdb->charset ) ? 'utf8mb4' : $wpdb->charset;
301 |
302 | $collate = ! empty( $wpdb->collate ) ? " COLLATE {$wpdb->collate}" : '';
303 |
304 | $select = $get_total ? 'SELECT count(s.activation_key)' : 'SELECT s.*';
305 | $sql = "
306 | $select FROM {$entry_meta_table} lm
307 | INNER JOIN {$wpdb->signups} s ON CONVERT(s.activation_key USING {$charset_db}) = CONVERT(lm.meta_value USING {$charset_db}) {$collate} AND lm.meta_key = 'activation_key'
308 | INNER JOIN {$entry_table} l ON l.id = lm.{$entry_id_column}
309 | $where
310 | $order
311 | $limit_offset";
312 |
313 | $results = $wpdb->$method( $sql );
314 |
315 | } else {
316 |
317 | $select = $get_total ? 'SELECT count(s.activation_key)' : 'SELECT s.*';
318 | $results = $wpdb->$method( "
319 | $select FROM $wpdb->signups s
320 | $where
321 | $order
322 | $limit_offset"
323 | );
324 |
325 | }
326 |
327 | return $results;
328 | }
329 |
330 | public static function handle_submission() {
331 |
332 | if ( ! wp_verify_nonce( rgpost( 'action_nonce' ), 'action' ) && ! check_admin_referer( 'action_nonce', 'action_nonce' ) ) {
333 | die( 'You have failed...' );
334 | }
335 |
336 | require_once( gf_user_registration()->get_base_path() . '/includes/signups.php' );
337 | GFUserSignups::prep_signups_functionality();
338 |
339 | $action = rgpost('single_action');
340 | $action = !$action ? rgpost('action') != -1 ? rgpost('action') : rgpost('action2') : $action;
341 |
342 | $items = rgpost('item') ? array(rgpost('item')) : rgpost('items');
343 | $item_count = count( $items );
344 | $messages = $errors = array();
345 |
346 | foreach ( $items as $key ) {
347 |
348 | switch ( $action ) {
349 | case 'delete':
350 | $success = GFUserSignups::delete_signup( $key );
351 | if ( $success ) {
352 | gf_user_registration()->add_message_once( _n( 'Item deleted.', 'Items deleted.', count( $items ), 'gravityformsuserregistration' ) );
353 | } else {
354 | gf_user_registration()->add_error_message_once( _n( 'There was an issue deleting this item.', 'There was an issue deleting one or more selected items.', count( $items ), 'gravityformsuserregistration' ) );
355 | }
356 | break;
357 |
358 | case 'activate':
359 |
360 | $userdata = GFUserSignups::activate_signup( $key );
361 |
362 | if ( is_wp_error( $userdata ) ) {
363 | $error = _n( 'There was an issue activating this item', 'There was an issue activating one or more selected items', count( $items ), 'gravityformsuserregistration' );
364 | $error .= ": " . $userdata->get_error_message();
365 | gf_user_registration()->add_error_message_once( $error );
366 | } else {
367 | $message = _n( 'User activated.', 'Users activated.', count( $items ), 'gravityformsuserregistration' );
368 | gf_user_registration()->add_message_once( $message );
369 | }
370 |
371 | break;
372 | }
373 |
374 | }
375 |
376 | }
377 |
378 | public function register_submenu_page_under_users() {
379 | add_submenu_page(
380 | 'users.php',
381 | __( 'Pending Activations', 'gravityformsuserregistration' ),
382 | __( 'Pending Activations', 'gravityformsuserregistration' ),
383 | 'gravityforms_user_registration',
384 | 'gf-pending-activations',
385 | array( $this, 'pending_activations_page' )
386 | );
387 | }
388 |
389 | public function pending_activations_page() {
390 | self::get_page_content();
391 | }
392 |
393 | public function entry_pending_activation_meta_box( $form, $entry ) {
394 |
395 | if ( ! $this->is_entry_pending_activation( $entry ) ) {
396 | return;
397 | }
398 |
399 | ?>
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 | add_pending_activation_meta_box( array( 'entry' => $entry ) ) ?>
410 |
411 |
412 |
413 |
414 |
415 |
416 | $entry['id'], 'get_total' => true ) ) > 0;
422 | }
423 |
424 | /**
425 | * Include the activate user button in the sidebar of the entry detail page.
426 | *
427 | * @param array $meta_boxes The properties for the meta boxes.
428 | * @param array $entry The entry currently being viewed/edited.
429 | *
430 | * @return array
431 | */
432 | public function register_meta_box( $meta_boxes, $entry ) {
433 | if ( $this->is_entry_pending_activation( $entry ) ) {
434 | $meta_boxes['gf_user_pending_activation'] = array(
435 | 'title' => esc_html__( 'User Registration', 'gravityformsuserregistration' ),
436 | 'callback' => array( $this, 'add_pending_activation_meta_box' ),
437 | 'context' => 'side',
438 | );
439 | }
440 |
441 | return $meta_boxes;
442 | }
443 |
444 | /**
445 | * The callback used to echo the content to the gf_user_registration meta box.
446 | *
447 | * @param array $args An array containing the form and entry objects.
448 | */
449 | public function add_pending_activation_meta_box( $args ) {
450 | require_once( gf_user_registration()->get_base_path() . '/includes/signups.php' );
451 |
452 | $entry_id = rgar( $args['entry'], 'id' );
453 | $activation_key = GFUserSignups::get_lead_activation_key( $entry_id );
454 |
455 | ?>
456 |
457 |