@GET.@POST.search.php

<?php
/**
 * GET /files/search/ display search form
 * GET /files/search/?q=whatever perform a search & get a JSON response
 * POST /files/search/ [selected_id=$id & selected_url=$url], echo {url:$url, id:$id}
 *
 */


    // print json for completed selection
    if (isset($_POST['selected_id'])){
        echo json_encode(
            ['id'=>$_POST['selected_id'],'url'=>$_POST['selected_url']]
        );
        exit;
    }

    // query for a file
    if (isset($_GET['q'])){
        $stmt = $lia->pdo->prepare(
            "SELECT * from file 
                WHERE `is_public` = 1 
                AND (lookup_key LIKE :query OR download_name LIKE :query OR alt_text LIKE :query)
                ORDER BY
                  CASE
                    WHEN lookup_key LIKE :query THEN 1
                    WHEN download_name LIKE :query THEN 2
                    WHEN alt_text LIKE :query THEN 3
                    ELSE 4
                  END
                LIMIT 0,10
            ");

        $stmt->execute([
            'query' => '%'.$_GET['q'].'%',
        ]);
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // convert the rows into url/id only
        $final_rows = [];
        foreach ($rows as $row){
            $obj = new \Dv\File\Db\File($row);
            $final_rows[] = [
                'url'=>$obj->url,
                'id'=>$obj->id
            ];
        }

        echo json_encode($final_rows);

        exit;
    }

    // add as url because compilation just causes problems here
    $lia->addResourceUrl('/files/search.js');
?>


<div class="PhotoSearch">
<form action="/files/search/" method="POST">
<label>Search for Photo
    <input type="text" name="query" placeholder="Search for file" onkeyup="conduct_photo_search(this)"/>
    <input type="hidden" name="selected_id">
    <input type="hidden" name="selected_url">
</label>

    <style type="text/css">
        
        .PhotoSearchResults img {
            max-width:75px;
            max-height:75px;
            border: 1px solid rgba(0,0,0,0.2);
            margin:1px;
            cursor:pointer;
        }
    </style>
    <div class="PhotoSearchResults" onclick="photo_clicked(event,this)">
    </div>

    <input type="submit" value="Submit" style="display:none;">
</form>

</div>
<hr>