Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
project
drupal
Commits
4ac090eb
Commit
4ac090eb
authored
Mar 10, 2009
by
Dries Buytaert
Browse files
- Patch
#392686
by bjaspan, yched: switch to serial primary keys.
parent
a4ee7092
Changes
7
Hide whitespace changes
Inline
Side-by-side
modules/field/field.crud.inc
View file @
4ac090eb
...
...
@@ -38,6 +38,8 @@ class FieldException extends Exception {}
* pairs. The object properties are:
*
* @param array $field:
* - id (integer, read-only)
* The primary identifier of the field.
* - field_name (string)
* The name of the field. Each field name is unique within Field API.
* When a field is attached to an object, the field's data is stored
...
...
@@ -75,8 +77,12 @@ class FieldException extends Exception {}
* key/value pairs. The object properties are:
*
* @param array $instance:
* - id (integer, read-only)
* The primary identifier of this field instance.
* - field_id (integer, read-only)
* The foreign key of the field attached to the bundle by this instance.
* - field_name (string)
* The name of field attached by this instance.
* The name of
the
field attached
to the bundle
by this instance.
* - bundle (string)
* The name of the bundle that the field is attached to.
* - label (string)
...
...
@@ -164,7 +170,8 @@ class FieldException extends Exception {}
* bundle; use field_create_instance for that.
*
* @param $field
* A field structure. The field_name and type properties are required.
* A field structure. The field_name and type properties are
* required. Read-only properties are assigned automatically.
* @throw
* FieldException
*/
...
...
@@ -310,7 +317,7 @@ function field_delete_field($field_name) {
*
* @param $instance
* A field instance structure. The field_name and bundle properties
* are required.
* are required.
Read-only properties are assigned automatically.
* @throw
* FieldException
*/
...
...
@@ -321,6 +328,9 @@ function field_create_instance($instance) {
throw
new
FieldException
(
"Attempt to create an instance of a field that doesn't exist."
);
}
// Set the field id.
$instance
[
'field_id'
]
=
$field
[
'id'
];
// TODO: Check that the specifed bundle exists.
// TODO: Check that the widget type is known and can handle the field type ?
...
...
@@ -353,8 +363,9 @@ function field_create_instance($instance) {
* keys and values are:
* field_name: The name of an existing field.
* bundle: The bundle this field belongs to.
* Any other properties specified in $instance overwrite the
* existing values for the instance.
* Read-only_id properties are assigned automatically. Any other
* properties specified in $instance overwrite the existing values for
* the instance.
* @throw
* FieldException
* @see field_create_instance()
...
...
@@ -373,6 +384,9 @@ function field_update_instance($instance) {
throw
new
FieldException
(
"Attempt to update a field instance that doesn't exist."
);
}
$instance
[
'id'
]
=
$prior_instance
[
'id'
];
$instance
[
'field_id'
]
=
$prior_instance
[
'field_id'
];
_field_write_instance
(
$instance
,
TRUE
);
// Clear caches.
...
...
@@ -442,9 +456,10 @@ function _field_write_instance($instance, $update = FALSE) {
// Create $data to contain everything from $instance that does not
// have its own column, and thus will be stored serialized.
$data
=
$instance
;
unset
(
$data
[
'field_name'
],
$data
[
'bundle'
],
$data
[
'widget'
][
'type'
],
$data
[
'weight'
],
$data
[
'deleted'
]);
unset
(
$data
[
'id'
],
$data
[
'field_id'
],
$data
[
'field_name'
],
$data
[
'bundle'
],
$data
[
'widget'
][
'type'
],
$data
[
'weight'
],
$data
[
'deleted'
]);
$record
=
array
(
'field_id'
=>
$instance
[
'field_id'
],
'field_name'
=>
$instance
[
'field_name'
],
'bundle'
=>
$instance
[
'bundle'
],
'widget_type'
=>
$instance
[
'widget'
][
'type'
],
...
...
@@ -456,8 +471,13 @@ function _field_write_instance($instance, $update = FALSE) {
);
// We need to tell drupal_update_record() the primary keys to trigger an
// update.
$primary_keys
=
$update
?
array
(
'field_name'
,
'bundle'
)
:
array
();
drupal_write_record
(
'field_config_instance'
,
$record
,
$primary_keys
);
if
(
$update
)
{
$record
[
'id'
]
=
$instance
[
'id'
];
$primary_key
=
array
(
'id'
);
}
else
{
$primary_key
=
array
();
}
drupal_write_record
(
'field_config_instance'
,
$record
,
$primary_key
);
}
/**
...
...
@@ -500,7 +520,7 @@ function field_read_instance($field_name, $bundle, $include_additional = array()
*/
function
field_read_instances
(
$params
=
array
(),
$include_additional
=
array
())
{
$query
=
db_select
(
'field_config_instance'
,
'fci'
,
array
(
'fetch'
=>
PDO
::
FETCH_ASSOC
));
$query
->
join
(
'field_config'
,
'fc'
,
'fc.
field_name
= fci.field_
name
'
);
$query
->
join
(
'field_config'
,
'fc'
,
'fc.
id
= fci.field_
id
'
);
$query
->
fields
(
'fci'
);
#$query->fields('fc', array('type'));
...
...
@@ -522,6 +542,8 @@ function field_read_instances($params = array(), $include_additional = array())
foreach
(
$results
as
$record
)
{
$instance
=
unserialize
(
$record
[
'data'
]);
$instance
[
'id'
]
=
$record
[
'id'
];
$instance
[
'field_id'
]
=
$record
[
'field_id'
];
$instance
[
'field_name'
]
=
$record
[
'field_name'
];
$instance
[
'bundle'
]
=
$record
[
'bundle'
];
$instance
[
'weight'
]
=
$record
[
'weight'
];
...
...
modules/field/field.form.inc
View file @
4ac090eb
...
...
@@ -137,12 +137,17 @@ function field_multiple_value_form($field, $instance, $items, &$form, &$form_sta
$title
=
check_plain
(
t
(
$instance
[
'label'
]));
$description
=
field_filter_xss
(
t
(
$instance
[
'description'
]));
$bundle_name_url_css
=
str_replace
(
'_'
,
'-'
,
$instance
[
'bundle'
]);
$field_name_url_css
=
str_replace
(
'_'
,
'-'
,
$field_name
);
$form_element
=
array
(
'#theme'
=>
'field_multiple_value_form'
,
'#multiple'
=>
$field
[
'cardinality'
],
'#title'
=>
$title
,
'#required'
=>
$instance
[
'required'
],
'#description'
=>
$description
,
'#prefix'
=>
'<div id="'
.
$field_name_url_css
.
'-wrapper">'
,
'#suffix'
=>
'</div>'
,
);
$function
=
$instance
[
'widget'
][
'module'
]
.
'_field_widget'
;
...
...
@@ -151,6 +156,7 @@ function field_multiple_value_form($field, $instance, $items, &$form, &$form_sta
if
(
$element
=
$function
(
$form
,
$form_state
,
$field
,
$instance
,
$items
,
$delta
))
{
$multiple
=
$field
[
'cardinality'
]
>
1
||
$field
[
'cardinality'
]
==
FIELD_CARDINALITY_UNLIMITED
;
$defaults
=
array
(
// For multiple fields, title and description are handled by the wrapping table.
'#title'
=>
$multiple
?
''
:
$title
,
'#description'
=>
$multiple
?
''
:
$description
,
'#required'
=>
$delta
==
0
&&
$instance
[
'required'
],
...
...
@@ -161,14 +167,14 @@ function field_multiple_value_form($field, $instance, $items, &$form, &$form_sta
'#bundle'
=>
$instance
[
'bundle'
],
);
// Add an input field for the delta (drag-n-drop reordering), which will
// be hidden by tabledrag js behavior.
// Input field for the delta (drag-n-drop reordering).
if
(
$multiple
)
{
// We name the element '_weight' to avoid clashing with
column name
s
// defined by
field modules
.
// We name the element '_weight' to avoid clashing with
element
s
// defined by
widget
.
$element
[
'_weight'
]
=
array
(
'#type'
=>
'weight'
,
'#delta'
=>
$max
,
// this 'delta' is the 'weight' element's property
// Note: this 'delta' is the FAPI 'weight' element's property.
'#delta'
=>
$max
,
'#default_value'
=>
isset
(
$items
[
$delta
][
'_weight'
])
?
$items
[
$delta
][
'_weight'
]
:
$delta
,
'#weight'
=>
100
,
);
...
...
@@ -193,8 +199,8 @@ function field_multiple_value_form($field, $instance, $items, &$form, &$form_sta
// Submit callback for disabled JavaScript.
'#submit'
=>
array
(
'field_add_more_submit'
),
'#ahah'
=>
array
(
'path'
=>
'field/js_add_more/'
.
$bundle_name_url_
str
.
'/'
.
$field_name_url_
str
,
'wrapper'
=>
$field_name_url_
str
.
'-
items
'
,
'path'
=>
'field/js_add_more/'
.
$bundle_name_url_
css
.
'/'
.
$field_name_url_
css
,
'wrapper'
=>
$field_name_url_
css
.
'-
wrapper
'
,
'method'
=>
'replace'
,
'effect'
=>
'fade'
,
),
...
...
@@ -202,12 +208,8 @@ function field_multiple_value_form($field, $instance, $items, &$form, &$form_sta
// the relevant field using these entries.
'#field_name'
=>
$field_name
,
'#bundle'
=>
$instance
[
'bundle'
],
'#attributes'
=>
array
(
'class'
=>
'field-add-more-submit'
),
);
// Add wrappers for the fields and 'more' button.
$form_element
[
'#prefix'
]
=
'<div class="clearfix" id="'
.
$field_name_url_str
.
'-add-more-wrapper"><div id="'
.
$field_name_url_str
.
'-items">'
;
$form_element
[
$field_name
.
'_add_more'
][
'#prefix'
]
=
'<div class="field-add-more">'
;
$form_element
[
$field_name
.
'_add_more'
][
'#suffix'
]
=
'</div></div></div>'
;
}
}
return
$form_element
;
...
...
@@ -229,8 +231,9 @@ function theme_field_multiple_value_form($element) {
$header
=
array
(
array
(
'data'
=>
t
(
'!title: !required'
,
array
(
'!title'
=>
$element
[
'#title'
],
'!required'
=>
$required
)),
'colspan'
=>
2
'data'
=>
'<label>'
.
t
(
'!title: !required'
,
array
(
'!title'
=>
$element
[
'#title'
],
'!required'
=>
$required
))
.
"</label>"
,
'colspan'
=>
2
,
'class'
=>
'field-label'
,
),
t
(
'Order'
),
);
...
...
@@ -240,7 +243,10 @@ function theme_field_multiple_value_form($element) {
// preview or failed validation)
$items
=
array
();
foreach
(
element_children
(
$element
)
as
$key
)
{
if
(
$key
!==
$element
[
'#field_name'
]
.
'_add_more'
)
{
if
(
$key
===
$element
[
'#field_name'
]
.
'_add_more'
)
{
$add_more_button
=
&
$element
[
$key
];
}
else
{
$items
[]
=
&
$element
[
$key
];
}
}
...
...
@@ -261,9 +267,11 @@ function theme_field_multiple_value_form($element) {
);
}
$output
=
'<div class="form-item">'
;
$output
.
=
theme
(
'table'
,
$header
,
$rows
,
array
(
'id'
=>
$table_id
,
'class'
=>
'field-multiple-table'
));
$output
.
=
$element
[
'#description'
]
?
'<div class="description">'
.
$element
[
'#description'
]
.
'</div>'
:
''
;
$output
.
=
drupal_render
(
$element
[
$element
[
'#field_name'
]
.
'_add_more'
]);
$output
.
=
'<div class="clearfix">'
.
drupal_render
(
$add_more_button
)
.
'</div>'
;
$output
.
=
'</div>'
;
drupal_add_tabledrag
(
$table_id
,
'order'
,
'sibling'
,
$order_class
);
}
...
...
@@ -395,10 +403,11 @@ function field_add_more_js($bundle_name, $field_name) {
foreach
(
$form_path
as
$key
)
{
$field_form
=
$field_form
[
$key
];
}
//
We a
dd a div around the new field to receive the ahah effect.
$field_form
[
$delta
][
'#prefix'
]
=
'<div class="ahah-new-
field
">'
.
(
isset
(
$field_form
[
$delta
][
'#prefix'
])
?
$field_form
[
$delta
][
'#prefix'
]
:
''
);
//
A
dd a div around the new field to receive the ahah effect.
$field_form
[
$delta
][
'#prefix'
]
=
'<div class="ahah-new-
content
">'
.
(
isset
(
$field_form
[
$delta
][
'#prefix'
])
?
$field_form
[
$delta
][
'#prefix'
]
:
''
);
$field_form
[
$delta
][
'#suffix'
]
=
(
isset
(
$field_form
[
$delta
][
'#suffix'
])
?
$field_form
[
$delta
][
'#suffix'
]
:
''
)
.
'</div>'
;
// TODO : this causes duplication of the wrapping divs
// Prevent duplicate wrapper.
unset
(
$field_form
[
'#prefix'
],
$field_form
[
'#suffix'
]);
// If a newly inserted widget contains AHAH behaviors, they normally won't
// work because AHAH doesn't know about those - it just attaches to the exact
...
...
modules/field/field.install
View file @
4ac090eb
...
...
@@ -15,6 +15,11 @@ function field_schema() {
// Static (meta) tables.
$schema
[
'field_config'
]
=
array
(
'fields'
=>
array
(
'id'
=>
array
(
'type'
=>
'serial'
,
'not null'
=>
TRUE
,
'description'
=>
'The primary identifier for a field'
,
),
'field_name'
=>
array
(
'type'
=>
'varchar'
,
'length'
=>
32
,
...
...
@@ -66,7 +71,8 @@ function field_schema() {
'default'
=>
0
,
),
),
'primary key'
=>
array
(
'field_name'
),
'primary key'
=>
array
(
'id'
),
'unique keys'
=>
array
(
'field_name'
=>
array
(
'field_name'
)),
'indexes'
=>
array
(
// used by field_read_fields
'active_deleted'
=>
array
(
'active'
,
'deleted'
),
...
...
@@ -78,6 +84,16 @@ function field_schema() {
);
$schema
[
'field_config_instance'
]
=
array
(
'fields'
=>
array
(
'id'
=>
array
(
'type'
=>
'serial'
,
'not null'
=>
TRUE
,
'description'
=>
'The primary identifier for a field instance'
,
),
'field_id'
=>
array
(
'type'
=>
'int'
,
'not null'
=>
TRUE
,
'description'
=>
'The identifier of the field attached by this instance'
,
),
'field_name'
=>
array
(
'type'
=>
'varchar'
,
'length'
=>
32
,
'not null'
=>
TRUE
,
'default'
=>
''
),
'bundle'
=>
array
(
'type'
=>
'varchar'
,
'length'
=>
128
,
'not null'
=>
TRUE
,
'default'
=>
''
),
'widget_type'
=>
array
(
'type'
=>
'varchar'
,
'length'
=>
128
,
'not null'
=>
TRUE
,
'default'
=>
''
),
...
...
@@ -106,7 +122,10 @@ function field_schema() {
'default'
=>
0
,
),
),
'primary key'
=>
array
(
'field_name'
,
'bundle'
),
'primary key'
=>
array
(
'id'
),
'unique keys'
=>
array
(
'field_name_bundle'
=>
array
(
'field_name'
,
'bundle'
),
),
'indexes'
=>
array
(
// used by field_read_instances
'widget_active_deleted'
=>
array
(
'widget_active'
,
'deleted'
),
...
...
modules/field/field.module
View file @
4ac090eb
...
...
@@ -107,6 +107,7 @@ function field_help($path, $arg) {
function
field_init
()
{
module_load_include
(
'inc'
,
'field'
,
'field.crud'
);
module_load_include
(
'inc'
,
'field'
,
'field.autoload'
);
drupal_add_css
(
drupal_get_path
(
'module'
,
'field'
)
.
'/theme/field.css'
);
}
/**
...
...
modules/field/modules/number/number.module
View file @
4ac090eb
...
...
@@ -51,7 +51,7 @@ function number_field_info() {
function
number_field_columns
(
$field
)
{
switch
(
$field
[
'type'
])
{
case
'number_integer'
:
$colums
=
array
(
$colum
n
s
=
array
(
'value'
=>
array
(
'type'
=>
'int'
,
'not null'
=>
FALSE
...
...
@@ -60,7 +60,7 @@ function number_field_columns($field) {
break
;
case
'number_float'
:
$colums
=
array
(
$colum
n
s
=
array
(
'value'
=>
array
(
'type'
=>
'float'
,
'not null'
=>
FALSE
...
...
@@ -69,7 +69,7 @@ function number_field_columns($field) {
break
;
case
'number_decimal'
:
$colums
=
array
(
$colum
n
s
=
array
(
'value'
=>
array
(
'type'
=>
'numeric'
,
'precision'
=>
$field
[
'settings'
][
'precision'
],
...
...
@@ -79,7 +79,7 @@ function number_field_columns($field) {
);
break
;
}
return
$colums
;
return
$colum
n
s
;
}
/**
...
...
modules/field/modules/text/text.module
View file @
4ac090eb
...
...
@@ -39,6 +39,7 @@ function text_field_info() {
'description'
=>
t
(
'This field stores varchar text in the database.'
),
'settings'
=>
array
(
'max_length'
=>
255
),
'instance_settings'
=>
array
(
'text_processing'
=>
0
),
'widget_settings'
=>
array
(
'size'
=>
60
),
'default_widget'
=>
'text_textfield'
,
'default_formatter'
=>
'text_default'
,
),
...
...
@@ -46,6 +47,7 @@ function text_field_info() {
'label'
=>
t
(
'Long text'
),
'description'
=>
t
(
'This field stores long text in the database.'
),
'instance_settings'
=>
array
(
'text_processing'
=>
0
),
'widget_settings'
=>
array
(
'rows'
=>
5
),
'default_widget'
=>
'text_textarea'
,
'default_formatter'
=>
'text_default'
,
),
...
...
modules/field/theme/field.css
View file @
4ac090eb
/* $Id$ */
/*
Node
display */
/*
Field
display */
.field
.field-label
,
.field
.field-label-inline
,
.field
.field-label-inline-first
{
font-weight
:
bold
;
font-weight
:
bold
;
}
.field
.field-label-inline
,
.field
.field-label-inline-first
{
display
:
inline
;
display
:
inline
;
}
.field
.field-label-inline
{
visibility
:
hidden
;
visibility
:
hidden
;
}
.node-form
.field-multiple-table
td
.field-multiple-drag
{
width
:
30px
;
padding-right
:
0
;
form
.field-multiple-table
{
margin
:
0
;
}
.node-
form
.field-multiple-table
t
d
.field-
multiple-drag
a
.tabledrag-handle
{
padding-
right
:
.5em
;
form
.field-multiple-table
t
h
.field-
label
{
padding-
left
:
0
;
}
.node-form
.field-add-more
.form-submit
{
margin
:
0
;
form
.field-multiple-table
td
.field-multiple-drag
{
width
:
30px
;
padding-right
:
0
;
}
form
.field-multiple-table
td
.field-multiple-drag
a
.tabledrag-handle
{
padding-right
:
.5em
;
}
.node-form
.number
{
display
:
inline
;
width
:
auto
;
form
.field-add-more-submit
{
margin
:
.5em
0
0
;
}
.form-item
.number
{
display
:
inline
;
width
:
auto
;
}
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment