BP_Search::ajax_search()

Description

Source

File: bp-search/classes/class-bp-search.php

		public function ajax_search() {
			check_ajax_referer( 'bp_search_ajax', 'nonce' );

			if ( isset( $_POST["view"] ) && $_POST["view"] == "content" ) {

				$_GET["s"] = $_POST["s"];
				if ( ! empty( $_POST["subset"] ) ) {
					$_GET["subset"] = $_POST["subset"];
				}

				if ( ! empty( $_POST["list"] ) ) {
					$_GET["list"] = $_POST["list"];
				}

				$content = "";

				BP_Search::instance()->prepare_search_page();
				$content = bp_search_buffer_template_part( 'results-page-content', '', false );

				echo $content;

				die();
			}

			$args = array(
				'search_term'   => $_REQUEST['search_term'],
				//How many results should be displyed in autosuggest?
				//@todo: give a settings field for this value
				'ajax_per_page'      => $_REQUEST['per_page'],
				'count_total'   => true,
				'template_type' => 'ajax',
			);

			if ( isset( $_REQUEST['forum_search_term'] ) ) {
				$args['forum_search'] = true;
			}

			$this->do_search( $args );

			$search_results = array();
			if ( isset( $this->search_results['all']['items'] ) && ! empty( $this->search_results['all']['items'] ) ) {
				/* ++++++++++++++++++++++++++++++++++
				group items of same type together
				++++++++++++++++++++++++++++++++++ */
				$types = array();
				foreach ( $this->search_results['all']['items'] as $item_id => $item ) {
					$type = $item['type'];
					if ( empty( $types ) || ! in_array( $type, $types ) ) {
						$types[] = $type;
					}
				}

				$new_items = array();
				foreach ( $types as $type ) {
					$first_html_changed = false;
					foreach ( $this->search_results['all']['items'] as $item_id => $item ) {
						if ( $item['type'] != $type ) {
							continue;
						}

						//add group/type title in first one
						/*
						if( !$first_html_changed ){
							//this filter can be used to change display of 'posts' to 'Blog Posts' etc..
							$label = apply_filters( 'bp_search_label_search_type', $type );

							//$item['html'] = "<div class='results-group results-group-{$type}'><span class='results-group-title'>{$label}</span></div>" . $item['html'];
							$first_html_changed = true;
						}

						*/

						$new_items[ $item_id ] = $item;
					}
				}

				$this->search_results['all']['items'] = $new_items;

				/* _______________________________ */
				$url      = $this->search_page_search_url( false );

				if ( true === $this->search_args['forum_search'] ) {
					$url      = $url;
				} else {
					$url      = esc_url( add_query_arg( array( 'view' => 'content', 'no_frame' => '1', 'bp_search' => 1 ), $url ) );
				}

				$type_mem = "";
				foreach ( $this->search_results['all']['items'] as $item_id => $item ) {
					$new_row               = array( 'value' => $item['html'] );
					$type_label            = apply_filters( 'bp_search_label_search_type', $item['type'] );
					$new_row['type']       = $item['type'];
					$new_row['type_label'] = "";
					$new_row['value']      = $item['html'];
					if ( isset( $item['title'] ) ) {
						$new_row['label'] = $item['title'];
					}

//					if ( $type_mem != $new_row['type'] ) {
//						$type_mem              = $new_row['type'];
//						$cat_row               = $new_row;
//						$cat_row["type"]       = $item['type'];
//						$cat_row['type_label'] = $type_label;
//						$category_search_url   = esc_url( add_query_arg( array( 'subset' => $item['type'] ), $url ) );
//						$html                  = "<span><a href='" . esc_url( $category_search_url ) . "'>" . $type_label . "</a></span>";
//						$cat_row["value"]      = apply_filters( 'buddypress_gs_autocomplete_category', $html, $item['type'], $url, $type_label );
//						$search_results[]      = $cat_row;
//					}

					$search_results[] = $new_row;
				}

				// Show "View All" link
				if ( absint( $this->search_results['all']['total_match_count'] ) > absint( bp_search_get_form_option( 'bp_search_number_of_results', 5 ) ) ) {
					$all_results_row  = array(
						"value"      => "<div class='bp-search-ajax-item allresults'><a href='" . esc_url( $url ) . "'>" . __( 'View all', 'buddyboss' ) . "</a></div>",
						"type"       => 'view_all_type',
						"type_label" => ''
					);
					$search_results[] = $all_results_row;
				}
			} else {
				//@todo give a settings screen for this field
				$search_results[] = array(
					'value' => '<div class="bp-search-ajax-item noresult">' . sprintf( __( "Nothing found for '%s'", "buddyboss" ), stripslashes( $this->search_args['search_term'] ) ) . '</div>',
					'label' => $this->search_args['search_term']
				);
			}

			die( json_encode( $search_results ) );
		}

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.