[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/zend/Zend/Validate/File/ -> Md5.php (source)

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


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1