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; }
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; }
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; }