protected function getSlideRecords($pageUid, $limit = null)
{
if (null === $limit && false === empty($this->arguments['limit'])) {
$limit = (int) $this->arguments['limit'];
}
$slide = (int) $this->arguments['slide'];
$slideCollectReverse = (bool) $this->arguments['slideCollectReverse'];
$slideCollect = (int) $this->arguments['slideCollect'];
if (0 < $slideCollect) {
$slide = $slideCollect;
}
// find out which storage page UIDs to read from, respecting slide depth
$storagePageUids = [];
if (0 === $slide) {
$storagePageUids[] = $pageUid;
} else {
$reverse = false;
if (true === $slideCollectReverse && 0 !== $slideCollect) {
$reverse = true;
}
$rootLine = $this->getPageService()->getRootLine($pageUid, null, $reverse);
if (-1 !== $slide) {
if (true === $reverse) {
$rootLine = array_slice($rootLine, -$slide);
} else {
$rootLine = array_slice($rootLine, 0, $slide);
}
}
foreach ($rootLine as $page) {
$storagePageUids[] = (int) $page['uid'];
}
}
// select records, respecting slide and slideCollect.
$records = [];
do {
$storagePageUid = array_shift($storagePageUids);
$limitRemaining = null;
if (null !== $limit) {
$limitRemaining = $limit - count($records);
if (0 >= $limitRemaining) {
break;
}
}
$recordsFromPageUid = $this->getSlideRecordsFromPage($storagePageUid, $limitRemaining);
if (0 < count($recordsFromPageUid)) {
$records = array_merge($records, $recordsFromPageUid);
if (0 === $slideCollect) {
// stop collecting because argument said so and we've gotten at least one record now.
break;
}
}
} while (false === empty($storagePageUids));
return $records;
}