web/Zend/Service/DeveloperGarden/LocalSearch/SearchParameters.php
changeset 0 4eba9c11703f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/Zend/Service/DeveloperGarden/LocalSearch/SearchParameters.php	Mon Dec 13 18:29:26 2010 +0100
@@ -0,0 +1,536 @@
+<?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 22662 2010-07-24 17:37:36Z mabe $
+ */
+
+/**
+ * @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 ($value === null) {
+                continue;
+            }
+            $param = array(
+                'parameter' => $key,
+                'value' => $value
+            );
+            $retVal[] = $param;
+        }
+        return $retVal;
+    }
+}