<?php 
define('OWUPLOAD_PATH', "../../data/images");                                  
define('OWUPLOAD_URI', "../../data/images");

$owupload_allowed_extensions = array('jpg','jpeg','png','gif','bmp');
$rfc1867 = function_exists('apc_fetch') && ini_get('apc.rfc1867');

$id = $_POST['APC_UPLOAD_PROGRESS'];
if(empty($id)) $id = $_GET['id'];

if($_SERVER['REQUEST_METHOD']=='POST') 
{
    $file = $_FILES['owImage'];
    $image = $file['tmp_name'];
    
    $max_upload_size = ini_max_upload_size();
    $ext = strtolower(substr(strrchr($file['name'], '.'), 1));
    @$size = getimagesize($image);    
    $filename = $id.'.'.$ext;
    $path = OWUPLOAD_PATH.'/'.$filename;
    
    if(!move_uploaded_file($image, $path)) {
        owupload_error('Impossible de déplacer le fichier.');
    }
    
    if($rfc1867) {
        $status = apc_fetch('upload_'.$id);
    }
    if(!$status) {
        $status = array();
    }
    $status['done'] = 1;
    $status['width'] = $size[0];
    $status['url'] = owupload_file_uri($filename);
    
    if($rfc1867) {
        apc_store('upload_'.$id, $status);
    }

    owupload_output($status, $rfc1867);
    exit;
} 
else if(isset($_GET['check'])) 
{
    $check = $_GET['check'];
    
    if($rfc1867) {
        $status = apc_fetch('upload_'.$check);
        
        if($status['total'] > 500000 && $status['current']/$status['total'] < 0.9 ) { // Large file and we are < 90% complete
		$status['interval'] = 3000;
	} else if($status['total'] > 200000 && $status['current']/$status['total'] < 0.8 ) { // Is this a largeish file and we are < 80% complete
		$status['interval'] = 2000;
	} else {
		$status['interval'] = 1000;
	}
        
        owupload_output($status);
    } else {
        $status = array();
        $status['noprogress'] = true;
        foreach($owupload_allowed_extensions as $e) {
            if(file_exists(OWUPLOAD_PATH.'/'.$check.'.'.$e)) {
                $ext = $e;
                break;
            }
        }
        if($ext) {
            $status['url'] = owupload_file_uri($check.'.'.$ext);
        }
        owupload_output($status);
    }
}

// Display error
function owupload_error($msg) 
{
    echo owupload_output(array('error' => $msg)); 
}

function owupload_output($status, $showLoadingMsg = false) 
{
    $script = '
        try 
		{
            '.(($_SERVER['REQUEST_METHOD']=='POST') ? 'top.' : '').'owUploadButton.statusCb('.json_encode($status).');
        } catch(e) { alert(e.message); }
    ';
    
    if($_SERVER['REQUEST_METHOD']=='POST') 
	{
        echo '<script>'.$script.'</script>';
    } 
	else 
	{
        echo $script;
    }
    
    if($_SERVER['REQUEST_METHOD']=='POST' && $showLoadingMsg) 
	{      

		echo 
		<<<END
			<html><body>
				<div id="uploadingMessage" style="text-align: center; font-size: 14px;">
					<img src="owEditor/loader.gif" style="float: right; margin-right: 40px;" />
					<strong>Upload en cours...</strong><br />
				</div>
			</body></html>
END;
    }
    exit;
}

function owupload_file_uri($filename) 
{
	$path = $_SERVER['PHP_SELF'];
	$file = basename ($path);
	if($_SERVER['SERVER_PORT']!=80)	$base = str_replace($file,"", $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['SCRIPT_NAME']);
	else $base = str_replace($file,"", $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);
	$base = str_replace('/admin/owEditor/','', $base);
	//$folder = "http://".$base."/data/images";	// => 127*/.../*images
	$folder = "../../data/images";	// => 127*/.../*images
    return $folder.'/'.$filename;
}

function ini_max_upload_size() 
{
    $post_size = ini_get('post_max_size');
    $upload_size = ini_get('upload_max_filesize');
    if(!$post_size) $post_size = '8M';
    if(!$upload_size) $upload_size = '2M';
    
    return min( ini_bytes_from_string($post_size), ini_bytes_from_string($upload_size) );
}

function ini_bytes_from_string($val) 
{
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    switch($last) {
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
    return $val;
}

function bytes_to_readable( $bytes ) 
{
    if ($bytes<=0)
        return '0 Byte';
   
    $convention=1000; //[1000->10^x|1024->2^x]
    $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
    $e=floor(log($bytes,$convention));
    return round($bytes/pow($convention,$e),2).' '.$s[$e];
}
?>