source of /sprout/Helpers/Upload.php
Copyright (C) 2017 Karmabunny Pty Ltd.
This file is a part of SproutCMS.
SproutCMS is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation, either
version 2 of the License, or (at your option) any later version.
For more information, visit <http://getsproutcms.com>.
This class was originally from Kohana 2.3.4
Copyright 2007-2008 Kohana Team <?php /** * Copyright (C) 2017 Karmabunny Pty Ltd. * * This file is a part of SproutCMS. * * SproutCMS is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Foundation, either * version 2 of the License, or (at your option) any later version. * * For more information, visit <http://getsproutcms.com>. * * This class was originally from Kohana 2.3.4 * Copyright 2007-2008 Kohana Team */ namespace Sprout\Helpers; use Kohana; use Kohana_Exception; /** * Upload helper class for working with the global $_FILES array and Validation library. * @deprecated This is old Kohana cruft */ class Upload { /** * Save an uploaded file to a new location. * * @param mixed name of $_FILE input or array of upload data * @param string new filename * @param string new directory * @param integer chmod mask * @return string full path to new file */ public static function save($file, $filename = NULL, $directory = NULL, $chmod = 0644) { // Load file data from FILES if not passed as array $file = is_array($file) ? $file : $_FILES[$file]; if ($filename === NULL) { // Use the default filename, with a timestamp pre-pended $filename = time().$file['name']; } if (Kohana::config('upload.remove_spaces') === TRUE) { // Remove spaces from the filename } if ($directory === NULL) { // Use the pre-configured upload directory $directory = Kohana::config('upload.directory', TRUE); } // Make sure the directory ends with a slash $directory = rtrim($directory, '/').'/'; if ( ! is_dir($directory) AND Kohana ::config('upload.create_directories') === TRUE) { // Create the upload directory mkdir($directory, 0777, TRUE); } throw new Kohana_Exception('upload.not_writable', $directory); $path = $directory . $filename; { if ($chmod !== FALSE) { // Set permissions on filename } // Return new file path return $path; } return FALSE; } /* Validation Rules */ /** * Tests if input data is valid file type, even if no upload is present. * * @param array $_FILES item * @return bool */ public static function valid($file) { AND isset($file['error']) AND isset($file['tmp_name']) AND isset($file['size'])); } /** * Tests if input data has valid upload data. * * @param array $_FILES item * @return bool */ public static function required (array $file) { return (isset($file['tmp_name']) AND isset($file['error']) AND (int) $file['error'] === UPLOAD_ERR_OK); } /** * Validation rule to test if an uploaded file is allowed by extension. * * @param array $_FILES item * @param array allowed file extensions * @return bool */ public static function type (array $file, array $allowed_types) { if ((int) $file['error'] !== UPLOAD_ERR_OK) return TRUE; // Get the default extension of the file // Get the mime types for the extension $mime_types = Kohana::config('mimes.'.$extension); // Make sure there is an extension, that the extension is allowed, and that mime types exist } /** * Validation rule to test if an uploaded file is allowed by file size. * File sizes are defined as: SB, where S is the size (1, 15, 300, etc) and * B is the byte modifier: (B)ytes, (K)ilobytes, (M)egabytes, (G)igabytes. * Eg: to limit the size to 1MB or less, you would use "1M". * * @param array $_FILES item * @param array maximum file size * @return bool */ public static function size (array $file, array $size) { if ((int) $file['error'] !== UPLOAD_ERR_OK) return TRUE; // Only one size is allowed return FALSE; // Make the size into a power of 1024 { case 'G': $size = intval($size) * pow(1024, 3); break; case 'M': $size = intval($size) * pow(1024, 2); break; case 'K': $size = intval($size) * pow(1024, 1); break; default: $size = intval($size); break; } // Test that the file is under or equal to the max size return ($file['size'] <= $size); } } // End upload
|