/** * Function to get html for displaying the index form * * @param array $fields fields * @param PMA_Index $index index * @param array $form_params form parameters * @param int $add_fields number of fields in the form * * @return string */ function PMA_getHtmlForIndexForm($fields, $index, $form_params, $add_fields) { $html = ""; $html .= '<form action="tbl_indexes.php" method="post" name="index_frm" id="' . 'index_frm" class="ajax"' . 'onsubmit="if (typeof(this.elements[\'index[Key_name]\'].disabled) !=' . ' \'undefined\') {' . 'this.elements[\'index[Key_name]\'].disabled = false}">'; $html .= PMA_URL_getHiddenInputs($form_params); $html .= '<fieldset id="index_edit_fields">'; $html .= '<div class="index_info">'; $html .= '<div>' . '<div class="label">' . '<strong>' . '<label for="input_index_name">' . __('Index name:') . PMA_Util::showHint(PMA_Message::notice(__('"PRIMARY" <b>must</b> be the name of' . ' and <b>only of</b> a primary key!'))) . '</label>' . '</strong>' . '</div>' . '<input type="text" name="index[Key_name]" id="input_index_name"' . ' size="25"' . 'value="' . htmlspecialchars($index->getName()) . '"' . 'onfocus="this.select()" />' . '</div>'; $html .= '<div>' . '<div class="label">' . '<strong>' . '<label for="select_index_choice">' . __('Index choice:') . PMA_Util::showMySQLDocu('ALTER_TABLE') . '</label>' . '</strong>' . '</div>' . $index->generateIndexChoiceSelector(isset($_REQUEST['create_edit_table'])) . '</div>'; $html .= PMA_Util::getDivForSliderEffect('indexoptions', __('Options')); $html .= '<div>' . '<div class="label">' . '<strong>' . '<label for="input_key_block_size">' . __('Key block size:') . '</label>' . '</strong>' . '</div>' . '<input type="text" name="index[Key_block_size]" ' . 'id="input_key_block_size" size="30" value="' . htmlspecialchars($index->getKeyBlockSize()) . '" />' . '</div>'; $html .= '<div>' . '<div class="label">' . '<strong>' . '<label for="select_index_type">' . __('Index type:') . PMA_Util::showMySQLDocu('ALTER_TABLE') . '</label>' . '</strong>' . '</div>' . $index->generateIndexTypeSelector() . '</div>'; $html .= '<div>' . '<div class="label">' . '<strong>' . '<label for="input_parser">' . __('Parser:') . '</label>' . '</strong>' . '</div>' . '<input type="text" name="index[Parser]" ' . 'id="input_parse" size="30" value="' . htmlspecialchars($index->getParser()) . '" />' . '</div>'; $html .= '<div>' . '<div class="label">' . '<strong>' . '<label for="input_index_comment">' . __('Comment:') . '</label>' . '</strong>' . '</div>' . '<input type="text" name="index[Index_comment]" ' . 'id="input_index_comment" size="30"' . 'value="' . htmlspecialchars($index->getComment()) . '" />' . '</div>'; $html .= '</div>'; // end of indexoptions div $html .= '<div class="clearfloat"></div>'; $html .= '</div>'; $html .= '<table id="index_columns">'; $html .= '<thead>' . '<tr>' . '<th>' . __('Column') . '</th>' . '<th>' . __('Size') . '</th>' . '</tr>' . '</thead>'; $odd_row = true; $spatial_types = array('geometry', 'point', 'linestring', 'polygon', 'multipoint', 'multilinestring', 'multipolygon', 'geomtrycollection'); $html .= '<tbody>'; /* @var $column PMA_Index_Column */ foreach ($index->getColumns() as $column) { $html .= '<tr class="'; $html .= $odd_row ? 'odd' : 'even'; $html .= 'noclick">'; $html .= '<td><span class="drag_icon" title="' . __('Drag to reorder') . '"' . '></span>'; $html .= '<select name="index[columns][names][]">'; $html .= '<option value="">-- ' . __('Ignore') . ' --</option>'; foreach ($fields as $field_name => $field_type) { if (($index->getChoice() != 'FULLTEXT' || preg_match('/(char|text)/i', $field_type)) && ($index->getChoice() != 'SPATIAL' || in_array($field_type, $spatial_types))) { $html .= '<option value="' . htmlspecialchars($field_name) . '"' . ($field_name == $column->getName() ? ' selected="selected"' : '') . '>' . htmlspecialchars($field_name) . ' [' . htmlspecialchars($field_type) . ']' . '</option>' . "\n"; } } // end foreach $fields $html .= '</select>'; $html .= '</td>'; $html .= '<td>'; $html .= '<input type="text" size="5" onfocus="this.select()"' . 'name="index[columns][sub_parts][]" value="'; if ($index->getChoice() != 'SPATIAL') { $html .= $column->getSubPart(); } $html .= '"/>'; $html .= '</td>'; $html .= '</tr>'; $odd_row = !$odd_row; } // end foreach $edited_index_info['Sequences'] for ($i = 0; $i < $add_fields; $i++) { $html .= '<tr class="'; $html .= $odd_row ? 'odd' : 'even'; $html .= 'noclick">'; $html .= '<td><span class="drag_icon" title="' . __('Drag to reorder') . '"' . '></span>'; $html .= '<select name="index[columns][names][]">'; $html .= '<option value="">-- ' . __('Ignore') . ' --</option>'; $j = 0; foreach ($fields as $field_name => $field_type) { if (isset($_REQUEST['create_edit_table'])) { $col_index = $field_type[1]; $field_type = $field_type[0]; } $html .= '<option value="' . htmlspecialchars(isset($col_index) ? $col_index : $field_name) . '" ' . ($j++ == $i ? 'selected="selected"' : '') . '>' . htmlspecialchars($field_name) . ' [' . htmlspecialchars($field_type) . ']' . '</option>' . "\n"; } // end foreach $fields $html .= '</select>'; $html .= '</td>'; $html .= '<td>' . '<input type="text" size="5" onfocus="this.select()"' . 'name="index[columns][sub_parts][]" value="" />' . '</td>'; $html .= '</tr>'; $odd_row = !$odd_row; } // end foreach $edited_index_info['Sequences'] $html .= '</tbody>'; $html .= '</table>'; $html .= '<div class="add_more">'; $btn_value = sprintf(__('Add %s column(s) to index'), 1); $html .= '<div class="slider"></div>'; $html .= '<div class="add_fields hide">'; $html .= '<input type="submit" id="add_fields" value="' . $btn_value . '" />'; $html .= '</div>'; $html .= '</div>'; $html .= '</fieldset>'; $html .= '<fieldset class="tblFooters">'; $html .= '<button type="submit" id="preview_index_frm">' . __('Preview SQL') . '</button>'; $html .= '<input type="submit" id="save_index_frm" value="' . __('Go') . '" />'; $html .= '</fieldset>'; $html .= '</form>'; return $html; }
/** * Tests for displayFormAction() * * @return void * @test */ public function testDisplayFormAction() { $table = $this->getMockBuilder('PMA_Table')->disableOriginalConstructor()->getMock(); $table->expects($this->any())->method('getStatusInfo')->will($this->returnValue("")); $table->expects($this->any())->method('isView')->will($this->returnValue(false)); $table->expects($this->any())->method('getNameAndTypeOfTheColumns')->will($this->returnValue(array("field_name" => "field_type"))); $GLOBALS['dbi']->expects($this->any())->method('getTable')->will($this->returnValue($table)); $container = Container::getDefaultContainer(); $container->set('db', 'db'); $container->set('table', 'table'); $container->set('dbi', $GLOBALS['dbi']); $response = new \PMA\Test\Stubs\PMA_Response(); $container->set('PMA_Response', $response); $container->alias('response', 'PMA_Response'); $index = new PMA_Index(); $ctrl = new TableIndexesController($index); $_REQUEST['create_index'] = true; $_REQUEST['added_fields'] = 3; $ctrl->displayFormAction(); $html = $response->getHTMLResult(); //PMA_URL_getHiddenInputs $this->assertContains(PMA_URL_getHiddenInputs(array('db' => 'db', 'table' => 'table', 'create_index' => 1)), $html); $doc_html = PMA_Util::showHint(PMA_Message::notice(__('"PRIMARY" <b>must</b> be the name of' . ' and <b>only of</b> a primary key!'))); $this->assertContains($doc_html, $html); $this->assertContains(PMA_Util::showMySQLDocu('ALTER_TABLE'), $html); // generateIndexSelector $this->assertContains(PMA\Template::trim($index->generateIndexChoiceSelector(false)), $html); $this->assertContains(sprintf(__('Add %s column(s) to index'), 1), $html); //$field_name & $field_type $this->assertContains("field_name", $html); $this->assertContains("field_type", $html); }