/** * Returns all route-document which referees given document. * * @param $document * @param $webspaceKey * * @return array */ protected function findReferrer($document, $webspaceKey) { $routes = []; $referrers = $this->inspector->getReferrers($document); foreach ($referrers as $routeDocument) { if ($routeDocument instanceof RouteDocument) { $path = PathHelper::relativizePath($routeDocument->getPath(), $this->getRoutesPath($webspaceKey)); $routes[$path] = $routeDocument; $tmp = $this->findReferrer($routeDocument, $webspaceKey); $routes = array_merge($routes, $tmp); } } return $routes; }
/** * Changes the old route to a history route and redirect to the new route. * * @param RouteBehavior $oldDocument * @param RouteBehavior $newDocument */ private function changeOldPathToHistoryRoutes(RouteBehavior $oldDocument, RouteBehavior $newDocument) { $oldDocument->setTargetDocument($newDocument); $oldDocument->setHistory(true); $oldRouteNode = $this->documentInspector->getNode($oldDocument); $oldRouteNode->setProperty(self::NODE_HISTORY_FIELD, true); foreach ($this->documentInspector->getReferrers($oldDocument) as $referrer) { if ($referrer instanceof RouteBehavior) { $referrer->setTargetDocument($newDocument); $referrer->setHistory(true); $this->documentManager->persist($referrer, null, ['path' => $this->documentInspector->getPath($referrer)]); $this->documentManager->publish($referrer, null); } } }