<?php
/**
 * Registers a widget to show a profile.
 *
 * @package Organic Widgets Pro
 */

// Block direct requests.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/**
 * Adds Organic_Widgets_Pro_Profile_Widget widget.
 */
class Organic_Widgets_Pro_Profile_Widget extends Organic_Widgets_Pro_Custom_Widget {

	const CUSTOM_IMAGE_SIZE_SLUG = 'organic_widgets_image_upload';

	/**
	 * Register widget with WordPress.
	 */
	function __construct() {
		parent::__construct(
			'organic_widgets_profile', // Base ID.
			__( 'Organic Profile', 'organic-widgets-pro' ), // Name.
			array(
				'description'                 => __( 'Display a personal profile.', 'organic-widgets-pro' ),
				'customize_selective_refresh' => true,
			)
		);

		$this->id_prefix = $this->get_field_id( '' );

		// BG options.
		$this->bg_options = array(
			'color'     => true,
			'image'     => true,
			'bg_fixed'  => true,
			'bg_repeat' => true,
			'video'     => false,
		);

		// Font options.
		$this->font_options = array(
			'title_heading'          => true,
			'title_font'             => true,
			'title_color'            => true,
			'title_weight'           => true,
			'title_spacing'          => true,
			'title_size'             => true,
			'content_heading_font'   => false,
			'content_heading_size'   => false,
			'content_heading_weight' => false,
			'body_font'              => true,
			'text_alignment'         => true,
		);

		// Layout options.
		$this->layout_options = array(
			'content_aligner'     => false,
			'content_orientation' => true,
			'padding_top'         => true,
			'padding_bottom'      => true,
			'custom_height'       => true,
			'custom_width'        => true,
			'full_height'         => false,
		);

		// Display options.
		$this->display_options = array(
			'hide_title'   => false,
			'hide_meta'    => false,
			'hide_content' => false,
			'hide_bg'      => true,
		);

		// Admin Scripts.
		add_action( 'admin_enqueue_scripts', array( $this, 'admin_setup' ) );
		add_action( 'admin_footer-widgets.php', array( $this, 'render_control_template_scripts' ) );

		// Public scripts.
		add_action( 'customize_preview_init', array( $this, 'public_scripts' ) );
	}

