You are here

function matrix_field in Matrix field 6

Same name and namespace in other branches
  1. 5 matrix.module \matrix_field()
  2. 6.2 matrix.module \matrix_field()

Implementation of hook_field().

File

./matrix.module, line 77
Defines simple matrix field types.

Code

function matrix_field($op, &$node, $field, &$items, $teaser, $page) {
  $rows = trim($field['rows']);
  $cols = trim($field['cols']);
  $rows = explode("\n", $rows);
  $cols = explode("\n", $cols);
  switch ($op) {
    case 'load':
      $result = db_query("SELECT value, row, col FROM {node_field_matrix_data} WHERE vid = %d AND field_name = '%s'", $node->vid, $field['field_name']);
      $values = array();
      while ($data = db_fetch_object($result)) {
        $values['data'][$data->row][$data->col] = $data->value;
      }
      $values['rows_header'] = $rows;
      $values['cols_header'] = $cols;
      $additions = array(
        $field['field_name'] => $values,
      );
      return $additions;
    case 'update':
      db_query("DELETE FROM {node_field_matrix_data} WHERE vid = %d and field_name= '%s'", $node->vid, $field['field_name']);
    case 'update':
    case 'insert':
      $i = 0;
      foreach ($rows as $row) {
        if ($row) {
          $j = 0;
          foreach ($cols as $col) {
            if ($col) {
              db_query("INSERT INTO {node_field_matrix_data} (nid, vid, field_name, row, col, value)\n                        VALUES (%d, %d, '%s', %d, %d, '%s')", $node->nid, $node->vid, $field['field_name'], $i, $j, $items[0][$i][$j]);
              $j++;
            }
          }
          $i++;
        }
      }
      break;
  }
}