| 
<?php
/*
 this class will be used for bibivu system to upload files/pictures
 to the right location for each module
 2005-04-20 - v.1.0
 */
 
 class bib_upload{
 var $error            = array();
 var $files            = array();
 var $file_max_size    = 1048576;
 var $_cfg            = array();
 
 function reset_all(){
 $this->error['number']    = 0;
 $this->error['text']    = '';
 $this->error['fatal']    = false;
 $this->files            = array();
 $this->file_new_name    = '';       // replace the name body
 $this->file_overwrite    = false;
 
 $this->file_max_size    = 1048576;
 
 $this->image_convert    = '';       // convert. values :''; 'png'; 'jpeg'; 'gif'
 
 $this->image_resize        = false;    // resize the image
 $this->image_x            = 150;
 $this->image_y            = 150;
 $this->image_ratio        = false;
 $this->image_ratio_no_zoom_in    = false;
 $this->image_ratio_no_zoom_out    = false;
 }
 function bib_upload($cfg){
 $this->reset_all();
 $this->_cfg['id']                = $cfg['id'];
 $this->_cfg['depth']            = $cfg['depth'];
 $this->_cfg['folder_site']        = $cfg['folder_site'];
 $this->_cfg['folder_module']    = $cfg['folder_module'];
 }
 function add_file($file){
 //        print_r($this->error);
 if (!$file) {
 $this->set_error('1000','File upload error. Please try again.',true);
 } else  {
 if(is_array($file['error'])){
 //the files passed is an array of posts, I need to parse it
 $ret = false;
 foreach($file['error'] AS $key=>$value){
 //I need to replace the same structure as the main array
 $f1 = array();
 foreach($file AS $kkey=>$vvalue){
 $f1[$kkey] = $file[$kkey][$key];
 }
 if($ret==false){
 $ret = $this->add_file($f1);
 }
 }
 return $ret;
 } elseif($file['error'] === 0){
 if ($file['name'] == '') {
 $this->set_error('1001','File upload error. Please try again.',true);
 } elseif ($file['size'] > $this->file_max_size ) {
 $this->set_error('1002','File too big.',true);
 }
 } else {
 switch($file['error']) {
 case 0:
 // all is OK
 break;
 case 1:
 $this->set_error($file['error']+2000,'File upload error (the uploaded file exceeds the upload_max_filesize directive in php.ini).',false);
 break;
 case 2:
 $this->set_error($file['error']+2000,'File upload error (the uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form).',false);
 break;
 case 3:
 $this->set_error($file['error']+2000,'File upload error (the uploaded file was only partially uploaded).',false);
 break;
 case 4:
 $this->set_error($file['error']+2000,'File upload error (no file was uploaded).',false);
 break;
 default:
 $this->set_error(2000,'File upload error (unknown error code).',true);
 break;
 }
 return false;
 }
 }
 //there has been a fatal error
 if($this->error['fatal']){
 return false;
 } else {
 $this->files[] = $file;
 }
 return true;
 }
 function new_name($which = 0, $new_name = '', $overwrite = false, $auto_rename = true){
 //this function will apply to the last file uploaded
 $cc = count($this->files);
 if($cc == 0 || empty($this->files)){
 //there are not files to rename
 $this->set_error(3001,'There are not files uploaded yet.',false);
 } else {
 $cc--;
 if($which >= 0 && $which<=$cc)    $cc = $which;
 //if new_name is '', I have to create a random name
 if($new_name == ''){
 $new_name = strtoupper(substr(md5(time()*77+57),0,10));
 }
 $this->files[$cc]['new_name']        = $new_name;
 $this->files[$cc]['overwrite']        = $overwrite;
 $this->files[$cc]['auto_rename']    = $auto_rename;
 }
 }
 
 function resize($which = 0, $new_w=0, $new_h=0, $ratio = false){
 //resize the image keeping the
 $cc = count($this->files);
 if($cc == 0 || empty($this->files)){
 //there are not files to rename
 $this->set_error(3001,'There are not files uploaded yet.',false);
 } else {
 $cc--;
 if($which >= 0 && $which<=$cc)    $cc = $which;
 $this->files[$cc]['new_w']    = $new_w;
 $this->files[$cc]['new_h']    = $new_h;
 $this->files[$cc]['ratio']    = $ratio;
 }
 }
 
 function is_image($which=0, $is_image=true){
 //resize the image keeping the
 $cc = count($this->files);
 if($cc == 0 || empty($this->files)){
 //there are not files to rename
 $this->set_error(3001,'There are not files uploaded yet.',false);
 } else {
 $cc--;
 if($which >= 0 && $which<=$cc)    $cc = $which;
 $this->files[$cc]['is_image']    = $is_image;
 }
 }
 
 function process($module_code){
 if($this->error['fatal']){
 return false;
 }
 if($module_code == ''){
 $this->set_error('3001','Please Pass the module code .',true);
 return false;
 } else {
 $destpath = $this->_cfg['depth'].$this->_cfg['folder_site'].$this->_cfg['folder_module'].$module_code;
 //check if the folder exist, if not, try to create it with chmod=777
 if(!is_dir($destpath)){
 $oldumask = umask(0);
 mkdir($destpath,0777);
 umask($oldumask);
 if(!is_dir($destpath)){
 $this->set_error('3002','Impossible to create the module folder.',true);
 return false;
 }
 } elseif(!is_writable($destpath)) {
 $this->set_error('3003','Module folder is not writable.',true);
 return false;
 }
 $destpath .= '/';
 foreach($this->files AS $key=>$file){
 if(!isset($file['new_name']) || $file['new_name']==''){
 $file['new_name'] = $file['name'];
 }
 $destfile = $destpath.$file['new_name'];
 
 if(isset($file['is_image'])){
 if(isset($file['new_w']) && isset($file['new_h'])){
 //check if I have to resize the file
 $image_hw = @getimagesize($file['tmp_name']);
 if(isset($image_hw) && !empty($image_hw)){
 $picwidth    = $image_hw[0];
 $picheigth    = $image_hw[1];
 if( ($file['new_w'] < $picwidth)  ||
 ($file['new_h'] < $picheigth) ){
 //only reduce
 if(_NETPBM_PATH!=''){
 require_once $this->_cfg['depth'].'files_includes/Transform.php';
 $im = new Image_Transform;
 $im->load($file['tmp_name']);
 if($file['ratio']){
 if($file['new_w'] <  $picwidth){
 $picheigth    = (int)(($file['new_w']*100/$picwidth)*$picheigth/100);
 $picwidth    = $file['new_w'];
 }
 if($file['new_h'] <  $picheigth){
 $picwidth    = (int)(($file['new_h']*100/$picheigth)*$picwidth/100);
 $picheigth    = $file['new_h'];
 }
 } else {
 $picwidth    = $file['new_w'];
 $picheigth    = $file['new_h'];
 }
 $im->resize($picwidth, $picheigth);
 $destfile = $destfile.'.'.$im->getWebSafeFormat();
 $destfile = $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
 if(!$destfile){
 $this->set_error(4003,'Error renaming the file.',false);
 } else {
 $im->save($destfile, $im->getWebSafeFormat());
 $this->files[$key]['new_name'] = basename($destfile);
 $im->free();
 }
 } else {
 //is not an image or the file is not a compatible pic
 $this->set_error(4002,'NETPBM path not set.',false);
 }
 } else {
 //not resize is necessary
 $destfile = $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
 if(!$destfile){
 $this->set_error(4003,'Error renaming the file.',false);
 } else {
 move_uploaded_file($file['tmp_name'],$destfile);
 }
 }
 } else {
 //is not an image or the file is not a compatible pic
 $this->set_error(4001,'The file '.$file['name'].' is not resizable.',false);
 }
 } else {
 //the image is not resized
 if(_NETPBM_PATH!=''){
 require_once $this->_cfg['depth'].'files_includes/Transform.php';
 $im = new Image_Transform;
 $im->load($file['tmp_name']);
 $destfile = $destfile.'.'.$im->getWebSafeFormat();
 $destfile = $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
 if(!$destfile){
 $this->set_error(4003,'Error renaming the file.',false);
 } else {
 $im->save($destfile, $im->getWebSafeFormat());
 $this->files[$key]['new_name'] = basename($destfile);
 $im->free();
 }
 $im->save($destfile, $im->getWebSafeFormat());
 $this->files[$key]['new_name'] = basename($destfile);
 $im->free();
 } else {
 $destfile = $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
 if(!$destfile){
 $this->set_error(4003,'Error renaming the file.',false);
 } else {
 move_uploaded_file($file['tmp_name'],$destfile);
 }
 }
 }
 } else {
 //not a pic
 $destfile = $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
 if(!$destfile){
 $this->set_error(4003,'Error renaming the file.',false);
 } else {
 move_uploaded_file($file['tmp_name'],$destfile);
 }
 }
 if(file_exists($file['tmp_name'])){
 //cleaning
 @unlink($file['tmp_name']);
 }
 }
 }
 //there has been a fatal error
 if($this->error['fatal']){
 return false;
 } else {
 return $this->files;
 }
 }
 function _check_filename($name, $overwrite, $auto_rename){
 if($overwrite == false){
 if(file_exists($name)){
 if($auto_rename == true){
 ereg('\.([^\.]*$)', $name, $ext);
 $body = substr($name, 0, (strlen($name) - strlen($ext))-1);
 $i = 1;
 while (file_exists($name)) {
 $this->name = $body.'_'.$i.'.'.$ext;
 $i++;
 }
 } else {
 return false;
 }
 } else {
 //file do not exist
 }
 } else {
 //overwrite the file
 }
 return $name;
 }
 
 function set_error($number, $text, $fatal = false){
 $this->error['number']    = $number;
 $this->error['text']    = $text;
 $this->error['fatal']    = $fatal;
 }
 }
 ?>
 |