silverstripe-docsviewer/code/forms/DocumentationAdvancedSearchForm.php
2014-09-15 22:12:31 +12:00

74 lines
1.9 KiB
PHP

<?php
/**
* @package docsviewer
*/
class DocumentationAdvancedSearchForm extends Form {
public function __construct($controller) {
$entities = $controller->getManifest()->getEntities();
$versions = array();
foreach($entities as $entity) {
foreach($entity->getVersions() as $version) {
$versions[$version->getVersion()] = $version->getVersion();
}
}
// get a list of all the unique versions
$uniqueVersions = array_unique(
ArrayLib::flatten(array_values($versions))
);
asort($uniqueVersions);
$uniqueVersions = array_combine($uniqueVersions,$uniqueVersions);
$q = ($q = $controller->getSearchQuery()) ? $q->NoHTML() : "";
// klude to take an array of objects down to a simple map
$entities = new ArrayList($entities);
$entities = $entities->map('Folder', 'Title');
// if we haven't gone any search limit then we're searching everything
$searchedEntities = $controller->getSearchedEntities();
if(count($searchedEntities) < 1) {
$searchedEntities = $entities;
}
$searchedVersions = $controller->getSearchedVersions();
if(count($searchedVersions) < 1) {
$searchedVersions = $uniqueVersions;
}
$fields = new FieldList(
new TextField('Search', _t('DocumentationViewer.KEYWORDS', 'Keywords'), $q),
new CheckboxSetField('Entities', _t('DocumentationViewer.MODULES', 'Modules'), $entities, $searchedEntities),
new CheckboxSetField(
'Versions',
_t('DocumentationViewer.VERSIONS', 'Versions'),
$uniqueVersions, $searchedVersions
)
);
$actions = new FieldList(
new FormAction('results', _t('DocumentationViewer.SEARCH', 'Search'))
);
$required = new RequiredFields(array('Search'));
parent::__construct(
$controller,
'AdvancedSearchForm',
$fields,
$actions,
$required
);
$this->disableSecurityToken();
$this->setFormMethod('GET');
$this->setFormAction($controller->Link('search'));
}
}