public function widget($args, $instance)
    {
        $this->instance = $instance;
        $register = hocwp_get_value_by_key($instance, 'register', hocwp_get_value_by_key($this->args, 'register'));
        $button_text = hocwp_get_value_by_key($instance, 'button_text', hocwp_get_value_by_key($this->args, 'button_text'));
        $captcha = (bool) hocwp_get_value_by_key($instance, 'captcha', hocwp_get_value_by_key($this->args, 'captcha'));
        if ($captcha) {
            add_filter('hocwp_use_session', '__return_true');
        }
        $description = hocwp_get_value_by_key($instance, 'description', hocwp_get_value_by_key($this->args, 'description'));
        $desc_position = hocwp_get_value_by_key($instance, 'desc_position', hocwp_get_value_by_key($this->args, 'desc_position'));
        $fields = $this->get_value_fields($instance);
        $all_fields = explode(',', $fields);
        hocwp_widget_before($args, $instance);
        ob_start();
        ?>
		<form class="subscribe-form hocwp-subscribe-form" method="post"
		      data-captcha="<?php 
        echo hocwp_bool_to_int($captcha);
        ?>
"
		      data-register="<?php 
        echo hocwp_bool_to_int($register);
        ?>
">
			<?php 
        echo '<div class="messages"></div>';
        if (!empty($description) && 'before' == $desc_position) {
            echo '<p class="description">' . $description . '</p>';
        }
        foreach ($all_fields as $field_name) {
            $field = hocwp_get_value_by_key($this->args['fields'], $field_name);
            if (hocwp_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 = hocwp_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' => '<div class="form-group field-' . $class . '">', 'after' => '</div>');
                hocwp_field_input($field_args);
            }
        }
        if (!empty($description) && 'after' == $desc_position) {
            echo '<p class="description">' . $description . '</p>';
        }
        if ($captcha) {
            $captcha_label = hocwp_get_value_by_key($instance, 'captcha_label', hocwp_get_value_by_key($this->args, 'captcha_label'));
            $captcha_placeholder = hocwp_get_value_by_key($instance, 'captcha_placeholder', hocwp_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' => '<div class="form-group field-captcha">', 'after' => '</div>');
            hocwp_field_captcha($field_args);
        }
        $field_args = array('type' => 'submit', 'name' => 'submit', 'value' => $button_text, 'class' => 'form-control', 'before' => '<div class="form-group field-submit">', 'after' => '</div>');
        hocwp_field_input($field_args);
        hocwp_loading_image(array('name' => 'icon-loading-long.gif'));
        ?>
		</form>
		<?php 
        $widget_html = ob_get_clean();
        $widget_html = apply_filters('hocwp_widget_subscribe_html', $widget_html, $args, $instance, $this);
        echo $widget_html;
        hocwp_widget_after($args, $instance);
    }
function hocwp_field_media_upload($args = array())
{
    hocwp_field_sanitize_args($args);
    $id = isset($args['id']) ? $args['id'] : '';
    $name = isset($args['name']) ? $args['name'] : '';
    $value = isset($args['value']) ? $args['value'] : '';
    $value = hocwp_sanitize_media_value($value);
    $media_url = $value['url'];
    $container = (bool) hocwp_get_value_by_key($args, 'container');
    hocwp_field_before($args);
    if ($container) {
        echo '<div class="media-container field-group">';
    }
    $media_preview = new HOCWP_HTML('span');
    $media_preview->set_class('media-preview');
    if (!empty($media_url)) {
        $image = new HOCWP_HTML('img');
        $image->set_attribute('src', $media_url);
        if (isset($value['is_image']) && !(bool) $value['is_image']) {
            $type_icon = hocwp_get_value_by_key($value, 'type_icon');
            if (!empty($type_icon)) {
                $image->set_attribute('src', $type_icon);
            }
        }
        $media_preview->set_text($image->build());
    }
    $media_preview->output();
    if (empty($id)) {
        $id = hocwp_sanitize_id($name);
    }
    $url_args = array('id' => $id . '_url', 'name' => $name . '[url]', 'class' => 'media-url', 'type' => 'url', 'value' => $media_url, 'attributes' => array('autocomplete' => 'off'));
    hocwp_field_input($url_args);
    $btn_insert_args = array('data_editor' => $id . '_url');
    if (!empty($media_url)) {
        $btn_insert_args['class'] = 'hidden';
    }
    hocwp_field_insert_media_button($btn_insert_args);
    $btn_remove_args = array();
    if (empty($media_url)) {
        $btn_remove_args['class'] = 'hidden';
    }
    hocwp_field_remove_button($btn_remove_args);
    $id_args = array('id' => $id . '_id', 'name' => $name . '[id]', 'class' => 'media-id', 'value' => $value['id']);
    hocwp_field_input_hidden($id_args);
    if ($container) {
        echo '</div>';
    }
    hocwp_field_after($args);
}