public function init_actions()
 {
     if (apply_filters($this->theme_name . '_enable_setup_wizard', true) && current_user_can('manage_options')) {
         add_filter($this->theme_name . '_theme_setup_wizard_content', array($this, 'theme_setup_wizard_content'));
         add_filter($this->theme_name . '_theme_setup_wizard_steps', array($this, 'theme_setup_wizard_steps'));
     }
     parent::init_actions();
 }
 private function _manage_oauth_token($token)
 {
     if (is_array($token) && !empty($token['access_token'])) {
         if (self::$_current_manage_token == $token['access_token']) {
             return false;
             // stop loops when refresh auth fails.
         }
         self::$_current_manage_token = $token['access_token'];
         // yes! we have an access token. store this in our options so we can get a list of items using it.
         $option = envato_market()->get_options();
         if (!is_array($option)) {
             $option = array();
         }
         if (empty($option['items'])) {
             $option['items'] = array();
         }
         // check if token is expired.
         if (empty($token['expires'])) {
             $token['expires'] = time() + 3600;
         }
         if ($token['expires'] < time() + 120 && !empty($token['oauth_session'])) {
             // time to renew this token!
             $my_theme = wp_get_theme();
             $oauth_nonce = get_option('envato_oauth_' . $this->envato_username);
             $response = wp_remote_post($this->oauth_script, array('method' => 'POST', 'timeout' => 10, 'redirection' => 1, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => array('oauth_session' => $token['oauth_session'], 'oauth_nonce' => $oauth_nonce, 'refresh_token' => 'yes', 'url' => home_url(), 'theme' => $my_theme->get('Name'), 'version' => $my_theme->get('Version')), 'cookies' => array()));
             if (is_wp_error($response)) {
                 $error_message = $response->get_error_message();
                 echo "Something went wrong while trying to retrieve oauth token: {$error_message}";
             } else {
                 $new_token = @json_decode(wp_remote_retrieve_body($response), true);
                 $result = false;
                 if (is_array($new_token) && !empty($new_token['new_token'])) {
                     $token['access_token'] = $new_token['new_token'];
                 }
             }
         }
         // use this token to get a list of purchased items
         // add this to our items array.
         $response = envato_market()->api()->request('https://api.envato.com/v3/market/buyer/purchases', array('headers' => array('Authorization' => 'Bearer ' . $token['access_token'])));
         self::$_current_manage_token = false;
         if (is_array($response) && !empty($response['purchases'])) {
             // up to here, add to items array
             foreach ($response['purchases'] as $purchase) {
                 // check if this item already exists in the items array.
                 $exists = false;
                 foreach ($option['items'] as $id => $item) {
                     if (!empty($item['id']) && $item['id'] == $purchase['item']['id']) {
                         $exists = true;
                         // update token.
                         $option['items'][$id]['token'] = $token['access_token'];
                         $option['items'][$id]['token_data'] = $token;
                         $option['items'][$id]['oauth'] = $this->envato_username;
                         if (!empty($purchase['code'])) {
                             $option['items'][$id]['purchase_code'] = $purchase['code'];
                         }
                     }
                 }
                 if (!$exists) {
                     $option['items'][] = array('id' => $purchase['item']['id'], 'name' => $purchase['item']['name'], 'token' => $token['access_token'], 'token_data' => $token, 'oauth' => $this->envato_username, 'type' => !empty($purchase['item']['wordpress_theme_metadata']) ? 'theme' : 'plugin', 'purchase_code' => !empty($purchase['code']) ? $purchase['code'] : '');
                 }
             }
         } else {
             return false;
         }
         if (!isset($option['oauth'])) {
             $option['oauth'] = array();
         }
         // store our 1 hour long token here. we can refresh this token when it comes time to use it again (i.e. during an update)
         $option['oauth'][$this->envato_username] = $token;
         update_option(envato_market()->get_option_name(), $option);
         envato_market()->items()->set_themes(true);
         envato_market()->items()->set_plugins(true);
         return true;
     } else {
         return false;
     }
 }