	/**
	 * Front-end display of widget.
	 *
	 * @see WP_Widget::widget()
	 *
	 * @param array $args     Widget arguments.
	 * @param array $instance Saved values from database.
	 */
	public function widget( $args, $instance ) {

		$bg_image_id       = isset( $instance['bg_image_id'] ) ? $instance['bg_image_id'] : false;
		$bg_image          = ( isset( $instance['bg_image'] ) && '' != $instance['bg_image'] ) ? $instance['bg_image'] : false;
		$bg_color          = ( isset( $instance['bg_color'] ) && '' != $instance['bg_color'] ) ? $instance['bg_color'] : false;
		$featured_image_id = isset( $instance['featured_image_id'] ) ? $instance['featured_image_id'] : false;
		$featured_image    = ( isset( $instance['featured_image'] ) && '' != $instance['featured_image'] ) ? $instance['featured_image'] : false;
		$repeatable_array  = ( isset( $instance['repeatable_array'] ) ) ? json_decode( $instance['repeatable_array'], true ) : array();

		// Register Featured Image Size Option.
		if ( isset( $instance['featured_image_size'] ) ) {
			$featured_image_size = $instance['featured_image_size'];
		} else {
			$featured_image_size = 100;
		}
		// Register BG Fixed Position Option.
		if ( isset( $instance['bg_image_fixed'] ) ) {
			$bg_image_fixed = $instance['bg_image_fixed'];
		} else {
			$bg_image_fixed = false;
		}
		// Register BG Repeat Option.
		if ( isset( $instance['bg_image_repeat'] ) ) {
			$bg_image_repeat = $instance['bg_image_repeat'];
		} else {
			$bg_image_repeat = false;
		}
		// Register Content Orientation Option.
		if ( isset( $instance['orientation'] ) ) {
			$content_orientation = $instance['orientation'];
		} else {
			$content_orientation = 'horizontal';
		}
		// Register Hide Content Option.
		if ( isset( $instance['hide_content_bg'] ) ) {
			$hide_content_bg = $instance['hide_content_bg'];
		} else {
			$hide_content_bg = false;
		}
		// Register Text Align Option.
		if ( isset( $instance['text_align'] ) ) {
			$text_align = $instance['text_align'];
		} else {
			$text_align = 'left';
		}

		$group    = $this->organic_widgets_pro_groupable_widget( $args );
		$group_id = $group['group_id'];
		if ( $group['first'] && ! $group['last'] ) {
			$first_last = ' organic-widgets-groupable-first';
		} elseif ( $group['last'] && ! $group['first'] ) {
			$first_last = ' organic-widgets-groupable-last';
		} else {
			$first_last = false;
		}

		echo $args['before_widget'];

		?>

		<?php echo '<style media="screen">'; ?>
			<?php if ( ! empty( $instance['widget_custom_width'] ) ) { ?>
			.organic-widgets-group-container[data-group-id="<?php echo esc_attr( $group_id ); ?>"] {
				width: <?php echo absint( $instance['widget_custom_width'] ); ?>%;
			}
			<?php } ?>
			<?php if ( ! empty( $instance['widget_custom_height'] ) || '' !== $instance['widget_padding_top'] || '' !== $instance['widget_padding_bottom'] ) { ?>
				#<?php echo esc_attr( $this->id ); ?> .organic-widgets-profile-section {
					<?php if ( ! empty( $instance['widget_custom_height'] ) ) { ?>
					min-height: <?php echo absint( $instance['widget_custom_height'] ); ?>px;
					<?php } ?>
					<?php if ( '' !== $instance['widget_padding_top'] ) { ?>
					padding-top: <?php echo absint( $instance['widget_padding_top'] ); ?>px;
					<?php } ?>
					<?php if ( '' !== $instance['widget_padding_bottom'] ) { ?>
					padding-bottom: <?php echo absint( $instance['widget_padding_bottom'] ); ?>px;
					<?php } ?>
				}
			<?php } ?>
			<?php if ( ! empty( $instance['title_font_family'] ) || ! empty( $instance['title_font_weight'] ) || ! empty( $instance['title_font_size'] ) || ! empty( $instance['title_letter_spacing'] ) || ! empty( $instance['title_text_color'] ) ) { ?>
				#<?php echo esc_attr( $this->id ); ?> .organic-widgets-title {
					<?php if ( ! empty( $instance['title_font_family'] ) ) { ?>
					font-family: <?php echo esc_html( $instance['title_font_family'] ); ?>;
					<?php } ?>
					<?php if ( ! empty( $instance['title_font_weight'] ) ) { ?>
					font-weight: <?php echo esc_html( $instance['title_font_weight'] ); ?>;
					<?php } ?>
					<?php if ( ! empty( $instance['title_font_size'] ) ) { ?>
					font-size: <?php echo esc_html( $instance['title_font_size'] ); ?>px;
					<?php } ?>
					<?php if ( ! empty( $instance['title_letter_spacing'] ) ) { ?>
					letter-spacing: <?php echo esc_html( $instance['title_letter_spacing'] ); ?>px;
					<?php } ?>
					<?php if ( ! empty( $instance['title_text_color'] ) ) { ?>
					color: <?php echo esc_html( $instance['title_text_color'] ); ?>;
					<?php } ?>
				}
			<?php } ?>
			<?php if ( ! empty( $instance['body_font_family'] ) ) { ?>
				#<?php echo esc_attr( $this->id ); ?> .organic-widgets-profile p {
					font-family: <?php echo esc_html( $instance['body_font_family'] ); ?>;
				}
			<?php } ?>
			<?php if ( ! empty( $instance['featured_image_size'] ) ) { ?>
				#<?php echo esc_attr( $this->id ); ?> .organic-widgets-content-horizontal .organic-widgets-profile-img {
					width: <?php echo esc_html( $instance['featured_image_size'] ); ?>%;
					max-width: 100%;
				}
			<?php } ?>
			<?php if ( ! empty( $instance['featured_image_size'] ) ) { ?>
				#<?php echo esc_attr( $this->id ); ?> .organic-widgets-content-vertical .organic-widgets-profile-img {
					width: <?php echo esc_html( $instance['featured_image_size'] ); ?>%;
				}
			<?php } ?>
		<?php echo '</style>'; ?>

		<?php /** BEGIN .organic-widgets-section */ ?>
		<div <?php if ( ! empty( $instance['widget_custom_anchor'] ) ) { ?>id="<?php echo esc_html( $instance['widget_custom_anchor'] ); ?>"<?php } ?>
		class="organic-widgets-section organic-widgets-profile-section
		<?php if ( $first_last ) { echo esc_attr( $first_last ); } ?>
		<?php if ( $bg_image_fixed ) echo 'organic-widgets-fixed-bg-img'; ?>
		<?php if ( $bg_image_repeat ) echo 'organic-widgets-repeat-bg-img'; ?>
		<?php if ( $hide_content_bg ) echo 'organic-widgets-no-bg'; ?>
		<?php if ( $content_orientation ) echo 'organic-widgets-content-'?><?php echo esc_html( $content_orientation ); ?>
		<?php if ( ! empty( $instance['widget_custom_class'] ) ) echo esc_html( $instance['widget_custom_class'] ); ?>"
		<?php if ( 0 < $bg_image_id ) { ?>
			style="background-image:url(<?php echo esc_url( $bg_image ); ?>);"
		<?php } if ( $bg_color ) { ?>
			style="background-color:<?php echo esc_attr( $bg_color ); ?>;"
		<?php } ?>
		<?php if ( $group_id ) { echo 'data-group-id="' . $group_id . '"'; } ?>>

			<?php if ( ! empty( $instance['title'] ) || ! empty( $instance['text'] ) || ! empty( $instance['subtitle'] ) ) { ?>

				<?php /** BEGIN .organic-widgets-profile */ ?>
				<div class="organic-widgets-profile">

					<?php if ( false === $hide_content_bg ) { ?>
					<?php /** BEGIN .organic-widgets-card */ ?>
					<div class="organic-widgets-card clearfix">
					<?php } ?>

						<?php if ( $featured_image_id > 0 ) { ?>
							<div class="organic-widgets-profile-img" <?php if ( 0 < $featured_image_id ) { ?>style="background-image:url(<?php echo $featured_image; ?>);"<?php } ?>>
								<img class="organic-widgets-hide-img" src="<?php echo esc_url( $featured_image ); ?>" alt="<?php __( 'Profile Image', 'organic-widgets-pro' ) ?>" />
							</div>
						<?php } ?>

						<?php /** BEGIN .organic-profile-content */ ?>
						<div class="organic-profile-content organic-widgets-card-content <?php if ( $text_align ) echo 'organic-widgets-text-'?><?php echo $text_align; ?>">

						<?php if ( ! empty( $instance['title'] ) ) { ?>
							<<?php if ( ! empty( $instance['title_text_heading'] ) ) { echo $instance['title_text_heading']; } else { ?>h4<?php } ?> class="organic-widgets-title"><?php echo apply_filters( 'organic_widget_title', $instance['title'] ); ?></<?php if ( ! empty( $instance['title_text_heading'] ) ) { echo $instance['title_text_heading']; } else { ?>h4<?php } ?>>
						<?php } ?>

						<?php if ( ! empty( $instance['subtitle'] ) ) { ?>
							<h6 class="organic-widgets-sub-title"><?php echo $instance['subtitle']; ?></h6>
						<?php } ?>

						<?php if ( ! empty( $instance['text'] ) ) { ?>
							<div class="organic-widgets-profile-excerpt"><?php echo apply_filters( 'the_content', $instance['text'] ); ?></div>
						<?php } ?>

						<?php if ( ! empty( $repeatable_array ) ) { ?>

						<ul class="organic-widgets-social-icons">

							<?php foreach ( $repeatable_array as $social_link ) { ?>

								<?php if ( ! empty( $social_link['link_url'] ) ) { ?>

									<?php $is_email = is_email( $social_link['link_url'] ) ? true : false; ?>

									<li><a href="<?php if ( $is_email ) { echo 'mailto:'; } echo esc_url( $social_link['link_url'] ); ?>" target="_blank"><i class="fa"></i></a></li>

								<?php } ?>

							<?php } ?>

						</ul>

						<?php } ?>

						<?php /** END .organic-profile-content */ ?>
						</div>

					<?php if ( false === $hide_content_bg ) { ?>
					<?php /** END .organic-widgets-card */ ?>
					</div>
					<?php } ?>

				<?php /** END .organic-widgets-profile */ ?>
				</div>

			<?php } // End Conditional checking for content. ?>

		<?php /** END .organic-widgets-section */ ?>
		</div>

		<?php echo $args['after_widget'];

	} // End widget()

	/**
	 * Back-end widget form.
	 *
	 * @see WP_Widget::form()
	 *
	 * @param array $instance Previously saved values from database.
	 */
	public function form( $instance ) {

		$instance = wp_parse_args(
			(array) $instance,
			array(
				'title' => '',
				'text'  => '',
			)
		);

		$this->id_prefix = $this->get_field_id( '' );

		if ( ! isset( $instance['title_text_heading'] ) ) {
			$instance['title_text_heading'] = 'h4';
		}

		if ( isset( $instance['subtitle'] ) ) {
			$subtitle = $instance['subtitle'];
		} else {
			$subtitle = '';
		}

		if ( isset( $instance['featured_image_id'] ) ) {
			$featured_image_id = $instance['featured_image_id'];
		} else {
			$featured_image_id = 0;
		}

		if ( isset( $instance['featured_image_id'] ) && isset( $instance['featured_image'] ) ) {
			$featured_image = $instance['featured_image'];
		} else {
			$featured_image = false;
		}

		if ( isset( $instance['featured_image_size'] ) ) {
			$featured_image_size = $instance['featured_image_size'];
		} else {
			$featured_image_size = 100;
		}

		if ( isset( $instance['repeatable_array'] ) ) {
			$repeatable_array = json_decode( $instance['repeatable_array'], true );
		} else {
			$repeatable_array = array();
		}

		?>

		<div class="organic-widgets-repeatable-form-item-widget-admin organic-widgets-profile-form">

			<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" class="title" type="hidden" value="<?php echo esc_attr( $instance['title'] ); ?>">
			<input id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>" class="text organic-widgets-wysiwyg-anchor" type="hidden" value="<?php echo esc_attr( $instance['text'] ); ?>">
			<input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" class="filter" type="hidden" value="on">
			<input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual" type="hidden" value="on">

			<p>
				<label for="<?php echo $this->get_field_id( 'featured_image' ); ?>"><?php _e( 'Profile Image:', 'organic-widgets-pro' ); ?></label>
				<div class="uploader">
					<input type="submit" class="button" name="<?php echo $this->get_field_name('featured_image_uploader_button'); ?>" id="<?php echo $this->get_field_id('featured_image_uploader_button'); ?>" value="<?php if ( $featured_image_id ) { _e( 'Change Image', 'organic-widgets-pro' ); } else { _e( 'Select Image', 'organic-widgets-pro' ); }?>" onclick="organicWidgetFeaturedImage.uploader( '<?php echo $this->id; ?>', '<?php echo $this->id_prefix; ?>' ); return false;" />
					<input type="submit" class="organic-widgets-remove-image-button button" name="<?php echo $this->get_field_name('featured_image_remover_button'); ?>" id="<?php echo $this->get_field_id('featured_image_remover_button'); ?>" value="<?php _e( 'Remove Image', 'organic-widgets-pro' ); ?>" onclick="organicWidgetFeaturedImage.remover( '<?php echo $this->id; ?>', '<?php echo $this->id_prefix; ?>', 'featured_image_remover_button' ); return false;" <?php if ( $featured_image_id < 1 ) { echo( 'style="display:none;"' ); } ?>/>
					<div class="organic-widgets-widget-image-preview" id="<?php echo $this->get_field_id('featured_image_preview'); ?>">
						<?php echo $this->get_featured_image_html($instance); ?>
					</div>
					<input type="hidden" id="<?php echo $this->get_field_id( 'featured_image_id' ); ?>" name="<?php echo $this->get_field_name( 'featured_image_id' ); ?>" value="<?php echo absint( $featured_image_id ); ?>" />
					<input type="hidden" id="<?php echo $this->get_field_id( 'featured_image' ); ?>" name="<?php echo $this->get_field_name( 'featured_image' ); ?>" value="<?php echo $featured_image; ?>" />
				</div>
			</p>

			<p>
				<label for="<?php echo $this->get_field_id( 'featured_image_size' ); ?>"><?php _e( 'Profile Image Size:', 'organic-widgets-pro' ); ?></label> <output id="rangevalue<?php echo absint( preg_replace( '/[^0-9,.]/', '', $this->id ) ); ?>" for="<?php echo $this->get_field_id( 'featured_image_size' ); ?>"><?php if ( ! empty( $instance['featured_image_size'] ) ) { echo $instance['featured_image_size']; } else { echo '100'; } ?></output>%
				<input class="widefat organic-widgets-input-range" type="range" min="10" max="100" onchange="rangevalue<?php echo absint( preg_replace( '/[^0-9,.]/', '', $this->id ) ); ?>.value=value;" oninput="rangevalue<?php echo absint( preg_replace( '/[^0-9,.]/', '', $this->id ) ); ?>.value=value;" id="<?php echo $this->get_field_id( 'featured_image_size' ); ?>" name="<?php echo $this->get_field_name( 'featured_image_size' ); ?>"
				value="<?php if ( ! empty( $instance['featured_image_size'] ) ) { echo $instance['featured_image_size']; } else { echo '100'; } ?>" />
			</p>

			<p>
				<label for="<?php echo $this->get_field_id( 'subtitle' ); ?>"><?php _e('Subtitle:', 'organic-widgets-pro') ?></label>
				<input class="widefat" type="text" id="<?php echo $this->get_field_id( 'subtitle' ); ?>" name="<?php echo $this->get_field_name( 'subtitle' ); ?>" value="<?php if ( $subtitle ) echo $subtitle; ?>" />
			</p>

			<br />

			<?php $this->section_font_input_markup( $instance, $this->font_options ); ?>

			<?php $this->section_layout_input_markup( $instance, $this->layout_options ); ?>

			<?php $this->section_display_input_markup( $instance, $this->display_options ); ?>

			<?php $this->section_background_input_markup( $instance, $this->bg_options ); ?>

			<br />

			<?php $this->repeatable_form_item_inputs_markup( $repeatable_array, 'Social Links' ); ?>

			<br />

			<p class="organic-widgets-input">
				<label for="<?php echo $this->get_field_id( 'widget_custom_class' ); ?>"><?php _e( 'Custom Widget Class', 'organic-widgets-pro' ); ?></label>
				<input class="widefat" type="text" id="<?php echo $this->get_field_id( 'widget_custom_class' ); ?>" name="<?php echo $this->get_field_name( 'widget_custom_class' ); ?>" value="<?php if ( ! empty( $instance['widget_custom_class'] ) ) echo $instance['widget_custom_class']; ?>" />
			</p>

			<p class="organic-widgets-input">
				<label for="<?php echo $this->get_field_id( 'widget_custom_anchor' ); ?>"><?php _e( 'Custom Widget Anchor', 'organic-widgets-pro' ); ?></label>
				<input class="widefat" type="text" id="<?php echo $this->get_field_id( 'widget_custom_anchor' ); ?>" name="<?php echo $this->get_field_name( 'widget_custom_anchor' ); ?>" value="<?php if ( ! empty( $instance['widget_custom_anchor'] ) ) echo $instance['widget_custom_anchor']; ?>" />
			</p>

		</div>

		<?php

	}

	/**
	 * Render the featured image html output.
	 *
	 * @since 1.0.0
	 *
	 * @param array $instance Widget instance.
	 * @return string image html
	 */
	protected function get_featured_image_html( $instance ) {

		if ( isset( $instance['featured_image_id'] ) ) {
			$image_id = $instance['featured_image_id'];
		} else {
			$image_id = 0;
		}

		// If there is an featured_image, use it to render the image. Eventually we should kill this and simply rely on featured_image_ids.
		if ( (int) $image_id > 0 ) {
			$size      = 'organic-widgets-featured-large';
			$img_array = wp_get_attachment_image( $image_id, 'full', false );
			if ( is_array( $img_array ) ) {
				$output = '<img src="' . $img_array[0] . '" />';
			} else {
				$output = $img_array;
			}
		} else {
			$output = '';
		}

		return $output;

	}

	/**
	 * Ouput HTML for a Repeatable Social Link Form Item
	 *
	 * @access protected
	 */
	protected function echo_repeatable_form_item( $id = 'template', $order = 'template', $repeatable = false ) {

		if ( 'template' === $id || 'template' === $order ) {
			$template = true;
			$id       = '';
			$order    = '';
		} else {
			$id       = (int) $id;
			$template = false;
		}
		?>

		<div class="<?php if ( $template ) { echo 'organic-widgets-repeatable-form-item-template'; } else { echo 'organic-widgets-repeatable-form-item'; } ?>" data-feature-id="<?php echo $id; ?>" data-order="<?php echo $order; ?>">

			<div class="organic-widgets-repeatable-form-item-title-bar">
				<?php _e( 'Social Link:', 'organic-widgets-pro' ) ?>
				<span class="organic-widgets-repeatable-item-number">
					<?php
					if ( is_numeric( $order ) ) {
						echo $order + 1;
					}
					?>
				</span>
			</div>

			<div class="organic-widgets-repeatable-form-item-fields-wrapper">

				<p>
					<label style="display:none;"><?php _e( 'Social Link:', 'organic-widgets-pro' ) ?></label>
					<input class="widefat organic-widgets-feature-list-link-url-input organic-widgets-repeatable-form-item-input" data-input-name="link_url" data-activator="true" type="text" value="<?php if ( $repeatable && array_key_exists( 'link_url', $repeatable ) ) { if ( is_email( $repeatable['link_url'] ) ) { echo esc_html( $repeatable['link_url'] ); } else { echo esc_url( $repeatable['link_url'] ); } } ?>" />
				</p>

				<div class="organic-widgets-clear"></div>

			</div>

			<?php $this->echo_repeatable_form_item_actions(); ?>

		</div>

		<?php
	}

	/**
	 * Render form template scripts.
	 *
	 * @access public
	 */
	public function render_control_template_scripts() {

		?>
		<script type="text/html" id="tmpl-widget-organic_widgets_profile-control-fields">

			<# var elementIdPrefix = 'el' + String( Math.random() ).replace( /\D/g, '' ) + '_' #>

			<p>
				<label for="{{ elementIdPrefix }}title"><?php esc_html_e( 'Title:' ); ?></label>
				<input id="{{ elementIdPrefix }}title" type="text" class="widefat title">
			</p>
			<p>
				<label for="{{ elementIdPrefix }}text" class="screen-reader-text"><?php esc_html_e( 'Content:' ); ?></label>
				<textarea id="{{ elementIdPrefix }}text" class="widefat text" style="height: 200px" rows="16" cols="20"></textarea>
			</p>
		</script>
		<?php
	}

	/**
	 * Sanitize widget form values as they are saved.
	 *
	 * @see WP_Widget::update()
	 *
	 * @param array $new_instance Values just sent to be saved.
	 * @param array $old_instance Previously saved values from database.
	 *
	 * @return array Updated safe values to be saved.
	 */
	public function update( $new_instance, $old_instance ) {

		$instance = $old_instance;

		/*--- Text/Title ----*/
		if ( ! isset( $newinstance['filter'] ) ) {
			$instance['filter'] = false;
		}
		if ( ! isset( $newinstance['visual'] ) ) {
			$instance['visual'] = null;
		}
		// Upgrade 4.8.0 format.
		if ( isset( $old_instance['filter'] ) && 'content' === $old_instance['filter'] ) {
			$instance['visual'] = true;
		}
		if ( 'content' === $new_instance['filter'] ) {
			$instance['visual'] = true;
		}
		if ( isset( $new_instance['visual'] ) ) {
			$instance['visual'] = ! empty( $new_instance['visual'] );
		}
		// Filter is always true in visual mode.
		if ( ! empty( $instance['visual'] ) ) {
			$instance['filter'] = true;
		}
		if ( current_user_can( 'unfiltered_html' ) ) {
			$instance['title'] = $new_instance['title'];
			$instance['text']  = $new_instance['text'];
		} else {
			$instance['title'] = wp_kses_post( $new_instance['title'] );
			$instance['text']  = wp_kses_post( $new_instance['text'] );
		}
		/*--- END Text/Title ----*/

		/*--- Unique Options ----*/
		if ( ! isset( $old_instance['created'] ) ) {
			$instance['created'] = time();
		}
		if ( isset( $new_instance['featured_image_id'] ) ) {
			$instance['featured_image_id'] = wp_strip_all_tags( $new_instance['featured_image_id'] );
		}
		if ( isset( $new_instance['featured_image'] ) ) {
			$instance['featured_image'] = wp_strip_all_tags( $new_instance['featured_image'] );
		}
		if ( isset( $new_instance['featured_image_size'] ) ) {
			$instance['featured_image_size'] = wp_strip_all_tags( $new_instance['featured_image_size'] );
		}
		if ( isset( $new_instance['subtitle'] ) ) {
			$instance['subtitle'] = wp_strip_all_tags( $new_instance['subtitle'] );
		}
		if ( isset( $new_instance['repeatable_array'] ) ) {
			$instance['repeatable_array'] = $new_instance['repeatable_array'];
		}
		/*--- END Unique Options ----*/

		/*--- Background ----*/
		if ( isset( $new_instance['bg_image_id'] ) ) {
			$instance['bg_image_id'] = wp_strip_all_tags( $new_instance['bg_image_id'] );
		}
		if ( isset( $new_instance['bg_image'] ) ) {
			$instance['bg_image'] = wp_strip_all_tags( $new_instance['bg_image'] );
		}
		if ( isset( $new_instance['bg_image_fixed'] ) ) {
			$instance['bg_image_fixed'] = true;
		} else {
			$instance['bg_image_fixed'] = false;
		}
		if ( isset( $new_instance['bg_image_repeat'] ) ) {
			$instance['bg_image_repeat'] = true;
		} else {
			$instance['bg_image_repeat'] = false;
		}
		if ( isset( $new_instance['bg_color'] ) && $this->check_hex_color( $new_instance['bg_color'] ) ) {
			$instance['bg_color'] = wp_strip_all_tags( $new_instance['bg_color'] );
		} else {
			$instance['bg_color'] = false;
		}
		/*--- END Background ----*/

		/*--- Font Options ----*/
		if ( isset( $new_instance['title_text_heading'] ) ) {
			$instance['title_text_heading'] = wp_strip_all_tags( $new_instance['title_text_heading'] );
		}
		if ( isset( $new_instance['title_text_color'] ) ) {
			$instance['title_text_color'] = wp_strip_all_tags( $new_instance['title_text_color'] );
		}
		if ( isset( $new_instance['title_font_weight'] ) ) {
			$instance['title_font_weight'] = wp_strip_all_tags( $new_instance['title_font_weight'] );
		}
		if ( isset( $new_instance['title_font_size'] ) ) {
			$instance['title_font_size'] = wp_strip_all_tags( $new_instance['title_font_size'] );
		}
		if ( isset( $new_instance['title_letter_spacing'] ) ) {
			$instance['title_letter_spacing'] = wp_strip_all_tags( $new_instance['title_letter_spacing'] );
		}
		if ( isset( $new_instance['title_font_family'] ) ) {
			$instance['title_font_family'] = wp_strip_all_tags( $new_instance['title_font_family'] );
		}
		if ( isset( $new_instance['body_font_family'] ) ) {
			$instance['body_font_family'] = wp_strip_all_tags( $new_instance['body_font_family'] );
		}
		if ( isset( $new_instance['text_align'] ) ) {
			$instance['text_align'] = wp_strip_all_tags( $new_instance['text_align'] );
		}
		/*--- END Font Options ----*/

		/*--- Layout ----*/
		if ( isset( $new_instance['orientation'] ) ) {
			$instance['orientation'] = wp_strip_all_tags( $new_instance['orientation'] );
		}
		if ( isset( $new_instance['hide_content_bg'] ) ) {
			$instance['hide_content_bg'] = true;
		} else {
			$instance['hide_content_bg'] = false;
		}
		if ( isset( $new_instance['widget_padding_top'] ) ) {
			$instance['widget_padding_top'] = wp_strip_all_tags( $new_instance['widget_padding_top'] );
		}
		if ( isset( $new_instance['widget_padding_bottom'] ) ) {
			$instance['widget_padding_bottom'] = wp_strip_all_tags( $new_instance['widget_padding_bottom'] );
		}
		if ( isset( $new_instance['widget_custom_height'] ) ) {
			$instance['widget_custom_height'] = wp_strip_all_tags( $new_instance['widget_custom_height'] );
		}
		if ( isset( $new_instance['widget_custom_width'] ) ) {
			$instance['widget_custom_width'] = wp_strip_all_tags( $new_instance['widget_custom_width'] );
		}
		if ( isset( $new_instance['widget_custom_class'] ) ) {
			$instance['widget_custom_class'] = wp_strip_all_tags( $new_instance['widget_custom_class'] );
		}
		if ( isset( $new_instance['widget_custom_anchor'] ) ) {
			$instance['widget_custom_anchor'] = wp_strip_all_tags( $new_instance['widget_custom_anchor'] );
		}
		/*--- END Layout ----*/

		return $instance;

	}

	/**
	 * Enqueue all the javascript.
	 */
	public function admin_setup() {

		// Text Editor.
		wp_enqueue_editor();
		wp_enqueue_script( 'organic-widgets-profile-widgets-text-title', plugin_dir_url( __FILE__ ) . 'js/profile-widgets.js', array( 'jquery', 'wp-embed', 'underscore' ), '1.0', true );
		wp_localize_script( 'organic-widgets-profile-widgets-text-title', 'OrganicProfileWidget', array(
			'id_base' => $this->id_base,
		) );
		wp_add_inline_script( 'organic-widgets-profile-widgets-text-title', 'wp.organicProfileWidget.init();', 'after' );

		if ( ! wp_script_is( 'organic-widgets-module-groupable-widgets' ) && is_customize_preview() ) {
			wp_enqueue_script( 'organic-widgets-module-groupable-widgets', ORGANIC_WIDGETS_PRO_ADMIN_JS_DIR . 'organic-widgets-module-groupable-widgets.js', array( 'jquery' ), '1.0', true );
			wp_localize_script( 'organic-widgets-module-groupable-widgets', 'GroupableWidgets', array(
				'active_pane' => false,
				'widgets'     => array(),
			) );
		}

		wp_enqueue_media();

		wp_enqueue_style( 'wp-color-picker' );
		wp_enqueue_script( 'wp-color-picker' );
		wp_enqueue_script( 'organic-widgets-module-color-picker', ORGANIC_WIDGETS_PRO_ADMIN_JS_DIR . 'organic-widgets-module-color-picker.js', array( 'jquery', 'wp-color-picker' ) );

		wp_enqueue_script( 'organic-widgets-module-image-background', ORGANIC_WIDGETS_PRO_ADMIN_JS_DIR . 'organic-widgets-module-image-background.js', array( 'jquery', 'media-upload', 'media-views', 'wp-color-picker' ) );
		wp_localize_script( 'organic-widgets-module-image-background', 'OrganicWidgetBG', array(
			'frame_title'  => __( 'Select an Image', 'organic-widgets-pro' ),
			'button_title' => __( 'Insert Into Widget', 'organic-widgets-pro' ),
		) );

	}

	/**
	 * Enqueue public javascript.
	 */
	public function public_scripts() {

		wp_enqueue_style( 'organic-widgets-fontawesome', ORGANIC_WIDGETS_PRO_BASE_DIR . 'public/css/font-awesome.css' );
		if ( ! wp_script_is('organic-widgets-backgroundimagebrightness-js') ) { wp_enqueue_script( 'organic-widgets-backgroundimagebrightness-js', ORGANIC_WIDGETS_PRO_BASE_DIR . 'public/js/jquery.backgroundbrightness.js', array( 'jquery' ) ); }

	}

} // class Organic_Widgets_Pro_Profile_Widget
