Airship\Cabin\Bridge\Blueprint\Skyport::getAvailable PHP Method

getAvailable() public method

Get the available packages (based on data provided by Keyggdrasil)
public getAvailable ( string $type = '', string $query = '', integer $offset, integer $limit ) : array
$type string
$query string Search query
$offset integer
$limit integer
return array
    public function getAvailable(string $type = '', string $query = '', int $offset = 0, int $limit) : array
    {
        $extra = '';
        $args = [];
        if (!empty($type)) {
            $extra = ' AND packagetype = ?';
            $args = [$type];
        }
        // Search query -- very naive
        if (!empty($query)) {
            $query = '%' . \trim($query, '%') . '%';
            switch ($this->db->getDriver()) {
                case 'pgsql':
                    $extra .= " AND (\n                           name LIKE ?\n                        OR supplier LIKE ?\n                        OR skyport_metadata->>'description' LIKE ?\n                        OR skyport_metadata->>'details' LIKE ?\n                        OR skyport_metadata->>'version_control' LIKE ?\n                    )";
                    $args[] = $query;
                    $args[] = $query;
                    $args[] = $query;
                    $args[] = $query;
                    $args[] = $query;
                    break;
            }
        }
        $exts = $this->db->run('
            SELECT
                *
            FROM
                airship_package_cache
            WHERE
                NOT installed ' . $extra . '
            ORDER BY
                packagetype ASC,
                supplier ASC,
                name ASC
            OFFSET ' . $offset . '
            LIMIT ' . $limit, ...$args);
        if (empty($exts)) {
            return [];
        }
        foreach ($exts as $i => $ext) {
            if (empty($exts[$i]['skyport_metadata'])) {
                $exts[$i]['skyport_metadata'] = [];
            } else {
                $exts[$i]['skyport_metadata'] = \json_decode($ext['skyport_metadata'], true);
            }
        }
        return $exts;
    }

Usage Example

Exemplo n.º 1
0
 /**
  * @route ajax/admin/skyport/browse
  */
 public function ajaxGetAvailablePackages()
 {
     $post = $_POST ?? [];
     $type = '';
     $headline = 'Available Extensions';
     if (isset($post['type'])) {
         switch ($post['type']) {
             case 'cabin':
                 $headline = 'Available Cabins';
                 $type = 'Cabin';
                 break;
             case 'gadget':
                 $headline = 'Available Gadgets';
                 $type = 'Gadget';
                 break;
             case 'motif':
                 $headline = 'Available Motifs';
                 $type = 'Motif';
                 break;
         }
     }
     $query = (string) ($post['query'] ?? '');
     $numAvailable = $this->skyport->countAvailable($type);
     list($page, $offset) = $this->getPaginated($numAvailable);
     $this->lens('skyport/list', ['headline' => $headline, 'extensions' => $this->skyport->getAvailable($type, $query, $offset, $this->perPage), 'pagination' => ['count' => $numAvailable, 'page' => $page, 'per_page' => $this->perPage]]);
 }