PDF rausgenommen
This commit is contained in:
268
msd2/tracking/piwik/libs/HTML/QuickForm2/Element/InputFile.php
Normal file
268
msd2/tracking/piwik/libs/HTML/QuickForm2/Element/InputFile.php
Normal file
@ -0,0 +1,268 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for <input type="file" /> elements
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* LICENSE:
|
||||
*
|
||||
* Copyright (c) 2006-2010, Alexey Borzov <avb@php.net>,
|
||||
* Bertrand Mansion <golgote@mamasam.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * The names of the authors may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* @category HTML
|
||||
* @package HTML_QuickForm2
|
||||
* @author Alexey Borzov <avb@php.net>
|
||||
* @author Bertrand Mansion <golgote@mamasam.com>
|
||||
* @license http://opensource.org/licenses/bsd-license.php New BSD License
|
||||
* @version SVN: $Id: InputFile.php 300722 2010-06-24 10:15:52Z mansion $
|
||||
* @link http://pear.php.net/package/HTML_QuickForm2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Base class for <input> elements
|
||||
*/
|
||||
// require_once 'HTML/QuickForm2/Element/Input.php';
|
||||
|
||||
/**
|
||||
* Class for <input type="file" /> elements
|
||||
*
|
||||
* @category HTML
|
||||
* @package HTML_QuickForm2
|
||||
* @author Alexey Borzov <avb@php.net>
|
||||
* @author Bertrand Mansion <golgote@mamasam.com>
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
class HTML_QuickForm2_Element_InputFile extends HTML_QuickForm2_Element_Input
|
||||
{
|
||||
/**
|
||||
* Default language for error messages
|
||||
*/
|
||||
const DEFAULT_LANGUAGE = 'en';
|
||||
|
||||
/**
|
||||
* Localized error messages for PHP's file upload errors
|
||||
* @var array
|
||||
*/
|
||||
protected $errorMessages = array(
|
||||
'en' => array(
|
||||
UPLOAD_ERR_INI_SIZE => 'The uploaded file exceeds size permitted by PHP configuration (%d bytes)',
|
||||
UPLOAD_ERR_FORM_SIZE => 'The uploaded file exceeds the MAX_FILE_SIZE directive in HTML form (%d bytes)',
|
||||
UPLOAD_ERR_PARTIAL => 'The file was only partially uploaded',
|
||||
UPLOAD_ERR_NO_TMP_DIR => 'Server error: temporary directory is missing',
|
||||
UPLOAD_ERR_CANT_WRITE => 'Server error: failed to write the file to disk',
|
||||
UPLOAD_ERR_EXTENSION => 'File upload was stopped by extension'
|
||||
),
|
||||
'fr' => array(
|
||||
UPLOAD_ERR_INI_SIZE => 'Le fichier envoyé excède la taille autorisée par la configuration de PHP (%d octets)',
|
||||
UPLOAD_ERR_FORM_SIZE => 'Le fichier envoyé excède la taille de MAX_FILE_SIZE spécifiée dans le formulaire HTML (%d octets)',
|
||||
UPLOAD_ERR_PARTIAL => 'Le fichier n\'a été que partiellement téléchargé',
|
||||
UPLOAD_ERR_NO_TMP_DIR => 'Erreur serveur: le répertoire temporaire est manquant',
|
||||
UPLOAD_ERR_CANT_WRITE => 'Erreur serveur: échec de l\'écriture du fichier sur le disque',
|
||||
UPLOAD_ERR_EXTENSION => 'L\'envoi de fichier est arrêté par l\'extension'
|
||||
),
|
||||
'ru' => array(
|
||||
UPLOAD_ERR_INI_SIZE => 'Размер загруженного файла превосходит максимально разрешённый настройками PHP (%d байт)',
|
||||
UPLOAD_ERR_FORM_SIZE => 'Размер загруженного файла превосходит директиву MAX_FILE_SIZE, указанную в форме (%d байт)',
|
||||
UPLOAD_ERR_PARTIAL => 'Файл был загружен не полностью',
|
||||
UPLOAD_ERR_NO_TMP_DIR => 'Ошибка на сервере: отсутствует каталог для временных файлов',
|
||||
UPLOAD_ERR_CANT_WRITE => 'Ошибка на сервере: не удалось записать файл на диск',
|
||||
UPLOAD_ERR_EXTENSION => 'Загрузка файла была остановлена расширением'
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Language to display error messages in
|
||||
* @var string
|
||||
*/
|
||||
protected $language;
|
||||
|
||||
/**
|
||||
* Information on uploaded file, from submit data source
|
||||
* @var array
|
||||
*/
|
||||
protected $value = null;
|
||||
|
||||
protected $attributes = array('type' => 'file');
|
||||
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* Possible keys in $data array are:
|
||||
* - 'language': language to display error messages in, it should either be
|
||||
* already available in the class or provided in 'errorMessages'
|
||||
* - 'errorMessages': an array of error messages with the following format
|
||||
* <pre>
|
||||
* 'language code 1' => array(
|
||||
* UPLOAD_ERR_... => 'message',
|
||||
* ...
|
||||
* UPLOAD_ERR_... => 'message'
|
||||
* ),
|
||||
* ...
|
||||
* 'language code N' => array(
|
||||
* ...
|
||||
* )
|
||||
* </pre>
|
||||
* Note that error messages for UPLOAD_ERR_INI_SIZE and UPLOAD_ERR_FORM_SIZE
|
||||
* may contain '%d' placeholders that will be automatically replaced by the
|
||||
* appropriate size limits. Note also that you don't need to provide messages
|
||||
* for every possible error code in the arrays, you may e.g. override just
|
||||
* one error message for a particular language.
|
||||
*
|
||||
* @param string Element name
|
||||
* @param mixed Attributes (either a string or an array)
|
||||
* @param array Data used to set up error messages for PHP's file
|
||||
* upload errors.
|
||||
*/
|
||||
public function __construct($name = null, $attributes = null, array $data = array())
|
||||
{
|
||||
if (isset($data['errorMessages'])) {
|
||||
// neither array_merge() nor array_merge_recursive will do
|
||||
foreach ($data['errorMessages'] as $lang => $ary) {
|
||||
foreach ($ary as $code => $message) {
|
||||
$this->errorMessages[$lang][$code] = $message;
|
||||
}
|
||||
}
|
||||
unset($data['errorMessages']);
|
||||
}
|
||||
if (!isset($data['language'])) {
|
||||
$this->language = self::DEFAULT_LANGUAGE;
|
||||
} else {
|
||||
$this->language = isset($this->errorMessages[$data['language']])?
|
||||
$data['language']: self::DEFAULT_LANGUAGE;
|
||||
unset($data['language']);
|
||||
}
|
||||
parent::__construct($name, $attributes, $data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* File upload elements cannot be frozen
|
||||
*
|
||||
* To properly "freeze" a file upload element one has to store the uploaded
|
||||
* file somewhere and store the file info in session. This is way outside
|
||||
* the scope of this class.
|
||||
*
|
||||
* @param bool Whether element should be frozen or editable. This
|
||||
* parameter is ignored in case of file uploads
|
||||
* @return bool Always returns false
|
||||
*/
|
||||
public function toggleFrozen($freeze = null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the information on uploaded file
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public function getValue()
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* File upload's value cannot be set here
|
||||
*
|
||||
* @param mixed Value for file element, this parameter is ignored
|
||||
* @return HTML_QuickForm2_Element_InputFile
|
||||
*/
|
||||
public function setValue($value)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function updateValue()
|
||||
{
|
||||
foreach ($this->getDataSources() as $ds) {
|
||||
if ($ds instanceof HTML_QuickForm2_DataSource_Submit) {
|
||||
$value = $ds->getUpload($this->getName());
|
||||
if (null !== $value) {
|
||||
$this->value = $value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->value = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the server-side validation
|
||||
*
|
||||
* Before the Rules added to the element kick in, the element checks the
|
||||
* error code added to the $_FILES array by PHP. If the code isn't
|
||||
* UPLOAD_ERR_OK or UPLOAD_ERR_NO_FILE then a built-in error message will be
|
||||
* displayed and no further validation will take place.
|
||||
*
|
||||
* @return boolean Whether the element is valid
|
||||
*/
|
||||
protected function validate()
|
||||
{
|
||||
if (strlen($this->error)) {
|
||||
return false;
|
||||
}
|
||||
if (isset($this->value['error']) &&
|
||||
!in_array($this->value['error'], array(UPLOAD_ERR_OK, UPLOAD_ERR_NO_FILE)))
|
||||
{
|
||||
if (isset($this->errorMessages[$this->language][$this->value['error']])) {
|
||||
$errorMessage = $this->errorMessages[$this->language][$this->value['error']];
|
||||
} else {
|
||||
$errorMessage = $this->errorMessages[self::DEFAULT_LANGUAGE][$this->value['error']];
|
||||
}
|
||||
if (UPLOAD_ERR_INI_SIZE == $this->value['error']) {
|
||||
$iniSize = ini_get('upload_max_filesize');
|
||||
$size = intval($iniSize);
|
||||
switch (strtoupper(substr($iniSize, -1))) {
|
||||
case 'G': $size *= 1024;
|
||||
case 'M': $size *= 1024;
|
||||
case 'K': $size *= 1024;
|
||||
}
|
||||
|
||||
} elseif (UPLOAD_ERR_FORM_SIZE == $this->value['error']) {
|
||||
foreach ($this->getDataSources() as $ds) {
|
||||
if ($ds instanceof HTML_QuickForm2_DataSource_Submit) {
|
||||
$size = intval($ds->getValue('MAX_FILE_SIZE'));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->error = isset($size)? sprintf($errorMessage, $size): $errorMessage;
|
||||
return false;
|
||||
}
|
||||
return parent::validate();
|
||||
}
|
||||
|
||||
public function addFilter($callback, array $options = null, $recursive = true)
|
||||
{
|
||||
throw new HTML_QuickForm2_Exception(
|
||||
'InputFile elements do not support filters'
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user