I tried out the excellent http://drupal.org/project/creativecommons_lite module (and a few years ago, back when 4.7.x was the rage http://drupal.org/project/creativecommons) and even filed a feature request for head links and internationalization which is fixed through this little recipe for a copyright system.

Create a Copyright Node Type

NOTE: If you are using translation/internationalization, be sure to turn on translation workflow on your Copyright node type. I translate the copyright nodes, but you can set them to language neutral (I HOPE) and it will show up in node reference fields for any lanugage. If you set it to any certain language, it will only be available for nodes of that language, so be sure to test out in your environment.

First turn on the "content copy" module (included in cck) if you haven't already. Then import the following cck node type:

$content[type]  = array (
  'name' => 'Copyright',
  'type' => 'copyright',
  'description' => '',
  'title_label' => 'Copyright',
  'body_label' => 'Description',
  'min_word_count' => '0',
  'help' => '',
  'submitagain' => 0,
  'node_options' => 
  array (
    'status' => true,
    'promote' => true,
    'sticky' => false,
    'revision' => false,
  ),
  'language_content_type' => '2',
  'show_preview_changes' => 1,
  'i18n_node' => '1',
  'prepopulate_allowed' => 1,
  'i18nsync_nodeapi' => 
  array (
    'author' => false,
    'status' => false,
    'promote' => false,
    'moderate' => false,
    'sticky' => false,
    'revision' => true,
    'parent' => false,
    'taxonomy' => false,
    'comment' => false,
  ),
  'old_type' => 'copyright',
  'orig_type' => '',
  'module' => 'node',
  'custom' => '1',
  'modified' => '1',
  'locked' => '0',
  'comment' => '0',
  'comment_default_mode' => '4',
  'comment_default_order' => '1',
  'comment_default_per_page' => '50',
  'comment_controls' => '3',
  'comment_anonymous' => '0',
  'comment_subject_field' => '1',
  'comment_preview' => '1',
  'comment_form_location' => '0',
  'composite_enabled' => 0,
  'composite_referenceable_types' => 
  array (
    'copyright' => false,
    'edition' => false,
    'ifimage' => false,
    'media' => false,
    'page' => false,
    'source' => false,
    'story' => false,
  ),
  'composite_advanced_view' => '--',
  'composite_advanced_view_args' => '',
);

Create a Copyright and Copyright View Field

Again done by importing some code, beware that you must select which content type to import the fields into; do this for each field you want to add copyright to.

