updated serial field
This commit is contained in:
@@ -4,110 +4,35 @@
|
||||
* The Serial module main file.
|
||||
*/
|
||||
|
||||
define('SERIAL_FIELD_TYPE', 'serial');
|
||||
|
||||
/**
|
||||
* Implements hook_field_info().
|
||||
*/
|
||||
function serial_field_info() {
|
||||
return array(
|
||||
'serial' => array(
|
||||
SERIAL_FIELD_TYPE => array(
|
||||
'label' => t('Serial'),
|
||||
'description' => t('Auto increment serial field type.'),
|
||||
// The "property_type" should be defined for accessing the
|
||||
// field by entity metadata wrapper.
|
||||
'property_type' => 'serial',
|
||||
'default_widget' => 'serial',
|
||||
'property_type' => 'integer',
|
||||
'default_widget' => 'serial_widget_default',
|
||||
'default_formatter' => 'serial_formatter_default',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_create_instance().
|
||||
* Implements hook_field_widget_info().
|
||||
*/
|
||||
function serial_field_create_instance($instance) {
|
||||
$field = field_read_field($instance['field_name']);
|
||||
|
||||
if ('serial' == $field['type']) {
|
||||
// Create the assistant table:
|
||||
module_load_include('inc', 'serial');
|
||||
_serial_create_table($field, $instance);
|
||||
|
||||
// Set serial values for old objects.
|
||||
$old_count = _serial_init_old_nodes($instance['bundle'], $field['field_name']);
|
||||
|
||||
if ($old_count > 0) {
|
||||
drupal_set_message(t('Serial values have been automatically set for %count existing nodes.', array(
|
||||
'%count' => $old_count,
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_delete_instance().
|
||||
*/
|
||||
function serial_field_delete_instance($instance) {
|
||||
$field = field_read_field($instance['field_name']);
|
||||
|
||||
if ('serial' == $field['type']) {
|
||||
// Drop the assistant table.
|
||||
module_load_include('inc', 'serial');
|
||||
_serial_drop_table($field, $instance);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_form_alter().
|
||||
*/
|
||||
function serial_form_alter(&$form, $form_state, $form_id) {
|
||||
if ('field_ui_field_settings_form' == $form_id && 'serial' == $form['field']['type']['#value']) {
|
||||
drupal_set_message(t('Serial field %field has been created.', array(
|
||||
'%field' => $form['field']['field_name']['#value'],
|
||||
)));
|
||||
|
||||
drupal_goto("admin/structure/types/manage/{$form['#bundle']}/fields");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_presave().
|
||||
*/
|
||||
function serial_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
|
||||
if (empty($items)) {
|
||||
module_load_include('inc', 'serial');
|
||||
|
||||
$items = array(array('value' => _serial_generate_value($instance['bundle'], $field['field_name'])));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_is_empty().
|
||||
*/
|
||||
function serial_field_is_empty($item, $field) {
|
||||
// Never should be treated as empty.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_node_presave().
|
||||
*/
|
||||
function serial_node_presave($node) {
|
||||
if (module_exists('auto_nodetitle')) {
|
||||
if (auto_nodetitle_get_setting($node->type)) {
|
||||
auto_nodetitle_set_title($node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_node_type_update().
|
||||
*/
|
||||
function serial_node_type_update($info) {
|
||||
// Handle content type rename:
|
||||
if (isset($info->old_type) && ($info->old_type != $info->type)) {
|
||||
module_load_include('inc', 'serial');
|
||||
_serial_rename_tables($info->old_type, $info->type);
|
||||
}
|
||||
function serial_field_widget_info() {
|
||||
return array(
|
||||
'serial_widget_default' => array(
|
||||
'label' => t('Hidden (Automatic)'),
|
||||
'field types' => array(SERIAL_FIELD_TYPE),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -117,15 +42,95 @@ function serial_field_formatter_info() {
|
||||
return array(
|
||||
'serial_formatter_default' => array(
|
||||
'label' => t('Default'),
|
||||
'field types' => array('serial'),
|
||||
'field types' => array(SERIAL_FIELD_TYPE),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_create_instance().
|
||||
*/
|
||||
function serial_field_create_instance(array $instance) {
|
||||
$field = field_read_field($instance['field_name']);
|
||||
|
||||
if (SERIAL_FIELD_TYPE === $field['type']) {
|
||||
// Create the assistant table:
|
||||
module_load_include('inc', 'serial');
|
||||
_serial_create_table($field, $instance);
|
||||
|
||||
// Set serial values for old objects.
|
||||
$old_count = _serial_init_old_entities($instance['entity_type'], $instance['bundle'], $field['field_name']);
|
||||
|
||||
if ($old_count > 0) {
|
||||
drupal_set_message(t('Serial values have been automatically set for %count existing entities.', array(
|
||||
'%count' => $old_count,
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_delete_instance().
|
||||
*/
|
||||
function serial_field_delete_instance(array $instance) {
|
||||
$field = field_read_field($instance['field_name']);
|
||||
|
||||
if (SERIAL_FIELD_TYPE == $field['type']) {
|
||||
// Drop the assistant table.
|
||||
module_load_include('inc', 'serial');
|
||||
_serial_drop_table($field, $instance);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_presave().
|
||||
*/
|
||||
function serial_field_presave($entity_type, $entity, array $field, array $instance, $langcode, array &$items) {
|
||||
if (empty($items)) {
|
||||
module_load_include('inc', 'serial');
|
||||
|
||||
$items[] = array(
|
||||
'value' => _serial_generate_value($entity_type, $instance['bundle'], $field['field_name']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_is_empty().
|
||||
*/
|
||||
function serial_field_is_empty($item, $field) {
|
||||
// Never should be treated as empty.
|
||||
return empty($item['value']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_clone_node_alter().
|
||||
*/
|
||||
function serial_clone_node_alter(stdClass $node) {
|
||||
// Reset values of all serial fields when cloning a node.
|
||||
foreach (field_info_instances('node', $node->type) as $field_name => $instance) {
|
||||
$info = field_info_field($field_name);
|
||||
|
||||
if ('serial' === $info['type']) {
|
||||
$node->{$field_name} = array();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_attach_rename_bundle().
|
||||
*/
|
||||
function serial_field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
|
||||
if ($bundle_old !== $bundle_new) {
|
||||
module_load_include('inc', 'serial');
|
||||
_serial_rename_tables($entity_type, $bundle_old, $bundle_new);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_formatter_view().
|
||||
*/
|
||||
function serial_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
|
||||
function serial_field_formatter_view($entity_type, $entity, array $field, array $instance, $langcode, array $items, array $display) {
|
||||
$element = array();
|
||||
|
||||
// Define the field contents for the single default formatter.
|
||||
@@ -157,30 +162,28 @@ function serial_theme() {
|
||||
/**
|
||||
* Theme function for the default formatter.
|
||||
*/
|
||||
function theme_serial_formatter_default($variables) {
|
||||
function theme_serial_formatter_default(array $variables) {
|
||||
return $variables['serial_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_field_widget_info().
|
||||
* Implements hook_field_widget_form().
|
||||
*/
|
||||
function serial_field_widget_info() {
|
||||
return array(
|
||||
'serial' => array(
|
||||
'label' => t('Hidden (Automatic)'),
|
||||
'field types' => array('serial'),
|
||||
),
|
||||
);
|
||||
}
|
||||
function serial_field_widget_form(
|
||||
array &$form,
|
||||
array &$form_state,
|
||||
array $field,
|
||||
array $instance,
|
||||
$langcode,
|
||||
array $items,
|
||||
$delta,
|
||||
array $element
|
||||
) {
|
||||
$element['#type'] = 'hidden';
|
||||
|
||||
/**
|
||||
* Implements hook_field_widget().
|
||||
*/
|
||||
function serial_field_widget(&$form, &$form_state, $field, $instance, $items, $delta = 0) {
|
||||
return array(
|
||||
'value' => array(
|
||||
'#type' => 'hidden',
|
||||
'#default_value' => $items[$delta]['value'],
|
||||
),
|
||||
);
|
||||
if (isset($items[$delta]['value'])) {
|
||||
$element['#default_value'] = $items[$delta]['value'];
|
||||
}
|
||||
|
||||
return array('value' => $element);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user