hook_nodeapi used for validation of CCK fields

  1. <?php
  2. function sitehelper_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  3.    if($node->type == 'cinfo') {
  4.       switch ($op) {
  5.          case 'update':
  6.          break;
  7.          case 'view':
  8.          break;
  9.          case 'validate':
  10.          $newgcd = trim($node->field_gcd_user_id[0][value]);
  11.          if(!preg_match("/^[a-z]{6}_[0-9]{4}$/i", $newgcd)) {
  12.             // VALIDATION GOES HERE
  13.             form_set_error('field_gcd_user_id', 'Please enter a valid GCD User ID.');
  14.          }
  15.          $newfed = trim($node->field_federal_id_number_0[0][value]);
  16.          if(!preg_match("/^([0-9]{3}-?[0-9]{2}-?[0-9]{4}|[0-9]{2}-[0-9]{7})$/", $newfed)) {
  17.             form_set_error('field_federal_id_number_0', 'Please enter a valid Federal ID number.');
  18.          }
  19.          if($node->field_are_you_a_route_operator[0][value] == 'Yes') {
  20.             $newmdr = trim($node->field_mdr_number[0][value]);
  21.             if(!preg_match("/^[0-9]{7}-[0-9]{3}-MDR$/", $newmdr)) {
  22.                form_set_error('field_mdr_number', 'If you are a Route Operator, you must enter a valid MDR Number.');
  23.             }
  24.          }
  25.          break;
  26.          case 'delete':
  27.          break;
  28.       }
  29.    }
  30.    elseif($node->type == 'linfo') {
  31.       switch ($op) {
  32.          case 'insert':
  33.          break;
  34.          case 'update':
  35.          break;
  36.          case 'view':
  37.          break;
  38.          case 'validate':
  39.          if(db_result(db_query("SELECT field_inactivel_value FROM {content_type_linfo}
  40.            WHERE field_inactivel_value = '%s' AND nid = %d", inactive, $node->nid))) {
  41.             form_set_error('field_inactivel', 'This location is inactive. Updates are unavailable.');
  42.          } else {
  43.             if($node->field_inactivel[0][value] == 'inactive' &&
  44.                db_result(db_query("SELECT field_parentnid_value, field_inactive_value FROM {content_type_minfo}
  45.               WHERE field_parentnid_value = %d AND field_inactive_value = '%s'",
  46.                $node->nid, active))) {
  47.                form_set_error('field_inactivel', 'All machines must be removed from this location before the location
  48.                  can be removed.');
  49.             }
  50.             $newgcdl = trim($node->field_gcd_user_id[0][value]);
  51.             if(!preg_match("/^[a-z]{6}_[0-9]{4}$/i", $newgcdl)) {
  52.                // VALIDATION GOES HERE
  53.                form_set_error('field_gcd_user_id', 'Please enter a valid GCD User ID.');
  54.             }
  55.             $newfedl = trim($node->field_federal_id_number_0[0][value]);
  56.             if(!preg_match("/^([0-9]{3}-?[0-9]{2}-?[0-9]{4}|[0-9]{2}-[0-9]{7})$/", $newfedl)) {
  57.                form_set_error('field_federal_id_number_0', 'Please enter a valid Federal ID number for this location.');
  58.             }
  59.             $newgoa = trim($node->field_goa[0][value]);
  60.                if(!preg_match("/^[0-9]{7}-[0-9]{3}-GOA$/", $newgoa)) {
  61.                   form_set_error('field_goa', 'The location\'s GOA number is required.');
  62.             }
  63.          }
  64.          break;
  65.          case 'delete':
  66.          break;
  67.       }
  68.    }
  69.    elseif($node->type == 'minfo') {
  70.       switch ($op) {
  71.          case 'view':
  72.          break;
  73.          case 'insert':
  74.          break;
  75.          case 'update':
  76.          break;    
  77.          case 'validate':
  78.          if(db_result(db_query("SELECT field_inactive_value FROM {content_type_minfo}
  79.            WHERE field_inactive_value = '%s' AND nid = %d'", inactive, $node->nid))) {
  80.             form_set_error('field_inactive', 'This machine is inactive. Updates are unavailable.');
  81.          } else {
  82.             $newvgm = trim($node->field_vgm_id_number[0][value]);
  83.             if(!preg_match("/^[0-9]{6}$/", $newvgm)) {
  84.                form_set_error('field_vgm_id_number', 'Please enter a valid VGM ID number that is 6 digits long.');
  85.             } elseif(db_result(db_query("SELECT nid, field_vgm_id_number_value FROM {content_type_minfo}
  86.               WHERE field_vgm_id_number_value = '%s' AND field_inactive_value = '%s' AND nid != %d",
  87.                $newvgm, active, $node->nid))) {
  88.                form_set_error('field_vgm_id_number', 'That VGM ID number is already in use. If you have a machine with
  89.                  this VGM ID number in another location, please remove it before enrolling it in this location.');
  90.             }
  91.             foreach (array(1,2,3,4) as $matrixrow) {
  92.                foreach (array(1,2) as $matrixcol) {
  93.                   $newmeter = trim($node->field_beginning_meter_readings[matrix][$matrixrow][$matrixcol]);
  94.                   if(!preg_match("/^[0-9]+$/", $newmeter)) {
  95.                      form_set_error('field_beginning_meter_readings', 'Please enter only numbers into meter readings,
  96.                        leaving off any decimals (If a meter reading is 525.25, enter it as 52525).');
  97.                      break;
  98.                   }
  99.                }
  100.             }
  101.          }
  102.          break;
  103.          case 'delete':
  104.          break;
  105.       }
  106.    }
  107. }