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