get($project); $p->config = $this->reduceFiles($p->config, '/setup', '', '/'); $p->controllers = $this->reduceFiles($p->controllers, ['/common', 'ProVM/' . ucwords($project) . '/Common'], '.php', '/'); foreach ($p->routes as $space => $routes) { $p->routes->$space = $this->reduceFiles($routes, '/resources/routes', '', '/'); } $p->views = $this->reduceFiles($p->views, '/resources/views/', '.blade.php', '.'); return $view->render($response, 'projects.show', ['project' => $p]); } protected function reduceFiles($array, $prefix, $suffix, $glue) { if (!is_array($prefix)) { $prefix = [$prefix]; } if (!is_array($suffix)) { $suffix = [$suffix]; } $arr = []; $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array), \RecursiveIteratorIterator::SELF_FIRST); $pk = ''; foreach ($it as $k => $v) { if (is_array($v)) { $pk = str_replace($prefix[0], $prefix[1] ?? '', $k); continue; } $arr []= str_replace($suffix[0], $suffix[1] ?? '', implode($glue, [$pk, $v])); } return $arr; } public function addView(Request $request, Response $response, Projects $service, View $view, $project): Response { $folder = implode(DIRECTORY_SEPARATOR, [ $service->getFolder($project), 'resources', 'views' ]); $files = new \DirectoryIterator($folder); $subfolders = []; foreach ($files as $file) { if (!$file->isDir() or $file->isDot()) { continue; } $subfolders []= $file->getBasename(); } $factory = new Factory(); $p = $factory->find($service->getFolder($project))->getViews()->build(); $views = []; $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($p->views), \RecursiveIteratorIterator::SELF_FIRST); $pk = ''; foreach ($it as $k => $v) { if (is_array($v)) { $pk = str_replace('/resources/views/', '', $k); continue; } $views []= str_replace('.blade.php', '', implode('.', [$pk, $v])); } $project = $p; return $view->render($response, 'projects.views.add', compact('project', 'subfolders', 'views')); } public function doAddView(Request $request, Response $response, Container $container, Projects $service, $project): Response { $post = $request->getParsedBody(); $options = []; if (trim($post['extends']) != '') { $options['extends'] = $post['extends']; } if (trim($post['seccion']) != '') { $options['section'] = $post['seccion']; } $location = $post['location']; $status = $service->addView($project, $post['name'], $location, $options); return $this->withRedirect($response, implode('/', [ $container->get('urls')->base, 'project', $project ])); } public function addController(Request $request, Response $response, Projects $service, View $view, $project): Response { $folder = implode(DIRECTORY_SEPARATOR, [ $service->getFolder($project), 'common', 'Controller' ]); $files = new \DirectoryIterator($folder); $subfolders = []; foreach ($files as $file) { if (!$file->isDir() or $file->isDot()) { continue; } $subfolders []= $file->getBasename(); } $factory = new Factory(); $p = $factory->find($service->getFolder($project))->getViews()->build(); $views = []; $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($p->views), \RecursiveIteratorIterator::SELF_FIRST); $pk = ''; foreach ($it as $k => $v) { if (is_array($v)) { $pk = str_replace('/resources/views/', '', $k); continue; } $views []= str_replace('.blade.php', '', implode('.', [$pk, $v])); } $project = $p; return $view->render($response, 'projects.controllers.add', compact('project', 'subfolders', 'views')); } public function doAddController(Request $request, Response $response, Container $container, Projects $service, $project): Response { $post = $request->getParsedBody(); $name = str_replace(' ', '', ucwords($post['name'])); $status = $service->addController($project, $post['space'], $name, $post['template']); return $this->withRedirect($response, implode('/', [ $container->get('urls')->base, 'project', $project ])); } public function addRoute(Request $request, Response $response, Projects $service, View $view, $project): Response { $folder = implode(DIRECTORY_SEPARATOR, [ $service->getFolder($project), 'resources', 'routes' ]); $files = new \DirectoryIterator($folder); $subfolders = []; foreach ($files as $file) { if (!$file->isDir() or $file->isDot()) { continue; } $subfolders []= $file->getBasename(); } $factory = new Factory(); $p = $factory->find($service->getFolder($project))->getViews()->getControllers()->build(); $views = []; $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($p->views), \RecursiveIteratorIterator::SELF_FIRST); $pk = ''; foreach ($it as $k => $v) { if (is_array($v)) { $pk = str_replace('/resources/views/', '', $k); continue; } $views []= str_replace('.blade.php', '', implode('.', [$pk, $v])); } $controllers = []; $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($p->controllers), \RecursiveIteratorIterator::SELF_FIRST); $pk = ''; foreach ($it as $k => $v) { if (is_array($v)) { $pk = str_replace('/common', 'ProVM/Projects/Common', $k); continue; } $controllers []= str_replace(['/', '.php'], ["\\", ''], implode('/', [$pk, $v])); } $project = $p; return $view->render($response, 'projects.routes.add', compact('project', 'subfolders', 'views', 'controllers')); } public function doAddRoute(Request $request, Response $response, Container $container, Projects $service, $project): Response { $post = $request->getParsedBody(); $space = $post['space']; $name = $post['group']; $route = $post['name']; $callback = $post['controller'] . '::class'; $service->addRoute($project, $space, $name, $route, $callback); return $this->withRedirect($response, implode('/', [ $container->get('urls')->base, 'project', $project ])); } }