187 lines
4.3 KiB
Plaintext
187 lines
4.3 KiB
Plaintext
<?php
|
|
/**
|
|
* @file
|
|
* The Serial module main file.
|
|
*/
|
|
|
|
/**
|
|
* Implements hook_field_info().
|
|
*/
|
|
function serial_field_info() {
|
|
return array(
|
|
'serial' => 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',
|
|
'default_formatter' => 'serial_formatter_default',
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Implements hook_field_create_instance().
|
|
*/
|
|
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);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Implements hook_field_formatter_info().
|
|
*/
|
|
function serial_field_formatter_info() {
|
|
return array(
|
|
'serial_formatter_default' => array(
|
|
'label' => t('Default'),
|
|
'field types' => array('serial'),
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Implements hook_field_formatter_view().
|
|
*/
|
|
function serial_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
|
|
$element = array();
|
|
|
|
// Define the field contents for the single default formatter.
|
|
foreach ($items as $delta => $item) {
|
|
$element[$delta] = array(
|
|
'#markup' => theme('serial_formatter_default', array(
|
|
'serial_id' => $item['value'],
|
|
)),
|
|
);
|
|
}
|
|
|
|
return $element;
|
|
}
|
|
|
|
/**
|
|
* Implements hook_theme().
|
|
*/
|
|
function serial_theme() {
|
|
// Register the theme for the default formatter.
|
|
return array(
|
|
'serial_formatter_default' => array(
|
|
'variables' => array(
|
|
'serial_id' => NULL,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Theme function for the default formatter.
|
|
*/
|
|
function theme_serial_formatter_default($variables) {
|
|
return $variables['serial_id'];
|
|
}
|
|
|
|
/**
|
|
* Implements hook_field_widget_info().
|
|
*/
|
|
function serial_field_widget_info() {
|
|
return array(
|
|
'serial' => array(
|
|
'label' => t('Hidden (Automatic)'),
|
|
'field types' => array('serial'),
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 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'],
|
|
),
|
|
);
|
|
}
|