/** * Move entity hierarchy to new parent or root * * @param Registered $registered registered object * @param string|null $to to registered prefix * * @return void * @throws InvalidArgumentException */ public function move(Registered $registered, $to = null) { $toParent = $to !== null ? $this->repo->findByTypeAndName($registered->siteKey, $registered->type, $to) : null; if ($to !== null && $toParent === null || $toParent !== null && $registered->type != $toParent->type) { throw new InvalidArgumentException(); } $parent = $registered->getParent(); if ($parent === null) { if ($registered->getDepth() !== 1) { throw new InvalidArgumentException(); } $this->repo->affiliate($registered, $to); } else { $this->repo->foster($registered, $to); } }