From 4ee94204ab2b83932b179ed42beb4ec903a2e6ee Mon Sep 17 00:00:00 2001 From: jonfalcon Date: Thu, 17 Mar 2016 15:09:49 -0700 Subject: [PATCH] Add search widget --- assets/css/um-styles.css | 15 +++++++ assets/js/um-scripts.js | 4 ++ core/um-filters-members.php | 14 ++++-- core/um-short-functions.php | 43 +++++++++++++++++++ core/um-shortcodes.php | 17 ++++++++ core/widgets/um-search-widget.php | 71 +++++++++++++++++++++++++++++++ templates/searchform.php | 8 ++++ um-init.php | 12 +++++- 8 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 core/widgets/um-search-widget.php create mode 100644 templates/searchform.php diff --git a/assets/css/um-styles.css b/assets/css/um-styles.css index a0826f6b..b2aa1265 100644 --- a/assets/css/um-styles.css +++ b/assets/css/um-styles.css @@ -765,3 +765,18 @@ small.um-max-filesize span{ background-repeat: no-repeat; background-size: 24px 24px; } + +.um-search-area { + position: relative; + max-width: 300px; +} + +.um-search-area .um-search-field { + width: 100%; +} + +.um-search-area .um-search-icon { + position: absolute; + top: 7px; + right: 10px; +} diff --git a/assets/js/um-scripts.js b/assets/js/um-scripts.js index 39b8593d..0bf86eb4 100644 --- a/assets/js/um-scripts.js +++ b/assets/js/um-scripts.js @@ -288,4 +288,8 @@ jQuery(document).ready(function() { return false; }); + jQuery(document).on('click', '#um-search-button', function() { + jQuery(this).parents('form').submit(); + }); + }); diff --git a/core/um-filters-members.php b/core/um-filters-members.php index 6e00ffc6..3ea22aa0 100644 --- a/core/um-filters-members.php +++ b/core/um-filters-members.php @@ -16,14 +16,14 @@ extract( $args ); $query = $ultimatemember->permalinks->get_query_array(); - + foreach( $ultimatemember->members->core_search_fields as $key ) { - + if ( isset( $query[$key] ) && ! empty( $query[$key] ) ) { $query_args['search'] = '*' . trim($query[$key]) . '*'; } } - + return $query_args; } @@ -66,6 +66,12 @@ $query = $ultimatemember->permalinks->get_query_array(); + // if searching + if( isset( $query['search'] ) ) { + $query_args['search'] = '*' . um_filter_search( $query['search'] ) . '*'; + unset( $query['search'] ); + } + if ( $query && is_array( $query ) ) { foreach( $query as $field => $value ) { @@ -147,7 +153,7 @@ 'value' => '', 'compare' => '!=' ) - + ); } diff --git a/core/um-short-functions.php b/core/um-short-functions.php index 087aeaa1..13f317e8 100644 --- a/core/um-short-functions.php +++ b/core/um-short-functions.php @@ -1524,3 +1524,46 @@ function um_fetch_user( $user_id ) { return $value; } + + /** + * Filters the search query. + * + * @param string $search + * @return string + */ + function um_filter_search($search) { + $search = trim( strip_tags( $search ) ); + $search = preg_replace('/[^a-z \.\@\_\-]+/i', '', $search); + + return $search; + } + + /** + * Returns the user search query + * @return string + */ + function um_get_search_query() { + global $ultimatemember; + + $query = $ultimatemember->permalinks->get_query_array(); + $search = isset( $query['search'] ) ? $query['search'] : ''; + + return um_filter_search($search); + } + + /** + * Returns the ultimate member search form + * @return string + */ + function um_get_search_form() { + return do_shortcode( '[ultimatemember_searchform]' ); + } + + /** + * Display the search form. + * + * @return string + */ + function um_search_form() { + echo um_get_search_form(); + } diff --git a/core/um-shortcodes.php b/core/um-shortcodes.php index edfcf2c8..2d16b30c 100644 --- a/core/um-shortcodes.php +++ b/core/um-shortcodes.php @@ -13,6 +13,7 @@ class UM_Shortcodes { add_shortcode('um_loggedin', array(&$this, 'um_loggedin')); add_shortcode('um_loggedout', array(&$this, 'um_loggedout')); add_shortcode('um_show_content', array(&$this, 'um_shortcode_show_content_for_role') ); + add_shortcode('ultimatemember_searchform', array(&$this, 'ultimatemember_searchform') ); add_filter('body_class', array(&$this, 'body_class'), 0); @@ -570,4 +571,20 @@ class UM_Shortcodes { return ''; } + public function ultimatemember_searchform($args = array(), $content = "") { + // turn off buffer + ob_start(); + + // load template + $this->load_template( 'searchform' ); + + // get the buffer + $template = ob_get_contents(); + + // clear the buffer + ob_end_clean(); + + return $template; + } + } diff --git a/core/widgets/um-search-widget.php b/core/widgets/um-search-widget.php new file mode 100644 index 00000000..f81a61c4 --- /dev/null +++ b/core/widgets/um-search-widget.php @@ -0,0 +1,71 @@ + __( 'Shows users they follow in a widget.', 'ultimatemember' ), ) + ); + + } + + // Creating widget front-end + public function widget( $args, $instance ) { + $title = apply_filters( 'widget_title', $instance['title'] ); + + // before and after widget arguments are defined by themes + echo $args['before_widget']; + if ( ! empty( $title ) ) { + echo $args['before_title'] . $title . $args['after_title']; + } + + // display the search form + um_search_form(); + + echo $args['after_widget']; + } + + // Widget Backend + public function form( $instance ) { + global $ultimatemember; + + if ( isset( $instance[ 'title' ] ) ) { + $title = $instance[ 'title' ]; + } else { + $title = __( 'Search Users', 'ultimatemember' ); + } + + if ( isset( $instance[ 'max' ] ) ) { + $max = $instance[ 'max' ]; + } else { + $max = 11; + } + + // Widget admin form + ?> + +

+ + +

+ + "> + +
+ + + +
+ diff --git a/um-init.php b/um-init.php index 30be66f3..5ad179ad 100644 --- a/um-init.php +++ b/um-init.php @@ -58,6 +58,12 @@ class UM_API { __('This add-on enables you to link gravatar photos to user accounts with their email address.', 'ultimatemember'), ); + // include widgets + require_once um_path . 'core/widgets/um-search-widget.php'; + + // init widgets + add_action( 'widgets_init', array(&$this, 'widgets_init' ) ); + } /*** @@ -198,6 +204,10 @@ class UM_API { } + function widgets_init() { + register_widget( 'um_search_widget' ); + } + } -$ultimatemember = new UM_API(); \ No newline at end of file +$ultimatemember = new UM_API();