48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/*
 | 
						|
 * Name: Autocomplete
 | 
						|
 * Author: Daku <admin@codeanimu.net>
 | 
						|
 * Description: Adds autocomplete to search & tagging.
 | 
						|
 */
 | 
						|
 | 
						|
class AutoComplete extends Extension {
 | 
						|
	public function get_priority() {return 30;} // before Home
 | 
						|
 | 
						|
	public function onPageRequest(PageRequestEvent $event) {
 | 
						|
		global $page, $database;
 | 
						|
 | 
						|
		if($event->page_matches("api/internal/autocomplete")) {
 | 
						|
			if(!isset($_GET["s"])) return;
 | 
						|
 | 
						|
			//$limit = 0;
 | 
						|
			$cache_key = "autocomplete-" . strtolower($_GET["s"]);
 | 
						|
			$limitSQL = "";
 | 
						|
			$SQLarr = array("search"=>$_GET["s"]."%");
 | 
						|
			if(isset($_GET["limit"]) && $_GET["limit"] !== 0){
 | 
						|
				$limitSQL = "LIMIT :limit";
 | 
						|
				$SQLarr['limit'] = $_GET["limit"];
 | 
						|
				$cache_key .= "-" . $_GET["limit"];
 | 
						|
			}
 | 
						|
 | 
						|
			$res = $database->cache->get($cache_key);
 | 
						|
			if(!$res) {
 | 
						|
				$res = $database->get_pairs($database->scoreql_to_sql("
 | 
						|
					SELECT tag, count
 | 
						|
					FROM tags
 | 
						|
					WHERE SCORE_STRNORM(tag) LIKE SCORE_STRNORM(:search)
 | 
						|
					AND count > 0
 | 
						|
					ORDER BY count DESC
 | 
						|
					$limitSQL"), $SQLarr
 | 
						|
				);
 | 
						|
				$database->cache->set($cache_key, $res, 600);
 | 
						|
			}
 | 
						|
 | 
						|
			$page->set_mode("data");
 | 
						|
			$page->set_type("application/json");
 | 
						|
			$page->set_data(json_encode($res));
 | 
						|
		}
 | 
						|
 | 
						|
		$this->theme->build_autocomplete($page);
 | 
						|
	}
 | 
						|
}
 |