[ZF-10089] Zend_Log
[zend.git] / library / Zend / Validate / File / Exists.php
blobffa5affe6de5badb473050ded1832486a6bd4758
1 <?php
2 /**
3 * Zend Framework
5 * LICENSE
7 * This source file is subject to the new BSD license that is bundled
8 * with this package in the file LICENSE.txt.
9 * It is also available through the world-wide-web at this URL:
10 * http://framework.zend.com/license/new-bsd
11 * If you did not receive a copy of the license and are unable to
12 * obtain it through the world-wide-web, please send an email
13 * to license@zend.com so we can send you a copy immediately.
15 * @category Zend
16 * @package Zend_Validate
17 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
18 * @license http://framework.zend.com/license/new-bsd New BSD License
19 * @version $Id$
22 /**
23 * @see Zend_Validate_Abstract
25 require_once 'Zend/Validate/Abstract.php';
27 /**
28 * Validator which checks if the file already exists in the directory
30 * @category Zend
31 * @package Zend_Validate
32 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
33 * @license http://framework.zend.com/license/new-bsd New BSD License
35 class Zend_Validate_File_Exists extends Zend_Validate_Abstract
37 /**
38 * @const string Error constants
40 const DOES_NOT_EXIST = 'fileExistsDoesNotExist';
42 /**
43 * @var array Error message templates
45 protected $_messageTemplates = array(
46 self::DOES_NOT_EXIST => "File '%value%' does not exist",
49 /**
50 * Internal list of directories
51 * @var string
53 protected $_directory = '';
55 /**
56 * @var array Error message template variables
58 protected $_messageVariables = array(
59 'directory' => '_directory'
62 /**
63 * Sets validator options
65 * @param string|array|Zend_Config $directory
66 * @return void
68 public function __construct($directory = array())
70 if ($directory instanceof Zend_Config) {
71 $directory = $directory->toArray();
72 } else if (is_string($directory)) {
73 $directory = explode(',', $directory);
74 } else if (!is_array($directory)) {
75 require_once 'Zend/Validate/Exception.php';
76 throw new Zend_Validate_Exception ('Invalid options to validator provided');
79 $this->setDirectory($directory);
82 /**
83 * Returns the set file directories which are checked
85 * @param boolean $asArray Returns the values as array, when false an concated string is returned
86 * @return string
88 public function getDirectory($asArray = false)
90 $asArray = (bool) $asArray;
91 $directory = (string) $this->_directory;
92 if ($asArray) {
93 $directory = explode(',', $directory);
96 return $directory;
99 /**
100 * Sets the file directory which will be checked
102 * @param string|array $directory The directories to validate
103 * @return Zend_Validate_File_Extension Provides a fluent interface
105 public function setDirectory($directory)
107 $this->_directory = null;
108 $this->addDirectory($directory);
109 return $this;
113 * Adds the file directory which will be checked
115 * @param string|array $directory The directory to add for validation
116 * @return Zend_Validate_File_Extension Provides a fluent interface
118 public function addDirectory($directory)
120 $directories = $this->getDirectory(true);
122 if (is_string($directory)) {
123 $directory = explode(',', $directory);
124 } else if (!is_array($directory)) {
125 require_once 'Zend/Validate/Exception.php';
126 throw new Zend_Validate_Exception ('Invalid options to validator provided');
129 foreach ($directory as $content) {
130 if (empty($content) || !is_string($content)) {
131 continue;
134 $directories[] = trim($content);
136 $directories = array_unique($directories);
138 // Sanity check to ensure no empty values
139 foreach ($directories as $key => $dir) {
140 if (empty($dir)) {
141 unset($directories[$key]);
145 $this->_directory = implode(',', $directories);
147 return $this;
151 * Defined by Zend_Validate_Interface
153 * Returns true if and only if the file already exists in the set directories
155 * @param string $value Real file to check for existance
156 * @param array $file File data from Zend_File_Transfer
157 * @return boolean
159 public function isValid($value, $file = null)
161 $directories = $this->getDirectory(true);
162 if (($file !== null) and (!empty($file['destination']))) {
163 $directories[] = $file['destination'];
164 } else if (!isset($file['name'])) {
165 $file['name'] = $value;
168 $check = false;
169 foreach ($directories as $directory) {
170 if (empty($directory)) {
171 continue;
174 $check = true;
175 if (!file_exists($directory . DIRECTORY_SEPARATOR . $file['name'])) {
176 return $this->_throw($file, self::DOES_NOT_EXIST);
180 if (!$check) {
181 return $this->_throw($file, self::DOES_NOT_EXIST);
184 return true;
188 * Throws an error of the given type
190 * @param string $file
191 * @param string $errorType
192 * @return false
194 protected function _throw($file, $errorType)
196 if ($file !== null) {
197 $this->_value = $file['name'];
200 $this->_error($errorType);
201 return false;