399 lines
6.5 KiB
PHP
399 lines
6.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* ACF User Form Class
|
|
*
|
|
* All the logic for adding fields to users
|
|
*
|
|
* @class acf_form_user
|
|
* @package ACF
|
|
* @subpackage Forms
|
|
*/
|
|
|
|
if( ! class_exists('acf_form_user') ) :
|
|
|
|
class acf_form_user {
|
|
|
|
var $form = '#createuser';
|
|
|
|
|
|
/*
|
|
* __construct
|
|
*
|
|
* This function will setup the class functionality
|
|
*
|
|
* @type function
|
|
* @date 5/03/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function __construct() {
|
|
|
|
// actions
|
|
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
|
|
add_action('login_form_register', array($this, 'admin_enqueue_scripts'));
|
|
|
|
// render
|
|
add_action('show_user_profile', array($this, 'edit_user'));
|
|
add_action('edit_user_profile', array($this, 'edit_user'));
|
|
add_action('user_new_form', array($this, 'user_new_form'));
|
|
add_action('register_form', array($this, 'register_user'));
|
|
|
|
// save
|
|
//add_action('edit_user_profile_update', array($this, 'save_user'));
|
|
//add_action('personal_options_update', array($this, 'save_user'));
|
|
add_action('user_register', array($this, 'save_user'));
|
|
add_action('profile_update', array($this, 'save_user'));
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* validate_page
|
|
*
|
|
* This function will check if the current page is for a post/page edit form
|
|
*
|
|
* @type function
|
|
* @date 23/06/12
|
|
* @since 3.1.8
|
|
*
|
|
* @param N/A
|
|
* @return (boolean)
|
|
*/
|
|
|
|
function validate_page() {
|
|
|
|
// global
|
|
global $pagenow;
|
|
|
|
|
|
// validate page
|
|
if( in_array( $pagenow, array('profile.php', 'user-edit.php', 'user-new.php', 'wp-login.php') ) ) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
// return
|
|
return false;
|
|
}
|
|
|
|
|
|
/*
|
|
* admin_enqueue_scripts
|
|
*
|
|
* This action is run after post query but before any admin script / head actions.
|
|
* It is a good place to register all actions.
|
|
*
|
|
* @type action (admin_enqueue_scripts)
|
|
* @date 26/01/13
|
|
* @since 3.6.0
|
|
*
|
|
* @param N/A
|
|
* @return N/A
|
|
*/
|
|
|
|
function admin_enqueue_scripts() {
|
|
|
|
// validate page
|
|
if( ! $this->validate_page() ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
// load acf scripts
|
|
acf_enqueue_scripts();
|
|
|
|
|
|
// actions
|
|
add_action('acf/input/admin_footer', array($this, 'admin_footer'), 10, 1);
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* register_user
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 8/10/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function register_user() {
|
|
|
|
// update vars
|
|
$this->form = '#registerform';
|
|
|
|
|
|
// render
|
|
$this->render( 0, 'register', 'div' );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* edit_user
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 8/10/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function edit_user( $user ) {
|
|
|
|
// update vars
|
|
$this->form = '#your-profile';
|
|
|
|
|
|
// render
|
|
$this->render( $user->ID, 'edit', 'tr' );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* user_new_form
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 8/10/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function user_new_form() {
|
|
|
|
// update vars
|
|
$this->form = '#createuser';
|
|
|
|
|
|
// render
|
|
$this->render( 0, 'add', 'tr' );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* render
|
|
*
|
|
* This function will render ACF fields for a given $post_id parameter
|
|
*
|
|
* @type function
|
|
* @date 7/10/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param $user_id (int) this can be set to 0 for a new user
|
|
* @param $user_form (string) used for location rule matching. edit | add | register
|
|
* @param $el (string)
|
|
* @return n/a
|
|
*/
|
|
|
|
function render( $user_id, $user_form, $el = 'tr' ) {
|
|
|
|
// vars
|
|
$post_id = "user_{$user_id}";
|
|
$show_title = true;
|
|
|
|
|
|
// show title
|
|
if( $user_form === 'register' ) $show_title = false;
|
|
|
|
|
|
// args
|
|
$args = array(
|
|
'user_id' => 'new',
|
|
'user_form' => $user_form
|
|
);
|
|
|
|
if( $user_id ) $args['user_id'] = $user_id;
|
|
|
|
|
|
// get field groups
|
|
$field_groups = acf_get_field_groups( $args );
|
|
|
|
|
|
// bail early if no field groups
|
|
if( empty($field_groups) ) return;
|
|
|
|
|
|
// form data
|
|
acf_form_data(array(
|
|
'post_id' => $post_id,
|
|
'nonce' => 'user'
|
|
));
|
|
|
|
|
|
// loop
|
|
foreach( $field_groups as $field_group ) {
|
|
|
|
// vars
|
|
$fields = acf_get_fields( $field_group );
|
|
|
|
|
|
// title
|
|
if( $show_title && $field_group['style'] === 'default' ) {
|
|
|
|
echo '<h2>' . $field_group['title'] . '</h2>';
|
|
|
|
}
|
|
|
|
|
|
// table start
|
|
if( $el == 'tr' ) echo '<table class="form-table"><tbody>';
|
|
|
|
|
|
// render fields
|
|
acf_render_fields( $post_id, $fields, $el, $field_group['instruction_placement'] );
|
|
|
|
|
|
// table end
|
|
if( $el == 'tr' ) echo '</tbody></table>';
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* admin_footer
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 27/03/2015
|
|
* @since 5.1.5
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function admin_footer() {
|
|
|
|
?>
|
|
<style type="text/css">
|
|
|
|
<?php if( is_admin() ): ?>
|
|
|
|
/* override for user css */
|
|
.acf-field input[type="text"],
|
|
.acf-field input[type="password"],
|
|
.acf-field input[type="number"],
|
|
.acf-field input[type="search"],
|
|
.acf-field input[type="email"],
|
|
.acf-field input[type="url"],
|
|
.acf-field select {
|
|
max-width: 25em;
|
|
}
|
|
|
|
.acf-field textarea {
|
|
max-width: 500px;
|
|
}
|
|
|
|
|
|
/* allow sub fields to display correctly */
|
|
.acf-field .acf-field input[type="text"],
|
|
.acf-field .acf-field input[type="password"],
|
|
.acf-field .acf-field input[type="number"],
|
|
.acf-field .acf-field input[type="search"],
|
|
.acf-field .acf-field input[type="email"],
|
|
.acf-field .acf-field input[type="url"],
|
|
.acf-field .acf-field textarea,
|
|
.acf-field .acf-field select {
|
|
max-width: none;
|
|
}
|
|
|
|
<?php else: ?>
|
|
|
|
#registerform p.submit {
|
|
text-align: right;
|
|
}
|
|
|
|
<?php endif; ?>
|
|
|
|
</style>
|
|
<script type="text/javascript">
|
|
(function($) {
|
|
|
|
// vars
|
|
var $spinner = $('<?php echo $this->form; ?> p.submit .spinner');
|
|
|
|
|
|
// create spinner if not exists (may exist in future WP versions)
|
|
if( !$spinner.exists() ) {
|
|
|
|
// create spinner (use .acf-spinner becuase .spinner CSS not included on register page)
|
|
$spinner = $('<span class="acf-spinner"></span>');
|
|
|
|
|
|
// append
|
|
$('<?php echo $this->form; ?> p.submit').append( $spinner );
|
|
|
|
}
|
|
|
|
})(jQuery);
|
|
</script>
|
|
<?php
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* save_user
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 8/10/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function save_user( $user_id ) {
|
|
|
|
// verify and remove nonce
|
|
if( ! acf_verify_nonce('user') ) {
|
|
|
|
return $user_id;
|
|
|
|
}
|
|
|
|
|
|
// save data
|
|
if( acf_validate_save_post(true) ) {
|
|
|
|
acf_save_post( "user_{$user_id}" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
new acf_form_user();
|
|
|
|
endif;
|
|
|
|
?>
|