102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Zotlabs\Module;
 | |
| 
 | |
| // Autocomplete for saved searches. Should probably be put in the same place as the other autocompletes
 | |
| 
 | |
| class Search_ac extends \Zotlabs\Web\Controller {
 | |
| 
 | |
| 	function init(){
 | |
| 		if(!local_channel())
 | |
| 			killme();
 | |
| 	
 | |
| 	
 | |
| 		$start = (x($_REQUEST,'start')?$_REQUEST['start']:0);
 | |
| 		$count = (x($_REQUEST,'count')?$_REQUEST['count']:100);
 | |
| 		$search = (x($_REQUEST,'search')?$_REQUEST['search']:"");
 | |
| 	
 | |
| 		if(x($_REQUEST,'query') && strlen($_REQUEST['query'])) {
 | |
| 			$search = $_REQUEST['query'];
 | |
| 		}
 | |
| 	
 | |
| 		$do_people = true;
 | |
| 		$do_tags = true;
 | |
| 		
 | |
| 		if(substr($search,0,1) === '@') {
 | |
| 			$do_tags = false;
 | |
| 			$search = substr($search,1);
 | |
| 		}
 | |
| 
 | |
| 		if(substr($search,0,1) === '#') {
 | |
| 			$do_people = false;
 | |
| 			$search = substr($search,1);
 | |
| 		}
 | |
| 
 | |
| 		// Priority to people searches
 | |
| 	
 | |
| 		if ($search) {
 | |
| 			$people_sql_extra = protect_sprintf(" AND xchan_name LIKE '%" . dbesc($search) . "%' ");
 | |
| 			$tag_sql_extra = protect_sprintf(" AND term LIKE '%" . dbesc($search) . "%' ");
 | |
| 		}
 | |
| 
 | |
| 		$results = [];
 | |
| 	
 | |
| 		if($do_people) {	
 | |
| 			$r = q("SELECT abook_id, xchan_name, xchan_photo_s, xchan_url, xchan_addr FROM abook 
 | |
| 				left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d 
 | |
| 				$people_sql_extra
 | |
| 				ORDER BY xchan_name ASC ",
 | |
| 				intval(local_channel())
 | |
| 			);
 | |
| 	
 | |
| 			if($r) {
 | |
| 				foreach($r as $g) {
 | |
| 					$results[] = [
 | |
| 						'photo'    => $g['xchan_photo_s'],
 | |
| 						'name'     => '@' . $g['xchan_name'],
 | |
| 						'id'       => $g['abook_id'],
 | |
| 						'link'     => $g['xchan_url'],
 | |
| 						'label'    => '',
 | |
| 						'nick'     => '',
 | |
| 					];
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if($do_tags) {	
 | |
| 			$r = q("select distinct term, tid, url from term 
 | |
| 				where ttype in ( %d, %d ) $tag_sql_extra group by term order by term asc",
 | |
| 				intval(TERM_HASHTAG),
 | |
| 				intval(TERM_COMMUNITYTAG)
 | |
| 			);
 | |
| 	
 | |
| 			if($r) {
 | |
| 				foreach($r as $g) {
 | |
| 					$results[] = [
 | |
| 						'photo'    => z_root() . '/images/hashtag.png',
 | |
| 						'name'     => '#' . $g['term'],
 | |
| 						'id'       => $g['tid'],
 | |
| 						'link'     => $g['url'],
 | |
| 						'label'    => '',
 | |
| 						'nick'     => '',
 | |
| 					];
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	
 | |
| 		header("content-type: application/json");
 | |
| 		$o = array(
 | |
| 			'start' => $start,
 | |
| 			'count'	=> $count,
 | |
| 			'items'	=> $results,
 | |
| 		);
 | |
| 		echo json_encode($o);
 | |
| 	
 | |
| 		logger('search_ac: ' . print_r($x,true),LOGGER_DATA,LOG_INFO);
 | |
| 	
 | |
| 		killme();
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| }
 |