%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/19851/cwd/wp-content/plugins/user-registration/includes/admin/
Upload File :
Create Path :
Current File : //proc/19851/cwd/wp-content/plugins/user-registration/includes/admin/class-ur-admin-profile.php

<?php
/**
 * Add extra profile fields for users in admin
 *
 * @author   WPEverest
 * @category Admin
 * @package  UserRegistration/Admin
 * @version  1.0.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

if ( ! class_exists( 'UR_Admin_Profile', false ) ) :

	/**
	 * UR_Admin_Profile Class.
	 */
	class UR_Admin_Profile {

		public function __construct() {
			add_action( 'show_user_profile', array( $this, 'show_user_extra_fields' ) );
			add_action( 'edit_user_profile', array( $this, 'show_user_extra_fields' ) );
			add_action( 'personal_options_update', array( $this, 'update_user_profile' ) );
			add_action( 'edit_user_profile_update', array( $this, 'update_user_profile' ) );
		}

		/**
		 * @deprecated 1.4.1
		 * @param array $all_meta_value, int $form_id
		 */
		public function get_customer_meta_fields( $all_meta_value, $form_id ) {
			ur_deprecated_function( 'UR_Admin_Profile::get_customer_meta_fields', '1.4.1', 'UR_Admin_Profile::get_user_meta_by_form_fields' );
		}

		/**
		 * Get User extra fields from usermeta and integrate with form
		 *
		 * @param  $user_id
		 * @return array Fields to display which are filtered through user_registration_profile_meta_fields before being returned
		 */
		public function get_user_meta_by_form_fields( $user_id ) {

			$show_fields       = array();
			$form_id           = ur_get_form_id_by_userid( $user_id );
			$all_meta_for_user = $this->get_user_meta_by_prefix( $user_id, 'user_registration_' );
			$form_fields       = $this->get_form_fields( $all_meta_for_user, $form_id );

			if ( ! empty( $form_fields ) ) {
				unset( $form_fields['user_registration_profile_pic_url'] );
				$show_fields = apply_filters(
					'user_registration_profile_meta_fields',
					array(
						'user_registration' => array(
							'title'  => sprintf( __( 'User Extra Information %s', 'user-registration' ), '' ),
							'fields' => $form_fields,
						),
					)
				);
			}
			return $show_fields;
		}

		/**
		 * @deprecated 1.4.1
		 * @param array $all_meta_value, int $form_id
		 */
		public function add_customer_meta_fields( $all_meta_value, $form_id ) {
			ur_deprecated_function( 'UR_Admin_Profile::add_customer_meta_fields', '1.4.1', 'UR_Admin_Profile::show_user_extra_fields' );
		}

		/**
		 * Show user extra information in users profile page.
		 *
		 * @param WP_User $user
		 */
		public function show_user_extra_fields( $user ) {
			if ( ! current_user_can( 'manage_options' ) ) {
				return;
			}

			$show_fields = $this->get_user_meta_by_form_fields( $user->ID );
			foreach ( $show_fields as $fieldset_key => $fieldset ) :
				?>
				<h2><?php echo $fieldset['title']; ?></h2>
				<table class="form-table" id="<?php echo esc_attr( 'fieldset-' . $fieldset_key ); ?>">

					<?php
					$profile_field_type = array(
						'select',
						'country',
						'checkbox',
						'button',
						'textarea',
						'radio',
					);
					foreach ( $fieldset['fields'] as $key => $field ) :

						$field['label']       = isset( $field['label'] ) ? $field['label'] : '';
						$field['description'] = isset( $field['description'] ) ? $field['description'] : '';
						$attributes           = isset( $field['attributes'] ) ? $field['attributes'] : array();
						$attribute_string     = '';
						$date_format          = '';

						foreach ( $attributes as $name => $value ) {
							if ( 'data-date-format' === $name ) {
								$date_format = $value;
							}
							if ( is_bool( $value ) ) {
								if ( $value ) {
									$attribute_string .= $name . ' ';
								}
							} else {
								$attribute_string .= sprintf( '%s="%s" ', $name, $value );
							}
						}

						$field_label = $field['label'];
						$field_type  = isset( $field['type'] ) ? $field['type'] : '';

						if ( ! in_array( $field_type, $profile_field_type ) ) {
							$extra_params_key = str_replace( 'user_registration_', 'ur_', $key ) . '_params';
							$extra_params     = json_decode( get_user_meta( $user->ID, $extra_params_key, true ) );
							$field_label      = isset( $extra_params->label ) ? $extra_params->label : $field_label;
						}
						?>

						<tr>
							<th>
								<label
									for="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $field_label ); ?></label>
								<p><span class="description"><?php echo wp_kses_post( $field['description'] ); ?></span></p>
							</th>
							<td>
								<?php if ( ! empty( $field['type'] ) && 'select' === $field['type'] ) : ?>
									<select name="<?php echo esc_attr( $key ); ?>" id="<?php echo esc_attr( $key ); ?>"
											class="<?php echo esc_attr( $field['class'] ); ?>" style="width: 25em;">
										<option><?php echo __( 'Select', 'user-registration' ); ?></option>
										<?php
										$selected = get_user_meta( $user->ID, $key, true );
										foreach ( $field['options'] as $option_key => $option_value ) :
											?>
											<option value="<?php echo esc_attr( trim( $option_key ) ); ?>" <?php selected( $selected, trim( $option_key ), true ); ?>><?php echo esc_attr( trim( $option_value ) ); ?></option>
										<?php endforeach; ?>
									</select>

								<?php elseif ( ! empty( $field['type'] ) && 'country' === $field['type'] ) : ?>
									<select name="<?php echo esc_attr( $key ); ?>" id="<?php echo esc_attr( $key ); ?>"
											class="<?php echo esc_attr( $field['class'] ); ?>" style="width: 25em;">
										<option><?php echo __( 'Select', 'user-registration' ); ?></option>
										<?php
										$selected = esc_attr( get_user_meta( $user->ID, $key, true ) );
										foreach ( $field['options'] as $option_key => $option_value ) :
											?>
											<option
												value="<?php echo esc_attr( trim( $option_key ) ); ?>" <?php selected( $selected, $option_key, true ); ?>><?php echo esc_attr( trim( $option_value ) ); ?></option>
										<?php endforeach; ?>
									</select>

								<?php elseif ( ! empty( $field['type'] ) && 'radio' === $field['type'] ) : ?>
									<?php
									$db_value = get_user_meta( $user->ID, $key, true );
									if ( is_array( $field['options'] ) ) {
										foreach ( $field['options'] as $option_key => $option_value ) {
											?>
											<label><input type="radio"
															name="<?php echo esc_attr( $key ); ?>"
															id="<?php echo esc_attr( $key ); ?>"
															value="<?php echo esc_attr( trim( $option_key ) ); ?>"
															class="<?php echo esc_attr( $field['class'] ); ?>" <?php checked( $db_value, trim( $option_value ), true ); ?>  ><?php echo trim( $option_value ); ?>
											</label><br/>
											<?php
										}
									}
									?>

								<?php elseif ( ! empty( $field['type'] ) && 'checkbox' === $field['type'] ) : ?>
									<?php

									$value = get_user_meta( $user->ID, $key, true );

									if ( is_array( $field['choices'] ) && array_filter( $field['choices'] ) ) {
										foreach ( $field['choices'] as $choice ) {
											?>
											<label><input type="checkbox"
															name="<?php echo esc_attr( $key ); ?>[]"
															id="<?php echo esc_attr( $key ); ?>"
															value="<?php echo esc_attr( trim( $choice ) ); ?>"
															class="<?php echo esc_attr( $field['class'] ); ?>"
																			  <?php
																				if ( is_array( $value ) && in_array( trim( $choice ), $value ) ) {
																					echo 'checked="checked"';
																				} elseif ( $value == $choice ) {
																					echo 'checked="checked"';
																				}
																				?>
											 ><?php echo trim( $choice ); ?></label><br/>
											<?php
										}
									} else {
										?>
										<input type="checkbox" name="<?php echo esc_attr( $key ); ?>"
											   id="<?php echo esc_attr( $key ); ?>" value="1"
											   class="<?php echo esc_attr( $field['class'] ); ?>"
																 <?php
																	if ( $value == '1' ) {
																		echo 'checked="checked"';
																	}
																	?>
										 >
										<?php
									}
									?>
								<?php elseif ( ! empty( $field['type'] ) && 'button' === $field['type'] ) : ?>
									<button id="<?php echo esc_attr( $key ); ?>"
											class="button <?php echo esc_attr( $field['class'] ); ?>"><?php echo esc_html( $field['text'] ); ?></button>
								<?php elseif ( ! empty( $field['type'] ) && 'privacy_policy' === $field['type'] ) : ?>
									<input checked type="checkbox" disabled="disabled"/>

								<?php elseif ( ! empty( $field['type'] ) && 'textarea' === $field['type'] ) : ?>
									<textarea name="<?php echo esc_attr( $key ); ?>"
											  id="<?php echo esc_attr( $key ); ?>"

											  class="<?php echo( ! empty( $field['class'] ) ? esc_attr( $field['class'] ) : 'regular-text' ); ?>"
										<?php echo esc_attr( $attribute_string ); ?>
											  rows="5"
											  cols="30"><?php echo esc_attr( $this->get_user_meta( $user->ID, $key ) ); ?></textarea>

											  <?php elseif ( ! empty( $field['type'] ) && 'date' === $field['type'] ) : ?>
												  <?php
													$value        = $this->get_user_meta( $user->ID, $key );
													$actual_value = $value;
													$value        = str_replace( '/', '-', $value );
													if ( ! strpos( $value, 'to' ) ) {
														$value = '' !== $value ? date_i18n( $date_format, strtotime( $value ) ) : '';
													} else {
														$date_range = explode( 'to', $value );
														$value      = date_i18n( $date_format, strtotime( trim( $date_range[0] ) ) ) . ' to ' . date_i18n( $date_format, strtotime( trim( $date_range[1] ) ) );
													}
													?>
									<input type="text" id="load_flatpickr"
										   value="<?php echo esc_attr( $actual_value ); ?>"
										   class="regular-text"
										   data-id = '<?php echo esc_attr( $key ); ?>'
										   readonly />
										   <input type="hidden" id="formated_date" value="<?php echo esc_attr( $value ); ?>"/>
										   <input type="text" name="<?php echo esc_attr( $key ); ?>"
										   id="<?php echo esc_attr( $key ); ?>"
										   value="<?php echo esc_attr( $value ); ?>"
										   class="<?php echo( ! empty( $field['class'] ) ? esc_attr( $field['class'] ) : 'regular-text' ); ?>"
										   style="display:none"
												  <?php echo $attribute_string; ?>
											/>

												  <?php
								else :

									if ( ! empty( $field['type'] ) ) {
										$data = array(
											'key'   => $key,
											'value' => $this->get_user_meta( $user->ID, $key ),
											'attribute_string' => $attribute_string,
											'field' => $field,

										);
										do_action( 'user_registration_profile_field_' . $field['type'], $data );
									} else {
										$extra_params_key = str_replace( 'user_registration_', 'ur_', $key ) . '_params';
										$extra_params     = json_decode( get_user_meta( $user->ID, $extra_params_key, true ) );

										if ( empty( $extra_params ) ) {
											?>
											<input type="text" name="<?php echo esc_attr( $key ); ?>"
												   id="<?php echo esc_attr( $key ); ?>"
												   value="<?php echo esc_attr( $this->get_user_meta( $user->ID, $key ) ); ?>"
												   class="<?php echo( ! empty( $field['class'] ) ? esc_attr( $field['class'] ) : 'regular-text' ); ?>"
												<?php echo esc_attr( $attribute_string ); ?>
											/>

											<?php
										}
									} endif;
								?>
								<br/>
							</td>
						</tr>
						<?php
					endforeach;
					?>
				</table>
				<?php
			endforeach;

			do_action( 'user_registration_after_user_extra_information', $user );
		}

		/**
		 * @deprecated 1.4.1
		 * @param array $all_meta_value, int $form_id
		 */
		public function save_customer_meta_fields( $all_meta_value, $form_id ) {
			ur_deprecated_function( 'UR_Admin_Profile::save_customer_meta_fields', '1.4.1', 'UR_Admin_Profile::update_user_profile' );
		}

		/**
		 * Save user extra fields on edit user pages.
		 *
		 * @param int $user_id User ID of the user being saved
		 */
		public function update_user_profile( $user_id ) {

			$save_fields = $this->get_user_meta_by_form_fields( $user_id );

			if ( ! empty( $save_fields ) ) {

				$form_id = ur_get_form_id_by_userid( $user_id );

				$profile = user_registration_form_data( $user_id, $form_id );
				do_action( 'user_registration_after_admin_save_profile_validation', $user_id, $profile );

				foreach ( $save_fields as $fieldset ) {
					foreach ( $fieldset['fields'] as $key => $field ) {
						if ( isset( $field['type'] ) && ( 'checkbox' === $field['type'] || 'multi_select2' === $field['type'] || 'wysiwyg' === $field['type'] ) ) {
							if ( isset( $_POST[ $key ] ) ) {
								$value = $_POST[ $key ];
								if ( is_array( $_POST[ $key ] ) ) {
									$value = array_map( 'sanitize_text_field', $value );
								}
								update_user_meta( $user_id, $key, $value );
							} else {
								update_user_meta( $user_id, $key, '' );
							}
						} elseif ( isset( $_POST[ $key ] ) ) {
							update_user_meta( $user_id, $key, sanitize_text_field( $_POST[ $key ] ) );
						}
					}
				}
			}
		}

		/**
		 * Get user meta for a given key, with fallbacks to core user info for pre-existing fields.
		 *
		 * @param int    $user_id User ID of the user being edited
		 * @param string $key  key for user meta field
		 *
		 * @return string
		 */
		protected function get_user_meta( $user_id, $key ) {
			$value           = get_user_meta( $user_id, $key, true );
			$existing_fields = array( 'billing_first_name', 'billing_last_name' );
			if ( ! $value && in_array( $key, $existing_fields ) ) {
				$value = get_user_meta( $user_id, str_replace( 'billing_', '', $key ), true );
			} elseif ( ! $value && ( 'billing_email' === $key ) ) {
				$user  = get_userdata( $user_id );
				$value = $user->user_email;
			}

			return $value;
		}

		/**
		 * Get user meta for a given key prefix, with fallbacks to core user info for pre-existing fields.
		 *
		 * @param int    $user_id User ID of the user being edited
		 * @param string $key_prefix
		 * @return array
		 */
		protected function get_user_meta_by_prefix( $user_id, $key_prefix ) {

			$values        = get_user_meta( $user_id );
			$return_values = array();

			if ( gettype( $values ) != 'array' ) {
				return $return_values;
			}

			foreach ( $values as $meta_key => $value ) {
				if ( substr( $meta_key, 0, strlen( $key_prefix ) ) == $key_prefix ) {
					if ( isset( $value[0] ) ) {
						$return_values[ $meta_key ] = $value[0];
					} elseif ( gettype( $values ) == 'string' ) {
						$return_values[ $meta_key ] = $value;
					}
				}
			}

			return $return_values;
		}

		/**
		 * @deprecated 1.4.1
		 * @param array $all_meta_value, int $form_id
		 */
		public function get_user_meta_fields( $all_meta_value, $form_id ) {
			ur_deprecated_function( 'UR_Admin_Profile::get_user_meta_fields', '1.4.1', 'UR_Admin_Profile::get_form_fields' );
		}

		/**
		 * Get all the registration form fields
		 *
		 * @param $all_meta_value
		 * @param int            $form_id
		 */
		protected function get_form_fields( $all_meta_value, $form_id ) {
			$form_id            = ( $form_id ) ? $form_id : 0;
			$post_content_array = UR()->form->get_form(
				$form_id,
				array(
					'content_only' => true,
					'publish'      => true,
				)
			);

			$fields = array();
			if ( gettype( $post_content_array ) != 'array' ) {
				return $fields;
			}

			$all_meta_value_keys = array_keys( $all_meta_value );

			foreach ( $post_content_array as $post_content_row ) {
				foreach ( $post_content_row as $post_content_grid ) {
					foreach ( $post_content_grid as $field ) {
						$field_name        = isset( $field->general_setting->field_name ) ? $field->general_setting->field_name : '';
						$field_label       = isset( $field->general_setting->label ) ? $field->general_setting->label : '';
						$field_description = isset( $field->general_setting->description ) ? $field->general_setting->description : '';
						$field_key         = isset( $field->field_key ) ? $field->field_key : '';

						if ( 'stripe_gateway' === $field_name ) {
							break;
						}

						if ( $field_label == '' && isset( $field->general_setting->field_name ) ) {
							$field_label_array = explode( '_', $field->general_setting->field_name );
							$field_label       = join( ' ', array_map( 'ucwords', $field_label_array ) );
						}
						if ( $field_name != '' ) {
							$field_index = '';

							if ( in_array( 'user_registration_' . $field_name, $all_meta_value_keys ) ) {
								$field_index            = 'user_registration_' . $field_name;
								$fields[ $field_index ] = array(
									'label'       => $field_label,
									'description' => $field_description,
								);

							} elseif ( ! in_array( $field_name, ur_get_fields_without_prefix() ) ) {
								$field_index            = 'user_registration_' . $field_name;
								$fields[ $field_index ] = array(
									'label'       => $field_label,
									'description' => $field_description,
								);
							}
							switch ( $field_key ) {

								case 'select':
									// Backward compatibility. Modified since 1.5.7.
									$options     = isset( $field->advance_setting->options ) ? explode( ',', $field->advance_setting->options ) : array();
									$option_data = isset( $field->general_setting->options ) ? $field->general_setting->options : $options;
									$option_data = array_map( 'trim', $option_data );

									if ( is_array( $option_data ) && $field_index != '' ) {
										foreach ( $option_data as $index_data => $option ) {
											$fields[ $field_index ]['options'][ $option ] = $option;
										}
										$fields[ $field_index ]['type']  = 'select';
										$fields[ $field_index ]['class'] = '';
									}
									break;

								case 'radio':
									// Backward compatibility. Modified since 1.5.7.
									$options     = isset( $field->advance_setting->options ) ? explode( ',', $field->advance_setting->options ) : array();
									$option_data = isset( $field->general_setting->options ) ? $field->general_setting->options : $options;
									$option_data = array_map( 'trim', $option_data );

									if ( is_array( $option_data ) && $field_index != '' ) {
										foreach ( $option_data as $index_data => $option ) {
											$fields[ $field_index ]['options'][ $option ] = $option;
										}
										$fields[ $field_index ]['type']  = 'radio';
										$fields[ $field_index ]['class'] = '';
									}
									break;

								case 'country':
									$country                           = ur_load_form_field_class( $field_key );
									$fields[ $field_index ]['options'] = $country::get_instance()->get_country();
									$fields[ $field_index ]['type']    = 'country';
									$fields[ $field_index ]['class']   = '';
									break;

								case 'textarea':
									$fields[ $field_index ]['type']  = 'textarea';
									$fields[ $field_index ]['class'] = '';
									break;

								case 'mailchimp':
								case 'mailerlite':
								case 'checkbox':
									// Backward compatibility. Modified since 1.5.7.
									$options      = isset( $field->advance_setting->choices ) ? explode( ',', $field->advance_setting->choices ) : array();
									$choices_data = isset( $field->general_setting->options ) ? $field->general_setting->options : $options;
									$choices_data = array_map( 'trim', $choices_data );

									$fields[ $field_index ]['choices'] = $choices_data;
									$fields[ $field_index ]['type']    = 'checkbox';
									$fields[ $field_index ]['class']   = '';
									break;

								case 'date':
									$fields[ $field_index ]['type'] = 'date';
									$date_format                    = isset( $field->advance_setting->date_format ) ? $field->advance_setting->date_format : '';
									$fields[ $field_index ]['attributes']['data-date-format'] = $date_format;

									if ( isset( $field->advance_setting->enable_min_max ) && 'true' === $field->advance_setting->enable_min_max ) {
										if ( ! empty( $field->advance_setting->min_date ) ) {
											$min_date = str_replace( '/', '-', $field->advance_setting->min_date );
											$fields[ $field_index ]['attributes']['data-min-date'] = '' !== $min_date ? date_i18n( $date_format, strtotime( $min_date ) ) : '';
										}

										if ( ! empty( $field->advance_setting->max_date ) ) {
											$max_date = str_replace( '/', '-', $field->advance_setting->max_date );
											$fields[ $field_index ]['attributes']['data-max-date'] = '' !== $max_date ? date_i18n( $date_format, strtotime( $max_date ) ) : '';
										}
									}

									if ( ! empty( $field->advance_setting->set_current_date ) ) {
										$set_current_date = isset( $field->advance_setting->set_current_date ) ? $field->advance_setting->set_current_date : '';
										$fields[ $field_index ]['attributes']['data-default-date'] = $set_current_date;
									}

									if ( ! empty( $field->advance_setting->enable_date_range ) ) {
										$enable_date_range                                 = isset( $field->advance_setting->enable_date_range ) ? $field->advance_setting->enable_date_range : '';
										$fields[ $field_index ]['attributes']['data-mode'] = $enable_date_range;
									}
									break;

								case 'privacy_policy':
									$fields[ $field_index ]['type'] = 'privacy_policy';
									break;
							}
						}// End switch().
						$filter_data         = array(
							'fields'     => $fields,
							'field'      => $field,
							'field_name' => $field_name,
						);
						$filtered_data_array = apply_filters( 'user_registration_profile_field_filter_' . $field_key, $filter_data );
						if ( isset( $filtered_data_array['fields'] ) ) {
							$fields = $filtered_data_array['fields'];
						}
					}// End foreach().
				}// End foreach().
			}// End foreach().
			return $fields;
		}
	}
endif;

return new UR_Admin_Profile();

Zerion Mini Shell 1.0