diff --git a/libraries/TableSearch.class.php b/libraries/TableSearch.class.php index 8b3b2f14d2..14624009aa 100644 --- a/libraries/TableSearch.class.php +++ b/libraries/TableSearch.class.php @@ -105,6 +105,16 @@ class PMA_TableSearch $this->_loadTableInfo($this->_db, $this->_table); } + /** + * Returns Column names array + * + * @return array column names + */ + public function getColumnNames() + { + return $this->_columnNames; + } + /** * Gets all the columns of a table along with their types, collations * and whether null or not. diff --git a/libraries/tbl_select.lib.php b/libraries/tbl_select.lib.php deleted file mode 100644 index 80dc5b2c60..0000000000 --- a/libraries/tbl_select.lib.php +++ /dev/null @@ -1,1203 +0,0 @@ - $row) { - $columnNames[] = $row['Field']; - $type = $row['Type']; - - // check whether table contains geometric columns - if (in_array($type, $geom_types)) { - $geomColumnFlag = true; - } - - // reformat mysql query output - if (strncasecmp($type, 'set', 3) == 0 - || strncasecmp($type, 'enum', 4) == 0 - ) { - $type = str_replace(',', ', ', $type); - } else { - // strip the "BINARY" attribute, except if we find "BINARY(" because - // this would be a BINARY or VARBINARY field type - if (! preg_match('@BINARY[\(]@i', $type)) { - $type = preg_replace('@BINARY@i', '', $type); - } - $type = preg_replace('@ZEROFILL@i', '', $type); - $type = preg_replace('@UNSIGNED@i', '', $type); - - $type = strtolower($type); - } - if (empty($type)) { - $type = ' '; - } - $columnNullFlags[] = $row['Null']; - $columnTypes[] = $type; - $columnCollations[] - = ! empty($row['Collation']) && $row['Collation'] != 'NULL' - ? $row['Collation'] - : ''; - } // end while - - return array( - $columnNames, - $columnTypes, - $columnCollations, - $columnNullFlags, - $geomColumnFlag - ); -} - -/** - * Sets the table header for displaying a table in query-by-example format. - * - * @param bool $geomColumnFlag whether a geometry column is present - * - * @return HTML content, the tags and content for table header - */ -function PMA_tbl_getTableHeader($geomColumnFlag = false) -{ - // Display the Function column only if there is at least one geometry column - $func = ''; - if ($geomColumnFlag) { - $func = '' . __('Function') . ''; - } - - return ' - ' . $func . '' . __('Column') . ' - ' . __('Type') . ' - ' . __('Collation') . ' - ' . __('Operator') . ' - ' . __('Value') . ' - - '; -} - -/** - * Returns an array with necessary configrations to create - * sub-tabs(Table Search and Zoom Search) in the table_select page. - * - * @return array Array containing configuration (icon, text, link, id, args) - * of sub-tabs for Table Search and Zoom search - */ -function PMA_tbl_getSubTabs() -{ - $subtabs = array(); - $subtabs['search']['icon'] = 'b_search.png'; - $subtabs['search']['text'] = __('Table Search'); - $subtabs['search']['link'] = 'tbl_select.php'; - $subtabs['search']['id'] = 'tbl_search_id'; - $subtabs['search']['args']['pos'] = 0; - - $subtabs['zoom']['icon'] = 'b_props.png'; - $subtabs['zoom']['link'] = 'tbl_zoom_select.php'; - $subtabs['zoom']['text'] = __('Zoom Search'); - $subtabs['zoom']['id'] = 'zoom_search_id'; - - return $subtabs; -} - -/** - * Provides html elements for search criteria inputbox - * in case the column's type is geometrical - * - * @param int $column_index Column's index - * @param bool $in_fbs Whether we are in 'function based search' - * - * @return HTML elements. - */ -function PMA_tblSearchGetGeometricalInputBox($column_index, $in_fbs) -{ - $html_output = ''; - - if ($in_fbs) { - $edit_url = 'gis_data_editor.php?' . PMA_generate_common_url(); - $edit_str = PMA_getIcon('b_edit.png', __('Edit/Insert')); - $html_output .= ''; - $html_output .= PMA_linkOrButton( - $edit_url, $edit_str, array(), false, false, '_blank' - ); - $html_output .= ''; - } - return $html_output; -} - -/** - * Provides html elements for search criteria inputbox - * in case the column is a Foreign Key - * - * @param array $foreignData Foreign keys data - * @param string $field Column name - * @param int $column_index Column index - * @param string $db Selected database - * @param string $table Selected table - * @param array $titles Selected title - * @param int $foreignMaxLimit Max limit of displaying foreign elements - * @param array $criteriaValues Array of search criteria inputs - * @param string $field_id Column's inputbox's id - * @param bool $in_zoom_search_edit Whether we are in zoom search edit - * - * @return HTML elements. - */ -function PMA_tblSearchGetForeignKeyInputBox($foreignData, $field, $column_index, - $db, $table, $titles, $foreignMaxLimit, $criteriaValues, - $field_id, $in_zoom_search_edit = false -) { - $html_output = ''; - if (is_array($foreignData['disp_row'])) { - $html_output .= ''; - - } elseif ($foreignData['foreign_link'] == true) { - $html_output .= ''; - - $html_output .= <<'; - } - return $html_output; -} - -/** - * Provides html elements for search criteria inputbox - * in case the column is of ENUM or SET type - * - * @param int $column_index Column index - * @param array $criteriaValues Array of search criteria inputs - * @param string $field_type Column type - * @param string $field_id Column's inputbox's id - * @param bool $in_zoom_search_edit Whether we are in zoom search edit - * - * @return HTML elements. - */ -function PMA_tblSearchGetEnumSetInputBox($column_index, $criteriaValues, $field_type, - $field_id, $in_zoom_search_edit = false -) { - $html_output = ''; - $value = explode( - ', ', - str_replace("'", '', substr($field_type, 5, -1)) - ); - $cnt_value = count($value); - - /* - * Enum in edit mode --> dropdown - * Enum in search mode --> multiselect - * Set in edit mode --> multiselect - * Set in search mode --> input (skipped here, so the 'else' - * section would handle it) - */ - if ((strncasecmp($field_type, 'enum', 4) && ! $in_zoom_search_edit) - || (strncasecmp($field_type, 'set', 3) && $in_zoom_search_edit) - ) { - $html_output .= ''; - } - - //Add select options - for ($j = 0; $j < $cnt_value; $j++) { - if (isset($criteriaValues[$column_index]) - && is_array($criteriaValues[$column_index]) - && in_array($value[$j], $criteriaValues[$column_index]) - ) { - $html_output .= ''; - } else { - $html_output .= ''; - } - } // end for - $html_output .= ''; - return $html_output; -} - -/** - * Creates the HTML content for: - * 1) Browsing foreign data for a field. - * 2) Creating elements for search criteria input on fields. - * - * @param array $foreigners Array of foreign keys - * @param array $foreignData Foreign keys data - * @param string $field Column name - * @param string $field_type Column type - * @param int $column_index Column index - * @param string $db Selected database - * @param string $table Selected table - * @param array $titles Selected title - * @param int $foreignMaxLimit Max limit of displaying foreign elements - * @param array $criteriaValues Array of search criteria inputs - * @param bool $in_fbs Whether we are in 'function based search' - * @param bool $in_zoom_search_edit Whether we are in zoom search edit - * - * @return string HTML content for viewing foreing data and elements - * for search criteria input. - */ -function PMA_tblSearchGetInputbox($foreigners, $foreignData, $field, - $field_type, $column_index, $db, $table, $titles, $foreignMaxLimit, - $criteriaValues, $in_fbs = false, $in_zoom_search_edit = false -) { - $str = ''; - $field_type = (string)$field_type; - $field_id = ($in_zoom_search_edit) ? 'edit_fieldID_' : 'fieldID_'; - - //Get inputbox based on different column types (Foreign key, geometrical, enum) - if ($foreigners && isset($foreigners[$field])) { - $str .= PMA_tblSearchGetForeignKeyInputBox( - $foreignData, $field, $column_index, $db, $table, $titles, - $foreignMaxLimit, $criteriaValues, $field_id - ); - - } elseif (in_array($field_type, PMA_getGISDatatypes())) { - $str .= PMA_tblSearchGetGeometricalInputBox($column_index, $in_fbs); - - } elseif (strncasecmp($field_type, 'enum', 4) == 0 - || (strncasecmp($field_type, 'set', 3) == 0 && $in_zoom_search_edit) - ) { - $str .= PMA_tblSearchGetEnumSetInputBox( - $column_index, $criteriaValues, $field_type, $field_id, - $in_zoom_search_edit = false - ); - - } else { - // other cases - $the_class = 'textfield'; - - if ($field_type == 'date') { - $the_class .= ' datefield'; - } elseif ($field_type == 'datetime' || substr($field_type, 0, 9) == 'timestamp') { - $the_class .= ' datetimefield'; - } elseif (substr($field_type, 0, 3) == 'bit') { - $the_class .= ' bit'; - } - - $str .= ''; - } - return $str; -} - -/** - * Return the where clause in case column's type is ENUM. - * - * @param mixed $criteriaValues Search criteria input - * @param string $func_type Search fucntion/operator - * - * @return string part of where clause. - */ -function PMA_tblSearchGetEnumWhereClause($criteriaValues, $func_type) -{ - $where = ''; - if (! empty($criteriaValues)) { - if (! is_array($criteriaValues)) { - $criteriaValues = explode(',', $criteriaValues); - } - $enum_selected_count = count($criteriaValues); - if ($func_type == '=' && $enum_selected_count > 1) { - $func_type = 'IN'; - $parens_open = '('; - $parens_close = ')'; - - } elseif ($func_type == '!=' && $enum_selected_count > 1) { - $func_type = 'NOT IN'; - $parens_open = '('; - $parens_close = ')'; - - } else { - $parens_open = ''; - $parens_close = ''; - } - $enum_where = '\'' . PMA_sqlAddslashes($criteriaValues[0]) . '\''; - for ($e = 1; $e < $enum_selected_count; $e++) { - $enum_where .= ', \'' . PMA_sqlAddslashes($criteriaValues[$e]) - . '\''; - } - - $where = ' ' . $func_type . ' ' . $parens_open - . $enum_where . $parens_close; - } - return $where; -} - -/** - * Return the where clause for a geometrical column. - * - * @param mixed $criteriaValues Search criteria input - * @param string $names Name of the column on which search is submitted - * @param string $func_type Search fucntion/operator - * @param bool $geom_func Whether geometry functions should be applied - * - * @return string part of where clause. - */ -function PMA_tblSearchGetGeomWhereClause($criteriaValues, $names, $func_type, - $geom_func = null -) { - $geom_unary_functions = array( - 'IsEmpty' => 1, - 'IsSimple' => 1, - 'IsRing' => 1, - 'IsClosed' => 1, - ); - $where = ''; - - // Get details about the geometry fucntions - $geom_funcs = PMA_getGISFunctions($types, true, false); - // New output type is the output type of the function being applied - $types = $geom_funcs[$geom_func]['type']; - - // If the function takes a single parameter - if ($geom_funcs[$geom_func]['params'] == 1) { - $backquoted_name = $geom_func . '(' . PMA_backquote($names) . ')'; - } else { - // If the function takes two parameters - // create gis data from the criteria input - $gis_data = PMA_createGISData($criteriaValues); - $where = $geom_func . '(' . PMA_backquote($names) . ',' . $gis_data . ')'; - return $where; - } - - // If the where clause is something like 'IsEmpty(`spatial_col_name`)' - if (isset($geom_unary_functions[$geom_func]) && trim($criteriaValues) == '') { - $where = $backquoted_name; - - } elseif (in_array($types, PMA_getGISDatatypes()) && ! empty($criteriaValues)) { - // create gis data from the criteria input - $gis_data = PMA_createGISData($criteriaValues); - $where = $backquoted_name . ' ' . $func_type . ' ' . $gis_data; - } - return $where; -} - -/** - * Return the where clause for query generation based on the inputs provided. - * - * @param mixed $criteriaValues Search criteria input - * @param string $names Name of the column on which search is submitted - * @param string $types Type of the field - * @param string $collations Field collation - * @param string $func_type Search fucntion/operator - * @param bool $unaryFlag Whether operator unary or not - * @param bool $geom_func Whether geometry functions should be applied - * - * @return string generated where clause. - */ -function PMA_tbl_search_getWhereClause($criteriaValues, $names, $types, $collations, - $func_type, $unaryFlag, $geom_func = null -) { - // If geometry function is set - if ($geom_func != null && trim($geom_func) != '') { - return PMA_tblSearchGetGeomWhereClause( - $criteriaValues, $names, $func_type, $geom_func - ); - } - - $backquoted_name = PMA_backquote($names); - $where = ''; - if ($unaryFlag) { - $criteriaValues = ''; - $where = $backquoted_name . ' ' . $func_type; - - } elseif (strncasecmp($types, 'enum', 4) == 0) { - $where = $backquoted_name; - $where .= PMA_tblSearchGetEnumWhereClause($criteriaValues, $func_type); - - } elseif ($criteriaValues != '') { - // For these types we quote the value. Even if it's another type (like INT), - // for a LIKE we always quote the value. MySQL converts strings to numbers - // and numbers to strings as necessary during the comparison - if (preg_match('@char|binary|blob|text|set|date|time|year@i', $types) - || strpos(' ' . $func_type, 'LIKE') - ) { - $quot = '\''; - } else { - $quot = ''; - } - - // LIKE %...% - if ($func_type == 'LIKE %...%') { - $func_type = 'LIKE'; - $criteriaValues = '%' . $criteriaValues . '%'; - } - if ($func_type == 'REGEXP ^...$') { - $func_type = 'REGEXP'; - $criteriaValues = '^' . $criteriaValues . '$'; - } - - if ($func_type == 'IN (...)' - || $func_type == 'NOT IN (...)' - || $func_type == 'BETWEEN' - || $func_type == 'NOT BETWEEN' - ) { - $func_type = str_replace(' (...)', '', $func_type); - - // quote values one by one - $values = explode(',', $criteriaValues); - foreach ($values as &$value) { - $value = $quot . PMA_sqlAddslashes(trim($value)) . $quot; - } - - if ($func_type == 'BETWEEN' || $func_type == 'NOT BETWEEN') { - $where = $backquoted_name . ' ' . $func_type . ' ' - . (isset($values[0]) ? $values[0] : '') - . ' AND ' . (isset($values[1]) ? $values[1] : ''); - } else { - $where = $backquoted_name . ' ' . $func_type - . ' (' . implode(',', $values) . ')'; - } - } else { - $where = $backquoted_name . ' ' . $func_type . ' ' - . $quot . PMA_sqlAddslashes($criteriaValues) . $quot; - } - } // end if - - return $where; -} - -/** - * Builds the sql search query from the post parameters - * - * @return string the generated SQL query - */ -function PMA_tblSearchBuildSqlQuery() -{ - $sql_query = 'SELECT '; - - // If only distinct values are needed - $is_distinct = (isset($_POST['distinct'])) ? 'true' : 'false'; - if ($is_distinct == 'true') { - $sql_query .= 'DISTINCT '; - } - - // if all column names were selected to display, we do a 'SELECT *' - // (more efficient and this helps prevent a problem in IE - // if one of the rows is edited and we come back to the Select results) - if (isset($_POST['zoom_submit'])) { - $sql_query .= '* '; - } else { - $sql_query .= (count($_POST['columnsToDisplay']) - == count($_POST['criteriaColumnNames']) - ? '* ' - : implode(', ', PMA_backquote($_POST['columnsToDisplay']))); - } // end if - - $sql_query .= ' FROM ' . PMA_backquote($_POST['table']); - $whereClause = PMA_tblSearchGenerateWhereClause(); - $sql_query .= $whereClause; - - // if the search results are to be ordered - if (isset($_POST['orderByColumn']) && $_POST['orderByColumn'] != '--nil--') { - $sql_query .= ' ORDER BY ' . PMA_backquote($_POST['orderByColumn']) - . ' ' . $_POST['order']; - } // end if - return $sql_query; -} - -/** - * Generates the where clause for the SQL search query to be executed - * - * @return string the generated where clause - */ -function PMA_tblSearchGenerateWhereClause() -{ - $fullWhereClause = ''; - - if (isset($_POST['customWhereClause']) && trim($_POST['customWhereClause']) != '') { - $fullWhereClause .= ' WHERE ' . $_POST['customWhereClause']; - return $fullWhereClause; - } - - // If there are no search criteria set, return - if (! array_filter($_POST['criteriaValues'])) { - return $fullWhereClause; - } - - // else continue to form the where clause from column criteria values - $fullWhereClause = $charsets = array(); - reset($_POST['criteriaColumnOperators']); - while (list($column_index, $operator) = each($_POST['criteriaColumnOperators'])) { - list($charsets[$column_index]) = explode( - '_', $_POST['criteriaColumnCollations'][$column_index] - ); - $unaryFlag = $GLOBALS['PMA_Types']->isUnaryOperator($operator); - $tmp_geom_func = isset($geom_func[$column_index]) - ? $geom_func[$column_index] : null; - - $whereClause = PMA_tbl_search_getWhereClause( - $_POST['criteriaValues'][$column_index], - $_POST['criteriaColumnNames'][$column_index], - $_POST['criteriaColumnTypes'][$column_index], - $_POST['criteriaColumnCollations'][$column_index], $operator, $unaryFlag, - $tmp_geom_func - ); - - if ($whereClause) { - $fullWhereClause[] = $whereClause; - } - } // end while - - if ($fullWhereClause) { - $fullWhereClause = ' WHERE ' . implode(' AND ', $fullWhereClause); - } - return $fullWhereClause; -} - -/** - * Generates HTML for a geometrical function column to be displayed in table - * search selection form - * - * @param boolean $geomColumnFlag whether a geometry column is present - * @param array $columnTypes array containing types of all columns in the table - * @param array $geom_types array of GIS data types - * @param integer $column_index index of current column in $columnTypes array - * - * @return string the generated HTML - */ -function PMA_tblSearchGetGeomFuncHtml($geomColumnFlag, $columnTypes, $geom_types, - $column_index -) { - $html_output = ''; - // return if geometrical column is not present - if (! $geomColumnFlag) { - return $html_output; - } - - /** - * Displays 'Function' column if it is present - */ - $html_output .= ''; - // if a geometry column is present - if (in_array($columnTypes[$column_index], $geom_types)) { - $html_output .= ''; - } else { - $html_output .= ' '; - } - $html_output .= ''; - return $html_output; -} - -/** - * Generates formatted HTML for extra search options in table search form - * - * @param array $columnNames Array containing types of all columns in the table - * - * @return string the generated HTML - */ -function PMA_tblSearchGetOptions($columnNames) -{ - $html_output = ''; - $html_output .= PMA_getDivForSliderEffect('searchoptions', __('Options')); - /** - * Displays columns select list for selecting distinct columns in the search - */ - $html_output .= '
' - . '' . __('Select columns (at least one):') . '' - . '' - . '' - . '
'; - - /** - * Displays input box for custom 'Where' clause to be used in the search - */ - $html_output .= '
' - . '' . '' . __('Or') . ' ' - . __('Add search conditions (body of the "where" clause):') . ''; - $html_output .= PMA_showMySQLDocu('SQL-Syntax', 'Functions'); - $html_output .= ''; - $html_output .= '
'; - - /** - * Displays option of changing default number of rows displayed per page - */ - $html_output .= '
' - . '' . __('Number of rows per page') . '' - . '' - . '
'; - - /** - * Displays option for ordering search results by a column value (Asc or Desc) - */ - $html_output .= '
' - . '' . __('Display order:') . '' - . ''; - $choices = array( - 'ASC' => __('Ascending'), - 'DESC' => __('Descending') - ); - $html_output .= PMA_getRadioFields( - 'order', $choices, 'ASC', false, true, "formelement" - ); - unset($choices); - - $html_output .= '

'; - return $html_output; -} - -/** - * Other search criteria like data label - * (for tbl_zoom_select.php) - * - * @param array $columnNames Names of columns in the table - * @param array $dataLabel Label for points in zoom plot - * - * @return string the generated html - */ -function PMA_tblSearchGetOptionsZoom($columnNames, $dataLabel) -{ - $html_output = ''; - $html_output .= ''; - //Select options for datalabel - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - //Inputbox for changing default maximum rows to plot - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= '
'; - $html_output .= ''; - $html_output .= '
'; - return $html_output; -} - -/** - * Provides a column's type, collation, operators list, and crietria value - * to display in table search form - * - * @param string $db Selected Database - * @param string $table Selected Table - * @param array $columnNames Names of columns in the table - * @param array $columnTypes Types of columns in the table - * @param array $columnCollations Collation of all columns - * @param array $columnNullFlags Null information of columns - * @param array $foreigners Array of foreign keys - * @param integer $search_index Row number in table search form - * @param integer $column_index Column index in ColumnNames array - * - * @return array Array contaning column's properties - */ -function PMA_tblSearchGetColumnProperties($db, $table, $columnNames, $columnTypes, - $columnCollations, $columnNullFlags, $foreigners, $search_index, $column_index -) { - $selected_operator = (isset($_POST['criteriaColumnOperators']) - ? $_POST['criteriaColumnOperators'][$search_index] : ''); - $entered_value = (isset($_POST['criteriaValues']) - ? $_POST['criteriaValues'] : ''); - $titles['Browse'] = PMA_getIcon('b_browse.png', __('Browse foreign values')); - //Gets column's type and collation - $type = $columnTypes[$column_index]; - $collation = $columnCollations[$column_index]; - //Gets column's comparison operators depending on column type - $func = ''; - //Gets link to browse foreign data(if any) and criteria inputbox - $foreignData = PMA_getForeignData( - $foreigners, $columnNames[$column_index], false, '', '' - ); - $value = PMA_tblSearchGetInputbox( - $foreigners, $foreignData, $columnNames[$column_index], $type, $search_index, - $db, $table, $titles, $GLOBALS['cfg']['ForeignKeyMaxLimit'], $entered_value - ); - return array( - 'type' => $type, - 'collation' => $collation, - 'func' => $func, - 'value' => $value - ); -} - -/** - * Provides the search form's table row in case of Normal Search - * (for tbl_select.php) - * - * @param string $db Selected Database - * @param string $table Selected Table - * @param array $columnNames Names of columns in the table - * @param array $columnTypes Types of columns in the table - * @param array $columnCollations Collation of all columns - * @param array $columnNullFlags Null information of columns - * @param boolean $geomColumnFlag Whether a geometry column is present - * @param array $foreigners Array of foreign keys - * - * @return string the generated table row - */ -function PMA_tblSearchGetRowsNormal($db, $table, $columnNames, $columnTypes, - $columnCollations, $columnNullFlags, $geomColumnFlag, $foreigners -) { - $geom_types = PMA_getGISDatatypes(); - $odd_row = true; - $html_output = ''; - // for every column present in table - for ($column_index = 0; $column_index < count($columnNames); $column_index++) { - $html_output .= ''; - $odd_row = !$odd_row; - //If 'Function' column is present - $html_output .= PMA_tblSearchGetGeomFuncHtml( - $geomColumnFlag, $columnTypes, $geom_types, $column_index - ); - //Displays column's name, type, collation and value - $html_output .= '' . htmlspecialchars($columnNames[$column_index]) - . ''; - $properties = PMA_tblSearchGetColumnProperties( - $db, $table, $columnNames, $columnTypes, $columnCollations, - $columnNullFlags, $foreigners, $column_index, $column_index - ); - $html_output .= '' . $properties['type'] . ''; - $html_output .= '' . $properties['collation'] . ''; - $html_output .= '' . $properties['func'] . ''; - $html_output .= '' . $properties['value'] . ''; - $html_output .= ''; - //Displays hidden fields - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - } // end for - - return $html_output; -} - -/** - * Provides the search form's table row in case of Zoom Search - * (for tbl_zoom_select.php) - * - * @param string $db Selected Database - * @param string $table Selected Table - * @param array $columnNames Names of columns in the table - * @param array $columnTypes Types of columns in the table - * @param array $columnCollations Collation of all columns - * @param array $columnNullFlags Null information of columns - * @param array $foreigners Array of foreign keys - * - * @return string the generated table row - */ -function PMA_tblSearchGetRowsZoom($db, $table, $columnNames, $columnTypes, - $columnCollations, $columnNullFlags, $foreigners -) { - $odd_row = true; - $html_output = ''; - /** - * Get already set search criteria (if any) - */ - - //Displays column rows for search criteria input - for ($i = 0; $i < 4; $i++) { - //After X-Axis and Y-Axis column rows, display additional criteria option - if ($i == 2) { - $html_output .= ''; - $html_output .= __("Additional search criteria"); - $html_output .= ''; - } - $html_output .= ''; - $odd_row = ! $odd_row; - //Select options for column names - $html_output .= ''; - if (isset($_POST['criteriaColumnNames']) - && $_POST['criteriaColumnNames'][$i] != 'pma_null' - ) { - $key = array_search($_POST['criteriaColumnNames'][$i], $columnNames); - $properties = PMA_tblSearchGetColumnProperties( - $db, $table, $columnNames, $columnTypes, $columnCollations, - $columnNullFlags, $foreigners, $i, $key - ); - $type[$i] = $properties['type']; - $collation[$i] = $properties['collation']; - $func[$i] = $properties['func']; - $value[$i] = $properties['value']; - } - //Column type - $html_output .= '' . (isset($type[$i]) ? $type[$i] : '') . ''; - //Column Collation - $html_output .= '' . (isset($collation[$i]) ? $collation[$i] : '') - . ''; - //Select options for column operators - $html_output .= '' . (isset($func[$i]) ? $func[$i] : '') . ''; - //Inputbox for search criteria value - $html_output .= '' . (isset($value[$i]) ? $value[$i] : '') . ''; - $html_output .= ''; - //Displays hidden fields - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - }//end for - return $html_output; -} - -/** - * Generates HTML for displaying fields table in search form - * - * @param string $db Selected Database - * @param string $table Selected Table - * @param array $columnNames Names of columns in the table - * @param array $columnTypes Types of columns in the table - * @param array $columnCollations Collation of all columns - * @param array $columnNullFlags Null information of columns - * @param boolean $geomColumnFlag Whether a geometry column is present - * @param array $foreigners Array of foreign keys - * @param string $searchType Whether normal search or zoom search - * - * @return string the generated HTML - */ -function PMA_tblSearchGetFieldsTableHtml($db, $table, $columnNames, $columnTypes, - $columnCollations, $columnNullFlags, $geomColumnFlag, $foreigners, $searchType -) { - $html_output = ''; - $html_output .= ''; - $html_output .= PMA_tbl_getTableHeader($geomColumnFlag); - $html_output .= ''; - - if ($searchType == 'zoom') { - $html_output .= PMA_tblSearchGetRowsZoom( - $db, $table, $columnNames, $columnTypes, $columnCollations, - $columnNullFlags, $foreigners - ); - } else { - $html_output .= PMA_tblSearchGetRowsNormal( - $db, $table, $columnNames, $columnTypes, $columnCollations, - $columnNullFlags, $geomColumnFlag, $foreigners - ); - } - - $html_output .= '
'; - return $html_output; -} - -/** - * Provides the form tag for table search form - * (normal search or zoom search) - * - * @param string $goto Goto URL - * @param string $db Selected Database - * @param string $table Selected Table - * @param string $searchType Whether normal search or zoom search - * - * @return string the HTML for form tag - */ -function PMA_tblSearchGetFormTag($goto, $db, $table, $searchType) -{ - $html_output = ''; - $scriptName = ($searchType == 'zoom' ? 'tbl_zoom_select.php' : 'tbl_select.php'); - $formId = ($searchType == 'zoom' ? 'zoom_search_form' : 'tbl_search_form'); - - $html_output .= '
'; - - $html_output .= PMA_generate_common_hidden_inputs($db, $table); - $html_output .= ''; - $html_output .= ''; - - return $html_output; -} - -/** - * Generates the table search form under table search tab - * - * @param string $goto Goto URL - * @param string $db Selected Database - * @param string $table Selected Table - * @param array $columnNames Names of columns in the table - * @param array $columnTypes Types of columns in the table - * @param array $columnCollations Collation of all columns - * @param array $columnNullFlags Null information of columns - * @param boolean $geomColumnFlag Whether a geometry column is present - * @param array $foreigners Array of foreign keys - * @param string $searchType Whether normal search or zoom search - * @param string $dataLabel Label for points in zoom plot - * - * @return string the generated HTML for table search form - */ -function PMA_tblSearchGetSelectionForm($goto, $db, $table, $columnNames, - $columnTypes, $columnCollations, $columnNullFlags, $geomColumnFlag, $foreigners, - $searchType, $dataLabel = null -) { - $html_output = ''; - $html_output .= '
'; - $url_params = array(); - $url_params['db'] = $db; - $url_params['table'] = $table; - - $html_output .= PMA_generateHtmlTabs( - PMA_tbl_getSubTabs(), $url_params, 'topmenu2' - ); - $html_output .= PMA_tblSearchGetFormTag($goto, $db, $table, $searchType); - - $html_output .= '
'; - $html_output .= ($searchType == 'zoom' - ? '' : '
'); - - // Set caption for fieldset - if ($searchType == 'zoom') { - $html_output .= '' - . __('Do a "query by example" (wildcard: "%") for two different columns') - . ''; - } else { - $html_output .= '' - . __('Do a "query by example" (wildcard: "%")') - . ''; - } - - /** - * Displays fields table in search form - */ - $html_output .= PMA_tblSearchGetFieldsTableHtml( - $db, $table, $columnNames, $columnTypes, $columnCollations, $columnNullFlags, - $geomColumnFlag, $foreigners, $searchType - ); - - /** - * Displays more search options - */ - if ($searchType == 'zoom') { - $html_output .= PMA_tblSearchGetOptionsZoom($columnNames, $dataLabel); - } else { - $html_output .= '
' - . '' - . '
'; - $html_output .= PMA_tblSearchGetOptions($columnNames); - } - - /** - * Displays selection form's footer elements - */ - $html_output .= '
'; - $html_output .= ''; - $html_output .= '
'; - if ($searchType == 'zoom') { - $html_output = '
' - . $html_output . '
'; - } else { - $html_output .= '
'; - } - return $html_output; -} - -/** - * Provides form for displaying point data and also the scatter plot - * (for tbl_zoom_select.php) - * - * @param string $goto Goto URL - * @param string $db Selected Database - * @param string $table Selected Table - * @param array $columnNames Names of columns in the table - * @param array $columnTypes Types of columns in the table - * @param array $columnNullFlags Null information of columns - * @param array $foreigners Array of foreign keys - * @param array $data Array containing SQL query data - * - * @return string form's html - */ -function PMA_tblSearchGetZoomResultsForm($goto, $db, $table, $columnNames, - $columnTypes, $columnNullFlags, $foreigners, $data -) { - $html_output = ''; - $titles['Browse'] = PMA_getIcon('b_browse.png', __('Browse foreign values')); - $html_output .= '
'; - $html_output .= PMA_generate_common_hidden_inputs($db, $table); - $html_output .= ''; - $html_output .= ''; - - $html_output .= '
'; - $html_output .= '' . __('Browse/Edit the points') . ''; - - //JSON encode the data(query result) - $html_output .= '
'; - if (isset($_POST['zoom_submit']) && ! empty($data)) { - $html_output .= '
'; - $html_output .= '
' - . __('How to use') . '
'; - $html_output .= ''; - $html_output .= '
'; - $html_output .= ''; - $html_output .= '
'; - } - $html_output .= '
'; - - //Displays rows in point edit form - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - return $html_output; -} -?> diff --git a/tbl_zoom_select.php b/tbl_zoom_select.php index b4c1963982..dd680480aa 100644 --- a/tbl_zoom_select.php +++ b/tbl_zoom_select.php @@ -13,7 +13,7 @@ */ require_once './libraries/common.inc.php'; require_once './libraries/mysql_charsets.lib.php'; -require_once './libraries/tbl_select.lib.php'; +require_once './libraries/TableSearch.class.php'; require_once './libraries/tbl_info.inc.php'; $response = PMA_Response::getInstance(); @@ -50,6 +50,8 @@ foreach ($post_params as $one_post_param) { } } +$table_search = new PMA_TableSearch($db, $table, "zoom"); + /** * Handle AJAX request for data row on point select * @var post_params Object containing parameters for the POST request @@ -90,16 +92,10 @@ if (isset($_REQUEST['change_tbl_info']) && $_REQUEST['change_tbl_info'] == true) $response->addJSON('field_collation', ''); $response->addJSON('field_operators', ''); $response->addJSON('field_value', ''); + exit; } - // Gets the list and number of fields - list($columnNames, $columnTypes, $columnCollations, $columnNullFlags) - = PMA_tbl_getFields($_REQUEST['db'], $_REQUEST['table']); - $foreigners = PMA_getForeigners($db, $table); - $key = array_search($field, $columnNames); - $properties = PMA_tblSearchGetColumnProperties( - $db, $table, $columnNames, $columnTypes, $columnCollations, - $columnNullFlags, $foreigners, $_REQUEST['it'], $key - ); + $key = array_search($field, $table_search->getColumnNames()); + $properties = $table_search->getColumnProperties($_REQUEST['it'], $key); $response->addJSON('field_type', $properties['type']); $response->addJSON('field_collation', $properties['collation']); $response->addJSON('field_operators', $properties['func']); @@ -107,18 +103,11 @@ if (isset($_REQUEST['change_tbl_info']) && $_REQUEST['change_tbl_info'] == true) exit; } -$titles['Browse'] = PMA_getIcon('b_browse.png', __('Browse foreign values')); -/** - * Not selection yet required -> displays the selection form - */ - // Gets some core libraries require_once './libraries/tbl_common.inc.php'; $url_query .= '&goto=tbl_select.php&back=tbl_select.php'; -/** - * Gets tables informations - */ +// Gets tables informations require_once './libraries/tbl_info.inc.php'; if (! isset($goto)) { @@ -127,24 +116,13 @@ if (! isset($goto)) { // Defines the url to return to in case of error in the next sql statement $err_url = $goto . '?' . PMA_generate_common_url($db, $table); -// Gets the list and number of fields -list($columnNames, $columnTypes, $columnCollations, $columnNullFlags) - = PMA_tbl_getFields($db, $table); - -// retrieve keys into foreign fields, if any -// check also foreigners even if relwork is FALSE (to get -// foreign keys from innodb) -$foreigners = PMA_getForeigners($db, $table); - //Set default datalabel if not selected if ( !isset($_POST['zoom_submit']) || $_POST['dataLabel'] == '') { $dataLabel = PMA_getDisplayField($db, $table); } -//Display zoom search form -echo PMA_tblSearchGetSelectionForm( - $goto, $db, $table, $columnNames, $columnTypes, $columnCollations, - $columnNullFlags, false, $foreigners, "zoom", $dataLabel -); + +// Displays the zoom search form +$response->addHTML($table_search->getSelectionForm($goto, $dataLabel)); /* * Handle the input criteria and generate the query result @@ -156,7 +134,7 @@ if (isset($zoom_submit) && $_POST['criteriaColumnNames'][0] != $_POST['criteriaColumnNames'][1] ) { //Query generation part - $sql_query = PMA_tblSearchBuildSqlQuery(); + $sql_query = $table_search->buildSqlQuery(); $sql_query .= ' LIMIT ' . $maxPlotLimit; //Query execution part @@ -171,7 +149,8 @@ if (isset($zoom_submit) } //Get unique conditon on each row (will be needed for row update) $uniqueCondition = PMA_getUniqueCondition( - $result, count($columnNames), $fields_meta, $tmpRow, true + $result, count($table_search->getColumnNames()), $fields_meta, $tmpRow, + true ); //Append it to row array as where_clause $row['where_clause'] = $uniqueCondition[0]; @@ -187,9 +166,6 @@ if (isset($zoom_submit) unset($tmpData); //Displays form for point data and scatter plot - echo PMA_tblSearchGetZoomResultsForm( - $goto, $db, $table, $columnNames, $columnTypes, $columnNullFlags, - $foreigners, $data - ); + $response->addHTML($table_search->getZoomResultsForm($goto, $data)); } ?>