/** * Convert graph items elements. * * @param array $graph_items * * @return array */ protected function convertGraphItems(array $graph_items) { foreach ($graph_items as &$graph_item) { $graph_item['item']['key'] = $this->itemKeyConverter->convert($graph_item['item']['key']); } unset($graph_item); return $graph_items; }
/** * Convert a trigger expression from 2.2 format to 2.4. * * The method will replace old operators with their analogues: "&" with "and", "|" - "or" and "#" - "<>". * * @param string $expression * * @return string */ public function convert($expression) { // find all the operators that need to be replaced $found_operators = []; for ($pos = 0; isset($expression[$pos]); $pos++) { switch ($expression[$pos]) { case '{': // skip function macros if ($this->function_macro_parser->parse($expression, $pos) != CParser::PARSE_FAIL) { $new_expression = '{' . $this->function_macro_parser->getHost() . ':' . $this->itemKeyConverter->convert($this->function_macro_parser->getItem()) . '.' . $this->function_macro_parser->getFunction() . '}'; $expression = substr_replace($expression, $new_expression, $pos, $this->function_macro_parser->getLength()); $pos += strlen($new_expression) - 1; } else { // if it's not a function macro, try to parse it as an LLD macro if ($this->lld_macro_parser->parse($expression, $pos) != CParser::PARSE_FAIL) { $pos += $this->lld_macro_parser->getLength() - 1; } } // otherwise just continue as is, other macros don't contain any of these characters break; case '&': case '|': case '#': $found_operators[$pos] = $expression[$pos]; break; } } // replace the operators foreach (array_reverse($found_operators, true) as $pos => $operator) { switch ($operator) { case '&': $expression = $this->replaceLogicalOperator($expression, 'and', $pos); break; case '|': $expression = $this->replaceLogicalOperator($expression, 'or', $pos); break; case '#': $expression = substr_replace($expression, '<>', $pos, 1); break; } } return $expression; }