function get_filterdata_from_request($page_id = '')
{
    global $CDASH_CSS_FILE;
    $sql = '';
    $xml = '';
    $clauses = 0;
    $filterdata = array();
    $filters = array();
    $add_filter = 0;
    $remove_filter = 0;
    $filterdata['hasdateclause'] = 0;
    if (empty($page_id)) {
        $pos = strrpos($_SERVER['SCRIPT_NAME'], '/');
        $page_id = substr($_SERVER['SCRIPT_NAME'], $pos + 1);
    }
    $filterdata['pageId'] = $page_id;
    $pageSpecificFilters = createPageSpecificFilters($page_id);
    $filterdata['pageSpecificFilters'] = $pageSpecificFilters;
    $filtercount = pdo_real_escape_numeric(@$_REQUEST['filtercount']);
    $showfilters = pdo_real_escape_numeric(@$_REQUEST['showfilters']);
    $showlimit = pdo_real_escape_numeric(@$_REQUEST['showlimit']);
    $limit = intval(pdo_real_escape_numeric(@$_REQUEST['limit']));
    if (!is_int($limit)) {
        $limit = 0;
    }
    @($clear = $_REQUEST['clear']);
    if ($clear == 'Clear') {
        $filtercount = 0;
    }
    @($filtercombine = htmlspecialchars(pdo_real_escape_string($_REQUEST['filtercombine'])));
    if (strtolower($filtercombine) == 'or') {
        $sql_combine = 'OR';
    } else {
        $sql_combine = 'AND';
    }
    $sql = 'AND (';
    for ($i = 1; $i <= $filtercount; ++$i) {
        if (empty($_REQUEST['field' . $i])) {
            continue;
        }
        $fieldinfo = htmlspecialchars(pdo_real_escape_string($_REQUEST['field' . $i]));
        $compare = htmlspecialchars(pdo_real_escape_string($_REQUEST['compare' . $i]));
        $value = htmlspecialchars(pdo_real_escape_string($_REQUEST['value' . $i]));
        @($add = $_REQUEST['add' . $i]);
        @($remove = $_REQUEST['remove' . $i]);
        $fieldinfo = split('/', $fieldinfo, 2);
        $field = $fieldinfo[0];
        $fieldtype = $fieldinfo[1];
        if ($add == '+') {
            $add_filter = $i;
        } else {
            if ($remove == '-') {
                $remove_filter = $i;
            }
        }
        $cv = get_sql_compare_and_value($compare, $value);
        $sql_compare = $cv[0];
        $sql_value = $cv[1];
        $sql_field = $pageSpecificFilters->getSqlField($field);
        if ($fieldtype == 'date') {
            $filterdata['hasdateclause'] = 1;
        }
        // Treat the buildstamp field as if it were a date clause so that the
        // default date clause of "builds from today only" is not used...
        //
        if ($field == 'buildstamp') {
            $filterdata['hasdateclause'] = 1;
        }
        if ($sql_field != '' && $sql_compare != '') {
            if ($clauses > 0) {
                $sql .= ' ' . $sql_combine . ' ';
            }
            $sql .= $sql_field . ' ' . $sql_compare . ' ' . $sql_value;
            ++$clauses;
        }
        $filters[] = array('field' => $field, 'fieldtype' => $fieldtype, 'compare' => $compare, 'value' => $value);
    }
    if ($clauses == 0) {
        $sql = '';
    } else {
        $sql .= ')';
    }
    // If no filters were passed in as parameters,
    // then add one default filter so that the user sees
    // somewhere to enter filter queries in the GUI:
    //
    if (0 == count($filters)) {
        $filters[] = $pageSpecificFilters->getDefaultFilter();
    }
    // If adding or removing a filter, do it before saving the
    // $filters array in the $filterdata...
    //
    if ($add_filter != 0) {
        $idx = $add_filter - 1;
        // Add a copy of the existing filter we are adding after:
        //
        $filter = $filters[$idx];
        array_splice($filters, $idx, 0, array($filter));
        //
        // with $length=0, array_splice is an "insert array element" call...
    }
    if ($remove_filter != 0) {
        $idx = $remove_filter - 1;
        array_splice($filters, $idx, 1);
        //
        // with $length=1, and no $replacement, array_splice is a "delete array
        // element" call...
    }
    // Fill up filterdata and return it:
    //
    @($debug = $_REQUEST['debug']);
    if ($debug) {
        $filterdata['debug'] = 1;
        // '0' or '1' -- shows debug info in HTML output
    } else {
        $filterdata['debug'] = 0;
    }
    $filterdata['filtercombine'] = $filtercombine;
    $filterdata['filters'] = $filters;
    $filterdata['limit'] = $limit;
    if ($showfilters) {
        $filterdata['showfilters'] = 1;
    } else {
        $filterdata['showfilters'] = 0;
    }
    if (array_key_exists("colorblind", $_COOKIE)) {
        $filterdata['colorblind'] = intval($_COOKIE["colorblind"]);
    } else {
        if ($CDASH_CSS_FILE === 'colorblind.css') {
            $filterdata['colorblind'] = 1;
        } else {
            $filterdata['colorblind'] = 0;
        }
    }
    if (!array_key_exists('showlimit', $_REQUEST)) {
        $showlimit = $pageSpecificFilters->getDefaultShowLimit();
    }
    if ($showlimit) {
        $filterdata['showlimit'] = 1;
    } else {
        $filterdata['showlimit'] = 0;
    }
    $filterdata['sql'] = $sql;
    $xml = filterdata_XML($filterdata);
    $filterdata['xml'] = $xml;
    return $filterdata;
}
Beispiel #2
0
function get_filterdata_array_from_request($page_id = '')
{
    $filterdata = array();
    $filters = array();
    $sql = '';
    $clauses = 0;
    if (empty($page_id)) {
        $pos = strrpos($_SERVER['SCRIPT_NAME'], '/');
        $page_id = substr($_SERVER['SCRIPT_NAME'], $pos + 1);
    }
    $filterdata['availablefilters'] = getFiltersForPage($page_id);
    $pageSpecificFilters = createPageSpecificFilters($page_id);
    if (isset($_GET['value1']) && strlen($_GET['value1']) > 0) {
        $filtercount = $_GET['filtercount'];
    } else {
        $filtercount = 0;
    }
    $filterdata['filtercount'] = $filtercount;
    $showfilters = pdo_real_escape_numeric(@$_REQUEST['showfilters']);
    if ($showfilters) {
        $filterdata['showfilters'] = 1;
    } else {
        if ($filtercount > 0) {
            $filterdata['showfilters'] = 1;
        } else {
            $filterdata['showfilters'] = 0;
        }
    }
    $showlimit = pdo_real_escape_numeric(@$_REQUEST['showlimit']);
    if ($showlimit) {
        $filterdata['showlimit'] = 1;
    } else {
        $filterdata['showlimit'] = 0;
    }
    $limit = intval(pdo_real_escape_numeric(@$_REQUEST['limit']));
    if (!is_int($limit)) {
        $limit = 0;
    }
    $filterdata['limit'] = $limit;
    @($filtercombine = htmlspecialchars(pdo_real_escape_string($_REQUEST['filtercombine'])));
    $filterdata['filtercombine'] = $filtercombine;
    if (strtolower($filtercombine) == 'or') {
        $sql_combine = 'OR';
    } else {
        $sql_combine = 'AND';
    }
    $sql = 'AND (';
    // Check for filters passed in via the query string
    for ($i = 1; $i <= $filtercount; ++$i) {
        if (empty($_REQUEST['field' . $i])) {
            continue;
        }
        $field = htmlspecialchars(pdo_real_escape_string($_REQUEST['field' . $i]));
        $compare = htmlspecialchars(pdo_real_escape_string($_REQUEST['compare' . $i]));
        $value = htmlspecialchars(pdo_real_escape_string($_REQUEST['value' . $i]));
        $cv = get_sql_compare_and_value($compare, $value);
        $sql_compare = $cv[0];
        $sql_value = $cv[1];
        $sql_field = $pageSpecificFilters->getSqlField($field);
        /* TODO: handle fieldtype.  currently defined in JS.
                   Here's how its done the old way:
                   $fieldinfo =  htmlspecialchars(pdo_real_escape_string($_REQUEST['field'.$i]));
                   $fieldinfo = preg_split('#/#', $fieldinfo, 2);
                   $field = $fieldinfo[0];
                   $fieldtype = $fieldinfo[1];
                   (end old way)
        
                   if ($fieldtype == 'date')
                   {
                   $filterdata['hasdateclause'] = 1;
                   }
                 */
        // Treat the buildstamp field as if it were a date clause so that the
        // default date clause of "builds from today only" is not used...
        //
        if ($field == 'buildstamp') {
            $filterdata['hasdateclause'] = 1;
        }
        if ($sql_field != '' && $sql_compare != '') {
            if ($clauses > 0) {
                $sql .= ' ' . $sql_combine . ' ';
            }
            $sql .= $sql_field . ' ' . $sql_compare . ' ' . $sql_value;
            ++$clauses;
        }
        $filters[] = array('key' => $field, 'value' => $value, 'compare' => $compare);
    }
    if ($clauses == 0) {
        $sql = '';
    } else {
        $sql .= ')';
    }
    $filterdata['sql'] = $sql;
    // If no filters were passed in as parameters,
    // then add one default filter so that the user sees
    // somewhere to enter filter queries in the GUI:
    //
    if (count($filters) === 0) {
        $filters[] = getDefaultFilter($page_id);
    }
    $filterdata['filters'] = $filters;
    return $filterdata;
}
Beispiel #3
0
function get_label_ids_from_filterdata($filterdata)
{
    $label_ids = array();
    $clauses = 0;
    $label_sql = '';
    $sql_combine = $filterdata['filtercombine'];
    foreach ($filterdata['filters'] as $filter) {
        if ($filter['field'] == 'label') {
            $cv = get_sql_compare_and_value($filter['compare'], $filter['value']);
            $sql_compare = $cv[0];
            $sql_value = $cv[1];
            if ($clauses > 0) {
                $label_sql .= " {$sql_combine} ";
            }
            $label_sql .= "text {$sql_compare} {$sql_value}";
            ++$clauses;
        }
    }
    if ($clauses > 0) {
        $query_sql = "SELECT id FROM label WHERE {$label_sql}";
        $result = pdo_query($query_sql);
        while ($row = pdo_fetch_array($result)) {
            $label_ids[] = $row['id'];
        }
    }
    return $label_ids;
}