fs = new Filesystem(); $this->faker = Factory::create(); $this->finder = new Finder(); } /** * @param HTTPRequest $request */ public function run($request) { $count = $request->getVar('count') ?: 20; $module = ModuleLoader::getModule('silverstripe/frameworktest'); $testPageDir = $module->getPath() . '/code/test-pages'; if(!$this->fs->exists($testPageDir)) { throw new RuntimeException("Test page directory $testPageDir does not exist!"); } $pageTypes = $this->getExistingClassNames($testPageDir); $created = 0; while($created < $count) { $className = null; while( !$className || in_array($className, $pageTypes) || class_exists(basename($className, 'php')) ) { $className = $this->generateClassName(); } $pageTypes[] = $className; $code = $this->generateClassCode($className); $filePath = sprintf('%s/%s.php', $testPageDir, $className); try { $this->fs->dumpFile($filePath, $code); $created++; } catch (IOException $e) { echo "Could not write to file $filePath. Got error: {$e->getMessage()}\n"; die(); } echo "Created page type $className\n"; } } private function getExistingClassNames($dir) { $files = $this->finder ->in($dir) ->files() ->name('*Page.php'); return array_map(function ($file) { /* @var SplFileInfo $file */ return $file->getBasename(); }, iterator_to_array($files)); } private function generateClassName() { return ucfirst($this->faker->word . 'Page'); } private function generateClassCode($className) { $self = __CLASS__; $code = <<