/** * @group pathspec */ public function testDefaultValuesArePSR0() { $pathSpec = new ModulePathSpec($this->getModuleUtils()); $this->assertEquals('/app/ModuleName', $pathSpec->getModulePath('ModuleName')); $this->assertEquals('/app/ModuleName/config', $pathSpec->getModuleConfigPath('ModuleName')); $this->assertEquals('/app/ModuleName/config/module.config.php', $pathSpec->getModuleConfigFilePath('ModuleName')); $this->assertEquals('.', $pathSpec->getApplicationPath()); $this->assertEquals('/app/ModuleName/src/ModuleName', $pathSpec->getModuleSourcePath('ModuleName')); $this->assertEquals('/app/ModuleName/src/ModuleName', $pathSpec->getModuleSourcePath('ModuleName')); $this->assertEquals('psr-0', $pathSpec->getPathSpec()); $this->assertEquals('/app/ModuleName/view', $pathSpec->getModuleViewPath('ModuleName')); $this->assertEquals('/app/ModuleName/src/ModuleName/V1/Rest/', $pathSpec->getRestPath('ModuleName')); $this->assertEquals('/app/ModuleName/src/ModuleName/V1/Rpc/', $pathSpec->getRpcPath('ModuleName')); }
/** * Create a module * * @param string $module * @param string $path * @param integer $ver * @return boolean */ public function createModule($module, ModulePathSpec $pathSpec) { $path = $pathSpec->getApplicationPath(); $application = (require "{$path}/config/application.config.php"); if (is_array($application) && isset($application['modules']) && in_array($module, $application['modules'], true)) { // Module already exists in configuration return false; } $modulePath = $pathSpec->getModulePath($module, $path); if (file_exists($modulePath)) { throw new \Exception(sprintf('Cannot create new API module; module by the name "%s" already exists', $module), 409); } $moduleSourcePath = $pathSpec->getModuleSourcePath($module); $moduleSourceRelativePath = $pathSpec->getModuleSourcePath($module, false); $moduleConfigPath = $pathSpec->getModuleConfigPath($module); mkdir($moduleConfigPath, 0775, true); mkdir($pathSpec->getModuleViewPath($module), 0775, true); mkdir($pathSpec->getRestPath($module, 1), 0775, true); mkdir($pathSpec->getRpcPath($module, 1), 0775, true); if (!file_put_contents("{$moduleConfigPath}/module.config.php", "<" . "?php\nreturn array(\n);")) { return false; } $view = new ViewModel(['module' => $module]); $resolver = new Resolver\TemplateMapResolver(['module/skeleton' => __DIR__ . '/../../view/module/skeleton.phtml', 'module/skeleton-psr4' => __DIR__ . '/../../view/module/skeleton-psr4.phtml']); $renderer = new PhpRenderer(); $renderer->setResolver($resolver); if ($pathSpec->getPathSpec() === 'psr-0') { $view->setTemplate('module/skeleton'); $moduleRelClassPath = "{$moduleSourceRelativePath}/Module.php"; if (!file_put_contents("{$modulePath}/Module.php", "<" . "?php\nrequire __DIR__ . '{$moduleRelClassPath}';")) { return false; } if (!file_put_contents("{$moduleSourcePath}/Module.php", "<" . "?php\n" . $renderer->render($view))) { return false; } } else { $view->setTemplate('module/skeleton-psr4'); if (!file_put_contents("{$modulePath}/Module.php", "<" . "?php\n" . $renderer->render($view))) { return false; } } // Add the module in application.config.php if (is_array($application) && isset($application['modules']) && !in_array($module, $application['modules'], true)) { $application['modules'][] = $module; if (!$this->writeApplicationConfig($application, $path)) { return false; } } return true; }