📄 acp_profile.php
字号:
{ $profile_sql[] = 'INSERT INTO ' . PROFILE_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql); } else { $lang_id = $sql['lang_id']; unset($sql['lang_id'], $sql['field_id']); $this->update_insert(PROFILE_LANG_TABLE, $sql, array('lang_id' => (int) $lang_id, 'field_id' => $field_id)); } } if (sizeof($profile_lang_fields)) { foreach ($profile_lang_fields as $sql) { if ($action == 'create') { $profile_sql[] = 'INSERT INTO ' . PROFILE_FIELDS_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql); } else { $lang_id = $sql['lang_id']; $option_id = $sql['option_id']; unset($sql['lang_id'], $sql['field_id'], $sql['option_id']); $this->update_insert(PROFILE_FIELDS_LANG_TABLE, $sql, array( 'lang_id' => $lang_id, 'field_id' => $field_id, 'option_id' => $option_id) ); } } } $db->sql_transaction('begin'); if ($action == 'create') { foreach ($profile_sql as $sql) { $db->sql_query($sql); } } $db->sql_transaction('commit'); if ($action == 'edit') { add_log('admin', 'LOG_PROFILE_FIELD_EDIT', $cp->vars['field_ident'] . ':' . $cp->vars['lang_name']); trigger_error($user->lang['CHANGED_PROFILE_FIELD'] . adm_back_link($this->u_action)); } else { add_log('admin', 'LOG_PROFILE_FIELD_CREATE', substr($field_ident, 3) . ':' . $cp->vars['lang_name']); trigger_error($user->lang['ADDED_PROFILE_FIELD'] . adm_back_link($this->u_action)); } } /** * Update, then insert if not successfull */ function update_insert($table, $sql_ary, $where_fields) { global $db; $where_sql = array(); $check_key = ''; foreach ($where_fields as $key => $value) { $check_key = (!$check_key) ? $key : $check_key; $where_sql[] = $key . ' = ' . ((is_string($value)) ? "'" . $db->sql_escape($value) . "'" : (int) $value); } if (!sizeof($where_sql)) { return; } $sql = "SELECT $check_key FROM $table WHERE " . implode(' AND ', $where_sql); $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if (!$row) { $sql_ary = array_merge($where_fields, $sql_ary); if (sizeof($sql_ary)) { $db->sql_query("INSERT INTO $table " . $db->sql_build_array('INSERT', $sql_ary)); } } else { if (sizeof($sql_ary)) { $sql = "UPDATE $table SET " . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE ' . implode(' AND ', $where_sql); $db->sql_query($sql); } } } /** * Return sql statement for adding a new field ident (profile field) to the profile fields data table */ function add_field_ident($field_ident, $field_type) { global $db; switch ($db->sql_layer) { case 'mysql': case 'mysql4': case 'mysqli': // We are defining the biggest common value, because of the possibility to edit the min/max values of each field. $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD `$field_ident` "; switch ($field_type) { case FIELD_STRING: $sql .= ' VARCHAR(255) '; break; case FIELD_DATE: $sql .= 'VARCHAR(10) '; break; case FIELD_TEXT: $sql .= "TEXT"; // ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL, // ADD {$field_ident}_bbcode_bitfield INT(11) UNSIGNED"; break; case FIELD_BOOL: $sql .= 'TINYINT(2) '; break; case FIELD_DROPDOWN: $sql .= 'MEDIUMINT(8) '; break; case FIELD_INT: $sql .= 'BIGINT(20) '; break; } break; case 'sqlite': switch ($field_type) { case FIELD_STRING: $type = ' VARCHAR(255) '; break; case FIELD_DATE: $type = 'VARCHAR(10) '; break; case FIELD_TEXT: $type = "TEXT(65535)"; // ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL, // ADD {$field_ident}_bbcode_bitfield INT(11) UNSIGNED"; break; case FIELD_BOOL: $type = 'TINYINT(2) '; break; case FIELD_DROPDOWN: $type = 'MEDIUMINT(8) '; break; case FIELD_INT: $type = 'BIGINT(20) '; break; } // We are defining the biggest common value, because of the possibility to edit the min/max values of each field. if (version_compare(sqlite_libversion(), '3.0') == -1) { $sql = "SELECT sql FROM sqlite_master WHERE type = 'table' AND name = '" . PROFILE_FIELDS_DATA_TABLE . "' ORDER BY type DESC, name;"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); // Create a temp table and populate it, destroy the existing one $db->sql_query(preg_replace('#CREATE\s+TABLE\s+"?' . PROFILE_FIELDS_DATA_TABLE . '"?#i', 'CREATE TEMPORARY TABLE ' . PROFILE_FIELDS_DATA_TABLE . '_temp', $row['sql'])); $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . '_temp SELECT * FROM ' . PROFILE_FIELDS_DATA_TABLE); $db->sql_query('DROP TABLE ' . PROFILE_FIELDS_DATA_TABLE); preg_match('#\((.*)\)#s', $row['sql'], $matches); $new_table_cols = trim($matches[1]); $old_table_cols = explode(',', $new_table_cols); $column_list = array(); foreach ($old_table_cols as $declaration) { $entities = preg_split('#\s+#', trim($declaration)); if ($entities == 'PRIMARY') { continue; } $column_list[] = $entities[0]; } $columns = implode(',', $column_list); $new_table_cols = $field_ident . ' ' . $type . ',' . $new_table_cols; // create a new table and fill it up. destroy the temp one $db->sql_query('CREATE TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $new_table_cols . ');'); $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . PROFILE_FIELDS_DATA_TABLE . '_temp;'); $db->sql_query('DROP TABLE ' . PROFILE_FIELDS_DATA_TABLE . '_temp'); } else { $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident [$type]"; } break; case 'mssql': case 'mssql_odbc': // We are defining the biggest common value, because of the possibility to edit the min/max values of each field. $sql = 'ALTER TABLE [' . PROFILE_FIELDS_DATA_TABLE . "] ADD [$field_ident] "; switch ($field_type) { case FIELD_STRING: $sql .= ' [VARCHAR] (255) '; break; case FIELD_DATE: $sql .= '[VARCHAR] (10) '; break; case FIELD_TEXT: $sql .= "[TEXT]"; // ADD {$field_ident}_bbcode_uid [VARCHAR] (5) NOT NULL, // ADD {$field_ident}_bbcode_bitfield [INT] UNSIGNED"; break; case FIELD_BOOL: case FIELD_DROPDOWN: $sql .= '[INT] '; break; case FIELD_INT: $sql .= '[FLOAT] '; break; } break; case 'postgres': // We are defining the biggest common value, because of the possibility to edit the min/max values of each field. $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD COLUMN \"$field_ident\" "; switch ($field_type) { case FIELD_STRING: $sql .= ' VARCHAR(255) '; break; case FIELD_DATE: $sql .= 'VARCHAR(10) '; break; case FIELD_TEXT: $sql .= "TEXT"; // ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL, // ADD {$field_ident}_bbcode_bitfield INT4 UNSIGNED"; break; case FIELD_BOOL: $sql .= 'INT2 '; break; case FIELD_DROPDOWN: $sql .= 'INT4 '; break; case FIELD_INT: $sql .= 'INT8 '; break; } break; case 'firebird': // We are defining the biggest common value, because of the possibility to edit the min/max values of each field. $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD \"$field_ident\" "; switch ($field_type) { case FIELD_STRING: $sql .= ' VARCHAR(255) '; break; case FIELD_DATE: $sql .= 'VARCHAR(10) '; break; case FIELD_TEXT: $sql .= "BLOB SUB_TYPE TEXT"; // ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL, // ADD {$field_ident}_bbcode_bitfield INTEGER UNSIGNED"; break; case FIELD_BOOL: case FIELD_DROPDOWN: $sql .= 'INTEGER '; break; case FIELD_INT: $sql .= 'DOUBLE PRECISION '; break; } break; case 'oracle': // We are defining the biggest common value, because of the possibility to edit the min/max values of each field. $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD \"$field_ident\" "; switch ($field_type) { case FIELD_STRING: $sql .= ' VARCHAR2(255) '; break; case FIELD_DATE: $sql .= 'VARCHAR2(10) '; break; case FIELD_TEXT: $sql .= "CLOB"; // ADD {$field_ident}_bbcode_uid VARCHAR2(5) NOT NULL, // ADD {$field_ident}_bbcode_bitfield NUMBER(11) UNSIGNED"; break; case FIELD_BOOL: $sql .= 'NUMBER(2) '; break; case FIELD_DROPDOWN: $sql .= 'NUMBER(8) '; break; case FIELD_INT: $sql .= 'NUMBER(20) '; break; } break; } return $sql; }}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -