Added autoloader to plugin loader, executor improvements
This commit is contained in:
84
plugins/executor/Script.php
Normal file
84
plugins/executor/Script.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace VfxApply\Plugin\Executor;
|
||||
|
||||
use VfxApply\Plugin;
|
||||
use VfxApply\Input;
|
||||
use VfxApply\Output;
|
||||
use VfxApply\Preset;
|
||||
|
||||
class Script
|
||||
{
|
||||
/** @var array Variables */
|
||||
protected $vars = [];
|
||||
|
||||
protected $plugin;
|
||||
|
||||
public function setPlugin($plugin)
|
||||
{
|
||||
$this->plugin = $plugin;
|
||||
}
|
||||
|
||||
public function set($k,$v)
|
||||
{
|
||||
$this->vars[$k] = $v;
|
||||
}
|
||||
|
||||
public function addOperation(Operation $operation)
|
||||
{
|
||||
$operation->setScript($this);
|
||||
$this->operations[] = $operation;
|
||||
}
|
||||
|
||||
public function addHelper($name, Helper $helper)
|
||||
{
|
||||
$helper->setScript($this);
|
||||
$this->helpers[$name] = $helper;
|
||||
}
|
||||
|
||||
public function getHelper($name)
|
||||
{
|
||||
return $this->helpers[$name];
|
||||
}
|
||||
|
||||
public function execute(array $env)
|
||||
{
|
||||
$env = $this->buildEnvironment($env, $this->vars);
|
||||
//print_r($env);
|
||||
foreach ($this->operations as $operation) {
|
||||
//printf("Executing: %s\n", $operation->getInfo());
|
||||
$dialog = $this->plugin->createDialog(DIALOG_PROGRESS, $operation->getInfo());
|
||||
$dialog->show();
|
||||
$operation->execute($env, $dialog);
|
||||
unset($dialog);
|
||||
}
|
||||
}
|
||||
|
||||
private function buildEnvironment(array $env, array $vars)
|
||||
{
|
||||
$vars = array_merge($env, $vars);
|
||||
foreach ($vars as $k=>$var) {
|
||||
if (is_array($var)) {
|
||||
$esc = empty($var['escape'])?false:$var['escape'];
|
||||
$var = preg_replace_callback('/\{\%([a-z]+?)\}/i', function ($match) use (&$vars,$var) {
|
||||
$k = $match[1];
|
||||
if (empty($vars[$k])) return null;
|
||||
return $vars[$k];
|
||||
}, $var['value']);
|
||||
if ($esc) $var = escapeshellarg($var);
|
||||
$vars[$k] = $var;
|
||||
}
|
||||
}
|
||||
return $vars;
|
||||
}
|
||||
|
||||
public function parseVariable($value, array $env)
|
||||
{
|
||||
return preg_replace_callback('/\{\%([a-z]+?)\}/i', function ($match) use (&$env) {
|
||||
$k = $match[1];
|
||||
if (empty($env[$k])) return null;
|
||||
return $env[$k];
|
||||
}, $value);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user