/** * @param VulnerableElement $element * @return string */ public function renderVulnerabilityTree(VulnerableElement $element) { $vulnerabilities = []; $childrenVulns = ''; $conditions = []; if ($element->hasChildren()) { $childrenHtml = []; foreach ($element->getChildrenArray() as $child) { $childrenHtml[] = $this->renderVulnerabilityTree($child); } $childrenVulns = implode('', $childrenHtml); } if ($element instanceof ConditionalVulnerableElement) { /** @var ICondition $condition */ foreach ($element->getConditions()->getConditions() as $condition) { $conditions[$condition->getName()] = $condition->toArray(); } } /** @var Vulnerability $vuln */ foreach ($element->getVulnerabilitySet()->getVulnerabilities() as $vuln) { $vulnerabilities[$vuln->getName()] = $vuln->asArray(); } sort($vulnerabilities); $vulnNames = VulnerabilityFactory::instance()->getAllVulnerabilityNames(); $computedVulnerabilities = []; /** @var Vulnerability $vuln */ foreach ($vulnNames as $vulnName) { $computedVulnerabilities[] = $element->getComputedVulnerability($vulnName)->asArray(); } $view = $this->pixie->view('admin/context/vuln_element'); $view->vulnerabilities = $vulnerabilities; $view->computedVulnerabilities = $computedVulnerabilities; $view->childrenVulns = $childrenVulns; $view->conditionList = $conditions; return $view->render(); }