function matrix_field in Matrix field 6.2
Same name and namespace in other branches
- 5 matrix.module \matrix_field()
- 6 matrix.module \matrix_field()
Implementation of hook_field().
2 calls to matrix_field()
File
- ./
matrix.module, line 293 - Defines simple matrix field types.
Code
function matrix_field($op, &$node, $field, &$items, $teaser, $page) {
switch ($op) {
case 'load':
$db_info = content_database_info($field);
$result = db_query("SELECT value, row, col FROM {node_field_matrix_data} WHERE vid = %d AND field_name = '%s' ORDER BY row", $node->vid, $field['field_name']);
$values = array();
while ($data = db_fetch_object($result)) {
$values[$data->row][$data->col] = $data->value;
}
return array(
$field['field_name'] => array_values($values),
);
case 'delete':
case 'delete revision':
db_query("DELETE FROM {node_field_matrix_data} WHERE vid = %d and field_name= '%s'", $node->vid, $field['field_name']);
break;
case 'update':
db_query("DELETE FROM {node_field_matrix_data} WHERE vid = %d and field_name= '%s'", $node->vid, $field['field_name']);
case 'insert':
$cols_elements = unserialize(str_replace("\r", "", $field['cols_elements']));
switch ($field['widget']['type']) {
case 'table':
// Have to get data from $_POST because order of items was not respected
if ($node->form_token == $_POST['form_token'] && $node->form_build_id == $_POST['form_build_id']) {
// TODO: Check XSS injection
$items =& $_POST[$field['field_name']];
}
if (is_array($items) && count($items)) {
$row = 0;
foreach ($items as $values) {
$sql = array();
$empty = TRUE;
unset($values['_weight']);
foreach ($values as $col => $val) {
// Buffer queries
$sql[] = array(
"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'],
$row,
$col,
$val,
);
// Check for empty rows
if (strlen(trim($val))) {
$empty = FALSE;
}
}
if (!$empty) {
// Save row
foreach ($sql as $q) {
call_user_func_array('db_query', $q);
}
}
++$row;
}
}
break;
case 'matrix':
$rows_elements = unserialize(str_replace("\r", "", $field['rows_elements']));
foreach ($rows_elements as $i => $row) {
foreach ($cols_elements as $j => $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]);
}
}
break;
}
break;
}
}