2015-05-16 02:03:24 +00:00
< ? php
/**
2015-11-03 13:53:50 +00:00
* WooCommerce Admin API Keys Class
2015-05-16 02:03:24 +00:00
*
2018-02-05 19:45:12 +00:00
* @ package WooCommerce\Admin
* @ version 2.4 . 0
2015-05-16 02:03:24 +00:00
*/
if ( ! defined ( 'ABSPATH' ) ) {
exit ;
}
/**
2015-11-03 12:28:01 +00:00
* WC_Admin_API_Keys .
2015-05-16 02:03:24 +00:00
*/
class WC_Admin_API_Keys {
/**
2015-11-03 12:28:01 +00:00
* Initialize the API Keys admin actions .
2015-05-16 02:03:24 +00:00
*/
public function __construct () {
2015-05-18 18:23:05 +00:00
add_action ( 'admin_init' , array ( $this , 'actions' ) );
2018-02-05 19:45:12 +00:00
add_action ( 'woocommerce_settings_page_init' , array ( $this , 'screen_option' ) );
2015-05-18 18:23:05 +00:00
}
2015-05-16 02:03:24 +00:00
2015-05-18 18:23:05 +00:00
/**
2015-11-03 12:28:01 +00:00
* Check if is API Keys settings page .
2015-05-18 18:23:05 +00:00
* @ return bool
*/
private function is_api_keys_settings_page () {
return isset ( $_GET [ 'page' ] )
2016-06-14 10:10:13 +00:00
&& 'wc-settings' === $_GET [ 'page' ]
2015-05-18 18:23:05 +00:00
&& isset ( $_GET [ 'tab' ] )
2016-06-14 10:10:13 +00:00
&& 'api' === $_GET [ 'tab' ]
2015-05-18 18:23:05 +00:00
&& isset ( $_GET [ 'section' ] )
2016-06-14 10:10:13 +00:00
&& 'keys' === $_GET [ 'section' ];
2015-05-16 02:03:24 +00:00
}
/**
2015-11-03 12:28:01 +00:00
* Page output .
2015-05-16 02:03:24 +00:00
*/
public static function page_output () {
// Hide the save button
$GLOBALS [ 'hide_save_button' ] = true ;
if ( isset ( $_GET [ 'create-key' ] ) || isset ( $_GET [ 'edit-key' ] ) ) {
2015-05-18 18:23:05 +00:00
$key_id = isset ( $_GET [ 'edit-key' ] ) ? absint ( $_GET [ 'edit-key' ] ) : 0 ;
$key_data = self :: get_key_data ( $key_id );
2015-05-16 02:03:24 +00:00
include ( 'settings/views/html-keys-edit.php' );
} else {
self :: table_list_output ();
}
}
2018-02-05 19:45:12 +00:00
/**
* Add screen option .
*/
public function screen_option () {
2018-02-05 19:50:16 +00:00
global $keys_table_list ;
2018-02-05 19:45:12 +00:00
if ( ! isset ( $_GET [ 'create-key' ], $_GET [ 'edit-key' ] ) && $this -> is_api_keys_settings_page () ) {
2018-02-05 19:50:16 +00:00
$keys_table_list = new WC_Admin_API_Keys_Table_List ();
// Add screen option.
2018-02-05 19:45:12 +00:00
add_screen_option ( 'per_page' , array (
'default' => 10 ,
'option' => 'wc_api_keys_per_page' ,
) );
}
}
2015-05-16 02:03:24 +00:00
/**
2015-11-03 12:28:01 +00:00
* Table list output .
2015-05-16 02:03:24 +00:00
*/
private static function table_list_output () {
2018-02-05 19:50:16 +00:00
global $wpdb , $keys_table_list ;
2017-03-17 22:49:19 +00:00
2016-10-12 10:16:30 +00:00
echo '<h2>' . __ ( 'Keys/Apps' , 'woocommerce' ) . ' <a href="' . esc_url ( admin_url ( 'admin.php?page=wc-settings&tab=api§ion=keys&create-key=1' ) ) . '" class="add-new-h2">' . __ ( 'Add key' , 'woocommerce' ) . '</a></h2>' ;
2015-05-16 02:03:24 +00:00
2017-03-17 22:49:19 +00:00
// Get the API keys count
$count = $wpdb -> get_var ( " SELECT COUNT(key_id) FROM { $wpdb -> prefix } woocommerce_api_keys WHERE 1 = 1; " );
if ( absint ( $count ) && $count > 0 ) {
$keys_table_list -> prepare_items ();
2015-05-16 02:03:24 +00:00
2017-03-17 22:49:19 +00:00
echo '<input type="hidden" name="page" value="wc-settings" />' ;
echo '<input type="hidden" name="tab" value="api" />' ;
echo '<input type="hidden" name="section" value="keys" />' ;
2015-05-16 02:03:24 +00:00
2017-03-17 22:49:19 +00:00
$keys_table_list -> views ();
$keys_table_list -> search_box ( __ ( 'Search key' , 'woocommerce' ), 'key' );
$keys_table_list -> display ();
} else {
2017-04-27 11:23:16 +00:00
echo '<div class="woocommerce-BlankState woocommerce-BlankState--api">' ;
2017-03-17 22:49:19 +00:00
?>
2017-04-27 11:23:16 +00:00
< h2 class = " woocommerce-BlankState-message " >< ? php _e ( 'The WooCommerce REST API allows external apps to view and manage store data. Access is granted only to those with valid API keys.' , 'woocommerce' ); ?> </h2>
< a class = " woocommerce-BlankState-cta button-primary button " href = " <?php echo esc_url( admin_url( 'admin.php?page=wc-settings&tab=api§ion=keys&create-key=1' ) ); ?> " >< ? php _e ( 'Create an API key' , 'woocommerce' ); ?> </a>
2017-03-17 22:49:19 +00:00
< ? php echo '<style type="text/css">#posts-filter .wp-list-table, #posts-filter .tablenav.top, .tablenav.bottom .actions { display: none; } </style></div>' ;
}
2015-05-16 02:03:24 +00:00
}
2015-05-16 03:09:29 +00:00
/**
2015-11-03 12:28:01 +00:00
* Get key data .
2015-05-16 03:09:29 +00:00
*
* @ param int $key_id
* @ return array
*/
private static function get_key_data ( $key_id ) {
global $wpdb ;
$empty = array (
2015-07-16 18:42:00 +00:00
'key_id' => 0 ,
'user_id' => '' ,
'description' => '' ,
'permissions' => '' ,
'truncated_key' => '' ,
2016-08-27 01:46:45 +00:00
'last_access' => '' ,
2015-05-16 03:09:29 +00:00
);
if ( 0 == $key_id ) {
return $empty ;
}
$key = $wpdb -> get_row ( $wpdb -> prepare ( "
2015-07-16 18:42:00 +00:00
SELECT key_id , user_id , description , permissions , truncated_key , last_access
2015-05-16 03:09:29 +00:00
FROM { $wpdb -> prefix } woocommerce_api_keys
WHERE key_id = % d
" , $key_id ), ARRAY_A );
if ( is_null ( $key ) ) {
return $empty ;
}
return $key ;
}
2015-05-18 18:23:05 +00:00
/**
2015-11-03 12:28:01 +00:00
* API Keys admin actions .
2015-05-18 18:23:05 +00:00
*/
public function actions () {
if ( $this -> is_api_keys_settings_page () ) {
2015-05-18 18:46:16 +00:00
// Revoke key
if ( isset ( $_GET [ 'revoke-key' ] ) ) {
$this -> revoke_key ();
}
2015-05-18 18:23:05 +00:00
// Bulk actions
2015-05-18 19:12:47 +00:00
if ( isset ( $_GET [ 'action' ] ) && isset ( $_GET [ 'key' ] ) ) {
$this -> bulk_actions ();
2015-05-18 18:23:05 +00:00
}
}
}
/**
* Notices .
*/
public static function notices () {
2015-06-08 22:41:35 +00:00
if ( isset ( $_GET [ 'revoked' ] ) && 1 == $_GET [ 'revoked' ] ) {
2016-10-12 10:16:30 +00:00
WC_Admin_Settings :: add_message ( __ ( 'API key revoked successfully.' , 'woocommerce' ) );
2015-05-18 18:23:05 +00:00
}
}
2015-05-18 18:46:16 +00:00
/**
2015-11-03 12:28:01 +00:00
* Revoke key .
2015-05-18 18:46:16 +00:00
*/
private function revoke_key () {
if ( empty ( $_REQUEST [ '_wpnonce' ] ) || ! wp_verify_nonce ( $_REQUEST [ '_wpnonce' ], 'revoke' ) ) {
wp_die ( __ ( 'Action failed. Please refresh the page and retry.' , 'woocommerce' ) );
}
$key_id = absint ( $_GET [ 'revoke-key' ] );
2015-05-18 19:12:47 +00:00
$this -> remove_key ( $key_id );
2015-05-18 18:46:16 +00:00
2015-06-08 22:41:35 +00:00
wp_redirect ( esc_url_raw ( add_query_arg ( array ( 'revoked' => 1 ), admin_url ( 'admin.php?page=wc-settings&tab=api§ion=keys' ) ) ) );
2015-05-18 18:46:16 +00:00
exit ();
}
2015-05-18 19:12:47 +00:00
/**
2015-11-03 12:28:01 +00:00
* Bulk actions .
2015-05-18 19:12:47 +00:00
*/
private function bulk_actions () {
if ( empty ( $_REQUEST [ '_wpnonce' ] ) || ! wp_verify_nonce ( $_REQUEST [ '_wpnonce' ], 'woocommerce-settings' ) ) {
wp_die ( __ ( 'Action failed. Please refresh the page and retry.' , 'woocommerce' ) );
}
$keys = array_map ( 'absint' , ( array ) $_GET [ 'key' ] );
if ( 'revoke' == $_GET [ 'action' ] ) {
$this -> bulk_revoke_key ( $keys );
}
}
/**
2015-11-03 12:28:01 +00:00
* Bulk revoke key .
2015-05-18 19:12:47 +00:00
*
2015-05-18 19:46:52 +00:00
* @ param array $keys
2015-05-18 19:12:47 +00:00
*/
private function bulk_revoke_key ( $keys ) {
foreach ( $keys as $key_id ) {
$this -> remove_key ( $key_id );
}
}
/**
2015-11-03 12:28:01 +00:00
* Remove key .
2015-05-18 19:12:47 +00:00
*
* @ param int $key_id
* @ return bool
*/
private function remove_key ( $key_id ) {
global $wpdb ;
$delete = $wpdb -> delete ( $wpdb -> prefix . 'woocommerce_api_keys' , array ( 'key_id' => $key_id ), array ( '%d' ) );
return $delete ;
}
2015-05-16 02:03:24 +00:00
}
new WC_Admin_API_Keys ();