# PrimitiveFile.class.php

Go to the documentation of this file.

    00001 <?php
    00002 /***************************************************************************
    00003  *   Copyright (C) 2004-2007 by Konstantin V. Arkhipov                     *
    00004  *                                                                         *
    00005  *   This program is free software; you can redistribute it and/or modify  *
    00006  *   it under the terms of the GNU Lesser General Public License as        *
    00007  *   published by the Free Software Foundation; either version 3 of the    *
    00008  *   License, or (at your option) any later version.                       *
    00009  *                                                                         *
    00010  ***************************************************************************/
    00011
    00017     class PrimitiveFile extends RangedPrimitive
    00018     {
    00019         private $originalName       = null;
    00020         private $mimeType           = null;
    00021
    00022         private $allowedMimeTypes   = array();
    00023         private $checkUploaded      = true;
    00024
    00025         public function getOriginalName()
    00026         {
    00027             return $this->originalName;
    00028         }
    00029
    00030         public function getMimeType()
    00031         {
    00032             return $this->mimeType;
    00033         }
    00034
    00038         public function clean()
    00039         {
    00040             $this->originalName = null;
    00041             $this->mimeType = null;
    00042
    00043             return parent::clean();
    00044         }
    00045
    00050         public function setAllowedMimeTypes($mimes)
    00051         {
    00052             Assert::isArray($mimes);
    00053
    00054             $this->allowedMimeTypes = $mimes;
    00055
    00056             return $this;
    00057         }
    00058
    00063         public function addAllowedMimeType($mime)
    00064         {
    00065             Assert::isString($mime);
    00066
    00067             $this->allowedMimeTypes[] = $mime;
    00068
    00069             return $this;
    00070         }
    00071
    00072         public function getAllowedMimeTypes()
    00073         {
    00074             return $this->allowedMimeTypes;
    00075         }
    00076
    00077         public function isAllowedMimeType()
    00078         {
    00079             if (count($this->allowedMimeTypes) > 0) {
    00080                 return in_array($this->mimeType, $this->allowedMimeTypes);
    00081             } else
    00082                 return true;
    00083         }
    00084
    00085         public function copyTo($path, $name)
    00086         {
    00087             return $this->copyToPath($path.$name);
    00088         }
    00089
    00090         public function copyToPath($path)
    00091         {
    00092             if (is_readable($this->value) && is_writable(dirname($path))) {
    00093                 if ($this->checkUploaded) {
    00094                     return move_uploaded_file($this->value, $path);
    00095                 } else {
    00096                     return rename($this->value, $path);
    00097                 }
    00098             } else
    00099                 throw new WrongArgumentException(
    00100                     "can not move '{$this->value}' to '{$path}'"
    00101                 );
    00102         }
    00103
    00104         public function import($scope)
    00105         {
    00106             if (
    00107                 !BasePrimitive::import($scope)
    00108                 || !is_array($scope[$this->name])
    00109                 || (
    00110                     isset($scope[$this->name], $scope[$this->name]['error'])
    00111                     && $scope[$this->name]['error'] == UPLOAD_ERR_NO_FILE
    00112                 )
    00113             )
    00114                 return null;
    00115
    00116             if (isset($scope[$this->name]['tmp_name']))
    00117                 $file = $scope[$this->name]['tmp_name'];
    00118             else
    00119                 return false;
    00120
    00121             if (is_readable($file) && $this->checkUploaded($file))
    00122                 $size = filesize($file);
    00123             else
    00124                 return false;
    00125
    00126             $this->mimeType = $scope[$this->name]['type'];
    00127
    00128             if (!$this->isAllowedMimeType())
    00129                 return false;
    00130
    00131             if (
    00132                 isset($scope[$this->name])
    00133                 && !($this->max && ($size > $this->max))
    00134                 && !($this->min && ($size < $this->min))
    00135             ) {
    00136                 $this->value = $scope[$this->name]['tmp_name'];
    00137                 $this->originalName = $scope[$this->name]['name'];
    00138
    00139                 return true;
    00140             }
    00141
    00142             return false;
    00143         }
    00144
    00145         public function exportValue()
    00146         {
    00147             throw new UnimplementedFeatureException();
    00148         }
    00149
    00153         public function enableCheckUploaded()
    00154         {
    00155             $this->checkUploaded = true;
    00156
    00157             return $this;
    00158         }
    00159
    00163         public function disableCheckUploaded()
    00164         {
    00165             $this->checkUploaded = false;
    00166
    00167             return $this;
    00168         }
    00169
    00170         public function isCheckUploaded()
    00171         {
    00172             return $this->checkUploaded;
    00173         }
    00174
    00175         private function checkUploaded($file)
    00176         {
    00177             return !$this->checkUploaded || is_uploaded_file($file);
    00178         }
    00179     }
    00180 ?>