id = $post->ID;
$this->name = $post->post_name;
$this->title = $post->post_title;
$this->locale = get_post_meta( $post->ID, '_is_locale', true );
$properties = $this->get_properties();
foreach ( $properties as $key => $value ) {
if ( metadata_exists( 'post', $post->ID, $key ) ) {
$properties[$key] = get_post_meta( $post->ID, $key, true );
}
}
$this->properties = $properties;
}
}
public static function get_instance( $post ) {
$post = get_post( $post );
if ( ! $post || self::post_type != get_post_type( $post ) ) {
return false;
}
return self::$current = new self( $post );
}
/**
* Load IS Search Form from request.
*
* @since 5.0
*
* @param int $is_id Optional. The search form ID to load.
* @return self The retrieved object.
*/
public static function load_from_request() {
$search_form = null;
$is_id = null;
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
$is_id = isset( $_POST['id'] ) ? absint( $_POST['id'] ) : null;
} else {
$is_id = isset($_GET[ 'id' ]) ? absint( $_GET[ 'id' ] ):null;
}
$is_settings = get_option( 'is_settings', array() );
if ( empty( $is_id ) && empty( $is_settings['default_search'] ) ) {
$page = get_page_by_path( 'default-search-form', OBJECT, 'is_search_form' );
if ( ! empty( $page ) ) {
$is_id = $page->ID;
}
}
if ( ! empty( $is_id ) && is_numeric( $is_id ) ) {
$search_form = self::get_instance( $is_id );
}
return $search_form;
}
public static function count() {
return self::$found_items;
}
public static function get_current() {
return self::$current;
}
public static function register_post_type() {
register_post_type( self::post_type, array(
'labels' => array(
'name' => __( 'Search Forms', 'add-search-to-menu' ),
'singular_name' => __( 'Search Form', 'add-search-to-menu' ),
),
'rewrite' => false,
'query_var' => false,
) );
}
public static function find( $args = '' ) {
$defaults = array(
'post_status' => 'any',
'posts_per_page' => -1,
'offset' => 0,
'orderby' => 'ID',
'order' => 'ASC',
'suppress_filters' => true,
);
$args = wp_parse_args( $args, $defaults );
$args['post_type'] = self::post_type;
$q = new WP_Query();
$posts = $q->query( $args );
self::$found_items = $q->found_posts;
$objs = array();
foreach ( (array) $posts as $post ) {
$objs[] = new self( $post );
}
return $objs;
}
public static function get_template( $args = '' ) {
global $l10n;
$defaults = array( 'locale' => null, 'title' => '' );
$args = wp_parse_args( $args, $defaults );
$locale = $args['locale'];
$title = $args['title'];
if ( $locale ) {
$mo_orig = $l10n['add-search-to-menu'];
$is_i18n = IS_I18n::getInstance();
$is_i18n->load_is_textdomain( $locale );
}
self::$current = $search_form = new self;
$search_form->title =
( $title ? $title : __( 'Untitled', 'add-search-to-menu' ) );
$search_form->locale = ( $locale ? $locale : get_locale() );
$properties = $search_form->get_properties();
$search_form->properties = $properties;
$search_form = apply_filters( 'is_search_form_default_pack',
$search_form, $args );
if ( isset( $mo_orig ) ) {
$l10n['add-search-to-menu'] = $mo_orig;
}
return $search_form;
}
public function __get( $name ) {
$message = '%1$s '.__( 'property of a', 'add-search-to-menu' ).' IS_Search_Form '.__( 'object is', 'add-search-to-menu' ).' '.__( 'no longer accessible', 'add-search-to-menu' ).'. '.__( 'Use', 'add-search-to-menu' ).' %2$s '.__('method instead.', 'add-search-to-menu' );
if ( 'id' == $name ) {
if ( WP_DEBUG ) {
trigger_error( sprintf( $message, 'id', 'id()' ) );
}
return $this->id;
} elseif ( 'title' == $name ) {
if ( WP_DEBUG ) {
trigger_error( sprintf( $message, 'title', 'title()' ) );
}
return $this->title;
} elseif ( $prop = $this->prop( $name ) ) {
if ( WP_DEBUG ) {
trigger_error(
sprintf( $message, $name, 'prop(\'' . $name . '\')' ) );
}
return $prop;
}
}
public function initial() {
return empty( $this->id );
}
public function prop( $name ) {
$props = $this->get_properties();
return isset( $props[$name] ) ? $props[$name] : null;
}
/**
* Get IS Search Form option.
*
* @since 5.0
* @param string $group The option group.
* @param string $name The option name.
* @param mixed $default The default value.
* @return mixed The option value.
*/
public function group_prop( $group, $name, $default = null ) {
$props = $this->get_properties();
return isset( $props[$group][$name] ) ? $props[$group][$name] : $default;
}
public function get_properties() {
$properties = (array) $this->properties;
$properties = wp_parse_args( $properties, array(
'_is_includes' => '',
'_is_excludes' => '',
'_is_settings' => '',
'_is_ajax' => '',
'_is_customize' => '',
) );
$properties = (array) apply_filters( 'is_search_form_properties',
$properties, $this );
return $properties;
}
public function set_properties( $properties ) {
$defaults = $this->get_properties();
$properties = wp_parse_args( $properties, $defaults );
$properties = array_intersect_key( $properties, $defaults );
$this->properties = $properties;
}
public function id() {
return $this->id;
}
public function name() {
return $this->name;
}
public function title() {
return $this->title;
}
public function set_title( $title ) {
$title = strip_tags( $title );
$title = trim( $title );
if ( '' === $title ) {
$title = __( 'Untitled', 'add-search-to-menu' );
}
$this->title = $title;
}
public function locale() {
if ( $this->is_valid_locale( $this->locale ) ) {
return $this->locale;
} else {
return '';
}
}
public function set_locale( $locale ) {
$locale = trim( $locale );
if ( $this->is_valid_locale( $locale ) ) {
$this->locale = $locale;
} else {
$this->locale = 'en_US';
}
}
/**
* Verifies if index search engine is selected.
*
* @since 5.0
* @return bool True if it is index search engine.
*/
public function is_index_search() {
$index_search = false;
$engine = $this->group_prop( '_is_settings', 'search_engine', self::S_ENG_WP );
if ( self::S_ENG_INDEX == $engine ) {
$index_search = true;
}
return $index_search;
}
/* Generating Form HTML */
public function form_html( $args = '', $display_id = '' ) {
do_action( 'pre_is_get_search_form' );
if ( ! isset( $args['id'] ) ) {
return '';
}
$_ajax = '';
$_customize = '';
$_includes = '';
$_settings = '';
$result = '';
$search_form = false;
$enabled_customization = false;
$is_site_lang = isset( $_GET['lang'] ) ? sanitize_text_field($_GET['lang']) : false;
$is_settings = get_option( 'is_settings', array() );
$min = ( defined( 'IS_DEBUG' ) && IS_DEBUG ) ? '' : '.min';
$is_site_lang = isset( $_GET['lang'] ) ? sanitize_text_field( $_GET['lang'] ) : false;
if ( $args['id'] ) {
$search_form = IS_Search_Form::get_instance( $args['id'] );
if ( ! $search_form ) {
return __( 'Invalid search form.', 'add-search-to-menu' );
}
$_ajax = $this->prop('_is_ajax');
$_customize = $this->prop('_is_customize');
$_includes = $this->prop( '_is_includes' );
$_settings = $this->prop('_is_settings');
$enabled_customization = ( isset( $_customize['enable_customize'] ) || 'default-search-form' != $search_form->name() || isset( $_ajax['enable_ajax'] ) ) ? true : false;
if ( ! isset( $is_settings['not_load_files']['css'] ) && isset( $_ajax['enable_ajax'] ) ) {
wp_enqueue_style( 'ivory-ajax-search-styles', plugins_url( '/public/css/ivory-ajax-search'.$min.'.css', IS_PLUGIN_FILE ), array(), IS_VERSION );
}
if ( isset( $_settings['disable'] ) ) {
return '';
}
if ( isset( $_settings['demo'] ) && ! current_user_can( 'administrator' ) ) {
return '';
}
}
if ( ! $enabled_customization && $args['id'] ) {
remove_filter( 'get_search_form', array( IS_Admin_Public::getInstance(), 'get_search_form' ), 9999999 );
$result = get_search_form( false );
add_filter( 'get_search_form', array( IS_Admin_Public::getInstance(), 'get_search_form' ), 9999999 );
if ( 'n' !== $display_id ) {
$result = preg_replace('/<\/form>/', '', $result );
if ( ! isset( $_includes['post_type_url'] ) && isset( $_includes['post_type'] ) && count( $_includes['post_type'] ) < 2 ) {
$result = preg_replace('/<\/form>/', '', $result );
}
if ( $is_site_lang ) {
$result = preg_replace('/<\/form>/', '', $result );
}
}
$result = apply_filters( 'is_default_search_form', $result );
} else {
$view_search_result_class = ( isset( $_ajax['search_results'] ) && 'ajax_results' === $_ajax['search_results'] ) ? 'is-disable-submit ' : '';
$settings = get_option( 'is_search_' . $args['id'] );
$is_ajax_search = '';
$data_attrs = '';
$placeholder_text = __( 'Search here...', 'add-search-to-menu');
$search_btn_text = __( 'Search', 'add-search-to-menu');
$form_style = 'is-form-style-3';
if ( $enabled_customization ) {
$placeholder_text = isset( $settings['placeholder-text'] ) ? $settings['placeholder-text'] : $placeholder_text;
$search_btn_text = isset( $settings['search-btn-text'] ) ? $settings['search-btn-text'] : $search_btn_text;
$form_style = isset( $settings['form-style'] ) ? $settings['form-style'] : 'is-form-style-3';
}
if ( isset( $_ajax['enable_ajax'] ) ) {
$is_ajax_search = 'is-ajax-search';
$form_style = ( '' == $form_style ) ? 'is-form-style-3' : $form_style;
// Enqueue scripts.
wp_enqueue_script( 'ivory-ajax-search-scripts' );
if ( ! ivory_search_is_json_request() && isset( $_settings['highlight_terms'] ) ) {
wp_enqueue_script( 'is-highlight' );
if ( isset( $_settings['highlight_color'] ) && ! empty( $_settings['highlight_color'] ) && ! is_search() ) { ?>
';
$autocomplete = apply_filters( 'is_search_form_autocomplete', 'autocomplete=off' );
$is_form_id = ( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) ) ? sanitize_key( $_GET['id'] ) : false;
$search_val = ( $is_form_id && $is_form_id === $args['id'] ) ? get_search_query() : '';
$result .= '';
if ( 'is-form-style-3' === $form_style ) {
$result .= '';
} else if ( 'is-form-style-2' !== $form_style ) {
$result .= '';
}
if ( 'n' !== $display_id ) {
$result .= '';
}
if ( ! isset( $_includes['post_type_url'] ) && isset( $_includes['post_type'] ) && count( $_includes['post_type'] ) < 2 ) {
$result .= '';
}
if ( $is_site_lang ) {
$result .= '';
}
$result .= '';
$result = apply_filters( 'is_custom_search_form', $result );
}
if ( isset( $is_settings['easy_edit'] ) && is_user_logged_in() && current_user_can( 'administrator' ) ) {
$result .= '