<?php
namespace XF\AdminSearch;
use XF\App;
use XF\Mvc\Entity\AbstractCollection;
use XF\Mvc\Entity\Entity;
use XF\Template\Templater;
abstract class AbstractHandler
{
/**
* @var string
*/
protected $contentType;
/**
* @var App
*/
protected $app;
public function __construct($contentType, App $app)
{
$this->contentType = $contentType;
$this->app = $app;
}
abstract public function getDisplayOrder();
/**
* @param string $text
* @param integer $limit
* @param array $previousMatchIds
*
* @return AbstractCollection
*/
abstract public function search($text, $limit, array $previousMatchIds = []);
abstract public function getTemplateData(Entity $record);
public function getTypeName()
{
return \XF::phrase(\XF::app()->getContentTypePhraseName($this->contentType, true));
}
public function isSearchable()
{
return true;
}
public function getMaxTypeResults($defaultLimit)
{
return $defaultLimit;
}
public function getRelatedPhraseGroups()
{
return [];
}
public function getTemplateName()
{
return 'admin:quick_search_type';
}
public function renderType(array $results, Templater $templater)
{
$typeName = $this->getTypeName();
$template = $this->getTemplateName();
$filtered = [];
foreach ($results AS $key => $result)
{
$filtered[$key] = $this->getTemplateData($result);
}
return $templater->getTemplate($template, [
'typeName' => $typeName,
'results' => $filtered
]);
}
}