/**
  * Handles the upload process of a media, sets the mime_type, when success
  *
  * @author Max Milbers
  * @param string $urlfolder relative url of the folder where to store the media
  * @return name of the uploaded file
  */
 function uploadFile($urlfolder, $overwrite = false)
 {
     if (empty($urlfolder) or strlen($urlfolder) < 2) {
         vmError('Not able to upload file, give path/url empty/too short ' . $urlfolder . ' please correct path in your virtuemart config');
         return false;
     }
     if (!class_exists('JFile')) {
         require VMPATH_LIBS . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php';
     }
     $media = vRequest::getFiles('upload');
     if (empty($media)) {
         vmError('Recieved no data for upload', 'Recieved no data for upload');
         vmdebug('no data in uploadFile ', $_FILES);
         return false;
     }
     $app = JFactory::getApplication();
     switch ($media['error']) {
         case 0:
             $path_folder = str_replace('/', DS, $urlfolder);
             //Sadly it does not work to upload unicode files,
             // the ä for example is stored on windows as ä, this seems to be a php issue (maybe a config setting)
             /*	$dotPos = strrpos($media['name'],'.');
             				$safeMediaName = vmFile::makeSafe( $media['name'] );
             				if($dotPos!==FALSE){
             					$mediaPure = substr($media['name'],0,$dotPos);
             					$mediaExtension = strtolower(substr($media['name'],$dotPos));
             				}
             			*/
             $safeMediaName = vmFile::makeSafe($media['name']);
             $media['name'] = $safeMediaName;
             $mediaPure = JFile::stripExt($media['name']);
             $mediaExtension = '.' . strtolower(JFile::getExt($media['name']));
             vmdebug('uploadFile $safeMediaName', $media['name'], $safeMediaName, $mediaPure, $mediaExtension);
             if (!$overwrite) {
                 while (file_exists(VMPATH_ROOT . DS . $path_folder . $mediaPure . $mediaExtension)) {
                     $mediaPure = $mediaPure . rand(1, 9);
                 }
             }
             $media['name'] = $this->file_name = $mediaPure . $mediaExtension;
             if ($this->file_is_forSale == 0) {
                 JFile::upload($media['tmp_name'], VMPATH_ROOT . DS . $path_folder . $media['name']);
             } else {
                 JFile::upload($media['tmp_name'], $path_folder . $media['name']);
             }
             $this->file_mimetype = $media['type'];
             $this->media_published = 1;
             $app->enqueueMessage(vmText::sprintf('COM_VIRTUEMART_FILE_UPLOAD_OK', VMPATH_ROOT . DS . $path_folder . $media['name']));
             return $media['name'];
         case 1:
             //uploaded file exceeds the upload_max_filesize directive in php.ini
             $app->enqueueMessage(vmText::sprintf('COM_VIRTUEMART_PRODUCT_FILES_ERR_UPLOAD_MAX_FILESIZE', $media['name'], $media['tmp_name']), 'warning');
             break;
         case 2:
             //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
             $app->enqueueMessage(vmText::sprintf('COM_VIRTUEMART_PRODUCT_FILES_ERR_MAX_FILE_SIZE', $media['name'], $media['tmp_name']), 'warning');
             break;
         case 3:
             //uploaded file was only partially uploaded
             $app->enqueueMessage(vmText::sprintf('COM_VIRTUEMART_PRODUCT_FILES_ERR_PARTIALLY', $media['name'], $media['tmp_name']), 'warning');
             break;
         case 4:
             //no file was uploaded
             //$vmLogger->warning( "You have not selected a file/image for upload." );
             break;
         default:
             //a default error, just in case!  :)
             //$vmLogger->warning( "There was a problem with your upload." );
             break;
     }
     return false;
 }
 /**
  * Handles the upload process of a media, sets the mime_type, when success
  *
  * @author Max Milbers
  * @param string $urlfolder relative url of the folder where to store the media
  * @return name of the uploaded file
  */
 static function uploadFile($urlfolder, &$obj, $overwrite = false)
 {
     if (empty($urlfolder) or strlen($urlfolder) < 2) {
         vmError('Not able to upload file, give path/url empty/too short ' . $urlfolder . ' please correct path in your tsmart config');
         return false;
     }
     if (!class_exists('JFile')) {
         require VMPATH_LIBS . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php';
     }
     $media = vRequest::getFiles('upload');
     if (empty($media) or !isset($media['error'])) {
         vmError('Recieved no data for upload', 'Recieved no data for upload');
         vmdebug('no data in uploadFile ', $_FILES);
         return false;
     }
     $app = JFactory::getApplication();
     switch ($media['error']) {
         case 0:
             $path_folder = str_replace('/', DS, $urlfolder);
             //Sadly it does not work to upload unicode files,
             // the � for example is stored on windows as ä, this seems to be a php issue (maybe a config setting)
             /*	$dotPos = strrpos($media['name'],'.');
             				$safeMediaName = vmFile::makeSafe( $media['name'] );
             				if($dotPos!==FALSE){
             					$mediaPure = substr($media['name'],0,$dotPos);
             					$mediaExtension = strtolower(substr($media['name'],$dotPos));
             				}
             			*/
             $safeMediaName = vmFile::makeSafe($media['name']);
             $media['name'] = $safeMediaName;
             $mediaPure = JFile::stripExt($media['name']);
             $mediaExtension = strtolower(JFile::getExt($media['name']));
             if (empty($mediaExtension)) {
                 vmError('Invalid media; no extension ' . $media['name']);
                 return false;
             }
             if (!$overwrite) {
                 $i = 0;
                 while (file_exists(VMPATH_ROOT . DS . $path_folder . $mediaPure . '.' . $mediaExtension) and $i < 20) {
                     $mediaPure = $mediaPure . rand(1, 9);
                     $i++;
                 }
             }
             $media['name'] = $obj->file_name = $mediaPure . '.' . $mediaExtension;
             $type = exif_imagetype($media['tmp_name']);
             if ($type) {
                 vmdebug('Recognised image');
                 if (!self::checkMediaType($type, $mediaExtension)) {
                     vmError('Invalid media, image type does not fit to extension ' . $media['name']);
                     return false;
                 }
             } else {
                 if (!vmAccess::manager('media.potdang')) {
                     $m2ext = self::getMime2ExtArray();
                     $realMime = self::getMimeType($media['tmp_name']);
                     vmdebug('Uploading file $realMime', $realMime, $m2ext);
                     if (isset($m2ext[$realMime])) {
                         //if($rExt = array_search($realMime,$m2ext)!==false){
                         $rExt = $m2ext[$realMime];
                         $hless = self::getSafeExt2MimeArray();
                         vmdebug('Recognised nonimage, not safe ext', $rExt, $hless);
                         //$rExt = $hless[$realMime];
                         if (!isset($hless[$rExt])) {
                             vmError('Invalid media type, you are not allowed to upload this file, file type does not fit to mime ' . $media['name']);
                             return false;
                         } else {
                             vmdebug('Uploading file ', $hless[$rExt]);
                         }
                     } else {
                         return false;
                     }
                 }
             }
             if ($obj->file_is_forSale == 0) {
                 JFile::upload($media['tmp_name'], VMPATH_ROOT . DS . $path_folder . $media['name']);
             } else {
                 JFile::upload($media['tmp_name'], $path_folder . $media['name']);
             }
             $obj->file_mimetype = $media['type'];
             $obj->media_published = 1;
             $app->enqueueMessage(tsmText::sprintf('com_tsmart_FILE_UPLOAD_OK', VMPATH_ROOT . DS . $path_folder . $media['name']));
             return $media['name'];
         case 1:
             //uploaded file exceeds the upload_max_filesize directive in php.ini
             $app->enqueueMessage(tsmText::sprintf('com_tsmart_PRODUCT_FILES_ERR_UPLOAD_MAX_FILESIZE', $media['name'], $media['tmp_name']), 'warning');
             break;
         case 2:
             //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
             $app->enqueueMessage(tsmText::sprintf('com_tsmart_PRODUCT_FILES_ERR_MAX_FILE_SIZE', $media['name'], $media['tmp_name']), 'warning');
             break;
         case 3:
             //uploaded file was only partially uploaded
             $app->enqueueMessage(tsmText::sprintf('com_tsmart_PRODUCT_FILES_ERR_PARTIALLY', $media['name'], $media['tmp_name']), 'warning');
             break;
         case 4:
             //no file was uploaded
             //$vmLogger->warning( "You have not selected a file/image for upload." );
             break;
         default:
             //a default error, just in case!  :)
             //$vmLogger->warning( "There was a problem with your upload." );
             break;
     }
     return false;
 }