triggerTest = !empty($testRunner) && ($testRunner instanceof TestInterface); $this->triggerTestOnPageRendering = !empty($testRunner) && ($testRunner instanceof TestOnPageRenderingInterface); $this->testRunner = ($this->triggerTest) ? $testRunner : null; } /** * return api routes * @return array */ public function registerApiRoutes():array { return [ ]; } /** * return api routes * @return array */ public function registerLateApiRoutes():array { return [ 'POST pages/(.*)/create' => 'createPage', // TODO only define for POST 'GET pages' => 'apiPagesBase', 'GET pages/(.*)' => 'apiPageBase', 'GET pages/(.*)/md' => 'apiPageAsMd', 'GET pages/(.*)/(.*)/md' => 'apiPageAsMd2Levels', 'GET pages/(.*)/(.*)/(.*)/md' => 'apiPageAsMd3Levels', 'GET pages/(.*)/(.*)/(.*)/(.*)/md' => 'apiPageAsMd4Levels', ]; } /** * method to create a page * @return JsonResponse */ public function createPage(string $pageName): JsonResponse { return new JsonResponse(501,['code'=>501,'reason'=>"work in progress for '$pageName'"]); } /** * method to see base of pages api * @return JsonResponse */ public function apiPagesBase(): JsonResponse { return new JsonResponse(200,[ 'title' => 'Base api route to see pages', 'routes' => [ 'Base for one page' => urldecode($this->getPico()->getPageUrl('index',[ 'api' => 'pages/' ])), 'page as Markdown' => urldecode($this->getPico()->getPageUrl('index',[ 'api' => 'pages//md' ])), 'page as Markdown Extra' => urldecode($this->getPico()->getPageUrl('index',[ 'api' => 'pages//mdx' ])) ] ]); } /** * method to see base of page api * @return JsonResponse */ public function apiPageBase(string $pageName): JsonResponse { return new JsonResponse(200,[ 'title' => 'Base api route to see page', 'routes' => [ 'page as Markdown' => $this->getPico()->getPageUrl('index',[ 'api' => "pages/$pageName/md" ]), 'page as Markdown Extra' => $this->getPico()->getPageUrl('index',[ 'api' => "pages/$pageName/mdx" ]) ] ]); } /** * method to see page as md * @return JsonResponse */ public function apiPageAsMd(string $pageName): JsonResponse { $pages = $this->getPico()->getPages(); if (array_key_exists($pageName,$pages)){ return new MdResponse(200,$pages[$pageName]['raw_content'],[ 'Content-Disposition' => 'inline; filename="'.str_replace('/','-',$pageName).'.md"' ]); } else { return new JsonResponse(404,['code'=>404,'reason'=>"Page '$pageName' has not been found !"]); } } /** * method to see page as md * @return JsonResponse */ public function apiPageAsMd2Levels(string $folder1,string $pageName): JsonResponse { return $this->apiPageAsMd("$folder1/$pageName"); } /** * method to see page as md * @return JsonResponse */ public function apiPageAsMd3Levels(string $folder1,string $folder2,string $pageName): JsonResponse { return $this->apiPageAsMd("$folder1/$folder2/$pageName"); } /** * method to see page as md * @return JsonResponse */ public function apiPageAsMd4Levels(string $folder1,string $folder2,string $folder3,string $pageName): JsonResponse { return $this->apiPageAsMd("$folder1/$folder2/$folder3/$pageName"); } /** * Triggered after Pico has rendered the page * * @param string &$output contents which will be sent to the user */ public function onPageRendered(&$output) { if ($this->triggerTest){ $this->testRunner->run($this,$output); } } /** * Triggered before Pico renders the page * * @param string &$templateName file name of the template * @param array &$twigVariables template variables */ public function onPageRendering(&$templateName, array &$twigVariables) { if ($this->triggerTestOnPageRendering){ $this->testRunner->runOnPageRendering($this,$templateName,$twigVariables); } } }