1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191:
<?php
namespace DispatchModule;
class BaseParser extends \BaseModule\Services\BaseService {
protected $container;
protected $parameterList;
public function __construct(\Nette\DI\Container $container) {
parent::__construct($container);
$this->container = $container;
}
public function addFormParameters(\BaseModule\Form $form) {
$tools = $this->getTools();
foreach ($tools as $tool) {
$form->addCheckbox($tool->getName(), $tool->getLabel());
$params = $tool->getWantedParameters();
foreach ($params as $name => $param) {
if (isset($param[2])) {
$args = $param[2];
$modifiers = $this->getModifiers($tool, $args);
$multiplicators = $this->getMultiplicators($args);
$date = (isset($args['date'])) ? true : false;
} else {
$args = null;
$modifiers = null;
$multiplicators = null;
$date = false;
}
$inputName = $form->addInput($name, $param[0], isset($param[1]) ? $param[1] : '', $tool->getName(), $args);
$parameterValue = isset($param[1]) ? array('label' => $param[1]) : array();
if ($modifiers != null) {
$parameterValue['modifiers'] = $modifiers;
}
if ($multiplicators != null) {
$parameterValue['multiplicators'] = $multiplicators;
}
$parameterValue['date'] = $date;
$this->parameterList[$inputName] = $parameterValue;
}
}
return $form;
}
private function getModifiers($tool, $args) {
$modifiers = array();
if (isset($args['modifiers'])) {
$modifiersList = $args['modifiers'];
foreach ($modifiersList as $modifierName => $modifier) {
$modifiers[] = $tool->getName() . '_' . $modifierName;
}
}
return $modifiers;
}
private function getMultiplicators($args) {
$multiplicators = array();
if (isset($args['multiplicators'])) {
$multiplicatorsList = $args['multiplicators'];
foreach ($multiplicatorsList as $multiplicatorName => $value) {
$multiplicators[$multiplicatorName] = $value;
}
}
return $multiplicators;
}
public function getParameterList() {
if (empty($this->parameterList)) {
$this->parameterList = array();
$this->addFormParameters(new \BaseModule\Form());
}
return $this->parameterList;
}
public function getTools() {
$tools = array();
$dirPath = $this->container->parameters['appDir'] . DIRECTORY_SEPARATOR . 'DispatchModule' . DIRECTORY_SEPARATOR . $this->getName() . 'Tools';
foreach (\Nette\Utils\Finder::findFiles('*.php')->in($dirPath) as $path => $file) {
$toolPath = explode(DIRECTORY_SEPARATOR, $path);
$toolFileName = explode('.', end($toolPath));
$toolName = '\DispatchModule\Tools\\' . $toolFileName[0];
$tool = new $toolName($this->container);
$tools[$tool->getName()] = $tool;
}
return $tools;
}
public function getVisualizers() {
$tools = array();
$dirPath = $this->container->parameters['appDir'] . DIRECTORY_SEPARATOR . 'DispatchModule' . DIRECTORY_SEPARATOR . 'visualizeTools';
foreach (\Nette\Utils\Finder::findFiles('*.php')->in($dirPath) as $path => $file) {
$toolPath = explode(DIRECTORY_SEPARATOR, $path);
$toolFileName = explode('.', end($toolPath));
$toolName = '\DispatchModule\Tools\\' . $toolFileName[0];
$tool = new $toolName($this->container);
$tools[$tool->getName()] = $tool;
}
return $tools;
}
protected function getName() {
$className = \Nette\Utils\Strings::lower(get_class($this));
if (preg_match('@\\\\([\w]+)$@', $className, $matches)) {
$className = $matches[1];
}
if (\Nette\Utils\Strings::endsWith($className, 'parser')) {
return \Nette\Utils\Strings::substring($className, 0, -6);
}
return $className;
}
}