diff -u -r1.6 field_file.inc --- field_file.inc 2 May 2004 17:57:45 -0000 1.6 +++ field_file.inc 10 Jun 2004 21:20:24 -0000 @@ -17,11 +17,27 @@ return "flexinode_". $field->field_id .".textual_data"; } +// we want qualify by nid so that muliple nodes with the same attached file don't conflict. +// for now we don't worry about multiple fields of the same node having the same attached file name. +// we also prepend the node type so that the directory structure is clearer. +function _flexinode_field_file_dest($node, $filename) { + $dir = $node->type; + file_create_directory($dir); + $dir .= '/' . $node->nid; + file_create_directory($dir); + $dest = $dir . '/' . $tempfile->name; + return $dest; +} + function flexinode_field_file_insert($field, $node) { $fieldname = "flexinode_". $field->field_id; - $node->$fieldname = file_save_upload($node->$fieldname, $node->$fieldname->name); - $serialized = is_object($node->$fieldname) ? serialize($node->$fieldname) : ''; - db_query("INSERT INTO {flexinode_data} (nid, field_id, textual_data, serialized_data) VALUES (%d, %d, '%s', '%s')", $node->nid, $field->field_id, $node->$fieldname->name, $serialized); + $tempfile = $node->$fieldname; + $dest = _flexinode_field_file_dest($node, $tempfile->name); + //print("flexinode_field_file_insert on $node->nid calling file_save_upload($tempfile,$dest)\n"); + $file = $node->$fieldname = file_save_upload($tempfile, $dest); + //print("flexinode_field_file_insert saved to $file->name\n"); + $serialized = is_object($file) ? serialize($file) : ''; + db_query("INSERT INTO {flexinode_data} (nid, field_id, textual_data, serialized_data) VALUES (%d, %d, '%s', '%s')", $node->nid, $field->field_id, $file->name, $serialized); } function flexinode_field_file_delete($field, $node, $unconditional = 0) { @@ -35,9 +51,16 @@ function flexinode_field_file_validate($field, $node) { $fieldname = "flexinode_". $field->field_id; - if ($file = file_save_upload($fieldname)) { + // sigh, file_save_upload returns 0 both if there was no file, or there was but it had an error. + drupal_get_last_error(1); + $file = file_save_upload($fieldname); + $last_error = drupal_get_last_error(); + if ($file) { return array('value' => $file); } + else if ($last_error) { + return array('value' => $file, 'error' => $last_error); + } else if (empty($node->$fieldname)) { return array('value' => unserialize($node->{$fieldname ."_old"})); } @@ -45,8 +68,9 @@ function flexinode_field_file_format($field, $node, $brief = 0) { $fieldname = "flexinode_". $field->field_id; - $file = is_object($node->$fieldname) ? $node->$fieldname : unserialize($node->$fieldname); - + $val = $node->$fieldname; + $file = is_object($val) ? $val : unserialize($val); +//print("flexinode_field_file_format(fieldname=$fieldname,file=$file,val=$val)
\n"); if ($file) { return ''. check_output($file->name) .' ('. format_size($file->size) .')'; } @@ -83,4 +107,4 @@ /** @} End of addtogroup themeable */ -?> \ No newline at end of file +?>