_hustle = $hustle;
$this->_email_services = $email_services;
add_action( 'admin_menu', array( $this, "register_admin_menu" ) );
add_action( 'admin_head', array( $this, "hide_unwanted_submenus" ) );
add_action( 'admin_init', array( $this, "init" ) );
add_action("current_screen", array( $this, "set_proper_current_screen" ) );
if( $this->_is_optin_admin() ) {
add_action( 'admin_enqueue_scripts', array( $this, "register_scripts" ), 99 );
add_action( 'admin_print_styles', array( $this, "register_styles" ) );
add_action("admin_footer", array($this, "add_layout_templates"));
add_filter( 'admin_body_class', array( $this, 'admin_body_class' ), 99 );
add_filter("user_can_richedit", '__return_true'); // allow rich editor in
add_filter( 'teeny_mce_before_init', array( $this, 'set_tinymce_settings' ) );
if ( !$this->_is_support_html() ) {
add_filter("wp_default_editor", array( $this, 'set_editor_to_tinymce' ));
}
add_filter("teeny_mce_plugins", array( $this, 'remove_despised_editor_plugins' ));
}
add_filter( 'w3tc_save_options', array( $this, 'filter_w3tc_save_options' ), 10, 1 );
add_filter('plugin_action_links', array( $this, 'add_plugin_action_links' ), 10, 5 );
}
// force reject minify for hustle js and css
function filter_w3tc_save_options( $config ) {
// reject js
$defined_rejected_js = $config['new_config']->get("minify.reject.files.js");
$reject_js = array(
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/admin.min.js',
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/ad.js',
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/front.min.js'
);
foreach( $reject_js as $r_js ) {
if ( !in_array( $r_js, $defined_rejected_js ) ) {
array_push($defined_rejected_js, $r_js);
}
}
$config['new_config']->set("minify.reject.files.js", $defined_rejected_js);
// reject css
$defined_rejected_css = $config['new_config']->get("minify.reject.files.css");
$reject_css = array(
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/css/front.min.css',
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/css/admin.min.css',
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/css/modal.css',
$this->_hustle->get_static_var( "plugin_url" ) . 'assets/css/optin.css',
);
foreach( $reject_css as $r_css ) {
if ( !in_array( $r_css, $defined_rejected_css ) ) {
array_push($defined_rejected_css, $r_css);
}
}
$config['new_config']->set("minify.reject.files.css", $defined_rejected_css);
return $config;
}
/**
* Removes unnesesary editor plugins
*
* @param $plugins
* @return mixed
*/
function remove_despised_editor_plugins( $plugins ){
if( ( $k = array_search( "fullscreen", $plugins) ) !== false ){
unset( $plugins[ $k ] );
}
$plugins[] = "paste";
return $plugins;
}
/**
* Sets default editor to tinymce for opt-in admin
*
* @param $editor_type
* @return string
*/
function set_editor_to_tinymce( $editor_type ){
return "tinymce";
}
function add_layout_templates(){
$optin_id = filter_input(INPUT_GET, "optin", FILTER_VALIDATE_INT);
$optin = $optin_id ? Opt_In_Model::instance()->get( $optin_id ) : $optin_id;
$this->_hustle->render("general/layouts", array("optin" => $optin));
$this->_hustle->render("general/alert");
}
/**
* Inits admin
*
* @since 1.0
*/
function init(){
// auto migrate v1 display conditions to v2
if( !$this->has_optin( ) ) $optin_id = filter_input( INPUT_GET, "optin", FILTER_VALIDATE_INT );
if( !isset( $optin_id ) || !$optin_id ) return;
$optin = Opt_In_Model::instance()->get( $optin_id );
$optin_display_migrated = (bool) $optin->get_meta( $this->_hustle->get_const_var( "MIGRATE_OLD_DISPLAY", $optin ), 0 );
if ( !$optin_display_migrated ) {
$optin->update_meta( $this->_hustle->get_const_var( "MIGRATE_OLD_DISPLAY", $optin ), 1 );
$this->convert_old_display_condition_data($optin_id);
wp_safe_redirect( add_query_arg($_GET) );
exit;
}
return;
}
/**
* Register scripts for the admin page
*
* @since 1.0
*/
function register_scripts(){
/**
* Register popup requirements
*/
lib3()->ui->add( TheLib_Ui::MODULE_CORE );
lib3()->ui->add( TheLib_Ui::MODULE_SELECT );
lib3()->ui->add( TheLib_Ui::MODULE_ANIMATION );
wp_enqueue_script('thickbox');
wp_enqueue_media();
wp_enqueue_script('media-upload');
wp_register_script( 'optin_admin_ace', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/vendor/ace/ace.js', array(), $this->_hustle->get_const_var( "VERSION" ), true );
wp_register_script( 'optin_admin_fitie', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/vendor/fitie/fitie.js', array(), $this->_hustle->get_const_var( "VERSION" ), true );
// Only load chartjs in the dashboard for now due an incompatibility with Iris (color pickers)
if(isset( $_GET['page'] ) && $_GET['page'] == 'inc_optins') wp_register_script( 'optin_chartjs', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/vendor/chartjs/Chart.bundle.min.js', array(), $this->_hustle->get_const_var( "VERSION" ), true );
wp_enqueue_script( 'optin_admin_ace' );
wp_enqueue_script( 'optin_chartjs' );
wp_enqueue_script( 'optin_admin_popup' );
wp_enqueue_script( 'optin_admin_select2' );
wp_enqueue_script( 'optin_admin_fitie' );
add_filter( 'script_loader_tag', array($this, "handle_specific_script"), 10, 2 );
$tags = array_map(array($this, "terms_to_select2_data"), get_categories(array(
"hide_empty" =>false,
'taxonomy' => 'post_tag'
)));
$cats = array_map(array($this, "terms_to_select2_data"), get_categories(array(
"hide_empty" =>false,
)));
$posts = array_map(array($this, "posts_to_select2_data"), get_posts(array(
'numberposts' => -1
)));
/**
* Add all posts
*/
$allPosts = new stdClass();
$allPosts->id = "all";
$allPosts->text = __("ALL POSTS", Opt_In::TEXT_DOMAIN);
array_unshift($posts, $allPosts);
$pages = array_map(array($this, "posts_to_select2_data"), get_posts(array(
'numberposts' => -1,
'post_type' => 'page'
)));
/**
* Add all pages
*/
$allPages = new stdClass();
$allPages->id = "all";
$allPages->text = __("ALL PAGES", Opt_In::TEXT_DOMAIN);
array_unshift($pages, $allPages);
/**
* Add all custom post types
*/
$post_types = array();
$cpts = get_post_types( array(
'public' => true,
'_builtin' => false
), 'objects' );
foreach( $cpts as $cpt ) {
$cpt_array['name'] = $cpt->name;
$cpt_array['label'] = $cpt->label;
$cpt_array['data'] = array_map(array($this, "posts_to_select2_data"), get_posts(array(
'numberposts' => -1,
'post_type' => $cpt->name
)));
// all posts under this custom post type
$allCPTPosts = new stdClass();
$allCPTPosts->id = "all";
$allCPTPosts->text = __("ALL ", Opt_In::TEXT_DOMAIN) . $cpt->label;
array_unshift($cpt_array['data'], $allCPTPosts);
$post_types[$cpt->name] = $cpt_array;
}
$optin_vars = array(
'messages' => array(
'dont_navigate_away' => __("Changes are not saved, are you sure you want to navigate away?", Opt_In::TEXT_DOMAIN),
'undefined_name_service_provider' => __("Please define proper Opt-in name and service provider", Opt_In::TEXT_DOMAIN),
'undefined_name' => __("Please define proper Opt-in name", Opt_In::TEXT_DOMAIN),
'unselected_provider' => __("Please select service provider", Opt_In::TEXT_DOMAIN),
'error' => __("Error", Opt_In::TEXT_DOMAIN),
'ok' => __("Ok", Opt_In::TEXT_DOMAIN),
'sure_to_delete' => __("Are you sure you want to delete this optin?", Opt_In::TEXT_DOMAIN ),
'something_went_wrong' => '',
'positions' => array(
'top_left' => __("Top Left", Opt_In::TEXT_DOMAIN ),
'top_center' => __("Top Center", Opt_In::TEXT_DOMAIN ),
'top_right' => __("Top Right", Opt_In::TEXT_DOMAIN ),
'center_left' => __("Center Left", Opt_In::TEXT_DOMAIN ),
'center_right' => __("Center Right", Opt_In::TEXT_DOMAIN ),
'bottom_left' => __("Bottom Left", Opt_In::TEXT_DOMAIN ),
'bottom_center' => __("Bottom Center", Opt_In::TEXT_DOMAIN ),
'bottom_right' => __("Bottom Right", Opt_In::TEXT_DOMAIN ),
),
'settings' => array(
'popup' => __("Pop-up", Opt_In::TEXT_DOMAIN ),
'slide_in' => __("Slide-in", Opt_In::TEXT_DOMAIN ),
'magic_bar' => __("Magic Bar", Opt_In::TEXT_DOMAIN ),
'after_content' => __("After Content", Opt_In::TEXT_DOMAIN ),
'floating_social' => __("Floating Social", Opt_In::TEXT_DOMAIN ),
),
'conditions' => array(
'visitor_logged_in' => __("Visitor is logged in", Opt_In::TEXT_DOMAIN ),
'visitor_not_logged_in' => __("Visitor not logged in", Opt_In::TEXT_DOMAIN ),
'shown_less_than' => __("{type_name} shown less than", Opt_In::TEXT_DOMAIN ),
'only_on_mobile' => __("Only on mobile devices", Opt_In::TEXT_DOMAIN ),
'not_on_mobile' => __("Not on mobile devices", Opt_In::TEXT_DOMAIN ),
'from_specific_ref' => __("From a specific referrer", Opt_In::TEXT_DOMAIN ),
'not_from_specific_ref' => __("Not from a specific referrer", Opt_In::TEXT_DOMAIN ),
'not_from_internal_link' => __("Not from an internal link", Opt_In::TEXT_DOMAIN ),
'from_search_engine' => __("From a search engine", Opt_In::TEXT_DOMAIN ),
'on_specific_url' => __("On specific URL", Opt_In::TEXT_DOMAIN ),
'not_on_specific_url' => __("Not on specific URL", Opt_In::TEXT_DOMAIN ),
'visitor_has_commented' => __("Visitor has commented before", Opt_In::TEXT_DOMAIN ),
'visitor_has_never_commented' => __("Visitor has never commented", Opt_In::TEXT_DOMAIN ),
'in_a_country' => __("In a specific Country", Opt_In::TEXT_DOMAIN ),
'not_in_a_country' => __("Not in a specific Country", Opt_In::TEXT_DOMAIN ),
'posts' => __("Posts", Opt_In::TEXT_DOMAIN ),
'pages' => __("Pages", Opt_In::TEXT_DOMAIN ),
'categories' => __("Categories", Opt_In::TEXT_DOMAIN ),
'tags' => __("Tags", Opt_In::TEXT_DOMAIN ),
),
'condition_labels' => array(
'visitor_logged_in' => __("Only when visitor has logged in", Opt_In::TEXT_DOMAIN ),
'visitor_not_logged_in' => __("Only when visitor has not logged in", Opt_In::TEXT_DOMAIN ),
'shown_less_than' => __("{type_name} shown less than a certain times", Opt_In::TEXT_DOMAIN ),
'only_on_mobile' => __("Only on mobile devices", Opt_In::TEXT_DOMAIN ),
'not_on_mobile' => __("Not on mobile devices", Opt_In::TEXT_DOMAIN ),
'from_specific_ref' => __("From a specific referrer", Opt_In::TEXT_DOMAIN ),
'not_from_specific_ref' => __("Not from a specific referrer", Opt_In::TEXT_DOMAIN ),
'not_from_internal_link' => __("Not from an internal link", Opt_In::TEXT_DOMAIN ),
'from_search_engine' => __("From a search engine", Opt_In::TEXT_DOMAIN ),
'on_specific_url' => __("On specific URLs", Opt_In::TEXT_DOMAIN ),
'not_on_specific_url' => __("Not on specific URLs", Opt_In::TEXT_DOMAIN ),
'visitor_has_commented' => __("Visitor has commented before", Opt_In::TEXT_DOMAIN ),
'visitor_has_never_commented' => __("Visitor has never commented", Opt_In::TEXT_DOMAIN ),
'in_a_country' => __("In specific countries", Opt_In::TEXT_DOMAIN ),
'not_in_a_country' => __("Not in specific countries", Opt_In::TEXT_DOMAIN ),
'posts' => __("On certain posts", Opt_In::TEXT_DOMAIN ),
'all_posts' => __("All posts", Opt_In::TEXT_DOMAIN ),
'all' => __("All", Opt_In::TEXT_DOMAIN ),
'no' => __("No", Opt_In::TEXT_DOMAIN ),
'no_posts' => __("No posts", Opt_In::TEXT_DOMAIN ),
'only_on_these_posts' => __("Only {number} posts", Opt_In::TEXT_DOMAIN ),
'number_posts' => __("{number} posts", Opt_In::TEXT_DOMAIN ),
'except_these_posts' => __("All posts except {number}", Opt_In::TEXT_DOMAIN ),
'pages' => __("On certain pages", Opt_In::TEXT_DOMAIN ),
'all_pages' => __("All pages", Opt_In::TEXT_DOMAIN ),
'no_pages' => __("No pages", Opt_In::TEXT_DOMAIN ),
'only_on_these_pages' => __("Only {number} pages", Opt_In::TEXT_DOMAIN ),
'number_pages' => __("{number} pages", Opt_In::TEXT_DOMAIN ),
'except_these_pages' => __("All pages except {number}", Opt_In::TEXT_DOMAIN ),
'categories' => __("On certain categories", Opt_In::TEXT_DOMAIN ),
'all_categories' => __("All categories", Opt_In::TEXT_DOMAIN ),
'no_categories' => __("No categories", Opt_In::TEXT_DOMAIN ),
'only_on_these_categories' => __("Only {number} categories", Opt_In::TEXT_DOMAIN ),
'number_categories' => __("{number} categories", Opt_In::TEXT_DOMAIN ),
'except_these_categories' => __("All categories except {number}", Opt_In::TEXT_DOMAIN ),
'tags' => __("On certain tags", Opt_In::TEXT_DOMAIN ),
'all_tags' => __("All tags", Opt_In::TEXT_DOMAIN ),
'no_tags' => __("No tags", Opt_In::TEXT_DOMAIN ),
'only_on_these_tags' => __("Only {number} tags", Opt_In::TEXT_DOMAIN ),
'number_tags' => __("{number} tags", Opt_In::TEXT_DOMAIN ),
'except_these_tags' => __("All tags except {number}", Opt_In::TEXT_DOMAIN ),
"everywhere" => __("Show everywhere", Opt_In::TEXT_DOMAIN)
),
'conditions_body' => array(
'visitor_has_commented' => __('Shows the {type_name} if the user has already left a comment. You may want to combine this condition with either "Visitor is logged in" or "Visitor is not logged in".', Opt_In::TEXT_DOMAIN),
'visitor_has_never_commented' => __('Shows the {type_name} if the user has never left a comment. You may want to combine this condition with either "Visitor is logged in" or "Visitor is not logged in".', Opt_In::TEXT_DOMAIN),
'from_search_engine' => __('Shows the {type_name} if the user arrived via a search engine.', Opt_In::TEXT_DOMAIN),
'not_from_internal_link' => __('Shows the {type_name} if the user did not arrive on this page via another page on your site.', Opt_In::TEXT_DOMAIN),
'not_on_mobile' => __('Shows the {type_name} to visitors that are using a normal computer or laptop (i.e. not a Phone or Tablet).', Opt_In::TEXT_DOMAIN),
'only_on_mobile' => __('', Opt_In::TEXT_DOMAIN),
'visitor_not_logged_in' => __('', Opt_In::TEXT_DOMAIN),
'visitor_logged_in' => __('', Opt_In::TEXT_DOMAIN),
),
'model' => array(
"defaults" => array(
"optin_name" => '',
"optin_title" => __("eg. Get 50% Early-bird Special", Opt_In::TEXT_DOMAIN),
"optin_message" => __("Please fill in the form and submit to subscribe", Opt_In::TEXT_DOMAIN),
"success_message" => __("Congratulations! You have been subscribed to {name}", Opt_In::TEXT_DOMAIN),
"cta_button" => __("Sign Up", Opt_In::TEXT_DOMAIN)
),
"errors" => array(
'name' => __('Please fill "name" field.', Opt_In::TEXT_DOMAIN),
'provider' => __('Please choose a valid provider.', Opt_In::TEXT_DOMAIN),
'api_key' => __('Please provide api key.', Opt_In::TEXT_DOMAIN),
'mail_list' => __('Please select a mail list.', Opt_In::TEXT_DOMAIN)
)
),
'custom_content' => array(
'errors' => array(
'cta_url' => __('Please provide a valid url (http://example.net).', Opt_In::TEXT_DOMAIN)
),
'no_name' => __( 'Please provide name.', Opt_In::TEXT_DOMAIN ),
),
"sendy" => array(
"enter_url" => __("Please enter installation URL", Opt_In::TEXT_DOMAIN)
),
"mad_mimi" => array(
"username" => __("Please enter username or email address", Opt_In::TEXT_DOMAIN)
),
"infusionsoft" => array(
"enter_account_name" => __("Please enter your account name", Opt_In::TEXT_DOMAIN)
),
"media_uploader" => array(
"select_or_upload" => __("Select or Upload Image", Opt_In::TEXT_DOMAIN),
"use_this_image" => __("Use this image", Opt_In::TEXT_DOMAIN)
),
"dashboard" => array(
"not_enough_data" => __("There is no enough data yet, please try again later.", Opt_In::TEXT_DOMAIN)
),
"activecampaign" => array(
"enter_url" => __("Please enter your ActiveCampaign URL", Opt_In::TEXT_DOMAIN)
),
"convertkit" => array(
"enter_api_secret" => __("Please enter your API Secret key from ConvertKit", Opt_In::TEXT_DOMAIN)
),
'module_fields' => array(
'no_label' => __( 'Please enter field label', Opt_In::TEXT_DOMAIN ),
'no_name' => __( 'Please enter field name', Opt_In::TEXT_DOMAIN ),
'custom_field_already_exists' => __( 'Custom field "{name}" already exists.', Opt_In::TEXT_DOMAIN ),
'custom_field_not_exist' => __( 'Custom field doesn\'t exist! Please check your provider.', Opt_In::TEXT_DOMAIN ),
'cannot_create_custom_field' => __( 'Unable to create new custom field. Please check your provider.', Opt_In::TEXT_DOMAIN ),
),
'mautic' => array(
'enter_url' => __( 'Please enter installation URL', Opt_In::TEXT_DOMAIN ),
'username' => __( 'Please enter username', Opt_In::TEXT_DOMAIN ),
'password' => __( 'Please enter password', Opt_In::TEXT_DOMAIN ),
),
),
'url' => get_home_url(),
'includes_url' => includes_url(),
"palettes" => $this->_hustle->get_palettes(),
'preview_image' => "",
"cats" => $cats,
"tags" => $tags,
"posts" => $posts,
"post_types" => $post_types,
"pages" => $pages,
'is_edit' => $this->_is_edit(),
'current' => array(
"data" => "",
"settings" => array(
"shortcode" => array(
"enabled" => "true"
),
"widget" => array(
"enabled" => "true"
)
),
'design' => '',
'provider_args' => ''
),
"is_admin" => (int) is_admin(),
'module_fields' => Opt_In_Meta_Design::default_fields(),
'get_module_field_nonce' => wp_create_nonce( 'optin_add_module_field' ),
'error_log_nonce' => wp_create_nonce( 'optin_get_error_logs' ),
'clear_log_nonce' => wp_create_nonce( 'optin_clear_logs' ),
'hubspot_nonce' => wp_create_nonce( 'hustle_hubspot_referrer' ),
'constantcontact_nonce' => wp_create_nonce( 'hustle_constantcontact_referrer' ),
);
if( $this->_is_edit() ){
$optin = Opt_In_Model::instance()->get( filter_input(INPUT_GET, "optin", FILTER_VALIDATE_INT) );
$optin_vars['current'] = array(
"data" => $optin->get_data(),
"settings" => $optin->settings->to_object(),
'design' => $optin->design->to_object(),
'provider_args' => $optin->provider_args
);
}
$ap_vars = array(
'url' => get_home_url(),
'includes_url' => includes_url()
);
$optin_vars['countries'] = $this->_hustle->get_countries();
$optin_vars['animations'] = $this->_hustle->get_animations();
$optin_vars['services'] = $this->_email_services->get_all();
$optin_vars['providers'] = $this->_hustle->get_providers();
$optin_vars = apply_filters("hustle_optin_vars", $optin_vars);
$optin_vars['is_free'] = (int) Opt_In::is_free();
$total_optins = count(Opt_In_Collection::instance()->get_all_optins( null ));
$optin_vars['is_limited'] = (int) ( Opt_In_Utils::_is_free( 'opt-ins' ) && ! $this->_is_edit() && $total_optins >= 1 );
if( isset($_GET['page'] ) && 'inc_optins' == $_GET['page'] ) {
wp_enqueue_script( 'jquery-sortable' );
}
if(isset( $_GET['page'] ) && $_GET['page'] != 'inc_optins') wp_enqueue_script( 'wp-color-picker-alpha', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/vendor/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), '1.2.2', true );
wp_register_script( 'optin_admin_scripts', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/admin.min.js', array( 'jquery', 'backbone', 'jquery-effects-core' ), $this->_hustle->get_const_var( "VERSION" ), true );
wp_localize_script( 'optin_admin_scripts', 'optin_vars', $optin_vars );
wp_localize_script( 'optin_admin_scripts', 'hustle_vars', $optin_vars );
wp_enqueue_script( 'optin_admin_scripts' );
}
/**
* Is the admin page being viewed in edit mode
*
* @since 1.0.0.
*
* @return mixed
*/
private function _is_edit(){
return (bool) filter_input(INPUT_GET, "optin", FILTER_VALIDATE_INT);
}
/**
* Handling specific scripts for each scenario
*
*/
function handle_specific_script( $tag, $handle ) {
if ( $handle === 'optin_admin_fitie' ) {
$tag = "";
}
return $tag;
}
/**
* Registers admin menu page
*
* @since 1.0
*/
function register_admin_menu(){
// Optins
add_submenu_page( 'inc_optins', __("Opt-ins", Opt_In::TEXT_DOMAIN) , __("Email Opt-ins", Opt_In::TEXT_DOMAIN) , "manage_options", 'inc_optin_listing', array( $this, "render_optins_listing" ) );
add_submenu_page( 'inc_optins', __("New Opt-in", Opt_In::TEXT_DOMAIN) , __("New Opt-in", Opt_In::TEXT_DOMAIN) , "manage_options", 'inc_optin', array( $this, "render_optin_settings_page" ) );
}
function set_proper_current_screen( $current ){
global $current_screen;
if ( !Opt_In_Utils::_is_free() ) {
$current_screen->id = Opt_In_Utils::clean_current_screen($current_screen->id);
}
}
/**
* Removes the submenu entries for content creation
*
* @since 2.0
*/
function hide_unwanted_submenus(){
remove_submenu_page( 'inc_optins', 'inc_optin' );
remove_submenu_page( 'inc_optins', 'inc_hustle_new_social_group' );
remove_submenu_page( 'inc_optins', 'inc_hustle_new_social_restriction' );
}
/**
* Renders menu page based on if we already any optin
*
* @since 1.0
*/
function render_optin_settings_page( ) {
if( !$this->has_optin( ) ) $optin_id = filter_input( INPUT_GET, "optin", FILTER_VALIDATE_INT );
$provider = filter_input( INPUT_GET, "provider" );
$total_optins = count(Opt_In_Collection::instance()->get_all_optins( null ));
if ( Opt_In_Utils::_is_free( 'opt-ins' ) && ! $this->_is_edit() && $total_optins >= 1 ) {
$this->_hustle->render( 'admin/new-free-info', array(
'page_title' => __( 'Opt-ins', Opt_In::TEXT_DOMAIN ),
));
} else {
$this->_hustle->render( "/admin/wpoi-wizard", array(
"is_edit" => $this->_is_edit(),
"optin" => $optin_id ? Opt_In_Model::instance()->get( $optin_id ) : $optin_id,
"providers" => $this->_hustle->get_providers(),
"animations" => $this->_hustle->get_animations(),
'countries' => $this->_hustle->get_countries(),
'widgets_page_url' => get_admin_url(null, "widgets.php"),
'selected_provider' => $provider,
"save_nonce" => wp_create_nonce("hustle_save_optin"),
"field_types" => Opt_In_Model::instance()->get_field_types(),
));
}
}
/**
* Renders Optins listing page
*
* @since 2.0
*/
function render_optins_listing(){
$current_user = wp_get_current_user();
$new_optin = isset( $_GET['optin'] ) ? Opt_In_Model::instance()->get( intval($_GET['optin'] ) ) : null;
$updated_optin = isset( $_GET['optin_updated'] ) ? Opt_In_Model::instance()->get( intval($_GET['optin_updated'] ) ) : null;
$this->_hustle->render("admin/listing", array(
'optins' => Opt_In_Collection::instance()->get_all_optins( null ),
'types' => array(
'after_content' => __('AFTER CONTENT', Opt_In::TEXT_DOMAIN),
'popup' => __('Pop-up', Opt_In::TEXT_DOMAIN),
'slide_in' => __('Slide-in', Opt_In::TEXT_DOMAIN),
'shortcode' => __("Shortcode", Opt_In::TEXT_DOMAIN),
'widget' => __("Widget", Opt_In::TEXT_DOMAIN)
),
'new_optin' => $new_optin,
'updated_optin' => $updated_optin,
'add_new_url' => admin_url("admin.php?page=inc_optin"),
'user_name' => ucfirst($current_user->display_name)
));
}
/**
* Registers styles for the admin
*
*
*/
function register_styles(){
wp_enqueue_style('thickbox');
wp_register_style( 'optin_admin_select2', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/js/vendor/select2/css/select2.min.css', array(), $this->_hustle->get_const_var( "VERSION" ));
wp_register_style( 'wpoi_admin', $this->_hustle->get_static_var( "plugin_url" ) . 'assets/css/admin.min.css', array(), $this->_hustle->get_const_var( "VERSION" ));
wp_enqueue_style( 'optin_admin_select2' );
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_style( 'wdev_ui' );
wp_enqueue_style( 'wdev_notice' );
wp_enqueue_style( 'wpoi_admin' );
}
function has_optin(){
return false;
}
/**
* Converts term object to usable object for select2
* @param $term Term
* @return stdClass
*/
function terms_to_select2_data( $term ){
$obj = new stdClass();
$obj->id = $term->term_id;
$obj->text = $term->name;
return $obj;
}
/**
* Converts post object to usable object for select2
*
* @param $post WP_Post
* @return stdClass
*/
function posts_to_select2_data($post){
$obj = new stdClass();
$obj->id = $post->ID;
$obj->text = $post->post_title;
return $obj;
}
/**
* Checks if current optin admin page supports html tab for wp_editor
*
* @return bool
*/
private function _is_support_html(){
return isset( $_GET['page'] ) && ( in_array($_GET['page'], array(
'inc_hustle_custom_content',
'inc_hustle_new_custom_content',
) ) );
}
/**
* Checks if it's optin admin page
*
* @return bool
*/
private function _is_optin_admin(){
return isset( $_GET['page'] ) && ( in_array($_GET['page'], array(
'inc_hustle_dashboard',
'inc_optins',
'inc_optin_listing',
'inc_optin',
'inc_hustle_social_sharing',
'inc_hustle_custom_content',
'inc_hustle_new_custom_content',
'inc_hustle_settings') ) );
}
/**
* Saves new optin to db
*
* @since 1.0
*
* @param $data
* @return mixed
*/
public function save_new( $data ){
$optin = new Opt_In_Model();
// Save to optin table
$optin->optin_name = $data['optin']['optin_name'];
$optin->optin_title = $data['optin']['optin_title'];
$optin->optin_message = $data['optin']['optin_message'];
$optin->optin_provider = $data['optin']['optin_provider'];
$optin->optin_mail_list = ( isset($data['optin']['optin_mail_list']) ) ? $data['optin']['optin_mail_list'] : '';
$optin->active = (int) $data['optin']['active'];
$optin->test_mode = (int) $data['optin']['test_mode'];
$optin->save();
// Save to meta table
$optin->add_meta( "settings", $data['settings'] );
$optin->add_meta( "design", $data['design'] );
$optin->add_meta( "provider_args", ( isset($data['provider_args']) ) ? $data['provider_args'] : '' );
$optin->add_meta( "api_key", ( isset($data['optin']['api_key']) ) ? $data['optin']['api_key'] : '' );
$optin->add_meta( "shortcode_id", $data['settings']['shortcode_id'] );
$optin->add_meta( $this->_hustle->get_const_var( "SAVE_TO_LOCAL_COL", $optin ), $data['optin']['save_to_local'] );
return $optin->id;
}
public function update_optin( $data ){
if( !isset( $data['id'] ) ) return false;
$optin = Opt_In_Model::instance()->get( $data['id'] );
// Save to optin table
$optin->optin_name = $data['optin']['optin_name'];
$optin->optin_title = $data['optin']['optin_title'];
$optin->optin_message = $data['optin']['optin_message'];
$optin->optin_provider = $data['optin']['optin_provider'];
$optin->optin_mail_list = ( isset($data['optin']['optin_mail_list']) ) ? $data['optin']['optin_mail_list'] : '';
$optin->active = (int) $data['optin']['active'];
$optin->test_mode = (int) $data['optin']['test_mode'];
$optin->save();
// Save to meta table
$optin->update_meta( $this->_hustle->get_const_var( "KEY_SETTINGS", $optin ) , $data['settings'] );
$optin->update_meta( $this->_hustle->get_const_var( "KEY_API_KEY", $optin ) , ( isset($data['optin']['api_key']) ) ? $data['optin']['api_key'] : '' );
$optin->update_meta( $this->_hustle->get_const_var( "KEY_DESIGN", $optin ), $data['design'] );
$optin->update_meta( $this->_hustle->get_const_var( "PROVIDER_ARGS", $optin ), ( isset($data['provider_args']) ) ? $data['provider_args'] : '' );
$optin->update_meta( $this->_hustle->get_const_var( "SAVE_TO_LOCAL_COL", $optin ), $data['optin']['save_to_local'] );
$optin->update_meta( "shortcode_id", $data['settings']['shortcode_id'] );
return $optin->id;
}
/**
* Modify admin body class to our own advantage!
*
* @param $classes
* @return mixed
*/
function admin_body_class( $classes ){
return str_replace(array("wpmud ", "wpmud"), "", $classes);
}
/**
* Modify tinymce editor settings
*
* @param $settings
*/
function set_tinymce_settings( $settings ) {
$settings['paste_as_text'] = 'true';
return $settings;
}
/**
* Convert current v1 display condition data into v2 data structure
*
* @param $optin_id
*/
function convert_old_display_condition_data( $optin_id ) {
$optin = $optin_id ? Opt_In_Model::instance()->get( $optin_id ) : false;
if( $optin ){
$types = array('after_content','popup','slide_in');
$settings_condition = $optin->settings->to_array();
foreach( $types as $type ){
$_conditions = wp_parse_args($optin->settings->{$type}->conditions, $this->_append_old_display_condition_data($type, $optin));
$settings_condition[$type]['conditions'] = $_conditions;
}
$optin->update_meta( Opt_In_Model::KEY_SETTINGS, json_encode( $settings_condition ) );
}
}
/**
* Adds custom links on plugin page
*
*/
function add_plugin_action_links( $actions, $plugin_file ) {
static $plugin;
if (!isset($plugin))
$plugin = Opt_In::$plugin_base_file;
if ($plugin == $plugin_file) {
$dashboard_url = 'admin.php?page=inc_optins';
$settings = array('settings' => '' . __('Settings', Opt_In::TEXT_DOMAIN) . '');
$actions = array_merge($settings, $actions);
}
return $actions;
}
/**
* Append current v1 display condition data into v2 data structure
*
* @param $type, $optin
*/
private function _append_old_display_condition_data( $type, $optin ){
$conditions = array();
// convert v1 data into v2 for posts
$excluded_posts = $optin->settings->{$type}->excluded_posts;
$selected_posts = $optin->settings->{$type}->selected_posts;
if ( !empty($excluded_posts) && is_array($excluded_posts) ) {
if ( !isset($conditions['posts']) ) $conditions['posts'] = array();
$conditions['posts']['filter_type'] = "except";
$conditions['posts']['posts'] = $excluded_posts;
}
if ( !empty($selected_posts) && is_array($selected_posts) ) {
if ( !isset($conditions['posts']) ) $conditions['posts'] = array();
$conditions['posts']['filter_type'] = "only";
$conditions['posts']['posts'] = $selected_posts;
}
// convert v1 data into v2 for pages
$excluded_pages = $optin->settings->{$type}->excluded_pages;
$selected_pages = $optin->settings->{$type}->selected_pages;
if ( !empty($excluded_pages) && is_array($excluded_pages) ) {
if ( !isset($conditions['pages']) ) $conditions['pages'] = array();
$conditions['pages']['filter_type'] = "except";
$conditions['pages']['pages'] = $excluded_pages;
}
if ( !empty($selected_pages) && is_array($selected_pages) ) {
if ( !isset($conditions['pages']) ) $conditions['pages'] = array();
$conditions['pages']['filter_type'] = "only";
$conditions['pages']['pages'] = $selected_pages;
}
// convert v1 data into v2 for categories
$show_on_all_cats = (bool) $optin->settings->{$type}->show_on_all_cats;
$show_on_these_cats = $optin->settings->{$type}->show_on_these_cats;
if ( !is_null($show_on_these_cats) && !empty($show_on_these_cats) ) {
if ( !isset($conditions['categories']) ) $conditions['categories'] = array();
$conditions['categories']['categories'] = $show_on_these_cats;
if ( $show_on_all_cats ) {
$conditions['categories']['filter_type'] = "except";
} else {
$conditions['categories']['filter_type'] = "only";
}
}
// convert v1 data into v2 for tags
$show_on_all_tags = (bool) $optin->settings->{$type}->show_on_all_tags;
$show_on_these_tags = $optin->settings->{$type}->show_on_these_tags;
if ( !is_null($show_on_these_tags) && !empty($show_on_these_tags) ) {
if ( !isset($conditions['tags']) ) $conditions['tags'] = array();
$conditions['tags']['tags'] = $show_on_these_tags;
if ( $show_on_all_tags ) {
$conditions['tags']['filter_type'] = "except";
} else {
$conditions['tags']['filter_type'] = "only";
}
}
return $conditions;
}
}
endif;