/**
  * 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;
 }