Simplest way to have dynamic content (year) in field's default value? I'm looking for the simplest way in Drupal 7 to set simple dynamic content in the default value of a text field.

Specifically, I have a "Copyright notice" field, and I want the default value to be like this: "&copy; Copyright Our Organisation [YEAR]", where [YEAR] is the current year. When the user creates a node in 2012, the form field is pre-populated "&copy; Copyright Our Organisation 2012", and will be saved as this and stay as 2012 unless editted. When the user creates a node in 2013, the form field is pre-populated "&copy; Copyright Our Organisation 2013" but all the old nodes made in 2012 don't change. EDIT: The field should still be editable, so users can replace it where it's not appropriate (e.g. if one piece of content they're uploading is actually "&copy; Copyright Some Other Organisation 1981"): but the default should reflect the current year. 

There seem to be a few options, but none of them seem particularly clean:


Using tokens. It seems that this requires either the token_filter module or the token_insert module. Then, the default value could include [current-date:custom:Y]. However, it's not so clean. For token_filter, the token from the default won't be translated until the user manually changes the input filter to "token filter" and hits save - bad for the user. For Token Insert, I believe the input field type would need to change to long text, and I'm not even sure it would work in the context of setting the default value. 
Custom module. Something like, setting the default value to include some gibberish string like "_!YEAR!_", and then use something like hook_form_alter(); to find and replace. Or, defining some custom field that does this. Both involve fixing this specific combination of field and content firmly into code, which seems undesirable.
D7 CCK module. It exists (as a dev module) and apparently it has some feature to do with setting lists using PHP that didn't go into D7 core. Sounds not very applicable to this case however.
PHP filter. While you can set the Default Value field to use the PHP filter, in testing I found it doesn't actually apply the filter to the content you enter into the default value field. For example, putting © copyright Our Organisation &lt;?php echo date('Y'); ?&gt; into a default value field with PHP Filter applied just dumps that exact string, © copyright Our Organisation &lt;?php echo date('Y'); ?&gt;, into the field on the edit/create form, giving a user without access to the PHP filter nothing but some escaped text resembling PHP code, and giving a user with PHP filter access PHP code in the content of the field which continually processes, rather than becoming static text.


Am I missing something? Is there another way, or a variant on the above that is simpler?
you can write a module and implement hook_node_save(). If the node is new just set the value of the field (a simple text string to something like:

$node-&gt;field_copyright_notice[LANGUAGE_NONE][0]['value'] = "&amp;copy; Copyright Our Organisation ".date('Y');


So in your own module you could do:

function MYMODULE_node_presave(&amp;$node) {
 // Only do this for new nodes, eg nodes without a NID.
 if (!isset($node-&gt;nid)) {
     // Set our copyright text string.
     $node-&gt;field_copyright_notice[LANGUAGE_NONE][0]['value'] = "&amp;copy; Copyright Our Organisation ".date("Y");
 }
}

// You can also hide the field for new nodes with hook_form_alter().
function MYMODULE_form_alter(&amp;$form, &amp;$form_state, $form_id) {
  if ($form_id == 'node_NODETYPE_add_form') {
    $form['field_copyright_notice']['#access'] = FALSE;
  }
}