-
Notifications
You must be signed in to change notification settings - Fork 0
Extended Input for Files
An extension to CI_Input to add support for uploaded files.
Extension parses the $_FILES array to reorder the array for better integration with Code Igniter's CI_Upload library.
Use $this->input->file("user_file"); to return an array of uploaded file data to pass to CI_Upload library.
Returned array includes remapped 'key' for ease of use as well as all appropriate $_FILES array key and value pairs.
Note: The class prefix "SM_" and file name should be replaced with the appropriate configuration value ("subclass_prefix") in your config.php file.
Usage:
[code] //gather uploaded file array $file = $this->input->file("user_file"); [/code]
[code] <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/* //******* // // filename: SM_Input.php // author: Zack Brown // date: 7th September 2010 // //******* */
//declare class class SM_Input extends CI_Input { /* //******* // // member variables // //******* */
//original, unprocessed $_FILES array
var $_files = array();
//parsed array of file data
var $files = array();
/*
//*******
//
// internal methods
//
//*******
*/
//class constructor
function SM_Input()
{
//call parent constructor
parent::CI_Input();
//parse and reorder $_FILES array
$this->_clean_input_files();
//debug
log_message("debug", "SM_Input Class Initialized");
}
//parse and reorder $_FILES array
function _clean_input_files()
{
//save current $_FILES array
$this->_files = $_FILES;
//reset array of parsed files
$this->files = array();
//check $_FILES array is valid
if(is_array($this->_files) && count($this->_files) > 0)
{
//reset $_FILES array
$_FILES = array();
//loop through array of $_FILES
foreach($this->_files as $outer_key => $outer_value)
{
//count array of files
$count = (is_array($outer_value['name']) ? count($outer_value['name']) : 0);
//check outer value for array of file data
if($count > 0)
{
//loop through array of file data
foreach($outer_value['name'] as $inner_key => $inner_value)
{
//compile file data array key
$key = $outer_key . ($count > 1 ? "_" . $inner_key : "");
//array of file data
$file = array();
//gather file data from array of outer values
$file['error'] = $outer_value['error'][$inner_key];
$file['name'] = $outer_value['name'][$inner_key];
$file['size'] = $outer_value['size'][$inner_key];
$file['tmp_name'] = $outer_value['tmp_name'][$inner_key];
$file['type'] = $outer_value['type'][$inner_key];
//append file key
$file['key'] = $key;
//save file data to $_FILES array
$_FILES[$key] = $file;
//check for single file
if($count == 1)
{
//save file data to array of parsed data
$this->files[$outer_key] = $file;
}
else
{
//save file data to array of parsed data
$this->files[$outer_key][$inner_key] = $file;
}
}
}
else
{
//append file key
$outer_value['key'] = $outer_key;
//save file data to $_FILES array
$_FILES[$outer_key] = $outer_value;
//save file data to array of parsed data
$this->files[$outer_key] = $outer_value;
}
}
}
}
/*
//*******
//
// helper methods
//
//*******
*/
//fetch an item from parsed array of file data
function file($index = "", $xss_clean = false)
{
//return item from parsed array of files
return $this->_fetch_from_array($this->files, $index, $xss_clean);
}
//fetch an item from original array of $_FILES data
function _file($index = "", $xss_clean = false)
{
//return item from $_FILES array
return $this->_fetch_from_array($this->_files, $index, $xss_clean);
}
//return array of parsed file data
function files()
{
//return parsed file array
return $this->files;
}
//return array of original $_FILES
function _files()
{
//return original $_FILES array
return $this->_files;
}
} [/code]