Integration.php

<?php

namespace Phad;

/**
 * convenience class to help setup phad with liaison
 */
class Integration {

    public $phad;

    public bool $force_compile;
    
    public ?\Lia $lia = null;

    public function setup_liaison_routes($lia){
        $phad = $this->phad;
        $this->lia = $lia;

        // $items = $phad->get_all_items();
        // $routes = $phad->routes_from_items($items, __DIR__.'/phad/');
        $routes = $phad->routes_from_cache($this->force_compile);
        // $routes = $phad->routes_from_cache(true);

        foreach ($routes as $pattern=>$item_name){

            ///////
            // Maybe I should check view information here to determine whether i give a form route or a view route
            // I'd also really like to just route to a file (bc then I can cache the route, use less cpu & memory), but that requires compilation & caching ... so let's not rush it.
            ///////
            
            // echo "\nPattern:".$pattern;


            //@POST is necessary to submit forms, unless I do this smarter style
            // $lia->addRoute("@GET.@POST.".$pattern,
            //     function(\Lia\Obj\Route $route, $response) use ($item_name, $phad){
            //
            //         $phad_response = $phad->get_response($route->paramaters(), $item_name);
            //
            //         $response->content = $phad_response['content'];
            //         if (!empty($phad_response['headers'])){
            //             $response->headers = $phad_response['headers'];
            //         }
            //     }
            // );
            $full_pattern = "@GET.@POST.".$pattern;
            // var_dump($full_pattern);
            // exit;
            $lia->addRoute($full_pattern, [$this,'handle_liaison_route']);
        }
    }

    public function setup_liaison_route($lia, $url, $file){
        $lia->addRoute($url,$file);
    }

    public function handle_liaison_route(\Lia\Obj\Route $route, $response){
        $phad = $this->phad;
        $routes = $phad->routes_from_cache($this->force_compile);

        // remove @GET.@POST. from the beginning
        $pattern = substr($route->paramaterizedPattern(), 11);

        $item_name = $routes[$pattern];
        $phad_response = $phad->get_response($route->paramaters(), $item_name);

        $item = $phad_response['view'];

        // print_r($item->resource_files());
        // exit;
        foreach ($item->resource_files() as $type=>$list){

            foreach ($list as $path){
                $this->lia->addResourceFile($path);
            }
        }


        $response->content = $phad_response['content'];
        if (!empty($phad_response['headers'])){
            $response->headers = $phad_response['headers'];
        }

    }

}