5 module文件

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

这是module文件的代码:

<?php

 

/**

 * @file

 * Add validation rules to webforms

 */

 

include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'field_validation') . '/' . 'field_validation.validators.inc';

include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'field_validation') . '/' . 'field_validation.rules.inc';

 

/**

 * Implements hook_menu().

 */

function field_validation_menu() {

  $items = array();

 

foreach (entity_get_info() as $entity_type => $entity_info) {

    if ($entity_info['fieldable']) {

      foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) {

        if (isset($bundle_info['admin'])) {

          // Extract path information from the bundle.

          $path = $bundle_info['admin']['path'];

          if (isset($bundle_info['admin']['bundle argument'])) {

            $bundle_arg = $bundle_info['admin']['bundle argument'];

            $bundle_pos = (string) $bundle_arg;

          }

          else {

            $bundle_arg = $bundle_name;

            $bundle_pos = '0';

          }

          // This is the position of the %field_ui_menu placeholder in the

          // items below.

          $field_position = count(explode('/', $path)) + 1;

 

          // Extract access information, providing defaults.

          $access = array_intersect_key($bundle_info['admin'], drupal_map_assoc(array('access callback', 'access arguments')));

          $access += array(

            'access callback' => 'user_access',

            'access arguments' => array('administer site configuration'),

          );

 

          $items["$path/fields/%field_ui_menu/validation"] = array(

            'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),

            'title' => 'Validation',

            'page callback' => 'field_validation_manage',

            'page arguments' => array($field_position),

            'type' => MENU_LOCAL_TASK,

            'file' => 'field_validation.admin.inc',

          ) + $access;


          $items[$path.'/fields/%field_ui_menu/validation/add'] = array(

            'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),

            'title' => 'Add validation',

'page callback' => 'drupal_get_form',

'page arguments' => array('field_validation_manage_rule', $field_position, 'add'),

            'type' => MENU_CALLBACK,

            'file' => 'field_validation.admin.inc',

          ) + $access;


$items["$path/fields/%field_ui_menu/validation/edit"] = array(

            'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),

            'title' => 'Edit rule',

'page callback' => 'drupal_get_form',

'page arguments' => array('field_validation_manage_rule', $field_position, 'edit'),

            'type' => MENU_CALLBACK,

            'file' => 'field_validation.admin.inc',

          ) + $access;


$items["$path/fields/%field_ui_menu/validation/delete"] = array(

            'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),

            'title' => 'Delete rule',

'page callback' => 'drupal_get_form',

'page arguments' => array('field_validation_delete_rule', $field_position+3),

            'type' => MENU_CALLBACK,

            'file' => 'field_validation.admin.inc',

          ) + $access;

        }

      }

    }

  }


  return $items;

}

 

/**

 * Implements hook_theme().

 */

function field_validation_theme() {

  return array(

    'field_validation_manage_add_rule' => array(

      'variables' => array(

        'instance' => NULL,

      ),

    ),

    'field_validation_manage_overview' => array(

      'variables' => array(

        'rules' => NULL,

        'instance' => NULL,

      ),

    ),

  );

}

 

/**

 * Implements hook_field_attach_validate().

 */

function field_validation_field_attach_validate($entity_type, $entity, &$errors) {

  //ToDo;

list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);

$rules = field_validation_get_bundle_rules($entity_type, $bundle);

if($rules){

foreach ($rules as $rule) {

$field_name = $rule['field_name'];

      $field = field_info_field($field_name);

  $languages = field_available_languages($entity_type, $field);

foreach ($languages as $langcode) {

  $items = isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : array();

$errors[$rule['field_name']][$langcode] = module_invoke_all("field_validation_validate", $rule['validator'], $items, $rule);

}


}

  }

}

 

/**

 * Theme the 'add rule' list

 */

function theme_field_validation_manage_add_rule($variables) {

  $instance = $variables['instance'];

  $output = '';

  $validators = field_validation_get_validators();

 

  if ($validators) {

    $output = '<h3>' . t('Add a validation rule') . '</h3>';

    $output .= '<dl>';

    foreach ($validators as $validator_key => $validator_info) {

      $item = '';

  $path = isset($_GET['q']) ? $_GET['q'] : '';

      $url = $path.'/add/' . $validator_key;

      $components = ' (' . implode(', ', $validator_info['component_types']) . ')';

      $item = '<dt>' . l($validator_info['name'], $url, array("query" => drupal_get_destination())) . '</dt>';

      $item .= '<dd>';

      if ($validator_info['description']) {

        $item .= $validator_info['description'] . ' ';

      }

      $item .= $components . '</dd>';

      $output .= $item;

    }

    $output .= '</dl>';

  }

  return $output;

}

 

/**

 * Implements hook_field_delete().

 */

function field_validation_field_delete($entity_type, $entity, $field, $instance, $langcode, &$items) {

  $rules = field_validation_get_field_rules($instance);

  if ($rules) {

    foreach (array_keys($rules) as $ruleid) {

      field_dynamic_delete_rule($ruleid);

    }

  }

}

 

/**

 * Save a validation rule. Data comes from the admin form

 * or nodeapi function in case of node clone

 */

function field_validation_rule_save($values) {

  // save rules data

  if ($values['action'] == 'add') {

    drupal_write_record('field_validation_rule', $values);

    $ruleid = $values['ruleid'];

    if ($ruleid) {

      module_invoke_all('field_validation', 'rule', 'add', $values);

    }

  }

 

  if ($values['action'] == 'edit') {

    drupal_write_record('field_validation_rule', $values, 'ruleid');

    $ruleid = $values['ruleid'];

    if ($ruleid) {

      module_invoke_all('field_validation', 'rule', 'edit', $values);

    }

  }

}


Drupal版本: