diff options
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Database/Qbe.php')
| -rw-r--r-- | srcs/phpmyadmin/libraries/classes/Database/Qbe.php | 1963 |
1 files changed, 0 insertions, 1963 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Database/Qbe.php b/srcs/phpmyadmin/libraries/classes/Database/Qbe.php deleted file mode 100644 index 27116d0..0000000 --- a/srcs/phpmyadmin/libraries/classes/Database/Qbe.php +++ /dev/null @@ -1,1963 +0,0 @@ -<?php -/* vim: set expandtab sw=4 ts=4 sts=4: */ -/** - * Handles DB QBE search - * - * @package PhpMyAdmin - */ -declare(strict_types=1); - -namespace PhpMyAdmin\Database; - -use PhpMyAdmin\Core; -use PhpMyAdmin\DatabaseInterface; -use PhpMyAdmin\Message; -use PhpMyAdmin\Relation; -use PhpMyAdmin\SavedSearches; -use PhpMyAdmin\Table; -use PhpMyAdmin\Template; -use PhpMyAdmin\Url; -use PhpMyAdmin\Util; - -/** - * Class to handle database QBE search - * - * @package PhpMyAdmin - */ -class Qbe -{ - /** - * Database name - * - * @access private - * @var string - */ - private $_db; - /** - * Table Names (selected/non-selected) - * - * @access private - * @var array - */ - private $_criteriaTables; - /** - * Column Names - * - * @access private - * @var array - */ - private $_columnNames; - /** - * Number of columns - * - * @access private - * @var integer - */ - private $_criteria_column_count; - /** - * Number of Rows - * - * @access private - * @var integer - */ - private $_criteria_row_count; - /** - * Whether to insert a new column - * - * @access private - * @var array - */ - private $_criteriaColumnInsert; - /** - * Whether to delete a column - * - * @access private - * @var array - */ - private $_criteriaColumnDelete; - /** - * Whether to insert a new row - * - * @access private - * @var array - */ - private $_criteriaRowInsert; - /** - * Whether to delete a row - * - * @access private - * @var array - */ - private $_criteriaRowDelete; - /** - * Already set criteria values - * - * @access private - * @var array - */ - private $_criteria; - /** - * Previously set criteria values - * - * @access private - * @var array - */ - private $_prev_criteria; - /** - * AND/OR relation b/w criteria columns - * - * @access private - * @var array - */ - private $_criteriaAndOrColumn; - /** - * AND/OR relation b/w criteria rows - * - * @access private - * @var array - */ - private $_criteriaAndOrRow; - /** - * Large width of a column - * - * @access private - * @var string - */ - private $_realwidth; - /** - * Minimum width of a column - * - * @access private - * @var int - */ - private $_form_column_width; - /** - * Selected columns in the form - * - * @access private - * @var array - */ - private $_formColumns; - /** - * Entered aliases in the form - * - * @access private - * @var array - */ - private $_formAliases; - /** - * Chosen sort options in the form - * - * @access private - * @var array - */ - private $_formSorts; - /** - * Chosen sort orders in the form - * - * @access private - * @var array - */ - private $_formSortOrders; - /** - * Show checkboxes in the form - * - * @access private - * @var array - */ - private $_formShows; - /** - * Entered criteria values in the form - * - * @access private - * @var array - */ - private $_formCriterions; - /** - * AND/OR column radio buttons in the form - * - * @access private - * @var array - */ - private $_formAndOrCols; - /** - * AND/OR row radio buttons in the form - * - * @access private - * @var array - */ - private $_formAndOrRows; - /** - * New column count in case of add/delete - * - * @access private - * @var integer - */ - private $_new_column_count; - /** - * New row count in case of add/delete - * - * @access private - * @var integer - */ - private $_new_row_count; - /** - * List of saved searches - * - * @access private - * @var array - */ - private $_savedSearchList = null; - /** - * Current search - * - * @access private - * @var SavedSearches - */ - private $_currentSearch = null; - - /** - * @var Relation - */ - private $relation; - - /** - * @var DatabaseInterface - */ - public $dbi; - - /** - * @var Template - */ - public $template; - - /** - * Public Constructor - * - * @param Relation $relation Relation object - * @param Template $template Template object - * @param DatabaseInterface $dbi DatabaseInterface object - * @param string $dbname Database name - * @param array $savedSearchList List of saved searches - * @param SavedSearches $currentSearch Current search id - */ - public function __construct( - Relation $relation, - Template $template, - $dbi, - $dbname, - array $savedSearchList = [], - $currentSearch = null - ) { - $this->_db = $dbname; - $this->_savedSearchList = $savedSearchList; - $this->_currentSearch = $currentSearch; - $this->dbi = $dbi; - $this->relation = $relation; - $this->template = $template; - - $this->_loadCriterias(); - // Sets criteria parameters - $this->_setSearchParams(); - $this->_setCriteriaTablesAndColumns(); - } - - /** - * Initialize criterias - * - * @return static - */ - private function _loadCriterias() - { - if (null === $this->_currentSearch - || null === $this->_currentSearch->getCriterias() - ) { - return $this; - } - - $criterias = $this->_currentSearch->getCriterias(); - $_POST = $criterias + $_POST; - - return $this; - } - - /** - * Getter for current search - * - * @return SavedSearches - */ - private function _getCurrentSearch() - { - return $this->_currentSearch; - } - - /** - * Sets search parameters - * - * @return void - */ - private function _setSearchParams() - { - $criteriaColumnCount = $this->_initializeCriteriasCount(); - - $this->_criteriaColumnInsert = Core::ifSetOr( - $_POST['criteriaColumnInsert'], - null, - 'array' - ); - $this->_criteriaColumnDelete = Core::ifSetOr( - $_POST['criteriaColumnDelete'], - null, - 'array' - ); - - $this->_prev_criteria = isset($_POST['prev_criteria']) - ? $_POST['prev_criteria'] - : []; - $this->_criteria = isset($_POST['criteria']) - ? $_POST['criteria'] - : array_fill(0, $criteriaColumnCount, ''); - - $this->_criteriaRowInsert = isset($_POST['criteriaRowInsert']) - ? $_POST['criteriaRowInsert'] - : array_fill(0, $criteriaColumnCount, ''); - $this->_criteriaRowDelete = isset($_POST['criteriaRowDelete']) - ? $_POST['criteriaRowDelete'] - : array_fill(0, $criteriaColumnCount, ''); - $this->_criteriaAndOrRow = isset($_POST['criteriaAndOrRow']) - ? $_POST['criteriaAndOrRow'] - : array_fill(0, $criteriaColumnCount, ''); - $this->_criteriaAndOrColumn = isset($_POST['criteriaAndOrColumn']) - ? $_POST['criteriaAndOrColumn'] - : array_fill(0, $criteriaColumnCount, ''); - // sets minimum width - $this->_form_column_width = 12; - $this->_formColumns = []; - $this->_formSorts = []; - $this->_formShows = []; - $this->_formCriterions = []; - $this->_formAndOrRows = []; - $this->_formAndOrCols = []; - } - - /** - * Sets criteria tables and columns - * - * @return void - */ - private function _setCriteriaTablesAndColumns() - { - // The tables list sent by a previously submitted form - if (Core::isValid($_POST['TableList'], 'array')) { - foreach ($_POST['TableList'] as $each_table) { - $this->_criteriaTables[$each_table] = ' selected="selected"'; - } - } // end if - $all_tables = $this->dbi->query( - 'SHOW TABLES FROM ' . Util::backquote($this->_db) . ';', - DatabaseInterface::CONNECT_USER, - DatabaseInterface::QUERY_STORE - ); - $all_tables_count = $this->dbi->numRows($all_tables); - if (0 == $all_tables_count) { - Message::error(__('No tables found in database.'))->display(); - exit; - } - // The tables list gets from MySQL - while (list($table) = $this->dbi->fetchRow($all_tables)) { - $columns = $this->dbi->getColumns($this->_db, $table); - - if (empty($this->_criteriaTables[$table]) - && ! empty($_POST['TableList']) - ) { - $this->_criteriaTables[$table] = ''; - } else { - $this->_criteriaTables[$table] = ' selected="selected"'; - } // end if - - // The fields list per selected tables - if ($this->_criteriaTables[$table] == ' selected="selected"') { - $each_table = Util::backquote($table); - $this->_columnNames[] = $each_table . '.*'; - foreach ($columns as $each_column) { - $each_column = $each_table . '.' - . Util::backquote($each_column['Field']); - $this->_columnNames[] = $each_column; - // increase the width if necessary - $this->_form_column_width = max( - mb_strlen($each_column), - $this->_form_column_width - ); - } // end foreach - } // end if - } // end while - $this->dbi->freeResult($all_tables); - - // sets the largest width found - $this->_realwidth = $this->_form_column_width . 'ex'; - } - /** - * Provides select options list containing column names - * - * @param integer $column_number Column Number (0,1,2) or more - * @param string $selected Selected criteria column name - * - * @return string HTML for select options - */ - private function _showColumnSelectCell($column_number, $selected = '') - { - return $this->template->render('database/qbe/column_select_cell', [ - 'column_number' => $column_number, - 'column_names' => $this->_columnNames, - 'selected' => $selected, - ]); - } - - /** - * Provides select options list containing sort options (ASC/DESC) - * - * @param integer $columnNumber Column Number (0,1,2) or more - * @param string $selected Selected criteria 'ASC' or 'DESC' - * - * @return string HTML for select options - */ - private function _getSortSelectCell( - $columnNumber, - $selected = '' - ) { - return $this->template->render('database/qbe/sort_select_cell', [ - 'real_width' => $this->_realwidth, - 'column_number' => $columnNumber, - 'selected' => $selected, - ]); - } - - /** - * Provides select options list containing sort order - * - * @param integer $columnNumber Column Number (0,1,2) or more - * @param integer $sortOrder Sort order - * - * @return string HTML for select options - */ - private function _getSortOrderSelectCell($columnNumber, $sortOrder) - { - $totalColumnCount = $this->_getNewColumnCount(); - return $this->template->render('database/qbe/sort_order_select_cell', [ - 'total_column_count' => $totalColumnCount, - 'column_number' => $columnNumber, - 'sort_order' => $sortOrder, - ]); - } - - /** - * Returns the new column count after adding and removing columns as instructed - * - * @return int new column count - */ - private function _getNewColumnCount() - { - $totalColumnCount = $this->_criteria_column_count; - if (! empty($this->_criteriaColumnInsert)) { - $totalColumnCount += count($this->_criteriaColumnInsert); - } - if (! empty($this->_criteriaColumnDelete)) { - $totalColumnCount -= count($this->_criteriaColumnDelete); - } - return $totalColumnCount; - } - - /** - * Provides search form's row containing column select options - * - * @return string HTML for search table's row - */ - private function _getColumnNamesRow() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Column:') . '</th>'; - $new_column_count = 0; - for ($column_index = 0; $column_index < $this->_criteria_column_count; $column_index++) { - if (isset($this->_criteriaColumnInsert[$column_index]) - && $this->_criteriaColumnInsert[$column_index] == 'on' - ) { - $html_output .= $this->_showColumnSelectCell( - $new_column_count - ); - $new_column_count++; - } - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$column_index]) - && $this->_criteriaColumnDelete[$column_index] == 'on' - ) { - continue; - } - $selected = ''; - if (isset($_POST['criteriaColumn'][$column_index])) { - $selected = $_POST['criteriaColumn'][$column_index]; - $this->_formColumns[$new_column_count] - = $_POST['criteriaColumn'][$column_index]; - } - $html_output .= $this->_showColumnSelectCell( - $new_column_count, - $selected - ); - $new_column_count++; - } // end for - $this->_new_column_count = $new_column_count; - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides search form's row containing column aliases - * - * @return string HTML for search table's row - */ - private function _getColumnAliasRow() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Alias:') . '</th>'; - $new_column_count = 0; - - for ($colInd = 0; $colInd < $this->_criteria_column_count; $colInd++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$colInd]) - && $this->_criteriaColumnInsert[$colInd] == 'on' - ) { - $html_output .= '<td class="center">'; - $html_output .= '<input type="text"' - . ' name="criteriaAlias[' . $new_column_count . ']">'; - $html_output .= '</td>'; - $new_column_count++; - } // end if - - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$colInd]) - && $this->_criteriaColumnDelete[$colInd] == 'on' - ) { - continue; - } - - $tmp_alias = ''; - if (! empty($_POST['criteriaAlias'][$colInd])) { - $tmp_alias - = $this->_formAliases[$new_column_count] - = $_POST['criteriaAlias'][$colInd]; - }// end if - - $html_output .= '<td class="center">'; - $html_output .= '<input type="text"' - . ' name="criteriaAlias[' . $new_column_count . ']"' - . ' value="' . htmlspecialchars($tmp_alias) . '">'; - $html_output .= '</td>'; - $new_column_count++; - } // end for - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides search form's row containing sort(ASC/DESC) select options - * - * @return string HTML for search table's row - */ - private function _getSortRow() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Sort:') . '</th>'; - $new_column_count = 0; - - for ($colInd = 0; $colInd < $this->_criteria_column_count; $colInd++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$colInd]) - && $this->_criteriaColumnInsert[$colInd] == 'on' - ) { - $html_output .= $this->_getSortSelectCell($new_column_count); - $new_column_count++; - } // end if - - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$colInd]) - && $this->_criteriaColumnDelete[$colInd] == 'on' - ) { - continue; - } - // If they have chosen all fields using the * selector, - // then sorting is not available, Fix for Bug #570698 - if (isset($_POST['criteriaSort'][$colInd]) - && isset($_POST['criteriaColumn'][$colInd]) - && mb_substr($_POST['criteriaColumn'][$colInd], -2) == '.*' - ) { - $_POST['criteriaSort'][$colInd] = ''; - } //end if - - $selected = ''; - if (isset($_POST['criteriaSort'][$colInd])) { - $this->_formSorts[$new_column_count] - = $_POST['criteriaSort'][$colInd]; - - if ($_POST['criteriaSort'][$colInd] == 'ASC') { - $selected = 'ASC'; - } elseif ($_POST['criteriaSort'][$colInd] == 'DESC') { - $selected = 'DESC'; - } - } else { - $this->_formSorts[$new_column_count] = ''; - } - - $html_output .= $this->_getSortSelectCell( - $new_column_count, - $selected - ); - $new_column_count++; - } // end for - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides search form's row containing sort order - * - * @return string HTML for search table's row - */ - private function _getSortOrder() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Sort order:') . '</th>'; - $new_column_count = 0; - - for ($colInd = 0; $colInd < $this->_criteria_column_count; $colInd++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$colInd]) - && $this->_criteriaColumnInsert[$colInd] == 'on' - ) { - $html_output .= $this->_getSortOrderSelectCell( - $new_column_count, - null - ); - $new_column_count++; - } // end if - - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$colInd]) - && $this->_criteriaColumnDelete[$colInd] == 'on' - ) { - continue; - } - - $sortOrder = null; - if (! empty($_POST['criteriaSortOrder'][$colInd])) { - $sortOrder - = $this->_formSortOrders[$new_column_count] - = $_POST['criteriaSortOrder'][$colInd]; - } - - $html_output .= $this->_getSortOrderSelectCell( - $new_column_count, - $sortOrder - ); - $new_column_count++; - } // end for - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides search form's row containing SHOW checkboxes - * - * @return string HTML for search table's row - */ - private function _getShowRow() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Show:') . '</th>'; - $new_column_count = 0; - for ($column_index = 0; $column_index < $this->_criteria_column_count; $column_index++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$column_index]) - && $this->_criteriaColumnInsert[$column_index] == 'on' - ) { - $html_output .= '<td class="center">'; - $html_output .= '<input type="checkbox"' - . ' name="criteriaShow[' . $new_column_count . ']">'; - $html_output .= '</td>'; - $new_column_count++; - } // end if - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$column_index]) - && $this->_criteriaColumnDelete[$column_index] == 'on' - ) { - continue; - } - if (isset($_POST['criteriaShow'][$column_index])) { - $checked_options = ' checked="checked"'; - $this->_formShows[$new_column_count] - = $_POST['criteriaShow'][$column_index]; - } else { - $checked_options = ''; - } - $html_output .= '<td class="center">'; - $html_output .= '<input type="checkbox"' - . ' name="criteriaShow[' . $new_column_count . ']"' - . $checked_options . '>'; - $html_output .= '</td>'; - $new_column_count++; - } // end for - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides search form's row containing criteria Inputboxes - * - * @return string HTML for search table's row - */ - private function _getCriteriaInputboxRow() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Criteria:') . '</th>'; - $new_column_count = 0; - for ($column_index = 0; $column_index < $this->_criteria_column_count; $column_index++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$column_index]) - && $this->_criteriaColumnInsert[$column_index] == 'on' - ) { - $html_output .= '<td class="center">'; - $html_output .= '<input type="text"' - . ' name="criteria[' . $new_column_count . ']"' - . ' class="textfield"' - . ' style="width: ' . $this->_realwidth . '"' - . ' size="20">'; - $html_output .= '</td>'; - $new_column_count++; - } // end if - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$column_index]) - && $this->_criteriaColumnDelete[$column_index] == 'on' - ) { - continue; - } - $tmp_criteria = ''; - if (isset($this->_criteria[$column_index])) { - $tmp_criteria = $this->_criteria[$column_index]; - } - if ((empty($this->_prev_criteria) - || ! isset($this->_prev_criteria[$column_index])) - || $this->_prev_criteria[$column_index] != htmlspecialchars($tmp_criteria) - ) { - $this->_formCriterions[$new_column_count] = $tmp_criteria; - } else { - $this->_formCriterions[$new_column_count] - = $this->_prev_criteria[$column_index]; - } - $html_output .= '<td class="center">'; - $html_output .= '<input type="hidden"' - . ' name="prev_criteria[' . $new_column_count . ']"' - . ' value="' - . htmlspecialchars($this->_formCriterions[$new_column_count]) - . '">'; - $html_output .= '<input type="text"' - . ' name="criteria[' . $new_column_count . ']"' - . ' value="' . htmlspecialchars($tmp_criteria) . '"' - . ' class="textfield"' - . ' style="width: ' . $this->_realwidth . '"' - . ' size="20">'; - $html_output .= '</td>'; - $new_column_count++; - } // end for - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides footer options for adding/deleting row/columns - * - * @param string $type Whether row or column - * - * @return string HTML for footer options - */ - private function _getFootersOptions($type) - { - return $this->template->render('database/qbe/footer_options', [ - 'type' => $type, - ]); - } - - /** - * Provides search form table's footer options - * - * @return string HTML for table footer - */ - private function _getTableFooters() - { - $html_output = '<fieldset class="tblFooters">'; - $html_output .= $this->_getFootersOptions("row"); - $html_output .= $this->_getFootersOptions("column"); - $html_output .= '<div class="floatleft">'; - $html_output .= '<input class="btn btn-secondary" type="submit" name="modify"' - . ' value="' . __('Update Query') . '">'; - $html_output .= '</div>'; - $html_output .= '</fieldset>'; - return $html_output; - } - - /** - * Provides a select list of database tables - * - * @return string HTML for table select list - */ - private function _getTablesList() - { - $html_output = '<div class="floatleft width100">'; - $html_output .= '<fieldset>'; - $html_output .= '<legend>' . __('Use Tables') . '</legend>'; - // Build the options list for each table name - $options = ''; - $numTableListOptions = 0; - foreach ($this->_criteriaTables as $key => $val) { - $options .= '<option value="' . htmlspecialchars($key) . '"' . $val . '>' - . str_replace(' ', ' ', htmlspecialchars($key)) . '</option>'; - $numTableListOptions++; - } - $html_output .= '<select name="TableList[]"' - . ' multiple="multiple" id="listTable"' - . ' size="' . ($numTableListOptions > 30 ? '15' : '7') . '">'; - $html_output .= $options; - $html_output .= '</select>'; - $html_output .= '</fieldset>'; - $html_output .= '<fieldset class="tblFooters">'; - $html_output .= '<input class="btn btn-secondary" type="submit" name="modify" value="' - . __('Update Query') . '">'; - $html_output .= '</fieldset>'; - $html_output .= '</div>'; - return $html_output; - } - - /** - * Provides And/Or modification cell along with Insert/Delete options - * (For modifying search form's table columns) - * - * @param integer $column_number Column Number (0,1,2) or more - * @param array|null $selected Selected criteria column name - * @param bool $last_column Whether this is the last column - * - * @return string HTML for modification cell - */ - private function _getAndOrColCell( - $column_number, - $selected = null, - $last_column = false - ) { - $html_output = '<td class="center">'; - if (! $last_column) { - $html_output .= '<strong>' . __('Or:') . '</strong>'; - $html_output .= '<input type="radio"' - . ' name="criteriaAndOrColumn[' . $column_number . ']"' - . ' value="or"' . ($selected['or'] ?? '') . '>'; - $html_output .= ' <strong>' . __('And:') . '</strong>'; - $html_output .= '<input type="radio"' - . ' name="criteriaAndOrColumn[' . $column_number . ']"' - . ' value="and"' . ($selected['and'] ?? '') . '>'; - } - $html_output .= '<br>' . __('Ins'); - $html_output .= '<input type="checkbox"' - . ' name="criteriaColumnInsert[' . $column_number . ']">'; - $html_output .= ' ' . __('Del'); - $html_output .= '<input type="checkbox"' - . ' name="criteriaColumnDelete[' . $column_number . ']">'; - $html_output .= '</td>'; - return $html_output; - } - - /** - * Provides search form's row containing column modifications options - * (For modifying search form's table columns) - * - * @return string HTML for search table's row - */ - private function _getModifyColumnsRow() - { - $html_output = '<tr class="noclick">'; - $html_output .= '<th>' . __('Modify:') . '</th>'; - $new_column_count = 0; - for ($column_index = 0; $column_index < $this->_criteria_column_count; $column_index++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$column_index]) - && $this->_criteriaColumnInsert[$column_index] == 'on' - ) { - $html_output .= $this->_getAndOrColCell($new_column_count); - $new_column_count++; - } // end if - - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$column_index]) - && $this->_criteriaColumnDelete[$column_index] == 'on' - ) { - continue; - } - - if (isset($this->_criteriaAndOrColumn[$column_index])) { - $this->_formAndOrCols[$new_column_count] - = $this->_criteriaAndOrColumn[$column_index]; - } - $checked_options = []; - if (isset($this->_criteriaAndOrColumn[$column_index]) - && $this->_criteriaAndOrColumn[$column_index] == 'or' - ) { - $checked_options['or'] = ' checked="checked"'; - $checked_options['and'] = ''; - } else { - $checked_options['and'] = ' checked="checked"'; - $checked_options['or'] = ''; - } - $html_output .= $this->_getAndOrColCell( - $new_column_count, - $checked_options, - $column_index + 1 == $this->_criteria_column_count - ); - $new_column_count++; - } // end for - $html_output .= '</tr>'; - return $html_output; - } - - /** - * Provides Insert/Delete options for criteria inputbox - * with AND/OR relationship modification options - * - * @param integer $row_index Number of criteria row - * @param array $checked_options If checked - * - * @return string HTML - */ - private function _getInsDelAndOrCell($row_index, array $checked_options) - { - $html_output = '<td class="value nowrap">'; - $html_output .= '<!-- Row controls -->'; - $html_output .= '<table class="nospacing nopadding">'; - $html_output .= '<tr>'; - $html_output .= '<td class="value nowrap">'; - $html_output .= '<small>' . __('Ins:') . '</small>'; - $html_output .= '<input type="checkbox"' - . ' name="criteriaRowInsert[' . $row_index . ']">'; - $html_output .= '</td>'; - $html_output .= '<td class="value">'; - $html_output .= '<strong>' . __('And:') . '</strong>'; - $html_output .= '</td>'; - $html_output .= '<td>'; - $html_output .= '<input type="radio"' - . ' name="criteriaAndOrRow[' . $row_index . ']" value="and"' - . $checked_options['and'] . '>'; - $html_output .= '</td>'; - $html_output .= '</tr>'; - $html_output .= '<tr>'; - $html_output .= '<td class="value nowrap">'; - $html_output .= '<small>' . __('Del:') . '</small>'; - $html_output .= '<input type="checkbox"' - . ' name="criteriaRowDelete[' . $row_index . ']">'; - $html_output .= '</td>'; - $html_output .= '<td class="value">'; - $html_output .= '<strong>' . __('Or:') . '</strong>'; - $html_output .= '</td>'; - $html_output .= '<td>'; - $html_output .= '<input type="radio"' - . ' name="criteriaAndOrRow[' . $row_index . ']"' - . ' value="or"' . $checked_options['or'] . '>'; - $html_output .= '</td>'; - $html_output .= '</tr>'; - $html_output .= '</table>'; - $html_output .= '</td>'; - return $html_output; - } - - /** - * Provides rows for criteria inputbox Insert/Delete options - * with AND/OR relationship modification options - * - * @param integer $new_row_index New row index if rows are added/deleted - * - * @return string HTML table rows - */ - private function _getInputboxRow($new_row_index) - { - $html_output = ''; - $new_column_count = 0; - for ($column_index = 0; $column_index < $this->_criteria_column_count; $column_index++) { - if (! empty($this->_criteriaColumnInsert) - && isset($this->_criteriaColumnInsert[$column_index]) - && $this->_criteriaColumnInsert[$column_index] == 'on' - ) { - $orFieldName = 'Or' . $new_row_index . '[' . $new_column_count . ']'; - $html_output .= '<td class="center">'; - $html_output .= '<input type="text"' - . ' name="Or' . $orFieldName . '" class="textfield"' - . ' style="width: ' . $this->_realwidth . '" size="20">'; - $html_output .= '</td>'; - $new_column_count++; - } // end if - if (! empty($this->_criteriaColumnDelete) - && isset($this->_criteriaColumnDelete[$column_index]) - && $this->_criteriaColumnDelete[$column_index] == 'on' - ) { - continue; - } - $or = 'Or' . $new_row_index; - if (! empty($_POST[$or]) && isset($_POST[$or][$column_index])) { - $tmp_or = $_POST[$or][$column_index]; - } else { - $tmp_or = ''; - } - $html_output .= '<td class="center">'; - $html_output .= '<input type="text"' - . ' name="Or' . $new_row_index . '[' . $new_column_count . ']"' - . ' value="' . htmlspecialchars($tmp_or) . '" class="textfield"' - . ' style="width: ' . $this->_realwidth . '" size="20">'; - $html_output .= '</td>'; - if (! empty(${$or}) && isset(${$or}[$column_index])) { - $GLOBALS[${'cur' . $or}][$new_column_count] - = ${$or}[$column_index]; - } - $new_column_count++; - } // end for - return $html_output; - } - - /** - * Provides rows for criteria inputbox Insert/Delete options - * with AND/OR relationship modification options - * |
