forked from Public/pics
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/*****************************************************************************
 | 
						|
 * ProvideAutoSuggest.php
 | 
						|
 * Contains the autosuggest provider.
 | 
						|
 *
 | 
						|
 * Kabuki CMS (C) 2013-2015, Aaron van Geffen
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
class ProvideAutoSuggest extends JSONController
 | 
						|
{
 | 
						|
	public function __construct()
 | 
						|
	{
 | 
						|
		// Ensure we're logged in at this point.
 | 
						|
		if (!Registry::get('user')->isLoggedIn())
 | 
						|
			throw new NotAllowedException();
 | 
						|
 | 
						|
		if (!isset($_REQUEST['type']))
 | 
						|
			throw new UnexpectedValueException('Unsupported autosuggest request.');
 | 
						|
 | 
						|
		if ($_REQUEST['type'] === 'tags' && isset($_REQUEST['data']))
 | 
						|
			return $this->handleTagSearch();
 | 
						|
 | 
						|
		if ($_REQUEST['type'] === 'createtag' && isset($_REQUEST['tag']))
 | 
						|
			return $this->handleTagCreation();
 | 
						|
	}
 | 
						|
 | 
						|
	private function handleTagSearch()
 | 
						|
	{
 | 
						|
		{
 | 
						|
			$data = array_unique(explode(' ', urldecode($_REQUEST['data'])));
 | 
						|
			$data = array_filter($data, function($item) {
 | 
						|
				return strlen($item) >= 2;
 | 
						|
			});
 | 
						|
 | 
						|
			$this->payload = ['items' => []];
 | 
						|
 | 
						|
			// Nothing to look for?
 | 
						|
			if (count($data) === 0)
 | 
						|
				return;
 | 
						|
 | 
						|
			$results = Tag::matchPeople($data);
 | 
						|
			foreach ($results as $id_tag => $tag)
 | 
						|
				$this->payload['items'][] = [
 | 
						|
					'label' => $tag['tag'],
 | 
						|
					'id_tag' => $id_tag,
 | 
						|
					'url' => BASEURL . '/' . $tag['slug'] . '/',
 | 
						|
				];
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	private function handleTagCreation()
 | 
						|
	{
 | 
						|
		// It better not already exist!
 | 
						|
		if (Tag::exactMatch($_REQUEST['tag']))
 | 
						|
		{
 | 
						|
			$this->payload = ['error' => true, 'msg' => 'Tag already exists!'];
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$label = htmlspecialchars(trim($_REQUEST['tag']));
 | 
						|
		$slug = strtr($label, [' ' => '-']);
 | 
						|
		$tag = Tag::createNew([
 | 
						|
			'tag' => $label,
 | 
						|
			'kind' => 'Person',
 | 
						|
			'slug' => $slug,
 | 
						|
		]);
 | 
						|
 | 
						|
		// Did we succeed?
 | 
						|
		if (!$tag)
 | 
						|
		{
 | 
						|
			$this->payload = ['error' => true, 'msg' => 'Could not create tag.'];
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$this->payload = [
 | 
						|
			'success' => true,
 | 
						|
			'label' => $tag->tag,
 | 
						|
			'id_tag' => $tag->id_tag,
 | 
						|
		];
 | 
						|
	}
 | 
						|
}
 |