$content[type]  = array (
  'name' => 'Story',
  'type' => 'story',
  'description' => 'A story, similar in form to a page, is ideal for creating and displaying content that informs or engages website visitors. News articles, press releases, site announcements, and informal blog-like entries may all be created with a story entry. By default, a story entry provides the ability to post comments.',
  'title_label' => 'Title',
  'body_label' => 'Body',
  'min_word_count' => '0',
  'help' => '',
  'submitagain' => 1,
  'node_options' => 
  array (
    'status' => true,
    'revision' => true,
    'promote' => false,
    'sticky' => false,
  ),
  'language_content_type' => 0,
  'show_preview_changes' => 0,
  'i18n_node' => 1,
  'prepopulate_allowed' => true,
  'i18nsync_nodeapi' => 
  array (
    'author' => false,
    'status' => false,
    'promote' => false,
    'moderate' => false,
    'sticky' => false,
    'revision' => false,
    'parent' => false,
    'taxonomy' => false,
    'comment' => false,
    'field_headers' => false,
    'field_subtitle' => false,
    'field_extended_status' => false,
    'field_source' => false,
    'field_date' => false,
    'field_copyright_template' => false,
    'field_copyright' => false,
  ),
  'old_type' => 'story',
  'orig_type' => 'story',
  'module' => 'node',
  'custom' => '1',
  'modified' => '1',
  'locked' => '0',
  'comment' => 2,
  'comment_default_mode' => 4,
  'comment_default_order' => 1,
  'comment_default_per_page' => 50,
  'comment_controls' => 3,
  'comment_anonymous' => 0,
  'comment_subject_field' => 1,
  'comment_preview' => 1,
  'comment_form_location' => 0,
  'composite_enabled' => false,
  'composite_referenceable_types' => 
  array (
    'copyright' => false,
    'edition' => false,
    'ifimage' => false,
    'media' => false,
    'page' => false,
    'source' => false,
    'story' => false,
  ),
  'composite_advanced_view' => '--',
  'composite_advanced_view_args' => '',
);
$content[fields]  = array (
  0 => 
  array (
    'label' => 'Copyright',
    'field_name' => 'field_copyright_template',
    'type' => 'nodereference',
    'widget_type' => 'nodereference_select',
    'change' => 'Change basic information',
    'weight' => '9',
    'autocomplete_match' => 'contains',
    'description' => '',
    'default_value' => 
    array (
      0 => 
      array (
        'nid' => '12',
      ),
    ),
    'default_value_php' => '',
    'default_value_widget' => NULL,
    'tokenize' => '',
    'group' => false,
    'conditional_fields' => 
    array (
      'field_extended_status' => 'conditional_field_no_value',
    ),
    'required' => 1,
    'multiple' => '0',
    'referenceable_types' => 
    array (
      'copyright' => 'copyright',
      'edition' => 0,
      'ifimage' => 0,
      'media' => 0,
      'page' => 0,
      'source' => 0,
      'story' => 0,
    ),
    'advanced_view' => '--',
    'advanced_view_args' => '',
    'op' => 'Save field settings',
    'module' => 'nodereference',
    'widget_module' => 'nodereference',
    'columns' => 
    array (
      'nid' => 
      array (
        'type' => 'int',
        'unsigned' => true,
        'not null' => false,
      ),
    ),
    'display_settings' => 
    array (
      'weight' => '9',
      'parent' => '',
      'label' => 
      array (
        'format' => 'hidden',
      ),
      'teaser' => 
      array (
        'format' => 'hidden',
        'exclude' => 0,
      ),
      'full' => 
      array (
        'format' => 'hidden',
        'exclude' => 0,
      ),
      4 => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      2 => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      3 => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      'token' => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
    ),
  ),
  1 => 
  array (
    'label' => 'Copyright Computed',
    'field_name' => 'field_copyright',
    'type' => 'computed',
    'widget_type' => 'computed',
    'change' => 'Change basic information',
    'weight' => '12',
    'description' => '',
    'default_value' => 
    array (
    ),
    'default_value_php' => '',
    'tokenize' => '',
    'group' => false,
    'conditional_fields' => 
    array (
      'field_extended_status' => 'conditional_field_no_value',
    ),
    'required' => 0,
    'multiple' => '0',
    'code' => 'global $base_url, $language;

if($node->field_copyright_template[0][nid]) {
  $copyright = node_load($node->field_copyright_template[0][nid]);
}
$copy_years[] = strftime("%Y", $node->created);
$copy_years[] = strftime("%Y", $node->changed);

if ($copy_years[0] == $copy_years[1]) {
  unset($copy_years[1]);
  $copy_years = $copy_years[0];
} else {
  $copy_years = implode(\'-\', $copy_years);
}
$site_name = variable_get(\'site_name\', \'\');
$copy_text = "©  $copy_years <a href=\\"$base_url/$language\\">$site_name</a>. <a href=\\"$base_url/node/" .$copyright->nid .  "\\">" . $copyright->title . "</a>";

$node_field[0][\'value\'] = $copy_text;',
    'display' => 1,
    'display_format' => '$display = $node_field_item[\'value\'];',
    'store' => 1,
    'data_type' => 'varchar',
    'data_length' => '1021',
    'data_default' => '',
    'data_not_NULL' => 0,
    'data_sortable' => 1,
    'op' => 'Save field settings',
    'module' => 'computed_field',
    'widget_module' => 'computed_field',
    'columns' => 
    array (
      'value' => 
      array (
        'type' => 'varchar',
        'length' => '1021',
        'not NULL' => 0,
        'sortable' => 1,
      ),
    ),
    'display_settings' => 
    array (
      'weight' => '10',
      'parent' => '',
      'label' => 
      array (
        'format' => 'hidden',
      ),
      'teaser' => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      'full' => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      4 => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      2 => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      3 => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      'token' => 
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
    ),
  ),
);
$content[extra]  = array (
  'title' => '2',
  'body_field' => '10',
  'menu' => '11',
  'taxonomy' => '5',
  'taxonomy_field_2' => '3',
);

Create Copyright Nodes

Create the first copyright node, just find a name, for example Attribution-Noncommercial-Share Alike 3.0.

Assign Copyright

Go to an already existing node, or create a new node, and apply the relevant copyright. When you view that node it will have a copyright notice like this at its bottom: © 2009 blog.vogol.com. Attribution-Noncommercial-Share Alike 3.0. The site name will be your site name, with a link to the root, and the "Attribution-Noncommercial-Share Alike 3.0" will be linked to the appropriate copyright notice.

Assign Header Link

Also try out my Dublin Core and Header Links computed field code snippet.

Post expansions here

If you decide to add support for retrieving the CC image, adding stuff like "remix of", adding dublin core elements (check out http://creativecommons.org/license/) etc. Share those expansions here.

Limit the range of licences for a user or group of users

Download one of the node access modules (I have no idea which would fit _your_ specific needs) and assign users/content types/roles so that they fit your needs.

Another method is to add yet another field to the Copyright node type, for example a CCK role reference. Then create a view which will list all Copyright nodes which a specific role has the right to use, remember to set the role of the current user as an argument. Then in one of the nodes with Copyright View go to the field and change "Content types that can be referenced:" in "Global options:" to use the view you created instead of the node type, supply the current user's role as the argument.

NOTE: I haven't tried this out (yet), but it seems feasible.

Todo

In the Copyright node type add a field called "Verified Link". In that field insert the generated code from http://creativecommons.org/license. Extract that field in the Copyright View field to show the correct image.

Add some kind of token replacement to the above "verified link" to add specifics about the copyrighted node (not the copyright node) into the link. Mostly because http://creativecommons.org/license creates dublin core meta data into the elements of its links in the generator (if applicable).

Add a field with a link to the original licenses in Copyright, just to fatten the node and make it more user friendly.

Add a field to link to a revision of a node in order to say "this content is based on that node revision under this licence".

Add a field to link to original content on a site outside your own. Add further fields for copyright info of the original.

Add negotiation for the fields mentioned above as well as for the token replacement.

Add tokens in the code?

Requests

Contact me, Paul K Egell-Johnsen, for any suggestions, problems or requests.