Files
grzanieplus.pl/plugins/stProgressBarPlugin/lib/helper/stProgressBarHelper.php
2025-03-12 17:06:23 +01:00

194 lines
7.3 KiB
PHP

<?php
/**
* SOTESHOP/stProgressBarPlugin
*
* Ten plik należy do aplikacji stProgressBarPlugin opartej na licencji (Professional License SOTE).
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stProgressBarPlugin
* @subpackage helpers
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: stProgressBarHelper.php 10047 2010-12-29 16:32:36Z michal $
* @author Michal Prochowski <michal.prochowski@sote.pl>,
*/
use_helper('stPartial');
/**
*
* @param stProgressBarTaskInterface $task
* @param array $options
* @return string
*/
function st_progress_bar(stProgressBarTaskInterface $task, array $options = [])
{
$className = get_class($task);
$parameters = [
'name' => $className,
'class' => $className,
'method' => 'execute',
'steps' => $task->count(),
'step' => 0,
'msg'=> '',
];
if (isset($options['application']))
{
$parameters['application'] = $options['application'];
}
$content = st_get_component('stProgressBar', 'initProgressBar', $parameters);
$content .= progress_bar_update($className, 0, $options);
return $content;
}
/**
* Obsługa paska postępu
*
* @param mixed $task
* @param string $className nazwa klasy, w której znajduję się metoda do wywołania
* @param string $methodName nazwa metody, która ma zostać wywołana z numerem kroku jako parametrem
* @param integer $steps ilość kroków
*
* @package stProgressBarPlugin
* @subpackage helpers
* @deprecated since 8.1.4.0 use st_progress_bar()
*/
function progress_bar($task, $className = null, $methodName = null, $steps = null, $params = array())
{
if (null === $className && is_object($task) && $task instanceof stProgressBarTaskInterface)
{
/**
* @var stProgressBarTaskInterface $task
*/
$name = get_class($task);
$className = $name;
$steps = $task->count();
$methodName = 'execute';
}
elseif (null !== $task)
{
$name = $task;
if (class_exists($className))
{
$task = new $className();
}
else
{
throw new Exception("Class $className don't exist.");
}
}
else
{
throw new Exception("Variable task must be an stProgressBarTaskInterface instance or a string name");
}
if (is_callable(array($task, $methodName)))
{
if (is_int($steps))
{
$parameters = [
'name' => $name,
'class' => $className,
'method' => $methodName,
'steps' => $steps,
'step' => '0',
'msg'=>'',
];
if (function_exists('st_get_component'))
{
return st_get_component('stProgressBar','initProgressBar', $parameters).progress_bar_update($name, 0, $params);
}
else
{
return get_component('stProgressBar','initProgressBar', $parameters).progress_bar_update($name, 0, $params);
}
}
else
{
throw new Exception("Parameter \$steps ($steps) is not integer.");
}
}
else
{
throw new Exception("Method $methodName in class $className don't exist.");
}
}
function progress_bar_error($title, $text)
{
$tag = content_tag('div',content_tag('h2',$title).content_tag('p',$text,array('style'=>'padding-left: 10px; padding-right: 10px;')),array('class'=>'form-errors', 'style'=>'margin-top: 10px;'));
return str_replace(array("'","\n"), array("\\'","\\n'\n\t+'"), $tag);
}
function progress_bar_update($name, $step, $params) {
$i18n = sfContext::getInstance()->getI18N();
sfContext::getInstance()->getResponse()->addJavascript(sfConfig::get('sf_prototype_web_dir').'/js/prototype');
if (!isset($params['msg']))
{
$params['msg'] = "";
}
return '<script type="text/javascript">
function updatePB(url, loops, item, item_msg, alert_msg) {
if (loops<3) {
new Ajax.Request(url, {
evalJS: true,
method: \'post\',
onSuccess: function(transport) {
if (transport.responseText.match(\'stPrograssBar-main-div\')!=null)
{
$(item).update(transport.responseText);
if ($(item_msg)) $(item_msg).update(\'\');
} else {
if (loops<2) {
if ($(item_msg)) $(item_msg).update(\''.$i18n->__('Wystąpił problem podczas wykonywania operacji, ponowna próba za', null, 'stProgressBar').' \'+((loops+1)*10)+\' '.$i18n->__('sekund', null, 'stProgressBar').'\');
setTimeout(\'updatePB( "\'+url+\'", \'+(loops+1)+\',"\'+item+\'", "\'+item_msg+\'", "\'+alert_msg+\'")\', (loops+1)*10000);
} else {
updatePB( url, loops+1, item, item_msg, alert_msg);
}
}
},
onFailure: function(transport) {
if (loops<2) {
if ($(item_msg)) $(item_msg).update(\''.$i18n->__('Wystąpił problem podczas wykonywania operacji, ponowna próba za', null, 'stProgressBar').' \'+((loops+1)*10)+\' '.$i18n->__('sekund', null, 'stProgressBar').'\');
setTimeout(\'updatePB( "\'+url+\'", \'+(loops+1)+\',"\'+item+\'", "\'+item_msg+\'", "\'+alert_msg+\'")\', (loops+1)*10000);
} else {
updatePB( url, loops+1, item, item_msg, alert_msg);
}
}
});
} else {
if ($(item_msg)) $(item_msg).update(unescape(alert_msg));
'.
((isset($params['reload_url'])&& isset($params['reload_time']))?
'setTimeout(\'window.location="'.$params['reload_url'].'"\','.$params['reload_time'].');'
:
'')
.'
}
};
updatePB(\''.url_for('stProgressBar/process?name='.$name.'&step='.$step).'\',
0,
\'stProgressBar-'.$name.'\',
\'stProgressBar-'.trim($name).'message\',
escape(\''.
progress_bar_error($i18n->__('Wystąpił problem podczas wykonywania zadania', null, 'stProgressBar').': <strong>'.$params['msg'].'</strong>', (!(isset($params['fatal_msg']) && strlen($params['fatal_msg'])))?
$i18n->__('Nie można połączyć sie z serwerem w celu wykonania procesu. Prosze o kontakt z serwisem oprogramowania www.serwis.sote.pl.', null, 'stProgressBar'):$params['fatal_msg']).'\')
);
</script>';
}