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

Revision 5146, 4.8 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: Crc32.php 22668 2010-07-25 14:50:46Z thomas $
20 */
21
22/**
23 * @see Zend_Validate_File_Hash
24 */
25require_once 'Zend/Validate/File/Hash.php';
26
27/**
28 * Validator for the crc32 hash of given files
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_Crc32 extends Zend_Validate_File_Hash
36{
37    /**
38     * @const string Error constants
39     */
40    const DOES_NOT_MATCH = 'fileCrc32DoesNotMatch';
41    const NOT_DETECTED   = 'fileCrc32NotDetected';
42    const NOT_FOUND      = 'fileCrc32NotFound';
43
44    /**
45     * @var array Error message templates
46     */
47    protected $_messageTemplates = array(
48        self::DOES_NOT_MATCH => "File '%value%' does not match the given crc32 hashes",
49        self::NOT_DETECTED   => "A crc32 hash could not be evaluated for the given file",
50        self::NOT_FOUND      => "File '%value%' is not readable or does not exist",
51    );
52
53    /**
54     * Hash of the file
55     *
56     * @var string
57     */
58    protected $_hash;
59
60    /**
61     * Sets validator options
62     *
63     * @param  string|array|Zend_Config $options
64     * @return void
65     */
66    public function __construct($options)
67    {
68        if ($options instanceof Zend_Config) {
69            $options = $options->toArray();
70        } elseif (is_scalar($options)) {
71            $options = array('hash1' => $options);
72        } elseif (!is_array($options)) {
73            require_once 'Zend/Validate/Exception.php';
74            throw new Zend_Validate_Exception('Invalid options to validator provided');
75        }
76
77        $this->setCrc32($options);
78    }
79
80    /**
81     * Returns all set crc32 hashes
82     *
83     * @return array
84     */
85    public function getCrc32()
86    {
87        return $this->getHash();
88    }
89
90    /**
91     * Sets the crc32 hash for one or multiple files
92     *
93     * @param  string|array $options
94     * @return Zend_Validate_File_Hash Provides a fluent interface
95     */
96    public function setHash($options)
97    {
98        if (!is_array($options)) {
99            $options = array($options);
100        }
101
102        $options['algorithm'] = 'crc32';
103        parent::setHash($options);
104        return $this;
105    }
106
107    /**
108     * Sets the crc32 hash for one or multiple files
109     *
110     * @param  string|array $options
111     * @return Zend_Validate_File_Hash Provides a fluent interface
112     */
113    public function setCrc32($options)
114    {
115        $this->setHash($options);
116        return $this;
117    }
118
119    /**
120     * Adds the crc32 hash for one or multiple files
121     *
122     * @param  string|array $options
123     * @return Zend_Validate_File_Hash Provides a fluent interface
124     */
125    public function addHash($options)
126    {
127        if (!is_array($options)) {
128            $options = array($options);
129        }
130
131        $options['algorithm'] = 'crc32';
132        parent::addHash($options);
133        return $this;
134    }
135
136    /**
137     * Adds the crc32 hash for one or multiple files
138     *
139     * @param  string|array $options
140     * @return Zend_Validate_File_Hash Provides a fluent interface
141     */
142    public function addCrc32($options)
143    {
144        $this->addHash($options);
145        return $this;
146    }
147
148    /**
149     * Defined by Zend_Validate_Interface
150     *
151     * Returns true if and only if the given file confirms the set hash
152     *
153     * @param  string $value Filename to check for hash
154     * @param  array  $file  File data from Zend_File_Transfer
155     * @return boolean
156     */
157    public function isValid($value, $file = null)
158    {
159        // Is file readable ?
160        require_once 'Zend/Loader.php';
161        if (!Zend_Loader::isReadable($value)) {
162            return $this->_throw($file, self::NOT_FOUND);
163        }
164
165        $hashes = array_unique(array_keys($this->_hash));
166        $filehash = hash_file('crc32', $value);
167        if ($filehash === false) {
168            return $this->_throw($file, self::NOT_DETECTED);
169        }
170
171        foreach($hashes as $hash) {
172            if ($filehash === $hash) {
173                return true;
174            }
175        }
176
177        return $this->_throw($file, self::DOES_NOT_MATCH);
178    }
179}
Note: See TracBrowser for help on using the repository browser.