537 lines
14 KiB
PHP
537 lines
14 KiB
PHP
|
<?php
|
|||
|
/**
|
|||
|
* Zend Framework
|
|||
|
*
|
|||
|
* LICENSE
|
|||
|
*
|
|||
|
* This source file is subject to the new BSD license that is bundled
|
|||
|
* with this package in the file LICENSE.txt.
|
|||
|
* It is also available through the world-wide-web at this URL:
|
|||
|
* http://framework.zend.com/license/new-bsd
|
|||
|
* If you did not receive a copy of the license and are unable to
|
|||
|
* obtain it through the world-wide-web, please send an email
|
|||
|
* to license@zend.com so we can send you a copy immediately.
|
|||
|
*
|
|||
|
* @category Zend
|
|||
|
* @package Zend_Service
|
|||
|
* @subpackage DeveloperGarden
|
|||
|
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
|
|||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|||
|
* @version $Id: SearchParameters.php 20166 2010-01-09 19:00:17Z bkarwin $
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @category Zend
|
|||
|
* @package Zend_Service
|
|||
|
* @subpackage DeveloperGarden
|
|||
|
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
|
|||
|
* @author Marco Kaiser
|
|||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|||
|
*/
|
|||
|
class Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
{
|
|||
|
/**
|
|||
|
* possible search parameters, incl. default values
|
|||
|
*
|
|||
|
* @var array
|
|||
|
*/
|
|||
|
private $_parameters = array(
|
|||
|
'what' => null,
|
|||
|
'dymwhat' => null,
|
|||
|
'dymrelated' => null,
|
|||
|
'hits' => null,
|
|||
|
'collapse' => null,
|
|||
|
'where' => null,
|
|||
|
'dywhere' => null,
|
|||
|
'radius' => null,
|
|||
|
'lx' => null,
|
|||
|
'ly' => null,
|
|||
|
'rx' => null,
|
|||
|
'ry' => null,
|
|||
|
'transformgeocode' => null,
|
|||
|
'sort' => null,
|
|||
|
'spatial' => null,
|
|||
|
'sepcomm' => null,
|
|||
|
'filter' => null, // can be ONLINER or OFFLINER
|
|||
|
'openingtime' => null, // can be now or HH::MM
|
|||
|
'kategorie' => null, // @see http://www.suchen.de/kategorie-katalog
|
|||
|
'site' => null,
|
|||
|
'typ' => null,
|
|||
|
'name' => null,
|
|||
|
'page' => null,
|
|||
|
'city' => null,
|
|||
|
'plz' => null,
|
|||
|
'strasse' => null,
|
|||
|
'bundesland' => null,
|
|||
|
);
|
|||
|
|
|||
|
/**
|
|||
|
* possible collapse values
|
|||
|
*
|
|||
|
* @var array
|
|||
|
*/
|
|||
|
private $_possibleCollapseValues = array(
|
|||
|
true,
|
|||
|
false,
|
|||
|
'ADDRESS_COMPANY',
|
|||
|
'DOMAIN'
|
|||
|
);
|
|||
|
|
|||
|
/**
|
|||
|
* sets a new search word
|
|||
|
* alias for setWhat
|
|||
|
*
|
|||
|
* @param string $searchValue
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setSearchValue($searchValue)
|
|||
|
{
|
|||
|
return $this->setWhat($searchValue);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a new search word
|
|||
|
*
|
|||
|
* @param string $searchValue
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setWhat($searchValue)
|
|||
|
{
|
|||
|
$this->_parameters['what'] = $searchValue;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* enable the did you mean what feature
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function enableDidYouMeanWhat()
|
|||
|
{
|
|||
|
$this->_parameters['dymwhat'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* disable the did you mean what feature
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function disableDidYouMeanWhat()
|
|||
|
{
|
|||
|
$this->_parameters['dymwhat'] = 'false';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* enable the did you mean where feature
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function enableDidYouMeanWhere()
|
|||
|
{
|
|||
|
$this->_parameters['dymwhere'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* disable the did you mean where feature
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function disableDidYouMeanWhere()
|
|||
|
{
|
|||
|
$this->_parameters['dymwhere'] = 'false';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* enable did you mean related, if true Kihno will be corrected to Kino
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function enableDidYouMeanRelated()
|
|||
|
{
|
|||
|
$this->_parameters['dymrelated'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* diable did you mean related, if false Kihno will not be corrected to Kino
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function disableDidYouMeanRelated()
|
|||
|
{
|
|||
|
$this->_parameters['dymrelated'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* set the max result hits for this search
|
|||
|
*
|
|||
|
* @param integer $hits
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setHits($hits = 10)
|
|||
|
{
|
|||
|
require_once 'Zend/Validate/Between.php';
|
|||
|
$validator = new Zend_Validate_Between(0, 1000);
|
|||
|
if (!$validator->isValid($hits)) {
|
|||
|
$message = $validator->getMessages();
|
|||
|
require_once 'Zend/Service/DeveloperGarden/LocalSearch/Exception.php';
|
|||
|
throw new Zend_Service_DeveloperGarden_LocalSearch_Exception(current($message));
|
|||
|
}
|
|||
|
$this->_parameters['hits'] = $hits;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* If true, addresses will be collapsed for a single domain, common values
|
|||
|
* are:
|
|||
|
* ADDRESS_COMPANY – to collapse by address
|
|||
|
* DOMAIN – to collapse by domain (same like collapse=true)
|
|||
|
* false
|
|||
|
*
|
|||
|
* @param mixed $value
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setCollapse($value)
|
|||
|
{
|
|||
|
if (!in_array($value, $this->_possibleCollapseValues, true)) {
|
|||
|
require_once 'Zend/Service/DeveloperGarden/LocalSearch/Exception.php';
|
|||
|
throw new Zend_Service_DeveloperGarden_LocalSearch_Exception('Not a valid value provided.');
|
|||
|
}
|
|||
|
$this->_parameters['collapse'] = $value;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* set a specific search location
|
|||
|
* examples:
|
|||
|
* +47°54’53.10”, 11° 10’ 56.76”
|
|||
|
* 47°54’53.10;11°10’56.76”
|
|||
|
* 47.914750,11.182533
|
|||
|
* +47.914750 ; +11.1824
|
|||
|
* Darmstadt
|
|||
|
* Berlin
|
|||
|
*
|
|||
|
* @param string $where
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setWhere($where)
|
|||
|
{
|
|||
|
require_once 'Zend/Validate/NotEmpty.php';
|
|||
|
|
|||
|
$validator = new Zend_Validate_NotEmpty();
|
|||
|
if (!$validator->isValid($where)) {
|
|||
|
$message = $validator->getMessages();
|
|||
|
require_once 'Zend/Service/DeveloperGarden/LocalSearch/Exception.php';
|
|||
|
throw new Zend_Service_DeveloperGarden_LocalSearch_Exception(current($message));
|
|||
|
}
|
|||
|
$this->_parameters['where'] = $where;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* returns the defined search location (ie city, country)
|
|||
|
*
|
|||
|
* @return string
|
|||
|
*/
|
|||
|
public function getWhere()
|
|||
|
{
|
|||
|
return $this->_parameters['where'];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* enable the spatial search feature
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function enableSpatial()
|
|||
|
{
|
|||
|
$this->_parameters['spatial'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* disable the spatial search feature
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function disableSpatial()
|
|||
|
{
|
|||
|
$this->_parameters['spatial'] = 'false';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets spatial and the given radius for a circle search
|
|||
|
*
|
|||
|
* @param integer $radius
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setRadius($radius)
|
|||
|
{
|
|||
|
require_once 'Zend/Validate/Int.php';
|
|||
|
|
|||
|
$validator = new Zend_Validate_Int();
|
|||
|
if (!$validator->isValid($radius)) {
|
|||
|
$message = $validator->getMessages();
|
|||
|
require_once 'Zend/Service/DeveloperGarden/LocalSearch/Exception.php';
|
|||
|
throw new Zend_Service_DeveloperGarden_LocalSearch_Exception(current($message));
|
|||
|
}
|
|||
|
$this->_parameters['radius'] = $radius;
|
|||
|
$this->_parameters['transformgeocode'] = 'false';
|
|||
|
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets the values for a rectangle search
|
|||
|
* lx = longitude left top
|
|||
|
* ly = latitude left top
|
|||
|
* rx = longitude right bottom
|
|||
|
* ry = latitude right bottom
|
|||
|
*
|
|||
|
* @param $lx
|
|||
|
* @param $ly
|
|||
|
* @param $rx
|
|||
|
* @param $ry
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setRectangle($lx, $ly, $rx, $ry)
|
|||
|
{
|
|||
|
$this->_parameters['lx'] = $lx;
|
|||
|
$this->_parameters['ly'] = $ly;
|
|||
|
$this->_parameters['rx'] = $rx;
|
|||
|
$this->_parameters['ry'] = $ry;
|
|||
|
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* if set, the service returns the zipcode for the result
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setTransformGeoCode()
|
|||
|
{
|
|||
|
$this->_parameters['transformgeocode'] = 'true';
|
|||
|
$this->_parameters['radius'] = null;
|
|||
|
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets the sort value
|
|||
|
* possible values are: 'relevance' and 'distance' (only with spatial enabled)
|
|||
|
*
|
|||
|
* @param string $sort
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setSort($sort)
|
|||
|
{
|
|||
|
if (!in_array($sort, array('relevance', 'distance'))) {
|
|||
|
require_once 'Zend/Service/DeveloperGarden/LocalSearch/Exception.php';
|
|||
|
throw new Zend_Service_DeveloperGarden_LocalSearch_Exception('Not a valid sort value provided.');
|
|||
|
}
|
|||
|
|
|||
|
$this->_parameters['sort'] = $sort;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* enable the separation of phone numbers
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function enablePhoneSeparation()
|
|||
|
{
|
|||
|
$this->_parameters['sepcomm'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* disable the separation of phone numbers
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function disablePhoneSeparation()
|
|||
|
{
|
|||
|
$this->_parameters['sepcomm'] = 'true';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* if this filter is set, only results with a website are returned
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setFilterOnliner()
|
|||
|
{
|
|||
|
$this->_parameters['filter'] = 'ONLINER';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* if this filter is set, only results without a website are returned
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setFilterOffliner()
|
|||
|
{
|
|||
|
$this->_parameters['filter'] = 'OFFLINER';
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* removes the filter value
|
|||
|
*
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function disableFilter()
|
|||
|
{
|
|||
|
$this->_parameters['filter'] = null;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* set a filter to get just results who are open at the given time
|
|||
|
* possible values:
|
|||
|
* now = open right now
|
|||
|
* HH:MM = at the given time (ie 20:00)
|
|||
|
*
|
|||
|
* @param string $time
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setOpeningTime($time = null)
|
|||
|
{
|
|||
|
$this->_parameters['openingtime'] = $time;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a category filter
|
|||
|
*
|
|||
|
* @see http://www.suchen.de/kategorie-katalog
|
|||
|
* @param $category
|
|||
|
* @return unknown_type
|
|||
|
*/
|
|||
|
public function setCategory($category = null)
|
|||
|
{
|
|||
|
$this->_parameters['kategorie'] = $category;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets the site filter
|
|||
|
* ie: www.developergarden.com
|
|||
|
*
|
|||
|
* @param string $site
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setSite($site)
|
|||
|
{
|
|||
|
$this->_parameters['site'] = $site;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a filter to the given document type
|
|||
|
* ie: pdf, html
|
|||
|
*
|
|||
|
* @param string $type
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setDocumentType($type)
|
|||
|
{
|
|||
|
$this->_parameters['typ'] = $type;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a filter for the company name
|
|||
|
* ie: Deutsche Telekom
|
|||
|
*
|
|||
|
* @param string $name
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setName($name)
|
|||
|
{
|
|||
|
$this->_parameters['name'] = $name;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a filter for the zip code
|
|||
|
*
|
|||
|
* @param string $zip
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setZipCode($zip)
|
|||
|
{
|
|||
|
$this->_parameters['plz'] = $zip;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a filter for the street
|
|||
|
*
|
|||
|
* @param string $street
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setStreet($street)
|
|||
|
{
|
|||
|
$this->_parameters['strasse'] = $street;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a filter for the county
|
|||
|
*
|
|||
|
* @param string $county
|
|||
|
* @return Zend_Service_DeveloperGarden_LocalSearch_SearchParameters
|
|||
|
*/
|
|||
|
public function setCounty($county)
|
|||
|
{
|
|||
|
$this->_parameters['bundesland'] = $county;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* sets a raw parameter with the value
|
|||
|
*
|
|||
|
* @param string $key
|
|||
|
* @param mixed $value
|
|||
|
* @return unknown_type
|
|||
|
*/
|
|||
|
public function setRawParameter($key, $value)
|
|||
|
{
|
|||
|
$this->_parameters[$key] = $value;
|
|||
|
return $this;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* returns the parameters as an array
|
|||
|
*
|
|||
|
* @return array
|
|||
|
*/
|
|||
|
public function getSearchParameters()
|
|||
|
{
|
|||
|
$retVal = array();
|
|||
|
foreach ($this->_parameters as $key => $value) {
|
|||
|
if (is_null($value)) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
$param = array(
|
|||
|
'parameter' => $key,
|
|||
|
'value' => $value
|
|||
|
);
|
|||
|
$retVal[] = $param;
|
|||
|
}
|
|||
|
return $retVal;
|
|||
|
}
|
|||
|
}
|