/** * @param object $entity * @param string[] $values * @param int $curValueIndex * * @return array|mixed|string */ private static function getObject($entity, $values, $curValueIndex) { try { $obj = ObjectMixin::get($entity, $values[$curValueIndex]); } catch (MemberAccessException $ex) { $obj = ''; } if ($curValueIndex === count($values) - 1) { return $curValueIndex ? [$values[$curValueIndex] => $obj] : $obj; } elseif ($obj instanceof PersistentCollection) { $items = []; foreach ($obj as $item) { if ($curValueIndex === 0) { $items[] = self::getObject($item, $values, $curValueIndex + 1); } else { $items[$values[$curValueIndex]][] = self::getObject($item, $values, $curValueIndex + 1); } } return $items; } elseif (is_object($obj)) { if ($curValueIndex === 0) { return self::getObject($obj, $values, $curValueIndex + 1); } else { return [$values[$curValueIndex] => self::getObject($obj, $values, $curValueIndex + 1)]; } } else { if ($curValueIndex === 0) { return self::getObject($obj, $values, $curValueIndex + 1); } else { return [$values[$curValueIndex] => self::getObject($obj, $values, $curValueIndex + 1)]; } } }
/** * @param object $entity * @param array $values * @param int $curValueIndex * @param BaseGrid $grid * @return mixed|string */ private function getObject($entity, $values, $curValueIndex, BaseGrid $grid) { try { $obj = ObjectMixin::get($entity, $values[$curValueIndex]); } catch (MemberAccessException $ex) { $obj = ''; } $currentColumnPart = implode('.', array_slice($values, 0, $curValueIndex + 1)); $filter = $grid->getColumnFormat($currentColumnPart); $filteredObj = $obj; if (!empty($filter)) { $filter = $this->getFilter($filter); $filteredObj = $filter->process($obj, ['column' => str_replace('.', '_', $currentColumnPart), 'entity' => $entity, 'grid' => $grid]); } /** @var FilterInterface[] $filters */ $filters = $this->getGlobalFilters(); if ($filteredObj === $obj) { foreach ($filters as $filter) { $filteredObj = $filter->process($obj, ['column' => str_replace('.', '_', $currentColumnPart), 'entity' => $entity, 'grid' => $grid]); } } if ($filteredObj !== $obj) { return $curValueIndex ? [$values[$curValueIndex] => $filteredObj] : $filteredObj; } else { $obj = $filteredObj; } if ($curValueIndex === count($values) - 1) { return $curValueIndex ? [$values[$curValueIndex] => $obj] : $obj; } elseif ($obj instanceof PersistentCollection) { $items = []; foreach ($obj as $item) { if ($curValueIndex === 0) { $items[] = $this->getObject($item, $values, $curValueIndex + 1, $grid); } else { $items[$values[$curValueIndex]][] = $this->getObject($item, $values, $curValueIndex + 1, $grid); } } return $items; } elseif (is_object($obj)) { if ($curValueIndex === 0) { return $this->getObject($obj, $values, $curValueIndex + 1, $grid); } else { return [$values[$curValueIndex] => $this->getObject($obj, $values, $curValueIndex + 1, $grid)]; } } else { if ($curValueIndex === 0) { return $this->getObject($obj, $values, $curValueIndex + 1, $grid); } else { return [$values[$curValueIndex] => $this->getObject($obj, $values, $curValueIndex + 1, $grid)]; } } }