moonorongo
4/26/2017 - 11:46 AM

[Users WP edit] agregar fields a un user de wordpress #wordpress #php

[Users WP edit] agregar fields a un user de wordpress #wordpress #php

<?php 
/**
 * CEO Date
 * @param WP_User $user User object.
 */
function vivaldis_ceo_date($user) {

    $months 	= array( 
        '01' => 'January', 
        '02' => 'February', 
        '03' => 'March', 
        '04' => 'April', 
        '05' => 'May', 
        '06' => 'June', 
        '07' => 'July', 
        '08' => 'August', 
        '09' => 'September', 
        '10' => 'October', 
        '11' => 'November', 
        '12' => 'December');
    

    $ceo_date = array(
        'day' => '01',
        'month' => '01',
        'year' => '2017',
    );
    
    $date = get_user_meta($user->ID, 'ceo_date');
    if(!empty($date)) {
        $date = explode('-', $date[0]);
        
        $ceo_date = array(
            'day' => $date[2],
            'month' => $date[1],
            'year' => $date[0],
        );
    }
    
    
    ?>
    <h3>Extra</h3>

    <table class="form-table">
   	 <tr>
   		 <th><label for="ceo-date-day">CEO Date</label></th>
   		 <td>
   			 <select id="ceo-date-day" name="ceo_date[day]"><?php
   				 for ($i = 1; $i <= 31; $i++) {
                     $formattedDay = sprintf('%02d', $i);
   					 printf('<option value="%1$s" %2$s>%1$s</option>', $formattedDay, selected( $ceo_date['day'], $formattedDay, false ));
   				 }
   			 ?></select>
   			 <select id="ceo-date-month" name="ceo_date[month]"><?php
   				 foreach ($months as $key=>$month) {
   					 printf('<option value="%1$s" %2$s>%3$s</option>', $key, selected( $ceo_date['month'], $key, false ), $month);
   				 }
   			 ?></select>
   			 <select id="ceo-date-year" name="ceo_date[year]"><?php
   				 for ($i = 2017; $i <= 2018; $i++) {
   					 printf('<option value="%1$s" %2$s>%1$s</option>', $i, selected( $ceo_date['year'], $i, false ));
   				 }
   			 ?></select>
   		 </td>
   	 </tr>
    </table>
    <?php
}

add_action('show_user_profile', 'vivaldis_ceo_date');
add_action('edit_user_profile', 'vivaldis_ceo_date');



/**
 * Save CEO Date
 * @param  int $user_id Current user ID.
 */
function vivaldis_ceo_save_profile_fields( $user_id ) {

    if ( ! current_user_can( 'edit_user', $user_id ) ) {
   	 return false;
    }

    if ( empty( $_POST['ceo_date'] ) ) {
   	 return false;
    }

    $ceo_date = $_POST['ceo_date']['year'] . '-' .
                $_POST['ceo_date']['month'] . '-' .
                $_POST['ceo_date']['day'];
    
    update_usermeta( $user_id, 'ceo_date', $ceo_date );
}

add_action( 'personal_options_update', 'vivaldis_ceo_save_profile_fields' );
add_action( 'edit_user_profile_update', 'vivaldis_ceo_save_profile_fields' );





/**
 * Internal token
 * @param WP_User $user User object.
 */
function vivaldis_internal_token($user) {
    $token = uniqid(date('Ymd'), true);
    $token = str_replace('.', '', $token);
    $token = (empty(get_the_author_meta('internal_token', $user->ID)))? $token : get_the_author_meta('internal_token', $user->ID);

    ?>
    <table class="form-table">
   	 <tr>
   		 <th><label for="internal_token">Internal Token</label></th>
   		 <td><input type="text" value="<?= $token ?>" id="internal_token" name="internal_token" readonly="readonly" style="width: 500px" /></td>     
     </tr>
    </table>
    <?php
}

add_action('show_user_profile', 'vivaldis_internal_token');
add_action('edit_user_profile', 'vivaldis_internal_token');


/**
 * Save Internal token
 * @param  int $user_id Current user ID.
 */
function vivaldis_internal_token_save_profile_fields( $user_id ) {
    update_usermeta( $user_id, 'internal_token', $_POST['internal_token'] );
}

add_action( 'personal_options_update', 'vivaldis_internal_token_save_profile_fields' );
add_action( 'edit_user_profile_update', 'vivaldis_internal_token_save_profile_fields' );




/**
 * Language
 * @param WP_User $user User object.
 */
