123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <?php
- /**
- * @file
- * The Serial module main file.
- */
- //==================//
- // Field Definition //
- //==================//
- /**
- * Implements hook_field_info().
- */
- function serial_field_info() {
- return array(
- 'serial' => array(
- 'label' => t('Serial'),
- 'description' => t('Auto increment serial field type.'),
- '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 ($field['type'] == 'serial') {
- // 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) {
- 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 ($field['type'] == 'serial') {
- // 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 ($form_id == 'field_ui_field_settings_form' && $form['field']['type']['#value'] == 'serial') {
- // Show messages:
- $field_name = $form['field']['field_name']['#value'];
- drupal_set_message(
- t('Serial field %field has been created.',
- array('%field' => $field_name))
- );
- // Go back to Managed Fields:
- $type = $form['#bundle'];
- drupal_goto("admin/structure/types/manage/$type/fields");
- }
- }
- /**
- * Implements hook_field_presave().
- */
- function serial_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
- module_load_include('inc', 'serial');
- if (empty($items)) {
- $sid = _serial_generate_value($instance['bundle'], $field['field_name']);
- $items = array(array('value' => $sid));
- }
- }
- /**
- * Implements hook_field_is_empty().
- */
- function serial_field_is_empty($item, $field) {
- return FALSE; // never should be treated as empty
- }
- /**
- * 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);
- }
- }
- // Tokens for fields are currently not supported - http://drupal.org/node/691078.
- ///**
- // * Implements hook_token_info().
- // */
- //function serial_token_info() {
- // $type = array(
- // 'name' => t('Nodes'),
- // 'description' => t('Tokens related to individual nodes.'),
- // 'needs-data' => 'node',
- // );
- // $node['serial'] = array(
- // 'name' => t("Serial Field"),
- // 'description' => t('Serial field value (unique per node type)'),
- // 'needs-data' => 'node',
- // );
- // return array(
- // 'types' => array('node' => $type),
- // 'tokens' => array('node' => $node),
- // );
- //}
- //
- ///**
- // * Implements hook_tokens().
- // */
- //function serial_tokens($type, $tokens, $data, $options) {
- // // TODO
- //}
- //=================//
- // Field Formatter //
- //=================//
- /**
- * 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;
- }
- /**
- * Theme Functions
- */
- /**
- * 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'];
- }
- //==============//
- // Field Widget //
- //==============//
- /**
- * 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'],
- )
- );
- }
|