__('Subscribe', 'fansub'), 'description' => '', 'desc_position' => 'before', 'desc_positions' => array( 'before' => __('Before email field', 'fansub'), 'after' => __('After email field', 'fansub') ), 'fields' => array( 'email' => array( 'label' => __('Email', 'fansub'), 'placeholder' => __('Enter your email', 'fansub'), 'required' => true ), 'name' => array( 'label' => __('Name', 'fansub'), 'placeholder' => __('Enter your name', 'fansub'), 'required' => false ), 'phone' => array( 'label' => __('Phone', 'fansub'), 'placeholder' => __('Enter your phone number', 'fansub'), 'required' => false ) ), 'captcha' => false, 'captcha_label' => __('Captcha', 'fansub'), 'captcha_placeholder' => __('Enter captcha code', 'fansub'), 'register' => false ); $defaults = apply_filters('fansub_widget_subscribe_defaults', $defaults); $args = apply_filters('fansub_widget_subscribe_args', array()); $args = wp_parse_args($args, $defaults); return $args; } public function __construct() { $this->args = $this->get_defaults(); $this->admin_args = array( 'id' => 'fansub_widget_subscribe', 'name' => 'FANSUB Subscribe', 'class' => 'fansub-subscribe-widget', 'description' => __('Allow subscribe as user.', 'fansub'), 'width' => 400 ); $this->admin_args = apply_filters('fansub_widget_subscribe_admin_args', $this->admin_args); parent::__construct($this->admin_args['id'], $this->admin_args['name'], array( 'classname' => $this->admin_args['class'], 'description' => $this->admin_args['description'], ), array( 'width' => $this->admin_args['width'] ) ); add_filter('fansub_allow_user_subscribe', '__return_true'); add_action('wp_ajax_fansub_widget_subscribe', array($this, 'fansub_widget_subscribe_ajax_callback')); add_action('wp_ajax_nopriv_fansub_widget_subscribe', array($this, 'fansub_widget_subscribe_ajax_callback')); } function fansub_widget_subscribe_ajax_callback() { $use_captcha = (bool)fansub_get_method_value('use_captcha'); $captcha_code = fansub_get_method_value('captcha'); $email = fansub_get_method_value('email'); $name = fansub_get_method_value('name'); $phone = fansub_get_method_value('phone'); $register = (bool)fansub_get_method_value('register'); $result = array( 'success' => false, 'message' => fansub_build_message(fansub_text_error_default(), 'danger') ); $captcha_valid = true; if($use_captcha) { $captcha = new FANSUB_Captcha(); $captcha_valid = $captcha->check($captcha_code); } if($captcha_valid) { if(is_email($email)) { if($register && email_exists($email)) { $result['message'] = fansub_build_message(fansub_text_error_email_exists(), 'danger'); } else { $query = fansub_get_post_by_meta('subscriber_email', $email, array('post_type' => 'fansub_subscriber')); if($query->have_posts()) { $result['message'] = fansub_build_message(fansub_text_error_email_exists(), 'danger'); } else { $post_title = ''; if(!empty($name)) { $post_title .= $name; } if(empty($post_title)) { $post_title = $email; } else { $post_title .= ' - ' . $email; } $post_data = array( 'post_type' => 'fansub_subscriber', 'post_title' => $post_title, 'post_status' => 'publish' ); $post_id = fansub_insert_post($post_data); if(fansub_id_number_valid($post_id)) { update_post_meta($post_id, 'subscriber_name', $name); update_post_meta($post_id, 'subscriber_email', $email); update_post_meta($post_id, 'subscriber_phone', $phone); update_post_meta($post_id, 'subscriber_verified', 0); $active_key = fansub_generate_reset_key(); update_post_meta($post_id, 'subscriber_active_key', $active_key); if($register) { $password = wp_generate_password(); $user_data = array( 'username' => $email, 'email' => $email, 'password' => $password ); $user_id = fansub_add_user($user_data); if(fansub_id_number_valid($user_id)) { wp_send_new_user_notifications($user_id); update_post_meta($post_id, 'subscriber_user', $user_id); update_user_meta($user_id, 'subscriber_id', $post_id); } } $verify_link = fansub_generate_verify_link($active_key); fansub_send_mail_verify_email_subscription(fansub_text_email_subject_verify_subscription(), $email, $verify_link); $result['success'] = true; $result['message'] = fansub_build_message(fansub_text_success_register_and_verify_email(), 'success'); } } } } else { $result['message'] = fansub_build_message(fansub_text_error_email_not_valid(), 'danger'); } } else { $result['message'] = fansub_build_message(fansub_text_error_captcha_not_valid(), 'danger'); } wp_send_json($result); } public function widget($args, $instance) { $register = fansub_get_value_by_key($instance, 'register', fansub_get_value_by_key($this->args, 'register')); $button_text = fansub_get_value_by_key($instance, 'button_text', fansub_get_value_by_key($this->args, 'button_text')); $captcha = (bool)fansub_get_value_by_key($instance, 'captcha', fansub_get_value_by_key($this->args, 'captcha')); if($captcha) { add_filter('fansub_use_session', '__return_true'); } $description = fansub_get_value_by_key($instance, 'description', fansub_get_value_by_key($this->args, 'description')); $desc_position = fansub_get_value_by_key($instance, 'desc_position', fansub_get_value_by_key($this->args, 'desc_position')); $fields = $this->get_value_fields($instance); $all_fields = explode(',', $fields); fansub_widget_before($args, $instance); ob_start(); ?>
'; if(!empty($description) && 'before' == $desc_position) { echo '

' . $description . '

'; } foreach($all_fields as $field_name) { $field = fansub_get_value_by_key($this->args['fields'], $field_name); if(fansub_array_has_value($field)) { $label = $this->get_value_field($instance, $field_name, 'label'); $placeholder = $this->get_value_field($instance, $field_name, 'placeholder'); $required = $this->get_value_field($instance, $field_name, 'required'); $class = fansub_sanitize_html_class($field_name); $field_args = array( 'id' => $this->get_field_id('subscribe_' . $field_name), 'name' => $this->get_field_name('subscribe_' . $field_name), 'value' => '', 'label' => $label, 'placeholder' => $placeholder, 'required' => $required, 'class' => 'form-control input-' . $class, 'before' => '
', 'after' => '
' ); fansub_field_input($field_args); } } if(!empty($description) && 'after' == $desc_position) { echo '

' . $description . '

'; } if($captcha) { $captcha_label = fansub_get_value_by_key($instance, 'captcha_label', fansub_get_value_by_key($this->args, 'captcha_label')); $captcha_placeholder = fansub_get_value_by_key($instance, 'captcha_placeholder', fansub_get_value_by_key($this->args, 'captcha_placeholder')); $field_args = array( 'id' => $this->get_field_id('captcha'), 'name' => $this->get_field_name('captcha'), 'input_width' => '100%', 'class' => 'form-control', 'label' => $captcha_label, 'placeholder' => $captcha_placeholder, 'before' => '
', 'after' => '
' ); fansub_field_captcha($field_args); } $field_args = array( 'type' => 'submit', 'name' => 'submit', 'value' => $button_text, 'class' => 'form-control', 'before' => '
', 'after' => '
' ); fansub_field_input($field_args); fansub_loading_image(array('name' => 'icon-loading-long.gif')); ?>
args, 'fields')); if(fansub_array_has_value($fields)) { $tmp = ''; foreach($fields as $field_name => $field) { $tmp .= $field_name . ','; } $tmp = trim($tmp, ','); $fields = $tmp; } return $fields; } public function get_value_field($instance, $field_name, $key) { $real_name = 'subscribe_' . $field_name . '_' . $key; return fansub_get_value_by_key($instance, $real_name, fansub_get_value_by_key($this->args['fields'][$field_name], $key)); } public function form($instance) { $title = isset($instance['title']) ? $instance['title'] : ''; $register = fansub_get_value_by_key($instance, 'register', fansub_get_value_by_key($this->args, 'register')); $button_text = fansub_get_value_by_key($instance, 'button_text', fansub_get_value_by_key($this->args, 'button_text')); $captcha = fansub_get_value_by_key($instance, 'captcha', fansub_get_value_by_key($this->args, 'captcha')); $captcha_label = fansub_get_value_by_key($instance, 'captcha_label', fansub_get_value_by_key($this->args, 'captcha_label')); $captcha_placeholder = fansub_get_value_by_key($instance, 'captcha_placeholder', fansub_get_value_by_key($this->args, 'captcha_placeholder')); $description = fansub_get_value_by_key($instance, 'description', fansub_get_value_by_key($this->args, 'description')); $desc_position = fansub_get_value_by_key($instance, 'desc_position', fansub_get_value_by_key($this->args, 'desc_position')); $fields = $this->get_value_fields($instance); $all_fields = explode(',', $fields); fansub_field_widget_before($this->admin_args['class']); fansub_widget_field_title($this->get_field_id('title'), $this->get_field_name('title'), $title); $args = array( 'id' => $this->get_field_id('fields'), 'name' => $this->get_field_name('fields'), 'value' => $fields, 'label' => __('Fields:', 'fansub') ); fansub_widget_field('fansub_field_input_text', $args); foreach($all_fields as $field_name) { $field = fansub_get_value_by_key($this->args['fields'], $field_name); if(fansub_array_has_value($field)) { foreach($field as $key => $data) { $field_label = fansub_uppercase_first_char($field_name); $field_label .= ' ' . strtolower($key); $field_callback = 'fansub_field_input_text'; if('required' == $key) { $field_label .= '?'; $field_callback = 'fansub_field_input_checkbox'; } else { $field_label .= ':'; } $field_value = $this->get_value_field($instance, $field_name, $key); $args = array( 'id' => $this->get_field_id('subscribe_' . $field_name . '_' . $key), 'name' => $this->get_field_name('subscribe_' . $field_name . '_' . $key), 'value' => $field_value, 'label' => $field_label ); fansub_widget_field($field_callback, $args); } } } $args = array( 'id' => $this->get_field_id('button_text'), 'name' => $this->get_field_name('button_text'), 'value' => $button_text, 'label' => __('Button text:', 'fansub') ); fansub_widget_field('fansub_field_input_text', $args); $args = array( 'id' => $this->get_field_id('description'), 'name' => $this->get_field_name('description'), 'value' => $description, 'label' => __('Description:', 'fansub') ); fansub_widget_field('fansub_field_textarea', $args); $lists = $this->args['desc_positions']; $all_option = ''; foreach($lists as $lkey => $lvalue) { $all_option .= fansub_field_get_option(array('value' => $lkey, 'text' => $lvalue, 'selected' => $desc_position)); } $args = array( 'id' => $this->get_field_id('desc_position'), 'name' => $this->get_field_name('desc_position'), 'value' => $desc_position, 'all_option' => $all_option, 'label' => __('Description position:', 'fansub'), 'class' => 'desc-position' ); fansub_widget_field('fansub_field_select', $args); if($captcha) { $args = array( 'id' => $this->get_field_id('captcha_label'), 'name' => $this->get_field_name('captcha_label'), 'value' => $captcha_label, 'label' => __('Captcha label:', 'fansub') ); fansub_widget_field('fansub_field_input_text', $args); $args = array( 'id' => $this->get_field_id('captcha_placeholder'), 'name' => $this->get_field_name('captcha_placeholder'), 'value' => $captcha_placeholder, 'label' => __('Captcha placeholder:', 'fansub') ); fansub_widget_field('fansub_field_input_text', $args); } $args = array( 'id' => $this->get_field_id('captcha'), 'name' => $this->get_field_name('captcha'), 'value' => $captcha, 'label' => __('Using captcha in form?', 'fansub') ); fansub_widget_field('fansub_field_input_checkbox', $args); $args = array( 'id' => $this->get_field_id('register'), 'name' => $this->get_field_name('register'), 'value' => $register, 'label' => __('Add suscriber as a user?', 'fansub') ); fansub_widget_field('fansub_field_input_checkbox', $args); fansub_field_widget_after(); } public function update($new_instance, $old_instance) { $instance = $old_instance; $instance['title'] = strip_tags(fansub_get_value_by_key($new_instance, 'title')); $instance['fields'] = $this->get_value_fields($new_instance); $all_fields = explode(',', $instance['fields']); foreach($all_fields as $field_name) { $field = fansub_get_value_by_key($this->args['fields'], $field_name); if(fansub_array_has_value($field)) { foreach($field as $key => $data) { $real_name = 'subscribe_' . $field_name . '_' . $key; $instance[$real_name] = $this->get_value_field($new_instance, $field_name, $key); } } } $instance['button_text'] = fansub_get_value_by_key($new_instance, 'button_text', fansub_get_value_by_key($this->args, 'button_text')); $instance['description'] = fansub_get_value_by_key($new_instance, 'description', fansub_get_value_by_key($this->args, 'description')); $instance['desc_position'] = fansub_get_value_by_key($new_instance, 'desc_position', $this->args['desc_position']); $instance['captcha'] = fansub_checkbox_post_data_value($new_instance, 'captcha', fansub_get_value_by_key($this->args, 'captcha')); $instance['captcha_label'] = fansub_get_value_by_key($new_instance, 'captcha_label', fansub_get_value_by_key($this->args, 'captcha_label')); $instance['captcha_placeholder'] = fansub_get_value_by_key($new_instance, 'captcha_placeholder', fansub_get_value_by_key($this->args, 'captcha_placeholder')); $instance['register'] = fansub_checkbox_post_data_value($new_instance, 'register', fansub_get_value_by_key($this->args, 'register')); return $instance; } }