source: trunk/library/Zend/Validate/File/Exists.php @ 5146

Revision 5146, 5.6 KB checked in by wmerlotto, 12 years ago (diff)

Ticket #2305 - Enviando alteracoes, desenvolvidas internamente na Prognus. Library: adicionando arquivos.

Line 
1<?php
2/**
3 * Zend Framework
4 *
5 * LICENSE
6 *
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.
14 *
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: Exists.php 20352 2010-01-17 17:55:38Z thomas $
20 */
21
22/**
23 * @see Zend_Validate_Abstract
24 */
25require_once 'Zend/Validate/Abstract.php';
26
27/**
28 * Validator which checks if the file already exists in the directory
29 *
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
34 */
35class Zend_Validate_File_Exists extends Zend_Validate_Abstract
36{
37    /**
38     * @const string Error constants
39     */
40    const DOES_NOT_EXIST = 'fileExistsDoesNotExist';
41
42    /**
43     * @var array Error message templates
44     */
45    protected $_messageTemplates = array(
46        self::DOES_NOT_EXIST => "File '%value%' does not exist",
47    );
48
49    /**
50     * Internal list of directories
51     * @var string
52     */
53    protected $_directory = '';
54
55    /**
56     * @var array Error message template variables
57     */
58    protected $_messageVariables = array(
59        'directory' => '_directory'
60    );
61
62    /**
63     * Sets validator options
64     *
65     * @param  string|array|Zend_Config $directory
66     * @return void
67     */
68    public function __construct($directory = array())
69    {
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');
77        }
78
79        $this->setDirectory($directory);
80    }
81
82    /**
83     * Returns the set file directories which are checked
84     *
85     * @param  boolean $asArray Returns the values as array, when false an concated string is returned
86     * @return string
87     */
88    public function getDirectory($asArray = false)
89    {
90        $asArray   = (bool) $asArray;
91        $directory = (string) $this->_directory;
92        if ($asArray) {
93            $directory = explode(',', $directory);
94        }
95
96        return $directory;
97    }
98
99    /**
100     * Sets the file directory which will be checked
101     *
102     * @param  string|array $directory The directories to validate
103     * @return Zend_Validate_File_Extension Provides a fluent interface
104     */
105    public function setDirectory($directory)
106    {
107        $this->_directory = null;
108        $this->addDirectory($directory);
109        return $this;
110    }
111
112    /**
113     * Adds the file directory which will be checked
114     *
115     * @param  string|array $directory The directory to add for validation
116     * @return Zend_Validate_File_Extension Provides a fluent interface
117     */
118    public function addDirectory($directory)
119    {
120        $directories = $this->getDirectory(true);
121
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');
127        }
128
129        foreach ($directory as $content) {
130            if (empty($content) || !is_string($content)) {
131                continue;
132            }
133
134            $directories[] = trim($content);
135        }
136        $directories = array_unique($directories);
137
138        // Sanity check to ensure no empty values
139        foreach ($directories as $key => $dir) {
140            if (empty($dir)) {
141                unset($directories[$key]);
142            }
143        }
144
145        $this->_directory = implode(',', $directories);
146
147        return $this;
148    }
149
150    /**
151     * Defined by Zend_Validate_Interface
152     *
153     * Returns true if and only if the file already exists in the set directories
154     *
155     * @param  string  $value Real file to check for existance
156     * @param  array   $file  File data from Zend_File_Transfer
157     * @return boolean
158     */
159    public function isValid($value, $file = null)
160    {
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;
166        }
167
168        $check = false;
169        foreach ($directories as $directory) {
170            if (empty($directory)) {
171                continue;
172            }
173
174            $check = true;
175            if (!file_exists($directory . DIRECTORY_SEPARATOR . $file['name'])) {
176                return $this->_throw($file, self::DOES_NOT_EXIST);
177            }
178        }
179
180        if (!$check) {
181            return $this->_throw($file, self::DOES_NOT_EXIST);
182        }
183
184        return true;
185    }
186
187    /**
188     * Throws an error of the given type
189     *
190     * @param  string $file
191     * @param  string $errorType
192     * @return false
193     */
194    protected function _throw($file, $errorType)
195    {
196        if ($file !== null) {
197            $this->_value = $file['name'];
198        }
199
200        $this->_error($errorType);
201        return false;
202    }
203}
Note: See TracBrowser for help on using the repository browser.