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; } }