mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
Merge pull request #87 from halkyon/advancedsearchform_removal
API CHANGE Removed AdvancedSearchForm, extend SearchForm for custom adva...
This commit is contained in:
commit
bc4208097f
@ -1,136 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* More advanced search form
|
||||
* @package cms
|
||||
* @subpackage search
|
||||
*/
|
||||
class AdvancedSearchForm extends SearchForm {
|
||||
|
||||
/**
|
||||
* the constructor of a Simple/basic SearchForm
|
||||
*/
|
||||
function __construct($controller, $name, $fields = null, $actions = null) {
|
||||
if(!$fields) {
|
||||
$fields = new FieldList(
|
||||
$searchBy = new CompositeField(
|
||||
new HeaderField('SearchByHeader',_t('AdvancedSearchForm.SEARCHBY', 'SEARCH BY')),
|
||||
new TextField("+", _t('AdvancedSearchForm.ALLWORDS', 'All Words')),
|
||||
new TextField("quote", _t('AdvancedSearchForm.EXACT', 'Exact Phrase')),
|
||||
new TextField("any", _t('AdvancedSearchForm.ATLEAST', 'At Least One Of the Words')),
|
||||
new TextField("-", _t('AdvancedSearchForm.WITHOUT', 'Without the Words'))
|
||||
),
|
||||
$sortBy = new CompositeField(
|
||||
new HeaderField('SortByHeader',_t('AdvancedSearchForm.SORTBY', 'SORT RESULTS BY')),
|
||||
new OptionsetField("sortby", "",
|
||||
array(
|
||||
'Relevance' => _t('AdvancedSearchForm.RELEVANCE', 'Relevance'),
|
||||
'LastUpdated' => _t('AdvancedSearchForm.LASTUPDATED', 'Last Updated'),
|
||||
'PageTitle' => _t('AdvancedSearchForm.PAGETITLE', 'Page Title'),
|
||||
),
|
||||
'Relevance'
|
||||
)
|
||||
),
|
||||
$chooseDate = new CompositeField(
|
||||
new HeaderField('LastUpdatedHeader',_t('AdvancedSearchForm.LASTUPDATEDHEADER', 'LAST UPDATED')),
|
||||
new DateField("From", _t('AdvancedSearchForm.FROM', 'From')),
|
||||
new DateField("To", _t('AdvancedSearchForm.TO', 'To'))
|
||||
)
|
||||
);
|
||||
|
||||
$searchBy->ID = "AdvancedSearchForm_SearchBy";
|
||||
$searchOnly->ID = "AdvancedSearchForm_SearchOnly";
|
||||
$sortBy->ID = "AdvancedSearchForm_SortBy";
|
||||
$chooseDate->ID = "AdvancedSearchForm_ChooseDate";
|
||||
}
|
||||
|
||||
if(!$actions) {
|
||||
$actions = new FieldList(
|
||||
new FormAction("results", _t('AdvancedSearchForm.GO', 'Go'))
|
||||
);
|
||||
}
|
||||
parent::__construct($controller, $name, $fields, $actions);
|
||||
}
|
||||
|
||||
public function forTemplate(){
|
||||
return $this->renderWith(array("AdvancedSearchForm","Form"));
|
||||
}
|
||||
|
||||
/* Return dataObjectSet of the results, using the form data.
|
||||
*/
|
||||
public function getResults($numPerPage = 10) {
|
||||
$data = $this->getData();
|
||||
|
||||
if($data['+']) $keywords .= " +" . ereg_replace(" +", " +", trim($data['+']));
|
||||
if($data['quote']) $keywords .= ' "' . $data['quote'] . '"';
|
||||
if($data['any']) $keywords .= ' ' . $data['any'];
|
||||
if($data['-']) $keywords .= " -" . ereg_replace(" +", " -", trim($data['-']));
|
||||
$keywords = trim($keywords);
|
||||
|
||||
// This means that they want to just find pages where there's *no* match
|
||||
|
||||
if($keywords[0] == '-') {
|
||||
$keywords = $data['-'];
|
||||
$invertedMatch = true;
|
||||
}
|
||||
|
||||
|
||||
// Limit search to various sections
|
||||
if($_REQUEST['OnlyShow']) {
|
||||
$pageList = array();
|
||||
|
||||
// Find the associated pages
|
||||
foreach($_REQUEST['OnlyShow'] as $section => $checked) {
|
||||
$items = explode(",", $section);
|
||||
foreach($items as $item) {
|
||||
$page = DataObject::get_one('SiteTree', "\"URLSegment\" = '" . Convert::raw2sql($item) . "'");
|
||||
$pageList[] = $page->ID;
|
||||
if(!$page) user_error("Can't find a page called '$item'", E_USER_WARNING);
|
||||
$page->loadDescendantIDListInto($pageList);
|
||||
}
|
||||
}
|
||||
$contentFilter = "\"ID\" IN (" . implode(",", $pageList) . ")";
|
||||
|
||||
// Find the files associated with those pages
|
||||
$fileList = DB::query("SELECT \"FileID\" FROM \"Page_ImageTracking\" WHERE \"PageID\" IN (" . implode(",", $pageList) . ")")->column();
|
||||
if($fileList) $fileFilter = "\"ID\" IN (" . implode(",", $fileList) . ")";
|
||||
else $fileFilter = " 1 = 2 ";
|
||||
}
|
||||
|
||||
if($data['From']) {
|
||||
$filter .= ($filter?" AND":"") . " \"LastEdited\" >= '$data[From]'";
|
||||
}
|
||||
if($data['To']) {
|
||||
$filter .= ($filter?" AND":"") . " \"LastEdited\" <= '$data[To]'";
|
||||
}
|
||||
|
||||
if($filter) {
|
||||
$contentFilter .= ($contentFilter?" AND":"") . $filter;
|
||||
$fileFilter .= ($fileFilter?" AND":"") . $filter;
|
||||
}
|
||||
|
||||
if($data['sortby']) {
|
||||
$sorts = array(
|
||||
'LastUpdated' => '"LastEdited" DESC',
|
||||
'PageTitle' => '"Title" ASC',
|
||||
'Relevance' => '"Relevance" DESC',
|
||||
);
|
||||
$sortBy = $sorts[$data['sortby']] ? $sorts[$data['sortby']] : $sorts['Relevance'];
|
||||
}
|
||||
|
||||
$keywords = $this->addStarsToKeywords($keywords);
|
||||
|
||||
return $this->searchEngine($keywords, $numPerPage, $sortBy, $contentFilter, true, $fileFilter, $invertedMatch);
|
||||
}
|
||||
|
||||
function getSearchQuery() {
|
||||
$data = $_REQUEST;
|
||||
if($data['+']) $keywords .= " +" . ereg_replace(" +", " +", trim($data['+']));
|
||||
if($data['quote']) $keywords .= ' "' . $data['quote'] . '"';
|
||||
if($data['any']) $keywords .= ' ' . $data['any'];
|
||||
if($data['-']) $keywords .= " -" . ereg_replace(" +", " -", trim($data['-']));
|
||||
|
||||
return trim($keywords);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user