UrlScheme.php

Go to the documentation of this file.
00001 <?php
00002 
00033 class Robo47_Filter_UrlScheme implements Zend_Filter_Interface
00034 {
00035 
00040     protected $_schemes = array(
00041         'http',
00042         'https',
00043         'ftp',
00044         'ftps'
00045     );
00050     protected $_defaultScheme = 'http';
00055     protected $_trim = true;
00056 
00061     public function __construct(array $options = array())
00062     {
00063         $this->setOptions($options);
00064     }
00065 
00072     public function setOptions($options)
00073     {
00074         foreach ($options as $key => $value) {
00075             switch ($key) {
00076                 case 'trim':
00077                     $this->setTrim($value);
00078                     break;
00079                 case 'defaultScheme':
00080                     $this->setDefaultScheme($value);
00081                     break;
00082                 case 'schemes':
00083                     $this->setSchemes($value);
00084                     break;
00085                 default:
00086                     break;
00087             }
00088         }
00089         return $this;
00090     }
00091 
00098     public function setSchemes(array $schemes)
00099     {
00100         $this->_schemes = $schemes;
00101         return $this;
00102     }
00103 
00109     public function getSchemes()
00110     {
00111         return $this->_schemes;
00112     }
00113 
00119     public function setDefaultScheme($defaultScheme)
00120     {
00121         $this->_defaultScheme = $defaultScheme;
00122         return $this;
00123     }
00124 
00130     public function getDefaultScheme()
00131     {
00132         return $this->_defaultScheme;
00133     }
00134 
00141     public function setTrim($flag = true)
00142     {
00143         $this->_trim = (bool) $flag;
00144         return $this;
00145     }
00146 
00152     public function getTrim()
00153     {
00154         return $this->_trim;
00155     }
00156 
00163     public function filter($value)
00164     {
00165         if ($this->getTrim()) {
00166             $value = trim($value);
00167         }
00168         if (empty($value)) {
00169             return '';
00170         }
00171         $schemeFound = false;
00172         $schemes = $this->getSchemes();
00173         foreach ($schemes as $scheme) {
00174             if (0 === strpos($value, $scheme . '://')) {
00175                 $schemeFound = true;
00176             }
00177         }
00178         if (!$schemeFound) {
00179             $value = $this->getDefaultScheme() .
00180                 '://' . $value;
00181         }
00182         return $value;
00183     }
00184 }