1
0
Fork 0
feedizer-php/htdocs/libraries/formsgeneration/form_upload_progress.php
2015-11-13 23:51:46 +01:00

196 lines
5.7 KiB
PHP

<?php
/*
* form_upload_progress.php
*
* @(#) $Id: form_upload_progress.php,v 1.4 2011/03/14 08:38:29 mlemos Exp $
*
*/
class form_upload_progress_class extends form_custom_class
{
var $server_validate=0;
var $upload_identifier='';
var $monitor='';
var $monitor_action='';
var $feedback_element='';
var $feedback_format='{PROGRESS}%';
var $wait_time=10;
var $started = 0;
var $uploaded=0;
var $total=0;
var $remaining=0;
var $average_speed=0;
var $current_speed=0;
var $last_feedback='';
var $start_time=0;
Function AddInput(&$form, $arguments)
{
if(!function_exists('uploadprogress_get_info'))
return('the upload progress extension is not available in this PHP installation');
if(IsSet($arguments['FeedbackElement']))
{
if(strlen($arguments['FeedbackElement'])==0)
return('it was not specified a valid feedback element identifier');
if(IsSet($arguments['FeedbackFormat']))
{
if(strlen($arguments['FeedbackFormat'])==0)
return('it was not specified a valid feedback format');
$this->feedback_format=$arguments['FeedbackFormat'];
}
$this->feedback_element=$arguments['FeedbackElement'];
}
$this->upload_identifier=uniqid($this->input);
$this->monitor=$this->GenerateInputID($form, $this->input, 'monitor');
if(strlen($error=$form->ConnectFormToInput($this->input, 'ONSUBMITTING', 'Monitor', array()))
|| strlen($error=$form->AddInput(array(
'TYPE'=>'hidden',
'ID'=>'UPLOAD_IDENTIFIER',
'NAME'=>'UPLOAD_IDENTIFIER',
'VALUE'=>$this->upload_identifier
)))
|| strlen($error= $form->AddInput(array(
'TYPE'=>'custom',
'NAME'=>$this->monitor,
'ID'=>$this->monitor,
'CustomClass'=>'form_ajax_submit_class',
'TargetInput'=>$this->input,
'ONTIMEOUT'=>''
))))
return($error);
return('');
}
Function AddInputPart(&$form)
{
$context=array(
'Parameters'=>array(
'UPLOAD_IDENTIFIER'=>$this->upload_identifier
),
'RandomParameter'=>'r'
);
if(strlen($error=$form->GetJavascriptConnectionAction('f', $this->input, $this->monitor, 'ONMONITOR', 'Load', $context, $monitor)))
return($error);
$eol=$form->end_of_line;
$javascript='<script type="text/javascript" defer="defer">'.$eol."<!--\n";
$javascript.='function '.$this->input.'_monitor(f)'.$eol.'{'.$eol;
$javascript.=$monitor;
$javascript.='}'.$eol.'// -->'.$eol.'</script>';
if(strlen($error=$form->AddDataPart($javascript))
|| strlen($error=$form->AddInputPart('UPLOAD_IDENTIFIER'))
|| strlen($error=$form->AddInputPart($this->monitor)))
return($error);
return('');
}
Function GetJavascriptConnectionAction(&$form, $form_object, $from, $event, $action, &$context, &$javascript)
{
switch($action)
{
case 'Monitor':
$javascript='window.setTimeout('.$form->EncodeJavascriptString($this->input.'_monitor();').', 10);';
break;
default:
return($this->DefaultGetJavascriptConnectionAction($form, $form_object, $from, $event, $action, $context, $javascript));
}
return('');
}
Function FormatNumber($number)
{
if($number<1024)
return($number);
$number=intval($number/1024);
if($number<1024)
return($number.'K');
$number=intval($number/1024);
if($number<1024)
return($number.'M');
$number=intval($number/1024);
return($number.'G');
}
Function FormatTime($time)
{
if($time<60)
return(sprintf('00:%02d', $time));
if($time<3600)
return(sprintf('00:%02d:%02d', intval($time/60), $time % 60));
return(sprintf('%02d:%02d:%02d', intval($time/3600), intval($time/60) % 60, $time % 60));
}
Function PostMessage(&$form, $message, &$processed)
{
switch($message['Event'])
{
case 'load':
$more=0;
$id=$_REQUEST['UPLOAD_IDENTIFIER'];
if($this->started)
{
$progress=uploadprogress_get_info($id);
if(IsSet($progress))
$more=1;
else
$this->uploaded=$this->total;
}
else
{
if($this->start_time==0)
{
$this->uploaded=$this->total=$this->remaining=$this->average_speed=$this->current_speed=0;
$this->last_feedback='';
$this->start_time=time();
}
$progress=uploadprogress_get_info($id);
if(IsSet($progress))
{
$this->started=1;
$more=1;
}
elseif(time()-$this->start_time<$this->wait_time)
$more=1;
}
$message['Actions']=array();
if(strlen($this->feedback_element))
{
if(IsSet($progress))
{
$this->uploaded=$progress['bytes_uploaded'];
$this->total=$progress['bytes_total'];
$this->remaining=$progress['est_sec'];
$this->average_speed=$progress['speed_average'];
$this->current_speed=$progress['speed_last'];
}
$feedback=($this->total ? str_replace('{PROGRESS}', intval($this->uploaded*100.0/$this->total), str_replace('{ACCURATE_PROGRESS}', $this->uploaded*100.0/$this->total, str_replace('{UPLOADED}', $this->FormatNumber($this->uploaded), str_replace('{TOTAL}', $this->FormatNumber($this->total), str_replace('{REMAINING}', $this->FormatTime($this->remaining), str_replace('{AVERAGE_SPEED}', $this->FormatNumber($this->average_speed), str_replace('{CURRENT_SPEED}', $this->FormatNumber($this->current_speed), $this->feedback_format))))))) : '');
if(strcmp($this->last_feedback, $feedback))
{
$message['Actions'][]=array(
'Action'=>'ReplaceContent',
'Container'=>$this->feedback_element,
'Content'=>$feedback
);
$this->last_feedback=$feedback;
}
}
if($more)
{
$message['Actions'][]=array(
'Action'=>'Wait',
'Time'=>1
);
}
$message['More']=$more;
break;
}
return($form->ReplyMessage($message, $processed));
}
Function LoadInputValues(&$form, $submitted)
{
return($form->SetInputValue('UPLOAD_IDENTIFIER', $this->upload_identifier));
}
};
?>