$db, 'sql_query' => $_REQUEST['sql_query'] ); if (preg_match('@^tbl_@', $GLOBALS['goto'])) { $_url_params['table'] = $table; } $err_url = $GLOBALS['goto'] . PMA_generate_common_url($_url_params); unset($_url_params); /** * Sets parameters for links * where is this variable used? * replace by PMA_generate_common_url($url_params); */ $url_query = PMA_generate_common_url($url_params, 'html', ''); /** * get table information * @todo should be done by a Table object */ require_once 'libraries/tbl_info.inc.php'; /** * Get comments for table fileds/columns */ $comments_map = array(); if ($GLOBALS['cfg']['ShowPropertyComments']) { $comments_map = PMA_getComments($db, $table); } /** * START REGULAR OUTPUT */ /** * Load JavaScript files */ $response = PMA_Response::getInstance(); $header = $response->getHeader(); $scripts = $header->getScripts(); $scripts->addFile('functions.js'); $scripts->addFile('tbl_change.js'); $scripts->addFile('jquery/jquery-ui-timepicker-addon.js'); $scripts->addFile('gis_data_editor.js'); /** * Displays the query submitted and its result * * @todo where does $disp_message and $disp_query come from??? */ if (! empty($disp_message)) { if (! isset($disp_query)) { $disp_query = null; } $response->addHTML(PMA_Util::getMessage($disp_message, $disp_query)); } /** * Get the analysis of SHOW CREATE TABLE for this table */ $analyzed_sql = PMA_Table::analyzeStructure($db, $table); /** * Get the list of the fields of the current table */ PMA_DBI_select_db($db); $table_fields = array_values(PMA_DBI_get_columns($db, $table)); $paramTableDbArray = array($table, $db); /** * Determine what to do, edit or insert? */ if (isset($where_clause)) { // we are editing $insert_mode = false; $where_clause_array = PMA_getWhereClauseArray($where_clause); list($where_clauses, $result, $rows, $found_unique_key) = PMA_analyzeWhereClauses($where_clause_array, $table, $db); } else { // we are inserting $insert_mode = true; $where_clause = null; list($result, $rows) = PMA_loadFirstRow($table, $db); $where_clauses = null; $where_clause_array = null; $found_unique_key = false; } // Copying a row - fetched data will be inserted as a new row, // therefore the where clause is needless. if (isset($_REQUEST['default_action']) && $_REQUEST['default_action'] === 'insert') { $where_clause = $where_clauses = null; } // retrieve keys into foreign fields, if any $foreigners = PMA_getForeigners($db, $table); // Retrieve form parameters for insert/edit form $_form_params = PMA_getFormParametersForInsertForm( $db, $table, $where_clauses, $where_clause_array, $err_url ); /** * Displays the form */ // autocomplete feature of IE kills the "onchange" event handler and it // must be replaced by the "onpropertychange" one in this case $chg_evt_handler = (PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER >= 5 && PMA_USR_BROWSER_VER < 7 ) ? 'onpropertychange' : 'onchange'; // Had to put the URI because when hosted on an https server, // some browsers send wrongly this form to the http server. $html_output = ''; // Set if we passed the first timestamp field $timestamp_seen = false; $columns_cnt = count($table_fields); $tabindex = 0; $tabindex_for_function = +3000; $tabindex_for_null = +6000; $tabindex_for_value = 0; $o_rows = 0; $biggest_max_file_size = 0; $url_params['db'] = $db; $url_params['table'] = $table; $url_params = PMA_urlParamsInEditMode( $url_params, $where_clause_array, $where_clause ); //Insert/Edit form //If table has blob fields we have to disable ajax. $has_blob_field = false; foreach ($table_fields as $column) { if (PMA_isColumnBlob($column)) { $has_blob_field = true; break; } } $html_output .='
$current_row) { if ($current_row === false) { unset($current_row); } $jsvkey = $row_id; $rownumber_param = '&rownumber=' . $row_id; $vkey = '[multi_edit][' . $jsvkey . ']'; $current_result = (isset($result) && is_array($result) && isset($result[$row_id]) ? $result[$row_id] : $result); if ($insert_mode && $row_id > 0) { $html_output .= '' .'
' . "\n"; } $html_output .= PMA_getHeadAndFootOfInsertRowTable($url_params) . ''; // Sets a multiplier used for input-field counts // (as zero cannot be used, advance the counter plus one) $m_rows = $o_rows + 1; //store the default value for CharEditing $default_char_editing = $cfg['CharEditing']; $odd_row = true; for ($i = 0; $i < $columns_cnt; $i++) { if (! isset($table_fields[$i]['processed'])) { $column = $table_fields[$i]; $column = PMA_analyzeTableColumnsArray( $column, $comments_map, $timestamp_seen ); } $extracted_columnspec = PMA_Util::extractColumnSpec($column['Type']); if (-1 === $column['len']) { $column['len'] = PMA_DBI_field_len($current_result, $i); // length is unknown for geometry fields, // make enough space to edit very simple WKTs if (-1 === $column['len']) { $column['len'] = 30; } } //Call validation when the form submited... $unnullify_trigger = $chg_evt_handler . "=\"return verificationsAfterFieldChange('" . PMA_escapeJsString($column['Field_md5']) . "', '" . PMA_escapeJsString($jsvkey) . "','".$column['pma_type'] . "')\""; // Use an MD5 as an array index to avoid having special characters // in the name atttibute (see bug #1746964 ) $column_name_appendix = $vkey . '[' . $column['Field_md5'] . ']'; if ($column['Type'] == 'datetime' && ! isset($column['Default']) && ! is_null($column['Default']) && ($insert_mode || ! isset($current_row[$column['Field']])) ) { // INSERT case or // UPDATE case with an NULL value $current_row[$column['Field']] = date('Y-m-d H:i:s', time()); } $html_output .= '' . '' . $column['Field_title'] . '' . ''; if ($cfg['ShowFieldTypesInDataEditView']) { $html_output .= '' . '' . $column['pma_type'] . '' . ''; } //End if // Get a list of GIS data types. $gis_data_types = PMA_Util::getGISDatatypes(); // Prepares the field value $real_null_value = false; $special_chars_encoded = ''; if (isset($current_row)) { // (we are editing) list( $real_null_value, $special_chars_encoded, $special_chars, $data, $backup_field ) = PMA_getSpecialCharsAndBackupFieldForExistingRow( $current_row, $column, $extracted_columnspec, $real_null_value, $gis_data_types, $column_name_appendix ); } else { // (we are inserting) // display default values list($real_null_value, $data, $special_chars, $backup_field, $special_chars_encoded) = PMA_getSpecialCharsAndBackupFieldForInsertingMode($column, $real_null_value); } $idindex = ($o_rows * $columns_cnt) + $i + 1; $tabindex = $idindex; // Get a list of data types that are not yet supported. $no_support_types = PMA_Util::unsupportedDatatypes(); // The function column // ------------------- if ($cfg['ShowFunctionFields']) { $html_output .= PMA_getFunctionColumn( $column, $is_upload, $column_name_appendix, $unnullify_trigger, $no_support_types, $tabindex_for_function, $tabindex, $idindex, $insert_mode ); } // The null column // --------------- $foreignData = PMA_getForeignData( $foreigners, $column['Field'], false, '', '' ); $html_output .= PMA_getNullColumn( $column, $column_name_appendix, $real_null_value, $tabindex, $tabindex_for_null, $idindex, $vkey, $foreigners, $foreignData ); // The value column (depends on type) // ---------------- // See bug #1667887 for the reason why we don't use the maxlength // HTML attribute $html_output .= ' ' . "\n"; // Will be used by js/tbl_change.js to set the default value // for the "Continue insertion" feature $html_output .= '' . $special_chars . ''; $html_output .= PMA_getValueColumn( $column, $backup_field, $column_name_appendix, $unnullify_trigger, $tabindex, $tabindex_for_value, $idindex, $data, $special_chars, $foreignData, $odd_row, $paramTableDbArray, $rownumber_param, $titles, $text_dir, $special_chars_encoded, $vkey, $is_upload, $biggest_max_file_size, $default_char_editing, $no_support_types, $gis_data_types, $extracted_columnspec ); $html_output .= '' . ''; $odd_row = !$odd_row; } // end for $o_rows++; $html_output .= ' ' . '
'; } // end foreach on multi-edit $html_output .='
' . '' . '
'; if (! isset($after_insert)) { $after_insert = 'back'; } //action panel $html_output .= PMA_getActionsPanel( $where_clause, $after_insert, $tabindex, $tabindex_for_value, $found_unique_key ); if ($biggest_max_file_size > 0) { $html_output .= ' ' . PMA_Util::generateHiddenMaxFileSize( $biggest_max_file_size ) . "\n"; } $html_output .= '
'; // end Insert/Edit form if ($insert_mode) { //Continue insertion form $html_output .= PMA_getContinueInsertionForm( $table, $db, $where_clause_array, $err_url ); } $response->addHTML($html_output); ?>