amazon_credentials_validator = $amazon_credentials_validator; } /** * Render the amazon options. * * @hook init * @since 0.9 */ public function render() { do_action('aff_admin_options_before_render_amazon_container'); $container = Carbon_Container::make('theme_options', __('Amazon', 'affilicious')) ->set_page_parent('affilicious') ->add_tab(__('Credentials', 'affilicious'), $this->get_credentials_fields()) ->add_tab(__('Updates', 'affilicious'), $this->get_updates_fields()); $container = apply_filters('aff_admin_options_render_amazon_container', $container); do_action('aff_admin_options_after_render_amazon_container', $container); } /** * Get the credentials fields. * * @since 0.9 * @return array */ protected function get_credentials_fields() { $fields = array( Carbon_Field::make('html', self::VALIDATION_STATUS) ->set_html($this->get_validation_notice()), Carbon_Field::make('text', self::ACCESS_KEY, __('Access Key', 'affilicious')) ->set_help_text(__('The access key is used to identify you as an API user. It\'s not your protected Amazon username.', 'affilicious')), Carbon_Field::make('password', self::SECRET_KEY, __('Secret Key', 'affilicious')) ->set_help_text(__('The secret key is used like a password to sign your API requests. It\'s not your protected Amazon password.', 'affilicious')), Carbon_Field::make('select', self::COUNTRY, __('Country', 'affilicious')) ->add_options(array( 'de' => __('Germany', 'affilicious'), 'com' => __('America', 'affilicious'), 'co.uk' => __('England', 'affilicious'), 'ca' => __('Canada', 'affilicious'), 'fr' => __('France', 'affilicious'), 'co.jp' => __('Japan', 'affilicious'), 'it' => __('Italy', 'affilicious'), 'cn' => __('China', 'affilicious'), 'es' => __('Spain', 'affilicious'), 'in' => __('India', 'affilicious'), 'com.br' => __('Brazil', 'affilicious'), 'com.mx' => __('Mexico', 'affilicious'), 'com.au' => __('Australia', 'affilicious'), )) ->set_help_text(__('The country has to match the locale of your Amazon account. ', 'affilicious')), Carbon_Field::make('text', self::ASSOCIATE_TAG, __('Associate Tag', 'affilicious')) ->set_help_text(__('Amazon uses this ID to credit an associate for a sale.', 'affilicious')) ); return apply_filters('aff_admin_options_render_amazon_container_credentials_fields', $fields); } /** * Get the updates fields. * * @since 0.9 * @return array */ protected function get_updates_fields() { $fields = array( Carbon_Field::make('select', self::THUMBNAIL_UPDATE_INTERVAL, __('Thumbnail Update Interval', 'affilicious')) ->add_options(array( 'hourly' => __('Hourly', 'affilicious'), 'twicedaily' => __('Twice Daily', 'affilicious'), 'daily' => __('Daily', 'affilicious'), 'none' => __('No Updates', 'affilicious'), )) ->set_help_text(__('The automatic update interval for the product thumbnails.', 'affilicious')), Carbon_Field::make('select', self::IMAGE_GALLERY_UPDATE_INTERVAL, __('Image Gallery Update Interval', 'affilicious')) ->add_options(array( 'hourly' => __('Hourly', 'affilicious'), 'twicedaily' => __('Twice Daily', 'affilicious'), 'daily' => __('Daily', 'affilicious'), 'none' => __('No Updates', 'affilicious'), )) ->set_help_text(__('The automatic update interval for the product image galleries.', 'affilicious')), Carbon_Field::make('select', self::AFFILIATE_LINK_UPDATE_INTERVAL, __('Affiliate Link Update Interval', 'affilicious')) ->add_options(array( 'hourly' => __('Hourly', 'affilicious'), 'twicedaily' => __('Twice Daily', 'affilicious'), 'daily' => __('Daily', 'affilicious'), 'none' => __('No Updates', 'affilicious'), )) ->set_help_text(__('The automatic update interval for the shop affiliate links in the products.', 'affilicious')), Carbon_Field::make('select', self::PRICE_UPDATE_INTERVAL, __('Price Update Interval', 'affilicious')) ->add_options(array( 'hourly' => __('Hourly', 'affilicious'), 'twicedaily' => __('Twice Daily', 'affilicious'), 'daily' => __('Daily', 'affilicious'), 'none' => __('No Updates', 'affilicious'), )) ->set_help_text(__('The automatic update interval for the shop prices in the products.', 'affilicious')), Carbon_Field::make('select', self::OLD_PRICE_UPDATE_INTERVAL, __('Old Price Update Interval', 'affilicious')) ->add_options(array( 'hourly' => __('Hourly', 'affilicious'), 'twicedaily' => __('Twice Daily', 'affilicious'), 'daily' => __('Daily', 'affilicious'), 'none' => __('No Updates', 'affilicious'), )) ->set_help_text(__('The automatic update interval for the old shop prices in the products.', 'affilicious')), Carbon_Field::make('select', self::AVAILABILITY_UPDATE_INTERVAL, __('Availability Update Interval', 'affilicious')) ->add_options(array( 'hourly' => __('Hourly', 'affilicious'), 'twicedaily' => __('Twice Daily', 'affilicious'), 'daily' => __('Daily', 'affilicious'), 'none' => __('No Updates', 'affilicious'), )) ->set_help_text(__('The automatic update interval for the shop availabilities in the products.', 'affilicious')), ); return apply_filters('aff_admin_options_render_amazon_container_updates_fields', $fields); } /** * Get the validation notice for Amazon. * * @since 0.9 * @return bool */ protected function get_validation_notice() { $valid = $this->check_validation_status(); if($valid) { $notice = Template_Helper::stringify('notices/success-notice', array( 'message' => __('The credentials are valid! A connection to the Amazon Product Advertising API was successfully established.', 'affilicious') )); } else { $notice = Template_Helper::stringify('notices/error-notice', array( 'message' => __('The credentials are invalid! Failed to connect to the Amazon Product Advertising API.', 'affilicious') )); } return $notice; } /** * Check the validation status of the credentials for Amazon. * * @since 0.9 * @return bool */ protected function check_validation_status() { // Don't make unnecessary Amazon API calls. if(!isset($_GET['page']) || !($_GET['page'] === 'crbn-amazon.php')) { return false; } $access_key = carbon_get_theme_option(Amazon_Options::ACCESS_KEY); $secret_key = carbon_get_theme_option(Amazon_Options::SECRET_KEY); $country = carbon_get_theme_option(Amazon_Options::COUNTRY); $associate_tag = carbon_get_theme_option(Amazon_Options::ASSOCIATE_TAG); if(empty($access_key) || empty($secret_key) || empty($country) || empty($associate_tag)) { return false; } $credentials = new Credentials(array( Amazon_Provider::ACCESS_KEY => $access_key, Amazon_Provider::SECRET_KEY => $secret_key, Amazon_Provider::COUNTRY => $country, Amazon_Provider::ASSOCIATE_TAG => $associate_tag )); $result = $this->amazon_credentials_validator->validate($credentials); if($result instanceof \WP_Error) { return false; } return true; } }