Skip to content

Commit

Permalink
Add key management UX
Browse files Browse the repository at this point in the history
  • Loading branch information
maxrice committed Nov 19, 2013
1 parent 001ce0f commit f542ce8
Showing 1 changed file with 115 additions and 1 deletion.
116 changes: 115 additions & 1 deletion includes/admin/class-wc-admin-profile.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ public function __construct() {

add_action( 'personal_options_update', array( $this, 'save_customer_meta_fields' ) );
add_action( 'edit_user_profile_update', array( $this, 'save_customer_meta_fields' ) );

add_action( 'show_user_profile', array( $this, 'add_api_key_field' ) );
add_action( 'edit_user_profile', array( $this, 'add_api_key_field' ) );

add_action( 'personal_options_update', array( $this, 'generate_api_key' ) );
add_action( 'edit_user_profile_update', array( $this, 'generate_api_key' ) );
}

/**
Expand Down Expand Up @@ -176,8 +182,116 @@ public function save_customer_meta_fields( $user_id ) {
update_user_meta( $user_id, $key, woocommerce_clean( $_POST[ $key ] ) );
}

/**
* Display the API key info for a user
*
* @since 2.1
* @param WP_User $user
*/
public function add_api_key_field( $user ) {

if ( ! current_user_can( 'manage_woocommerce' ) )
return;

$permissions = array(
'read' => __( 'Read', 'woocommerce' ),
'write' => __( 'Write', 'woocommerce' ),
'read_write' => __( 'Read/Write', 'woocommerce' ),
);

if ( current_user_can( 'edit_user', $user->ID ) ) {
?>
<table class="form-table">
<tbody>
<tr>
<th><label for="woocommerce_api_keys"><?php _e( 'WooCommerce API Keys', 'woocommerce' ); ?></label></th>
<td>
<?php if ( empty( $user->woocommerce_api_consumer_key ) ) : ?>
<input name="woocommerce_generate_api_key" type="checkbox" id="woocommerce_generate_api_key" value="0" />
<span class="description"><?php _e( 'Generate API Key', 'woocommerce' ); ?></span>
<?php else : ?>
<strong><?php _e( 'Consumer Key:', 'woocommerce' ); ?>&nbsp;</strong><code id="woocommerce_api_consumer_key"><?php echo $user->woocommerce_api_consumer_key ?></code><br/>
<strong><?php _e( 'Consumer Secret:', 'woocommerce' ); ?>&nbsp;</strong><code id="woocommerce_api_consumer_secret"><?php echo $user->woocommerce_api_consumer_secret; ?></code><br/>
<strong><?php _e( 'Permissions:', 'woocommerce' ); ?>&nbsp;</strong><span id="woocommerce_api_key_permissions"><select name="woocommerce_api_key_permissions" id="woocommerce_api_key_permissions"><?php
foreach ( $permissions as $permission_key => $permission_name ) { echo '<option value="'.$permission_key.'" '.selected($permission_key, $user->woocommerce_api_key_permissions, false).'>'.esc_html( $permission_name ) . '</option>';} ?>
</select></span><br/>
<input name="woocommerce_generate_api_key" type="checkbox" id="woocommerce_generate_api_key" value="0" />
<span class="description"><?php _e( 'Revoke API Key', 'woocommerce' ); ?></span>
<?php endif; ?>
</td>
</tr>
</tbody>
</table>
<?php
}
}

/**
* Generate and save (or delete) the API keys for a user
*
* @since 2.1
* @param int $user_id
*/
public function generate_api_key( $user_id ) {

if ( current_user_can( 'edit_user', $user_id ) ) {

$user = wp_get_current_user();

// creating/deleting key
if ( isset( $_POST['woocommerce_generate_api_key'] ) ) {

// consumer key
if ( empty( $user->woocommerce_api_consumer_key ) ) {

$consumer_key = 'ck_' . hash( 'md5', $user->user_login . date( 'U' ) . mt_rand() );

update_user_meta( $user_id, 'woocommerce_api_consumer_key', $consumer_key );

} else {

delete_user_meta( $user_id, 'woocommerce_api_consumer_key' );
}

// consumer secret
if ( empty( $user->woocommerce_api_consumer_secret ) ) {

$consumer_secret = 'cs_' . hash( 'md5', $user->ID . date( 'U' ) . mt_rand() );

update_user_meta( $user_id, 'woocommerce_api_consumer_secret', $consumer_secret );

} else {

delete_user_meta( $user_id, 'woocommerce_api_consumer_secret' );
}

// permissions
if ( empty( $user->woocommerce_api_key_permissions ) ) {

$permissions = ( ! in_array( $_POST['woocommerce_api_key_permissions'], array( 'read', 'write', 'read_write' ) ) ) ? 'read' : $_POST['woocommerce_api_key_permissions'];

update_user_meta( $user_id, 'woocommerce_api_key_permissions', $permissions );

} else {

delete_user_meta( $user_id, 'woocommerce_api_key_permissions' );
}

} else {

// updating permissions for key
if ( ! empty( $_POST['woocommerce_api_key_permissions'] ) && $user->woocommerce_api_key_permissions !== $_POST['woocommerce_api_key_permissions'] ) {

$permissions = ( ! in_array( $_POST['woocommerce_api_key_permissions'], array( 'read', 'write', 'read_write' ) ) ) ? 'read' : $_POST['woocommerce_api_key_permissions'];

update_user_meta( $user_id, 'woocommerce_api_key_permissions', $permissions );
}
}
}
}

}

endif;

return new WC_Admin_Profile();
return new WC_Admin_Profile();

0 comments on commit f542ce8

Please sign in to comment.