protected function verify_file_upload()
{
global $locale;
require_once INCLUDES . "infusions_include.php";
if ($this->field_config['multiple']) {
if (!empty($_FILES[$this->field_config['input_name']]['name'])) {
$upload = array('error' => 0);
if ($this->field_config['max_count'] < count($_FILES[$this->field_config['input_name']]['name'])) {
$this->stop();
$upload = array('error' => 1);
addNotice('danger', $locale['df_424']);
self::setInputError($this->field_name);
} else {
for ($i = 0; $i <= count($_FILES[$this->field_config['input_name']]['name']) - 1; $i++) {
if ($this->field_config['max_count'] == $i) {
break;
}
$source_file = $this->field_config['input_name'];
$target_file = $_FILES[$this->field_config['input_name']]['name'][$i];
$target_folder = $this->field_config['path'];
$valid_ext = $this->field_config['valid_ext'];
$max_size = $this->field_config['max_byte'];
$query = '';
if (is_uploaded_file($_FILES[$source_file]['tmp_name'][$i])) {
if (stristr($valid_ext, ',')) {
$valid_ext = explode(",", $valid_ext);
} elseif (stristr($valid_ext, '|')) {
$valid_ext = explode("|", $valid_ext);
} else {
$this->stop();
addNotice('warning', 'Fusion Dynamics invalid accepted extension format. Please use either | or ,');
}
$file = $_FILES[$source_file];
$file_type = $file['type'][$i];
if ($target_file == "" || preg_match("/[^a-zA-Z0-9_-]/", $target_file)) {
$target_file = stripfilename(substr($file['name'][$i], 0, strrpos($file['name'][$i], ".")));
}
$file_ext = strtolower(strrchr($file['name'][$i], "."));
$file_dest = rtrim($target_folder, '/') . '/';
$upload_file = array("source_file" => $source_file, "source_size" => $file['size'][$i], "source_ext" => $file_ext, "target_file" => $target_file . $file_ext, "target_folder" => $target_folder, "valid_ext" => $valid_ext, "max_size" => $max_size, "query" => $query, "error" => 0);
if ($file['size'][$i] > $max_size) {
// Maximum file size exceeded
$upload['error'] = 1;
} elseif (!in_array($file_ext, $valid_ext)) {
// Invalid file extension
$upload['error'] = 2;
} else {
$target_file = filename_exists($file_dest, $target_file . $file_ext);
$upload_file['target_file'] = $target_file;
move_uploaded_file($file['tmp_name'][$i], $file_dest . $target_file);
if (function_exists("chmod")) {
chmod($file_dest . $target_file, 0644);
}
if ($query && !dbquery($query)) {
// Invalid query string
$upload['error'] = 3;
if (file_exists($file_dest . $target_file)) {
unlink($file_dest . $target_file);
}
}
}
if ($upload['error'] !== 0) {
if (file_exists($file_dest . $target_file . $file_ext)) {
@unlink($file_dest . $target_file . $file_ext);
}
}
$upload['source_file'][$i] = $upload_file['source_file'];
$upload['source_size'][$i] = $upload_file['source_size'];
$upload['source_ext'][$i] = $upload_file['source_ext'];
$upload['target_file'][$i] = $upload_file['target_file'];
$upload['target_folder'][$i] = $upload_file['target_folder'];
$upload['valid_ext'][$i] = $upload_file['valid_ext'];
$upload['max_size'][$i] = $upload_file['max_size'];
$upload['query'][$i] = $upload_file['query'];
$upload['type'][$i] = $file_type;
} else {
// File not uploaded
$upload['error'] = array("error" => 4);
}
if ($upload['error'] !== 0) {
$this->stop();
switch ($upload['error']) {
case 1:
// Maximum file size exceeded
addNotice('danger', sprintf($locale['df_416'], parsebytesize($this->field_config['max_byte'])));
self::setInputError($this->field_name);
break;
case 2:
// Invalid File extensions
addNotice('danger', sprintf($locale['df_417'], $this->field_config['valid_ext']));
self::setInputError($this->field_name);
break;
case 3:
// Invalid Query String
addNotice('danger', $locale['df_422']);
self::setInputError($this->field_name);
break;
case 4:
// File not uploaded
addNotice('danger', $locale['df_423']);
self::setInputError($this->field_name);
break;
}
}
}
}
return $upload;
} else {
return array();
}
} else {
if (!empty($_FILES[$this->field_config['input_name']]['name']) && is_uploaded_file($_FILES[$this->field_config['input_name']]['tmp_name']) && $this->safe()) {
$upload = upload_file($this->field_config['input_name'], $_FILES[$this->field_config['input_name']]['name'], $this->field_config['path'], $this->field_config['valid_ext'], $this->field_config['max_byte']);
if ($upload['error'] != 0) {
$this->stop();
// return FALSE
switch ($upload['error']) {
case 1:
// Maximum file size exceeded
addNotice('danger', sprintf($locale['df_416'], parsebytesize($this->field_config['max_byte'])));
self::setInputError($this->field_name);
break;
case 2:
// Invalid File extensions
addNotice('danger', sprintf($locale['df_417'], $this->field_config['valid_ext']));
self::setInputError($this->field_name);
break;
case 3:
// Invalid Query String
addNotice('danger', $locale['df_422']);
self::setInputError($this->field_name);
break;
case 4:
// File not uploaded
addNotice('danger', $locale['df_423']);
self::setInputError($this->field_name);
break;
}
} else {
return $upload;
}
} else {
return FALSE;
}
}
}