2010-08-30 07:49:44 +00:00

537 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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°5453.10”, 11° 10 56.76”
* 47°5453.10;11°1056.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;
}
}