$e) ;
}
}
return self::$api;
}
/**
* Adds contact to the the campaign
*
* @param Hustle_Module_Model $module
* @param array $data
* @return array|mixed|object|WP_Error
*/
public function subscribe( Hustle_Module_Model $module, array $data ){
$d = array();
$d['email'] = $data['email'];
$api_key = self::_get_api_key( $module );
$username = self::_get_username( $module );
$list_id = self::_get_email_list( $module );
if ( $this->email_exist( $d['email'], $api_key, $username, $list_id ) ) {
$err = new WP_Error();
$err->add( 'email_exist', __( 'This email address has already subscribed.', Opt_In::TEXT_DOMAIN ) );
return $err;
}
$name = array();
if ( ! empty( $data['first_name'] ) ) {
$name['first_name'] = $data['first_name'];
}
elseif ( ! empty( $data['f_name'] ) ) {
$name['first_name'] = $data['f_name']; // Legacy
}
if ( ! empty( $data['last_name'] ) ) {
$name['last_name'] = $data['last_name'];
}
elseif ( ! empty( $data['l_name'] ) ) {
$name['last_name'] = $data['l_name']; // Legacy
}
if( count( $name ) )
$d['name'] = implode(" ", $name);
// Add extra fields
$data = array_diff_key( $data, array(
'email' => '',
'first_name' => '',
'last_name' => '',
'f_name' => '',
'l_name' => '',
) );
$data = array_filter( $data );
if ( ! empty( $data ) ) {
$d = array_merge( $d, $data );
}
$res = self::api( $username, $api_key )->subscribe( $list_id, $d );
if ( is_wp_error( $res ) ) {
$error_code = $res->get_error_code();
$data['error'] = $res->get_error_message( $error_code );
$module->log_error( $data );
}
return $res;
}
/**
* Validate if email already subscribe
*
* @param $email string - Current guest user email address.
* @param $module object - Hustle_Module_Model
*
* @return bool Returns true if the specified email already subscribe otherwise false.
*/
function email_exist( $email, $api_key, $username, $list_id ) {
$api = self::api( $username, $api_key );
$res = $api->search_by_email( $email );
if ( is_object( $res ) && ! empty( $res->member ) && $email == $res->member->email ) {
$_lists = $api->search_email_lists( $email );
if( !is_wp_error( $_lists ) && !empty( $_lists ) && is_array( $_lists ) ) {
foreach( ( array) $_lists as $list ){
$list = (object) (array) $list;
$list = $list->{'@attributes'};
if ( $list['id'] == $list_id ) {
return true;
}
}
}
}
return false;
}
/**
* Retrieves initial options of the GetResponse account with the given api_key
*
* @param $module_id
* @return array
*/
function get_options( $module_id ){
$_lists = self::api( $this->username, $this->api_key )->get_lists();
if( is_wp_error( ( array) $_lists ) )
return $_lists;
if( empty( $_lists ) )
return new WP_Error("no_audionces", __("No audience list defined for this account", Opt_In::TEXT_DOMAIN));
if( !is_array( $_lists ) )
$_lists = array( $_lists );
$lists = array();
foreach( ( array) $_lists as $list ){
$list = (object) (array) $list;
$list = $list->{'@attributes'};
$lists[ $list['id']]['value'] = $list['id'];
$lists[ $list['id']]['label'] = $list['name'];
}
$first = count( $lists ) > 0 ? reset( $lists ) : "";
if( !empty( $first ) )
$first = $first['value'];
return array(
"label" => array(
"id" => "optin_email_list_label",
"for" => "optin_email_list",
"value" => __("Choose email list:", Opt_In::TEXT_DOMAIN),
"type" => "label",
),
"choose_email_list" => array(
"type" => 'select',
'name' => "optin_email_list",
'id' => "wph-email-provider-lists",
"default" => "",
'options' => $lists,
'value' => $first,
'selected' => $first,
"attributes" => array(
"data-nonce" => wp_create_nonce("mad_mimi_choose_campaign"),
'class' => "wpmudev-select mad_mimi_choose_campaign"
)
)
);
}
/**
* Returns initial account options
*
* @param $module_id
* @return array
*/
function get_account_options( $module_id ){
$module = Hustle_Module_Model::instance()->get( $module_id );
$api_key = self::_get_api_key( $module );
$username = self::_get_username( $module );
return array(
"optin_username_label" => array(
"id" => "optin_username_label",
"for" => "optin_username",
"value" => __("Enter your username (email address):", Opt_In::TEXT_DOMAIN),
"type" => "label",
),
"optin_username_field_wrapper" => array(
"id" => "optin_username_id",
"class" => "optin_username_id_wrapper",
"type" => "wrapper",
"elements" => array(
"optin_username_field" => array(
"id" => "optin_username",
"name" => "optin_username",
"type" => "text",
"default" => "",
"value" => $username,
"placeholder" => "",
"class" => "wpmudev-input_text"
)
)
),
"optin_api_key_label" => array(
"id" => "optin_api_key_label",
"for" => "optin_api_key",
"value" => __("Enter your API key:", Opt_In::TEXT_DOMAIN),
"type" => "label",
),
"wrapper" => array(
"id" => "wpoi-get-lists",
"class" => "wpmudev-provider-group",
"type" => "wrapper",
"elements" => array(
"api_key" => array(
"id" => "optin_api_key",
"name" => "optin_api_key",
"type" => "text",
"default" => "",
"value" => $api_key,
"placeholder" => "",
"class" => "wpmudev-input_text"
),
'refresh' => array(
"id" => "refresh_mad_mimi_lists",
"name" => "refresh_mad_mimi_lists",
"type" => "ajax_button",
"value" => "" . __( "Fetch Lists", Opt_In::TEXT_DOMAIN ) . "",
'class' => "wpmudev-button wpmudev-button-sm optin_refresh_provider_details"
),
)
),
"instructions" => array(
"id" => "optin_api_instructions",
"for" => "",
"value" => sprintf(__("Log in to your Mad Mimi account to get your API Key.", Opt_In::TEXT_DOMAIN), 'https://madmimi.com' ),
"type" => "small",
),
);
}
function is_authorized(){
return true;
}
/**
* Get Provider Details
* General function to get provider details from database based on key
*
* @param Hustle_Module_Model $module
* @param String $field - the field name
*
* @return String
*/
private static function _get_provider_details( Hustle_Module_Model $module, $field ) {
$details = '';
$name = self::ID;
if ( !is_null( $module->content->email_services )
&& isset( $module->content->email_services[$name] )
&& isset( $module->content->email_services[$name][$field] ) ) {
$details = $module->content->email_services[$name][$field];
}
return $details;
}
private static function _get_email_list( Hustle_Module_Model $module ) {
return self::_get_provider_details( $module, 'list_id' );
}
private static function _get_api_key( Hustle_Module_Model $module ) {
return self::_get_provider_details( $module, 'api_key' );
}
private static function _get_username( Hustle_Module_Model $module ) {
return self::_get_provider_details( $module, 'username' );
}
public static function add_values_to_previous_optins( $option, $module ){
if( $module->content->active_email_service !== self::ID ) return $option;
$username = self::_get_username( $module );
if( $option['id'] === "optin_username_id" && isset( $username ) ){
$option['elements']['optin_username_field']['value'] = $username;
}
return $option;
}
/**
* Prevents default selected list from showing
*
* @param $val
* @param $module Hustle_Module_Model
* @return bool
*/
public static function show_selected_list( $val, $module ){
return ( $module->content->active_email_service !== Opt_In_Mad_Mimi::ID );
}
/**
* Renders selected list row
*
* @param $module Hustle_Module_Model
*/
public static function render_selected_list( $module ){
$list_id = self::_get_email_list( $module );
if( $module->content->active_email_service !== Opt_In_Mad_Mimi::ID || !$list_id ) return;
printf( __("Selected audience list: %s (Press the GET LISTS button to update value)", Opt_In::TEXT_DOMAIN), $list_id );
}
}
add_filter("wpoi_optin_filter_optin_options", array( "Opt_In_Mad_Mimi", "add_values_to_previous_optins" ), 10, 2 );
add_filter("wpoi_optin_mad_mimi_show_selected_list", array( "Opt_In_Mad_Mimi", "show_selected_list" ), 10, 2 );
add_action("wph_optin_show_selected_list_after", array( "Opt_In_Mad_Mimi", "render_selected_list" ) );
endif;