function vivaldis_language($user) {

    $languages 	= array( 
        'nl' => 'NL', 
        'fr' => 'FR'
    );
    
    $default	= 'nl';
    $lang = (empty(get_the_author_meta('language', $user->ID)))? $default : get_the_author_meta('language', $user->ID);
    
    ?>
    <table class="form-table">
   	 <tr>
   		 <th><label for="language">Language</label></th>
   		 <td>
   			 <select id="language" name="language"><?php
   				 foreach ($languages as $key=>$language) {
   					 printf('<option value="%1$s" %2$s>%3$s</option>', $key, selected( $lang, $key, false ), $language);
   				 }
   			 ?></select>
   		 </td>
   	 </tr>
    </table>
    <?php
}

add_action('show_user_profile', 'vivaldis_language');
add_action('edit_user_profile', 'vivaldis_language');



/**
 * Save Language
 * @param  int $user_id Current user ID.
 */
 
function vivaldis_language_save_profile_fields( $user_id ) {

    if ( ! current_user_can( 'edit_user', $user_id ) ) {
   	 return false;
    }

    if ( empty( $_POST['language'] ) ) {
   	 return false;
    }

    update_usermeta( $user_id, 'language', $_POST['language'] );
}

add_action( 'personal_options_update', 'vivaldis_language_save_profile_fields' );
add_action( 'edit_user_profile_update', 'vivaldis_language_save_profile_fields' );





/**
 * Mail Actions
 * @param WP_User $user User object.
 */
function vivaldis_mailing($user) {
    ?>
    <h3>Mail Actions</h3>    
    <table class="form-table">
        <tbody>
            <tr>
                <th scope="row"><label for="send-announcement">Send Announcement</label></th>
                <td>
                    <input type="button" id="send-announcement" class="button button-primary" 
                           value="Send Announcement" onClick="sendMailing('/sendAnnouncement?user_id=<?= $user->ID ?>', this)" />
                    <span id="send-announcement-response" class="mail-actions-response-message"></span>                            
                </td>
            </tr>                        
            <tr>
                <th scope="row"><label for="send-invite">Send Invite</label></th>
                <td>
                    <input type="button" id="send-invite" class="button button-primary" 
                           value="Send Invite" onClick="sendMailing('/sendInvite?user_id=<?= $user->ID ?>', this)" />
                    <span id="send-invite-response" class="mail-actions-response-message"></span>
                </td>
            </tr>
            <tr>
                <th scope="row"><label for="send-reminder">Send Reminder</label></th>
                <td>
                    <input type="button" id="send-reminder" class="button button-primary" 
                           value="Send Reminder" onClick="sendMailing('/sendInviteReminder?user_id=<?= $user->ID ?>', this)" />
                    <span id="send-reminder-response" class="mail-actions-response-message"></span>
                </td>
            </tr>            
        </tbody>
    </table>
    <?php
}

add_action('show_user_profile', 'vivaldis_mailing');
add_action('edit_user_profile', 'vivaldis_mailing');



/**
 * Add column CEO Date & Status
 */
function vivaldis_column_ceodate($column_headers ) {
    $column_headers['ceo_date'] = 'CEO Date';
    $column_headers['ceo_status'] = 'Status';
    unset($column_headers['posts']);
    return $column_headers;
}
add_filter( 'manage_users_columns', 'vivaldis_column_ceodate' );


function vivaldis_column_data_ceodate( $val, $column_name, $user_id ) {
    switch ($column_name) {
        case 'ceo_date' :
            return get_the_author_meta( 'ceo_date', $user_id );
            break;
        case 'ceo_status' :
            if(userReplyQuestionnaire($user_id) > 0) {
                return '<a href="'. get_bloginfo('url') .'/ceo/'. getUsernameById($user_id) .'" target="_blank">View Answers</a>';
            } else {
                return '';
            }

            break;
        default:
    }

    return $val;
}
add_filter( 'manage_users_custom_column', 'vivaldis_column_data_ceodate', 10, 3 );


function userReplyQuestionnaire($user_id) {
    $post = get_posts(array(
        'author'        =>  $user_id,
        'post_type'     => 'questionaire',
        'posts_per_page' => 1
    ));
    
    return count($post);
}


function getUsernameById($user_id) {
    $user = get_user_by('ID', $user_id);
    return $user->data->user_login; 
}


/*
 * Make CEO Date sortable
 */
function vivaldis_column_sortable_ceodate($column_headers) {
    $column_headers['ceo_date'] = 'CEO Date';
    return $column_headers;
}
add_filter( 'manage_users_sortable_columns', 'vivaldis_column_sortable_ceodate' );


function vivaldis_column_sort_query_ceodate($user_search) {
    global $wpdb,$current_screen;

    if ( 'users' != $current_screen->id ) 
        return;

    $vars = $user_search->query_vars;

    if('CEO Date' == $vars['orderby']) 
    {
        $user_search->query_from .= " INNER JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='ceo_date')"; 
        $user_search->query_orderby = ' ORDER BY UPPER(m1.meta_value) '. $vars['order'];
        
    } 
}
add_action('pre_user_query','vivaldis_column_sort_query_ceodate');