set_file($file); $this->set_destination($destination); $this->set_permissions($permissions); $this->set_extensions($extensions); $this->set_output_messages('direct'); if (oos_is_not_null($this->file) && oos_is_not_null($this->destination)) { $this->set_output_messages('session'); if ( ($this->parse() == TRUE) && ($this->save() == TRUE) ) { return TRUE; } else { return FALSE; } } } public function parse() { global $oMessage, $aLang; $file = array(); if (isset($_FILES[$this->file])) { $file = array('name' => $_FILES[$this->file]['name'], 'type' => $_FILES[$this->file]['type'], 'size' => $_FILES[$this->file]['size'], 'tmp_name' => $_FILES[$this->file]['tmp_name']); } if ( isset($file['tmp_name']) && oos_is_not_null($file['tmp_name']) && ($file['tmp_name'] != 'none') && is_uploaded_file($file['tmp_name']) ) { if (oos_is_not_null($file['size']) and ($file['size'] > 2048000)) { if ($this->message_location == 'direct') { $oMessage->add('upload', $aLang['error_file_too_big'], 'error'); } else { $oMessage->add_session('upload', $aLang['error_file_too_big'], 'error'); } return FALSE; } if (sizeof($this->extensions) > 0) { if (!in_array(strtolower(substr($file['name'], strrpos($file['name'], '.')+1)), $this->extensions)) { if ($this->message_location == 'direct') { $oMessage->add('upload', $aLang['error_filetype_not_allowed'], 'error'); } else { $oMessage->add_session('upload', $aLang['error_filetype_not_allowed'], 'error'); } return FALSE; } } $this->set_file($file); $this->set_filename($file['name']); $this->set_tmp_filename($file['tmp_name']); return $this->check_destination(); } else { if ($this->message_location == 'direct') { $oMessage->add('upload', $aLang['warning_no_file_uploaded'], 'warning'); } else { $oMessage->add_session('upload', $aLang['warning_no_file_uploaded'], 'warning'); } return FALSE; } } public function save() { global $oMessage, $aLang; if (substr($this->destination, -1) != '/') $this->destination .= '/'; if (move_uploaded_file($this->file['tmp_name'], $this->destination . $this->filename)) { chmod($this->destination . $this->filename, $this->permissions); $oMessage->add_session('upload', $aLang['success_file_saved_successfully'], 'success'); return TRUE; } else { if ($this->message_location == 'direct') { $oMessage->add('upload', $aLang['error_file_not_saved'], 'error'); } else { $oMessage->add_session('upload', $aLang['error_file_not_saved'], 'error'); } return FALSE; } } public function set_file($file) { $this->file = $file; } public function set_destination($destination) { $this->destination = $destination; } public function set_permissions($permissions) { $this->permissions = octdec($permissions); } public function set_filename($filename) { $this->filename = $filename; } public function set_tmp_filename($filename) { $this->tmp_filename = $filename; } public function set_extensions($extensions) { if (oos_is_not_null($extensions)) { if (is_array($extensions)) { $this->extensions = $extensions; } else { $this->extensions = array($extensions); } } else { $this->extensions = array(); } } public function check_destination() { global $oMessage, $aLang; if (!is_writeable($this->destination)) { if (is_dir($this->destination)) { if ($this->message_location == 'direct') { $oMessage->add('upload', $aLang['error_destination_not_writeable'], 'error'); } else { $oMessage->add_session('upload', $aLang['error_destination_not_writeable'], 'error'); } } else { if ($this->message_location == 'direct') { $oMessage->add('upload', $aLang['error_destination_does_not_exist'], 'error'); } else { $oMessage->add_session('upload', $aLang['error_destination_does_not_exist'], 'error'); } } return FALSE; } else { return TRUE; } } public function set_output_messages($location) { switch ($location) { case 'session': $this->message_location = 'session'; break; case 'direct': default: $this->message_location = 'direct'; break; } } }