Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
drupal
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Custom Issue Tracker
Custom Issue Tracker
Labels
Merge Requests
225
Merge Requests
225
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
project
drupal
Commits
4ac090eb
Commit
4ac090eb
authored
Mar 10, 2009
by
Dries
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Patch
#392686
by bjaspan, yched: switch to serial primary keys.
parent
a4ee7092
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
108 additions
and
49 deletions
+108
-49
modules/field/field.crud.inc
modules/field/field.crud.inc
+31
-9
modules/field/field.form.inc
modules/field/field.form.inc
+28
-19
modules/field/field.install
modules/field/field.install
+21
-2
modules/field/field.module
modules/field/field.module
+1
-0
modules/field/modules/number/number.module
modules/field/modules/number/number.module
+4
-4
modules/field/modules/text/text.module
modules/field/modules/text/text.module
+2
-0
modules/field/theme/field.css
modules/field/theme/field.css
+21
-15
No files found.
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
td
.field-multiple-drag
a
.tabledrag-handle
{
padding-
right
:
.5em
;
form
.field-multiple-table
th
.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
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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