protected function processMoveDir(array $dirInfo, array $post = [], string $oldCabin = '', array $cabins = []) : bool
{
$targetID = (int) $dirInfo['directoryid'];
if (\is_numeric($post['move_destination'])) {
$destination = (int) $post['move_destination'];
$newCabin = $this->pg->getCabinForDirectory($destination);
$newPieces = $this->pg->getDirectoryPieces($destination);
\array_pop($newPieces);
$newPieces[] = Util::charWhitelist($post['url'], Util::NON_DIRECTORY);
$newPath = \implode('/', $newPieces);
} elseif (!\in_array($post['move_destination'], $cabins)) {
// Cabin doesn't exist!
return false;
} else {
$newCabin = $post['move_destination'];
$newPath = Util::charWhitelist($post['url'], Util::NON_DIRECTORY);
}
if (!empty($post['create_redirect'])) {
$old = ['cabin' => $oldCabin, 'path' => \implode('/', $this->pg->getDirectoryPieces($targetID))];
$new = ['cabin' => $newCabin, 'path' => $newPath];
$this->pg->createRedirectsForMove($old, $new);
}
return $this->pg->moveDir($targetID, $post['url'], $destination ?? 0, $newCabin);
}