Exemplo n.º 1
0
function b1n_search($sql, $search_config, $search, $select_first_if_none = true, $where_plus = '')
{
    $ret["select_fields"] = $search_config["select_fields"];
    $ret["possible_fields"] = $search_config["possible_fields"];
    $ret["possible_quantities"] = $search_config["possible_quantities"];
    // ---------------------- Checking and Session storing ----------------
    if (!b1n_checkSearch($search, $ret, $search_config["session_hash_name"], $select_first_if_none)) {
        $ret["search"] = $search;
        return $ret;
    }
    $ret["search"] = $search;
    $_SESSION["search"][$search_config["session_hash_name"]] = $search;
    if (empty($search["search_text"])) {
        $isnull = " OR " . $search["search_field"] . " IS NULL";
    } else {
        $isnull = "";
    }
    // ---------------------- WHERE ---------------------------
    if (!empty($search["search_field"])) {
        $where = " WHERE " . $search["search_field"] . " ILIKE '%" . b1n_inBd($search["search_text"]) . "%'" . $where_plus . $isnull;
    } else {
        $where = $where_plus;
    }
    // ---------------------- ORDER BY ---------------------------
    if (!empty($search['search_order'])) {
        $orderby = " ORDER BY LOWER(" . $search['search_order'] . ") ";
        if (!empty($search['search_order_type'])) {
            $orderby .= " " . $search['search_order_type'];
        }
    } else {
        $orderby = '';
    }
    // ---------------------- LIMIT & OFFSET ----------------
    if ($search["search_quantity"] == 'all') {
        $limit = '';
        $ret['pg_actual'] = 1;
        $ret['pg_pages'] = 1;
    } else {
        $query = "\n                SELECT DISTINCT\n                    COUNT(" . $search_config["id_field"] . ")\n                FROM\n                    \"" . $search_config["table"] . "\"" . $where;
        $rs_count = $sql->singleQuery($query);
        $ret["pg_pages"] = max(1, ceil($rs_count["count"] / $search["search_quantity"]));
        if ($search["pg_actual"] > $ret["pg_pages"]) {
            $search["pg_actual"] = $ret["pg_pages"];
        }
        $ret["pg_actual"] = $search["pg_actual"];
        $limit = " LIMIT " . $search['search_quantity'] . ' OFFSET ' . ($search['pg_actual'] - 1) * $search['search_quantity'];
    }
    // ---------------------- DB Search ---------------------------
    $select_fields = $search_config['id_field'] . " AS id, " . implode(", ", $search_config['select_fields']);
    $query = "\n        SELECT\n            " . $select_fields . "\n        FROM\n          \"" . $search_config['table'] . "\" " . $where . $orderby . $limit;
    $ret["result"] = $sql->query($query);
    return $ret;
}
Exemplo n.º 2
0
Arquivo: leg.lib.php Projeto: mmr/b1n
function b1n_regSearchLeg($sql, $search_config, $search)
{
    $ret["select_fields"] = $search_config["select_fields"];
    $ret["possible_fields"] = $search_config["possible_fields"];
    $ret["possible_quantities"] = $search_config["possible_quantities"];
    // ---------------------- Checking and Session storing ----------------
    if (!b1n_checkSearch($search, $ret, $search_config["session_hash_name"], true)) {
        $ret["search"] = $search;
        return $ret;
    }
    $ret["search"] = $search;
    $_SESSION["search"][$search_config["session_hash_name"]] = $search;
    // ---------------------- WHERE ---------------------------
    switch ($search["search_field"]) {
        case "apt_name_depart":
            $field = "\n        CASE WHEN (apt_depart.apt_icao IS NOT NULL) THEN\n            apt_depart.apt_name || ' (' || apt_depart.apt_icao || ')'\n        ELSE\n            apt_depart.apt_name\n        END";
            break;
        case "apt_name_arrive":
            $field = "\n        CASE WHEN (apt_arrive.apt_icao IS NOT NULL) THEN\n            apt_arrive.apt_name || ' (' || apt_arrive.apt_icao || ')'\n        ELSE    \n            apt_arrive.apt_name\n        END";
            break;
        default:
            $field = $search["search_field"];
            break;
    }
    // ---------------------- LIMIT & OFFSET ----------------
    if ($search["search_quantity"] == 'all') {
        $ret['pg_actual'] = 1;
        $ret['pg_pages'] = 1;
        $limit_quantity = 0;
        $limit_offset = 0;
    } else {
        $query = "\n            SELECT DISTINCT\n                COUNT(leg_id)\n            FROM\n                \"leg\"\n                LEFT OUTER JOIN \"airport\" apt_depart ON (apt_id_depart = apt_depart.apt_id)\n                LEFT OUTER JOIN \"airport\" apt_arrive ON (apt_id_arrive = apt_arrive.apt_id)\n            WHERE " . $field . " ILIKE '%" . b1n_inBd($search['search_text']) . "%'";
        $rs_count = $sql->singleQuery($query);
        $ret["pg_pages"] = max(1, ceil($rs_count["count"] / $search["search_quantity"]));
        if ($search["pg_actual"] > $ret["pg_pages"]) {
            $search["pg_actual"] = $ret["pg_pages"];
        }
        $ret["pg_actual"] = $search["pg_actual"];
        $limit_quantity = $search['search_quantity'];
        $limit_offset = ($search['pg_actual'] - 1) * $search['search_quantity'];
    }
    // ---------------------- DB Search ---------------------------
    $query = "\n        SELECT\n            *\n        FROM\n            func_list_leg (\n                '" . b1n_inBd($field) . "', \n                '" . b1n_inBd($search["search_text"]) . "', \n                '" . $search["search_order"] . "', \n                '" . $search["search_order_type"] . "', \n                '" . $limit_quantity . "',\n                '" . $limit_offset . "'\n            )\n            AS \n            (\n                apt_name_depart text,\n                apt_name_arrive text,\n                apt_timezone_depart text,\n                apt_timezone_arrive text,\n\n                leg_etd_dt text,\n                leg_etd_localtime_dt text,\n    \n                leg_ete_i interval,\n\n                leg_eta_dt text,\n                leg_eta_localtime_dt text,\n                leg_groundtime_i interval,\n\n                id integer,\n                leg_trip integer,\n                leg_distance integer,\n                leg_wind integer,\n                leg_fuel integer,\n                leg_remarks text\n            )";
    $ret["result"] = $sql->query($query);
    return $ret;
}