--- flexinode-cvs/field_file.inc 2005-11-10 20:35:16.000000000 +1100 +++ flexinode/field_file.inc 2006-03-29 14:17:06.000000000 +1100 @@ -15,6 +15,7 @@ '#required' => $field->required, '#weight' => $field->weight, ); + $form[$fieldname .'_old'] = array( '#type' => 'hidden', '#value' => serialize($node->$fieldname), @@ -32,6 +33,7 @@ } function flexinode_field_file_insert($field, $node) { + $fieldname = 'flexinode_'. $field->field_id; $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->filename, $serialized); @@ -42,13 +44,61 @@ $result = db_fetch_object(db_query('SELECT serialized_data FROM {flexinode_data} WHERE nid = %d AND field_id = %d', $node->nid, $field->field_id)); $file = unserialize($result->serialized_data); if ($unconditional || $node->$fieldname != $file) { - file_delete($file->filepath); } } + +// replaces save path tags with correct values +function _save_path_markup($metatag) { + global $user; + + // add any extra functionality here, such as %workflowstate etc + foreach($metatag as $tag) { + switch(strtolower($tag)) { + case "%day": + $ret= date("j"); + break; + case "%dayname": + return date("l"); + break; + case "%month": + return date("n"); + break; + case "%monthname": + return date("F"); + break; + case "%year": + return date("Y"); + break; + case "%username": + return $user->name; + break; + + }; + } + +} + + function flexinode_field_file_execute($field, $node) { $fieldname = 'flexinode_'. $field->field_id; - if ($file = file_save_upload($fieldname, variable_get('file_directory_path', NULL))) { + $savepath=variable_get('file_directory_path', NULL); + if(is_array($field->options)) { + $path_extention=preg_replace_callback("/%.*?(?=(\W|$))/","_save_path_markup",implode("",$field->options)); + // create the subdirectories if path_extention is set + foreach(explode("/",$path_extention) as $p) { + if($p!="/") { + $extpath.="/$p"; + if(!file_exists($savepath."/".$extpath)) { + mkdir($savepath."/".$extpath); + } + } + } + $savepath.=$extpath; + } + + + if ($file = file_save_upload($fieldname, $savepath )) { return $file; } elseif (empty($node->$fieldname)) { @@ -70,6 +120,16 @@ return unserialize($node->$fieldname); } +function flexinode_field_file_config($field, $edit) { + return array('options' => array( + '#type' => 'textfield', + '#title' => 'Save path format', + '#default_value' => implode("",$field->options), + '#description' => t('Enter save path format, this will be appended to file_directory_path, mark it up with %username, %day, %dayname, %month, %monthname, %year . Blank if not required. Directories will be created, default (blank)
Example: nodefiles/%year/%month/%username. All filenames are preserved.'), + )); +} + + /** * @addtogroup themeable