Improved page generation (customise depths)

Similar to FTFileMakerTask, this allows for creation of trees of arbitrary depths.
Which is useful to test long page lists, deep trees, or large amount of “broad vs deep” nestings.
Yes, it has no unit tests - I’m fine with that :)
This commit is contained in:
Ingo Schommer 2017-05-18 13:20:53 +12:00
parent 5fcfeb1a9a
commit 260ad323ac

View File

@ -10,27 +10,44 @@ use SilverStripe\Dev\BuildTask;
class FTPageMakerTask extends BuildTask
{
/**
* Defaults create 15,000 pages
*/
protected $pageCountByDepth = [
10,
100,
5,
1,
1
];
public function run($request)
{
echo "<h1>Making pages</h1>";
// Creates 3^5 pages
$this->makePages(3, 5);
$this->generatePages();
}
protected function makePages($count, $depth, $prefix = "", $parentID = 0)
protected function generatePages($depth = 0, $prefix = "", $parentID = 0)
{
for ($i=1;$i<=$count;$i++) {
$maxDepth = count($this->pageCountByDepth);
$pageCount = $this->pageCountByDepth[$depth];
for ($i=1; $i<=$pageCount; $i++) {
$fullPrefix = $prefix ? "{$prefix}-{$i}" : $i;
$page = new Page();
$page->ParentID = $parentID;
$page->Title = "Test page $prefix$i";
$page->Title = "Test page {$fullPrefix}";
$page->write();
$page->publish('Stage', 'Live');
echo "<li>Created '$page->Title'";
if ($depth > 1) {
$this->makePages($count, $depth-1, $prefix."$i.", $page->ID);
echo "Created '$page->Title'\n";
$pageID = $page->ID;
unset($page);
if ($depth < $maxDepth-1) {
$this->generatePages($depth+1, $fullPrefix, $pageID);
}
}
}
}